diff --git a/src/main/java/thaumic/tinkerer/common/block/BlockAnimationTablet.java b/src/main/java/thaumic/tinkerer/common/block/BlockAnimationTablet.java index 49cabe3c..0ed15539 100644 --- a/src/main/java/thaumic/tinkerer/common/block/BlockAnimationTablet.java +++ b/src/main/java/thaumic/tinkerer/common/block/BlockAnimationTablet.java @@ -147,9 +147,10 @@ public class BlockAnimationTablet extends BlockModContainer { boolean on = (meta & 8) != 0; if (power && !on) { - par1World.scheduleBlockUpdate(par2, par3, par4, this, tickRate(par1World)); par1World.setBlockMetadataWithNotify(par2, par3, par4, meta | 8, 4); - } else if (!power && on) par1World.setBlockMetadataWithNotify(par2, par3, par4, meta & 7, 4); + } else if (!power && on) { + par1World.setBlockMetadataWithNotify(par2, par3, par4, meta & 7, 4); + } } @Override @@ -157,16 +158,6 @@ public class BlockAnimationTablet extends BlockModContainer { return 1; } - @Override - public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random) { - TileEntity tile = par1World.getTileEntity(par2, par3, par4); - if (tile instanceof TileAnimationTablet tablet) { - if (tablet.redstone && tablet.isIdle()) { - tablet.initiateSwing(); - } - } - } - @Override public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9) { diff --git a/src/main/java/thaumic/tinkerer/common/block/tile/tablet/TileAnimationTablet.java b/src/main/java/thaumic/tinkerer/common/block/tile/tablet/TileAnimationTablet.java index 819c7e69..1362c596 100644 --- a/src/main/java/thaumic/tinkerer/common/block/tile/tablet/TileAnimationTablet.java +++ b/src/main/java/thaumic/tinkerer/common/block/tile/tablet/TileAnimationTablet.java @@ -16,10 +16,14 @@ import java.util.List; import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemHoe; +import net.minecraft.item.ItemRedstone; import net.minecraft.item.ItemReed; +import net.minecraft.item.ItemSeeds; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; @@ -157,10 +161,17 @@ public class TileAnimationTablet extends TileEntity implements IInventory, IMova worldManager.tryHarvestBlock(hit.blockX, hit.blockY, hit.blockZ); } } - - if (isIdle() && hit != null && (!redstone || isBreaking)) { + if (isIdle() && hit != null) { + if (redstone && !isBreaking) { + boolean power = worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord) + || worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord + 1, zCoord); + if (!power) { + return; + } + } + Block block = worldObj.getBlock(hit.blockX, hit.blockY, hit.blockZ); if (hit.typeOfHit == MovingObjectPosition.MovingObjectType.MISS - && (leftClick || !canPlaceItem(stack))) { + && (leftClick || !canUseItem(stack, block))) { return; } initiateSwing(); @@ -183,9 +194,15 @@ public class TileAnimationTablet extends TileEntity implements IInventory, IMova } } - private boolean canPlaceItem(ItemStack stack) { + private boolean canUseItem(ItemStack stack, Block block) { final Item item = stack.getItem(); - return item instanceof ItemBlock || item instanceof ItemReed; + if (item instanceof ItemBlock || item instanceof ItemReed || item instanceof ItemSeeds) { + return true; + } + if (item instanceof ItemRedstone) { + return true; + } + return item instanceof ItemHoe && (block == Blocks.dirt || block == Blocks.grass); } @Override @@ -327,9 +344,8 @@ public class TileAnimationTablet extends TileEntity implements IInventory, IMova position.yCoord = yCoord + 0.5f; position.zCoord = zCoord + 0.5f; if (!worldObj.isAirBlock(x, y, z)) { - block.setBlockBoundsBasedOnState(worldObj, x, y, z); - AxisAlignedBB aabb = block.getCollisionBoundingBoxFromPool(worldObj, x, y, z); - if (aabb != null) { + AxisAlignedBB aabb = getBlockBoundingBox(block, x, y, z); + if (block.canCollideCheck(worldObj.getBlockMetadata(x, y, z), false)) { hit = block.collisionRayTrace(worldObj, x, y, z, position, getMiddleOfAABB(aabb)); } } @@ -375,9 +391,8 @@ public class TileAnimationTablet extends TileEntity implements IInventory, IMova y--; if (!worldObj.isAirBlock(x, y, z)) { block = worldObj.getBlock(x, y, z); - block.setBlockBoundsBasedOnState(worldObj, x, y, z); - AxisAlignedBB aabb = block.getCollisionBoundingBoxFromPool(worldObj, x, y, z); - if (aabb != null) { + if (block.canCollideCheck(worldObj.getBlockMetadata(x, y, z), false)) { + AxisAlignedBB aabb = getBlockBoundingBox(block, x, y, z); Vec3 vec = getMiddleOfAABB(aabb); vec.yCoord = (aabb.maxY - y); hit = new MovingObjectPosition(x, y, z, ForgeDirection.UP.ordinal(), vec, false); @@ -388,6 +403,16 @@ public class TileAnimationTablet extends TileEntity implements IInventory, IMova return hit; } + private AxisAlignedBB getBlockBoundingBox(Block block, int x, int y, int z) { + return AxisAlignedBB.getBoundingBox( + x + block.getBlockBoundsMinX(), + y + block.getBlockBoundsMinY(), + z + block.getBlockBoundsMinZ(), + x + block.getBlockBoundsMaxX(), + y + block.getBlockBoundsMaxY(), + z + block.getBlockBoundsMaxZ()); + } + private Vec3 getMiddleOfAABB(AxisAlignedBB aabb) { tempVec.xCoord = (aabb.minX + aabb.maxX) / 2f; tempVec.yCoord = (aabb.minY + aabb.maxY) / 2f;