From c8ebf180ab22488a684e26988aba7a1373cede84 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 3 Apr 2025 21:51:56 +0200 Subject: [PATCH] WHERE TUBE --- .../com/hbm/blocks/network/PneumoTube.java | 113 +++++++++++- .../java/com/hbm/inventory/fluid/Fluids.java | 5 +- src/main/java/com/hbm/main/ClientProxy.java | 165 +++++++++--------- .../hbm/render/block/RenderPneumoTube.java | 108 ++++++++++++ .../hbm/render/block/ct/RenderBlocksCT.java | 2 + .../network/TileEntityPneumoTube.java | 12 ++ .../blocks/pneumatic_pipe_connector.png | Bin 277 -> 0 bytes .../hbm/textures/blocks/pneumatic_pipe_in.png | Bin 334 -> 0 bytes .../textures/blocks/pneumatic_pipe_out.png | Bin 352 -> 0 bytes ...{pneumatic_pipe.png => pneumatic_tube.png} | Bin .../blocks/pneumatic_tube_connector.png | Bin 0 -> 293 bytes ...ic_pipe_end.png => pneumatic_tube_end.png} | Bin .../hbm/textures/blocks/pneumatic_tube_in.png | Bin 0 -> 351 bytes .../textures/blocks/pneumatic_tube_out.png | Bin 0 -> 381 bytes .../assets/hbm/textures/gui/fluids/air.png | Bin 0 -> 485 bytes .../gui/storage/gui_pneumatic_pipe.png | Bin 0 -> 2783 bytes .../hbm/textures/models/tank/tank_AIR.png | Bin 0 -> 3674 bytes 17 files changed, 321 insertions(+), 84 deletions(-) create mode 100644 src/main/java/com/hbm/render/block/RenderPneumoTube.java delete mode 100644 src/main/resources/assets/hbm/textures/blocks/pneumatic_pipe_connector.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/pneumatic_pipe_in.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/pneumatic_pipe_out.png rename src/main/resources/assets/hbm/textures/blocks/{pneumatic_pipe.png => pneumatic_tube.png} (100%) create mode 100644 src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_connector.png rename src/main/resources/assets/hbm/textures/blocks/{pneumatic_pipe_end.png => pneumatic_tube_end.png} (100%) create mode 100644 src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_in.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_out.png create mode 100644 src/main/resources/assets/hbm/textures/gui/fluids/air.png create mode 100644 src/main/resources/assets/hbm/textures/gui/storage/gui_pneumatic_pipe.png create mode 100644 src/main/resources/assets/hbm/textures/models/tank/tank_AIR.png diff --git a/src/main/java/com/hbm/blocks/network/PneumoTube.java b/src/main/java/com/hbm/blocks/network/PneumoTube.java index e6704e42f..2932a05ca 100644 --- a/src/main/java/com/hbm/blocks/network/PneumoTube.java +++ b/src/main/java/com/hbm/blocks/network/PneumoTube.java @@ -1,20 +1,131 @@ package com.hbm.blocks.network; -import com.hbm.tileentity.network.TileEntityPneumoTube; +import java.util.ArrayList; +import java.util.List; +import com.hbm.lib.Library; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.network.TileEntityPneumoTube; +import com.hbm.util.Compat; + +import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.Entity; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class PneumoTube extends BlockContainer { + @SideOnly(Side.CLIENT) public IIcon iconIn; + @SideOnly(Side.CLIENT) public IIcon iconOut; + @SideOnly(Side.CLIENT) public IIcon iconConnector; + + public boolean[] renderSides = new boolean[] {true, true, true, true, true, true}; + public PneumoTube() { super(Material.iron); } + public static int renderID = RenderingRegistry.getNextAvailableRenderId(); + + @Override public int getRenderType() { return renderID; } + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean renderAsNormalBlock() { return false; } + @Override public TileEntity createNewTileEntity(World world, int meta) { return new TileEntityPneumoTube(); } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + super.registerBlockIcons(reg); + + iconIn = reg.registerIcon(RefStrings.MODID + ":pneumatic_tube_in"); + iconOut = reg.registerIcon(RefStrings.MODID + ":pneumatic_tube_out"); + iconConnector = reg.registerIcon(RefStrings.MODID + ":pneumatic_tube_connector"); + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) { + return renderSides[side % 6]; + } + + public void resetRenderSides() { + for(int i = 0; i < 6; i++) renderSides[i] = true; + } + + @Override + public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB entityBounding, List list, Entity entity) { + + List bbs = new ArrayList(); + + double lower = 0.3125D; + double upper = 0.6875D; + + bbs.add(AxisAlignedBB.getBoundingBox(x + lower, y + lower, z + lower, x + upper, y + upper, z + upper)); + + if(canConnectTo(world, x, y, z, Library.POS_X)) bbs.add(AxisAlignedBB.getBoundingBox(x + upper, y + lower, z + lower, x + 1, y + upper, z + upper)); + if(canConnectTo(world, x, y, z, Library.NEG_X)) bbs.add(AxisAlignedBB.getBoundingBox(x, y + lower, z + lower, x + lower, y + upper, z + upper)); + if(canConnectTo(world, x, y, z, Library.POS_Y)) bbs.add(AxisAlignedBB.getBoundingBox(x + lower, y + upper, z + lower, x + upper, y + 1, z + upper)); + if(canConnectTo(world, x, y, z, Library.NEG_Y)) bbs.add(AxisAlignedBB.getBoundingBox(x + lower, y, z + lower, x + upper, y + lower, z + upper)); + if(canConnectTo(world, x, y, z, Library.POS_Z)) bbs.add(AxisAlignedBB.getBoundingBox(x + lower, y + lower, z + upper, x + upper, y + upper, z + 1)); + if(canConnectTo(world, x, y, z, Library.NEG_Z)) bbs.add(AxisAlignedBB.getBoundingBox(x + lower, y + lower, z, x + upper, y + upper, z + lower)); + + for(AxisAlignedBB bb : bbs) { + if(entityBounding.intersectsWith(bb)) { + list.add(bb); + } + } + } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { + setBlockBoundsBasedOnState(world, x, y, z); + return AxisAlignedBB.getBoundingBox(x + this.minX, y + this.minY, z + this.minZ, x + this.maxX, y + this.maxY, z + this.maxZ); + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z) { + setBlockBoundsBasedOnState(world, x, y, z); + return AxisAlignedBB.getBoundingBox(x + this.minX, y + this.minY, z + this.minZ, x + this.maxX, y + this.maxY, z + this.maxZ); + } + + @Override + public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { + + float lower = 0.3125F; + float upper = 0.6875F; + + boolean nX = canConnectTo(world, x, y, z, Library.NEG_X); + boolean pX = canConnectTo(world, x, y, z, Library.POS_X); + boolean nY = canConnectTo(world, x, y, z, Library.NEG_Y); + boolean pY = canConnectTo(world, x, y, z, Library.POS_Y); + boolean nZ = canConnectTo(world, x, y, z, Library.NEG_Z); + boolean pZ = canConnectTo(world, x, y, z, Library.POS_Z); + + this.setBlockBounds( + nX ? 0F : lower, + nY ? 0F : lower, + nZ ? 0F : lower, + pX ? 1F : upper, + pY ? 1F : upper, + pZ ? 1F : upper); + } + + public boolean canConnectTo(IBlockAccess world, int x, int y, int z, ForgeDirection dir) { + TileEntity tile = world instanceof World ? Compat.getTileStandard((World) world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ) : world.getTileEntity(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ); + return tile instanceof TileEntityPneumoTube; + } } diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index 5e569ffe3..2fa1125ac 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -37,6 +37,7 @@ public class Fluids { public static final Gson gson = new Gson(); public static FluidType NONE; + public static FluidType AIR; public static FluidType WATER; public static FluidType STEAM; public static FluidType HOTSTEAM; @@ -398,7 +399,8 @@ public class Fluids { LYE = new FluidType("LYE", 0xFFECCC, 3, 0, 1, EnumSymbol.ACID).addTraits(new FT_Corrosive(40), LIQUID); SODIUM_ALUMINATE = new FluidType("SODIUM_ALUMINATE", 0xFFD191, 3, 0, 1, EnumSymbol.ACID).addTraits(new FT_Corrosive(30), LIQUID); BAUXITE_SOLUTION = new FluidType("BAUXITE_SOLUTION", 0xE2560F, 3, 0, 3, EnumSymbol.ACID).addTraits(new FT_Corrosive(40), LIQUID, VISCOUS); - ALUMINA = new FluidType(150,"ALUMINA", 0xDDFFFF, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID); + ALUMINA = new FluidType("ALUMINA", 0xDDFFFF, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID); + AIR = new FluidType(151, "AIR", 0xE7EAEB, 0, 0, 0, EnumSymbol.NONE).addTraits(GASEOUS); // ^ ^ ^ ^ ^ ^ ^ ^ //ADD NEW FLUIDS HERE @@ -414,6 +416,7 @@ public class Fluids { //null metaOrder.add(NONE); //vanilla + metaOrder.add(AIR); metaOrder.add(WATER); metaOrder.add(HEAVYWATER); metaOrder.add(HEAVYWATER_HOT); diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index d9eb56397..cab7ef80d 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -581,36 +581,36 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerEntityRenderingHandler(EntityExplosiveBeam.class, new RenderBeam5()); RenderingRegistry.registerEntityRenderingHandler(EntityModBeam.class, new RenderBeam6()); RenderingRegistry.registerEntityRenderingHandler(EntitySiegeLaser.class, new RenderSiegeLaser()); - RenderingRegistry.registerEntityRenderingHandler(EntityBombletZeta.class, new RenderBombletTheta()); - RenderingRegistry.registerEntityRenderingHandler(EntityMeteor.class, new RenderMeteor()); - RenderingRegistry.registerEntityRenderingHandler(EntityBoxcar.class, new RenderBoxcar()); - RenderingRegistry.registerEntityRenderingHandler(EntityDuchessGambit.class, new RenderBoxcar()); - RenderingRegistry.registerEntityRenderingHandler(EntityBuilding.class, new RenderBoxcar()); - RenderingRegistry.registerEntityRenderingHandler(EntityTorpedo.class, new RenderBoxcar()); - RenderingRegistry.registerEntityRenderingHandler(EntityBomber.class, new RenderBomber()); - RenderingRegistry.registerEntityRenderingHandler(EntityC130.class, new RenderC130()); - RenderingRegistry.registerEntityRenderingHandler(EntityBurningFOEQ.class, new RenderFOEQ()); - RenderingRegistry.registerEntityRenderingHandler(EntityFallingNuke.class, new RenderFallingNuke()); - RenderingRegistry.registerEntityRenderingHandler(EntityMinerRocket.class, new RenderMinerRocket()); - RenderingRegistry.registerEntityRenderingHandler(EntityBobmazon.class, new RenderMinerRocket()); - RenderingRegistry.registerEntityRenderingHandler(EntityTom.class, new RenderTom()); - RenderingRegistry.registerEntityRenderingHandler(EntityAAShell.class, new RenderMirv()); - RenderingRegistry.registerEntityRenderingHandler(EntityChopperMine.class, new RenderChopperMine()); - RenderingRegistry.registerEntityRenderingHandler(EntityRubble.class, new RenderRubble()); - RenderingRegistry.registerEntityRenderingHandler(EntityShrapnel.class, new RenderShrapnel()); - RenderingRegistry.registerEntityRenderingHandler(EntityFireworks.class, new RenderShrapnel()); - RenderingRegistry.registerEntityRenderingHandler(EntityWaterSplash.class, new RenderEmpty()); - RenderingRegistry.registerEntityRenderingHandler(EntityEMP.class, new RenderEmpty()); - RenderingRegistry.registerEntityRenderingHandler(EntityBeamVortex.class, new RenderVortexBeam()); - RenderingRegistry.registerEntityRenderingHandler(EntityRBMKDebris.class, new RenderRBMKDebris()); - RenderingRegistry.registerEntityRenderingHandler(EntityZirnoxDebris.class, new RenderZirnoxDebris()); - RenderingRegistry.registerEntityRenderingHandler(EntityArtilleryShell.class, new RenderArtilleryShell()); - RenderingRegistry.registerEntityRenderingHandler(EntityArtilleryRocket.class, new RenderArtilleryRocket()); - RenderingRegistry.registerEntityRenderingHandler(EntityCog.class, new RenderCog()); - RenderingRegistry.registerEntityRenderingHandler(EntitySawblade.class, new RenderSawblade()); - RenderingRegistry.registerEntityRenderingHandler(EntityChemical.class, new RenderChemical()); - RenderingRegistry.registerEntityRenderingHandler(EntityMist.class, new RenderMist()); - RenderingRegistry.registerEntityRenderingHandler(EntityFireLingering.class, new RenderMist()); + RenderingRegistry.registerEntityRenderingHandler(EntityBombletZeta.class, new RenderBombletTheta()); + RenderingRegistry.registerEntityRenderingHandler(EntityMeteor.class, new RenderMeteor()); + RenderingRegistry.registerEntityRenderingHandler(EntityBoxcar.class, new RenderBoxcar()); + RenderingRegistry.registerEntityRenderingHandler(EntityDuchessGambit.class, new RenderBoxcar()); + RenderingRegistry.registerEntityRenderingHandler(EntityBuilding.class, new RenderBoxcar()); + RenderingRegistry.registerEntityRenderingHandler(EntityTorpedo.class, new RenderBoxcar()); + RenderingRegistry.registerEntityRenderingHandler(EntityBomber.class, new RenderBomber()); + RenderingRegistry.registerEntityRenderingHandler(EntityC130.class, new RenderC130()); + RenderingRegistry.registerEntityRenderingHandler(EntityBurningFOEQ.class, new RenderFOEQ()); + RenderingRegistry.registerEntityRenderingHandler(EntityFallingNuke.class, new RenderFallingNuke()); + RenderingRegistry.registerEntityRenderingHandler(EntityMinerRocket.class, new RenderMinerRocket()); + RenderingRegistry.registerEntityRenderingHandler(EntityBobmazon.class, new RenderMinerRocket()); + RenderingRegistry.registerEntityRenderingHandler(EntityTom.class, new RenderTom()); + RenderingRegistry.registerEntityRenderingHandler(EntityAAShell.class, new RenderMirv()); + RenderingRegistry.registerEntityRenderingHandler(EntityChopperMine.class, new RenderChopperMine()); + RenderingRegistry.registerEntityRenderingHandler(EntityRubble.class, new RenderRubble()); + RenderingRegistry.registerEntityRenderingHandler(EntityShrapnel.class, new RenderShrapnel()); + RenderingRegistry.registerEntityRenderingHandler(EntityFireworks.class, new RenderShrapnel()); + RenderingRegistry.registerEntityRenderingHandler(EntityWaterSplash.class, new RenderEmpty()); + RenderingRegistry.registerEntityRenderingHandler(EntityEMP.class, new RenderEmpty()); + RenderingRegistry.registerEntityRenderingHandler(EntityBeamVortex.class, new RenderVortexBeam()); + RenderingRegistry.registerEntityRenderingHandler(EntityRBMKDebris.class, new RenderRBMKDebris()); + RenderingRegistry.registerEntityRenderingHandler(EntityZirnoxDebris.class, new RenderZirnoxDebris()); + RenderingRegistry.registerEntityRenderingHandler(EntityArtilleryShell.class, new RenderArtilleryShell()); + RenderingRegistry.registerEntityRenderingHandler(EntityArtilleryRocket.class, new RenderArtilleryRocket()); + RenderingRegistry.registerEntityRenderingHandler(EntityCog.class, new RenderCog()); + RenderingRegistry.registerEntityRenderingHandler(EntitySawblade.class, new RenderSawblade()); + RenderingRegistry.registerEntityRenderingHandler(EntityChemical.class, new RenderChemical()); + RenderingRegistry.registerEntityRenderingHandler(EntityMist.class, new RenderMist()); + RenderingRegistry.registerEntityRenderingHandler(EntityFireLingering.class, new RenderMist()); RenderingRegistry.registerEntityRenderingHandler(EntityWaypoint.class, new RenderMist()); RenderingRegistry.registerEntityRenderingHandler(EntityAcidBomb.class, new RenderSnowball(Items.slime_ball)); //grenades @@ -661,52 +661,52 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeImpactGeneric.class, new RenderGenericGrenade()); RenderingRegistry.registerEntityRenderingHandler(EntityDisperserCanister.class, new RenderGenericGrenade()); //missiles - RenderingRegistry.registerEntityRenderingHandler(EntityMissileCustom.class, new RenderMissileCustom()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileGeneric.class, new RenderMissileGeneric()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileDecoy.class, new RenderMissileGeneric()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileStealth.class, new RenderMissileGeneric()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileAntiBallistic.class, new RenderMissileGeneric()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileIncendiary.class, new RenderMissileGeneric()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileCluster.class, new RenderMissileGeneric()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileBunkerBuster.class, new RenderMissileGeneric()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileStrong.class, new RenderMissileStrong()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileIncendiaryStrong.class, new RenderMissileStrong()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileClusterStrong.class, new RenderMissileStrong()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileBusterStrong.class, new RenderMissileStrong()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileEMPStrong.class, new RenderMissileStrong()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileBurst.class, new RenderMissileHuge()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileInferno.class, new RenderMissileHuge()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileRain.class, new RenderMissileHuge()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileDrill.class, new RenderMissileHuge()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileNuclear.class, new RenderMissileNuclear()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileMirv.class, new RenderMissileNuclear()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileVolcano.class, new RenderMissileNuclear()); - RenderingRegistry.registerEntityRenderingHandler(EntityMIRV.class, new RenderMirv()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileDoomsday.class, new RenderMissileNuclear()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileDoomsdayRusted.class, new RenderMissileNuclear()); - RenderingRegistry.registerEntityRenderingHandler(EntitySoyuz.class, new RenderSoyuz()); - RenderingRegistry.registerEntityRenderingHandler(EntitySoyuzCapsule.class, new RenderSoyuzCapsule()); - RenderingRegistry.registerEntityRenderingHandler(EntityParachuteCrate.class, new RenderParachuteCrate()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileTaint.class, new RenderMissileTaint()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileMicro.class, new RenderMissileTaint()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileBHole.class, new RenderMissileTaint()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileSchrabidium.class, new RenderMissileTaint()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileEMP.class, new RenderMissileTaint()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileShuttle.class, new RenderMissileShuttle()); - RenderingRegistry.registerEntityRenderingHandler(EntityMissileTest.class, new RenderMissileTaint()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileCustom.class, new RenderMissileCustom()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileGeneric.class, new RenderMissileGeneric()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileDecoy.class, new RenderMissileGeneric()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileStealth.class, new RenderMissileGeneric()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileAntiBallistic.class, new RenderMissileGeneric()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileIncendiary.class, new RenderMissileGeneric()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileCluster.class, new RenderMissileGeneric()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileBunkerBuster.class, new RenderMissileGeneric()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileStrong.class, new RenderMissileStrong()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileIncendiaryStrong.class, new RenderMissileStrong()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileClusterStrong.class, new RenderMissileStrong()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileBusterStrong.class, new RenderMissileStrong()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileEMPStrong.class, new RenderMissileStrong()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileBurst.class, new RenderMissileHuge()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileInferno.class, new RenderMissileHuge()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileRain.class, new RenderMissileHuge()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileDrill.class, new RenderMissileHuge()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileNuclear.class, new RenderMissileNuclear()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileMirv.class, new RenderMissileNuclear()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileVolcano.class, new RenderMissileNuclear()); + RenderingRegistry.registerEntityRenderingHandler(EntityMIRV.class, new RenderMirv()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileDoomsday.class, new RenderMissileNuclear()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileDoomsdayRusted.class, new RenderMissileNuclear()); + RenderingRegistry.registerEntityRenderingHandler(EntitySoyuz.class, new RenderSoyuz()); + RenderingRegistry.registerEntityRenderingHandler(EntitySoyuzCapsule.class, new RenderSoyuzCapsule()); + RenderingRegistry.registerEntityRenderingHandler(EntityParachuteCrate.class, new RenderParachuteCrate()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileTaint.class, new RenderMissileTaint()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileMicro.class, new RenderMissileTaint()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileBHole.class, new RenderMissileTaint()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileSchrabidium.class, new RenderMissileTaint()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileEMP.class, new RenderMissileTaint()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileShuttle.class, new RenderMissileShuttle()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileTest.class, new RenderMissileTaint()); //effects - RenderingRegistry.registerEntityRenderingHandler(EntityCloudFleija.class, new RenderCloudFleija()); - RenderingRegistry.registerEntityRenderingHandler(EntityCloudFleijaRainbow.class, new RenderCloudRainbow()); - RenderingRegistry.registerEntityRenderingHandler(EntityCloudSolinium.class, new RenderCloudSolinium()); - RenderingRegistry.registerEntityRenderingHandler(EntityCloudTom.class, new RenderCloudTom()); - RenderingRegistry.registerEntityRenderingHandler(EntityFalloutRain.class, new RenderFallout()); - RenderingRegistry.registerEntityRenderingHandler(EntityBlackHole.class, new RenderBlackHole()); - RenderingRegistry.registerEntityRenderingHandler(EntityVortex.class, new RenderBlackHole()); - RenderingRegistry.registerEntityRenderingHandler(EntityRagingVortex.class, new RenderBlackHole()); - RenderingRegistry.registerEntityRenderingHandler(EntityQuasar.class, new RenderQuasar()); - RenderingRegistry.registerEntityRenderingHandler(EntityDeathBlast.class, new RenderDeathBlast()); - RenderingRegistry.registerEntityRenderingHandler(EntitySpear.class, new RenderSpear()); - RenderingRegistry.registerEntityRenderingHandler(EntityNukeTorex.class, new RenderTorex()); + RenderingRegistry.registerEntityRenderingHandler(EntityCloudFleija.class, new RenderCloudFleija()); + RenderingRegistry.registerEntityRenderingHandler(EntityCloudFleijaRainbow.class, new RenderCloudRainbow()); + RenderingRegistry.registerEntityRenderingHandler(EntityCloudSolinium.class, new RenderCloudSolinium()); + RenderingRegistry.registerEntityRenderingHandler(EntityCloudTom.class, new RenderCloudTom()); + RenderingRegistry.registerEntityRenderingHandler(EntityFalloutRain.class, new RenderFallout()); + RenderingRegistry.registerEntityRenderingHandler(EntityBlackHole.class, new RenderBlackHole()); + RenderingRegistry.registerEntityRenderingHandler(EntityVortex.class, new RenderBlackHole()); + RenderingRegistry.registerEntityRenderingHandler(EntityRagingVortex.class, new RenderBlackHole()); + RenderingRegistry.registerEntityRenderingHandler(EntityQuasar.class, new RenderQuasar()); + RenderingRegistry.registerEntityRenderingHandler(EntityDeathBlast.class, new RenderDeathBlast()); + RenderingRegistry.registerEntityRenderingHandler(EntitySpear.class, new RenderSpear()); + RenderingRegistry.registerEntityRenderingHandler(EntityNukeTorex.class, new RenderTorex()); //minecarts RenderingRegistry.registerEntityRenderingHandler(EntityMinecartTest.class, new RenderMinecartTest()); RenderingRegistry.registerEntityRenderingHandler(EntityMinecartCrate.class, new RenderMinecart()); @@ -762,13 +762,13 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerEntityRenderingHandler(EntityPigeon.class, new RenderPigeon(new ModelPigeon(), 0.3F)); RenderingRegistry.registerEntityRenderingHandler(EntityDummy.class, new RenderDummy()); RenderingRegistry.registerEntityRenderingHandler(EntityUndeadSoldier.class, new RenderUndeadSoldier()); - //"particles" - RenderingRegistry.registerEntityRenderingHandler(EntityChlorineFX.class, new MultiCloudRenderer(new Item[] { ModItems.chlorine1, ModItems.chlorine2, ModItems.chlorine3, ModItems.chlorine4, ModItems.chlorine5, ModItems.chlorine6, ModItems.chlorine7, ModItems.chlorine8 })); - RenderingRegistry.registerEntityRenderingHandler(EntityPinkCloudFX.class, new MultiCloudRenderer(new Item[] { ModItems.pc1, ModItems.pc2, ModItems.pc3, ModItems.pc4, ModItems.pc5, ModItems.pc6, ModItems.pc7, ModItems.pc8 })); - RenderingRegistry.registerEntityRenderingHandler(com.hbm.entity.particle.EntityCloudFX.class, new MultiCloudRenderer(new Item[] { ModItems.cloud1, ModItems.cloud2, ModItems.cloud3, ModItems.cloud4, ModItems.cloud5, ModItems.cloud6, ModItems.cloud7, ModItems.cloud8 })); - RenderingRegistry.registerEntityRenderingHandler(EntityOrangeFX.class, new MultiCloudRenderer(new Item[] { ModItems.orange1, ModItems.orange2, ModItems.orange3, ModItems.orange4, ModItems.orange5, ModItems.orange6, ModItems.orange7, ModItems.orange8 })); - RenderingRegistry.registerEntityRenderingHandler(EntityFogFX.class, new FogRenderer()); - RenderingRegistry.registerEntityRenderingHandler(EntityEMPBlast.class, new RenderEMPBlast()); + //"particles" + RenderingRegistry.registerEntityRenderingHandler(EntityChlorineFX.class, new MultiCloudRenderer(new Item[] { ModItems.chlorine1, ModItems.chlorine2, ModItems.chlorine3, ModItems.chlorine4, ModItems.chlorine5, ModItems.chlorine6, ModItems.chlorine7, ModItems.chlorine8 })); + RenderingRegistry.registerEntityRenderingHandler(EntityPinkCloudFX.class, new MultiCloudRenderer(new Item[] { ModItems.pc1, ModItems.pc2, ModItems.pc3, ModItems.pc4, ModItems.pc5, ModItems.pc6, ModItems.pc7, ModItems.pc8 })); + RenderingRegistry.registerEntityRenderingHandler(com.hbm.entity.particle.EntityCloudFX.class, new MultiCloudRenderer(new Item[] { ModItems.cloud1, ModItems.cloud2, ModItems.cloud3, ModItems.cloud4, ModItems.cloud5, ModItems.cloud6, ModItems.cloud7, ModItems.cloud8 })); + RenderingRegistry.registerEntityRenderingHandler(EntityOrangeFX.class, new MultiCloudRenderer(new Item[] { ModItems.orange1, ModItems.orange2, ModItems.orange3, ModItems.orange4, ModItems.orange5, ModItems.orange6, ModItems.orange7, ModItems.orange8 })); + RenderingRegistry.registerEntityRenderingHandler(EntityFogFX.class, new FogRenderer()); + RenderingRegistry.registerEntityRenderingHandler(EntityEMPBlast.class, new RenderEMPBlast()); } @Override @@ -816,6 +816,7 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerBlockHandler(new RenderCRT()); RenderingRegistry.registerBlockHandler(new RenderToaster()); RenderingRegistry.registerBlockHandler(new RenderPartitioner()); + RenderingRegistry.registerBlockHandler(new RenderPneumoTube()); RenderingRegistry.registerBlockHandler(new RenderFoundryBasin()); RenderingRegistry.registerBlockHandler(new RenderFoundryMold()); diff --git a/src/main/java/com/hbm/render/block/RenderPneumoTube.java b/src/main/java/com/hbm/render/block/RenderPneumoTube.java new file mode 100644 index 000000000..4a28a0643 --- /dev/null +++ b/src/main/java/com/hbm/render/block/RenderPneumoTube.java @@ -0,0 +1,108 @@ +package com.hbm.render.block; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.network.PneumoTube; +import com.hbm.lib.Library; +import com.hbm.render.util.RenderBlocksNT; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.world.IBlockAccess; + +public class RenderPneumoTube implements ISimpleBlockRenderingHandler { + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + + Tessellator tessellator = Tessellator.instance; + PneumoTube duct = (PneumoTube) block; + + double lower = 0.3125D; + double upper = 0.6875D; + + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + + renderer.setRenderBounds(lower, lower, 0, upper, upper, 1); + + tessellator.startDrawingQuads(); + tessellator.setNormal(0F, 1F, 0F); renderer.renderFaceYPos(block, 0, 0, 0, duct.getIcon(0, 0)); + tessellator.setNormal(0F, -1F, 0F); renderer.renderFaceYNeg(block, 0, 0, 0, duct.getIcon(0, 0)); + tessellator.setNormal(1F, 0F, 0F); renderer.renderFaceXPos(block, 0, 0, 0, duct.getIcon(0, 0)); + tessellator.setNormal(-1F, 0F, 0F); renderer.renderFaceXNeg(block, 0, 0, 0, duct.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, 1F); renderer.renderFaceZPos(block, 0, 0, 0, duct.iconConnector); + tessellator.setNormal(0F, 0F, -1F); renderer.renderFaceZNeg(block, 0, 0, 0, duct.iconConnector); + tessellator.draw(); + + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + + renderer = RenderBlocksNT.INSTANCE.setWorld(world); + + Tessellator tessellator = Tessellator.instance; + tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); + PneumoTube duct = (PneumoTube) block; + + boolean pX = duct.canConnectTo(world, x, y, z, Library.POS_X); + boolean nX = duct.canConnectTo(world, x, y, z, Library.NEG_X); + boolean pY = duct.canConnectTo(world, x, y, z, Library.POS_Y); + boolean nY = duct.canConnectTo(world, x, y, z, Library.NEG_Y); + boolean pZ = duct.canConnectTo(world, x, y, z, Library.POS_Z); + boolean nZ = duct.canConnectTo(world, x, y, z, Library.NEG_Z); + + int mask = 0 + (pX ? 32 : 0) + (nX ? 16 : 0) + (pY ? 8 : 0) + (nY ? 4 : 0) + (pZ ? 2 : 0) + (nZ ? 1 : 0); + + double lower = 0.3125D; + double upper = 0.6875D; + + //Straight along X + if(mask == 0b110000) { + renderer.setRenderBounds(0.0D, lower, lower, 1.0D, upper, upper); + duct.renderSides[4] = false; + duct.renderSides[5] = false; + renderer.renderStandardBlock(block, x, y, z); + duct.resetRenderSides(); + + // Straight along Z + } else if(mask == 0b000011) { + renderer.setRenderBounds(lower, lower, 0.0D, upper, upper, 1.0D); + duct.renderSides[2] = false; + duct.renderSides[3] = false; + renderer.renderStandardBlock(block, x, y, z); + duct.resetRenderSides(); + + //Straight along Y + } else if(mask == 0b001100) { + renderer.setRenderBounds(lower, 0.0D, lower, upper, 1.0D, upper); + duct.renderSides[0] = false; + duct.renderSides[1] = false; + renderer.renderStandardBlock(block, x, y, z); + duct.resetRenderSides(); + } else { + renderer.setRenderBounds(lower, lower, lower, upper, upper, upper); + renderer.renderStandardBlock(block, x, y, z); + if(pX) { duct.renderSides[5] = false; renderer.setRenderBounds(upper, lower, lower, 1, upper, upper); renderer.renderStandardBlock(block, x, y, z); duct.resetRenderSides(); } + if(nX) { duct.renderSides[4] = false; renderer.setRenderBounds(0, lower, lower, lower, upper, upper); renderer.renderStandardBlock(block, x, y, z); duct.resetRenderSides(); } + if(pY) { duct.renderSides[1] = false; renderer.setRenderBounds(lower, upper, lower, upper, 1, upper); renderer.renderStandardBlock(block, x, y, z); duct.resetRenderSides(); } + if(nY) { duct.renderSides[0] = false; renderer.setRenderBounds(lower, 0, lower, upper, lower, upper); renderer.renderStandardBlock(block, x, y, z); duct.resetRenderSides(); } + if(pZ) { duct.renderSides[3] = false; renderer.setRenderBounds(lower, lower, upper, upper, upper, 1); renderer.renderStandardBlock(block, x, y, z); duct.resetRenderSides(); } + if(nZ) { duct.renderSides[2] = false; renderer.setRenderBounds(lower, lower, 0, upper, upper, lower); renderer.renderStandardBlock(block, x, y, z); duct.resetRenderSides(); } + } + + return true; + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return PneumoTube.renderID; + } +} diff --git a/src/main/java/com/hbm/render/block/ct/RenderBlocksCT.java b/src/main/java/com/hbm/render/block/ct/RenderBlocksCT.java index 498e81e3a..8f7ffd7ce 100644 --- a/src/main/java/com/hbm/render/block/ct/RenderBlocksCT.java +++ b/src/main/java/com/hbm/render/block/ct/RenderBlocksCT.java @@ -2,6 +2,7 @@ package com.hbm.render.block.ct; import org.lwjgl.opengl.GL11; +import com.hbm.interfaces.NotableComments; import com.hbm.main.MainRegistry; import com.hbm.render.block.ct.CTContext.CTFace; @@ -12,6 +13,7 @@ import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraftforge.common.util.ForgeDirection; +@NotableComments public class RenderBlocksCT extends RenderBlocks { public static RenderBlocksCT instance = new RenderBlocksCT(); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPneumoTube.java b/src/main/java/com/hbm/tileentity/network/TileEntityPneumoTube.java index 475403ebc..2034e9e6e 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityPneumoTube.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPneumoTube.java @@ -1,7 +1,19 @@ package com.hbm.tileentity.network; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; + import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; public class TileEntityPneumoTube extends TileEntity { + public ForgeDirection insertionDir = ForgeDirection.UNKNOWN; + public ForgeDirection ejectionDir = ForgeDirection.UNKNOWN; + + public FluidTank compair; + + public TileEntityPneumoTube() { + this.compair = new FluidTank(Fluids.AIR, 4_000).withPressure(1); + } } diff --git a/src/main/resources/assets/hbm/textures/blocks/pneumatic_pipe_connector.png b/src/main/resources/assets/hbm/textures/blocks/pneumatic_pipe_connector.png deleted file mode 100644 index 2866ed541aff5dc7d9a217c59ef966191d4642ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 277 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf;8%28zPiak9E0-7#&)hpy|q%(2_GjHRv%T->i~06N#SlUJFjG@B3V@ z{(4`ahl|VOp9TK6Uqtmki*4)(xpV!H<;>@|bWOcpp5-r)+bjL#;55cFJ?@n!XU&ZK zA|lwk@nF>I7VV(e>x&K3b~^6aaQpR_URDN)WC3HT2>smEOu;QlTi^B;Jh$oE`@!Z& ztF(`+**5ut_iQh069Ue>c>d9<{z;MF(K8*A6DwyGb1i@Gvge4&^9Ad^W(0Kp`(M9| Ze|}2g!DK$4EkJ)Uc)I$ztaD0e0st|hbL;>B diff --git a/src/main/resources/assets/hbm/textures/blocks/pneumatic_pipe_in.png b/src/main/resources/assets/hbm/textures/blocks/pneumatic_pipe_in.png deleted file mode 100644 index aba0b6d08cd1d90d8bcea617354bebd6a331c31c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 334 zcmV-U0kQsxP)?|F7l#Uz$sgy8v_7x&AZ~z7lz}%%X zJ0pshN)>XluqEk`I+$mRsQ+gB|DK-S@0THDjOibiFY=nYYI*(HV2sJa`&s0?m~VHd zKX+f-1>~_;B@5V={dzv0_v<;0?NZjb1Lqv?`6J|TSjBHrnK7mh4P{woktfeT2^j^D-yNx|b`lQd8RbDa^(h#JVJB0#Myj?$2Vrbe`q(Z2Xl#dS zYfVJeIRF3v07*qoM6N<$f~<6nng9R* diff --git a/src/main/resources/assets/hbm/textures/blocks/pneumatic_pipe_out.png b/src/main/resources/assets/hbm/textures/blocks/pneumatic_pipe_out.png deleted file mode 100644 index ed6ba42cc979b95875aa10628da9df68f4320656..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 352 zcmV-m0iXVfP)V4e5S+7k06xSYQc~n2RJ4?li0+PpepAzMQHnf(C-4J4 zk=kyMkYc+@w|6NH4xeo$Fx~FXtX4a_83GVd`}*`5rePIh|FZ%SWqy7XF)w5Qs5a-W zX_0q@Nz4_=2AX>@0MPq4oNiLocmiV#4wC}UZ^Qg?*408}MAZ7?x~{W`<)JLgR!VuB zz+c$M*UMj80DzPdzD5Au(w2+Uzv3&FixaG3Sj7-l4HtGVs?8ZzbJ~SRAgtz_&kul# z98Nb7PB(D6!FoQvTfCl+`@0w&XH{QF`5eL+178z)9{L=L!#jyC@#=GE>ux*69;>Kn y`WF;qx1IJe6*;Wt71zt{@2fpyYEqZ+h|2+Hqf68p00i_>zopr0JMp7jsO4v literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pneumatic_pipe_end.png b/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_end.png similarity index 100% rename from src/main/resources/assets/hbm/textures/blocks/pneumatic_pipe_end.png rename to src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_end.png diff --git a/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_in.png b/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_in.png new file mode 100644 index 0000000000000000000000000000000000000000..a8f60ec3d034d767e206e00795072df02e7d4e6a GIT binary patch literal 351 zcmV-l0igbgP)xJ5-DZCzwFllw5Dg(nm%gIvXFC_d;Y&hUsRUma4w*#s`FhCLQH#h)BZYa x#xk)BLgQViyUFZ=+^~Jb+vt@E0Mkd?_yZGZh`~dYpDq9Z002ovPDHLkV1i#RmFxfj literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_out.png b/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_out.png new file mode 100644 index 0000000000000000000000000000000000000000..4554f3b00468bfdf98cd5a74a8501a37bf6860f1 GIT binary patch literal 381 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 literal 0 HcmV?d00001