From 23e58c7e1de39566e1c2debb7beccc0739ede970 Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 4 Mar 2024 16:44:34 +0100 Subject: [PATCH] 0000000000 --- changelog | 3 + src/main/java/com/hbm/blocks/ModBlocks.java | 3 + .../com/hbm/blocks/bomb/LaunchPadRusted.java | 81 +++++++++++ .../hbm/blocks/generic/BlockSnowglobe.java | 16 ++- .../container/ContainerLaunchPadRusted.java | 37 +++++ .../java/com/hbm/inventory/fluid/Fluids.java | 10 +- .../java/com/hbm/inventory/gui/GUIAnvil.java | 8 +- .../hbm/inventory/gui/GUILaunchPadRusted.java | 84 +++++++++++ .../hbm/inventory/gui/GUIScreenSnowglobe.java | 9 +- .../inventory/recipes/anvil/AnvilRecipes.java | 55 +++++++- src/main/java/com/hbm/items/ModItems.java | 12 +- .../render/tileentity/RenderSnowglobe.java | 57 ++++++-- .../tileentity/bomb/TileEntityLaunchPad.java | 2 - .../bomb/TileEntityLaunchPadRusted.java | 132 ++++++++++++++++++ .../gui/weapon/gui_launch_pad_rusted.png | Bin 0 -> 4844 bytes .../gui/weapon/gui_launch_pad_structure.png | Bin 3896 -> 0 bytes .../assets/hbm/textures/items/launch_code.png | Bin 0 -> 290 bytes .../hbm/textures/items/launch_code_piece.png | Bin 0 -> 280 bytes .../assets/hbm/textures/items/launch_key.png | Bin 0 -> 233 bytes 19 files changed, 475 insertions(+), 34 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/bomb/LaunchPadRusted.java create mode 100644 src/main/java/com/hbm/inventory/container/ContainerLaunchPadRusted.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUILaunchPadRusted.java create mode 100644 src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadRusted.java create mode 100644 src/main/resources/assets/hbm/textures/gui/weapon/gui_launch_pad_rusted.png delete mode 100644 src/main/resources/assets/hbm/textures/gui/weapon/gui_launch_pad_structure.png create mode 100644 src/main/resources/assets/hbm/textures/items/launch_code.png create mode 100644 src/main/resources/assets/hbm/textures/items/launch_code_piece.png create mode 100644 src/main/resources/assets/hbm/textures/items/launch_key.png diff --git a/changelog b/changelog index f7e259775..f7108e12f 100644 --- a/changelog +++ b/changelog @@ -26,6 +26,9 @@ * Fluid traits are now listed in a fixed order instead of being arranged randomly * Hidden fluid trait descriptions will now be added below the visible part of that trait instead of below the last visible trait * The methusalem turret no longer drops anything when broken +* Gaseous fuels now have a combusion multiplier of 1.5 instead of 1.25 +* LPG now has half the base burn value, preventing an unreasonable jump in efficiency simply by liquefacting petroleum gas + * While overall slightly less efficient that petroleum gas per unit of petroleum needed, LPG is still very much desirable due to being much easier to burn at max efficiency ## Fixed * Fixed the structure toggle on the world creation screen not working correctly on most world types diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index a24e5753e..94c961f5e 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1048,6 +1048,7 @@ public class ModBlocks { public static Block machine_orbus; public static Block launch_pad; + public static Block launch_pad_rusted; public static Block launch_pad_large; public static Block machine_missile_assembly; @@ -2167,6 +2168,7 @@ public class ModBlocks { tesla = new MachineTesla(Material.iron).setBlockName("tesla").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":tesla"); launch_pad = new LaunchPad(Material.iron).setBlockName("launch_pad").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.missileTab).setBlockTextureName(RefStrings.MODID + ":launch_pad"); + launch_pad_rusted = new LaunchPadRusted(Material.iron).setBlockName("launch_pad_rusted").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.missileTab).setBlockTextureName(RefStrings.MODID + ":launch_pad_rusted"); launch_pad_large = new LaunchPadLarge(Material.iron).setBlockName("launch_pad_large").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.missileTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_radar = new MachineRadar(Material.iron).setBlockName("machine_radar").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.missileTab).setBlockTextureName(RefStrings.MODID + ":machine_radar"); machine_radar_large = new MachineRadarLarge(Material.iron).setBlockName("machine_radar_large").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.missileTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); @@ -3517,6 +3519,7 @@ public class ModBlocks { //Missile Blocks GameRegistry.registerBlock(machine_missile_assembly, machine_missile_assembly.getUnlocalizedName()); GameRegistry.registerBlock(launch_pad, launch_pad.getUnlocalizedName()); + GameRegistry.registerBlock(launch_pad_rusted, launch_pad_rusted.getUnlocalizedName()); GameRegistry.registerBlock(launch_pad_large, launch_pad_large.getUnlocalizedName()); GameRegistry.registerBlock(compact_launcher, compact_launcher.getUnlocalizedName()); GameRegistry.registerBlock(launch_table, launch_table.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/bomb/LaunchPadRusted.java b/src/main/java/com/hbm/blocks/bomb/LaunchPadRusted.java new file mode 100644 index 000000000..eec626d2c --- /dev/null +++ b/src/main/java/com/hbm/blocks/bomb/LaunchPadRusted.java @@ -0,0 +1,81 @@ +package com.hbm.blocks.bomb; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.interfaces.IBomb; +import com.hbm.tileentity.bomb.TileEntityLaunchPadRusted; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; + +public class LaunchPadRusted extends BlockDummyable implements IBomb { + + public LaunchPadRusted(Material mat) { + super(mat); + this.bounding.add(AxisAlignedBB.getBoundingBox(-1.5D, 0D, -1.5D, -0.5D, 1D, -0.5D)); + this.bounding.add(AxisAlignedBB.getBoundingBox(0.5D, 0D, -1.5D, 1.5D, 1D, -0.5D)); + this.bounding.add(AxisAlignedBB.getBoundingBox(-1.5D, 0D, 0.5D, -0.5D, 1D, 1.5D)); + this.bounding.add(AxisAlignedBB.getBoundingBox(0.5D, 0D, 0.5D, 1.5D, 1D, 1.5D)); + this.bounding.add(AxisAlignedBB.getBoundingBox(-0.5D, 0.5D, -1.5D, 0.5D, 1D, 1.5D)); + this.bounding.add(AxisAlignedBB.getBoundingBox(-1.5D, 0.5D, -0.5D, 1.5D, 1D, 0.5D)); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityLaunchPadRusted(); + return null; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + return this.standardOpenBehavior(world, x, y, z, player, 0); + } + + @Override + public int[] getDimensions() { + return new int[] {0, 0, 1, 1, 1, 1}; + } + + @Override + public int getOffset() { + return 1; + } + + @Override + public BombReturnCode explode(World world, int x, int y, int z) { + + if(!world.isRemote) { + + int[] corePos = findCore(world, x, y, z); + if(corePos != null){ + TileEntity core = world.getTileEntity(corePos[0], corePos[1], corePos[2]); + if(core instanceof TileEntityLaunchPadRusted){ + TileEntityLaunchPadRusted entity = (TileEntityLaunchPadRusted)core; + return entity.launch(); + } + } + } + + return BombReturnCode.UNDEFINED; + } + + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, Block blockIn){ + + if(!world.isRemote){ + + int[] corePos = findCore(world, x, y, z); + if(corePos != null){ + TileEntity core = world.getTileEntity(corePos[0], corePos[1], corePos[2]); + if(core instanceof TileEntityLaunchPadRusted){ + TileEntityLaunchPadRusted launchpad = (TileEntityLaunchPadRusted)core; + launchpad.updateRedstonePower(x, y, z); + } + } + } + super.onNeighborBlockChange( world, x, y, z, blockIn); + } +} diff --git a/src/main/java/com/hbm/blocks/generic/BlockSnowglobe.java b/src/main/java/com/hbm/blocks/generic/BlockSnowglobe.java index d24000546..ff1ed304c 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockSnowglobe.java +++ b/src/main/java/com/hbm/blocks/generic/BlockSnowglobe.java @@ -155,17 +155,19 @@ public class BlockSnowglobe extends BlockContainer implements IGUIProvider { } public static enum SnowglobeType { - NONE( "NONE"), - RIVETCITY( "Rivet City"), - TENPENNYTOWER( "Tenpenny Tower"), - LUCKY38( "Lucky 38"), - SIERRAMADRE( "Sierra Madre"), - PRYDWEN( "Prydwen"); + NONE( "NONE", null), + RIVETCITY( "Rivet City", "Welcome to Rivet City. Please wait while the bridge extends."), + TENPENNYTOWER( "Tenpenny Tower", "Tenpenny Tower is the brainchild of Allistair Tenpenny, a British refugee who came to the Capital Wasteland seeking his fortune."), + LUCKY38( "Lucky 38", "My guess? Leads to a big cashout at some casino - and if the \"38\" on it is any indication... well... Lucky 38 it is."), + SIERRAMADRE( "Sierra Madre", "It's the moment you've been waiting for, the reason we're all here - the Gala Event, the Grand Opening of the Sierra Madre Casino."), + PRYDWEN( "Prydwen", "People of the Commonwealth. Do not interfere. Our intentions are peaceful. We are the Brotherhood of Steel."); public String label; + public String inscription; - private SnowglobeType(String label) { + private SnowglobeType(String label, String inscription) { this.label = label; + this.inscription = inscription; } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerLaunchPadRusted.java b/src/main/java/com/hbm/inventory/container/ContainerLaunchPadRusted.java new file mode 100644 index 000000000..a69c5f4c1 --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerLaunchPadRusted.java @@ -0,0 +1,37 @@ +package com.hbm.inventory.container; + +import com.hbm.tileentity.bomb.TileEntityLaunchPadRusted; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerLaunchPadRusted extends Container { + + private TileEntityLaunchPadRusted launchpad; + + public ContainerLaunchPadRusted(InventoryPlayer invPlayer, TileEntityLaunchPadRusted tedf) { + + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 9; j++) { + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 154 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 212)); + } + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int par2) { + return null; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return launchpad.isUseableByPlayer(player); + } +} diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index 8a2c09a26..8c97be180 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -621,8 +621,8 @@ public class Fluids { registerCalculatedFuel(CRACKOIL, (baseline / 1D * flammabilityLow * demandLow * complexityCracking), 0, null); registerCalculatedFuel(CRACKOIL_DS, (baseline / 1D * flammabilityLow * demandLow * complexityCracking * complexityHydro), 0, null); registerCalculatedFuel(OIL_COKER, (baseline / 1D * flammabilityLow * demandLow * complexityCoker), 0, null); - registerCalculatedFuel(GAS, (baseline / 1D * flammabilityNormal * demandVeryLow), 1.25, FuelGrade.GAS); - registerCalculatedFuel(GAS_COKER, (baseline / 1D * flammabilityNormal * demandVeryLow * complexityCoker), 1.25, FuelGrade.GAS); + registerCalculatedFuel(GAS, (baseline / 1D * flammabilityNormal * demandVeryLow), 1.5, FuelGrade.GAS); + registerCalculatedFuel(GAS_COKER, (baseline / 1D * flammabilityNormal * demandVeryLow * complexityCoker), 1.5, FuelGrade.GAS); registerCalculatedFuel(HEAVYOIL, (baseline / 0.5 * flammabilityLow * demandLow * complexityRefinery), 1.25D, FuelGrade.LOW); registerCalculatedFuel(SMEAR, (baseline / 0.35 * flammabilityLow * demandLow * complexityRefinery * complexityFraction), 1.25D, FuelGrade.LOW); registerCalculatedFuel(RECLAIMED, (baseline / 0.28 * flammabilityLow * demandLow * complexityRefinery * complexityFraction * complexityChemplant), 1.25D, FuelGrade.LOW); @@ -641,10 +641,10 @@ public class Fluids { registerCalculatedFuel(LIGHTOIL_DS, (baseline / 0.15 * flammabilityNormal * demandHigh * complexityRefinery * complexityHydro), 1.5D, FuelGrade.MEDIUM); registerCalculatedFuel(LIGHTOIL_CRACK, (baseline / 0.30 * flammabilityNormal * demandHigh * complexityRefinery * complexityCracking), 1.5D, FuelGrade.MEDIUM); registerCalculatedFuel(KEROSENE, (baseline / 0.09 * flammabilityNormal * demandHigh * complexityRefinery * complexityFraction), 1.5D, FuelGrade.AERO); - registerCalculatedFuel(PETROLEUM, (baseline / 0.10 * flammabilityNormal * demandMedium * complexityRefinery), 1.25, FuelGrade.GAS); + registerCalculatedFuel(PETROLEUM, (baseline / 0.10 * flammabilityNormal * demandMedium * complexityRefinery), 1.5, FuelGrade.GAS); registerCalculatedFuel(AROMATICS, (baseline / 0.15 * flammabilityLow * demandHigh * complexityRefinery * complexityCracking), 0, null); registerCalculatedFuel(UNSATURATEDS, (baseline / 0.15 * flammabilityHigh * demandHigh * complexityRefinery * complexityCracking), 0, null); - registerCalculatedFuel(LPG, (baseline / 0.05 * flammabilityNormal * demandMedium * complexityRefinery * complexityChemplant), 2.5, FuelGrade.HIGH); + registerCalculatedFuel(LPG, (baseline / 0.1 * flammabilityNormal * demandMedium * complexityRefinery * complexityChemplant), 2.5, FuelGrade.HIGH); registerCalculatedFuel(NITAN, KEROSENE.getTrait(FT_Flammable.class).getHeatEnergy() * 25L, 2.5, FuelGrade.HIGH); registerCalculatedFuel(BALEFIRE, KEROSENE.getTrait(FT_Flammable.class).getHeatEnergy() * 100L, 2.5, FuelGrade.HIGH); registerCalculatedFuel(HEAVYOIL_VACUUM, (baseline / 0.4 * flammabilityLow * demandLow * complexityVacuum), 1.25D, FuelGrade.LOW); @@ -656,7 +656,7 @@ public class Fluids { registerCalculatedFuel(DIESEL_REFORM, DIESEL.getTrait(FT_Flammable.class).getHeatEnergy() * complexityReform, 2.5D, FuelGrade.HIGH); registerCalculatedFuel(DIESEL_CRACK_REFORM, DIESEL_CRACK.getTrait(FT_Flammable.class).getHeatEnergy() * complexityReform, 2.5D, FuelGrade.HIGH); registerCalculatedFuel(KEROSENE_REFORM, KEROSENE.getTrait(FT_Flammable.class).getHeatEnergy() * complexityReform, 1.5D, FuelGrade.AERO); - registerCalculatedFuel(REFORMGAS, (baseline / 0.06 * flammabilityHigh * demandLow * complexityVacuum * complexityFraction), 1.25D, FuelGrade.GAS); + registerCalculatedFuel(REFORMGAS, (baseline / 0.06 * flammabilityHigh * demandLow * complexityVacuum * complexityFraction), 1.5D, FuelGrade.GAS); //all hail the spreadsheet //the spreadsheet must not be questioned diff --git a/src/main/java/com/hbm/inventory/gui/GUIAnvil.java b/src/main/java/com/hbm/inventory/gui/GUIAnvil.java index ae7dbc1b1..092b1080f 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIAnvil.java +++ b/src/main/java/com/hbm/inventory/gui/GUIAnvil.java @@ -284,7 +284,7 @@ public class GUIAnvil extends GuiContainer { for(AStack stack : recipe.input) { if(stack instanceof ComparableStack) { - ItemStack input = ((ComparableStack) stack).toStack(); + ComparableStack input = (ComparableStack) stack; boolean hasItem = false; int amount = 0; for(int i = 0; i < inventory.mainInventory.length; i++) { @@ -292,15 +292,15 @@ public class GUIAnvil extends GuiContainer { if(stackItem == null) { continue; } - if(stackItem.getItem() == input.getItem() && input.getItemDamage() == stackItem.getItemDamage()) { + if(input.matchesRecipe(stackItem, true)) { hasItem = true; amount += stackItem.stackSize; } } if(hasItem && amount >= stack.stacksize) { - list.add(">" + input.stackSize + "x " + input.getDisplayName()); + list.add(">" + input.stacksize + "x " + input.toStack().getDisplayName()); } else { - list.add(EnumChatFormatting.RED + ">" + input.stackSize + "x " + input.getDisplayName()); + list.add(EnumChatFormatting.RED + ">" + input.stacksize + "x " + input.toStack().getDisplayName()); } } else if(stack instanceof OreDictStack) { OreDictStack input = (OreDictStack) stack; diff --git a/src/main/java/com/hbm/inventory/gui/GUILaunchPadRusted.java b/src/main/java/com/hbm/inventory/gui/GUILaunchPadRusted.java new file mode 100644 index 000000000..2a4d6d626 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUILaunchPadRusted.java @@ -0,0 +1,84 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerLaunchPadRusted; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.bomb.TileEntityLaunchPadRusted; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUILaunchPadRusted extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/weapon/gui_launch_pad_rusted.png"); + private TileEntityLaunchPadRusted launchpad; + + public GUILaunchPadRusted(InventoryPlayer invPlayer, TileEntityLaunchPadRusted tedf) { + super(new ContainerLaunchPadRusted(invPlayer, tedf)); + launchpad = tedf; + + this.xSize = 176; + this.ySize = 236; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.launchpad.hasCustomInventoryName() ? this.launchpad.getInventoryName() : I18n.format(this.launchpad.getInventoryName()); + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 4, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + /*if(launchpad.slots[0] != null) { + Consumer renderer = ItemRenderMissileGeneric.renderers.get(new ComparableStack(launchpad.slots[0]).makeSingular()); + if(renderer != null) { + GL11.glPushMatrix(); + + GL11.glTranslatef(guiLeft + 70, guiTop + 120, 100); + + double scale = 1D; + + if(launchpad.slots[0].getItem() instanceof ItemMissile) { + ItemMissile missile = (ItemMissile) launchpad.slots[0].getItem(); + switch(missile.formFactor) { + case ABM: scale = 1.45D; break; + case MICRO: scale = 2.5D; break; + case V2: scale = 1.75D; break; + case STRONG: scale = 1.375D; break; + case HUGE: scale = 0.925D; break; + case ATLAS: scale = 0.875D; break; + case OTHER: break; + } + if(missile == ModItems.missile_stealth) scale = 1.125D; + } + + GL11.glRotatef(90, 0, 1, 0); + GL11.glScaled(scale, scale, scale); + GL11.glScalef(-8, -8, -8); + + GL11.glPushMatrix(); + GL11.glRotatef(75, 0.0F, 1.0F, 0.0F); + RenderHelper.enableStandardItemLighting(); + GL11.glPopMatrix(); + + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + renderer.accept(Minecraft.getMinecraft().getTextureManager()); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + } + }*/ + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenSnowglobe.java b/src/main/java/com/hbm/inventory/gui/GUIScreenSnowglobe.java index 7fb95e184..03021464e 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenSnowglobe.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenSnowglobe.java @@ -1,8 +1,11 @@ package com.hbm.inventory.gui; +import java.util.List; + import org.lwjgl.opengl.GL11; import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; +import com.hbm.util.I18nUtil; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.GuiScreen; @@ -78,7 +81,7 @@ public class GUIScreenSnowglobe extends GuiScreen { } nextLevel += 10; - } + }*/ if(this.snowglobe.type.inscription != null) { @@ -87,14 +90,14 @@ public class GUIScreenSnowglobe extends GuiScreen { nextLevel += 10; - String[] list = this.snowglobe.type.inscription.split("\\$"); + List list = I18nUtil.autoBreakWithParagraphs(this.fontRendererObj, this.snowglobe.type.inscription, 280); for(String text : list) { this.fontRendererObj.drawStringWithShadow(text, (int)(left + sizeX / 2 - this.fontRendererObj.getStringWidth(text) / 2), nextLevel, 0x009900); nextLevel += 10; } nextLevel += 10; - }*/ + } GL11.glEnable(GL11.GL_LIGHTING); } diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java index e510ee224..2a618ce69 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -23,6 +23,7 @@ import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; public class AnvilRecipes { @@ -753,7 +754,7 @@ public class AnvilRecipes { new AnvilOutput(new ItemStack(ModItems.ingot_tcalloy, 1), 0.25F) } ).setTier(3)); - + constructionRecipes.add(new AnvilConstructionRecipe( new ComparableStack(ModBlocks.deco_computer), new AnvilOutput[] { @@ -765,6 +766,58 @@ public class AnvilRecipes { } ).setTier(2)); + constructionRecipes.add(new AnvilConstructionRecipe( + new ComparableStack(ModBlocks.deco_crt, 1, OreDictionary.WILDCARD_VALUE), + new AnvilOutput[] { + new AnvilOutput(new ItemStack(ModItems.crt_display, 1)), + new AnvilOutput(new ItemStack(ModItems.scrap, 2)), + new AnvilOutput(new ItemStack(ModItems.wire_copper, 2)), + new AnvilOutput(new ItemStack(ModItems.wire_gold, 2), 0.25F), + new AnvilOutput(new ItemStack(ModItems.circuit_aluminium, 1), 0.25F) + + } + ).setTier(2)); + constructionRecipes.add(new AnvilConstructionRecipe( + new ComparableStack(ModBlocks.deco_toaster, 1, 0), //iron toaster + new AnvilOutput[] { + new AnvilOutput(new ItemStack(ModItems.plate_iron, 3)), + new AnvilOutput(new ItemStack(ModItems.scrap, 1)), + new AnvilOutput(new ItemStack(ModItems.coil_tungsten, 1)), + new AnvilOutput(new ItemStack(Items.bread, 1), 0.5F), + new AnvilOutput(new ItemStack(ModItems.battery_generic, 1), 0.25F), + new AnvilOutput(new ItemStack(ModItems.battery_advanced, 1), 0.1F), + new AnvilOutput(new ItemStack(ModItems.fusion_core, 1), 0.01F) + + } + ).setTier(2)); + constructionRecipes.add(new AnvilConstructionRecipe( + new ComparableStack(ModBlocks.deco_toaster, 1, 1), // steel toaster + new AnvilOutput[] { + new AnvilOutput(new ItemStack(ModItems.plate_steel, 3)), + new AnvilOutput(new ItemStack(ModItems.scrap, 1)), + new AnvilOutput(new ItemStack(ModItems.coil_tungsten, 2)), + new AnvilOutput(new ItemStack(Items.bread, 1), 0.5F), + new AnvilOutput(new ItemStack(ModItems.battery_lithium, 1), 0.25F), + new AnvilOutput(new ItemStack(ModItems.battery_sc_uranium, 1), 0.1F), + new AnvilOutput(new ItemStack(ModItems.fusion_core, 1), 0.05F) + + } + ).setTier(2)); + constructionRecipes.add(new AnvilConstructionRecipe( + new ComparableStack(ModBlocks.deco_toaster, 1, 2), // wooden toaster + new AnvilOutput[] { + new AnvilOutput(new ItemStack(ModItems.powder_sawdust, 4)), + new AnvilOutput(new ItemStack(ModItems.scrap, 1)), + new AnvilOutput(new ItemStack(ModItems.coil_tungsten, 4)), + new AnvilOutput(new ItemStack(Items.bread, 1), 0.5F), + new AnvilOutput(new ItemStack(ModItems.fusion_core, 1), 0.5F), + new AnvilOutput(new ItemStack(ModItems.fusion_core, 1), 0.5F), + new AnvilOutput(new ItemStack(ModItems.gem_alexandrite, 1), 0.25F), + new AnvilOutput(new ItemStack(ModItems.flame_pony, 1), 0.01F) + + } + ).setTier(2)); + constructionRecipes.add(new AnvilConstructionRecipe( new ComparableStack(ModBlocks.filing_cabinet), new AnvilOutput[] { diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 71d8d9173..badd7a22b 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1303,6 +1303,10 @@ public class ModItems { public static Item bobmazon_tools; public static Item bobmazon_hidden; + public static Item launch_code_piece; + public static Item launch_code; + public static Item launch_key; + public static Item missile_assembly; public static Item missile_generic; public static Item missile_anti_ballistic; @@ -3929,6 +3933,9 @@ public class ModItems { designator_range = new ItemDesingatorRange().setUnlocalizedName("designator_range").setFull3D().setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":designator_range_alt"); designator_manual = new ItemDesingatorManual().setUnlocalizedName("designator_manual").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":designator_manual"); designator_arty_range = new ItemDesignatorArtyRange().setUnlocalizedName("designator_arty_range").setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":designator_arty_range"); + launch_code_piece = new Item().setUnlocalizedName("launch_code_piece").setMaxStackSize(1).setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":launch_code_piece"); + launch_code = new Item().setUnlocalizedName("launch_code").setMaxStackSize(1).setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":launch_code"); + launch_key = new Item().setUnlocalizedName("launch_key").setMaxStackSize(1).setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":launch_key"); missile_assembly = new Item().setUnlocalizedName("missile_assembly").setMaxStackSize(1).setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":missile_assembly"); missile_generic = new ItemMissile(MissileFormFactor.V2, MissileTier.TIER1).setUnlocalizedName("missile_generic").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_generic"); missile_anti_ballistic = new ItemMissile(MissileFormFactor.ABM, MissileTier.TIER1).setUnlocalizedName("missile_anti_ballistic").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_anti_ballistic"); @@ -6843,9 +6850,7 @@ public class ModItems { GameRegistry.registerItem(designator_range, designator_range.getUnlocalizedName()); GameRegistry.registerItem(designator_manual, designator_manual.getUnlocalizedName()); GameRegistry.registerItem(designator_arty_range, designator_arty_range.getUnlocalizedName()); - //GameRegistry.registerItem(turret_control, turret_control.getUnlocalizedName()); GameRegistry.registerItem(turret_chip, turret_chip.getUnlocalizedName()); - //GameRegistry.registerItem(turret_biometry, turret_biometry.getUnlocalizedName()); GameRegistry.registerItem(linker, linker.getUnlocalizedName()); GameRegistry.registerItem(reactor_sensor, reactor_sensor.getUnlocalizedName()); GameRegistry.registerItem(oil_detector, oil_detector.getUnlocalizedName()); @@ -6877,6 +6882,9 @@ public class ModItems { GameRegistry.registerItem(padlock, padlock.getUnlocalizedName()); GameRegistry.registerItem(padlock_reinforced, padlock_reinforced.getUnlocalizedName()); GameRegistry.registerItem(padlock_unbreakable, padlock_unbreakable.getUnlocalizedName()); + GameRegistry.registerItem(launch_code_piece, launch_code_piece.getUnlocalizedName()); + GameRegistry.registerItem(launch_code, launch_code.getUnlocalizedName()); + GameRegistry.registerItem(launch_key, launch_key.getUnlocalizedName()); //Missiles //Tier 0 diff --git a/src/main/java/com/hbm/render/tileentity/RenderSnowglobe.java b/src/main/java/com/hbm/render/tileentity/RenderSnowglobe.java index 2292b028f..f8ad256b6 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderSnowglobe.java +++ b/src/main/java/com/hbm/render/tileentity/RenderSnowglobe.java @@ -3,17 +3,25 @@ package com.hbm.render.tileentity; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockSnowglobe.SnowglobeType; import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; import com.hbm.lib.RefStrings; +import com.hbm.render.item.ItemRenderBase; import com.hbm.render.loader.HFRWavefrontObject; +import com.hbm.util.EnumUtil; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.IItemRenderer; import net.minecraftforge.client.model.IModelCustom; -public class RenderSnowglobe extends TileEntitySpecialRenderer { +public class RenderSnowglobe extends TileEntitySpecialRenderer implements IItemRendererProvider { public static final IModelCustom snowglobe = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/trinkets/snowglobe.obj"), false).asDisplayList(); public static final ResourceLocation socket = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/snowglobe.png"); @@ -25,21 +33,29 @@ public class RenderSnowglobe extends TileEntitySpecialRenderer { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glRotated(22.5D * tile.getBlockMetadata() + 90, 0, -1, 0); + + TileEntitySnowglobe te = (TileEntitySnowglobe) tile; + renderSnowglobe(te.type); + + GL11.glPopMatrix(); + } + + public static void renderSnowglobe(SnowglobeType type) { + GL11.glEnable(GL11.GL_LIGHTING); GL11.glEnable(GL12.GL_RESCALE_NORMAL); - - GL11.glRotated(22.5D * tile.getBlockMetadata() + 90, 0, -1, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); double scale = 0.0625D; GL11.glScaled(scale, scale, scale); - this.bindTexture(socket); + Minecraft.getMinecraft().getTextureManager().bindTexture(socket); snowglobe.renderPart("Socket"); - - TileEntitySnowglobe te = (TileEntitySnowglobe) tile; - this.bindTexture(features); - switch(te.type) { + Minecraft.getMinecraft().getTextureManager().bindTexture(features); + + switch(type) { case NONE: break; case RIVETCITY: snowglobe.renderPart("RivetCity"); break; case TENPENNYTOWER: snowglobe.renderPart("TenpennyTower"); break; @@ -48,7 +64,28 @@ public class RenderSnowglobe extends TileEntitySpecialRenderer { case PRYDWEN: snowglobe.renderPart("Prydwen"); break; default: break; } - - GL11.glPopMatrix(); + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glShadeModel(GL11.GL_FLAT); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.snowglobe); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -4, 0); + GL11.glScaled(10, 10, 10); + } + public void renderCommonWithStack(ItemStack item) { + GL11.glTranslated(0, 0.25, 0); + GL11.glScaled(3, 3, 3); + SnowglobeType type = EnumUtil.grabEnumSafely(SnowglobeType.class, item.getItemDamage()); + renderSnowglobe(type); + }}; } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPad.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPad.java index 0ac00c5e2..857c3a3a1 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPad.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPad.java @@ -88,14 +88,12 @@ public class TileEntityLaunchPad extends TileEntityLaunchPadBase implements IEne @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); - this.delay = nbt.getInteger("delay"); } @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); - nbt.setInteger("delay", delay); } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadRusted.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadRusted.java new file mode 100644 index 000000000..ae6320306 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadRusted.java @@ -0,0 +1,132 @@ +package com.hbm.tileentity.bomb; + +import java.util.HashSet; +import java.util.Set; + +import com.hbm.interfaces.IBomb.BombReturnCode; +import com.hbm.inventory.container.ContainerLaunchPadRusted; +import com.hbm.inventory.gui.GUILaunchPadRusted; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.fauxpointtwelve.BlockPos; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; + +public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements IGUIProvider { + + public int prevRedstonePower; + public int redstonePower; + public Set activatedBlocks = new HashSet<>(4); + + public boolean missileLoaded; + + public TileEntityLaunchPadRusted() { + super(3); + } + + @Override + public String getName() { + return "container.launchPadRusted"; + } + + @Override + public void updateEntity() { + + } + + public BombReturnCode launch() { + return BombReturnCode.UNDEFINED; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + this.redstonePower = nbt.getInteger("redstonePower"); + this.prevRedstonePower = nbt.getInteger("prevRedstonePower"); + NBTTagCompound activatedBlocks = nbt.getCompoundTag("activatedBlocks"); + this.activatedBlocks.clear(); + for(int i = 0; i < activatedBlocks.func_150296_c().size() / 3; i++) { + this.activatedBlocks.add(new BlockPos(activatedBlocks.getInteger("x" + i), activatedBlocks.getInteger("y" + i), activatedBlocks.getInteger("z" + i))); + } + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + nbt.setInteger("redstonePower", redstonePower); + nbt.setInteger("prevRedstonePower", prevRedstonePower); + NBTTagCompound activatedBlocks = new NBTTagCompound(); + int i = 0; + for(BlockPos p : this.activatedBlocks) { + activatedBlocks.setInteger("x" + i, p.getX()); + activatedBlocks.setInteger("y" + i, p.getY()); + activatedBlocks.setInteger("z" + i, p.getZ()); + i++; + } + nbt.setTag("activatedBlocks", activatedBlocks); + } + + public void updateRedstonePower(int x, int y, int z) { + BlockPos pos = new BlockPos(x, y, z); + boolean powered = worldObj.isBlockIndirectlyGettingPowered(x, y, z); + boolean contained = activatedBlocks.contains(pos); + if(!contained && powered){ + activatedBlocks.add(pos); + if(redstonePower == -1){ + redstonePower = 0; + } + redstonePower++; + } else if(contained && !powered){ + activatedBlocks.remove(pos); + redstonePower--; + if(redstonePower == 0){ + redstonePower = -1; + } + } + } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 2, + yCoord, + zCoord - 2, + xCoord + 3, + yCoord + 15, + zCoord + 3 + ); + } + + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } + + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new ContainerLaunchPadRusted(player.inventory, this); + } + + @Override + @SideOnly(Side.CLIENT) + public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new GUILaunchPadRusted(player.inventory, this); + } +} diff --git a/src/main/resources/assets/hbm/textures/gui/weapon/gui_launch_pad_rusted.png b/src/main/resources/assets/hbm/textures/gui/weapon/gui_launch_pad_rusted.png new file mode 100644 index 0000000000000000000000000000000000000000..97741eba5fb2e93c56ffa1936a2d1f8ba08df978 GIT binary patch literal 4844 zcma)9c|4Te+dnh5sccgUDZ@~RBtl}WgY0B`>{{%UNHT_*p7NjwN%D{-*|H{5mZ3al z5V9u>*_W~mgE7PWZqM`n{`kG`=Y2o#{rQ~x-1mL1bMA9}ukUr8>x#8BH{{uWbUy%q z$LJ#V5&$sh5e5*PQ0E*}=m~Y~!Ma8^2yD z1V$cooD6n%@OX0h7u$Z_*f%=dPlY&;QKJD*s#-9J=JuSr@BPyYTDHsmjhiG?>%!6k zuDq=@vJq!Xqm*M>quYGyE+(Y57&I2FlT5<%yIS3xS=oL=W3KN`pwaD87Pn7lMXqSu z+1UlrwR$U6qXSOmd9&WGYFHTY>Wp_3M>tNiDo3|i4X?jDs02-?2JN7B>uD2hDV@}0 zbmfcc>WMJf$zR=Dr>kpgPd(P_G7nhp-99vbo#_IPAF~Tv2UzU2fPmBGW)d9s<*q4f zvt8{S>8eV<_SFv!EW)M+;SWBn5>Orm=PY2(H(-xg3~BXWqQprAkXF_QUv+_YQQ8uW zxkzA{Oi?*LlMPg~x#}@{0 zrbaC;)3vJS*@;*|J&mqc?*;UH_>#@81qJntXI?wG6e_Wr`q7&&+fXmTv25w#oq}z- z0~_4thN<(_kz*2}eVQAKAK2d>Kj8x`Q3U4Ak1v+eGBQjB*iTAHeTwR$Q>WWwqxsT> zxW=C!wBj4?vbeuMc(*p!DCm4duD4tiIW&4cykx8Xyq-D2Djsh zZ8`T`;%g}1_Ljh6mq?p;N5WWrWx<qescAu#$+xeYO zr;{4OFT^Y3*>CJ_S7+=_JUv(AwtQ;XUz*-|FU$B%&P$S1Epx^`b8pE1i1&&(4CHzG zO1cL#s^fl+N_6}hq)w#Yz+!J>GQG<;L$E+dZOZ6P&b2iHCTw-Mdzw(tEns2rvfKOU zkk=syuLtU;VgCMdd6?JHt$tuPDPkji_W59>C4Un6k1?6y>rAf3ys0|YnylJZ>A+%# zfiB{VG~TtIIu$7@KfXWUO}rHGUI1V)Kn@Py&M`> zxlpPiW@>%c*WHfaIng+%@V59fKTuTp>976y0C!8DGLhit-&)KUDJB*9w$I_V`*LQd z6)TtFhEt^+x8`e9l4V?vs4Zp^>gifxGz#C;a{{vnfBZa^F}jnmM3~}AbCz@Op z4q8%-FQ6?Vq}%Fp4<^i6qaO4ejr9hwCgcYLr~5e5%ksobQ#dhJ4wGNG*d%XI2HSc= z{X^q1R{_6>Ojhm}97rH+HBUvAJ11o&x^N-;-csz}`DwBeQJGrU1z~X>y0R3zy;XGObq)6qRho_OXM`|tkhr^Uc;(13SJR$5w;-(Z<=k<>%$ z%&JI{z?(O_(=#(EAz8bS!gd@mxb`1p#5LEa!LS!Nb`L{9zUZI?=dj?q70%&9UKqSv z-0$1vs*~n{0>@D7HZyVBG+aZVj##`OAWctu+`!=+>AlYdj~satAi)v52$P$tz8uXR ze)f!cuDm1vMRgPr#m-z}QK>;*E>zfG{h8nHt#gR@mTU9l8|`x+)yi7F6ifW1Omxq! zF}n>Tes*)z=Y<=<0Uh+%7THWm1qYkXpMLGCBeoSOT01kzH~gH}w7EaCD=V9k6V3pCv9nX<@ujpdw=*4Ea(etssd^>?~yHPzMqZ!V|Hxfw)35uY#d^0>+E$Gr5@ ze~x#D@5zwx?~7~Hl$B37IXR)xl>}C#gOihA%D#?Si%S$H;Yq13J9wt*&!*ZPa^{MH z)u2-XC2Gne!b_`rEb9dt{N``jZ2oNd{o#JH(6r1a@1-*uf_G{pxQ zqUx~fo@*bf-?{tk%k{%Zn3&$k{tmMD+}V>MZhxug*&90W1G!5@HrG5o^A%`QpVUvh z5Ph4K6+_@HcOscWOggJP-uA~`CrT{7J(U9n?1mZ%jiyn&L%SF}GAZ?pTfQU79}0D7 z2}>2yX8PEzhFwO|a|h`TPbC`FO@piZ@x{iy#zXU4V(dS9_P_@0CK`t|EfL+tQTf@PW#Jmtgp?|%wjFC=mCiE{gw z)K0gb9JD4Din#|*8XD`at#T>%>8#POrk;5{QVwIk2jWpT=R0QyJGm^El!#0=B7z5n zBXcDlqXTyyh-axrd}6H@c2OQQYinsiDr~Oxr$DxxmNG|p;bJQlw&kJ!IQ7g!U1v66 zx)uzVJT3Bt%U!7q)?`enlFVv_mK~pEuMmcTjUEJ`qz$$Y_5S`jILg53*eh zjiB&*<*Gq8dTn;CI2!H6I_2s>g^3*=`9wAk)FeFSG}Q#z_sLxRe6Vaue~rV1{k}!q zOK4Qn3Id$CGAx5_a2@0WQ*2OTM&=j3+heFnyaNF&E@AlqQbP!0K&|jyQ`3^R^wwAx zNK6k%=e)zjzDP??SHfZL;X&(J0igjgls0}HSo%T&$wok$VPTeozcsVQ_&4L)B*C{8 z2!Vugd}Os;(CxFXboZ}cTV*Xdo!N*XwU5KRzsy+I{IcNI1;pyU(SeNJlJ=+j1Yws? zgfuFbs-A6M16$C3t&41g#LsIh2of(c@c<3wk{50%!Efq>RIE5hQeo=`fQ%5nTdDJp z4in_(kO{cEE&}O~R;Nm*4(eMK_rG+7au|_MdYa($XB<$yKB8c2i;g#FUfA>B(p{FR zI7(Z?zyd~zWCSGl^GuVIB&g7d@}=e>92&Xuxg4g!+}1L)9~xYbT~0j-5|LyL$gF2Y zLH)gazbZBeLOo65R2&zm_Ng_foAYGXy|IhmT`8^ID8)>xPE@s}A~E2}Q94-v%0^7N zMTI?+b~~~T+>ejq0mQcZqM)SLr@qF?8aLU=v6AluF(l>8Asnc98k(tVhE@ zR$sV42b@0!?_NGpEr*t1vtM)=sQbEY-EI(C9EboFk7`Fd_a)vsnWgszwhvTvdHabH zX3w6~N+7yLca+p|Hg$RBCV$C&E-2Pr&c?M+kro2W_SVWezB!QPcWDQI?h$2*ZLXsZ zPp`ZXx^&EKNuac>tZi!Q<%*hAfl@&h9_)n4%E~T$dwta)^s}dkh=|@8e4Vb-6xH<} zW1!0*LA#siR^wPvQBg705>S-ADMF~okhltu<9Q_xxd~OM^`)J?{q#bAv6}x;pSrNM z{EJV=inTRC(!g&!uEpE&gIT`>JGl}I@vUpHsp_=_CVfpU;HXb){p!P?`vJP{Q0Ugj zUVJWG`zMv1_}BS}3X6@gg7LU|@s=5`*|ku!UuKs`Q+wqnbiEV51H1PyNcw<$z3>Df z(Ktn`LHO8@YWaaf?A&)uyqVHz8->QCD$Y9xp^W@bBQET!VbYA^3R%%*pN=<^=tM@a zpN|9J|7>4sQJk=Cwa}%Elwbr@CLZL8&FA`OO3AWJ)2D}m)v5~W>ar##CVhIC*u}8T z(a`EeovOQoz|+gCS|xD4=Y)f!;|tLRBWJ!hHoeU%rh84h=cHzcqj9#erQq>HXcoh51DR(%xv%NLIqKf>9bSpdy~IBQC*D6Ch>EDZ={~X}at%H#VV_}54p#B9t+ru}IU9Z@yNsO$)oQJq{9wFFza@qn;d^bsp(ct1H?OhP?mlK)KZk40Yky``&L^3UH8Ei5_+3o)iFcSD&qJ zH$R$(j&zF)gls`L;OD>YzPqNwW4{^E%TSVouuTk{Y^ytvHM9Gb4WOq+=bC%Iqi_(= zbFd~EsBH7}^eicsl7a9ETBcym_)z0wYWLe(9L#_>`50qmkcaWdBe}~CIjcH%DNKKy z<|-A896P57x3c)LXp}BBA%mQby|Y8HxKtiX`=eB9p9S{GrBc@Ej5|LjK0W*{vZB;% z$w!kcmC8WQLEeH!2d&MRAv-?*P-R9Y?AGqUqZ%_=u3I62PFB+&J(_9v7Zs!8wEL{L zaFt|4UsnZ&7)TV#|6riJetvmz0xgyysHw>3>u+Va`Erq`uC!_o!obO&G~8FKh-b9N zawcm`xBGQ~*!!O}`tP**pYLP@786y@H9wz@L`b8Ph3`7I>`@s0Ppcpa!dmy6V)P58 zG7byPBp!Z-+waCFSnv**452tuNnX z(V4Shz9Atge1d^-V{9u>*&jTL6yuc#ewi4y5* OB#iXUv1PjMzyAv&-0m&_ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/gui/weapon/gui_launch_pad_structure.png b/src/main/resources/assets/hbm/textures/gui/weapon/gui_launch_pad_structure.png deleted file mode 100644 index a2dc1aad1f48a7f00eb44db63f554364849a6f31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3896 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 D=pYPa diff --git a/src/main/resources/assets/hbm/textures/items/launch_code.png b/src/main/resources/assets/hbm/textures/items/launch_code.png new file mode 100644 index 0000000000000000000000000000000000000000..ef5db0f4723427ecdb93cc27cf20dd45cbdbc857 GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf@TxaDM;* literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/launch_code_piece.png b/src/main/resources/assets/hbm/textures/items/launch_code_piece.png new file mode 100644 index 0000000000000000000000000000000000000000..ee74304f56e7d500e312727bd7d9969ad7cd5d24 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfyUv!>wXW#E0cHV+-0?K{J=CXpy25$b%9N9FL`^E3vcS;-fE(n`{B7`g3*(` zKRG!6Xqe_lWGBB%xL(S2Ktg!$_b;{U8O(||cNp+EZ*oa7+%YT9rA2`0+)hhTC8maJ zQqS*r%oFet^*%C>WVRcFlN|F|npPgrEx;X|@3#2&qMy;SGS zup+jy%FH3VcdOaUz4sX$I2QU8?6^Pq@6L6{Z&lBqbnfi28E+=fopt}ef;7Vg6JN8G ctUt5mE;$Cq{+7t~1$vFa)78&qol`;+06&ay00000 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/launch_key.png b/src/main/resources/assets/hbm/textures/items/launch_key.png new file mode 100644 index 0000000000000000000000000000000000000000..7bdc33ec4ce166216a6f1cdf6cd2815bacd1dad7 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf`S2$=6;`Vka*H7%{fut|kMVd)lK^`6;tJ{Mk3@r<8Y zk+yh#m2%3Nwy;t;~wMyZZD57tN2;mLnyvvRsyn9Hy5 dbvpCTN*`nMVipYYDFeEd!PC{xWt~$(69Ac>RDJ*e literal 0 HcmV?d00001