Fix tool check (Fixes #1421)

This commit is contained in:
Mrbysco 2024-10-22 22:33:33 +02:00
parent 16cd3a6966
commit e91c1569ee
3 changed files with 8 additions and 4 deletions

View file

@ -21,11 +21,13 @@ import net.minecraft.core.HolderLookup;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.MenuProvider;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
@ -102,7 +104,7 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements MenuPr
}
private void doWork() {
Direction side = WorldUtil.getDirectionByPistonRotation(this.level.getBlockState(this.worldPosition));
Direction side = WorldUtil.getDirectionByPistonRotation(getBlockState());
BlockPos breakCoords = this.worldPosition.relative(side);
BlockState stateToBreak = this.level.getBlockState(breakCoords);
Block blockToBreak = stateToBreak.getBlock();
@ -110,6 +112,7 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements MenuPr
if (!this.isPlacer && blockToBreak != Blocks.AIR && stateToBreak.getDestroySpeed(this.level, breakCoords) >= 0.0F) {
List<ItemStack> drops = Block.getDrops(stateToBreak, (ServerLevel) this.level, breakCoords, this.level.getBlockEntity(breakCoords));
FakePlayer fake = FakePlayerFactory.getMinecraft((ServerLevel) this.level);
fake.getInventory().items.set(fake.getInventory().selected, Items.NETHERITE_PICKAXE.getDefaultInstance());
if (stateToBreak.canHarvestBlock(this.level, breakCoords, fake)) { //TODO might double check this is right mikey
if (StackUtil.canAddAll(this.inv, drops, false)) {
this.level.destroyBlock(breakCoords, false);

View file

@ -95,7 +95,7 @@ public class TileEntityLongRangeBreaker extends TileEntityInventoryBase implemen
private void doWork() {
if (this.storage.getEnergyStored() >= ENERGY_USE * RANGE) {
BlockState state = this.level.getBlockState(this.worldPosition);
BlockState state = getBlockState();
Direction sideToManipulate = WorldUtil.getDirectionByPistonRotation(state);
for (int i = 0; i < RANGE; i++) {

View file

@ -30,6 +30,7 @@ import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
@ -138,13 +139,13 @@ public class TileEntityVerticalDigger extends TileEntityInventoryBase implements
: 1);
if (this.storage.getEnergyStored() >= actualUse) {
BlockPos pos = new BlockPos(this.worldPosition.getX() + this.checkX, this.checkY, this.worldPosition.getZ() + this.checkZ);
ItemStack fakePickaxe = Items.NETHERITE_PICKAXE.getDefaultInstance();
BlockState state = this.level.getBlockState(pos);
Block block = state.getBlock();
ItemStack stack = block.getCloneItemStack(state, new BlockHitResult(new Vec3(0, 0, 0), Direction.DOWN, pos, false), this.level, pos, FakePlayerFactory.getMinecraft((ServerLevel) this.level));
if (!state.isAir()) {
//block.getHarvestLevel(state) <= DrillItem.HARVEST_LEVEL
if (stack.isCorrectToolForDrops(state) && state.getDestroySpeed(this.level, pos) >= 0F && this.isMinable(state, stack)) {
if (fakePickaxe.isCorrectToolForDrops(state) && state.getDestroySpeed(this.level, pos) >= 0F && this.isMinable(state, stack)) {
List<ItemStack> drops = Block.getDrops(state, (ServerLevel) this.level, pos, this.level.getBlockEntity(pos));
float chance = WorldUtil.fireFakeHarvestEventsForDropChance(this, drops, this.level, pos);