From 05c78126859231a68e199dc34613689bd0978e2f Mon Sep 17 00:00:00 2001 From: Foghrye4 Date: Mon, 11 Apr 2016 19:44:54 +0300 Subject: Initial commit --- ihl/tunneling_shield/MultiBlockSpacerBlock.java | 226 ++++++++++++++++++++++++ 1 file changed, 226 insertions(+) create mode 100644 ihl/tunneling_shield/MultiBlockSpacerBlock.java (limited to 'ihl/tunneling_shield/MultiBlockSpacerBlock.java') diff --git a/ihl/tunneling_shield/MultiBlockSpacerBlock.java b/ihl/tunneling_shield/MultiBlockSpacerBlock.java new file mode 100644 index 0000000..511d8cd --- /dev/null +++ b/ihl/tunneling_shield/MultiBlockSpacerBlock.java @@ -0,0 +1,226 @@ +package ihl.tunneling_shield; + +import ic2.core.IC2; +import ic2.core.IHasGui; +import ic2.core.audio.PositionSpec; +import ic2.core.item.tool.ItemToolWrench; +import ihl.utils.IHLUtils; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Random; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.Explosion; +import net.minecraft.world.World; + +public class MultiBlockSpacerBlock extends Block { + + public static Set teList = new HashSet(); + + public MultiBlockSpacerBlock() + { + super(Material.iron); + } + + /** + * The type of render function that is called for this block + */ + @Override + public int getRenderType() + { + return -2; + } + + @Override + public void onBlockDestroyedByExplosion(World world, int x, int y, int z, Explosion explosion) + { + super.onBlockDestroyedByExplosion(world, x, y, z, explosion); + this.checkIfMachinePart(world, x, y, z); + } + + @Override + public void onBlockDestroyedByPlayer(World world, int x, int y, int z, int meta) + { + super.onBlockDestroyedByPlayer(world, x, y, z, meta); + this.checkIfMachinePart(world, x, y, z); + } + + private boolean checkIfMachinePart(World world, int x, int y, int z) + { + if(!teList.isEmpty()) + { + Iterator i = MultiBlockSpacerBlock.teList.iterator(); + while(i.hasNext()) + { + IMultiBlock te = i.next(); + if(te!=null && !te.getIsInvalid()) + { + if(te.isAPartOfStructure(x, y, z, true)) + { + return true; + } + } + else + { + teList.remove(i); + } + } + } + return false; + } + + private IMultiBlock getLinkedTileEntity(World world, int x, int y, int z) + { + if(!teList.isEmpty()) + { + Iterator i = MultiBlockSpacerBlock.teList.iterator(); + while(i.hasNext()) + { + IMultiBlock te = i.next(); + if(te!=null && !te.getIsInvalid()) + { + if(te.isAPartOfStructure(x, y, z, false)) + { + return te; + } + } + else + { + teList.remove(i); + } + } + } + return null; + } + + @Override + public ArrayList getDrops(World world,int x, int y, int z, int meta, int flag) + { + ArrayList nothing = new ArrayList(); + nothing.clear(); + return nothing; + } + + /** + * Is this block (a) opaque and (B) a full 1m cube? This determines whether or not to render the shared face of two + * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block. + */ + @Override + public boolean isOpaqueCube() + { + return false; + } + + /** + * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) + */ + @Override + public boolean renderAsNormalBlock() + { + return false; + } + + @Override + public void onBlockAdded(World world, int x, int y,int z) + { + world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world)); + } + + @Override + public void onNeighborBlockChange(World world, int x, int y,int z, Block block) + { + this.updateTick(world, x, y, z, world.rand); + } + +@Override +public void updateTick(World world, int x, int y,int z, Random rand) +{ + world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world)); + if(!world.isRemote) + { + boolean setToAir=true; + if(teList.size()>0) + { + if(!teList.isEmpty()) + { + Iterator i = MultiBlockSpacerBlock.teList.iterator(); + while(i.hasNext()) + { + IMultiBlock te = i.next(); + if(te!=null && !te.getIsInvalid()) + { + if(te.isAPartOfStructure(x, y, z, false)) + { + setToAir=false; + } + } + else + { + teList.remove(i); + } + } + } + } + if(setToAir) + { + world.setBlockToAir(x, y, z); + } + } +} + + @Override + public int tickRate(World world) + { + return 200; + } + + @Override + public boolean onBlockActivated(World world,int x,int y,int z,EntityPlayer entityPlayer,int i,float pos_x,float pos_y,float pos_z) + { + IMultiBlock te = this.getLinkedTileEntity(world, x, y, z); + ItemStack currentIS = entityPlayer.inventory.getCurrentItem(); + if(currentIS!=null) + { + if(currentIS.getItem() instanceof ItemToolWrench) + { + if(((ItemToolWrench)currentIS.getItem()).canTakeDamage(currentIS, 10)) + { + if (IC2.platform.isRendering()) + { + IC2.audioManager.playOnce(entityPlayer, PositionSpec.Hand, "Tools/wrench.ogg", true, 1.0F); + } + else if(IC2.platform.isSimulating()) + { + if(te instanceof DriverTileEntity) + { + DriverTileEntity dte =(DriverTileEntity) te; + if(dte.hasShield) + { + if(dte.advancedShield) + { + world.spawnEntityInWorld(new EntityItem(world, x, y, z, IHLUtils.getThisModItemStack("advancedShieldAssemblyUnitBlock"))); + } + else + { + world.spawnEntityInWorld(new EntityItem(world, x, y, z, IHLUtils.getThisModItemStack("IHLShieldAssemblyUnitBlock"))); + } + } + dte.isAPartOfStructure(x, y, z, true); + world.setBlockToAir(x, y, z); + } + ((ItemToolWrench)currentIS.getItem()).damage(currentIS, 10, entityPlayer); + } + } + return true; + } + } + return te instanceof IHasGui ? (IC2.platform.isSimulating() ? IC2.platform.launchGui(entityPlayer, (IHasGui)te) : true) : false; + } +} \ No newline at end of file -- cgit v1.2.3