• 周年纪念勋章活动已圆满结束,如有已购买但仍未申请的用户,可以通过对应勋章的下载链接申请~

教程 [TabooLib] 从零开始的Bukkit插件开发生活 - 1 初步了解

favicon 拷贝.jpg

引言​

本章会带你初步了解 Minecraft Server 的一些特点 然后带领认识一些专业术语
首先我们由表及里 想象一下一个 “物品 - 苹果” 他在代码中应该是什么样的?
我该如何创建一个苹果并且修改他的名字呢?

简单了解​

  1. 创建一个苹果
代码:
import org.bukkit.Material
import org.bukkit.inventory.ItemStack
// 省略创建类的过程
fun main(){
    val apple = ItemStack(Material.APPLE)
}
很多故事都是从一个苹果开始的...

  1. 修改苹果的名字
代码:
fun main(){
    val apple = ItemStack(Material.APPLE)
apple.modifyMeta<ItemMeta> {
        displayName = "苹果"
}
}
注:这是TabooLib写法 本文后续也只会对TabooLib写法进行讲解 原生Bukkit写法可能不会写

  1. 修改苹果的描述
代码:
apple.modifyLore {
    add("&b这是一个苹果")
    colored()
}
很简单对吧 但是因为我们使用了表达形式的颜色标记符号 & 所以我们需要处理一下 colored()

更多更多​

看吧 经过简单的代码我们已经可以完成创建苹果这一历史性操作了
接下来我将会快速带你了解一下其他的常见元素

先别急着往下看 我们需要一个文档 这里面存放着 BukkitAPI的绝大多数内容
概览 (Spigot-API 1.20-R0.1-SNAPSHOT API 中文文档)

打开网页后让我们继续!
  1. 方块​

我们的方块是储存在世界文件夹内的 world\region 位置(1.12.2) 不同版本多少存在差异
可以看到 这是分了世界(World) 文件夹的 如果熟悉开服 你就会知道多世界是在多个文件夹内
我们可以拙劣的理解为 这个World = World文件夹内的所有内容
那么问题来了 我想放置某个方块应该如何操作呢?
代码:
val world = Bukkit.getWorld("World") ?: return
val blockAt = world.getBlockAt(10, 60, 10)
blockAt.type = Material.DIAMOND_BLOCK
是的 我们只需要 先获取到世界 然后获取到那个位置的方块 然后设置类型 就可以修改这个方块咯
但是 如果我想设置更多内容应该怎么办呢?
例如: 放置一个牌子并设置内容
我们打开网页
Sign (Spigot-API 1.20-R0.1-SNAPSHOT API 中文文档)
asynccode

可以看到 这里有超级接口 那我们就可以找到着手点
代码:
val world = Bukkit.getWorld("World") ?: return
val blockAt = world.getBlockAt(10, 60, 10)
blockAt.type = Material.SIGN
val state = blockAt.state
if (state is Sign) {
state.setLine(0, "&cHello".colored())
state.setLine(1, "&cWorld".colored())
    state.update()
}
是的 我们这样就创建了包含 Hello World 两行的告示牌了!
看不懂也不要着急 我们这个阶段主要是走马观花 了解大概

  1. 坐标​

经过上述我们的方块可以看到 想在游戏中定位到一个坐标 我们最起码需要知道
世界,X,Y,Z 三个参数 是的 我们常规的坐标也只需要这三个参数
代码:
val world = Bukkit.getWorld("World") ?: return
Location(world, 0.0, 0.0, 0.0)
为什么说常规呢?
因为我们的坐标还担任着很多的职务并不只用来规定方块坐标 还要规定实体的坐标
那么既然是实体的坐标 就需要获取到实体的 俯仰角和偏航角
世界中的三维位置,包含x,y,z.除了角度制只能是以度数为单位的限制外, 不对任何角度值施加任何约束. 这意味着负的角度值或大于360°的角度值也是有效的, 但可以将它们转化为其它任何等效的表示.译注:yaw和pitch分别代表自转角(又称偏航角)、旋进角(又称进动角、俯仰角). 两个值一起表示位置的朝向(与向量的概念重合, 本类有很多方法就是与Vector重合的). 这里的翻译分别取偏航角、俯仰角. 另请参见util包下的Vector(向量)、EulerAngle(欧拉角).
来源: Location (Spigot-API 1.20-R0.1-SNAPSHOT API 中文文档)
我们只需要在创建的时候额外增加两个参数就可以啦!
代码:
val world = Bukkit.getWorld("World") ?: return
Location(world, 0.0, 0.0, 0.0,1f,180f)
asynccode

怎么样 是不是看懂了 什么是 构造器

  1. 实体​

在游戏中 实体Entity 不仅仅包含着狭义实体的概念哦(羊,僵尸,末影龙)还包含着更多的实体类型
想知道什么是实体吗?
打开我们的wiki进行查看 org.bukkit.entity (Spigot-API 1.20-R0.1-SNAPSHOT API 中文文档)
是的 包括展示框在内 很多你以为的方块都是实体哦
关于实体的操作我们会在后面进行仔细阐述 这里不进行讲解了

  1. 玩家​

打开我们的doc文档 Player (Spigot-API 1.20-R0.1-SNAPSHOT API 中文文档)
发现 原来 Player 也是 Entity 的一个子实现!
所以 Player可以使用Entity绝大多数的方法

NMS​

在某些版本 服务端这的代码实现都是 net.minecraft.server 包内 所以我们简称为nms
实际上就是服务端底层代码的意思
BukkitAPI 也是封装的服务端底层代码 在开发中难免遇到BukkitAPI没有提供的内容
所以我们就需要通过各种手段操作NMS来实现我们的需求

结语​

综上 你已经对McServer有一个大致的了解了吧 接下来我们就要开始实战了!
不要太激动 让我们循序渐进!
 
内容版权许可
CC BY-NC 署名-非商业性使用

在线会员

  • 邪神龙哥
  • 磐陀石边的小屁孩
  • xiao_mengOvO
  • StarKMyh
  • 萧萧1210p4
  • 若秋
  • 红葵
  • UU_sky
  • 熔金落日
  • LengJingg
  • 醉今朝
  • xfputi
  • shengt99
  • 叶倾仙
  • 例外
  • 常若孤
  • hhbsbb
  • 飞行跳跳虎
  • Troublefuza
  • YouZi Fang
...和 3 更多。
后退
顶部 底部