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了,但是还是有几个坑
方块
方块方面也有几个坑,接上文
furnace有两个inventory, 一个是inventory, 一个是snapshotInventory。后者类似于一个快照,但是我也不知道他们俩到底有啥差别。坑就坑在你想要在事件里修改熔炉里的东西时,设置inventory好像没有效果,要设置snapshotInventory(别的情况可能也会有不同)
修改完熔炉要更新,用代码
furnace.update()
强转要用
getBlock().getState()
获取的BlockState
对象强转,不能直接强转Block
对象,会报错