欢迎光临散文网 会员登陆 & 注册

Mod开发-掉落

2022-03-15 22:49 作者:道家深湖  | 我要投稿

今日有人群里提问,“怎么生成掉落物”。

如果是你,你会怎么回答他?


如果你不分类讨论,直接回答了这个问题,那答案一定是错的。

方块打碎和实体打碎都有掉落物;修改自己引入的方块或实体,与修改原版的又不同。排列组合一下,这就四种情况了。遇到这种情况,最好是问清楚他要干什么。

固然,本质上掉落物都是EntityItem类的对象,一个个对应着ItemStack的实体,但是如何找准修改掉落物的接口,调用哪些接口生成这些掉落物,是因情况而异的。

先讨论那些可以修改原版内容的情况。

生物的死亡战利品,我推荐监听LivingDropsEvent事件,往getDrops获得的list里塞EntityItem。

方块的摧毁战利品,我推荐监听BlockEvent.HarvestDropsEvent,往getDrops获得的list里塞ItemStack。


如果是你自己构造的新方块呢?

Block::getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune)

覆写一下,往drops列表里塞东西。


如果是自己的新实体呢?

EntityLiving::dropLoot(boolean wasRecentlyHit, int lootingModifier, DamageSource source) 

覆写一下,调用EntityLiving::dropItem,这个参数传的是Item,简单,但不适合掉落具有复杂nbt的道具。

或者调用entityDropItem,这个参数传的是ItemStack,方便掉落具有复杂nbt的道具。

LootTable这种东西不是不能用,它只是很不方便debug。如果你想用,可以去看其他的教程。


Mod开发-掉落的评论 (共 条)

分享到微博请遵守国家法律