1.1.注册事件
先新建一个类,这里我取名为EventListener
,同时也提供接口Listener
。
import org.bukkit.event.Listener;public class EventListener implements Listener {}
回到我们的主类,我们需要告知 Bukkit 这是一个监听类,所以我们需要注册这个类:
Bukkit.getPluginManager().registerEvents(new EventListener(), this);
1.2.监听事件
注册完成后,我们就需要一些监听事件的方法了。对于这些方法,我们需要为他们打上注解:EventHandler
,告知 Bukkit 这是个监听方法。
import org.bukkit.event.EventHandler;@EventHandler
public void xxx(xxx e) {//TODO
}
我们需要监听什么,并不取决于方法名,而是参数的类型,比如下面的方法:
@EventHandler
public void onPLayerDeath(PlayerLoginEvent event) {//TODO
}
参数event
的类型是PlayerLoginEvent
,说明这个方法是用来监听玩家登录的,而不是如方法名所述监听玩家死亡。
event
有什么用呢?我们可以用它来获取一些相关的东西,比如上面的代码,我们可以通过event
来获取登录的玩家:
@EventHandler
public void onPLayerDeath(PlayerLoginEvent event) {Player player = event.getPlayer();player.sendMessage("Welcome!");
}
如上,这样我们就可以为玩家发送欢迎的消息。当然,我们还可以取消这些事件,比如我们可以监听玩家上床,这样当玩家睡觉时,我们可以取消这一事件让他醒来。
@EventHandler
public void onPlayerGetOnBed(PlayerBedEnter event) {//取消玩家上床event.setCancelled(true);
}
至于更多的监听事件,可以自行去翻阅 bukkit 文档。
1.1.附魔
我们可以为物品进行附魔。
boolean addEnchant(@NotNull Enchantment var1, int var2, boolean var3);
addEnchant
方法可以为物品进行附魔,来看看它的三个参数。第一个参数表明了需要附魔什么,Enchantment
是一个枚举类。第二个参数表示附魔的等级。第三个参数表示是否忽略附魔的等级限制,不同的附魔会有不同的等级限制,如“锋利”等级限制为 VVV,而“耐久”等级限制为 IIIIIIIII。
ItemStack hello = new ItemStack(Material.DIAMOND_SWORD);
ItemMeta im = hello.getItemMeta();
im.addEnchant(Enchantment.DAMAGE_ALL, 32767, true);
hello.setItemMeta(im);
千万不要忘了到最后一步要设置itemMeta
!
1.2.Lore
我们可以为物品添加一些Lore
(?你可以把Lore
当成物品的介绍,Bukkit 文档并没有翻译Lore
)。
void setLore(@Nullable List var1);
只有一个参数。里面存放的是物品Lore
的String
,一个String
代表一行。
List a = new ArrayList<>();
a.add("Hello World!");
a.add("dlroW olleH!");im.setLore(a);
千万不要忘了到最后一步要设置itemMeta
!
1.3.属性
我们可以设置一个物品的属性。
boolean addAttributeModifier(@NotNull Attribute var1, @NotNull AttributeModifier var2);
addAttributeModifier
方法可以为物品添加或修改属性,第一个参数是个枚举类,列举了物品的属性,第二个参数是属性的修饰符(Bukkit 文档是这么定义的),来看看它的其中一个构造方法:
public AttributeModifier(@NotNull UUID uuid, @NotNull String name, double amount, @NotNull Operation operation, @Nullable EquipmentSlot slot);
一共五个参数,我们一个一个来看:
uuid
:这个修饰符的标识。name
:这个修饰符的名称(内部名)。amount
:修饰的值。operation
:运算模式。slot
:修饰符生效的槽位,比如放在主手生效、副手生效,等等。(Bukkit 文档的汉化一言难尽。)
说得更加通俗一些,有些物品(如靴子、剑、稿)会有它自己的属性(如疾跑、攻击伤害)等。这些属性都有它自己的一个值(即amount
),现在添加(或修改)属性,可以选择(或修改)它的运算模式(即operation
)或属性生效的槽位(即slot
)。
运算模式(operation
)只有三种(xxx 为参数amount
值):
ADD_NUMBER
:直接在原本的修饰值基础上增加一个 xxx。ADD_SCALAR
:原修饰值将乘上 xxx,就相当于打折。MULTIPLY_SCALAR_1
: xxx 加上 111 后再乘上原修饰值,如当 xxx 取 0.20.20.2 时相当于 1.21.21.2 倍。ItemStack hello = new ItemStack(Material.DIAMOND_SWORD);
ItemMeta im = hello.getItemMeta();
im.addAttributeModifier(Attribute.GENERIC_ATTACK_KNOCKBACK, new AttributeModifier(UUID.randomUUID(), "击退力度", 4.0, AttributeModifier.Operation.ADD_SCALAR));
hello.setItemMeta(im);
如上代码,我们给钻石剑增加一个「攻击击退力度」,是原本的 444 倍。
这样,结合以上所有代码,我们可以监听玩家的登录事件,并在登录时给予玩家一个拥有附魔和击退力度的钻石剑。
上一篇:我的世界Bukkit服务器插件开发教程(十一)粒子、药水效果与音效
下一篇:我的世界Bukkit服务器插件开发教程(十三)资源包与玩家资料