package micdoodle8.mods.galacticraft.core.tile; import java.util.ArrayList; import java.util.List; import micdoodle8.mods.galacticraft.core.GCBlocks; import micdoodle8.mods.galacticraft.core.GalacticraftCore; import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; import micdoodle8.mods.galacticraft.core.blocks.BlockMulti.EnumBlockMultiType; import micdoodle8.mods.galacticraft.core.client.gui.GuiIdsCore; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.client.FMLClientHandler; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class TileEntityNasaWorkbench extends TileEntityMulti implements IMultiBlock { private boolean initialised; public TileEntityNasaWorkbench() { super(null); } @Override public boolean onActivated(EntityPlayer entityPlayer) { entityPlayer.openGui(GalacticraftCore.instance, GuiIdsCore.NASA_WORKBENCH_ROCKET, this.worldObj, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); return true; } @Override public void update() { if (!this.initialised) { this.initialised = this.initialiseMultiTiles(this.getPos(), this.worldObj); } } @Override public void onCreate(World world, BlockPos placedPosition) { this.mainBlockPosition = placedPosition; this.markDirty(); List<BlockPos> positions = new ArrayList(); this.getPositions(placedPosition, positions); ((BlockMulti) GCBlocks.fakeBlock).makeFakeBlock(world, positions, placedPosition, this.getMultiType()); } @Override public BlockMulti.EnumBlockMultiType getMultiType() { return EnumBlockMultiType.NASA_WORKBENCH; } @Override public void getPositions(BlockPos placedPosition, List<BlockPos> positions) { int buildHeight = this.worldObj.getHeight() - 1; for (int y = 1; y < 3; y++) { if (placedPosition.getY() + y > buildHeight) { return; } for (int x = -1; x < 2; x++) { for (int z = -1; z < 2; z++) { if (Math.abs(x) != 1 || Math.abs(z) != 1) { positions.add(new BlockPos(placedPosition.getX() + x, placedPosition.getY() + y, placedPosition.getZ() + z)); } } } } if (placedPosition.getY() + 3 <= buildHeight) { positions.add(new BlockPos(placedPosition.getX(), placedPosition.getY() + 3, placedPosition.getZ())); } } @Override public void onDestroy(TileEntity callingBlock) { final BlockPos thisBlock = getPos(); List<BlockPos> positions = new ArrayList(); this.getPositions(thisBlock, positions); for (BlockPos pos : positions) { IBlockState stateAt = this.worldObj.getBlockState(pos); if (stateAt.getBlock() == GCBlocks.fakeBlock && (EnumBlockMultiType) stateAt.getValue(BlockMulti.MULTI_TYPE) == EnumBlockMultiType.NASA_WORKBENCH) { if (this.worldObj.isRemote && this.worldObj.rand.nextDouble() < 0.05D) { FMLClientHandler.instance().getClient().effectRenderer.addBlockDestroyEffects(pos, this.worldObj.getBlockState(thisBlock)); } this.worldObj.setBlockToAir(pos); } } this.worldObj.destroyBlock(thisBlock, true); } @Override @SideOnly(Side.CLIENT) public AxisAlignedBB getRenderBoundingBox() { return AxisAlignedBB.fromBounds(getPos().getX() - 1, getPos().getY() - 1, getPos().getZ() - 1, getPos().getX() + 2, getPos().getY() + 5, getPos().getZ() + 2); } }