Bukkit的熔炉

Bukkit的熔炉

Bukkit的熔炉 最近在写Bukkit插件,用到了熔炉相关的方法,遇到一些的坑在这里记录一下 事件 Bukkit有三个熔炉事件: FurnaceBurnEvent FurnaceSmeltEvent FurnaceExtractEvent 第一个FurnaceBurnEvent,在熔炉开始烧东西的

Bukkit的熔炉

最近在写Bukkit插件,用到了熔炉相关的方法,遇到一些的坑在这里记录一下

事件

Bukkit有三个熔炉事件:

  • FurnaceBurnEvent

  • FurnaceSmeltEvent

  • FurnaceExtractEvent

第一个FurnaceBurnEvent,在熔炉开始烧东西的时候触发,可以获取熔炉当前的燃料ItemStack,可以获取/设置燃料剩余量,设置是否燃烧(燃料剩余量是 burnTime ,设置成0就是不燃烧),但是没有办法获取燃烧的物品和烧出来之后的物品

第二个FurnaceSmeltEvent ,在熔炉烧完之后触发,可以获取熔炉当前燃烧的物品和燃烧之后的物品ItemStack。没有办法获取燃料

第三个FurnaceExtractEvent ,在玩家拿去熔炉内的东西时触发,没什么好说的

FurnaceBurnEvent和FurnaceSmeltEvent比较蛋疼,没有一个办法能同时获取燃料和物品的。想要获取所有的话就得用Furnace这个Block了。这两个事件都继承 BlockEvent ,可以通过getBlock()获取熔炉的方块。

获取方法如下:

(Furnace) furnace = (Furnace) e.getBlock().getState();
furnace.getInventory();

这个方法就可以获取furnace的inventory了,但是还是有几个坑

方块

方块方面也有几个坑,接上文

  1. furnace有两个inventory, 一个是inventory, 一个是snapshotInventory。后者类似于一个快照,但是我也不知道他们俩到底有啥差别。坑就坑在你想要在事件里修改熔炉里的东西时,设置inventory好像没有效果,要设置snapshotInventory(别的情况可能也会有不同)

  2. 修改完熔炉要更新,用代码 furnace.update()

  3. 强转要用 getBlock().getState() 获取的BlockState 对象强转,不能直接强转 Block 对象,会报错

LICENSED UNDER CC BY-NC-SA 4.0
Comment