diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 91ea2d966..0d6d18411 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -2823,7 +2823,7 @@ public class ModBlocks { GameRegistry.registerBlock(steel_corner, steel_corner.getUnlocalizedName()); GameRegistry.registerBlock(steel_roof, steel_roof.getUnlocalizedName()); GameRegistry.registerBlock(steel_beam, steel_beam.getUnlocalizedName()); - GameRegistry.registerBlock(steel_scaffold, steel_scaffold.getUnlocalizedName()); + register(steel_scaffold); GameRegistry.registerBlock(steel_grate, steel_grate.getUnlocalizedName()); GameRegistry.registerBlock(deco_pipe, ItemBlockBase.class, deco_pipe.getUnlocalizedName()); GameRegistry.registerBlock(deco_pipe_rusted, ItemBlockBase.class, deco_pipe_rusted.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/generic/BlockScaffold.java b/src/main/java/com/hbm/blocks/generic/BlockScaffold.java index 60213c2ae..64a2eb919 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockScaffold.java +++ b/src/main/java/com/hbm/blocks/generic/BlockScaffold.java @@ -11,8 +11,10 @@ import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; +import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class BlockScaffold extends BlockMulti { @@ -30,6 +32,16 @@ public class BlockScaffold extends BlockMulti { public int getRenderType(){ return renderIDScaffold; } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } @Override @SideOnly(Side.CLIENT) @@ -69,4 +81,29 @@ public class BlockScaffold extends BlockMulti { public int getSubCount() { return variants.length; } + + @Override + public void setBlockBoundsBasedOnState(IBlockAccess p_149719_1_, int p_149719_2_, int p_149719_3_, int p_149719_4_) { + int te = p_149719_1_.getBlockMetadata(p_149719_2_, p_149719_3_, p_149719_4_); + float f = 0.0625F; + + if((te & 8) != 0) + this.setBlockBounds(2 * f, 0.0F, 0.0F, 14 * f, 1.0F, 1.0F); + else + this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); + } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { + + int te = world.getBlockMetadata(x, y, z); + float f = 0.0625F; + + if((te & 8) != 0) + this.setBlockBounds(2 * f, 0.0F, 0.0F, 14 * f, 1.0F, 1.0F); + else + this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); + + return AxisAlignedBB.getBoundingBox(x + this.minX, y + this.minY, z + this.minZ, x + this.maxX, y + this.maxY, z + this.maxZ); + } } diff --git a/src/main/java/com/hbm/blocks/machine/MachineFluidTank.java b/src/main/java/com/hbm/blocks/machine/MachineFluidTank.java index 718af0599..6c2cd2f51 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineFluidTank.java +++ b/src/main/java/com/hbm/blocks/machine/MachineFluidTank.java @@ -14,11 +14,13 @@ import com.hbm.util.I18nUtil; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.stats.StatList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.Explosion; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -85,8 +87,32 @@ public class MachineFluidTank extends BlockDummyable implements IPersistentInfoP @Override public void addInformation(ItemStack stack, NBTTagCompound persistentTag, EntityPlayer player, List list, boolean ext) { - FluidTank tank = new FluidTank(Fluids.NONE, 0, 0); + FluidTank tank = new FluidTank(Fluids.NONE, 0); tank.readFromNBT(persistentTag, "tank"); list.add(EnumChatFormatting.YELLOW + "" + tank.getFill() + "/" + tank.getMaxFill() + "mB " + I18nUtil.resolveKey(tank.getTankType().getUnlocalizedName())); } + + @Override + public boolean canDropFromExplosion(Explosion explosion) { + return false; + } + + @Override + public void onBlockExploded(World world, int x, int y, int z, Explosion explosion) { + + int[] pos = this.findCore(world, x, y, z); + if(pos == null) return; + TileEntity core = world.getTileEntity(pos[0], pos[1], pos[2]); + if(!(core instanceof TileEntityMachineFluidTank)) return; + + TileEntityMachineFluidTank tank = (TileEntityMachineFluidTank) core; + if(tank.lastExplosion == explosion) return; + tank.lastExplosion = explosion; + + if(!tank.hasExploded) { + tank.explode(); + } else { + world.setBlock(pos[0], pos[1], pos[2], Blocks.air); + } + } } diff --git a/src/main/java/com/hbm/hazard/HazardRegistry.java b/src/main/java/com/hbm/hazard/HazardRegistry.java index d81e65ca4..1903b04de 100644 --- a/src/main/java/com/hbm/hazard/HazardRegistry.java +++ b/src/main/java/com/hbm/hazard/HazardRegistry.java @@ -198,6 +198,7 @@ public class HazardRegistry { HazardSystem.register(trinitite, makeData(RADIATION, trn * ingot)); HazardSystem.register(block_trinitite, makeData(RADIATION, trn * block)); HazardSystem.register(nuclear_waste, makeData(RADIATION, wst * ingot)); + HazardSystem.register(yellow_barrel, makeData(RADIATION, wst * ingot * 10)); HazardSystem.register(billet_nuclear_waste, makeData(RADIATION, wst * billet)); HazardSystem.register(nuclear_waste_tiny, makeData(RADIATION, wst * nugget)); HazardSystem.register(nuclear_waste_vitrified, makeData(RADIATION, wstv * ingot)); diff --git a/src/main/java/com/hbm/inventory/SlotNonRetarded.java b/src/main/java/com/hbm/inventory/SlotNonRetarded.java index c2d81ed61..4e5d12739 100644 --- a/src/main/java/com/hbm/inventory/SlotNonRetarded.java +++ b/src/main/java/com/hbm/inventory/SlotNonRetarded.java @@ -15,7 +15,7 @@ public class SlotNonRetarded extends Slot { } /** - * Dear mojang: Why wasn't that the standard to begin with? What do IInventories have isItemValidForSlot when by default nothing fucking uses it? + * Dear mojang: Why wasn't that the standard to begin with? What do IInventories have isItemValidForSlot for when by default nothing fucking uses it? */ @Override public boolean isItemValid(ItemStack stack) { diff --git a/src/main/java/com/hbm/render/block/RenderScaffoldBlock.java b/src/main/java/com/hbm/render/block/RenderScaffoldBlock.java index c3934409d..69be9500e 100644 --- a/src/main/java/com/hbm/render/block/RenderScaffoldBlock.java +++ b/src/main/java/com/hbm/render/block/RenderScaffoldBlock.java @@ -21,7 +21,7 @@ public class RenderScaffoldBlock implements ISimpleBlockRenderingHandler { GL11.glPushMatrix(); Tessellator tessellator = Tessellator.instance; - IIcon iicon = block.getIcon(0, 0); + IIcon iicon = block.getIcon(0, metadata); tessellator.setColorOpaque_F(1, 1, 1); if(renderer.hasOverrideBlockTexture()) { @@ -51,7 +51,7 @@ public class RenderScaffoldBlock implements ISimpleBlockRenderingHandler { float rotation = (float) -Math.PI; - if((world.getBlockMetadata(x, y, z) & 8) != 0) + if((world.getBlockMetadata(x, y, z) & 8) == 0) rotation = -90F / 180F * (float) Math.PI; tessellator.addTranslation(x + 0.5F, y, z + 0.5F); diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java index 5e2c50c69..ee7e51b44 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java @@ -40,6 +40,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.Explosion; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -50,6 +51,8 @@ public class TileEntityMachineFluidTank extends TileEntityMachineBase implements public static final short modes = 4; public boolean hasExploded = false; + public Explosion lastExplosion = null; + public int age = 0; public List list = new ArrayList(); @@ -102,13 +105,12 @@ public class TileEntityMachineFluidTank extends TileEntityMachineBase implements if(tank.getFill() > 0) { if(tank.getTankType().isAntimatter()) { worldObj.newExplosion(null, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, 5, true, false); - this.hasExploded = true; + this.explode(); this.tank.setFill(0); } if(tank.getTankType().hasTrait(FT_Corrosive.class) && tank.getTankType().getTrait(FT_Corrosive.class).isHighlyCorrosive()) { - this.hasExploded = true; - this.tank.setFill(0); + this.explode(); } if(this.hasExploded) { @@ -136,6 +138,13 @@ public class TileEntityMachineFluidTank extends TileEntityMachineBase implements } } + /** called when the tank breaks due to hazardous materials or external force, can be used to quickly void part of the tank or spawn a mushroom cloud */ + public void explode() { + this.hasExploded = true; + this.markChanged(); + } + + /** called every tick post explosion, used for leaking fluid and spawning particles */ public void updateLeak(int amount) { if(!hasExploded) return; if(amount <= 0) return;