Mod開(kāi)發(fā)-掉落
今日有人群里提問(wèn),“怎么生成掉落物”。
如果是你,你會(huì)怎么回答他?
如果你不分類討論,直接回答了這個(gè)問(wèn)題,那答案一定是錯(cuò)的。
方塊打碎和實(shí)體打碎都有掉落物;修改自己引入的方塊或?qū)嶓w,與修改原版的又不同。排列組合一下,這就四種情況了。遇到這種情況,最好是問(wèn)清楚他要干什么。
固然,本質(zhì)上掉落物都是EntityItem類的對(duì)象,一個(gè)個(gè)對(duì)應(yīng)著ItemStack的實(shí)體,但是如何找準(zhǔn)修改掉落物的接口,調(diào)用哪些接口生成這些掉落物,是因情況而異的。
先討論那些可以修改原版內(nèi)容的情況。
生物的死亡戰(zhàn)利品,我推薦監(jiān)聽(tīng)LivingDropsEvent事件,往getDrops獲得的list里塞EntityItem。
方塊的摧毀戰(zhàn)利品,我推薦監(jiān)聽(tīng)BlockEvent.HarvestDropsEvent,往getDrops獲得的list里塞ItemStack。
如果是你自己構(gòu)造的新方塊呢?
Block::getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune)
覆寫一下,往drops列表里塞東西。
如果是自己的新實(shí)體呢?
EntityLiving::dropLoot(boolean wasRecentlyHit, int lootingModifier, DamageSource source)?
覆寫一下,調(diào)用EntityLiving::dropItem,這個(gè)參數(shù)傳的是Item,簡(jiǎn)單,但不適合掉落具有復(fù)雜nbt的道具。
或者調(diào)用entityDropItem,這個(gè)參數(shù)傳的是ItemStack,方便掉落具有復(fù)雜nbt的道具。
LootTable這種東西不是不能用,它只是很不方便debug。如果你想用,可以去看其他的教程。