Posted July 7, 20187 yr Hi guys, I don't know why but my code doesn't work. Thw autodrill should dig a 3x3 area. But when i activate the block to the south or north the block dig a 1x3 area. And when to the up or down dig a cross. But work correctly if i look at west or east. Someone can help me? This is the AutoDrill class public class AutoDrill2 extends Block { private final String name = "autodrill2"; public AutoDrill2() { super(Material.IRON); this.setRegistryName(this.name); this.setUnlocalizedName(this.name); this.setResistance(2.0F); this.setHardness(5.0F); this.setHarvestLevel("pickaxe", 0); } @Override public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { BlockPos newPos = getPos(pos, facing); worldIn.destroyBlock(pos, false); BlockPos[] p = new BlockPos[9]; p = initPositions(p, newPos, facing); for (int i = 0; i < 64; i++) { for (int j = 0; j < p.length; j++) { if (worldIn.getBlockState(p[j]).getBlock() == Blocks.BEDROCK) continue; worldIn.destroyBlock(p[j], true); p[j] = getPos(p[j], facing); } } return super.onBlockActivated(worldIn, pos, state, playerIn, hand, facing, hitX, hitY, hitZ); } private BlockPos[] initPositions(BlockPos[] pos, BlockPos center, EnumFacing facing) { pos[0] = center; pos[1] = center.up(); pos[2] = center.down(); switch (facing) { case DOWN: { pos[1] = new BlockPos(center.getX() + 1, center.getY(), center.getZ()); pos[2] = new BlockPos(center.getX() - 1, center.getY(), center.getZ()); pos[3] = new BlockPos(center.getX(), center.getY(), center.getZ() + 1); pos[4] = new BlockPos(center.getX(), center.getY(), center.getZ() - 1); pos[5] = new BlockPos(center.getX() + 1, center.getY(), center.getZ() + 1); pos[6] = new BlockPos(center.getX() + 1, center.getY(), center.getZ() - 1); pos[7] = new BlockPos(center.getX() - 1, center.getY(), center.getZ() + 1); pos[8] = new BlockPos(center.getX() - 1, center.getY(), center.getZ() - 1); } case UP: { pos[1] = new BlockPos(center.getX() + 1, center.getY(), center.getZ()); pos[2] = new BlockPos(center.getX() - 1, center.getY(), center.getZ()); pos[3] = new BlockPos(center.getX() + 1, center.getY(), center.getZ() + 1); pos[4] = new BlockPos(center.getX() + 1, center.getY(), center.getZ() - 1); pos[5] = new BlockPos(center.getX() - 1, center.getY(), center.getZ() + 1); pos[6] = new BlockPos(center.getX() - 1, center.getY(), center.getZ() - 1); pos[7] = new BlockPos(center.getX(), center.getY(), center.getZ() + 1); pos[8] = new BlockPos(center.getX(), center.getY(), center.getZ() - 1); } case NORTH: { pos[3] = new BlockPos(center.getX() + 1, center.getY(), center.getZ()); pos[4] = new BlockPos(center.getX() - 1, center.getY(), center.getZ()); pos[5] = new BlockPos(center.getX() + 1, center.getY() + 1, center.getZ()); pos[6] = new BlockPos(center.getX() + 1, center.getY() - 1, center.getZ()); pos[7] = new BlockPos(center.getX() - 1, center.getY() + 1, center.getZ()); pos[8] = new BlockPos(center.getX() - 1, center.getY() - 1, center.getZ()); } case SOUTH: { pos[3] = new BlockPos(center.getX() + 1, center.getY(), center.getZ()); pos[4] = new BlockPos(center.getX() - 1, center.getY(), center.getZ()); pos[5] = new BlockPos(center.getX() + 1, center.getY() + 1, center.getZ()); pos[6] = new BlockPos(center.getX() + 1, center.getY() - 1, center.getZ()); pos[7] = new BlockPos(center.getX() - 1, center.getY() + 1, center.getZ()); pos[8] = new BlockPos(center.getX() - 1, center.getY() - 1, center.getZ()); } case EAST: { pos[3] = new BlockPos(center.getX(), center.getY(), center.getZ() + 1); pos[4] = new BlockPos(center.getX(), center.getY(), center.getZ() - 1); pos[5] = new BlockPos(center.getX(), center.getY() + 1, center.getZ() + 1); pos[6] = new BlockPos(center.getX(), center.getY() - 1, center.getZ() + 1); pos[7] = new BlockPos(center.getX(), center.getY() + 1, center.getZ() - 1); pos[8] = new BlockPos(center.getX(), center.getY() - 1, center.getZ() - 1); } case WEST: { pos[3] = new BlockPos(center.getX(), center.getY(), center.getZ() + 1); pos[4] = new BlockPos(center.getX(), center.getY(), center.getZ() - 1); pos[5] = new BlockPos(center.getX(), center.getY() + 1, center.getZ() + 1); pos[6] = new BlockPos(center.getX(), center.getY() - 1, center.getZ() + 1); pos[7] = new BlockPos(center.getX(), center.getY() + 1, center.getZ() - 1); pos[8] = new BlockPos(center.getX(), center.getY() - 1, center.getZ() - 1); } } return pos; } private BlockPos getPos(BlockPos pos, EnumFacing facing) { switch (facing) { case DOWN: { return pos.up(); } case UP: { return pos.down(); } case NORTH: { return pos.south(); } case SOUTH: { return pos.north(); } case EAST: { return pos.west(); } case WEST: { return pos.east(); } } throw new IllegalArgumentException("Invalid Facing " + facing.name()); } } Edited July 8, 20187 yr by Yurim64
July 8, 20187 yr Author Ok, I update the code but it doesn't work anyway Thi is the new class public class CoalDrillTileEntity extends TileEntity implements ITickable { private int cooldown; private String customName; private ItemStackHandler handler; private boolean isFinished; private EnumFacing facing; private int index = 0; public CoalDrillTileEntity() { this.cooldown = 0; this.customName = "Coal Drill T.1"; this.isFinished = false; this.facing = EnumFacing.DOWN; this.handler = new ItemStackHandler(1); } @Override public void readFromNBT(NBTTagCompound nbt) { this.cooldown = nbt.getInteger("Cooldown"); this.customName = nbt.getString("CustomName"); this.isFinished = nbt.getBoolean("Is Finished"); this.handler.deserializeNBT(nbt.getCompoundTag("ItemStackHandler")); super.readFromNBT(nbt); } @Override public NBTTagCompound writeToNBT(NBTTagCompound nbt) { nbt.setInteger("Cooldown", cooldown); nbt.setBoolean("Is Finished", isFinished); nbt.setString("CustomName", customName); nbt.setTag("ItemStackHandler", handler.serializeNBT()); return super.writeToNBT(nbt); } public String getCustomName() { return customName; } public void setCustomName(String customName) { this.customName = customName; } @Override public void update() { if (!this.world.isRemote && !isFinished) { this.cooldown++; this.cooldown %= 100; if (this.cooldown == 0 && this.getCoal() > 0) { BlockPos pos = this.pos.offset(this.facing); int distance = 0; for (int i = 0; i < 8; distance++) { Block b = this.world.getBlockState(pos).getBlock(); if (distance == 200 || b == Blocks.BEDROCK) { isFinished = true; return; } if (b == Blocks.AIR) { pos = pos.offset(this.facing); continue; } this.world.destroyBlock(pos, false); if (this.world.getBlockState(this.pos.up()).getBlock() == Blocks.CHEST) { ItemStack item = new ItemStack(b.getItemDropped(b.getDefaultState(), new Random(), 0), 1); TileEntityChest chest = (TileEntityChest) this.world.getTileEntity(this.pos.up()); IItemHandler handler = chest.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); int k = 0; while (k < handler.getSlots() && handler.insertItem(k, item, false) != ItemStack.EMPTY) k++; if (k == handler.getSlots()) b.dropBlockAsItem(this.world, this.pos, b.getDefaultState(), 0); } else { b.dropBlockAsItem(this.world, this.pos, b.getDefaultState(), 0); } pos = pos.offset(this.facing); i++; } } } } public void changeFacing() { index++; if (index == EnumFacing.values().length) index = 0; this.facing = EnumFacing.values()[index]; } public EnumFacing getFacing() { return facing; } private boolean isInventoryFull() { int filledSlots = 0; for (int slot = 0; slot < handler.getSlots(); slot++) { if (handler.getStackInSlot(slot).getCount() == handler.getSlotLimit(slot)) filledSlots++; } return filledSlots == handler.getSlots(); } private int getCoal() { ItemStack stack = this.handler.getStackInSlot(0); if (stack == ItemStack.EMPTY) return 0; else if (stack.getItem() == Items.COAL) { this.handler.extractItem(0, 1, false); return 1; } else return 0; } @Override public <T> T getCapability(Capability<T> capability, EnumFacing facing) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) return (T) this.handler; return super.getCapability(capability, facing); } @Override public boolean hasCapability(Capability<?> capability, EnumFacing facing) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) return true; return super.hasCapability(capability, facing); } @Override public SPacketUpdateTileEntity getUpdatePacket() { NBTTagCompound nbt = new NBTTagCompound(); this.writeToNBT(nbt); int metadata = getBlockMetadata(); return new SPacketUpdateTileEntity(this.pos, metadata, nbt); } @Override public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) { this.readFromNBT(pkt.getNbtCompound()); } @Override public NBTTagCompound getUpdateTag() { NBTTagCompound nbt = new NBTTagCompound(); this.writeToNBT(nbt); return nbt; } @Override public void handleUpdateTag(NBTTagCompound tag) { this.readFromNBT(tag); } @Override public NBTTagCompound getTileData() { NBTTagCompound nbt = new NBTTagCompound(); this.writeToNBT(nbt); return nbt; } }
July 8, 20187 yr Author Hypothetically, when you update the digging direction from the guide, the block should start digging in the set direction. The problem is that when I call the changeFacing () method from the button action the direction only changes within the method. When the update is called, the facing variable returns to its original value.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.