From a21955eefdbd59e9ff81b2ea4c038d645127506c Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 19 Jan 2024 11:14:25 +0100 Subject: [PATCH] silo hatch texture, door recipe changes --- changelog | 9 +++++++++ .../inventory/recipes/AssemblerRecipes.java | 15 ++++++++------- src/main/java/com/hbm/items/ModItems.java | 3 +++ .../java/com/hbm/items/tool/ItemBoltgun.java | 2 +- .../java/com/hbm/main/CraftingManager.java | 3 ++- .../hbm/render/item/ItemRenderLibrary.java | 17 +++++++++++++++++ src/main/resources/assets/hbm/lang/de_DE.lang | 3 +++ src/main/resources/assets/hbm/lang/en_US.lang | 3 +++ .../assets/hbm/textures/items/bolt_spike.png | Bin 0 -> 224 bytes .../hbm/textures/models/doors/silo_hatch.png | Bin 851 -> 10594 bytes .../textures/models/doors/silo_hatch_base.png | Bin 0 -> 1347 bytes 11 files changed, 46 insertions(+), 9 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/items/bolt_spike.png create mode 100644 src/main/resources/assets/hbm/textures/models/doors/silo_hatch_base.png diff --git a/changelog b/changelog index 22dc7d698..f0a283661 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,11 @@ +## Added +* Silo hatch + * The final missing door from 1.12, remade from scratch + * Comes with a brand-new model that fits perfectly over 3x3 missile launch tubes + * Has a 5x5 frame + +## Changed +* Simplified door recipes ## Fixed * Fixed sellafite emerald ore being oredicted as emerald dust @@ -6,3 +14,4 @@ * Fixed BFB rods being called ZFB in hot and depleted variants * Fixed infinite water barrels voiding water completely after the chemplant's input buffer runs full, infinite barrels can no longer void water in chemplants * Fixed fallout affecting things on Y:0 like bedrock ores and oil +* Fixed projectiles not being able to pass through open doors diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 547df6609..f66125e0b 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -1212,13 +1212,14 @@ public class AssemblerRecipes { new OreDictStack(DURA.bolt(), 16), new ComparableStack(ModItems.motor, 2) }, 200); - makeRecipe(new ComparableStack(ModBlocks.large_vehicle_door, 1), new AStack[]{new OreDictStack(STEEL.plate(), 36), new OreDictStack("plateAdvancedAlloy", 4), new ComparableStack(ModItems.plate_polymer, 2), new OreDictStack("blockSteel", 4), new ComparableStack(ModItems.motor, 4), new OreDictStack(DURA.bolt(), 16), new OreDictStack("dyeGreen", 4)}, 500); - makeRecipe(new ComparableStack(ModBlocks.water_door, 1), new AStack[]{new OreDictStack(STEEL.plate(), 12), new OreDictStack("plateAdvancedAlloy", 2), new OreDictStack(DURA.bolt(), 4), new OreDictStack("dyeRed", 1)}, 500); - makeRecipe(new ComparableStack(ModBlocks.qe_containment, 1), new AStack[]{new OreDictStack(STEEL.plate(), 24), new OreDictStack("plateAdvancedAlloy", 8), new ComparableStack(ModItems.plate_polymer, 8), new OreDictStack("blockSteel", 2), new ComparableStack(ModItems.motor, 4), new OreDictStack(DURA.bolt(), 32), new OreDictStack("dyeBlack", 4)}, 500); - makeRecipe(new ComparableStack(ModBlocks.qe_sliding_door, 1), new AStack[]{new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModItems.plate_polymer, 2), new OreDictStack("blockSteel", 1), new ComparableStack(ModItems.motor, 2), new OreDictStack(DURA.bolt(), 4), new OreDictStack("dyeWhite", 4), new ComparableStack(Blocks.glass, 4)}, 200); - makeRecipe(new ComparableStack(ModBlocks.round_airlock_door, 1), new AStack[]{new OreDictStack(STEEL.plate(), 32), new OreDictStack("plateAdvancedAlloy", 12), new ComparableStack(ModItems.plate_polymer, 12), new OreDictStack("blockSteel", 6), new ComparableStack(ModItems.motor, 6), new OreDictStack(DURA.bolt(), 16), new OreDictStack("dyeGreen", 4)}, 500); - makeRecipe(new ComparableStack(ModBlocks.secure_access_door, 1), new AStack[]{new OreDictStack(STEEL.plate(), 48), new OreDictStack("plateAdvancedAlloy", 16), new ComparableStack(ModItems.plate_polymer, 2), new OreDictStack("blockSteel", 6), new ComparableStack(ModItems.motor, 4), new OreDictStack(DURA.bolt(), 32), new OreDictStack("dyeRed", 8)}, 1000); - makeRecipe(new ComparableStack(ModBlocks.sliding_seal_door, 1), new AStack[]{new OreDictStack(STEEL.plate(), 12), new OreDictStack("plateAdvancedAlloy", 4), new ComparableStack(ModItems.plate_polymer, 2), new OreDictStack("blockSteel", 1), new ComparableStack(ModItems.motor, 2), new OreDictStack(DURA.bolt(), 4), new OreDictStack("dyeWhite", 2)}, 500); + makeRecipe(new ComparableStack(ModBlocks.large_vehicle_door, 1), new AStack[]{new OreDictStack(STEEL.plateCast(), 16), new ComparableStack(ModItems.plate_polymer, 4), new ComparableStack(ModItems.motor, 4), new OreDictStack(DURA.bolt(), 16), new OreDictStack("dyeGreen", 4)}, 400); + makeRecipe(new ComparableStack(ModBlocks.water_door, 1), new AStack[]{new OreDictStack(STEEL.plate(), 16), new OreDictStack(DURA.bolt(), 4), new OreDictStack("dyeRed", 1)}, 200); + makeRecipe(new ComparableStack(ModBlocks.qe_containment, 1), new AStack[]{new OreDictStack(STEEL.plateCast(), 4), new OreDictStack(ALLOY.plate(), 4), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.motor, 2), new OreDictStack(DURA.bolt(), 32), new OreDictStack("dyeBlack", 4)}, 400); + makeRecipe(new ComparableStack(ModBlocks.qe_sliding_door, 1), new AStack[]{new OreDictStack(STEEL.plate(), 4), new ComparableStack(ModItems.plate_polymer, 4), new ComparableStack(ModItems.motor, 2), new OreDictStack(DURA.bolt(), 4), new OreDictStack("dyeWhite", 4), new ComparableStack(Blocks.glass, 4)}, 200); + makeRecipe(new ComparableStack(ModBlocks.round_airlock_door, 1), new AStack[]{new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(ALLOY.plate(), 8), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModItems.motor, 4), new OreDictStack(DURA.bolt(), 16), new OreDictStack("dyeGreen", 4)}, 400); + makeRecipe(new ComparableStack(ModBlocks.secure_access_door, 1), new AStack[]{new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(ALLOY.plate(), 16), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.motor, 4), new OreDictStack(DURA.bolt(), 32), new OreDictStack("dyeRed", 8)}, 4000); + makeRecipe(new ComparableStack(ModBlocks.sliding_seal_door, 1), new AStack[]{new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModItems.plate_polymer, 4), new ComparableStack(ModItems.motor, 2), new OreDictStack(DURA.bolt(), 4), new OreDictStack("dyeWhite", 2)}, 200); + makeRecipe(new ComparableStack(ModBlocks.silo_hatch, 1), new AStack[]{new OreDictStack(STEEL.plateWelded(), 4), new ComparableStack(ModItems.plate_polymer, 4), new ComparableStack(ModItems.motor, 2), new OreDictStack(STEEL.bolt(), 16), new OreDictStack(KEY_GREEN, 4)}, 200); if(Loader.isModLoaded("Mekanism")) { diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index af65ba54f..a640258bd 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -330,6 +330,7 @@ public class ModItems { public static Item plate_dalekanium; public static Item plate_euphemium; public static Item bolt; + public static Item bolt_spike; public static Item bolt_compound; public static Item plate_polymer; public static Item plate_kevlar; @@ -2602,6 +2603,7 @@ public class ModItems { plate_dalekanium = new Item().setUnlocalizedName("plate_dalekanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_dalekanium"); plate_euphemium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("plate_euphemium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_euphemium"); bolt = new ItemAutogen(MaterialShapes.BOLT).setUnlocalizedName("bolt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bolt"); + bolt_spike = new ItemCustomLore().setUnlocalizedName("bolt_spike").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bolt_spike"); bolt_compound = new Item().setUnlocalizedName("bolt_compound").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bolt_compound"); plate_polymer = new Item().setUnlocalizedName("plate_polymer").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_polymer"); plate_kevlar = new Item().setUnlocalizedName("plate_kevlar").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_kevlar"); @@ -6058,6 +6060,7 @@ public class ModItems { //Bolts GameRegistry.registerItem(bolt, bolt.getUnlocalizedName()); + GameRegistry.registerItem(bolt_spike, bolt_spike.getUnlocalizedName()); GameRegistry.registerItem(bolt_compound, bolt_compound.getUnlocalizedName()); //Cloth diff --git a/src/main/java/com/hbm/items/tool/ItemBoltgun.java b/src/main/java/com/hbm/items/tool/ItemBoltgun.java index 437aa97e2..b0d216289 100644 --- a/src/main/java/com/hbm/items/tool/ItemBoltgun.java +++ b/src/main/java/com/hbm/items/tool/ItemBoltgun.java @@ -50,7 +50,7 @@ public class ItemBoltgun extends Item implements IAnimatedItem { World world = player.worldObj; if(!entity.isEntityAlive()) return false; - ItemStack[] bolts = new ItemStack[] { Mats.MAT_STEEL.make(ModItems.bolt), Mats.MAT_TUNGSTEN.make(ModItems.bolt), Mats.MAT_DURA.make(ModItems.bolt)}; + ItemStack[] bolts = new ItemStack[] { new ItemStack(ModItems.bolt_spike), Mats.MAT_STEEL.make(ModItems.bolt), Mats.MAT_TUNGSTEN.make(ModItems.bolt), Mats.MAT_DURA.make(ModItems.bolt)}; for(ItemStack bolt : bolts) { for(int i = 0; i < player.inventory.getSizeInventory(); i++) { diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index b4fb99e14..b22fa676f 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -96,6 +96,7 @@ public class CraftingManager { addRecipeAuto(Mats.MAT_TUNGSTEN.make(ModItems.bolt, 16), new Object[] { "D", "D", 'D', W.ingot()}); addRecipeAuto(Mats.MAT_STEEL.make(ModItems.bolt, 16), new Object[] { "D", "D", 'D', STEEL.ingot()}); addRecipeAuto(Mats.MAT_DURA.make(ModItems.bolt, 16), new Object[] { "D", "D", 'D', DURA.ingot()}); + addRecipeAuto(new ItemStack(ModItems.bolt_spike, 2), new Object[] { "BB", "B ", "B ", 'B', STEEL.bolt()}); addRecipeAuto(new ItemStack(ModItems.pipes_steel, 1), new Object[] { "B", "B", "B", 'B', STEEL.block() }); addRecipeAuto(new ItemStack(ModItems.bolt_compound, 1), new Object[] { "PDP", "PTP", "PDP", 'D', DURA.bolt(), 'T', W.bolt(), 'P', TI.plate() }); addRecipeAuto(new ItemStack(ModItems.pellet_coal, 1), new Object[] { "PFP", "FOF", "PFP", 'P', COAL.dust(), 'F', Items.flint, 'O', ModBlocks.gravel_obsidian }); @@ -511,7 +512,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.rail_highspeed, 16), new Object[] { "S S", "SIS", "S S", 'S', STEEL.ingot(), 'I', IRON.plate() }); addRecipeAuto(new ItemStack(ModBlocks.rail_booster, 6), new Object[] { "S S", "CIC", "SRS", 'S', STEEL.ingot(), 'I', IRON.plate(), 'R', MINGRADE.ingot(), 'C', ModItems.coil_copper }); - addRecipeAuto(new ItemStack(ModBlocks.rail_large_straight, 4), new Object[] { "B B", "SSS", "W W", 'B', STEEL.bolt(), 'S', ModBlocks.steel_beam, 'W', KEY_SLAB }); + addRecipeAuto(new ItemStack(ModBlocks.rail_large_straight, 4), new Object[] { "B B", "SSS", "W W", 'B', ModItems.bolt_spike, 'S', ModBlocks.steel_beam, 'W', KEY_SLAB }); addShapelessAuto(new ItemStack(ModBlocks.rail_large_straight, 1), new Object[] { ModBlocks.rail_large_straight_short, ModBlocks.rail_large_straight_short, ModBlocks.rail_large_straight_short, ModBlocks.rail_large_straight_short, ModBlocks.rail_large_straight_short }); addShapelessAuto(new ItemStack(ModBlocks.rail_large_straight_short, 5), new Object[] { ModBlocks.rail_large_straight }); addRecipeAuto(new ItemStack(ModBlocks.rail_large_buffer, 1), new Object[] { " S", "RS", 'R', ModBlocks.rail_large_straight, 'S', STEEL.ingot() }); diff --git a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java index 4b25b2f23..cec57ea6d 100644 --- a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java +++ b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java @@ -730,6 +730,23 @@ public class ItemRenderLibrary { GL11.glShadeModel(GL11.GL_FLAT); } }); + renderers.put(Item.getItemFromBlock(ModBlocks.silo_hatch), new ItemRenderBase(){ + public void renderInventory() { + GL11.glTranslated(0, -2, 0); + GL11.glScaled(2, 2, 2); + } + public void renderCommon() { + bindTexture(ResourceManager.silo_hatch_tex); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glRotated(90, 0, 1, 0); + ResourceManager.silo_hatch.renderPart("Frame"); + GL11.glTranslated(0, 0.875, -1.875); + GL11.glRotated(-120, 1, 0, 0); + GL11.glTranslated(0, -0.875, 1.875); + ResourceManager.silo_hatch.renderPart("Hatch"); + GL11.glShadeModel(GL11.GL_FLAT); + } + }); renderers.put(Item.getItemFromBlock(ModBlocks.qe_containment), new ItemRenderBase(){ public void renderInventory() { GL11.glTranslated(0, -3.5, 0); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index d89423eae..a4220206f 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -1294,6 +1294,7 @@ item.bobmazon_tools.name=Bobmazon: Werkzeuge item.bobmazon_weapons.name=Bobmazon: Waffen und Sprengstoffe item.bolt.name=%sbolzen item.bolt_compound.name=Verstärkte Turbinenwelle +item.bolt_spike.name=Gleisnagel item.boltgun.name=Pneumatische Nietenpistole item.bomb_caller.name=Luftschlag Zielmarker item.bomb_waffle.name=Massenvernichtungswaffel @@ -4471,6 +4472,8 @@ tile.sellafield_4.name=Infernales Sellafit tile.sellafield_core.name=Sellafit-Corium tile.sellafield_slaked.name=Gelöschtes Sellafit tile.semtex.name=Semtex +tile.silo_hatch.name=Siloluke +tile.sliding_blast_door.name=Sprengtür tile.solar_mirror.name=Heliostatspiegel tile.soyuz_capsule.name=Landekapsel tile.soyuz_launcher.name=Soyuz-Startplatform diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 2d45971c6..05365875c 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1961,6 +1961,8 @@ item.bobmazon_tools.name=Bobmazon: Tools item.bobmazon_weapons.name=Bobmazon: Weapons and Explosives item.bolt.name=%s Bolt item.bolt_compound.name=Reinforced Turbine Shaft +item.bolt_spike.name=Railroad Spike +item.bolt_spike.desc=Radiates a threatening aura, somehow item.boltgun.name=Pneumatic Rivet Gun item.bomb_caller.name=Airstrike Designator item.bomb_waffle.name=Waffle of Mass Destruction @@ -5474,6 +5476,7 @@ tile.sellafield.4.name=Infernal Sellafite tile.sellafield.5.name=Sellafite-Corium tile.sellafield_slaked.name=Slaked Sellafite tile.semtex.name=Semtex +tile.silo_hatch.name=Silo Hatch tile.sliding_blast_door.name=Sliding Blast Door tile.solar_mirror.name=Heliostat Mirror tile.soyuz_capsule.name=Cargo Landing Capsule diff --git a/src/main/resources/assets/hbm/textures/items/bolt_spike.png b/src/main/resources/assets/hbm/textures/items/bolt_spike.png new file mode 100644 index 0000000000000000000000000000000000000000..88e310d5f4ec55a0292b6cb8438aa6953647d4c1 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfaSXBO zecR{D)odW(Hh-zWBen1X(G#^tl%LdD_M{64KGHMPTB6OWyVQQR-mUGGXAJJ2IWYfy z@EqxDw_>KL26>qsm*7-<^X|9Y^BBeg))lX`gwRzd&( literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/doors/silo_hatch.png b/src/main/resources/assets/hbm/textures/models/doors/silo_hatch.png index 226f0c34d26c415c67e70f3f8eb974c19288e945..7a85f0e33d9c155a36c562bf6de046a49f879486 100644 GIT binary patch literal 10594 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 literal 851 zcmeAS@N?(olHy`uVBq!ia0vp^9YDN-gAGVpi!Dn5QY^(zo*^7SP{WY|lw{`eba4!+ znDh4T!Ks(SBpL!U`Fba~I%zI!2}$%p`}qtN<>+1IoZPlAYo1Sk zcG6g`oqKtrMf^YM|J8DBg|AKjc=<=`H~dx;nB?G*pI6)P^77jLf~P;;Z?pZk*x1p7 zNs+U~_&V()VRw-#rzh z#^I@;(l|lPzB%UJ;q`YvZ+|v3Sxy+J9%#Y+yZ!6;cK`TYvisHh9mH$N=mXxl!Y==Bfwot>u;KkxhR3EQ3*SFa7foAj+h@q2||cEwlY6Z7<5%sZEw z+da?m-`)-7f8RZoDm1Y_I)TMWh~wq6{j;kro`2qUKIQR_SH@F0fns3CfFwN?mK^=9 z&|W>gFn50Pth%#Sbx&^nN_#hX2FSH6PM`GB)@6S$c%Nh;1meOqZsOl`;r7EXMfa2E zY>PY*zC84Mq7TTypnw7U35jvGPW*9oYX4D4_`nri>aLw|*Xr>uLbas3QP^Ouq-ftB3uJIX+Tx#YdwWUJf_9Pg$>{Ild^ zO@sW^yqDV_Zuu&dcM8oixUF!;rAP1ANX!4pPyJ!z1C7xwKa5wp*Rxgb|LiUSjT&GC zRJ{D${J-q8y!dN#N3mZPJ^X(s#M$vZ)|epr#&FXAbDj#?H-lB~&jb2q>iPfYAO5)@ ztvr3Eakt zG3V{w^V!nw630H4ua#e>80h`jOvP-kL~@YkQvyNYsr`$^mR-Mm!CB+(rG^EG-U z+42{w!d1@&_q?_`aQgA#1+TT%Jx-O)kn`12VPabOVe^dHCw(urJ2V!tFZuuL#kQ-t zy0+0PohS9SFI_{c1a}nkb)1enx~(*}zV_jb?83(~6K<4S zS#F;BTxP*XT3Wq&#LE%I!2aZs>iS9#XDY{vcD%gk0O7}iZN+@~&Y7RPRBzt;ok z`oK9xeQncQl3QbJPh?cg^vVDC)pVKyNBgr>Rnse9~moyLC z_PufE&z!krvUTs?y-xk+a{X`ref0D5+w(0XL;$D^=tQ8Mf*@wlyUTaNs=Gx!6@7s* zc0#q>Vb-?kh7vqldmU$*+FdUd5<4ZcHtL7h<&w;;Gjx+gQ?DA<%1)PK5fVLevBIY8 z*LTIL387bWgjtRRUXzjA<^FN6xU&P7*dq3ioj^qhdw|R%nR$NQ-=%l{`f_jGySoez zv%c*6V0g!V-uvJ41qAq$_NJfuQsw1P)A{zN(dOr`FEl$SDNNwt0LE-*12R+VOWfNP z_RAZN?0VjC^%|c?PBm`?zb#Z<)XnBI>)0JO>+*8=#~wO!N93@S`?h7ZZpET4rF=TG zxH+pF7iZb;_?xQ_lBrfvoeI6{OYu>F4A0?9%9q zx`ICYe1Pd@X_JF8)I}@LmdXd*iuujhs>v2~yXUoo+0~X;)#bJxIo!6c*+* z{qyPDWhP0Hv+f*7uiI_^_i?i1;}vV}ZB}2{E^sAkdwoXvtjgng^ECYUn|P37W~ZNj z(#ub?tEO%1yEFexM#amoksnj7U%dakmA?^~#DZ#CCnmsLx#!nX`KL*@cbgw>X{h+{?yNy)u4~ygCqD-pNnZWQ(~q|Y zwmkXsmpma%HRp4*0O*^)`IdBDBzxyzC_vblB9ag1Z(bk*xI_1m?g%b{}nhdra zQq3swfjyQ;5j|BqziHR~$=p%v8m@e`lZcQH=0S?}C0qTRlXksVzmvkY>$;S?^ zCmTw(S*P|gi@Nf|6UUO>YNprH&nwU07J27