From e4e4e00c3076abf303a1d5bb4a8c2c32627a3724 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 22 May 2022 18:17:05 +0200 Subject: [PATCH] recipes and sound loop fixes --- .../hbm/blocks/machine/MachineTurbofan.java | 65 +++++++++--------- .../java/com/hbm/crafting/ArmorRecipes.java | 4 ++ .../com/hbm/handler/MultiblockHandler.java | 8 +-- .../handler/nei/AssemblerRecipeHandler.java | 3 +- .../com/hbm/inventory/fluid/FluidType.java | 4 +- .../inventory/recipes/AssemblerRecipes.java | 12 ++++ .../java/com/hbm/items/armor/ArmorDiesel.java | 2 +- .../com/hbm/items/weapon/ItemGunGauss.java | 10 +++ src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../hbm/render/tileentity/RenderTurbofan.java | 2 +- .../machine/TileEntityMachineAssembler.java | 20 +++--- .../machine/TileEntityMachineChemplant.java | 11 ++- .../machine/TileEntityMachineTurbofan.java | 57 ++++++++------- .../machine/TileEntitySoyuzLauncher.java | 9 ++- .../hbm/textures/models/machines/turbofan.png | Bin 2038 -> 4370 bytes .../models/machines/turbofan_afterburner.png | Bin 0 -> 407 bytes .../models/machines/turbofan_back.png | Bin 292 -> 477 bytes src/main/resources/mcmod.info | 2 +- 18 files changed, 131 insertions(+), 80 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/models/machines/turbofan_afterburner.png diff --git a/src/main/java/com/hbm/blocks/machine/MachineTurbofan.java b/src/main/java/com/hbm/blocks/machine/MachineTurbofan.java index fa6c9a40f..c7da8fe6c 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineTurbofan.java +++ b/src/main/java/com/hbm/blocks/machine/MachineTurbofan.java @@ -11,7 +11,6 @@ import com.hbm.inventory.fluid.types.FluidTypeCombustible.FuelGrade; import com.hbm.items.ModItems; import com.hbm.main.MainRegistry; import com.hbm.tileentity.machine.TileEntityDummy; -import com.hbm.tileentity.machine.TileEntityMachineDiesel; import com.hbm.tileentity.machine.TileEntityMachineTurbofan; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; @@ -73,32 +72,32 @@ public class MachineTurbofan extends BlockContainer implements IMultiblock, IToo // DummyBlockTurbofan.safeBreak = true; - world.setBlock(x + 1, y + 1, z + 1, ModBlocks.dummy_port_turbofan); - TileEntity te = world.getTileEntity(x + 1, y + 1, z + 1); + world.setBlock(x, y, z + 1, ModBlocks.dummy_port_turbofan); + TileEntity te = world.getTileEntity(x, y, z + 1); if(te instanceof TileEntityDummy) { TileEntityDummy dummy = (TileEntityDummy)te; dummy.targetX = x; dummy.targetY = y; dummy.targetZ = z; } - world.setBlock(x - 1, y + 1, z - 1, ModBlocks.dummy_port_turbofan); - TileEntity te2 = world.getTileEntity(x - 1, y + 1, z - 1); + world.setBlock(x - 1, y, z - 1, ModBlocks.dummy_port_turbofan); + TileEntity te2 = world.getTileEntity(x - 1, y, z - 1); if(te instanceof TileEntityDummy) { TileEntityDummy dummy = (TileEntityDummy)te2; dummy.targetX = x; dummy.targetY = y; dummy.targetZ = z; } - world.setBlock(x + 1, y + 1, z - 1, ModBlocks.dummy_port_turbofan); - TileEntity te3 = world.getTileEntity(x + 1, y + 1, z - 1); + world.setBlock(x, y, z - 1, ModBlocks.dummy_port_turbofan); + TileEntity te3 = world.getTileEntity(x, y, z - 1); if(te3 instanceof TileEntityDummy) { TileEntityDummy dummy = (TileEntityDummy)te3; dummy.targetX = x; dummy.targetY = y; dummy.targetZ = z; } - world.setBlock(x - 1, y + 1, z + 1, ModBlocks.dummy_port_turbofan); - TileEntity te4 = world.getTileEntity(x - 1, y + 1, z + 1); + world.setBlock(x - 1, y, z + 1, ModBlocks.dummy_port_turbofan); + TileEntity te4 = world.getTileEntity(x - 1, y, z + 1); if(te4 instanceof TileEntityDummy) { TileEntityDummy dummy = (TileEntityDummy)te4; dummy.targetX = x; @@ -118,32 +117,32 @@ public class MachineTurbofan extends BlockContainer implements IMultiblock, IToo // DummyBlockTurbofan.safeBreak = true; - world.setBlock(x + 1, y + 1, z + 1, ModBlocks.dummy_port_turbofan); - TileEntity te = world.getTileEntity(x + 1, y + 1, z + 1); + world.setBlock(x + 1, y, z, ModBlocks.dummy_port_turbofan); + TileEntity te = world.getTileEntity(x + 1, y, z); if(te instanceof TileEntityDummy) { TileEntityDummy dummy = (TileEntityDummy)te; dummy.targetX = x; dummy.targetY = y; dummy.targetZ = z; } - world.setBlock(x - 1, y + 1, z - 1, ModBlocks.dummy_port_turbofan); - TileEntity te2 = world.getTileEntity(x - 1, y + 1, z - 1); + world.setBlock(x - 1, y, z - 1, ModBlocks.dummy_port_turbofan); + TileEntity te2 = world.getTileEntity(x - 1, y, z - 1); if(te instanceof TileEntityDummy) { TileEntityDummy dummy = (TileEntityDummy)te2; dummy.targetX = x; dummy.targetY = y; dummy.targetZ = z; } - world.setBlock(x + 1, y + 1, z - 1, ModBlocks.dummy_port_turbofan); - TileEntity te3 = world.getTileEntity(x + 1, y + 1, z - 1); + world.setBlock(x + 1, y, z - 1, ModBlocks.dummy_port_turbofan); + TileEntity te3 = world.getTileEntity(x + 1, y, z - 1); if(te3 instanceof TileEntityDummy) { TileEntityDummy dummy = (TileEntityDummy)te3; dummy.targetX = x; dummy.targetY = y; dummy.targetZ = z; } - world.setBlock(x - 1, y + 1, z + 1, ModBlocks.dummy_port_turbofan); - TileEntity te4 = world.getTileEntity(x - 1, y + 1, z + 1); + world.setBlock(x - 1, y, z, ModBlocks.dummy_port_turbofan); + TileEntity te4 = world.getTileEntity(x - 1, y, z); if(te4 instanceof TileEntityDummy) { TileEntityDummy dummy = (TileEntityDummy)te4; dummy.targetX = x; @@ -163,32 +162,32 @@ public class MachineTurbofan extends BlockContainer implements IMultiblock, IToo // DummyBlockTurbofan.safeBreak = true; - world.setBlock(x + 1, y + 1, z + 1, ModBlocks.dummy_port_turbofan); - TileEntity te = world.getTileEntity(x + 1, y + 1, z + 1); + world.setBlock(x + 1, y, z + 1, ModBlocks.dummy_port_turbofan); + TileEntity te = world.getTileEntity(x + 1, y, z + 1); if(te instanceof TileEntityDummy) { TileEntityDummy dummy = (TileEntityDummy)te; dummy.targetX = x; dummy.targetY = y; dummy.targetZ = z; } - world.setBlock(x - 1, y + 1, z - 1, ModBlocks.dummy_port_turbofan); - TileEntity te2 = world.getTileEntity(x - 1, y + 1, z - 1); + world.setBlock(x, y, z - 1, ModBlocks.dummy_port_turbofan); + TileEntity te2 = world.getTileEntity(x, y, z - 1); if(te instanceof TileEntityDummy) { TileEntityDummy dummy = (TileEntityDummy)te2; dummy.targetX = x; dummy.targetY = y; dummy.targetZ = z; } - world.setBlock(x + 1, y + 1, z - 1, ModBlocks.dummy_port_turbofan); - TileEntity te3 = world.getTileEntity(x + 1, y + 1, z - 1); + world.setBlock(x + 1, y, z - 1, ModBlocks.dummy_port_turbofan); + TileEntity te3 = world.getTileEntity(x + 1, y, z - 1); if(te3 instanceof TileEntityDummy) { TileEntityDummy dummy = (TileEntityDummy)te3; dummy.targetX = x; dummy.targetY = y; dummy.targetZ = z; } - world.setBlock(x - 1, y + 1, z + 1, ModBlocks.dummy_port_turbofan); - TileEntity te4 = world.getTileEntity(x - 1, y + 1, z + 1); + world.setBlock(x, y, z + 1, ModBlocks.dummy_port_turbofan); + TileEntity te4 = world.getTileEntity(x, y, z + 1); if(te4 instanceof TileEntityDummy) { TileEntityDummy dummy = (TileEntityDummy)te4; dummy.targetX = x; @@ -208,32 +207,32 @@ public class MachineTurbofan extends BlockContainer implements IMultiblock, IToo // DummyBlockTurbofan.safeBreak = true; - world.setBlock(x + 1, y + 1, z + 1, ModBlocks.dummy_port_turbofan); - TileEntity te = world.getTileEntity(x + 1, y + 1, z + 1); + world.setBlock(x + 1, y, z + 1, ModBlocks.dummy_port_turbofan); + TileEntity te = world.getTileEntity(x + 1, y, z + 1); if(te instanceof TileEntityDummy) { TileEntityDummy dummy = (TileEntityDummy)te; dummy.targetX = x; dummy.targetY = y; dummy.targetZ = z; } - world.setBlock(x - 1, y + 1, z - 1, ModBlocks.dummy_port_turbofan); - TileEntity te2 = world.getTileEntity(x - 1, y + 1, z - 1); + world.setBlock(x - 1, y, z, ModBlocks.dummy_port_turbofan); + TileEntity te2 = world.getTileEntity(x - 1, y, z); if(te instanceof TileEntityDummy) { TileEntityDummy dummy = (TileEntityDummy)te2; dummy.targetX = x; dummy.targetY = y; dummy.targetZ = z; } - world.setBlock(x + 1, y + 1, z - 1, ModBlocks.dummy_port_turbofan); - TileEntity te3 = world.getTileEntity(x + 1, y + 1, z - 1); + world.setBlock(x + 1, y, z, ModBlocks.dummy_port_turbofan); + TileEntity te3 = world.getTileEntity(x + 1, y, z); if(te3 instanceof TileEntityDummy) { TileEntityDummy dummy = (TileEntityDummy)te3; dummy.targetX = x; dummy.targetY = y; dummy.targetZ = z; } - world.setBlock(x - 1, y + 1, z + 1, ModBlocks.dummy_port_turbofan); - TileEntity te4 = world.getTileEntity(x - 1, y + 1, z + 1); + world.setBlock(x - 1, y, z + 1, ModBlocks.dummy_port_turbofan); + TileEntity te4 = world.getTileEntity(x - 1, y, z + 1); if(te4 instanceof TileEntityDummy) { TileEntityDummy dummy = (TileEntityDummy)te4; dummy.targetX = x; diff --git a/src/main/java/com/hbm/crafting/ArmorRecipes.java b/src/main/java/com/hbm/crafting/ArmorRecipes.java index 6287f6f28..0658d4f7a 100644 --- a/src/main/java/com/hbm/crafting/ArmorRecipes.java +++ b/src/main/java/com/hbm/crafting/ArmorRecipes.java @@ -101,6 +101,10 @@ public class ArmorRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.steamsuit_plate, 1), new Object[] { "C C", "DXD", "CFC", 'D', DESH.ingot(), 'C', CU.plate(), 'X', ModItems.steel_plate, 'F', ModItems.tank_steel }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.steamsuit_legs, 1), new Object[] { "CCC", "DXD", "C C", 'D', DESH.ingot(), 'C', CU.plate(), 'X', ModItems.steel_legs }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.steamsuit_boots, 1), new Object[] { "C C", "DXD", 'D', DESH.ingot(), 'C', CU.plate(), 'X', ModItems.steel_boots }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.dieselsuit_helmet, 1), new Object[] { "W W", "W W", "SCS", 'W', new ItemStack(Blocks.wool, 1, 14), 'S', STEEL.ingot(), 'C', ModItems.circuit_targeting_tier3 }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.dieselsuit_plate, 1), new Object[] { "W W", "CDC", "SWS", 'W', new ItemStack(Blocks.wool, 1, 14), 'S', STEEL.ingot(), 'C', ModItems.circuit_targeting_tier3, 'D', ModBlocks.machine_diesel }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.dieselsuit_legs, 1), new Object[] { "M M", "S S", "W W", 'W', new ItemStack(Blocks.wool, 1, 14), 'S', STEEL.ingot(), 'M', ModItems.motor }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.dieselsuit_boots, 1), new Object[] { "W W", "S S", 'W', new ItemStack(Blocks.wool, 1, 14), 'S', STEEL.ingot() }); //Bismuth fursui- I mean armor CraftingManager.addRecipeAuto(new ItemStack(ModItems.bismuth_helmet, 1), new Object[] { "GPP", "P ", "FPP", 'G', Items.gold_ingot, 'P', ModItems.plate_bismuth, 'F', ModItems.rag }); diff --git a/src/main/java/com/hbm/handler/MultiblockHandler.java b/src/main/java/com/hbm/handler/MultiblockHandler.java index 1054e7030..6ea5d6636 100644 --- a/src/main/java/com/hbm/handler/MultiblockHandler.java +++ b/src/main/java/com/hbm/handler/MultiblockHandler.java @@ -63,10 +63,10 @@ public class MultiblockHandler { public static final int[] pumpjackDimensionEast = new int[] { 0, 6, 4, 0, 1, 1 }; public static final int[] pumpjackDimensionSouth = new int[] { 1, 1, 4, 0, 0, 6 }; public static final int[] pumpjackDimensionWest = new int[] { 6, 0, 4, 0, 1, 1 }; - public static final int[] turbofanDimensionNorth = new int[] { 1, 1, 2, 0, 4, 4 }; - public static final int[] turbofanDimensionEast = new int[] { 4, 4, 2, 0, 1, 1 }; - public static final int[] turbofanDimensionSouth = new int[] { 1, 1, 2, 0, 4, 4 }; - public static final int[] turbofanDimensionWest = new int[] { 4, 4, 2, 0, 1, 1 }; + public static final int[] turbofanDimensionNorth = new int[] { 1, 1, 2, 0, 3, 3 }; + public static final int[] turbofanDimensionEast = new int[] { 3, 3, 2, 0, 1, 1 }; + public static final int[] turbofanDimensionSouth = new int[] { 1, 1, 2, 0, 3, 3 }; + public static final int[] turbofanDimensionWest = new int[] { 3, 3, 2, 0, 1, 1 }; public static final int[] AMSLimiterDimensionNorth = new int[] { 0, 0, 5, 0, 2, 2 }; public static final int[] AMSLimiterDimensionEast = new int[] { 2, 2, 5, 0, 0, 0 }; public static final int[] AMSLimiterDimensionSouth = new int[] { 0, 0, 5, 0, 2, 2 }; diff --git a/src/main/java/com/hbm/handler/nei/AssemblerRecipeHandler.java b/src/main/java/com/hbm/handler/nei/AssemblerRecipeHandler.java index 6d781fa7f..f533fc02c 100644 --- a/src/main/java/com/hbm/handler/nei/AssemblerRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/AssemblerRecipeHandler.java @@ -10,6 +10,7 @@ import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.gui.GUIMachineAssembler; import com.hbm.inventory.recipes.AssemblerRecipes; import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemAssemblyTemplate; import com.hbm.lib.RefStrings; import codechicken.nei.NEIServerUtils; @@ -35,7 +36,7 @@ public class AssemblerRecipeHandler extends TemplateRecipeHandler { input = new ArrayList(); ComparableStack comp = new ComparableStack(result); - ItemStack template = new ItemStack(ModItems.assembly_template, 1, AssemblerRecipes.recipeList.indexOf(comp)); + ItemStack template = ItemAssemblyTemplate.writeType(new ItemStack(ModItems.assembly_template), comp); for(int i = 0; i < Math.min(in.size(), 12); i++) { input.add(new PositionedStack(in.get(i), 30 + (i % 4) * 18, 6 + (i / 4) * 18)); diff --git a/src/main/java/com/hbm/inventory/fluid/FluidType.java b/src/main/java/com/hbm/inventory/fluid/FluidType.java index 2527ee2f6..f56402f22 100644 --- a/src/main/java/com/hbm/inventory/fluid/FluidType.java +++ b/src/main/java/com/hbm/inventory/fluid/FluidType.java @@ -179,12 +179,12 @@ public class FluidType { if(traits.contains(FluidTrait.NO_CONTAINER)) info.add(EnumChatFormatting.RED + "Cannot be stored in any universal tank"); if(traits.contains(FluidTrait.LEAD_CONTAINER)) info.add(EnumChatFormatting.YELLOW + "Requires hazardous material tank to hold"); - info.add(""); + /*info.add(""); info.add(EnumChatFormatting.RED + "[DEBUG]"); for(FluidTrait trait : traits) { info.add(EnumChatFormatting.RED + "-" + trait.name()); - } + }*/ } /** diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 5270cbf16..114a43423 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -788,6 +788,18 @@ public class AssemblerRecipes { new ComparableStack(ModItems.circuit_aluminium, 2) }, 100); + makeRecipe(new ComparableStack(ModBlocks.machine_assemfac, 1), new AStack[] { + new OreDictStack(STEEL.ingot(), 48), + new OreDictStack(TCALLOY.ingot(), 8), + new OreDictStack(B.ingot(), 4), + new OreDictStack(RUBBER.ingot(), 16), + new OreDictStack(KEY_ANYPANE, 64), + new ComparableStack(ModItems.motor, 18), + new ComparableStack(ModItems.bolt_tungsten, 12), + new ComparableStack(ModItems.pipes_steel, 1), + new ComparableStack(ModItems.circuit_gold, 3) + }, 400); + makeRecipe(new ComparableStack(ModBlocks.machine_chemfac, 1), new AStack[] { new OreDictStack(STEEL.ingot(), 48), new OreDictStack(TCALLOY.ingot(), 8), diff --git a/src/main/java/com/hbm/items/armor/ArmorDiesel.java b/src/main/java/com/hbm/items/armor/ArmorDiesel.java index 63d57cfc2..d3cb53dc4 100644 --- a/src/main/java/com/hbm/items/armor/ArmorDiesel.java +++ b/src/main/java/com/hbm/items/armor/ArmorDiesel.java @@ -56,7 +56,7 @@ public class ArmorDiesel extends ArmorFSBFueled { public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { super.onArmorTick(world, player, stack); - if(this == ModItems.dieselsuit_legs && this.hasFSBArmor(player) && world.getTotalWorldTime() % 3 == 0) { + if(!world.isRemote && this == ModItems.dieselsuit_legs && this.hasFSBArmor(player) && world.getTotalWorldTime() % 3 == 0) { NBTTagCompound data = new NBTTagCompound(); data.setString("type", "bnuuy"); data.setInteger("player", player.getEntityId()); diff --git a/src/main/java/com/hbm/items/weapon/ItemGunGauss.java b/src/main/java/com/hbm/items/weapon/ItemGunGauss.java index 08b236d01..63f347527 100644 --- a/src/main/java/com/hbm/items/weapon/ItemGunGauss.java +++ b/src/main/java/com/hbm/items/weapon/ItemGunGauss.java @@ -103,11 +103,21 @@ public class ItemGunGauss extends ItemGunBase { super.updateClient(stack, world, player, slot, isCurrentItem); if(chargeLoop != null) { + if(!chargeLoop.isPlaying()) { + chargeLoop = rebootAudio(chargeLoop, player); + } chargeLoop.updatePosition((float)player.posX, (float)player.posY, (float)player.posZ); chargeLoop.updatePitch(chargeLoop.getPitch() + 0.01F); } } + public AudioWrapper rebootAudio(AudioWrapper wrapper, EntityPlayer player) { + wrapper.stopSound(); + AudioWrapper audio = MainRegistry.proxy.getLoopedSound("hbm:weapon.tauChargeLoop2", (float)player.posX, (float)player.posY, (float)player.posZ, wrapper.getVolume(), wrapper.getPitch()); + audio.startSound(); + return audio; + } + protected void spawnProjectile(World world, EntityPlayer player, ItemStack stack, int config) { super.spawnProjectile(world, player, stack, config); diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 6b6c96e38..85ecc3a5f 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (4228)"; + public static final String VERSION = "1.0.27 BETA (4242)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/render/tileentity/RenderTurbofan.java b/src/main/java/com/hbm/render/tileentity/RenderTurbofan.java index b66921a83..1e7b35ed2 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderTurbofan.java +++ b/src/main/java/com/hbm/render/tileentity/RenderTurbofan.java @@ -35,7 +35,7 @@ public class RenderTurbofan extends TileEntitySpecialRenderer { ResourceManager.turbofan.renderPart("Body"); GL11.glPushMatrix(); GL11.glTranslated(0, 1.5, 0); - GL11.glRotated(((TileEntityMachineTurbofan) tileEntity).spin, 0, 0, 1); + GL11.glRotated(((TileEntityMachineTurbofan) tileEntity).spin, 0, 0, -1); GL11.glTranslated(0, -1.5, 0); ResourceManager.turbofan.renderPart("Blades"); GL11.glPopMatrix(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java index 8bd372ce6..13f5c6f25 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java @@ -13,10 +13,6 @@ import com.hbm.items.machine.ItemAssemblyTemplate; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxElectricityPacket; -import com.hbm.packet.LoopedSoundPacket; -import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.TEAssemblerPacket; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.tileentity.machine.storage.TileEntityCrateIron; @@ -24,20 +20,15 @@ import com.hbm.tileentity.machine.storage.TileEntityCrateSteel; import api.hbm.energy.IBatteryItem; import api.hbm.energy.IEnergyUser; -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityChest; import net.minecraft.tileentity.TileEntityHopper; import net.minecraft.util.AxisAlignedBB; -import net.minecraftforge.common.util.ForgeDirection; public class TileEntityMachineAssembler extends TileEntityMachineBase implements IEnergyUser { @@ -231,8 +222,12 @@ public class TileEntityMachineAssembler extends TileEntityMachineBase implements if(isProgressing && volume > 0) { if(audio == null) { - audio = MainRegistry.proxy.getLoopedSound("hbm:block.assemblerOperate", xCoord, yCoord, zCoord, volume, 1.0F); + audio = this.createAudioLoop(); + audio.updateVolume(volume); audio.startSound(); + } else if(!audio.isPlaying()) { + audio = rebootAudio(audio); + audio.updateVolume(volume); } } else { @@ -245,6 +240,11 @@ public class TileEntityMachineAssembler extends TileEntityMachineBase implements } } + @Override + public AudioWrapper createAudioLoop() { + return MainRegistry.proxy.getLoopedSound("hbm:block.assemblerOperate", xCoord, yCoord, zCoord, 1.0F, 1.0F); + } + private void updateConnections() { this.getBlockMetadata(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java index 45701d1f7..fc4721ec7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java @@ -155,8 +155,12 @@ public class TileEntityMachineChemplant extends TileEntityMachineBase implements if(isProgressing && volume > 0) { if(audio == null) { - audio = MainRegistry.proxy.getLoopedSound("hbm:block.chemplantOperate", xCoord, yCoord, zCoord, volume, 1.0F); + audio = this.createAudioLoop(); + audio.updateVolume(volume); audio.startSound(); + } else if(!audio.isPlaying()) { + audio = rebootAudio(audio); + audio.updateVolume(volume); } } else { @@ -168,6 +172,11 @@ public class TileEntityMachineChemplant extends TileEntityMachineBase implements } } } + + @Override + public AudioWrapper createAudioLoop() { + return MainRegistry.proxy.getLoopedSound("hbm:block.chemplantOperate", xCoord, yCoord, zCoord, 1.0F, 1.0F); + } @Override public void networkUnpack(NBTTagCompound nbt) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java index df88f1c23..feadfe218 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java @@ -12,7 +12,6 @@ import com.hbm.inventory.FluidTank; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.items.ModItems; -import com.hbm.lib.Library; import com.hbm.lib.ModDamageSource; import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.LoopedSoundPacket; @@ -32,6 +31,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraftforge.common.util.ForgeDirection; @Spaghetti("a") public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements ISidedInventory, IEnergyGenerator, IFluidContainer, IFluidAcceptor { @@ -203,6 +203,7 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I return (power * i) / maxPower; } + @Spaghetti("HOOOOUUUGH") @Override public void updateEntity() { @@ -230,14 +231,22 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I if (!worldObj.isRemote) { - this.sendPower(worldObj, this.xCoord + 2, this.yCoord + 1, this.zCoord - 1, Library.POS_X); + /*this.sendPower(worldObj, this.xCoord + 2, this.yCoord + 1, this.zCoord - 1, Library.POS_X); this.sendPower(worldObj, this.xCoord + 2, this.yCoord + 1, this.zCoord + 1, Library.POS_X); this.sendPower(worldObj, this.xCoord + 1, this.yCoord + 1, this.zCoord + 2, Library.POS_Z); this.sendPower(worldObj, this.xCoord - 1, this.yCoord + 1, this.zCoord + 2, Library.POS_Z); this.sendPower(worldObj, this.xCoord - 2, this.yCoord + 1, this.zCoord + 1, Library.NEG_X); this.sendPower(worldObj, this.xCoord - 2, this.yCoord + 1, this.zCoord - 1, Library.NEG_X); this.sendPower(worldObj, this.xCoord - 1, this.yCoord + 1, this.zCoord - 2, Library.NEG_Z); - this.sendPower(worldObj, this.xCoord + 1, this.yCoord + 1, this.zCoord - 2, Library.NEG_Z); + this.sendPower(worldObj, this.xCoord + 1, this.yCoord + 1, this.zCoord - 2, Library.NEG_Z);*/ + + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); + ForgeDirection rot = dir.getRotation(ForgeDirection.DOWN); + + this.sendPower(worldObj, this.xCoord + rot.offsetX * 2, this.yCoord, this.zCoord + rot.offsetZ * 2, rot); + this.sendPower(worldObj, this.xCoord + rot.offsetX * 2 - dir.offsetX, this.yCoord, this.zCoord + rot.offsetZ * 2 - dir.offsetZ, rot); + this.sendPower(worldObj, this.xCoord - rot.offsetX * 2, this.yCoord, this.zCoord - rot.offsetZ * 2, rot.getOpposite()); + this.sendPower(worldObj, this.xCoord - rot.offsetX * 2 - dir.offsetX, this.yCoord, this.zCoord - rot.offsetZ * 2 - dir.offsetZ, rot.getOpposite()); //Tank Management tank.loadTank(0, 1, slots); @@ -251,7 +260,7 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I isRunning = true; - spin += 3; + spin += 20; spin = spin % 360; if(power > maxPower) @@ -268,7 +277,7 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I EntityTSmokeFX smoke = new EntityTSmokeFX(worldObj); smoke.posX = xCoord + 0.5 + (rand.nextGaussian() * 0.5); smoke.posY = yCoord + 1.5 + (rand.nextGaussian() * 0.5); - smoke.posZ = zCoord + 4.25; + smoke.posZ = zCoord + 3.25; smoke.motionX = rand.nextGaussian() * 0.3; smoke.motionY = rand.nextGaussian() * 0.3; smoke.motionZ = 2.5 + (rand.nextFloat() * 3.5); @@ -281,7 +290,7 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I EntitySSmokeFX smoke = new EntitySSmokeFX(worldObj); smoke.posX = xCoord + 0.5 + (rand.nextGaussian() * 0.5); smoke.posY = yCoord + 1.5 + (rand.nextGaussian() * 0.5); - smoke.posZ = zCoord + 4.25; + smoke.posZ = zCoord + 3.25; smoke.motionX = rand.nextGaussian() * 0.3; smoke.motionY = rand.nextGaussian() * 0.3; smoke.motionZ = 2.5 + (rand.nextFloat() * 3.5); @@ -291,7 +300,7 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I //Exhaust push List list = (List)worldObj.getEntitiesWithinAABBExcludingEntity(null, - AxisAlignedBB.getBoundingBox(posX - 1.5, posY, posZ + 4.5, posX + 1.5, posY + 3, posZ + 12)); + AxisAlignedBB.getBoundingBox(posX - 1.5, posY, posZ + 3.5, posX + 1.5, posY + 3, posZ + 12)); for(Entity e : list) { e.motionZ += 0.5; @@ -301,7 +310,7 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I //Intake pull list = (List)worldObj.getEntitiesWithinAABBExcludingEntity(null, - AxisAlignedBB.getBoundingBox(posX - 1.5, posY, posZ - 12, posX + 1.5, posY + 3, posZ - 4.5)); + AxisAlignedBB.getBoundingBox(posX - 1.5, posY, posZ - 12, posX + 1.5, posY + 3, posZ - 3.5)); for(Entity e : list) { e.motionZ += 0.5; @@ -309,7 +318,7 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I //Intake kill list = (List)worldObj.getEntitiesWithinAABBExcludingEntity(null, - AxisAlignedBB.getBoundingBox(posX - 1.5, posY, posZ - 5.5, posX + 1.5, posY + 3, posZ - 4.5)); + AxisAlignedBB.getBoundingBox(posX - 1.5, posY, posZ - 4.5, posX + 1.5, posY + 3, posZ - 3.5)); for(Entity e : list) { e.attackEntityFrom(ModDamageSource.turbofan, 1000); @@ -320,7 +329,7 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I EntityTSmokeFX smoke = new EntityTSmokeFX(worldObj); smoke.posX = xCoord + 0.5 + (rand.nextGaussian() * 0.5); smoke.posY = yCoord + 1.5 + (rand.nextGaussian() * 0.5); - smoke.posZ = zCoord - 4.25; + smoke.posZ = zCoord - 3.25; smoke.motionX = rand.nextGaussian() * 0.3; smoke.motionY = rand.nextGaussian() * 0.3; smoke.motionZ = -2.5 - (rand.nextFloat() * 3.5); @@ -333,7 +342,7 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I EntitySSmokeFX smoke = new EntitySSmokeFX(worldObj); smoke.posX = xCoord + 0.5 + (rand.nextGaussian() * 0.5); smoke.posY = yCoord + 1.5 + (rand.nextGaussian() * 0.5); - smoke.posZ = zCoord - 4.25; + smoke.posZ = zCoord - 3.25; smoke.motionX = rand.nextGaussian() * 0.3; smoke.motionY = rand.nextGaussian() * 0.3; smoke.motionZ = -2.5 - (rand.nextFloat() * 3.5); @@ -343,7 +352,7 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I //Exhaust push List list = (List)worldObj.getEntitiesWithinAABBExcludingEntity(null, - AxisAlignedBB.getBoundingBox(posX - 1.5, posY, posZ - 12, posX + 1.5, posY + 3, posZ - 4.5)); + AxisAlignedBB.getBoundingBox(posX - 1.5, posY, posZ - 12, posX + 1.5, posY + 3, posZ - 3.5)); for(Entity e : list) { e.motionZ -= 0.5; @@ -353,7 +362,7 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I //Intake pull list = (List)worldObj.getEntitiesWithinAABBExcludingEntity(null, - AxisAlignedBB.getBoundingBox(posX - 1.5, posY, posZ + 4.5, posX + 1.5, posY + 3, posZ + 12)); + AxisAlignedBB.getBoundingBox(posX - 1.5, posY, posZ + 3.5, posX + 1.5, posY + 3, posZ + 12)); for(Entity e : list) { e.motionZ -= 0.5; @@ -361,7 +370,7 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I //Intake kill list = (List)worldObj.getEntitiesWithinAABBExcludingEntity(null, - AxisAlignedBB.getBoundingBox(posX - 1.5, posY, posZ + 4.5, posX + 1.5, posY + 3, posZ + 5.5)); + AxisAlignedBB.getBoundingBox(posX - 1.5, posY, posZ + 3.5, posX + 1.5, posY + 3, posZ + 4.5)); for(Entity e : list) { e.attackEntityFrom(ModDamageSource.turbofan, 1000); @@ -370,7 +379,7 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I if(meta == 4) { if(afterburner == 0 && rand.nextInt(3) == 0) { EntityTSmokeFX smoke = new EntityTSmokeFX(worldObj); - smoke.posX = xCoord + 4.25; + smoke.posX = xCoord + 3.25; smoke.posY = yCoord + 1.5 + (rand.nextGaussian() * 0.5); smoke.posZ = zCoord + 0.5 + (rand.nextGaussian() * 0.5); smoke.motionX = 2.5 + (rand.nextFloat() * 3.5); @@ -383,7 +392,7 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I for(int i = 0; i < afterburner * 5; i++) if(afterburner > 0 && rand.nextInt(2) == 0) { EntitySSmokeFX smoke = new EntitySSmokeFX(worldObj); - smoke.posX = xCoord + 4.25; + smoke.posX = xCoord + 3.25; smoke.posY = yCoord + 1.5 + (rand.nextGaussian() * 0.5); smoke.posZ = zCoord + 0.5 + (rand.nextGaussian() * 0.5); smoke.motionX = 2.5 + (rand.nextFloat() * 3.5); @@ -395,7 +404,7 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I //Exhaust push List list = (List)worldObj.getEntitiesWithinAABBExcludingEntity(null, - AxisAlignedBB.getBoundingBox(posX + 4.5, posY, posZ - 1.5, posX + 12, posY + 3, posZ + 1.5)); + AxisAlignedBB.getBoundingBox(posX + 3.5, posY, posZ - 1.5, posX + 12, posY + 3, posZ + 1.5)); for(Entity e : list) { e.motionX += 0.5; @@ -405,7 +414,7 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I //Intake pull list = (List)worldObj.getEntitiesWithinAABBExcludingEntity(null, - AxisAlignedBB.getBoundingBox(posX - 12, posY, posZ - 1.5, posX - 4.5, posY + 3, posZ + 1.5)); + AxisAlignedBB.getBoundingBox(posX - 12, posY, posZ - 1.5, posX - 3.5, posY + 3, posZ + 1.5)); for(Entity e : list) { e.motionX += 0.5; @@ -413,7 +422,7 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I //Intake kill list = (List)worldObj.getEntitiesWithinAABBExcludingEntity(null, - AxisAlignedBB.getBoundingBox(posX - 5.5, posY, posZ - 1.5, posX - 4.5, posY + 3, posZ + 1.5)); + AxisAlignedBB.getBoundingBox(posX - 4.5, posY, posZ - 1.5, posX - 3.5, posY + 3, posZ + 1.5)); for(Entity e : list) { e.attackEntityFrom(ModDamageSource.turbofan, 1000); @@ -422,7 +431,7 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I if(meta == 5) { if(afterburner == 0 && rand.nextInt(3) == 0) { EntityTSmokeFX smoke = new EntityTSmokeFX(worldObj); - smoke.posX = xCoord - 4.25; + smoke.posX = xCoord - 3.25; smoke.posY = yCoord + 1.5 + (rand.nextGaussian() * 0.5); smoke.posZ = zCoord + 0.5 + (rand.nextGaussian() * 0.5); smoke.motionX = -2.5 - (rand.nextFloat() * 3.5); @@ -435,7 +444,7 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I for(int i = 0; i < afterburner * 5; i++) if(afterburner > 0 && rand.nextInt(2) == 0) { EntitySSmokeFX smoke = new EntitySSmokeFX(worldObj); - smoke.posX = xCoord - 4.25; + smoke.posX = xCoord - 3.25; smoke.posY = yCoord + 1.5 + (rand.nextGaussian() * 0.5); smoke.posZ = zCoord + 0.5 + (rand.nextGaussian() * 0.5); smoke.motionX = -2.5 - (rand.nextFloat() * 3.5); @@ -447,7 +456,7 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I //Exhaust push List list = (List)worldObj.getEntitiesWithinAABBExcludingEntity(null, - AxisAlignedBB.getBoundingBox(posX - 12, posY, posZ - 1.5, posX - 4.5, posY + 3, posZ + 1.5)); + AxisAlignedBB.getBoundingBox(posX - 12, posY, posZ - 1.5, posX - 3.5, posY + 3, posZ + 1.5)); for(Entity e : list) { e.motionX -= 0.5; @@ -457,7 +466,7 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I //Intake pull list = (List)worldObj.getEntitiesWithinAABBExcludingEntity(null, - AxisAlignedBB.getBoundingBox(posX + 4.5, posY, posZ - 1.5, posX + 12, posY + 3, posZ + 1.5)); + AxisAlignedBB.getBoundingBox(posX + 3.5, posY, posZ - 1.5, posX + 12, posY + 3, posZ + 1.5)); for(Entity e : list) { e.motionX -= 0.5; @@ -465,7 +474,7 @@ public class TileEntityMachineTurbofan extends TileEntityLoadedBase implements I //Intake kill list = (List)worldObj.getEntitiesWithinAABBExcludingEntity(null, - AxisAlignedBB.getBoundingBox(posX + 4.5, posY, posZ - 1.5, posX + 5.5, posY + 3, posZ + 1.5)); + AxisAlignedBB.getBoundingBox(posX + 3.5, posY, posZ - 1.5, posX + 4.5, posY + 3, posZ + 1.5)); for(Entity e : list) { e.attackEntityFrom(ModDamageSource.turbofan, 1000); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java index f8b6870a9..6407e568e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java @@ -106,9 +106,11 @@ public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements IS } else if(countdown > 0) { if(audio == null) { - audio = MainRegistry.proxy.getLoopedSound("hbm:block.soyuzReady", xCoord, yCoord, zCoord, 1.0F, 1.0F); + audio = this.createAudioLoop(); audio.updateVolume(100); audio.startSound(); + } else if(!audio.isPlaying()) { + audio = rebootAudio(audio); } countdown--; @@ -132,6 +134,11 @@ public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements IS } } + @Override + public AudioWrapper createAudioLoop() { + return MainRegistry.proxy.getLoopedSound("hbm:block.soyuzReady", xCoord, yCoord, zCoord, 1.0F, 1.0F); + } + public void onChunkUnload() { if(audio != null) { diff --git a/src/main/resources/assets/hbm/textures/models/machines/turbofan.png b/src/main/resources/assets/hbm/textures/models/machines/turbofan.png index d51b70aca0f64d938f98527d1f585d2f546617cc..2060b79eb955db4fef5723ac8ddd877a4ec0a1e6 100644 GIT binary patch literal 4370 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 literal 2038 zcmZ8i4LFl)AHO$dGjEK>If=&PWN#hB;^bpzmTw2Unj=ZWA$20DbxC+wof46JHs4Lj zdh=Zx64t6EL?5J&`AU?nMnjW1yiawy-s^hr>w50{dH&b``u+aD-~HVGJB{w+whF6{ z1put_aChDg00ITS7h=@l`6m|(LwHeT(LDSx@JPgjrviYk@o;wXi!1ps)Ry_m6({%@ z8lx4%KHh&-Q^siaW(p2qZEFn$b=--K%`p%u<8Dp1)xDN<4HcO|P;QmVkIn!7nei@; zXe!GQ`^sc1XoGOCYv;RME*bBQZJKhnOQV*GQ=X-gvr~{~4rea{+6%O1tmKVN-ucm# z&UP;d0RAa12ssHq70)BFrY}2++I=oEi&skHt)XP)vybujk_Z#T8@=ZUzq+n@J2_c- zRcfb-3YRV~Q|68FX?g7RMRR@O1myIyyMr z-QCxNm;0giDUt5hk}$rL+kKsIY-kqAXcxTT@KzVA^o}GKx7rr-_Qbm6kWM<$sr*j7 z(8x?M+%tdWk-5n{={IkEKdoO)eQueU;n@uqb!H+eRFN3o^2CRl~Ypz{CNgJl&yzd9J-iRYKJ!7A(L50=q8#b0V; zzNVbA2yPE3);Y+nF>q=`(ad^y)*bTt4B&lj^FX zGm+X`VyCpRwlm>c30ow|ckCc?mq3E|0Thy_rD>oKHx)rvKy<#-k zuX6MZmo3R66=>t>hE^!+6EwvB8p?Ab!?Lv?Av=%ttm&rwNwSmMa6zrK@%NOw1L(&e zkd=AvPxsXca!Cc*Bx;>B$9zmyA+_5bV#KgCF$-uu@L}=UL5}(RxIN33!^<|yO2YLz zTL!JIbYbR=0WQ8sz|Gt5>}>atqCdQ}c5a}L+|`$ejZGD{=pboz6$%}7Cq$TOQmSX7 zFG3q1<0n7Od!v|KGl<{x?$eRE%YR$Hsfz5MDc>BFcvrg+DZyaciiWF9tx!?rBZ9go z!@l9ww<;Pw=X0XhW>-ZgzG{_-`Vju3bLH#rfJf-GT|VUvnohT`Cl$$O_$ynX%%hAK z$U>w)(agD?@P2KKKDneM0yWxiWu3cD49=kW*i$_nZC2uf`i`55}NZO3i@vBhQI7ir;tF@w| zdWx;KW}Asl4C2M&1Q|FqWW9v@zb`6YV3XL>A(x`8NPnr(<=a7YC>Jo`jx z*-vvm)~RE&0mnS5mEd3?v`h_Z*rAZTdb-qm;LQ$n!0%U1|A2<(BtsDt7-7p#xCS!OwCWjWD8_Ff5N zIh0U9S|L&>Cc3i%jy*7W+U3Q|J(;Mndk6z9?H%7rk-hhr(e7z4tRlBt!&?PhuTa3F zi;Dn0*zC>lcVmGP=OG(7et%riFgu^~(SUGtAW6ef$frZV5?0U|)H!MD&y=U;b8zX? zlct0D92g<(b1(iI5Kf&%@Xvg^(0u)DA2f3oM%Dg?3fL`LK=dW)j|tOr85=G3FbzXw z+k#k1y9L+pvS2S^9)5JRaJ7;G@(-zFJU&4&`VHHApn$DqpA93)k<}e6a11^_M3{#XTHrGuV6hnmk8sqec0Vn<3l2!1J`Ims1AUrC_jn zhwC&g6~^XITOfCvbp9FmAKE`|jG3*)gsFLc6ml|Pd<^^O5_%6$=3y(177ZcN|R<@7=B_Dg}PDDL(-5=g5r zL$WtL;(-utD>(9!g7Rk;MFbrq&3*-jNvV1P|0Dbdu~A96OUcr)RD@2%WuCM5qI|7V z8_)J^C_`qs$3ocZTjaC(9J(D`)h6MT3Z1lwcj#)f6NpbYKUe%e=7U<_+tZ<-^Hl5z z`Wt;(i$K5a^T_O K<6KJ%Iq_f2n6UW( diff --git a/src/main/resources/assets/hbm/textures/models/machines/turbofan_afterburner.png b/src/main/resources/assets/hbm/textures/models/machines/turbofan_afterburner.png new file mode 100644 index 0000000000000000000000000000000000000000..a2be9657e1776f1b5f78080b9b44639fb955d2f8 GIT binary patch literal 407 zcmV;I0cie-P)rlENYgf~3h7i^11u zg3iqDCbtTi@sPPEMsOlHrYuV>rQFO5ApihhuE4Y04vbwdkW!kTw@#L2?m))a?z|8J zLWn=m;qM0q%RT^uWgmdSvJb#u*#}^->;o`Z_5m0y`v44kQcU{WV~krdlcW45R^oQVK%If3dt{QqRT_u;^9eAn)0Slu|QxHNFcZ zggm{#$@1gz(8Dlbde_ewLy{!Asw&fQII%Y|9dgcfUDt~bC&Qd`-87BWsbhfSI9jdX z?f0?)UO5BjiGiPv&b~+~wdyej?EACHYqpI`e`l5>oBrl0iULRf>&18W2fU)gyY`;} zuAe7)o-aCW+xF;rvjy%=PLMSm_~gAj&)&*x^9^UY7dbJdPxb%+002ovPDHLkV1fx3 Bwj2Ne literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/turbofan_back.png b/src/main/resources/assets/hbm/textures/models/machines/turbofan_back.png index 9829eecde9ac5b37d69c0caf559b50cf5baaa117..1c9313b6443c226ff6d29a61230e61c921930eb6 100644 GIT binary patch delta 436 zcmV;l0Zaa*0^I|UGk*b;NklAs=7>2*J3Wb6Mhf2A@!6Fp8=wIki;dZzF z0-;mq4$hr~{sOn|fp&20TE~JQ)Zw6^)gD47hwIYXTymGYOM*Cj&lL20^F8mK2K2xY zN~vIsf$#g$>zs2Sgh0hLFdm>Hcc5xQ0DyzMfjUsx9#k$Kh=0ncTq3A!4=NWAL}gSi z5mdGZm5T?WGAfq{D%*p~#RE|pl}lv*m6d^mURV5GKRms9E;mvJ&iTgpK_}&KwKfK3 zDi3;HG3OfyS8JHg7BHPH;%h~x-GoNH1}(n|?}i)g|1RrxP{gjKHM#!B?zEfR>qMWa ziIOM-8}*uUaeo}AgWdA0#y}lXAf;49Q3Nj^d^-iDR0Khg>KcE((t)Gf{_oj427nW3 z(baih+}uA(JsNlUD_rIsRz0CBM&;$_w^LxI@_&DNMi*zP9<>wZ>2J3WDcAn8@ND{v z^ZXV8V@&xTAp|P!{T%_oF2Bpp{T-f46D3KVtGnw9Xd=A|YLpQ|iJ z|JU~z+qK%y&rk?qc@+0ojrE$#gF?xd%zb+O>>|6*=y(a6PzW>tMMgM*l|IMlsZIFven-=aBQzmxt{${>ziD}=8 zKi|^NnYjMSdgG%v-~PO{I+y8u(EkIR8Ml?c&vcJ}`MUn(b7ocJYnN6VoL*h5cYpaG toj