Skip to content

Commit 4bde378

Browse files
committed
Streamline canSilkTouch a little
1 parent 40a5aa8 commit 4bde378

1 file changed

Lines changed: 12 additions & 24 deletions

File tree

  • Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells

Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpFallingBlock.kt

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)