diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/DrillItem.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/DrillItem.java index de9e72fa8..43be7ed5c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/DrillItem.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/DrillItem.java @@ -17,8 +17,6 @@ import de.ellpeck.actuallyadditions.mod.config.CommonConfig; import de.ellpeck.actuallyadditions.mod.inventory.ContainerDrill; import de.ellpeck.actuallyadditions.mod.items.base.ItemEnergy; import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerAA; -import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -40,13 +38,10 @@ import net.minecraft.world.item.Tiers; import net.minecraft.world.item.component.ItemAttributeModifiers; import net.minecraft.world.item.component.ItemContainerContents; import net.minecraft.world.item.context.UseOnContext; -import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.HitResult; -import net.neoforged.neoforge.common.CommonHooks; import net.neoforged.neoforge.common.ItemAbilities; import net.neoforged.neoforge.common.ItemAbility; import net.neoforged.neoforge.items.IItemHandler; @@ -217,42 +212,42 @@ public class DrillItem extends ItemEnergy { : 0.1F; } - @Override - public boolean onBlockStartBreak(@Nonnull ItemStack stack, @Nonnull BlockPos pos, @Nonnull Player player) { - boolean toReturn = false; - int use = this.getEnergyUsePerBlock(stack); - if (this.getEnergyStored(stack) >= use) { - //Enchants the Drill depending on the Upgrades it has - if (this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.SILK_TOUCH)) { - ItemUtil.addEnchantment(stack, Enchantments.SILK_TOUCH, 1); - } else { - if (this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.FORTUNE)) { - ItemUtil.addEnchantment(stack, Enchantments.BLOCK_FORTUNE, this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.FORTUNE_II) - ? 3 - : 1); - } - } - //Block hit - HitResult ray = player.pick(Util.getReachDistance(player), 1f, false); - if (ray instanceof BlockHitResult trace) { - //Breaks the Blocks - if (!player.isShiftKeyDown() && this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.THREE_BY_THREE)) { - if (this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.FIVE_BY_FIVE)) { - toReturn = this.breakBlocks(stack, 2, player.level(), pos, trace.getDirection(), player); - } else { - toReturn = this.breakBlocks(stack, 1, player.level(), pos, trace.getDirection(), player); - } - } else { - toReturn = this.breakBlocks(stack, 0, player.level(), pos, trace.getDirection(), player); - } - - //Removes Enchantments added above - ItemUtil.removeEnchantment(stack, Enchantments.SILK_TOUCH); - ItemUtil.removeEnchantment(stack, Enchantments.BLOCK_FORTUNE); - } - } - return toReturn; - } + // @Override TODO: Check if CommonEvents.onBlockBreaking works +// public boolean onBlockStartBreak(@Nonnull ItemStack stack, @Nonnull BlockPos pos, @Nonnull Player player) { +// boolean toReturn = false; +// int use = this.getEnergyUsePerBlock(stack); +// if (this.getEnergyStored(stack) >= use) { +// //Enchants the Drill depending on the Upgrades it has +// if (this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.SILK_TOUCH)) { +// ItemUtil.addEnchantment(stack, Enchantments.SILK_TOUCH, 1); +// } else { +// if (this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.FORTUNE)) { +// ItemUtil.addEnchantment(stack, Enchantments.BLOCK_FORTUNE, this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.FORTUNE_II) +// ? 3 +// : 1); +// } +// } +// //Block hit +// HitResult ray = player.pick(Util.getReachDistance(player), 1f, false); +// if (ray instanceof BlockHitResult trace) { +// //Breaks the Blocks +// if (!player.isShiftKeyDown() && this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.THREE_BY_THREE)) { +// if (this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.FIVE_BY_FIVE)) { +// toReturn = this.breakBlocks(stack, 2, player.level(), pos, trace.getDirection(), player); +// } else { +// toReturn = this.breakBlocks(stack, 1, player.level(), pos, trace.getDirection(), player); +// } +// } else { +// toReturn = this.breakBlocks(stack, 0, player.level(), pos, trace.getDirection(), player); +// } +// +// //Removes Enchantments added above +// ItemUtil.removeEnchantment(stack, Enchantments.SILK_TOUCH); +// ItemUtil.removeEnchantment(stack, Enchantments.BLOCK_FORTUNE); +// } +// } +// return toReturn; +// } /* @Override //TODO old one public boolean isCorrectToolForDrops(ItemStack stack, BlockState state) { @@ -544,7 +539,7 @@ public class DrillItem extends ItemEnergy { Block block = state.getBlock(); float hardness = state.getDestroySpeed(world, pos); - boolean canHarvest = (CommonHooks.isCorrectToolForDrops(state, player) || this.isCorrectToolForDrops(stack, state)) && (!isExtra || this.getDestroySpeed(stack, world.getBlockState(pos)) > 1.0F); + boolean canHarvest = (player.hasCorrectToolForDrops(state) || this.isCorrectToolForDrops(stack, state)) && (!isExtra || this.getDestroySpeed(stack, world.getBlockState(pos)) > 1.0F); if (hardness >= 0.0F && (!isExtra || canHarvest && !state.hasBlockEntity())) { if (!player.isCreative()) { this.extractEnergyInternal(stack, use, false); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/DefaultFarmerBehavior.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/DefaultFarmerBehavior.java index f19350538..e4f0d08f2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/DefaultFarmerBehavior.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/DefaultFarmerBehavior.java @@ -38,6 +38,7 @@ import net.minecraft.world.level.storage.loot.LootParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.Vec3; import net.neoforged.neoforge.common.SpecialPlantable; +import net.neoforged.neoforge.common.Tags; import net.neoforged.neoforge.common.util.FakePlayerFactory; import java.util.ArrayList; @@ -76,8 +77,17 @@ public class DefaultFarmerBehavior implements IFarmerBehavior { public FarmerResult tryPlantSeed(ItemStack seed, Level world, BlockPos pos, IFarmer farmer) { int use = 350; if (farmer.getEnergy() >= use * 2) { - if (defaultPlant(world, pos, this.getPlantablePlantFromStack(seed, world, pos), farmer, use)) { + var plantable = getPlantableFromStack(seed); //TODO: Should figure out what else to call in here (Farmland stuff etc) + if (plantable != null && plantable.canPlacePlantAtPosition(seed, world, pos, Direction.DOWN)) { + plantable.spawnPlantAtPosition(seed, world, pos, Direction.DOWN); + farmer.extractEnergy(use); return FarmerResult.SUCCESS; + } else { + if (seed.is(Tags.Items.SEEDS) && seed.getItem() instanceof BlockItem blockItem) { + if (defaultPlant(world, pos, blockItem.getBlock().defaultBlockState(), farmer, use)) { + return FarmerResult.SUCCESS; + } + } } } return FarmerResult.FAIL; @@ -147,19 +157,6 @@ public class DefaultFarmerBehavior implements IFarmerBehavior { return 0; } - private BlockState getPlantablePlantFromStack(ItemStack stack, Level world, BlockPos pos) { - if (!stack.isEmpty()) { - SpecialPlantable plantable = this.getPlantableFromStack(stack); - if (plantable != null) { - BlockState state = plantable.getPlantType(world, pos); - if (state != null && state.getBlock() instanceof BonemealableBlock) { - return state; - } - } - } - return null; - } - private SpecialPlantable getPlantableFromStack(ItemStack stack) { Item item = stack.getItem(); if (item instanceof SpecialPlantable plantable) { diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/NetherWartFarmerBehavior.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/NetherWartFarmerBehavior.java index de40393ce..5ee099245 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/NetherWartFarmerBehavior.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/NetherWartFarmerBehavior.java @@ -37,7 +37,7 @@ public class NetherWartFarmerBehavior implements IFarmerBehavior { int use = 500; if (farmer.getEnergy() >= use) { if (seed.getItem() == Items.NETHER_WART) { - if (world.getBlockState(pos.below()).getBlock().canSustainPlant(world.getBlockState(pos.below()), world, pos.below(), Direction.UP, (IPlantable) Items.NETHER_WART)) { + if (world.getBlockState(pos.below()).getBlock().canSustainPlant(world.getBlockState(pos), world, pos.below(), Direction.UP, Blocks.NETHER_WART.defaultBlockState()).isTrue()) { world.setBlock(pos, Blocks.NETHER_WART.defaultBlockState(), 2); farmer.extractEnergy(use); return FarmerResult.SUCCESS;