This commit is contained in:
Bob 2025-12-14 21:17:34 +01:00
parent 1f5fc1926c
commit 5bcfd368fc
10 changed files with 105 additions and 48 deletions

View File

@ -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

View File

@ -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),\

View File

@ -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

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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()),

View File

@ -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);
}

View File

@ -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

View File

@ -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() });

View File

@ -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