@@ -80,36 +80,24 @@ object OpFallingBlock : SpellAction {
8080 }
8181 }
8282
83- fun canSilkTouch (level : ServerLevel , pos : BlockPos , state : BlockState , harvestTier : Tier , owner : Entity ? ): Boolean {
84- val harvestToolStack: ItemStack = getHarvestToolStack(harvestTier, state)
85- if (harvestToolStack.isEmpty) {
86- return false
87- }
88- harvestToolStack.enchant(level.holderLookup(Registries .ENCHANTMENT ).getOrThrow(Enchantments .SILK_TOUCH ), 1 )
89- val drops: List <ItemStack > = Block .getDrops(state, level, pos, null , owner, harvestToolStack)
90- val blockItem: Item = state.block.asItem()
91- return drops.any { s -> s.item == = blockItem }
92- }
93-
9483 companion object {
95- fun getHarvestToolStack (harvestTier : Tier , state : BlockState ): ItemStack {
96- return getTool(harvestTier, state).copy()
84+ fun canSilkTouch (level : ServerLevel , pos : BlockPos , state : BlockState , harvestTier : Tier , owner : Entity ? ): Boolean {
85+ // need to use .copy() here or the stack in HARVEST_TOOLS_BY_TIER will get enchanted
86+ val harvestToolStack: ItemStack = getTool(harvestTier, state).copy()
87+ if (harvestToolStack.isEmpty) return false
88+ harvestToolStack.enchant(level.holderLookup(Registries .ENCHANTMENT ).getOrThrow(Enchantments .SILK_TOUCH ), 1 )
89+ val drops: List <ItemStack > = Block .getDrops(state, level, pos, null , owner, harvestToolStack)
90+ val blockItem: Item = state.block.asItem()
91+ return drops.any { s -> s.item == = blockItem }
9792 }
9893
9994 private fun getTool (harvestTier : Tier , state : BlockState ): ItemStack {
100- if (harvestTier !in HARVEST_TOOLS_BY_LEVEL .keys) return ItemStack .EMPTY
101- if (! state.requiresCorrectToolForDrops()) {
102- return HARVEST_TOOLS_BY_LEVEL [harvestTier]!! [0 ]
103- }
104- for (tool in HARVEST_TOOLS_BY_LEVEL [harvestTier]!! ) {
105- if (tool.isCorrectToolForDrops(state)) {
106- return tool
107- }
108- }
109- return ItemStack .EMPTY
95+ val toolsForTier = HARVEST_TOOLS_BY_TIER .getOrElse(harvestTier) { return ItemStack .EMPTY }
96+ if (! state.requiresCorrectToolForDrops()) return toolsForTier[0 ]
97+ return toolsForTier.firstOrNull { it.isCorrectToolForDrops(state) } ? : ItemStack .EMPTY
11098 }
11199
112- private val HARVEST_TOOLS_BY_LEVEL : Map <Tier , List <ItemStack >> = mapOf (
100+ private val HARVEST_TOOLS_BY_TIER : Map <Tier , List <ItemStack >> = mapOf (
113101 Tiers .WOOD to stacks(Items .WOODEN_PICKAXE , Items .WOODEN_AXE , Items .WOODEN_HOE , Items .WOODEN_SHOVEL ),
114102 Tiers .STONE to stacks(Items .STONE_PICKAXE , Items .STONE_AXE , Items .STONE_HOE , Items .STONE_SHOVEL ),
115103 Tiers .IRON to stacks(Items .IRON_PICKAXE , Items .IRON_AXE , Items .IRON_HOE , Items .IRON_SHOVEL ),
0 commit comments