diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphite.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphite.java index 45ceb6d10..c5018700a 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphite.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphite.java @@ -32,7 +32,7 @@ public class BlockGraphite extends BlockFlammable implements IToolable { PacketDispatcher.wrapper.sendToAllAround(new ParticleBurstPacket(x, y, z, Block.getIdFromBlock(this), 0), new TargetPoint(world.provider.dimensionId, x, y, z, 50)); world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, this.stepSound.func_150496_b(), (this.stepSound.getVolume() + 1.0F) / 2.0F, this.stepSound.getPitch() * 0.8F); - BlockGraphiteRod.ejectItem(world, x, y, z, ForgeDirection.getOrientation(side), new ItemStack(ModItems.powder_coal)); + BlockGraphiteRod.ejectItem(world, x, y, z, ForgeDirection.getOrientation(side), new ItemStack(ModItems.ingot_graphite)); } return true; diff --git a/src/main/java/com/hbm/entity/EntityMappings.java b/src/main/java/com/hbm/entity/EntityMappings.java index 8d388474a..fee770026 100644 --- a/src/main/java/com/hbm/entity/EntityMappings.java +++ b/src/main/java/com/hbm/entity/EntityMappings.java @@ -16,7 +16,7 @@ import com.hbm.entity.particle.*; import com.hbm.entity.projectile.*; import com.hbm.entity.train.EntityRailCarBase.BoundingBoxDummyEntity; import com.hbm.entity.train.EntityRailCarRidable.SeatDummyEntity; -import com.hbm.entity.train.TrainCargoTram; +import com.hbm.entity.train.*; import com.hbm.main.MainRegistry; import com.hbm.util.Tuple.Quartet; @@ -218,6 +218,7 @@ public class EntityMappings { addEntity(SeatDummyEntity.class, "entity_ntm_seat_dummy", 250, false); addEntity(BoundingBoxDummyEntity.class, "entity_ntm_bounding_dummy", 250, false); addEntity(TrainCargoTram.class, "entity_ntm_cargo_tram", 250, false); + addEntity(TrainCargoTramTrailer.class, "entity_ntm_cargo_tram_trailer", 250, false); addMob(EntityCreeperNuclear.class, "entity_mob_nuclear_creeper", 0x204131, 0x75CE00); addMob(EntityCreeperTainted.class, "entity_mob_tainted_creeper", 0x813b9b, 0xd71fdd); diff --git a/src/main/java/com/hbm/entity/train/TrainCargoTramTrailer.java b/src/main/java/com/hbm/entity/train/TrainCargoTramTrailer.java new file mode 100644 index 000000000..8ff36ead4 --- /dev/null +++ b/src/main/java/com/hbm/entity/train/TrainCargoTramTrailer.java @@ -0,0 +1,54 @@ +package com.hbm.entity.train; + +import com.hbm.blocks.rail.IRailNTM.TrackGauge; + +import net.minecraft.util.DamageSource; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; + +public class TrainCargoTramTrailer extends EntityRailCarCargo { + + /* + * + * <-- + * + * _O\____________________________________________/O_ + * |____| |____| + * \__________________________________________/ + * '( + )' '( + )' + * + */ + + public TrainCargoTramTrailer(World world) { + super(world); + this.setSize(5F, 2F); + } + + @Override public TrackGauge getGauge() { return TrackGauge.STANDARD; } + @Override public double getLengthSpan() { return 1.5; } + @Override public int getSizeInventory() { return 29; } + @Override public String getInventoryName() { return this.hasCustomInventoryName() ? this.getEntityName() : "container.trainTramTrailer"; } + + @Override + public double getCurrentSpeed() { + return 0; //we'll figure out how linked carts work later on - i hope + } + + @Override + public DummyConfig[] getDummies() { + return new DummyConfig[] { + new DummyConfig(2F, 1F, Vec3.createVectorHelper(0, 0, 1.5)), + new DummyConfig(2F, 1F, Vec3.createVectorHelper(0, 0, 0)), + new DummyConfig(2F, 1F, Vec3.createVectorHelper(0, 0, -1.5)) + }; + } + + @Override + public boolean attackEntityFrom(DamageSource source, float amount) { + if(!this.worldObj.isRemote && !this.isDead) { + this.setDead(); + } + + return true; + } +} diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index b7c73b12e..b39ac64ad 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -276,7 +276,7 @@ public class Fluids { ESTRADIOL = new FluidType("ESTRADIOL", 0xCDD5D8, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID); FISHOIL = new FluidType("FISHOIL", 0x4B4A45, 0, 1, 0, EnumSymbol.NONE).addTraits(LIQUID); SUNFLOWEROIL = new FluidType("SUNFLOWEROIL", 0xCBAD45, 0, 1, 0, EnumSymbol.NONE).addTraits(LIQUID); - NITROGLYCERIN = new FluidType(112, "SUNFLOWEROIL", 0xCBAD45, 0, 4, 0, EnumSymbol.NONE).addTraits(LIQUID); + NITROGLYCERIN = new FluidType(112, "NITROGLYCERIN", 0x92ACA6, 0, 4, 0, EnumSymbol.NONE).addTraits(LIQUID); // ^ ^ ^ ^ ^ ^ ^ ^ //ADD NEW FLUIDS HERE diff --git a/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java b/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java index 7b73f053f..b47ad8804 100644 --- a/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java @@ -143,6 +143,8 @@ public class CrystallizerRecipes extends SerializableRecipe { registerRecipe(new ComparableStack(DictFrame.fromOne(ModItems.oil_tar, EnumTarType.PARAFFIN)), new CrystallizerRecipe(new ItemStack(ModItems.pill_red), 200), new FluidStack(Fluids.ESTRADIOL, 250)); registerRecipe(KEY_SAND, new CrystallizerRecipe(Blocks.clay, 20), new FluidStack(Fluids.COLLOID, 1_000)); + registerRecipe(new ComparableStack(ModBlocks.sand_quartz), new CrystallizerRecipe(new ItemStack(ModItems.ball_dynamite, 16), 20), new FluidStack(Fluids.NITROGLYCERIN, 1_000)); + registerRecipe(NETHERQUARTZ.dust(), new CrystallizerRecipe(new ItemStack(ModItems.ball_dynamite, 4), 20), new FluidStack(Fluids.NITROGLYCERIN, 250)); /// COMPAT CERTUS QUARTZ /// List quartz = OreDictionary.getOres("crystalCertusQuartz"); diff --git a/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java b/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java index d1a12d6f2..e9bcf6ffc 100644 --- a/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java @@ -142,8 +142,6 @@ public class MixerRecipes extends SerializableRecipe { for(MixerRecipe mix : recipes) { writer.beginObject(); - FluidStack output = new FluidStack(rec.getKey(), mix.output); - writer.name("duration").value(mix.processTime); writer.name("outputAmount").value(mix.output); diff --git a/src/main/java/com/hbm/items/special/ItemTrain.java b/src/main/java/com/hbm/items/special/ItemTrain.java index 1a2648d38..05f55231d 100644 --- a/src/main/java/com/hbm/items/special/ItemTrain.java +++ b/src/main/java/com/hbm/items/special/ItemTrain.java @@ -5,6 +5,7 @@ import java.util.List; import com.hbm.blocks.rail.IRailNTM; import com.hbm.entity.train.EntityRailCarBase; import com.hbm.entity.train.TrainCargoTram; +import com.hbm.entity.train.TrainCargoTramTrailer; import com.hbm.items.ItemEnumMulti; import com.hbm.util.EnumUtil; @@ -27,18 +28,19 @@ public class ItemTrain extends ItemEnumMulti { public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { EnumTrainType train = EnumUtil.grabEnumSafely(this.theEnum, stack.getItemDamage()); - list.add(EnumChatFormatting.GREEN + "Engine: " + EnumChatFormatting.RESET + train.engine); + if(train.engine != null) list.add(EnumChatFormatting.GREEN + "Engine: " + EnumChatFormatting.RESET + train.engine); list.add(EnumChatFormatting.GREEN + "Gauge: " + EnumChatFormatting.RESET + train.gauge); - list.add(EnumChatFormatting.GREEN + "Max Speed: " + EnumChatFormatting.RESET + train.maxSpeed); - list.add(EnumChatFormatting.GREEN + "Acceleration: " + EnumChatFormatting.RESET + train.acceleration); - list.add(EnumChatFormatting.GREEN + "Engine Brake Threshold: " + EnumChatFormatting.RESET + train.brakeThreshold); - list.add(EnumChatFormatting.GREEN + "Parking Brake: " + EnumChatFormatting.RESET + train.parkingBrake); + if(train.maxSpeed != null) list.add(EnumChatFormatting.GREEN + "Max Speed: " + EnumChatFormatting.RESET + train.maxSpeed); + if(train.acceleration != null) list.add(EnumChatFormatting.GREEN + "Acceleration: " + EnumChatFormatting.RESET + train.acceleration); + if(train.brakeThreshold != null) list.add(EnumChatFormatting.GREEN + "Engine Brake Threshold: " + EnumChatFormatting.RESET + train.brakeThreshold); + if(train.parkingBrake != null) list.add(EnumChatFormatting.GREEN + "Parking Brake: " + EnumChatFormatting.RESET + train.parkingBrake); } public static enum EnumTrainType { - // Engine Gauge Max Speed Accel. Eng. Brake Parking Brake - CARGO_TRAM(TrainCargoTram.class, "Electric", "Standard Gauge", "10m/s", "0.2m/s", "<1m/s", "Yes"); + // Engine Gauge Max Speed Accel. Eng. Brake Parking Brake + CARGO_TRAM(TrainCargoTram.class, "Electric", "Standard Gauge", "10m/s", "0.2m/s", "<1m/s", "Yes"), + CARGO_TRAM_TRAILER(TrainCargoTramTrailer.class, null, "Standard Gauge", "Yes", null, null, "No"); public Class train; public String engine; diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index c47b1b9e1..a757432e5 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -691,6 +691,7 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerEntityRenderingHandler(SeatDummyEntity.class, new RenderEmpty()); RenderingRegistry.registerEntityRenderingHandler(BoundingBoxDummyEntity.class, new RenderEmpty()); RenderingRegistry.registerEntityRenderingHandler(TrainCargoTram.class, new RenderTrainCargoTram()); + RenderingRegistry.registerEntityRenderingHandler(TrainCargoTramTrailer.class, new RenderTrainCargoTramTrailer()); //items RenderingRegistry.registerEntityRenderingHandler(EntityMovingItem.class, new RenderMovingItem()); RenderingRegistry.registerEntityRenderingHandler(EntityMovingPackage.class, new RenderMovingPackage()); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 02ce53a80..7fda63959 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -578,7 +578,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModItems.gun_kit_2, 1), new Object[] { "III", "GLG", "PPP", 'I', ModItems.plate_polymer, 'L', ModItems.ducttape, 'G', ModItems.gun_kit_1, 'P', IRON.plate() }); addRecipeAuto(new ItemStack(ModItems.igniter, 1), new Object[] { " W", "SC", "CE", 'S', STEEL.plate(), 'W', ModItems.wire_schrabidium, 'C', ModItems.circuit_schrabidium, 'E', EUPH.ingot() }); - addRecipeAuto(new ItemStack(ModItems.watch, 1), new Object[] { "LEL", "EWE", "LEL", 'E', EUPH.ingot(), 'L', KEY_BLUE, 'W', Items.clock }); + addRecipeAuto(new ItemStack(ModItems.watch, 1), new Object[] { "LYL", "EWE", "LYL", 'E', EUPH.ingot(), 'L', KEY_BLUE, 'W', Items.clock, 'Y', ModItems.billet_yharonite }); addRecipeAuto(new ItemStack(ModItems.key, 1), new Object[] { " B", " B ", "P ", 'P', STEEL.plate(), 'B', ModItems.bolt_tungsten }); addRecipeAuto(new ItemStack(ModItems.key_kit, 1), new Object[] { "PKP", "DTD", "PKP", 'P', GOLD.plate(), 'K', ModItems.key, 'D', DESH.dust(), 'T', KEY_TOOL_SCREWDRIVER }); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index c947a97be..30f1e2c2e 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -1014,6 +1014,7 @@ public class ResourceManager { public static final IModelCustom cart_destroyer = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/vehicles/cart_destroyer.obj")); public static final IModelCustom cart_powder = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/vehicles/cart_powder.obj")); public static final IModelCustom train_cargo_tram = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/vehicles/tram.obj")); + public static final IModelCustom train_cargo_tram_trailer = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/vehicles/tram_trailer.obj")); ////Texture Entities @@ -1288,6 +1289,7 @@ public class ResourceManager { public static final ResourceLocation cart_semtex_side = new ResourceLocation(RefStrings.MODID, "textures/blocks/semtex_side.png"); public static final ResourceLocation cart_semtex_top = new ResourceLocation(RefStrings.MODID, "textures/blocks/semtex_bottom.png"); public static final ResourceLocation train_tram = new ResourceLocation(RefStrings.MODID, "textures/models/trains/tram.png"); + public static final ResourceLocation tram_trailer = new ResourceLocation(RefStrings.MODID, "textures/models/trains/tram_trailer.png"); //ISBRHs public static final IModelCustom scaffold = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/scaffold.obj")); diff --git a/src/main/java/com/hbm/render/entity/item/RenderTrainCargoTramTrailer.java b/src/main/java/com/hbm/render/entity/item/RenderTrainCargoTramTrailer.java new file mode 100644 index 000000000..e0166ac4a --- /dev/null +++ b/src/main/java/com/hbm/render/entity/item/RenderTrainCargoTramTrailer.java @@ -0,0 +1,41 @@ +package com.hbm.render.entity.item; + +import org.lwjgl.opengl.GL11; + +import com.hbm.main.ResourceManager; + +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; + +public class RenderTrainCargoTramTrailer extends Render { + + @Override + public void doRender(Entity entity, double x, double y, double z, float swing, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x, y, z); + + float yaw = entity.rotationYaw; + float prevYaw = entity.prevRotationYaw; + + if(yaw - prevYaw > 180) yaw -= 360; + if(prevYaw - yaw > 180) prevYaw -= 360; + + float yawInterp = prevYaw + (yaw - prevYaw) * interp - 720; + + GL11.glRotated(-yawInterp, 0, 1, 0); + GL11.glRotated(-entity.rotationPitch, 0, 0, 1); + + GL11.glDisable(GL11.GL_CULL_FACE); + bindTexture(ResourceManager.tram_trailer); + ResourceManager.train_cargo_tram_trailer.renderAll(); + GL11.glEnable(GL11.GL_CULL_FACE); + + GL11.glPopMatrix(); + } + + @Override + protected ResourceLocation getEntityTexture(Entity entity) { + return ResourceManager.tram_trailer; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java index ec4354528..218168090 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java @@ -66,8 +66,6 @@ public class TileEntityCoreEmitter extends TileEntityMachineBase implements IEne watts = MathHelper.clamp_int(watts, 1, 100); long demand = maxPower * watts / 2000; - - tank.updateTank(xCoord, yCoord, zCoord, worldObj.provider.dimensionId); beam = 0; @@ -175,6 +173,7 @@ public class TileEntityCoreEmitter extends TileEntityMachineBase implements IEne data.setLong("prev", prev); data.setInteger("beam", beam); data.setBoolean("isOn", isOn); + tank.writeToNBT(data, "tank"); this.networkPack(data, 250); } } @@ -186,6 +185,7 @@ public class TileEntityCoreEmitter extends TileEntityMachineBase implements IEne prev = data.getLong("prev"); beam = data.getInteger("beam"); isOn = data.getBoolean("isOn"); + tank.readFromNBT(data, "tank"); } public long getPowerScaled(long i) { diff --git a/src/main/resources/assets/hbm/models/vehicles/tram_trailer.obj b/src/main/resources/assets/hbm/models/vehicles/tram_trailer.obj new file mode 100644 index 000000000..270cdde15 --- /dev/null +++ b/src/main/resources/assets/hbm/models/vehicles/tram_trailer.obj @@ -0,0 +1,561 @@ +# Blender v2.79 (sub 0) OBJ File: 'tram_trailer.blend' +# www.blender.org +o Plane +v -1.000000 0.250000 2.500000 +v 1.000000 0.250000 2.500000 +v -1.000000 0.250000 -2.500000 +v 1.000000 0.250000 -2.500000 +v -1.000000 0.750000 -2.500000 +v -1.000000 0.750000 2.500000 +v 1.000000 0.750000 2.500000 +v 1.000000 0.750000 -2.500000 +v 0.562500 0.375000 2.562500 +v 0.562500 0.875000 2.562500 +v 0.562500 0.375000 2.062500 +v 0.562500 0.875000 2.062500 +v 1.062500 0.375000 2.562500 +v 1.062500 0.875000 2.562500 +v 1.062500 0.375000 2.062500 +v 1.062500 0.875000 2.062500 +v -1.062500 0.375000 2.562500 +v -1.062500 0.875000 2.562500 +v -1.062500 0.375000 2.062500 +v -1.062500 0.875000 2.062500 +v -0.562500 0.375000 2.562500 +v -0.562500 0.875000 2.562500 +v -0.562500 0.375000 2.062500 +v -0.562500 0.875000 2.062500 +v 0.562500 0.375000 -1.812500 +v 0.562500 0.875000 -1.812500 +v 0.562500 0.375000 -2.562500 +v 0.562500 0.875000 -2.562500 +v 1.062500 0.375000 -1.812500 +v 1.062500 0.875000 -1.812500 +v 1.062500 0.375000 -2.562500 +v 1.062500 0.875000 -2.562500 +v -1.062500 0.375000 -1.812500 +v -1.062500 0.875000 -1.812500 +v -1.062500 0.375000 -2.562500 +v -1.062500 0.875000 -2.562500 +v -0.562500 0.375000 -1.812500 +v -0.562500 0.875000 -1.812500 +v -0.562500 0.375000 -2.562500 +v -0.562500 0.875000 -2.562500 +v 0.875000 0.250000 -1.625000 +v 0.750000 0.250000 1.750000 +v 0.750000 0.073223 -1.676777 +v 0.875000 0.250000 -1.250000 +v 0.875000 0.250000 1.750000 +v 0.750000 0.073223 1.323223 +v 0.750000 0.000000 1.500000 +v 0.750000 0.073223 1.676777 +v 0.750000 0.250000 -1.250000 +v 0.750000 0.250000 1.250000 +v 0.875000 0.250000 -1.375000 +v 0.875000 0.073223 -1.323223 +v 0.875000 0.250000 1.250000 +v 0.875000 0.073223 1.323223 +v 0.875000 0.000000 1.500000 +v 0.875000 0.073223 1.676777 +v 0.875000 0.250000 1.625000 +v 0.875000 0.000000 -1.500000 +v 0.875000 0.073223 -1.676777 +v 0.875000 0.250000 -1.750000 +v 0.875000 0.250000 1.375000 +v 0.875000 0.161612 1.411612 +v 0.875000 0.125000 1.500000 +v 0.875000 0.161612 1.588388 +v 0.937500 0.250000 1.625000 +v 0.750000 0.250000 -1.750000 +v 0.750000 0.073223 -1.323223 +v 0.750000 0.000000 -1.500000 +v 0.937500 0.250000 1.375000 +v 0.937500 0.161612 1.411612 +v 0.937500 0.125000 1.500000 +v 0.937500 0.161612 1.588388 +v 0.875000 0.161612 -1.588388 +v 0.875000 0.125000 -1.500000 +v 0.875000 0.161612 -1.411612 +v 0.937500 0.250000 -1.375000 +v 0.937500 0.250000 -1.625000 +v 0.937500 0.161612 -1.588388 +v 0.937500 0.125000 -1.500000 +v 0.937500 0.161612 -1.411612 +v -0.750000 0.250000 2.000000 +v 0.750000 0.250000 2.000000 +v -0.750000 0.250000 -2.000000 +v 0.750000 0.250000 -2.000000 +v -0.750000 0.125000 -1.875000 +v -0.750000 0.125000 1.875000 +v 0.750000 0.125000 1.875000 +v 0.750000 0.125000 -1.875000 +v -0.875000 0.250000 1.625000 +v -0.750000 0.250000 -1.750000 +v -0.750000 0.073223 1.676777 +v -0.875000 0.250000 1.250000 +v -0.875000 0.250000 -1.750000 +v -0.750000 0.073223 -1.323223 +v -0.750000 0.000000 -1.500000 +v -0.750000 0.073223 -1.676777 +v -0.750000 0.250000 1.250000 +v -0.750000 0.250000 -1.250000 +v -0.875000 0.250000 1.375000 +v -0.875000 0.073223 1.323223 +v -0.875000 0.250000 -1.250000 +v -0.875000 0.073223 -1.323223 +v -0.875000 0.000000 -1.500000 +v -0.875000 0.073223 -1.676777 +v -0.875000 0.250000 -1.625000 +v -0.875000 0.000000 1.500000 +v -0.875000 0.073223 1.676777 +v -0.875000 0.250000 1.750000 +v -0.875000 0.250000 -1.375000 +v -0.875000 0.161612 -1.411611 +v -0.875000 0.125000 -1.500000 +v -0.875000 0.161612 -1.588388 +v -0.937500 0.250000 -1.625000 +v -0.750000 0.250000 1.750000 +v -0.750000 0.073223 1.323223 +v -0.750000 0.000000 1.500000 +v -0.937500 0.250000 -1.375000 +v -0.937500 0.161612 -1.411611 +v -0.937500 0.125000 -1.500000 +v -0.937500 0.161612 -1.588388 +v -0.875000 0.161612 1.588389 +v -0.875000 0.125000 1.500000 +v -0.875000 0.161612 1.411612 +v -0.937500 0.250000 1.375000 +v -0.937500 0.250000 1.625000 +v -0.937500 0.161612 1.588389 +v -0.937500 0.125000 1.500000 +v -0.937500 0.161612 1.411612 +vt 0.543210 0.090909 +vt 0.049383 0.454545 +vt 0.049383 0.090909 +vt 0.049383 0.090909 +vt 0.543210 0.454545 +vt 0.049383 0.454545 +vt 0.543210 0.000000 +vt 0.049383 0.000000 +vt 0.049383 0.545455 +vt 0.543210 0.545455 +vt 0.592593 0.454545 +vt 0.543210 0.090909 +vt 0.592593 0.090909 +vt -0.000000 0.090909 +vt -0.000000 0.454545 +vt 0.049383 0.727273 +vt -0.000000 0.636364 +vt 0.049383 0.636364 +vt 0.049383 0.818182 +vt 0.098765 0.909091 +vt 0.049383 0.909091 +vt 0.148148 0.727273 +vt 0.098765 0.636364 +vt 0.148148 0.636364 +vt 0.098765 0.727273 +vt 0.098765 0.545455 +vt 0.049383 0.545455 +vt 0.098765 0.818182 +vt 0.049383 0.727273 +vt -0.000000 0.636364 +vt 0.049383 0.636364 +vt 0.049383 0.818182 +vt 0.098765 0.909091 +vt 0.049383 0.909091 +vt 0.148148 0.727273 +vt 0.098765 0.636364 +vt 0.148148 0.636364 +vt 0.098765 0.727273 +vt 0.098765 0.545455 +vt 0.049383 0.545455 +vt 0.098765 0.818182 +vt 0.345679 0.772727 +vt 0.271605 0.681818 +vt 0.345679 0.681818 +vt 0.271605 0.772727 +vt 0.222222 0.681818 +vt 0.222222 0.772727 +vt 0.148148 0.681818 +vt 0.222222 0.909091 +vt 0.271605 1.000000 +vt 0.222222 1.000000 +vt 0.271605 0.545455 +vt 0.345679 0.772727 +vt 0.271605 0.681818 +vt 0.345679 0.681818 +vt 0.271605 0.772727 +vt 0.222222 0.681818 +vt 0.222222 0.772727 +vt 0.148148 0.681818 +vt 0.222222 0.909091 +vt 0.271605 1.000000 +vt 0.222222 1.000000 +vt 0.271605 0.545455 +vt 0.456790 0.568182 +vt 0.438272 0.590909 +vt 0.438272 0.568182 +vt 0.456790 0.568182 +vt 0.438272 0.590909 +vt 0.438272 0.568182 +vt 0.419210 0.590495 +vt 0.377874 0.558974 +vt 0.394996 0.545918 +vt 0.493827 0.568182 +vt 0.475309 0.590909 +vt 0.475309 0.568182 +vt 0.349457 0.574879 +vt 0.358021 0.568349 +vt 0.366584 0.574879 +vt 0.469136 0.590909 +vt 0.456790 0.590909 +vt 0.419753 0.568182 +vt 0.432099 0.590909 +vt 0.419753 0.590909 +vt 0.469136 0.590909 +vt 0.456790 0.590909 +vt 0.419753 0.568182 +vt 0.432099 0.590909 +vt 0.419753 0.590909 +vt 0.493827 0.568182 +vt 0.475309 0.590909 +vt 0.475309 0.568182 +vt 0.349457 0.574879 +vt 0.358021 0.568349 +vt 0.366584 0.574879 +vt 0.377874 0.558974 +vt 0.394996 0.545918 +vt 0.412118 0.558974 +vt 0.975309 0.022727 +vt 0.604938 0.295455 +vt 0.604938 0.022727 +vt 0.987654 0.295455 +vt 0.987654 0.022727 +vt 0.592593 0.022727 +vt 0.592593 0.295455 +vt 0.592593 0.318182 +vt 0.975309 0.295455 +vt 0.987654 0.318182 +vt 0.987654 0.000000 +vt 0.592593 0.000000 +vt 0.456790 0.568182 +vt 0.438272 0.590909 +vt 0.438272 0.568182 +vt 0.456790 0.568182 +vt 0.438272 0.590909 +vt 0.438272 0.568182 +vt 0.419210 0.590495 +vt 0.377874 0.558974 +vt 0.394996 0.545918 +vt 0.493827 0.568182 +vt 0.475309 0.590909 +vt 0.475309 0.568182 +vt 0.358021 0.568349 +vt 0.366584 0.574879 +vt 0.370132 0.590644 +vt 0.475309 0.568182 +vt 0.456790 0.590909 +vt 0.419753 0.590909 +vt 0.419753 0.568182 +vt 0.456790 0.590909 +vt 0.419753 0.590909 +vt 0.419753 0.568182 +vt 0.493827 0.568182 +vt 0.475309 0.590909 +vt 0.358021 0.568349 +vt 0.366584 0.574879 +vt 0.370132 0.590644 +vt 0.377874 0.558974 +vt 0.394996 0.545918 +vt 0.412118 0.558974 +vt 0.543210 0.454545 +vt -0.000000 0.727273 +vt -0.000000 0.727273 +vt 0.148148 0.772727 +vt 0.271605 0.909091 +vt 0.222222 0.545455 +vt 0.148148 0.772727 +vt 0.271605 0.909091 +vt 0.222222 0.545455 +vt 0.450617 0.590909 +vt 0.450617 0.590909 +vt 0.412118 0.558974 +vt 0.370781 0.590495 +vt 0.487654 0.590909 +vt 0.370132 0.590644 +vt 0.345910 0.590644 +vt 0.487654 0.590909 +vt 0.370132 0.590644 +vt 0.345910 0.590644 +vt 0.419210 0.590495 +vt 0.370781 0.590495 +vt 0.450617 0.590909 +vt 0.450617 0.590909 +vt 0.412118 0.558974 +vt 0.370781 0.590495 +vt 0.487654 0.590909 +vt 0.345910 0.590644 +vt 0.349457 0.574879 +vt 0.469136 0.590909 +vt 0.432099 0.590909 +vt 0.469136 0.590909 +vt 0.432099 0.590909 +vt 0.487654 0.590909 +vt 0.345910 0.590644 +vt 0.349457 0.574879 +vt 0.419210 0.590495 +vt 0.370781 0.590495 +vt 0.475309 0.545455 +vt 0.456790 0.545455 +vt 0.456790 0.602273 +vt 0.438272 0.545455 +vt 0.493827 0.545455 +vt 0.419753 0.602273 +vt 0.475309 0.602273 +vt 0.419753 0.545455 +vt 0.438272 0.602273 +vt 0.438272 0.545455 +vt 0.419753 0.545455 +vt 0.438272 0.602273 +vt 0.475309 0.602273 +vt 0.493827 0.545455 +vt 0.475309 0.545455 +vt 0.456790 0.545455 +vt 0.419753 0.602273 +vt 0.456790 0.602273 +vt 0.475309 0.545455 +vt 0.456790 0.545455 +vt 0.456790 0.602273 +vt 0.438272 0.545455 +vt 0.493827 0.545455 +vt 0.419753 0.602273 +vt 0.475309 0.602273 +vt 0.419753 0.545455 +vt 0.438272 0.602273 +vt 0.438272 0.545455 +vt 0.419753 0.545455 +vt 0.438272 0.602273 +vt 0.475309 0.602273 +vt 0.475309 0.545455 +vt 0.456790 0.545455 +vt 0.419753 0.602273 +vt 0.456790 0.602273 +vt 0.469136 0.602273 +vt 0.432099 0.602273 +vt 0.487654 0.602273 +vt 0.450617 0.602273 +vt 0.450617 0.602273 +vt 0.487654 0.602273 +vt 0.432099 0.602273 +vt 0.469136 0.602273 +vt 0.469136 0.602273 +vt 0.432099 0.602273 +vt 0.487654 0.602273 +vt 0.450617 0.602273 +vt 0.450617 0.602273 +vt 0.487654 0.602273 +vt 0.493827 0.545455 +vt 0.432099 0.602273 +vt 0.469136 0.602273 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 -0.3827 -0.9239 +vn 0.0000 -0.3827 0.9239 +s off +f 3/1/1 2/2/1 1/3/1 +f 7/4/2 5/5/2 6/6/2 +f 4/7/3 7/4/3 2/8/3 +f 1/9/4 5/5/4 3/10/4 +f 3/11/5 8/12/5 4/13/5 +f 2/14/6 6/6/6 1/15/6 +f 10/16/4 11/17/4 9/18/4 +f 12/19/5 15/20/5 11/21/5 +f 16/22/3 13/23/3 15/24/3 +f 14/25/6 9/18/6 13/23/6 +f 15/26/1 9/18/1 11/27/1 +f 12/19/2 14/25/2 16/28/2 +f 18/29/4 19/30/4 17/31/4 +f 20/32/5 23/33/5 19/34/5 +f 24/35/3 21/36/3 23/37/3 +f 22/38/6 17/31/6 21/36/6 +f 23/39/1 17/31/1 19/40/1 +f 20/32/2 22/38/2 24/41/2 +f 26/42/4 27/43/4 25/44/4 +f 28/45/5 31/46/5 27/43/5 +f 32/47/3 29/48/3 31/46/3 +f 30/49/6 25/50/6 29/51/6 +f 31/46/1 25/52/1 27/43/1 +f 28/45/2 30/49/2 32/47/2 +f 34/53/4 35/54/4 33/55/4 +f 36/56/5 39/57/5 35/54/5 +f 40/58/3 37/59/3 39/57/3 +f 38/60/6 33/61/6 37/62/6 +f 39/57/1 33/63/1 35/54/1 +f 36/56/2 38/60/2 40/58/2 +f 58/64/3 75/65/3 52/66/3 +f 55/67/3 64/68/3 56/69/3 +f 49/70/4 43/71/4 68/72/4 +f 53/73/3 62/74/3 54/75/3 +f 80/76/3 79/77/3 78/78/3 +f 58/64/3 73/79/3 74/80/3 +f 45/81/3 64/82/3 57/83/3 +f 55/67/3 62/84/3 63/85/3 +f 44/86/3 75/87/3 51/88/3 +f 60/89/3 73/90/3 59/91/3 +f 72/92/3 71/93/3 70/94/3 +f 46/95/4 47/96/4 48/97/4 +f 85/98/1 87/99/1 86/100/1 +f 84/101/7 85/98/7 83/102/7 +f 81/103/8 87/99/8 82/104/8 +f 82/105/3 88/106/3 84/107/3 +f 83/108/4 86/100/4 81/109/4 +f 106/110/4 123/111/4 100/112/4 +f 103/113/4 112/114/4 104/115/4 +f 97/116/3 91/117/3 116/118/3 +f 101/119/4 110/120/4 102/121/4 +f 127/122/4 126/123/4 125/124/4 +f 107/125/4 122/126/4 106/110/4 +f 104/115/4 105/127/4 93/128/4 +f 102/121/4 111/129/4 103/113/4 +f 100/112/4 99/130/4 92/131/4 +f 108/132/4 121/133/4 107/125/4 +f 119/134/4 118/135/4 117/136/4 +f 94/137/3 95/138/3 96/139/3 +f 3/1/1 4/140/1 2/2/1 +f 7/4/2 8/12/2 5/5/2 +f 4/7/3 8/12/3 7/4/3 +f 1/9/4 6/6/4 5/5/4 +f 3/11/5 5/5/5 8/12/5 +f 2/14/6 7/4/6 6/6/6 +f 10/16/4 12/141/4 11/17/4 +f 12/19/5 16/28/5 15/20/5 +f 16/22/3 14/25/3 13/23/3 +f 14/25/6 10/16/6 9/18/6 +f 15/26/1 13/23/1 9/18/1 +f 12/19/2 10/16/2 14/25/2 +f 18/29/4 20/142/4 19/30/4 +f 20/32/5 24/41/5 23/33/5 +f 24/35/3 22/38/3 21/36/3 +f 22/38/6 18/29/6 17/31/6 +f 23/39/1 21/36/1 17/31/1 +f 20/32/2 18/29/2 22/38/2 +f 26/42/4 28/45/4 27/43/4 +f 28/45/5 32/47/5 31/46/5 +f 32/47/3 30/143/3 29/48/3 +f 30/49/6 26/144/6 25/50/6 +f 31/46/1 29/145/1 25/52/1 +f 28/45/2 26/144/2 30/49/2 +f 34/53/4 36/56/4 35/54/4 +f 36/56/5 40/58/5 39/57/5 +f 40/58/3 38/146/3 37/59/3 +f 38/60/6 34/147/6 33/61/6 +f 39/57/1 37/148/1 33/63/1 +f 36/56/2 34/147/2 38/60/2 +f 58/64/3 74/149/3 75/65/3 +f 55/67/3 63/150/3 64/68/3 +f 68/72/4 67/151/4 49/70/4 +f 49/70/4 66/152/4 43/71/4 +f 53/73/3 61/153/3 62/74/3 +f 77/154/3 76/155/3 78/78/3 +f 76/155/3 80/76/3 78/78/3 +f 58/64/3 59/91/3 73/79/3 +f 45/81/3 56/69/3 64/82/3 +f 55/67/3 54/75/3 62/84/3 +f 44/86/3 52/66/3 75/87/3 +f 60/89/3 41/156/3 73/90/3 +f 69/157/3 65/158/3 70/94/3 +f 65/158/3 72/92/3 70/94/3 +f 42/159/4 50/160/4 48/97/4 +f 50/160/4 46/95/4 48/97/4 +f 85/98/1 88/106/1 87/99/1 +f 84/101/7 88/106/7 85/98/7 +f 81/103/8 86/100/8 87/99/8 +f 82/105/3 87/99/3 88/106/3 +f 83/108/4 85/98/4 86/100/4 +f 106/110/4 122/161/4 123/111/4 +f 103/113/4 111/162/4 112/114/4 +f 116/118/3 115/163/3 97/116/3 +f 97/116/3 114/164/3 91/117/3 +f 101/119/4 109/165/4 110/120/4 +f 125/124/4 124/166/4 128/167/4 +f 128/167/4 127/122/4 125/124/4 +f 107/125/4 121/168/4 122/126/4 +f 104/115/4 112/169/4 105/127/4 +f 102/121/4 110/170/4 111/129/4 +f 100/112/4 123/171/4 99/130/4 +f 108/132/4 89/172/4 121/133/4 +f 117/136/4 113/173/4 120/174/4 +f 120/174/4 119/134/4 117/136/4 +f 90/175/3 98/176/3 96/139/3 +f 98/176/3 94/137/3 96/139/3 +s 1 +f 46/177/7 55/67/1 47/178/1 +f 73/79/7 79/179/1 74/80/1 +f 47/178/1 56/69/8 48/180/8 +f 50/181/9 54/75/7 46/177/7 +f 75/87/8 76/182/10 51/88/10 +f 41/156/9 78/183/7 73/90/7 +f 48/180/8 45/81/10 42/184/10 +f 74/149/1 80/185/8 75/65/8 +f 67/186/8 44/86/10 49/187/10 +f 63/150/1 72/188/8 64/68/8 +f 61/153/9 70/189/7 62/74/7 +f 66/190/9 59/91/7 43/191/7 +f 68/192/1 52/66/8 67/186/8 +f 64/82/8 65/193/10 57/83/10 +f 62/84/7 71/194/1 63/85/1 +f 43/191/7 58/64/1 68/192/1 +f 94/195/8 103/113/1 95/196/1 +f 121/168/8 127/197/1 122/126/1 +f 95/196/1 104/115/7 96/198/7 +f 98/199/10 102/121/8 94/195/8 +f 123/171/7 124/200/9 99/130/9 +f 89/172/10 126/201/8 121/133/8 +f 90/202/9 104/115/7 93/128/9 +f 122/161/1 128/203/7 123/111/7 +f 115/204/7 92/131/9 97/205/9 +f 111/162/1 120/206/7 112/114/7 +f 109/165/10 118/207/8 110/120/8 +f 91/208/8 108/132/10 107/125/8 +f 116/209/1 100/112/7 115/204/7 +f 112/169/7 113/210/9 105/127/9 +f 110/170/8 119/211/1 111/129/1 +f 91/208/8 106/110/1 116/209/1 +f 46/177/7 54/75/7 55/67/1 +f 73/79/7 78/212/7 79/179/1 +f 47/178/1 55/67/1 56/69/8 +f 50/181/9 53/73/9 54/75/7 +f 75/87/8 80/213/8 76/182/10 +f 41/156/9 77/214/9 78/183/7 +f 48/180/8 56/69/8 45/81/10 +f 74/149/1 79/215/1 80/185/8 +f 67/186/8 52/66/8 44/86/10 +f 63/150/1 71/216/1 72/188/8 +f 61/153/9 69/217/9 70/189/7 +f 66/190/9 60/89/9 59/91/7 +f 68/192/1 58/64/1 52/66/8 +f 64/82/8 72/218/8 65/193/10 +f 62/84/7 70/219/7 71/194/1 +f 43/191/7 59/91/7 58/64/1 +f 94/195/8 102/121/8 103/113/1 +f 121/168/8 126/220/8 127/197/1 +f 95/196/1 103/113/1 104/115/7 +f 98/199/10 101/119/10 102/121/8 +f 123/171/7 128/221/7 124/200/9 +f 89/172/10 125/222/10 126/201/8 +f 90/202/9 96/198/7 104/115/7 +f 122/161/1 127/223/1 128/203/7 +f 115/204/7 100/112/7 92/131/9 +f 111/162/1 119/224/1 120/206/7 +f 109/165/10 117/225/10 118/207/8 +f 91/208/8 114/226/10 108/132/10 +f 116/209/1 106/110/1 100/112/7 +f 112/169/7 120/227/7 113/210/9 +f 110/170/8 118/228/8 119/211/1 +f 91/208/8 107/125/8 106/110/1 diff --git a/src/main/resources/assets/hbm/textures/gui/fluids/nitroglycerin.png b/src/main/resources/assets/hbm/textures/gui/fluids/nitroglycerin.png new file mode 100644 index 000000000..7ce138094 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/gui/fluids/nitroglycerin.png differ diff --git a/src/main/resources/assets/hbm/textures/items/train.cargo_tram_trailer.png b/src/main/resources/assets/hbm/textures/items/train.cargo_tram_trailer.png new file mode 100644 index 000000000..8783c427d Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/train.cargo_tram_trailer.png differ diff --git a/src/main/resources/assets/hbm/textures/models/tank/tank_NITROGLYCERIN.png b/src/main/resources/assets/hbm/textures/models/tank/tank_NITROGLYCERIN.png new file mode 100644 index 000000000..afc63209a Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/tank/tank_NITROGLYCERIN.png differ diff --git a/src/main/resources/assets/hbm/textures/models/trains/tram_trailer.png b/src/main/resources/assets/hbm/textures/models/trains/tram_trailer.png new file mode 100644 index 000000000..382be5124 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/trains/tram_trailer.png differ