From 5bcfd368fc17b5bee31e4ae28c70dfd8a9c00662 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 14 Dec 2025 21:17:34 +0100 Subject: [PATCH] yeag --- changelog | 5 ++ gradle.properties | 2 +- .../com/hbm/blocks/machine/rbmk/RBMKRod.java | 33 +++++++- .../java/com/hbm/creativetabs/WeaponTab.java | 5 +- .../hbm/inventory/fluid/tank/FluidTank.java | 8 +- .../inventory/recipes/PedestalRecipes.java | 10 +++ src/main/java/com/hbm/lib/HbmWorldGen.java | 82 +++++++++++-------- src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../java/com/hbm/main/CraftingManager.java | 2 +- .../hbm/saveddata/AnnihilatorSavedData.java | 4 +- 10 files changed, 105 insertions(+), 48 deletions(-) diff --git a/changelog b/changelog index abd9b1e81..0ed93ec83 100644 --- a/changelog +++ b/changelog @@ -11,6 +11,7 @@ * In 528 mode, destroying quantities of certain items yield unique progression relevant blueprints ## Changed +* Updated chinese localization * Changed the way 528 mode works * May of the old tantalium requirements no longer exist since the assembler rework * Some important recipes have been moved to the precision assembler @@ -52,9 +53,13 @@ * Solidifying biogas into compressed biomass now yields 4x more, making the biogas route twice as efficient as simply compressing biomass * Finally removed the long deprecated ambience radiation generator and geothermal generator * Nerfed the ballistic jackets, as they are comically cheap and made some zombies impossible to kill in early game +* RBMK fuel rod items can now be inserted directly into fuel rods via right click, instead of having to open the GUI +* Containment boxes now use ferrouranium instead of raw U-238 +* Added missing recipes to two legendary weapons ## Fixed * Fixed gamebreaking issue causing crashes and world corruption where the multi detonator had its tooltip misspelled * Fixed panzerschreck equip animation not speeding up with the sawed off mod * Fixed FENSU not keeping its charge when broken * Removed skeletonizer reloading from `/ntmreload` as it wasn't usable for end users and just caused error messages on servers +* Added more null checks to world generation, hopefully preventing weird one-off crashes diff --git a/gradle.properties b/gradle.properties index 4c3fe0d0e..812f67c85 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5526 +mod_build_number=5544 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKRod.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKRod.java index de5ef940d..ba5865e82 100644 --- a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKRod.java +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKRod.java @@ -1,9 +1,13 @@ package com.hbm.blocks.machine.rbmk; import com.hbm.handler.BossSpawnHandler; +import com.hbm.items.machine.ItemRBMKLid; +import com.hbm.items.machine.ItemRBMKRod; +import com.hbm.main.MainRegistry; import com.hbm.tileentity.TileEntityProxyInventory; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKRod; +import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; @@ -32,7 +36,34 @@ public class RBMKRod extends RBMKBase { @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { BossSpawnHandler.markFBI(player); - return openInv(world, x, y, z, player); + + if(world.isRemote) return true; + + int[] pos = this.findCore(world, x, y, z); + if(pos == null) return false; + + TileEntity te = world.getTileEntity(pos[0], pos[1], pos[2]); + if(!(te instanceof TileEntityRBMKRod)) return false; + TileEntityRBMKRod rbmk = (TileEntityRBMKRod) te; + + if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemRBMKLid) { + if(!rbmk.hasLid()) return false; + } + + if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemRBMKRod && rbmk.slots[0] == null) { + rbmk.slots[0] = player.getHeldItem().copy(); + rbmk.slots[0].stackSize = 1; + player.getHeldItem().stackSize--; + world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:item.upgradePlug", 1.0F, 1.0F); + return false; + } + + if(!player.isSneaking()) { + FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, pos[0], pos[1], pos[2]); + return true; + } else { + return true; + } } @Override diff --git a/src/main/java/com/hbm/creativetabs/WeaponTab.java b/src/main/java/com/hbm/creativetabs/WeaponTab.java index 28801e152..c5179a53e 100644 --- a/src/main/java/com/hbm/creativetabs/WeaponTab.java +++ b/src/main/java/com/hbm/creativetabs/WeaponTab.java @@ -14,10 +14,7 @@ public class WeaponTab extends CreativeTabs { @Override public Item getTabIconItem() { - - if(ModItems.gun_maresleg != null) { - return ModItems.gun_maresleg; - } + if(ModItems.gun_greasegun != null) return ModItems.gun_greasegun; return Items.iron_pickaxe; } } diff --git a/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java b/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java index 9d60e8a2a..c968699a0 100644 --- a/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java +++ b/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java @@ -39,10 +39,10 @@ public class FluidTank implements Cloneable { loadingHandlers.add(new FluidLoaderInfinite()); } - FluidType type; - int fluid; - int maxFluid; - int pressure = 0; + protected FluidType type; + protected int fluid; + protected int maxFluid; + protected int pressure = 0; public FluidTank(FluidType type, int maxFluid) { this.type = type; diff --git a/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java b/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java index b643ac3b7..76dcbcd1a 100644 --- a/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java @@ -56,6 +56,16 @@ public class PedestalRecipes extends SerializableRecipe { new ComparableStack(ModItems.scrap_nuclear), new ComparableStack(ModItems.gun_heavy_revolver), new ComparableStack(ModItems.scrap_nuclear), new ComparableStack(ModBlocks.chain, 16), new OreDictStack(CINNABAR.gem()), new ComparableStack(ModBlocks.chain, 16))); + register(new PedestalRecipe(new ItemStack(ModItems.gun_amat_subtlety), + new OreDictStack(STAR.ingot()), new OreDictStack(AL.plateCast()), new OreDictStack(STAR.ingot()), + new OreDictStack(AL.plateCast()), new ComparableStack(ModItems.gun_amat), new OreDictStack(AL.plateCast()), + new OreDictStack(STAR.ingot()), new OreDictStack(AL.plateCast()), new OreDictStack(STAR.ingot()))); + + register(new PedestalRecipe(new ItemStack(ModItems.gun_amat_penance), + new OreDictStack(STAR.ingot()), new OreDictStack(DURA.plateCast()), new OreDictStack(STAR.ingot()), + new ComparableStack(ModItems.weapon_mod_special, 1, EnumModSpecial.SILENCER), new ComparableStack(ModItems.gun_amat), new ComparableStack(ModItems.weapon_mod_special, 1, EnumModSpecial.FURNITURE_BLACK), + new OreDictStack(STAR.ingot()), new OreDictStack(DURA.plateCast()), new OreDictStack(STAR.ingot()))); + register(new PedestalRecipe(new ItemStack(ModItems.gun_flamer_daybreaker), new OreDictStack(GOLD.plateCast()), new ComparableStack(ModItems.canned_conserve, 1, EnumFoodType.JIZZ), new OreDictStack(GOLD.plateCast()), new OreDictStack(P_WHITE.ingot()), new ComparableStack(ModItems.gun_flamer), new OreDictStack(P_WHITE.ingot()), diff --git a/src/main/java/com/hbm/lib/HbmWorldGen.java b/src/main/java/com/hbm/lib/HbmWorldGen.java index 9f0510e48..d6071cefc 100644 --- a/src/main/java/com/hbm/lib/HbmWorldGen.java +++ b/src/main/java/com/hbm/lib/HbmWorldGen.java @@ -305,8 +305,11 @@ public class HbmWorldGen implements IWorldGenerator { if(world.getBlock(x, g - 1, z).canPlaceTorchOnTop(world, x, g - 1, z)) { world.setBlock(x, g, z, ModBlocks.mine_ap); - TileEntityLandmine landmine = (TileEntityLandmine) world.getTileEntity(x, g, z); - landmine.waitingForPlayer = true; + TileEntity tile = world.getTileEntity(x, g, z); + if(tile instanceof TileEntityLandmine) { + TileEntityLandmine landmine = (TileEntityLandmine) tile; + landmine.waitingForPlayer = true; + } if(GeneralConfig.enableDebugMode) MainRegistry.logger.info("[Debug] Successfully spawned landmine at " + x + " " + g + " " + z); break; } @@ -323,8 +326,11 @@ public class HbmWorldGen implements IWorldGenerator { world.setBlock(x, y, z, ModBlocks.lantern_behemoth, 12, 3); MultiblockHandlerXR.fillSpace(world, x, y, z, new int[] {4, 0, 0, 0, 0, 0}, ModBlocks.lantern_behemoth, ForgeDirection.NORTH); - TileEntityLanternBehemoth lantern = (TileEntityLanternBehemoth) world.getTileEntity(x, y, z); - lantern.isBroken = true; + TileEntity tile = world.getTileEntity(x, y, z); + if(tile instanceof TileEntityLanternBehemoth) { + TileEntityLanternBehemoth lantern = (TileEntityLanternBehemoth) tile; + lantern.isBroken = true; + } if(rand.nextInt(2) == 0) { LootGenerator.setBlock(world, x, y, z - 2); @@ -342,8 +348,11 @@ public class HbmWorldGen implements IWorldGenerator { int y = world.getHeightValue(x, z); if(world.getBlock(x, y - 1, z).canPlaceTorchOnTop(world, x, y - 1, z)) { world.setBlock(x, y, z, ModBlocks.mine_he); - TileEntityLandmine landmine = (TileEntityLandmine) world.getTileEntity(x, y, z); - landmine.waitingForPlayer = true; + TileEntity tile = world.getTileEntity(x, y, z); + if(tile instanceof TileEntityLandmine) { + TileEntityLandmine landmine = (TileEntityLandmine) tile; + landmine.waitingForPlayer = true; + } } } @@ -373,10 +382,10 @@ public class HbmWorldGen implements IWorldGenerator { if(world.getBlock(x, y + 1, z).canPlaceTorchOnTop(world, x, y + 1, z)) { world.setBlock(x, y, z, ModBlocks.soyuz_capsule, 3, 2); - - TileEntitySoyuzCapsule cap = (TileEntitySoyuzCapsule)world.getTileEntity(x, y, z); - - if(cap != null) { + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntitySoyuzCapsule) { + TileEntitySoyuzCapsule cap = (TileEntitySoyuzCapsule) tile; cap.setInventorySlotContents(rand.nextInt(cap.getSizeInventory()), new ItemStack(ModItems.record_glass)); } @@ -420,33 +429,36 @@ public class HbmWorldGen implements IWorldGenerator { if(world.getBlock(x, y - 1, z).canPlaceTorchOnTop(world, x, y - 1, z)) { world.setBlock(x, y, z, ModBlocks.safe, rand.nextInt(4) + 2, 2); - TileEntitySafe safe = (TileEntitySafe) world.getTileEntity(x, y, z); - - switch(rand.nextInt(10)) { - case 0: case 1: case 2: case 3: - safe.setMod(1); - WeightedRandomChestContent.generateChestContents(rand, ItemPool.getPool(ItemPoolsSingle.POOL_VAULT_RUSTY), safe, rand.nextInt(4) + 3); - break; - case 4: case 5: case 6: - safe.setMod(0.1); - WeightedRandomChestContent.generateChestContents(rand, ItemPool.getPool(ItemPoolsSingle.POOL_VAULT_STANDARD), safe, rand.nextInt(3) + 2); - break; - case 7: case 8: - safe.setMod(0.02); - WeightedRandomChestContent.generateChestContents(rand, ItemPool.getPool(ItemPoolsSingle.POOL_VAULT_REINFORCED), safe, rand.nextInt(3) + 1); - break; - case 9: - safe.setMod(0.0); - WeightedRandomChestContent.generateChestContents(rand, ItemPool.getPool(ItemPoolsSingle.POOL_VAULT_UNBREAKABLE), safe, rand.nextInt(2) + 1); - break; + + TileEntity tile = world.getTileEntity(x, y, z); + if(tile instanceof TileEntitySafe) { + TileEntitySafe safe = (TileEntitySafe) tile; + + switch(rand.nextInt(10)) { + case 0: case 1: case 2: case 3: + safe.setMod(1); + WeightedRandomChestContent.generateChestContents(rand, ItemPool.getPool(ItemPoolsSingle.POOL_VAULT_RUSTY), safe, rand.nextInt(4) + 3); + break; + case 4: case 5: case 6: + safe.setMod(0.1); + WeightedRandomChestContent.generateChestContents(rand, ItemPool.getPool(ItemPoolsSingle.POOL_VAULT_STANDARD), safe, rand.nextInt(3) + 2); + break; + case 7: case 8: + safe.setMod(0.02); + WeightedRandomChestContent.generateChestContents(rand, ItemPool.getPool(ItemPoolsSingle.POOL_VAULT_REINFORCED), safe, rand.nextInt(3) + 1); + break; + case 9: + safe.setMod(0.0); + WeightedRandomChestContent.generateChestContents(rand, ItemPool.getPool(ItemPoolsSingle.POOL_VAULT_UNBREAKABLE), safe, rand.nextInt(2) + 1); + break; + } + + safe.setPins(rand.nextInt(999) + 1); + safe.lock(); + + if(rand.nextInt(10) < 3) safe.fillWithSpiders(); // 30% chance; those safes have been sitting there for ages, they gotta have some spiders in them } - safe.setPins(rand.nextInt(999) + 1); - safe.lock(); - - if(rand.nextInt(10) < 3) // 30% chance; those safes have been sitting there for ages, they gotta have some spiders in them - safe.fillWithSpiders(); - if(GeneralConfig.enableDebugMode) MainRegistry.logger.info("[Debug] Successfully spawned safe at " + x + " " + (y + 1) +" " + z); } diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 93c6325d8..41e0e1fdf 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 (5526)"; + public static final String VERSION = "1.0.27 BETA (5544)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 298832266..d45980a8b 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -665,7 +665,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.spikes, 4), new Object[] { "BBB", "BBB", "TTT", 'B', STEEL.bolt(), 'T', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModItems.custom_fall, 1), new Object[] { "IIP", "CHW", "IIP", 'I', ANY_RUBBER.ingot(), 'P', BIGMT.plate(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'H', STEEL.shell(), 'W', ModItems.coil_copper }); addRecipeAuto(new ItemStack(ModBlocks.machine_controller, 1), new Object[] { "TDT", "DCD", "TDT", 'T', ANY_RESISTANTALLOY.ingot(), 'D', ModItems.crt_display, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED) }); - addRecipeAuto(new ItemStack(ModItems.containment_box, 1), new Object[] { "LUL", "UCU", "LUL", 'L', PB.plate(), 'U', U238.billet(), 'C', ModBlocks.crate_steel }); + addRecipeAuto(new ItemStack(ModItems.containment_box, 1), new Object[] { "LUL", "UCU", "LUL", 'L', PB.plate(), 'U', FERRO.ingot(), 'C', ModBlocks.crate_steel }); addRecipeAuto(new ItemStack(ModItems.casing_bag, 1), new Object[] { " L ", "LGL", " L ", 'L', Items.leather, 'G', GUNMETAL.plate() }); addRecipeAuto(new ItemStack(ModItems.casing_bag, 1), new Object[] { " L ", "LGL", " L ", 'L', ANY_RUBBER.ingot(), 'G', GUNMETAL.plate() }); addRecipeAuto(new ItemStack(ModItems.ammo_bag, 1), new Object[] { "LLL", "MGM", "LLL", 'L', Items.leather, 'G', WEAPONSTEEL.plate(), 'M', WEAPONSTEEL.mechanism() }); diff --git a/src/main/java/com/hbm/saveddata/AnnihilatorSavedData.java b/src/main/java/com/hbm/saveddata/AnnihilatorSavedData.java index 5dc4cfeb7..618867431 100644 --- a/src/main/java/com/hbm/saveddata/AnnihilatorSavedData.java +++ b/src/main/java/com/hbm/saveddata/AnnihilatorSavedData.java @@ -148,6 +148,7 @@ public class AnnihilatorSavedData extends WorldSavedData { serializeKey(compound, entry.getKey()); compound.setByteArray("amount", entry.getValue().toByteArray()); nbt.appendTag(compound); + System.out.println("Serializing " + entry.getValue().toString() + " of " + entry.getKey()); } } @@ -157,6 +158,7 @@ public class AnnihilatorSavedData extends WorldSavedData { NBTTagCompound compound = (NBTTagCompound) nbt.tagList.get(i); Object key = deserializeKey(compound); if(key != null) this.items.put(key, new BigInteger(compound.getByteArray("amount"))); + System.out.println("Deserializing " + new BigInteger(compound.getByteArray("amount")).toString() + " of " + key); } } catch(Throwable ex) { } // because world data can be dented to all fucking hell and back } @@ -180,7 +182,7 @@ public class AnnihilatorSavedData extends WorldSavedData { if(key instanceof FluidType) { // 2 FluidType type = (FluidType) key; nbt.setByte("key", (byte) 2); - nbt.setString("fluid", type.getUnlocalizedName()); + nbt.setString("fluid", type.getName()); } if(key instanceof String) { // 3