From ea92109c3e5d3674a4d0e8bdd2c6940699c001f5 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Thu, 29 Jan 2026 09:57:03 -0500 Subject: [PATCH 01/10] Structure nonsense part 1 --- .../hbm/blocks/generic/BlockWandLogic.java | 3 +- .../com/hbm/blocks/generic/BlockWandLoot.java | 5 +- .../blocks/generic/BlockWandStructure.java | 7 +- .../com/hbm/blocks/generic/RedBarrel.java | 2 +- .../com/hbm/blocks/machine/MachineFan.java | 68 +++++-- .../hbm/commands/CommandReloadRecipes.java | 8 + .../java/com/hbm/config/ServerConfig.java | 3 + .../java/com/hbm/itempool/ItemPoolsPile.java | 16 ++ .../java/com/hbm/items/tool/ItemWandD.java | 6 +- src/main/java/com/hbm/main/MainRegistry.java | 11 +- .../java/com/hbm/main/StructureManager.java | 3 + .../machine/TileEntityLockableBase.java | 5 + src/main/java/com/hbm/util/LootGenerator.java | 16 ++ .../com/hbm/world/gen/nbt/NBTStructure.java | 9 +- .../com/hbm/world/gen/nbt/SpawnCondition.java | 5 +- .../hbm/world/gen/util/LogicBlockActions.java | 192 +++++++++++++----- .../world/gen/util/LogicBlockConditions.java | 15 +- .../gen/util/LogicBlockInteractions.java | 57 +++++- src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../assets/hbm/structures/dead_dish_big.nbt | Bin 0 -> 20634 bytes .../assets/hbm/structures/dead_dish_small.nbt | Bin 0 -> 5427 bytes .../assets/hbm/structures/excavator.nbt | Bin 0 -> 73893 bytes .../assets/hbm/structures/repeater_radio.nbt | Bin 0 -> 53692 bytes 23 files changed, 341 insertions(+), 92 deletions(-) create mode 100644 src/main/resources/assets/hbm/structures/dead_dish_big.nbt create mode 100644 src/main/resources/assets/hbm/structures/dead_dish_small.nbt create mode 100644 src/main/resources/assets/hbm/structures/excavator.nbt create mode 100644 src/main/resources/assets/hbm/structures/repeater_radio.nbt diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java b/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java index 734345786..70fe879a1 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java @@ -5,6 +5,7 @@ import com.hbm.blocks.IBlockSideRotation; import com.hbm.blocks.ILookOverlay; import com.hbm.blocks.ITooltipProvider; import com.hbm.blocks.ModBlocks; +import com.hbm.config.ServerConfig; import com.hbm.config.StructureConfig; import com.hbm.interfaces.IBomb; import com.hbm.interfaces.ICopiable; @@ -265,7 +266,7 @@ public class BlockWandLogic extends BlockContainer implements ILookOverlay, IToo @Override public void transformTE(World world, int coordBaseMode) { - triggerReplace = !StructureConfig.debugStructures; + triggerReplace = !ServerConfig.STRUCTURE_DEBUG.get(); } @Override diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java b/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java index 715da81a5..4242f32ba 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java @@ -9,6 +9,7 @@ import com.hbm.blocks.IBlockSideRotation; import com.hbm.blocks.ILookOverlay; import com.hbm.blocks.ITooltipProvider; import com.hbm.blocks.ModBlocks; +import com.hbm.config.ServerConfig; import com.hbm.config.StructureConfig; import com.hbm.itempool.ItemPool; import com.hbm.lib.RefStrings; @@ -303,7 +304,7 @@ public class BlockWandLoot extends BlockContainer implements ILookOverlay, ITool @Override public void transformTE(World world, int coordBaseMode) { - triggerReplace = !StructureConfig.debugStructures; + triggerReplace = !ServerConfig.STRUCTURE_DEBUG.get(); placedRotation = MathHelper.wrapAngleTo180_float(placedRotation + coordBaseMode * 90); } @@ -356,4 +357,4 @@ public class BlockWandLoot extends BlockContainer implements ILookOverlay, ITool } -} \ No newline at end of file +} diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandStructure.java b/src/main/java/com/hbm/blocks/generic/BlockWandStructure.java index 07d68da44..0684989cf 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandStructure.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandStructure.java @@ -8,6 +8,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import com.hbm.config.ServerConfig; import org.lwjgl.input.Keyboard; import com.hbm.blocks.IBlockMulti; @@ -228,8 +229,8 @@ public class BlockWandStructure extends BlockContainer implements IBlockMulti, I File structureFile = new File(structureDirectory, name + ".nbt"); - boolean previousDebug = StructureConfig.debugStructures; - StructureConfig.debugStructures = true; + boolean previousDebug = ServerConfig.STRUCTURE_DEBUG.get(); + ServerConfig.STRUCTURE_DEBUG.set(true); try { NBTStructure structure = new NBTStructure(structureFile); @@ -247,7 +248,7 @@ public class BlockWandStructure extends BlockContainer implements IBlockMulti, I } catch (FileNotFoundException ex) { player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Could not load: file not found")); } finally { - StructureConfig.debugStructures = previousDebug; + ServerConfig.STRUCTURE_DEBUG.set(previousDebug); } } diff --git a/src/main/java/com/hbm/blocks/generic/RedBarrel.java b/src/main/java/com/hbm/blocks/generic/RedBarrel.java index 753e47b09..d1acf2af2 100644 --- a/src/main/java/com/hbm/blocks/generic/RedBarrel.java +++ b/src/main/java/com/hbm/blocks/generic/RedBarrel.java @@ -59,7 +59,7 @@ public class RedBarrel extends BlockDetonatable { } else if(this == ModBlocks.lox_barrel) { world.newExplosion(entity, x, y, z, 1F, false, false); - ExplosionThermo.freeze(world, ix, iy, iz, 7); + ExplosionThermo.freezer(world, ix, iy, iz, 7); } else if(this == ModBlocks.taint_barrel) { world.newExplosion(entity, x, y, z, 1F, false, false); diff --git a/src/main/java/com/hbm/blocks/machine/MachineFan.java b/src/main/java/com/hbm/blocks/machine/MachineFan.java index bbe6081ad..971b5fe89 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineFan.java +++ b/src/main/java/com/hbm/blocks/machine/MachineFan.java @@ -47,22 +47,22 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro int l = BlockPistonBase.determineOrientation(world, x, y, z, player); world.setBlockMetadataWithNotify(x, y, z, l, 2); } - + @Override public int getRenderType(){ return -1; } - + @Override public boolean isOpaqueCube() { return false; } - + @Override public boolean renderAsNormalBlock() { return false; } - + @Override public boolean isSideSolid(IBlockAccess world, int x, int y, int z, ForgeDirection side) { int meta = world.getBlockMetadata(x, y, z); @@ -70,48 +70,49 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro if(side == ForgeDirection.UP || side == ForgeDirection.DOWN) return meta != 0 && meta != 1; if(side == ForgeDirection.NORTH || side == ForgeDirection.SOUTH) return meta != 2 && meta != 3; if(side == ForgeDirection.EAST || side == ForgeDirection.WEST) return meta != 4 && meta != 5; - + return false; } - + public static class TileEntityFan extends TileEntityLoadedBase { public float spin; public float prevSpin; public boolean falloff = true; + public boolean suck = false; @Override public void updateEntity() { - + this.prevSpin = this.spin; - + if(worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)) { ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); - + int range = 10; int effRange = 0; double push = 0.1; - + for(int i = 1; i <= range; i++) { Block block = worldObj.getBlock(xCoord + dir.offsetX * i, yCoord + dir.offsetY * i, zCoord + dir.offsetZ * i); boolean blowable = block instanceof IBlowable; - + if(block.isNormalCube() || blowable) { if(!worldObj.isRemote && blowable) ((IBlowable) block).applyFan(worldObj, xCoord + dir.offsetX * i, yCoord + dir.offsetY * i, zCoord + dir.offsetZ * i, dir, i); - + break; } - + effRange = i; } int x = dir.offsetX * effRange; int y = dir.offsetY * effRange; int z = dir.offsetZ * effRange; - + List affected = worldObj.getEntitiesWithinAABB(Entity.class, AxisAlignedBB.getBoundingBox(xCoord + 0.5 + Math.min(x, 0), yCoord + 0.5 + Math.min(y, 0), zCoord + 0.5 + Math.min(z, 0), xCoord + 0.5 + Math.max(x, 0), yCoord + 0.5 + Math.max(y, 0), zCoord + 0.5 + Math.max(z, 0)).expand(0.5, 0.5, 0.5)); - + for(Entity e : affected) { double coeff = push; @@ -120,20 +121,21 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro double dist = e.getDistance(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5); coeff *= 1.5 * (1 - dist / range / 2); } - + if(suck) coeff *= -1; + e.motionX += dir.offsetX * coeff; e.motionY += dir.offsetY * coeff; e.motionZ += dir.offsetZ * coeff; } - + if(worldObj.isRemote && worldObj.rand.nextInt(30) == 0) { - double speed = 0.2; + double speed = suck ? -0.2 : 0.2; worldObj.spawnParticle("cloud", xCoord + 0.5 + dir.offsetX * 0.5, yCoord + 0.5 + dir.offsetY * 0.5, zCoord + 0.5 + dir.offsetZ * 0.5, dir.offsetX * speed, dir.offsetY * speed, dir.offsetZ * speed); } - + this.spin += 30; } - + if(this.spin >= 360) { this.prevSpin -= 360; this.spin -= 360; @@ -143,7 +145,7 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro networkPackNT(150); } } - + @Override @SideOnly(Side.CLIENT) public double getMaxRenderDistanceSquared() { @@ -154,22 +156,26 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); this.falloff = nbt.getBoolean("falloff"); + this.suck = nbt.getBoolean("suck"); } @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); nbt.setBoolean("falloff", falloff); + nbt.setBoolean("suck", suck); } @Override public void serialize(ByteBuf buf) { buf.writeBoolean(falloff); + buf.writeBoolean(suck); } @Override public void deserialize(ByteBuf buf) { falloff = buf.readBoolean(); + suck = buf.readBoolean(); } } @@ -184,7 +190,7 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro if(meta == 3) world.setBlockMetadataWithNotify(x, y, z, 2, 3); if(meta == 4) world.setBlockMetadataWithNotify(x, y, z, 5, 3); if(meta == 5) world.setBlockMetadataWithNotify(x, y, z, 4, 3); - + return true; } @@ -202,6 +208,24 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro } } + return true; + } + if(tool == ToolType.WRENCH) { + TileEntityFan tile = (TileEntityFan) world.getTileEntity(x, y, z); + + if(tile != null) { + tile.suck = !tile.suck; + tile.markDirty(); + + if(!world.isRemote) { + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("").nextTranslation(this.getUnlocalizedName() + (tile.suck ? ".suckOn" : ".suckOff")).color(EnumChatFormatting.GOLD).flush(), MainRegistry.proxy.ID_FAN_MODE), (EntityPlayerMP) player); + + world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "random.click", 0.5F, 0.5F); + } + } + + + return true; } diff --git a/src/main/java/com/hbm/commands/CommandReloadRecipes.java b/src/main/java/com/hbm/commands/CommandReloadRecipes.java index 1c88fa350..674b5dd63 100644 --- a/src/main/java/com/hbm/commands/CommandReloadRecipes.java +++ b/src/main/java/com/hbm/commands/CommandReloadRecipes.java @@ -7,6 +7,9 @@ import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.util.ChatBuilder; import com.hbm.util.DamageResistanceHandler; +import com.hbm.world.gen.util.LogicBlockActions; +import com.hbm.world.gen.util.LogicBlockConditions; +import com.hbm.world.gen.util.LogicBlockInteractions; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; import net.minecraft.util.ChatComponentText; @@ -34,6 +37,11 @@ public class CommandReloadRecipes extends CommandBase { ItemPoolConfigJSON.initialize(); DamageResistanceHandler.init(); + LogicBlockActions.initialize(); + LogicBlockConditions.initialize(); + LogicBlockInteractions.initialize(); + + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "Reload complete :)")); } catch(Exception ex) { sender.addChatMessage(ChatBuilder.start("----------------------------------").color(EnumChatFormatting.GRAY).flush()); diff --git a/src/main/java/com/hbm/config/ServerConfig.java b/src/main/java/com/hbm/config/ServerConfig.java index 890c114a7..fc8fedbed 100644 --- a/src/main/java/com/hbm/config/ServerConfig.java +++ b/src/main/java/com/hbm/config/ServerConfig.java @@ -21,6 +21,8 @@ public class ServerConfig extends RunningConfig { public static ConfigWrapper CRATE_KEEP_CONTENTS = new ConfigWrapper(true); public static ConfigWrapper ITEM_HAZARD_DROP_TICKRATE = new ConfigWrapper(2); public static ConfigWrapper ENABLE_MKU = new ConfigWrapper(true); + public static ConfigWrapper STRUCTURE_DEBUG = new ConfigWrapper(false); + private static void initDefaults() { configMap.put("DAMAGE_COMPATIBILITY_MODE", DAMAGE_COMPATIBILITY_MODE); @@ -34,6 +36,7 @@ public class ServerConfig extends RunningConfig { configMap.put("CRATE_KEEP_CONTENTS", CRATE_KEEP_CONTENTS); configMap.put("ITEM_HAZARD_DROP_TICKRATE", ITEM_HAZARD_DROP_TICKRATE); configMap.put("ENABLE_MKU", ENABLE_MKU); + configMap.put("STRUCTURE_DEBUG", STRUCTURE_DEBUG); } /** Initializes defaults, then reads the config file if it exists, then writes the config file. */ diff --git a/src/main/java/com/hbm/itempool/ItemPoolsPile.java b/src/main/java/com/hbm/itempool/ItemPoolsPile.java index c8e78b24f..f3c7bfde5 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsPile.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsPile.java @@ -27,6 +27,8 @@ public class ItemPoolsPile { public static final String POOL_PILE_MAKESHIFT_WIRE = "POOL_PILE_MAKESHIFT_WIRE"; public static final String POOL_PILE_NUKE_STORAGE = "POOL_PILE_NUKE_STORAGE"; public static final String POOL_PILE_OF_GARBAGE = "POOL_PILE_OF_GARBAGE"; + public static final String POOL_PILE_MECHANICAL = "POOL_PILE_MECHANICAL"; + public static void init() { @@ -141,5 +143,19 @@ public class ItemPoolsPile { weighted(ModItems.canned_conserve, 2, 0, 1, 5), }; }}; + + new ItemPool(POOL_PILE_MECHANICAL) {{ + this.pool = new WeightedRandomChestContent[] { + weighted(ModItems.defuser, 0, 1, 1, 5), + weighted(ModItems.screwdriver, 0, 1, 1, 30), + weighted(ModItems.wire_fine, Mats.MAT_COPPER.id, 8, 12, 120), + weighted(ModItems.plate_steel, 0, 3, 8, 40), + weighted(ModItems.plate_copper, 0, 2, 5, 40), + weighted(ModItems.coil_copper, 0, 2, 5, 40), + weighted(ModItems.coil_tungsten, 0, 2, 5, 40), + weighted(ModItems.ammo_standard, EnumAmmo.NUKE_TOTS.ordinal(), 1, 1, 10), + + }; + }}; } } diff --git a/src/main/java/com/hbm/items/tool/ItemWandD.java b/src/main/java/com/hbm/items/tool/ItemWandD.java index 3d3875a20..e48706777 100644 --- a/src/main/java/com/hbm/items/tool/ItemWandD.java +++ b/src/main/java/com/hbm/items/tool/ItemWandD.java @@ -10,6 +10,7 @@ import com.hbm.itempool.ItemPoolsSingle; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; +import com.hbm.main.StructureManager; import com.hbm.tileentity.machine.storage.TileEntitySafe; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -34,7 +35,8 @@ public class ItemWandD extends Item { Random rand = new Random(); - if(world.getBlock(pos.blockX, y - 1, pos.blockZ).canPlaceTorchOnTop(world, pos.blockX, y - 1, pos.blockZ)) { + StructureManager.crane.build(world, pos.blockX, y, pos.blockZ); + /*if(world.getBlock(pos.blockX, y - 1, pos.blockZ).canPlaceTorchOnTop(world, pos.blockX, y - 1, pos.blockZ)) { world.setBlock(pos.blockX, y, pos.blockZ, ModBlocks.safe, rand.nextInt(4) + 2, 2); TileEntitySafe safe = (TileEntitySafe) world.getTileEntity(pos.blockX, y, pos.blockZ); @@ -64,7 +66,7 @@ public class ItemWandD extends Item { if(GeneralConfig.enableDebugMode) MainRegistry.logger.info("[Debug] Successfully spawned safe at " + pos.blockX + " " + (y + 1) +" " + pos.blockZ); - } + }*/ /*ExplosionVNT vnt = new ExplosionVNT(world, pos.hitVec.xCoord, pos.hitVec.yCoord, pos.hitVec.zCoord, 7); vnt.setBlockAllocator(new BlockAllocatorBulkie(60)); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index d5407f218..d1b3e44f6 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -45,6 +45,9 @@ import com.hbm.world.feature.BedrockOre; import com.hbm.world.feature.OreCave; import com.hbm.world.feature.OreLayer3D; import com.hbm.world.feature.SchistStratum; +import com.hbm.world.gen.util.LogicBlockActions; +import com.hbm.world.gen.util.LogicBlockConditions; +import com.hbm.world.gen.util.LogicBlockInteractions; import com.hbm.world.generator.CellularDungeonFactory; import cpw.mods.fml.common.*; import cpw.mods.fml.common.Mod.EventHandler; @@ -357,7 +360,7 @@ public class MainRegistry { } } }); - + DispenserBehaviorHandler.init(); MicroBlocksCompatHandler.preInit(); } @@ -547,7 +550,7 @@ public class MainRegistry { // IMPORTANT: fluids have to load before recipes. weird shit happens if not. Fluids.reloadFluids(); FluidContainerRegistry.register(); - + MagicRecipes.register(); LemegetonRecipes.register(); SILEXRecipes.register(); @@ -580,6 +583,10 @@ public class MainRegistry { MobUtil.intializeMobPools(); + LogicBlockActions.initialize(); + LogicBlockConditions.initialize(); + LogicBlockInteractions.initialize(); + proxy.registerMissileItems(); // Load compatibility for OC. diff --git a/src/main/java/com/hbm/main/StructureManager.java b/src/main/java/com/hbm/main/StructureManager.java index 8f850de22..639f9a402 100644 --- a/src/main/java/com/hbm/main/StructureManager.java +++ b/src/main/java/com/hbm/main/StructureManager.java @@ -87,6 +87,9 @@ public class StructureManager { public static final NBTStructure crane = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/crane.nbt")); public static final NBTStructure broadcasting_tower = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/broadcasting_tower.nbt")); + public static final NBTStructure excavator = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/excavator.nbt")); + public static final NBTStructure repeater_radio = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/repeater_radio.nbt")); + public static final NBTStructure spire = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/spire.nbt")); // public static final NBTStructure test_rot = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/test-rot.nbt")); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java index 466072d46..6966b818a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java @@ -29,6 +29,11 @@ public abstract class TileEntityLockableBase extends TileEntityLoadedBase { markDirty(); } + public void unlock() { + isLocked = false; + markDirty(); + } + public void setPins(int pins) { lock = pins; markDirty(); } public int getPins() { return lock; } public void setMod(double mod) { lockMod = mod; markDirty(); } diff --git a/src/main/java/com/hbm/util/LootGenerator.java b/src/main/java/com/hbm/util/LootGenerator.java index a91ec0e3a..7e4ab2eb8 100644 --- a/src/main/java/com/hbm/util/LootGenerator.java +++ b/src/main/java/com/hbm/util/LootGenerator.java @@ -30,6 +30,7 @@ public class LootGenerator { public static final String LOOT_METEOR = "LOOT_METEOR"; public static final String LOOT_FLAREGUN = "LOOT_FLAREGUN"; public static final String LOOT_SHIT = "LOOT_SHIT"; + public static final String LOOT_MECHANICAL = "LOOT_MECHANICAL"; public static void applyLoot(World world, int x, int y, int z, String name) { switch(name) { @@ -44,6 +45,7 @@ public class LootGenerator { case LOOT_METEOR: lootBookMeteor(world, x, y, z); case LOOT_FLAREGUN: lootFlareGun(world, x, y, z); case LOOT_SHIT: lootShit(world, x, y, z); + case LOOT_MECHANICAL: lootMechanical(world, x, y, z); default: lootBones(world, x, y, z); break; } } @@ -60,6 +62,7 @@ public class LootGenerator { LOOT_GLYPHID_HIVE, LOOT_METEOR, LOOT_FLAREGUN, + LOOT_MECHANICAL, }; } @@ -247,4 +250,17 @@ public class LootGenerator { } } } + + public static void lootMechanical(World world, int x, int y, int z) { + + TileEntityLoot loot = (TileEntityLoot) world.getTileEntity(x, y, z); + + if(loot != null && loot.items.isEmpty()) { + + int limit = world.rand.nextInt(3) + 1; + for(int i = 0; i < limit; i++) { + addItemWithDeviation(loot, world.rand, ItemPool.getStack(ItemPool.getPool(ItemPoolsPile.POOL_PILE_MECHANICAL), world.rand), world.rand.nextDouble() - 0.5, i * 0.03125, world.rand.nextDouble() - 0.5); + } + } + } } diff --git a/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java b/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java index c02eb5d73..e9ddf68b0 100644 --- a/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java +++ b/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java @@ -9,6 +9,7 @@ import java.io.InputStream; import java.util.*; import java.util.function.Predicate; +import com.hbm.config.ServerConfig; import org.apache.commons.io.IOUtils; import com.hbm.blocks.ModBlocks; @@ -80,7 +81,7 @@ public class NBTStructure { private Map> toTopConnections; private Map> toBottomConnections; private Map> toHorizontalConnections; - + // incredibly shitty system for translating legacy block definitions to new ones @Untested // i can't find a god damn factory private static Map substitutions = new HashMap() {{ @@ -328,7 +329,7 @@ public class NBTStructure { String blockName = p.getString("Name"); NBTTagCompound prop = p.getCompoundTag("Properties"); - + /// BOB PATCH /// if(substitutions.containsKey(blockName)) blockName = substitutions.get(blockName); /// BOB PATCH /// @@ -343,7 +344,7 @@ public class NBTStructure { palette[i] = new BlockDefinition(blockName, meta); - if(StructureConfig.debugStructures && palette[i].block == Blocks.air) { + if(ServerConfig.STRUCTURE_DEBUG.get() && palette[i].block == Blocks.air) { palette[i] = new BlockDefinition(ModBlocks.wand_air, meta); } } @@ -416,7 +417,7 @@ public class NBTStructure { List namedConnections = toConnections.computeIfAbsent(ourName, name -> new ArrayList<>()); namedConnections.add(connection); - if(!StructureConfig.debugStructures) { + if(!ServerConfig.STRUCTURE_DEBUG.get()) { blockState = new BlockState(new BlockDefinition(replaceBlock, replaceMeta)); } } diff --git a/src/main/java/com/hbm/world/gen/nbt/SpawnCondition.java b/src/main/java/com/hbm/world/gen/nbt/SpawnCondition.java index 0c385e51e..5785b6799 100644 --- a/src/main/java/com/hbm/world/gen/nbt/SpawnCondition.java +++ b/src/main/java/com/hbm/world/gen/nbt/SpawnCondition.java @@ -5,6 +5,7 @@ import java.util.Random; import java.util.function.Function; import java.util.function.Predicate; +import com.hbm.config.ServerConfig; import com.hbm.config.StructureConfig; import com.hbm.util.Tuple.Pair; import com.hbm.util.Tuple.Quartet; @@ -109,7 +110,7 @@ public class SpawnCondition { // Make sure structure debug is enabled, or it will no-op // Do not use in generation public void buildAll(World world, int x, int y, int z) { - if(!StructureConfig.debugStructures) return; + if(!ServerConfig.STRUCTURE_DEBUG.get()) return; int padding = 5; int oz = 0; @@ -148,4 +149,4 @@ public class SpawnCondition { } -} \ No newline at end of file +} diff --git a/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java index 5ad07ae6d..2e24dbb58 100644 --- a/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java @@ -10,6 +10,8 @@ import com.hbm.entity.mob.EntityUndeadSoldier; import com.hbm.items.ItemEnums; import com.hbm.items.ModItems; import com.hbm.tileentity.TileEntityDoorGeneric; +import com.hbm.tileentity.bomb.TileEntityCharge; +import com.hbm.tileentity.machine.TileEntityLockableBase; import com.hbm.tileentity.machine.storage.TileEntityCrateBase; import com.hbm.util.ContaminationUtil; import com.hbm.util.MobUtil; @@ -20,6 +22,7 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.effect.EntityLightningBolt; import net.minecraft.entity.monster.EntitySkeleton; import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; @@ -33,7 +36,7 @@ import java.util.function.Consumer; public class LogicBlockActions { - public static LinkedHashMap> actions = new LinkedHashMap<>(); + public static LinkedHashMap> actions; public static Consumer PHASE_ABERRATOR = (tile) -> { World world = tile.getWorldObj(); @@ -169,81 +172,91 @@ public class LogicBlockActions { } }; - public static Consumer SKELETON_GUN_TIER_1 = (tile) -> { + public static Consumer SKELETONS_GUN_TIER_1 = (tile) -> { World world = tile.getWorldObj(); int x = tile.xCoord; int y = tile.yCoord; int z = tile.zCoord; if (tile.phase == 1) { - EntitySkeleton mob = new EntitySkeleton(world); - mob.setPositionAndRotation(x, y, z, 0, 0); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolGunsTier1, new Random()); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMasks, new Random()); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolRanged, new Random()); - world.spawnEntityInWorld(mob); - world.setBlock(x, y, z, Blocks.air); + for (int i = 0; i < 3; i++) { + EntitySkeleton mob = new EntitySkeleton(world); + mob.setPositionAndRotation(x, y, z, 0, 0); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolGunsTier1, new Random()); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMasks, new Random()); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolRanged, new Random()); + world.spawnEntityInWorld(mob); + world.setBlock(x, y, z, Blocks.air); + } } }; - public static Consumer SKELETON_GUN_TIER_2 = (tile) -> { + public static Consumer SKELETONS_GUN_TIER_2 = (tile) -> { World world = tile.getWorldObj(); int x = tile.xCoord; int y = tile.yCoord; int z = tile.zCoord; if (tile.phase == 1) { - EntitySkeleton mob = new EntitySkeleton(world); - mob.setPositionAndRotation(x, y, z, 0, 0); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolGunsTier2, new Random()); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMasks, new Random()); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolTierArmor, new Random()); - world.spawnEntityInWorld(mob); - world.setBlock(x, y, z, Blocks.air); + for (int i = 0; i < 3; i++) { + EntitySkeleton mob = new EntitySkeleton(world); + mob.setPositionAndRotation(x, y, z, 0, 0); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolGunsTier2, new Random()); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMasks, new Random()); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolTierArmor, new Random()); + world.spawnEntityInWorld(mob); + world.setBlock(x, y, z, Blocks.air); + } } }; - public static Consumer SKELETON_GUN_TIER_3 = (tile) -> { + public static Consumer SKELETONS_GUN_TIER_3 = (tile) -> { World world = tile.getWorldObj(); int x = tile.xCoord; int y = tile.yCoord; int z = tile.zCoord; if (tile.phase == 1) { - EntitySkeleton mob = new EntitySkeleton(world); - mob.setPositionAndRotation(x, y, z, 0, 0); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolGunsTier3, new Random()); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMasks, new Random()); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolAdvRanged, new Random()); - world.spawnEntityInWorld(mob); - world.setBlock(x, y, z, Blocks.air); + for (int i = 0; i < 3; i++) { + EntitySkeleton mob = new EntitySkeleton(world); + mob.setPositionAndRotation(x, y, z, 0, 0); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolGunsTier3, new Random()); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMasks, new Random()); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolAdvRanged, new Random()); + world.spawnEntityInWorld(mob); + world.setBlock(x, y, z, Blocks.air); + } } }; - public static Consumer ZOMBIE_TIER_1 = (tile) -> { + public static Consumer ZOMBIES_TIER_1 = (tile) -> { World world = tile.getWorldObj(); int x = tile.xCoord; int y = tile.yCoord; int z = tile.zCoord; if (tile.phase == 1) { - EntityZombie mob = new EntityZombie(world); - mob.setPositionAndRotation(x, y, z, 0, 0); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMelee, new Random()); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolTierArmor, new Random()); - world.spawnEntityInWorld(mob); - world.setBlock(x, y, z, Blocks.air); + for (int i = 0; i < 3; i++) { + EntityZombie mob = new EntityZombie(world); + mob.setPositionAndRotation(x, y, z, 0, 0); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMelee, new Random()); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolTierArmor, new Random()); + world.spawnEntityInWorld(mob); + world.setBlock(x, y, z, Blocks.air); + } } }; - public static Consumer ZOMBIE_TIER_2 = (tile) -> { + public static Consumer ZOMBIES_TIER_2 = (tile) -> { World world = tile.getWorldObj(); int x = tile.xCoord; int y = tile.yCoord; int z = tile.zCoord; if (tile.phase == 1) { - EntityZombie mob = new EntityZombie(world); - mob.setPositionAndRotation(x, y, z, 0, 0); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolTierArmor, new Random()); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMelee, new Random()); - world.spawnEntityInWorld(mob); - world.setBlock(x, y, z, Blocks.air); + for (int i = 0; i < 3; i++) { + EntityZombie mob = new EntityZombie(world); + mob.setPositionAndRotation(x, y, z, 0, 0); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolTierArmor, new Random()); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMelee, new Random()); + world.spawnEntityInWorld(mob); + world.setBlock(x, y, z, Blocks.air); + } } }; @@ -361,28 +374,109 @@ public class LogicBlockActions { } }; + public static Consumer POWER_LOCK = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + ForgeDirection parallel = tile.direction.getRotation(ForgeDirection.UP); + + if(tile.phase == 0 && !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(3, 3, 3)).isEmpty()){ + world.getClosestPlayer(x,y,z, 300).addChatMessage(new ChatComponentText( + EnumChatFormatting.LIGHT_PURPLE + "[POWER LOCK]" + + EnumChatFormatting.RESET + " Low Power Warning! Locking Safe")); + tile.phase++; + + TileEntityLockableBase safe = null; + if(world.getTileEntity(x - parallel.offsetX,y,z) instanceof TileEntityLockableBase) + safe = (TileEntityLockableBase) world.getTileEntity(x,y,z - parallel.offsetX); + if(safe != null){ + safe.setPins(world.rand.nextInt(999)); + } + } + }; + + public static Consumer BOMB_TRAP = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + ForgeDirection direction = tile.direction.getOpposite(); + + if(tile.phase == 1){ + world.setBlock(x,y,z + direction.offsetZ, ModBlocks.charge_c4, 2, 3); + + TileEntity te = world.getTileEntity(x,y,z + direction.offsetZ); + if(te instanceof TileEntityCharge){ + TileEntityCharge bomb = (TileEntityCharge) te; + bomb.timer = 2400; + bomb.started = true; + } + + world.setBlock(x,y,z, tile.disguise != null ? tile.disguise : Blocks.air); + } + }; + + public static Consumer BOMB_CRANE = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + ForgeDirection direction = tile.direction.getOpposite(); + + if(tile.phase == 1){ + world.setBlock(x,y,z + direction.offsetZ, ModBlocks.charge_c4, 2, 3); + + TileEntity te = world.getTileEntity(x,y,z + direction.offsetZ); + if(te instanceof TileEntityCharge){ + TileEntityCharge bomb = (TileEntityCharge) te; + bomb.timer = 2400; + bomb.started = true; + } + + world.setBlock(x,y,z, ModBlocks.crate_steel); + TileEntityCrateBase crate = (TileEntityCrateBase) world.getTileEntity(x,y,z); + crate.setPins(world.rand.nextInt(999)); + crate.lock(); + ((IInventory)crate).setInventorySlotContents(15, new ItemStack(ModItems.launch_key)); + } + }; + public static List getActionNames(){ return new ArrayList<>(actions.keySet()); } //register new actions here static{ - //example actions + initialize(); + } + + public static void initialize(){ + actions = new LinkedHashMap<>(); + //logic actions actions.put("FODDER_WAVE", FODDER_WAVE); - actions.put("ABERRATOR", PHASE_ABERRATOR); + actions.put("POWER_LOCK", POWER_LOCK); actions.put("COLLAPSE_ROOF_RAD_5", COLLAPSE_ROOF_RAD_5); actions.put("COLLAPSE_ROOF_RAD_10", COLLAPSE_ROOF_RAD_10); + actions.put("BOMB_TRAP", BOMB_TRAP); + actions.put("BOMB_CRANE", BOMB_CRANE); + + //Mob Block Actions + actions.put("SKELETON_GUN_TIER_1", SKELETONS_GUN_TIER_1); + actions.put("SKELETON_GUN_TIER_2", SKELETONS_GUN_TIER_2); + actions.put("SKELETON_GUN_TIER_3", SKELETONS_GUN_TIER_3); + + actions.put("ZOMBIE_TIER_1", ZOMBIES_TIER_1); + actions.put("ZOMBIE_TIER_2", ZOMBIES_TIER_2); + + //example actions + actions.put("ABERRATOR", PHASE_ABERRATOR); actions.put("PUZZLE_TEST", PUZZLE_TEST); actions.put("MISSILE_STRIKE", MISSILE_STRIKE); actions.put("IRRADIATE_ENTITIES_AOE", RAD_CONTAINMENT_SYSTEM); - - //Mob Block Actions - actions.put("SKELETON_GUN_TIER_1", SKELETON_GUN_TIER_1); - actions.put("SKELETON_GUN_TIER_2", SKELETON_GUN_TIER_2); - actions.put("SKELETON_GUN_TIER_3", SKELETON_GUN_TIER_3); - - actions.put("ZOMBIE_TIER_1", ZOMBIE_TIER_1); - actions.put("ZOMBIE_TIER_2", ZOMBIE_TIER_2); } } diff --git a/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java index b9bc15370..0e1de662f 100644 --- a/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java @@ -5,6 +5,7 @@ import com.hbm.blocks.generic.BlockPedestal; import com.hbm.blocks.generic.LogicBlock; import com.hbm.entity.mob.EntityUndeadSoldier; import com.hbm.items.ModItems; +import com.hbm.tileentity.machine.TileEntityLockableBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; @@ -19,7 +20,7 @@ import java.util.function.Function; public class LogicBlockConditions { - public static LinkedHashMap> conditions = new LinkedHashMap<>(); + public static LinkedHashMap> conditions; /**For use with interactions, for having them handle all conditional tasks*/ public static Function EMPTY = (tile) -> false; @@ -96,18 +97,26 @@ public class LogicBlockConditions { && ((BlockPedestal.TileEntityPedestal) pedestal).item.getItem() == ModItems.big_sword; }; + public static List getConditionNames(){ return new ArrayList<>(conditions.keySet()); } //register new conditions here static { - //example conditions + initialize(); + } + + public static void initialize() { + conditions = new LinkedHashMap<>(); + conditions.put("EMPTY", EMPTY); - conditions.put("ABERRATOR", ABERRATOR); conditions.put("PLAYER_CUBE_3", PLAYER_CUBE_3); conditions.put("PLAYER_CUBE_5", PLAYER_CUBE_5); conditions.put("PLAYER_CUBE_25", PLAYER_CUBE_25); + + //example conditions + conditions.put("ABERRATOR", ABERRATOR); conditions.put("REDSTONE", REDSTONE); conditions.put("PUZZLE_TEST", PUZZLE_TEST); } diff --git a/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java index b9ee4dde1..4a578c8b6 100644 --- a/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java @@ -1,12 +1,18 @@ package com.hbm.world.gen.util; +import api.hbm.energymk2.IEnergyHandlerMK2; import com.hbm.blocks.generic.LogicBlock; import com.hbm.items.ModItems; import com.hbm.potion.HbmPotion; +import com.hbm.tileentity.machine.TileEntityLockableBase; +import com.hbm.tileentity.machine.storage.TileEntityCrateBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.potion.PotionEffect; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; import java.util.ArrayList; import java.util.LinkedHashMap; @@ -18,11 +24,16 @@ public class LogicBlockInteractions { /**Consumer consists of world instance, tile entity instance, three ints for coordinates, one int for block side, and player instance, * in that order **/ - public static LinkedHashMap> interactions = new LinkedHashMap<>(); + public static LinkedHashMap> interactions; public static Consumer TEST = (array) -> { + World world = (World) array[0]; LogicBlock.TileEntityLogicBlock logic = (LogicBlock.TileEntityLogicBlock) array[1]; + int x = (int) array[2]; + int y = (int) array[3]; + int z = (int) array[4]; EntityPlayer player = (EntityPlayer) array[5]; + int side = (int) array[6]; if(logic.phase > 1) return; @@ -48,6 +59,42 @@ public class LogicBlockInteractions { } }; + public static Consumer POWER_LOCK = (array) -> { + World world = (World) array[0]; + LogicBlock.TileEntityLogicBlock logic = (LogicBlock.TileEntityLogicBlock) array[1]; + EntityPlayer player = (EntityPlayer) array[5]; + int x = (int) array[2]; + int y = (int) array[3]; + int z = (int) array[4]; + + IEnergyHandlerMK2 handler = null; + ForgeDirection parallel = logic.direction.getRotation(ForgeDirection.UP); + + if(world.getTileEntity(x,y + 1,z) instanceof IEnergyHandlerMK2) + handler = (IEnergyHandlerMK2) world.getTileEntity(x,y + 1,z); + + if(handler == null || !(handler.getPower() > 500_000)) + player.addChatMessage(new ChatComponentText( + EnumChatFormatting.LIGHT_PURPLE + "[POWER LOCK]" + + EnumChatFormatting.RESET + " Charge adjacent energy storage to at least 500KHE to release emergency lock")); + else { + player.addChatMessage(new ChatComponentText( + EnumChatFormatting.LIGHT_PURPLE + "[POWER LOCK]" + + EnumChatFormatting.RESET + " Power Restorted! Safe Unlocked!")); + + TileEntityLockableBase safe = null; + if(world.getTileEntity(x - parallel.offsetX,y,z) instanceof TileEntityLockableBase) + safe = (TileEntityLockableBase) world.getTileEntity(x - parallel.offsetX,y,z); + + if(safe != null){ + safe.unlock(); + world.playSoundAtEntity(player, "hbm:block.lockOpen", 3.0F, 0.8F); + } + + } + + }; + public static List getInteractionNames(){ @@ -56,6 +103,14 @@ public class LogicBlockInteractions { //register new interactions here static{ + initialize(); + } + public static void initialize() { + interactions = new LinkedHashMap<>(); + + interactions.put("POWER_LOCK", POWER_LOCK); + + //example interactions interactions.put("TEST", TEST); interactions.put("RADAWAY_INJECTOR", RAD_CONTAINMENT_SYSTEM); } diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 2c4b9b481..11fdbfa48 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5541,6 +5541,8 @@ tile.fan.name=Fan tile.fan.desc=Activates using redstone$Will push entities up to 10 blocks$Right-click with screwdriver to flip$Right-click with hand drill to switch mode tile.fan.falloffOn=Fan power decreases with distance tile.fan.falloffOff=Consistent fan power +tile.fan.suckOn=Fan is now sucking +tile.fan.suckOff=Fan is now blowing tile.fence_metal.name=Chainlink Fence tile.fence_metal_post.name=Chainlink Fence Post tile.field_disturber.name=High Energy Field Jammer diff --git a/src/main/resources/assets/hbm/structures/dead_dish_big.nbt b/src/main/resources/assets/hbm/structures/dead_dish_big.nbt new file mode 100644 index 0000000000000000000000000000000000000000..3ec64e9183fb1917f3a5cecfcc84370956f3957e GIT binary patch literal 20634 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/structures/dead_dish_small.nbt b/src/main/resources/assets/hbm/structures/dead_dish_small.nbt new file mode 100644 index 0000000000000000000000000000000000000000..cb6b5e178c12c7c5afd323812e1bd99a462c2613 GIT binary patch literal 5427 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 Nf`Z_>k@t*O{1vgf18x8S literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/structures/repeater_radio.nbt b/src/main/resources/assets/hbm/structures/repeater_radio.nbt new file mode 100644 index 0000000000000000000000000000000000000000..a472715cb540503cee59997e6ee149ccc58cf248 GIT binary patch literal 53692 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

?=4~iqA0M=1 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 SmY7VcuZ?d#Wi<53NBGQy literal 0 HcmV?d00001 From 25c52c79e214af990924c2db157271664f561ced Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Mon, 23 Mar 2026 09:44:48 -0300 Subject: [PATCH 02/10] crane part iondknow --- src/main/java/com/hbm/blocks/ModBlocks.java | 7 +- .../hbm/blocks/generic/BlockWandLogic.java | 8 +- .../com/hbm/blocks/generic/BlockWandLoot.java | 40 ++++++++- .../blocks/generic/BlockWandStructure.java | 3 +- .../com/hbm/blocks/generic/LogicBlock.java | 6 ++ .../hbm/entity/mob/ai/EntityAIFireGun.java | 26 +++--- .../java/com/hbm/itempool/ItemPoolsPile.java | 22 ++++- .../com/hbm/itempool/ItemPoolsSingle.java | 21 +++-- src/main/java/com/hbm/util/LootGenerator.java | 19 ++++- src/main/java/com/hbm/util/MobUtil.java | 78 ++++-------------- .../hbm/world/gen/util/LogicBlockActions.java | 68 ++++++++++----- .../world/gen/util/LogicBlockConditions.java | 25 ++++++ .../assets/hbm/structures/crane_mod.nbt | Bin 0 -> 14682 bytes 13 files changed, 216 insertions(+), 107 deletions(-) create mode 100644 src/main/resources/assets/hbm/structures/crane_mod.nbt diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 764527e5d..0f405629f 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -722,7 +722,7 @@ public class ModBlocks { public static Block machine_battery_socket; public static Block machine_battery_redd; - + @Deprecated public static Block machine_battery_potato; @Deprecated public static Block machine_battery; @Deprecated public static Block machine_lithium_battery; @@ -1217,6 +1217,7 @@ public class ModBlocks { public static Block wand_structure; public static Block logic_block; + public static Block logic_block_invis; public static Material materialGas = new MaterialGas(); @@ -1821,7 +1822,7 @@ public class ModBlocks { machine_battery_socket = new MachineBatterySocket().setBlockName("machine_battery_socket").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_battery_redd = new MachineBatteryREDD().setBlockName("machine_battery_redd").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); - + machine_battery_potato = new MachineBattery(Material.iron, 10_000).setBlockName("machine_battery_potato").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null); machine_battery = new MachineBattery(Material.iron, 1_000_000).setBlockName("machine_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null); machine_lithium_battery = new MachineBattery(Material.iron, 50_000_000).setBlockName("machine_lithium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null); @@ -2358,6 +2359,7 @@ public class ModBlocks { wand_structure = new BlockWandStructure().setBlockName("wand_structure"); logic_block = new LogicBlock().setBlockName("logic_block").setBlockTextureName(RefStrings.MODID + ":logic_block"); + logic_block_invis = new LogicBlock().setBlockName("logic_block_invis").setBlockTextureName(RefStrings.MODID + ":logic_block"); } @@ -3500,6 +3502,7 @@ public class ModBlocks { register(wand_structure); register(logic_block); + register(logic_block_invis); } private static void register(Block b) { diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java b/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java index 70fe879a1..05e8737af 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java @@ -117,6 +117,7 @@ public class BlockWandLogic extends BlockContainer implements ILookOverlay, IToo return true; } } + } return super.onBlockActivated(world, x, y, z, player, side, fX, fY, fZ); } @@ -221,6 +222,8 @@ public class BlockWandLogic extends BlockContainer implements ILookOverlay, IToo Block disguise; int disguiseMeta = -1; + boolean invisible = false; + public String actionID = "FODDER_WAVE"; public String conditionID = "PLAYER_CUBE_5"; public String interactionID; @@ -242,7 +245,8 @@ public class BlockWandLogic extends BlockContainer implements ILookOverlay, IToo MainRegistry.logger.warn("Somehow the block at: " + xCoord + ", " + yCoord + ", " + zCoord + " isn't a logic block but we're doing a TE update as if it is, cancelling!"); return; } - worldObj.setBlock(xCoord,yCoord,zCoord, ModBlocks.logic_block); + + worldObj.setBlock(xCoord,yCoord,zCoord, disguise == null ? ModBlocks.logic_block_invis : ModBlocks.logic_block); TileEntity te = worldObj.getTileEntity(xCoord, yCoord, zCoord); @@ -324,6 +328,7 @@ public class BlockWandLogic extends BlockContainer implements ILookOverlay, IToo nbt.setString("conditionID", conditionID); if(interactionID != null) nbt.setString("interactionID", interactionID); + nbt.setInteger("rotation", placedRotation); if(disguise != null){ nbt.setString("disguise", GameRegistry.findUniqueIdentifierFor(disguise).toString()); nbt.setInteger("disguiseMeta", disguiseMeta); @@ -337,6 +342,7 @@ public class BlockWandLogic extends BlockContainer implements ILookOverlay, IToo actionID = nbt.getString("actionID"); conditionID = nbt.getString("conditionID"); interactionID = nbt.getString("interactionID"); + placedRotation = nbt.getInteger("disguiseMeta"); if(nbt.hasKey("disguise")){ disguise = Block.getBlockFromName(nbt.getString("disguise")); disguiseMeta = nbt.getInteger("disguiseMeta"); diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java b/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java index 4242f32ba..14d40578b 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java @@ -11,6 +11,8 @@ import com.hbm.blocks.ITooltipProvider; import com.hbm.blocks.ModBlocks; import com.hbm.config.ServerConfig; import com.hbm.config.StructureConfig; +import com.hbm.interfaces.IBomb; +import com.hbm.interfaces.ICopiable; import com.hbm.itempool.ItemPool; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; @@ -48,7 +50,7 @@ import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.common.util.FakePlayerFactory; -public class BlockWandLoot extends BlockContainer implements ILookOverlay, IToolable, ITooltipProvider, IBlockSideRotation { +public class BlockWandLoot extends BlockContainer implements ILookOverlay, IToolable, ITooltipProvider, IBlockSideRotation, IBomb { @SideOnly(Side.CLIENT) protected IIcon iconTop; @@ -212,12 +214,23 @@ public class BlockWandLoot extends BlockContainer implements ILookOverlay, ITool } } + @Override + public BombReturnCode explode(World world, int x, int y, int z) { + TileEntity te = world.getTileEntity(x, y, z); + + if(!(te instanceof BlockWandLoot.TileEntityWandLoot)) return null; + + ((BlockWandLoot.TileEntityWandLoot) te).triggerReplace = true; + + return BombReturnCode.TRIGGERED; + } + @Override public TileEntity createNewTileEntity(World world, int meta) { return new TileEntityWandLoot(); } - public static class TileEntityWandLoot extends TileEntityLoadedBase implements INBTTileEntityTransformable { + public static class TileEntityWandLoot extends TileEntityLoadedBase implements INBTTileEntityTransformable, ICopiable { private boolean triggerReplace; @@ -355,6 +368,29 @@ public class BlockWandLoot extends BlockContainer implements ILookOverlay, ITool poolName = BufferUtil.readString(buf); } + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + Block block = replaceBlock != null ? replaceBlock : ModBlocks.deco_loot; + + nbt.setInteger("replaceBlock", Block.getIdFromBlock(block)); + nbt.setInteger("replaceMeta", replaceMeta); + nbt.setInteger("minItems", minItems); + nbt.setInteger("maxItems", maxItems); + nbt.setString("poolName", poolName); + + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + replaceBlock = Block.getBlockById(nbt.getInteger("replaceBlock")); + replaceMeta = nbt.getInteger("replaceMeta"); + minItems = nbt.getInteger("minItems"); + maxItems = nbt.getInteger("maxItems"); + poolName = nbt.getString("poolName"); + + } } } diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandStructure.java b/src/main/java/com/hbm/blocks/generic/BlockWandStructure.java index 0684989cf..426c8bf3d 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandStructure.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandStructure.java @@ -229,8 +229,9 @@ public class BlockWandStructure extends BlockContainer implements IBlockMulti, I File structureFile = new File(structureDirectory, name + ".nbt"); + boolean debug = !worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord); boolean previousDebug = ServerConfig.STRUCTURE_DEBUG.get(); - ServerConfig.STRUCTURE_DEBUG.set(true); + ServerConfig.STRUCTURE_DEBUG.set(debug); try { NBTStructure structure = new NBTStructure(structureFile); diff --git a/src/main/java/com/hbm/blocks/generic/LogicBlock.java b/src/main/java/com/hbm/blocks/generic/LogicBlock.java index 462755811..5487f4263 100644 --- a/src/main/java/com/hbm/blocks/generic/LogicBlock.java +++ b/src/main/java/com/hbm/blocks/generic/LogicBlock.java @@ -1,5 +1,6 @@ package com.hbm.blocks.generic; +import com.hbm.blocks.ModBlocks; import com.hbm.world.gen.util.LogicBlockActions; import com.hbm.world.gen.util.LogicBlockConditions; import com.hbm.world.gen.util.LogicBlockInteractions; @@ -50,6 +51,11 @@ public class LogicBlock extends BlockContainer { return super.getIcon(world, x, y, z, side); } + @Override + public boolean isOpaqueCube() { + return this != ModBlocks.logic_block_invis; + } + @Override public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer player, int side, float subX, float subY, float subZ) { TileEntity te = worldIn.getTileEntity(x, y, z); diff --git a/src/main/java/com/hbm/entity/mob/ai/EntityAIFireGun.java b/src/main/java/com/hbm/entity/mob/ai/EntityAIFireGun.java index 1ba8c4eb6..2e67882f6 100644 --- a/src/main/java/com/hbm/entity/mob/ai/EntityAIFireGun.java +++ b/src/main/java/com/hbm/entity/mob/ai/EntityAIFireGun.java @@ -15,13 +15,13 @@ public class EntityAIFireGun extends EntityAIBase { private final EntityLiving host; - private double attackMoveSpeed = 1.0D; // how fast we move while in this state - private double maxRange = 20; // how far our target can be before we stop shooting - private int burstTime = 10; // maximum number of ticks in a burst (for automatic weapons) - private int minWait = 10; // minimum number of ticks to wait between bursts/shots - private int maxWait = 40; // maximum number of ticks to wait between bursts/shots - private float inaccuracy = 30; // how many degrees of inaccuracy does the AI have - + public double attackMoveSpeed = 1.0D; // how fast we move while in this state + public double maxRange = 20; // how far our target can be before we stop shooting + public int burstTime = 10; // maximum number of ticks in a burst (for automatic weapons) + public int minWait = 10; // minimum number of ticks to wait between bursts/shots + public int maxWait = 40; // maximum number of ticks to wait between bursts/shots + public float inaccuracy = 30; // how many degrees of inaccuracy does the AI have + public boolean randomBurst = true; //whether the burst time should be fixed or random // state timers private int attackTimer = 0; private FireState state = FireState.IDLE; @@ -33,7 +33,7 @@ public class EntityAIFireGun extends EntityAIBase { FIRING, RELOADING, } - + public EntityAIFireGun(EntityLiving host) { this.host = host; } @@ -89,7 +89,8 @@ public class EntityAIFireGun extends EntityAIBase { if(rec.getMagazine(stack).getAmount(stack, null) <= 0) { updateState(FireState.RELOADING, 20, gun, stack); } else if(ItemGunBaseNT.getState(stack, 0) == GunState.IDLE) { - updateState(FireState.FIRING, host.worldObj.rand.nextInt(burstTime), gun, stack); + int time = randomBurst ? host.worldObj.rand.nextInt(burstTime) : burstTime; + updateState(FireState.FIRING, time, gun, stack); } } } @@ -114,8 +115,9 @@ public class EntityAIFireGun extends EntityAIBase { // Turn body to face firing direction, since the gun is attached to that, not the head // Also apply accuracy debuff just before firing if(bind != null && bind != EnumKeybind.RELOAD) { - host.rotationYawHead += (host.worldObj.rand.nextFloat() - 0.5F) * inaccuracy; - host.rotationPitch += (host.worldObj.rand.nextFloat() - 0.5F) * inaccuracy; + float inacc = inaccuracy * (getYerGun().getConfig(stack, 0).getReceivers(stack)[0].getHipfireSpread(stack) * 20); + host.rotationYawHead += (host.worldObj.rand.nextFloat() - 0.5F) * inacc; + host.rotationPitch += (host.worldObj.rand.nextFloat() - 0.5F) * inacc; host.rotationYaw = host.rotationYawHead; } @@ -132,5 +134,5 @@ public class EntityAIFireGun extends EntityAIBase { return (ItemGunBaseNT) stack.getItem(); } - + } diff --git a/src/main/java/com/hbm/itempool/ItemPoolsPile.java b/src/main/java/com/hbm/itempool/ItemPoolsPile.java index f3c7bfde5..8c303556c 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsPile.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsPile.java @@ -3,6 +3,7 @@ package com.hbm.itempool; import static com.hbm.lib.HbmChestContents.weighted; import com.hbm.inventory.material.Mats; +import com.hbm.items.ItemEnums; import com.hbm.items.ModItems; import com.hbm.items.weapon.grenade.ItemGrenadeExtra.EnumGrenadeExtra; import com.hbm.items.weapon.grenade.ItemGrenadeFilling.EnumGrenadeFilling; @@ -28,6 +29,7 @@ public class ItemPoolsPile { public static final String POOL_PILE_NUKE_STORAGE = "POOL_PILE_NUKE_STORAGE"; public static final String POOL_PILE_OF_GARBAGE = "POOL_PILE_OF_GARBAGE"; public static final String POOL_PILE_MECHANICAL = "POOL_PILE_MECHANICAL"; + public static final String POOL_PILE_GEAR = "POOL_PILE_GEAR"; public static void init() { @@ -146,15 +148,29 @@ public class ItemPoolsPile { new ItemPool(POOL_PILE_MECHANICAL) {{ this.pool = new WeightedRandomChestContent[] { - weighted(ModItems.defuser, 0, 1, 1, 5), + weighted(ModItems.defuser, 0, 1, 1, 30), weighted(ModItems.screwdriver, 0, 1, 1, 30), weighted(ModItems.wire_fine, Mats.MAT_COPPER.id, 8, 12, 120), weighted(ModItems.plate_steel, 0, 3, 8, 40), weighted(ModItems.plate_copper, 0, 2, 5, 40), weighted(ModItems.coil_copper, 0, 2, 5, 40), - weighted(ModItems.coil_tungsten, 0, 2, 5, 40), - weighted(ModItems.ammo_standard, EnumAmmo.NUKE_TOTS.ordinal(), 1, 1, 10), + weighted(ModItems.coil_tungsten, 0, 2, 5, 40) + }; + }}; + new ItemPool(POOL_PILE_GEAR) {{ + this.pool = new WeightedRandomChestContent[] { + weighted(ModItems.defuser, 0, 1, 1, 40), + weighted(ModItems.screwdriver, 0, 1, 1, 30), + weighted(ModItems.canteen_vodka,0, 1, 1, 40), + weighted(ModItems.casing, ItemEnums.EnumCasingType.SMALL_STEEL.ordinal(), 1, 4, 30), + weighted(ModItems.casing, ItemEnums.EnumCasingType.SMALL.ordinal(), 3, 8, 40), + weighted(ModItems.casing, ItemEnums.EnumCasingType.BUCKSHOT.ordinal(), 3, 8, 40), + weighted(ModItems.canned_conserve, 0, 2, 5, 40), + weighted(ModItems.taurun_helmet, 0, 1, 1, 20), + weighted(ModItems.taurun_plate, 0, 1, 1, 20), + weighted(ModItems.taurun_legs, 0, 1, 1, 20), + weighted(ModItems.taurun_boots, 0, 1, 1, 20) }; }}; } diff --git a/src/main/java/com/hbm/itempool/ItemPoolsSingle.java b/src/main/java/com/hbm/itempool/ItemPoolsSingle.java index 73623ef83..37338373e 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsSingle.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsSingle.java @@ -23,7 +23,8 @@ public class ItemPoolsSingle { public static final String POOL_VAULT_UNBREAKABLE = "POOL_VAULT_UNBREAKABLE"; public static final String POOL_METEORITE_TREASURE = "POOL_METEORITE_TREASURE"; public static final String POOL_BLUEPRINTS = "POOL_BLUEPRINTS"; - + + public static void init() { new ItemPool(POOL_VAULT_RUSTY) {{ @@ -43,7 +44,7 @@ public class ItemPoolsSingle { weighted(Items.diamond, 0, 1, 2, 1) }; }}; - + new ItemPool(POOL_VAULT_STANDARD) {{ this.pool = new WeightedRandomChestContent[] { weighted(ModItems.ingot_desh, 0, 2, 6, 1), @@ -59,7 +60,7 @@ public class ItemPoolsSingle { weighted(ModItems.circuit, EnumCircuitType.CHIP.ordinal(), 2, 6, 1) }; }}; - + new ItemPool(POOL_VAULT_REINFORCED) {{ this.pool = new WeightedRandomChestContent[] { weighted(ModItems.ingot_desh, 0, 6, 16, 1), @@ -76,7 +77,7 @@ public class ItemPoolsSingle { weighted(ModItems.circuit, EnumCircuitType.BASIC.ordinal(), 6, 12, 1) }; }}; - + new ItemPool(POOL_VAULT_UNBREAKABLE) {{ this.pool = new WeightedRandomChestContent[] { weighted(ModItems.ammo_container, 0, 3, 6, 1), @@ -87,7 +88,7 @@ public class ItemPoolsSingle { weighted(ModItems.circuit, EnumCircuitType.ADVANCED.ordinal(), 6, 12, 1) }; }}; - + new ItemPool(POOL_METEORITE_TREASURE) {{ this.pool = new WeightedRandomChestContent[] { weighted(ModItems.cobalt_pickaxe, 0, 1, 1, 10), @@ -111,7 +112,7 @@ public class ItemPoolsSingle { weighted(ModItems.blueprint_folder, 1, 1, 1, 1) }; }}; - + new ItemPool(POOL_BLUEPRINTS) {{ this.pool = new WeightedRandomChestContent[] { weighted(ModItems.blueprint_folder, 0, 1, 1, 10), @@ -119,5 +120,13 @@ public class ItemPoolsSingle { weighted(ModItems.blueprint_folder, 0, 1, 1, 1), }; }}; + + new ItemPool(POOL_BLUEPRINTS) {{ + this.pool = new WeightedRandomChestContent[] { + weighted(ModItems.blueprint_folder, 0, 1, 1, 10), + weighted(ModItems.blueprint_folder, 1, 1, 1, 5), + weighted(ModItems.blueprint_folder, 0, 1, 1, 1), + }; + }}; } } diff --git a/src/main/java/com/hbm/util/LootGenerator.java b/src/main/java/com/hbm/util/LootGenerator.java index 7e4ab2eb8..77bc6d2a0 100644 --- a/src/main/java/com/hbm/util/LootGenerator.java +++ b/src/main/java/com/hbm/util/LootGenerator.java @@ -31,6 +31,7 @@ public class LootGenerator { public static final String LOOT_FLAREGUN = "LOOT_FLAREGUN"; public static final String LOOT_SHIT = "LOOT_SHIT"; public static final String LOOT_MECHANICAL = "LOOT_MECHANICAL"; + public static final String LOOT_GEAR = "LOOT_GEAR"; public static void applyLoot(World world, int x, int y, int z, String name) { switch(name) { @@ -46,6 +47,7 @@ public class LootGenerator { case LOOT_FLAREGUN: lootFlareGun(world, x, y, z); case LOOT_SHIT: lootShit(world, x, y, z); case LOOT_MECHANICAL: lootMechanical(world, x, y, z); + case LOOT_GEAR: lootMechanical(world, x, y, z); default: lootBones(world, x, y, z); break; } } @@ -63,6 +65,8 @@ public class LootGenerator { LOOT_METEOR, LOOT_FLAREGUN, LOOT_MECHANICAL, + LOOT_GEAR, + LOOT_SHIT, }; } @@ -257,10 +261,23 @@ public class LootGenerator { if(loot != null && loot.items.isEmpty()) { - int limit = world.rand.nextInt(3) + 1; + int limit = world.rand.nextInt(6) + 1; for(int i = 0; i < limit; i++) { addItemWithDeviation(loot, world.rand, ItemPool.getStack(ItemPool.getPool(ItemPoolsPile.POOL_PILE_MECHANICAL), world.rand), world.rand.nextDouble() - 0.5, i * 0.03125, world.rand.nextDouble() - 0.5); } } } + + public static void lootGear(World world, int x, int y, int z) { + + TileEntityLoot loot = (TileEntityLoot) world.getTileEntity(x, y, z); + + if(loot != null && loot.items.isEmpty()) { + + int limit = world.rand.nextInt(6) + 1; + for(int i = 0; i < limit; i++) { + addItemWithDeviation(loot, world.rand, ItemPool.getStack(ItemPool.getPool(ItemPoolsPile.POOL_PILE_GEAR), world.rand), world.rand.nextDouble() - 0.5, i * 0.03125, world.rand.nextDouble() - 0.5); + } + } + } } diff --git a/src/main/java/com/hbm/util/MobUtil.java b/src/main/java/com/hbm/util/MobUtil.java index 2fd154891..803619357 100644 --- a/src/main/java/com/hbm/util/MobUtil.java +++ b/src/main/java/com/hbm/util/MobUtil.java @@ -59,21 +59,21 @@ public class MobUtil { {ModItems.wrench, 20} })); - slotPoolRanged.put(4, createSlotPool(12000, new Object[][]{ + slotPoolRanged.put(4, createSlotPool(0, new Object[][]{ {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8}, {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, {ModItems.rag_piss, 1}, {ModItems.goggles, 1}, {ModItems.alloy_helmet, 2}, {ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8} })); - slotPoolRanged.put(3, createSlotPool(10000, new Object[][]{ + slotPoolRanged.put(3, createSlotPool(10, new Object[][]{ {ModItems.starmetal_plate, 1}, {ModItems.cobalt_plate, 2}, {ModItems.alloy_plate, 2}, //sadly they cant wear jackets bc it breaks it {ModItems.steel_plate, 8}, {ModItems.titanium_plate, 4} })); - slotPoolRanged.put(2, createSlotPool(10000, new Object[][]{ + slotPoolRanged.put(2, createSlotPool(10, new Object[][]{ {ModItems.zirconium_legs, 1}, {ModItems.cobalt_legs, 2}, {ModItems.steel_legs, 16}, {ModItems.titanium_legs, 8}, {ModItems.robes_legs, 32}, {ModItems.alloy_legs, 2}, })); - slotPoolRanged.put(1, createSlotPool(10000, new Object[][]{ + slotPoolRanged.put(1, createSlotPool(10, new Object[][]{ {ModItems.robes_boots, 32}, {ModItems.steel_boots, 16}, {ModItems.cobalt_boots, 2}, {ModItems.alloy_boots, 2}, {ModItems.titanium_boots, 6} })); @@ -121,68 +121,15 @@ public class MobUtil { //For action block slotPoolGunsTier1.put(0, createSlotPool(0, new Object[][]{ - {ModItems.gun_light_revolver, 16}, {ModItems.gun_greasegun, 8}, {ModItems.gun_maresleg, 2} + {ModItems.gun_light_revolver, 16}, {ModItems.gun_greasegun, 8}, {ModItems.gun_maresleg, 2}, {ModItems.gun_flaregun, 1} })); slotPoolGunsTier2.put(0, createSlotPool(0, new Object[][]{ - {ModItems.gun_uzi, 10}, {ModItems.gun_maresleg, 8}, {ModItems.gun_henry, 12}, {ModItems.gun_heavy_revolver, 4}, {ModItems.gun_flaregun, 4}, {ModItems.gun_carbine, 4} + {ModItems.gun_uzi, 12}, {ModItems.gun_maresleg, 8}, {ModItems.gun_henry, 12}, {ModItems.gun_heavy_revolver, 8}, {ModItems.gun_flaregun, 4}, {ModItems.gun_star_f, 8} })); slotPoolGunsTier3.put(0, createSlotPool(0, new Object[][]{ - {ModItems.gun_uzi, 25}, {ModItems.gun_spas12, 20}, {ModItems.gun_carbine, 20}, {ModItems.gun_g3, 10}, {ModItems.gun_am180, 5}, {ModItems.gun_stg77, 5} - })); - - slotPoolMasks.put(4, createSlotPool(0, new Object[][]{ - {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, - {ModItems.rag_piss, 4}, {ModItems.goggles, 12} - })); - - slotPoolHelms.put(4, createSlotPool(0, new Object[][]{ - {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8}, - {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, - {ModItems.cobalt_helmet, 2}, {ModItems.hat, 1}, {ModItems.alloy_helmet, 2}, - {ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8} - })); - - slotPoolTierArmor.put(4, createSlotPool(new Object[][]{ - {ModItems.gas_mask_m65, 20}, - {ModItems.gas_mask_olde, 15}, - {ModItems.steel_helmet, 25}, - {ModItems.titanium_helmet, 15}, - {ModItems.alloy_helmet, 10}, - })); - - slotPoolTierArmor.put(3, createSlotPool(new Object[][]{ - {ModItems.steel_plate, 30}, - {ModItems.titanium_plate, 20}, - {ModItems.alloy_plate, 15}, - {ModItems.cobalt_plate, 5}, - {ModItems.starmetal_plate, 5} - })); - - slotPoolTierArmor.put(2, createSlotPool(new Object[][]{ - {ModItems.steel_legs, 30}, - {ModItems.titanium_legs, 20}, - {ModItems.alloy_legs, 15}, - {ModItems.cobalt_legs, 5}, - {ModItems.zirconium_legs, 5} - })); - - slotPoolTierArmor.put(1, createSlotPool(new Object[][]{ - {ModItems.steel_boots, 30}, - {ModItems.robes_boots, 25}, - {ModItems.titanium_boots, 20}, - {ModItems.alloy_boots, 15}, - {ModItems.hazmat_boots, 10}, - {ModItems.cobalt_boots, 5}, - })); - - slotPoolMelee.put(0, createSlotPool(2000, new Object[][]{ - {ModItems.pipe_lead, 40}, {ModItems.crowbar, 35}, {ModItems.wrench, 30}, - {ModItems.steel_sword, 25}, {ModItems.titanium_sword, 20}, - {ModItems.reer_graar, 20}, {ModItems.stopsign, 15}, - {ModItems.lead_gavel, 12}, {ModItems.wrench_flipped, 10}, - {ModItems.sopsign, 8}, {ModItems.chernobylsign, 8} + {ModItems.gun_g3, 25}, {ModItems.gun_spas12, 20}, {ModItems.gun_carbine, 15}, {ModItems.gun_star_f, 20}, {ModItems.gun_am180, 6}, {ModItems.gun_amat, 5} })); slotPoolAdvRanged = new HashMap<>(slotPoolAdv); @@ -268,4 +215,15 @@ public class MobUtil { entity.tasks.addTask(3, new EntityAIFireGun(entity)); } + + public static void addFireTask(EntityLiving entity, EntityAIFireGun gunTask) { + entity.setEquipmentDropChance(0, 0); // Prevent dropping guns + + for(Object entry : entity.tasks.taskEntries) { + EntityAITasks.EntityAITaskEntry task = (EntityAITasks.EntityAITaskEntry) entry; + if(task.action instanceof EntityAIFireGun) return; + } + + entity.tasks.addTask(3, gunTask); + } } diff --git a/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java index 2e24dbb58..2a9db50d0 100644 --- a/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java @@ -2,11 +2,13 @@ package com.hbm.world.gen.util; import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.bomb.BlockChargeBase; import com.hbm.blocks.generic.BlockSkeletonHolder; import com.hbm.blocks.generic.LogicBlock; import com.hbm.entity.item.EntityFallingBlockNT; import com.hbm.entity.missile.EntityMissileTier2; import com.hbm.entity.mob.EntityUndeadSoldier; +import com.hbm.entity.mob.ai.EntityAIFireGun; import com.hbm.items.ItemEnums; import com.hbm.items.ModItems; import com.hbm.tileentity.TileEntityDoorGeneric; @@ -200,8 +202,7 @@ public class LogicBlockActions { EntitySkeleton mob = new EntitySkeleton(world); mob.setPositionAndRotation(x, y, z, 0, 0); MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolGunsTier2, new Random()); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMasks, new Random()); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolTierArmor, new Random()); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolRanged, new Random()); world.spawnEntityInWorld(mob); world.setBlock(x, y, z, Blocks.air); } @@ -217,8 +218,14 @@ public class LogicBlockActions { for (int i = 0; i < 3; i++) { EntitySkeleton mob = new EntitySkeleton(world); mob.setPositionAndRotation(x, y, z, 0, 0); + EntityAIFireGun gunTask = new EntityAIFireGun(mob); + gunTask.minWait = 4; + gunTask.maxWait = 5; + gunTask.burstTime = 6; + gunTask.inaccuracy = 5F; + gunTask.randomBurst = false; + MobUtil.addFireTask(mob, gunTask); MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolGunsTier3, new Random()); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMasks, new Random()); MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolAdvRanged, new Random()); world.spawnEntityInWorld(mob); world.setBlock(x, y, z, Blocks.air); @@ -235,8 +242,7 @@ public class LogicBlockActions { for (int i = 0; i < 3; i++) { EntityZombie mob = new EntityZombie(world); mob.setPositionAndRotation(x, y, z, 0, 0); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMelee, new Random()); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolTierArmor, new Random()); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolCommon, new Random()); world.spawnEntityInWorld(mob); world.setBlock(x, y, z, Blocks.air); } @@ -252,8 +258,7 @@ public class LogicBlockActions { for (int i = 0; i < 3; i++) { EntityZombie mob = new EntityZombie(world); mob.setPositionAndRotation(x, y, z, 0, 0); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolTierArmor, new Random()); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMelee, new Random()); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolAdv, new Random()); world.spawnEntityInWorld(mob); world.setBlock(x, y, z, Blocks.air); } @@ -425,23 +430,47 @@ public class LogicBlockActions { int y = tile.yCoord; int z = tile.zCoord; - ForgeDirection direction = tile.direction.getOpposite(); + if(tile.phase == 0) { + world.setBlock(x, y + 1, z, ModBlocks.charge_c4, ForgeDirection.UP.ordinal(), 3); - if(tile.phase == 1){ - world.setBlock(x,y,z + direction.offsetZ, ModBlocks.charge_c4, 2, 3); - - TileEntity te = world.getTileEntity(x,y,z + direction.offsetZ); - if(te instanceof TileEntityCharge){ + TileEntity te = world.getTileEntity(x, y + 1, z); + if (te instanceof TileEntityCharge) { + TileEntityCharge bomb = (TileEntityCharge) te; + bomb.timer = 200; + } + } + + if(tile.phase >= 1) { + TileEntity te = world.getTileEntity(x, y + 1, z); + if (te instanceof TileEntityCharge) { TileEntityCharge bomb = (TileEntityCharge) te; - bomb.timer = 2400; bomb.started = true; } + } - world.setBlock(x,y,z, ModBlocks.crate_steel); - TileEntityCrateBase crate = (TileEntityCrateBase) world.getTileEntity(x,y,z); - crate.setPins(world.rand.nextInt(999)); - crate.lock(); - ((IInventory)crate).setInventorySlotContents(15, new ItemStack(ModItems.launch_key)); + + }; + + public static Consumer DEAD_GUY_CRANE = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + if(tile.phase == 1) { + world.setBlock(x, y, z, ModBlocks.skeleton_holder); + TileEntity te = world.getTileEntity(x, y, z); + EntityPlayer player = (EntityPlayer) world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(25, 25, 25)).get(0); + + if (te instanceof BlockSkeletonHolder.TileEntitySkeletonHolder) { + BlockSkeletonHolder.TileEntitySkeletonHolder skeleton = (BlockSkeletonHolder.TileEntitySkeletonHolder) te; + if (player != null && player.inventory.hasItem(ModItems.gun_hangman)) { + skeleton.item = new ItemStack(ModItems.clay_tablet, 1, 0); + } else { + skeleton.item = new ItemStack(ModItems.gun_hangman); + } + skeleton.markDirty(); + world.markBlockForUpdate(x, y, z); + } } }; @@ -463,6 +492,7 @@ public class LogicBlockActions { actions.put("COLLAPSE_ROOF_RAD_10", COLLAPSE_ROOF_RAD_10); actions.put("BOMB_TRAP", BOMB_TRAP); actions.put("BOMB_CRANE", BOMB_CRANE); + actions.put("DEAD_GUY_CRANE", DEAD_GUY_CRANE); //Mob Block Actions actions.put("SKELETON_GUN_TIER_1", SKELETONS_GUN_TIER_1); diff --git a/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java index 0e1de662f..75f7cbd5c 100644 --- a/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java @@ -5,6 +5,7 @@ import com.hbm.blocks.generic.BlockPedestal; import com.hbm.blocks.generic.LogicBlock; import com.hbm.entity.mob.EntityUndeadSoldier; import com.hbm.items.ModItems; +import com.hbm.tileentity.bomb.TileEntityCharge; import com.hbm.tileentity.machine.TileEntityLockableBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; @@ -12,6 +13,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; import java.util.ArrayList; import java.util.LinkedHashMap; @@ -97,6 +99,27 @@ public class LogicBlockConditions { && ((BlockPedestal.TileEntityPedestal) pedestal).item.getItem() == ModItems.big_sword; }; + public static Function BOMB_CRANE = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + if(tile.phase == 0) { + world.setBlock(x, y + 1, z, ModBlocks.charge_c4, ForgeDirection.UP.ordinal(), 3); + + TileEntity te = world.getTileEntity(x, y + 1, z); + if (te instanceof TileEntityCharge) { + TileEntityCharge bomb = (TileEntityCharge) te; + bomb.timer = 200; + } + } + + return !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(10, 10, 10)).isEmpty(); + }; + + + public static List getConditionNames(){ return new ArrayList<>(conditions.keySet()); @@ -115,6 +138,8 @@ public class LogicBlockConditions { conditions.put("PLAYER_CUBE_5", PLAYER_CUBE_5); conditions.put("PLAYER_CUBE_25", PLAYER_CUBE_25); + conditions.put("BOMB_CRANE", BOMB_CRANE); + //example conditions conditions.put("ABERRATOR", ABERRATOR); conditions.put("REDSTONE", REDSTONE); diff --git a/src/main/resources/assets/hbm/structures/crane_mod.nbt b/src/main/resources/assets/hbm/structures/crane_mod.nbt new file mode 100644 index 0000000000000000000000000000000000000000..7a13e830d6a23aeb89072e798d9848bc74773ba3 GIT binary patch literal 14682 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 R7)k8O%`$G0a+Y~{{vY2fu@3+M literal 0 HcmV?d00001 From 06e5e7eaa267d0123f5142e2cddea92bb082cc18 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Wed, 25 Mar 2026 14:13:31 -0300 Subject: [PATCH 03/10] crane is done? maybe --- .../com/hbm/blocks/generic/LogicBlock.java | 5 ++ .../java/com/hbm/main/ModEventHandler.java | 10 +-- .../java/com/hbm/main/StructureManager.java | 2 +- src/main/java/com/hbm/util/MobUtil.java | 69 ++++++++++++++++-- .../hbm/world/gen/util/LogicBlockActions.java | 15 +++- .../assets/hbm/structures/crane_mod.nbt | Bin 14682 -> 14651 bytes 6 files changed, 84 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/hbm/blocks/generic/LogicBlock.java b/src/main/java/com/hbm/blocks/generic/LogicBlock.java index 5487f4263..e78a85355 100644 --- a/src/main/java/com/hbm/blocks/generic/LogicBlock.java +++ b/src/main/java/com/hbm/blocks/generic/LogicBlock.java @@ -56,6 +56,11 @@ public class LogicBlock extends BlockContainer { return this != ModBlocks.logic_block_invis; } + @Override + public int getRenderType() { + return this == ModBlocks.logic_block_invis ? -1 : 0; + } + @Override public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer player, int side, float subX, float subY, float subZ) { TileEntity te = worldIn.getTileEntity(x, y, z); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 2284c4c70..931502cde 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -398,10 +398,10 @@ public class ModEventHandler { MobUtil.equipFullSet(entity, ModItems.hazmat_helmet, ModItems.hazmat_plate, ModItems.hazmat_legs, ModItems.hazmat_boots); return; } - slotPools = MobUtil.slotPoolCommon; + slotPools = MobUtil.slotPoolCommonS; } else if(entity instanceof EntitySkeleton) { - slotPools = MobUtil.slotPoolRanged; + slotPools = MobUtil.slotPoolRangedS; ItemStack bowReplacement = getSkelegun(soot, world.rand); slotPools.put(0, createSlotPool(50, bowReplacement != null ? new Object[][]{{bowReplacement, 1}} : new Object[][]{})); } @@ -506,7 +506,7 @@ public class ModEventHandler { @SubscribeEvent public void onLivingUpdate(LivingUpdateEvent event) { - + if(event.entityLiving instanceof EntityCreeper && event.entityLiving.getEntityData().getBoolean("hfr_defused")) { ItemModDefuser.defuse((EntityCreeper) event.entityLiving, null, false); } @@ -516,7 +516,7 @@ public class ModEventHandler { if(event.entityLiving instanceof EntityPlayerMP && prevArmor != null && event.entityLiving.getHeldItem() != null && (prevArmor[0] == null || prevArmor[0].getItem() != event.entityLiving.getHeldItem().getItem()) && event.entityLiving.getHeldItem().getItem() instanceof IEquipReceiver) { - + ((IEquipReceiver)event.entityLiving.getHeldItem().getItem()).onEquip((EntityPlayer) event.entityLiving, event.entityLiving.getHeldItem()); } @@ -1193,7 +1193,7 @@ public class ModEventHandler { int y = event.y; int z = event.z; World world = event.world; - + if(GeneralConfig.enable528ExplosiveEnergistics && !world.isRemote && event.action == Action.RIGHT_CLICK_BLOCK) { Block b = world.getBlock(x, y, z); String name = Block.blockRegistry.getNameForObject(b); diff --git a/src/main/java/com/hbm/main/StructureManager.java b/src/main/java/com/hbm/main/StructureManager.java index 639f9a402..1fa86803a 100644 --- a/src/main/java/com/hbm/main/StructureManager.java +++ b/src/main/java/com/hbm/main/StructureManager.java @@ -84,7 +84,7 @@ public class StructureManager { public static final NBTStructure plane2 = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/crashed_plane_2.nbt")); public static final NBTStructure factory = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/factory.nbt")); - public static final NBTStructure crane = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/crane.nbt")); + public static final NBTStructure crane = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/crane_mod.nbt")); public static final NBTStructure broadcasting_tower = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/broadcasting_tower.nbt")); public static final NBTStructure excavator = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/excavator.nbt")); diff --git a/src/main/java/com/hbm/util/MobUtil.java b/src/main/java/com/hbm/util/MobUtil.java index 803619357..f16795a0f 100644 --- a/src/main/java/com/hbm/util/MobUtil.java +++ b/src/main/java/com/hbm/util/MobUtil.java @@ -14,7 +14,11 @@ import java.util.*; public class MobUtil { + //for soot mobs + public static Map> slotPoolCommonS = new HashMap<>(); + public static Map> slotPoolRangedS = new HashMap<>(); + //for gob block public static Map> slotPoolCommon = new HashMap<>(); public static Map> slotPoolRanged = new HashMap<>(); @@ -33,25 +37,73 @@ public class MobUtil { public static Map> slotPoolMelee = new HashMap<>(); public static void intializeMobPools(){ - slotPoolCommon.put(4, createSlotPool(8000, new Object[][]{ //new slots, smooth, brushed, no wrinkles // old slots, wrinkled, rusty, not smooth + //soot mobs + slotPoolCommonS.put(4, createSlotPool(8000, new Object[][]{ //new slots, smooth, brushed, no wrinkles // old slots, wrinkled, rusty, not smooth {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8}, {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, {ModItems.cobalt_helmet, 2}, {ModItems.rag_piss, 1}, {ModItems.hat, 1}, {ModItems.alloy_helmet, 2}, {ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8} })); - slotPoolCommon.put(3, createSlotPool(7000, new Object[][]{ + slotPoolCommonS.put(3, createSlotPool(7000, new Object[][]{ {ModItems.starmetal_plate, 1}, {ModItems.cobalt_plate, 2}, {ModItems.robes_plate, 32}, {ModItems.jackt, 32}, {ModItems.jackt2, 32}, {ModItems.alloy_plate, 2}, {ModItems.steel_plate, 2} })); - slotPoolCommon.put(2, createSlotPool(7000, new Object[][]{ + slotPoolCommonS.put(2, createSlotPool(7000, new Object[][]{ {ModItems.zirconium_legs, 1}, {ModItems.cobalt_legs, 2}, {ModItems.steel_legs, 16}, {ModItems.titanium_legs, 8}, {ModItems.robes_legs, 32}, {ModItems.alloy_legs, 2} })); - slotPoolCommon.put(1, createSlotPool(7000, new Object[][]{ + slotPoolCommonS.put(1, createSlotPool(7000, new Object[][]{ {ModItems.robes_boots, 32}, {ModItems.steel_boots, 16}, {ModItems.cobalt_boots, 2}, {ModItems.alloy_boots, 2} })); - slotPoolCommon.put(0, createSlotPool(10000, new Object[][]{ + slotPoolCommonS.put(0, createSlotPool(10000, new Object[][]{ + {ModItems.pipe_lead, 30}, {ModItems.crowbar, 25}, {ModItems.geiger_counter, 20}, + {ModItems.reer_graar, 16}, {ModItems.steel_pickaxe, 12}, {ModItems.stopsign, 10}, + {ModItems.sopsign, 8}, {ModItems.chernobylsign, 6}, {ModItems.steel_sword, 15}, + {ModItems.titanium_sword, 8}, {ModItems.lead_gavel, 4}, {ModItems.wrench_flipped, 2}, + {ModItems.wrench, 20} + })); + + slotPoolRangedS.put(4, createSlotPool(8000, new Object[][]{ + {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8}, + {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, + {ModItems.rag_piss, 1}, {ModItems.goggles, 1}, {ModItems.alloy_helmet, 2}, + {ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8} + })); + slotPoolRangedS.put(3, createSlotPool(7000, new Object[][]{ + {ModItems.starmetal_plate, 1}, {ModItems.cobalt_plate, 2}, {ModItems.alloy_plate, 2}, //sadly they cant wear jackets bc it breaks it + {ModItems.steel_plate, 8}, {ModItems.titanium_plate, 4} + })); + slotPoolRangedS.put(2, createSlotPool(7000, new Object[][]{ + {ModItems.zirconium_legs, 1}, {ModItems.cobalt_legs, 2}, {ModItems.steel_legs, 16}, + {ModItems.titanium_legs, 8}, {ModItems.robes_legs, 32}, {ModItems.alloy_legs, 2}, + })); + slotPoolRangedS.put(1, createSlotPool(10000, new Object[][]{ + {ModItems.robes_boots, 32}, {ModItems.steel_boots, 16}, {ModItems.cobalt_boots, 2}, {ModItems.alloy_boots, 2}, + {ModItems.titanium_boots, 6} + })); + + //gob block + //soot mobs + slotPoolCommon.put(4, createSlotPool(0, new Object[][]{ //new slots, smooth, brushed, no wrinkles // old slots, wrinkled, rusty, not smooth + {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8}, + {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, + {ModItems.cobalt_helmet, 2}, {ModItems.rag_piss, 1}, {ModItems.hat, 1}, {ModItems.alloy_helmet, 2}, + {ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8} + })); + slotPoolCommon.put(3, createSlotPool(10, new Object[][]{ + {ModItems.starmetal_plate, 1}, {ModItems.cobalt_plate, 2}, {ModItems.robes_plate, 32}, + {ModItems.jackt, 32}, {ModItems.jackt2, 32}, {ModItems.alloy_plate, 2}, + {ModItems.steel_plate, 2} + })); + slotPoolCommon.put(2, createSlotPool(20, new Object[][]{ + {ModItems.zirconium_legs, 1}, {ModItems.cobalt_legs, 2}, {ModItems.steel_legs, 16}, + {ModItems.titanium_legs, 8}, {ModItems.robes_legs, 32}, {ModItems.alloy_legs, 2} + })); + slotPoolCommon.put(1, createSlotPool(10, new Object[][]{ + {ModItems.robes_boots, 32}, {ModItems.steel_boots, 16}, {ModItems.cobalt_boots, 2}, {ModItems.alloy_boots, 2} + })); + slotPoolCommon.put(0, createSlotPool(1000, new Object[][]{ {ModItems.pipe_lead, 30}, {ModItems.crowbar, 25}, {ModItems.geiger_counter, 20}, {ModItems.reer_graar, 16}, {ModItems.steel_pickaxe, 12}, {ModItems.stopsign, 10}, {ModItems.sopsign, 8}, {ModItems.chernobylsign, 6}, {ModItems.steel_sword, 15}, @@ -78,6 +130,7 @@ public class MobUtil { {ModItems.titanium_boots, 6} })); + //soot guns slotPoolGuns.put(0.3, createSlotPool(new Object[][]{ {ModItems.gun_light_revolver, 16}, {ModItems.gun_greasegun, 8}, {ModItems.gun_maresleg, 2} })); @@ -111,9 +164,9 @@ public class MobUtil { {ModItems.t51_boots, 4}, {ModItems.hazmat_boots, 6}, {ModItems.robes_boots, 8} })); - slotPoolAdv.put(0, createSlotPool(new Object[][]{ - {ModItems.pipe_lead, 20}, {ModItems.crowbar, 30}, {ModItems.geiger_counter, 20}, - {ModItems.reer_graar, 20}, {ModItems.wrench_flipped, 12}, {ModItems.stopsign, 16}, + slotPoolAdv.put(0, createSlotPool(500,new Object[][]{ + {ModItems.pipe_lead, 20}, {ModItems.crowbar, 10}, {ModItems.geiger_counter, 10}, + {ModItems.reer_graar, 20}, {ModItems.wrench_flipped, 20}, {ModItems.stopsign, 16}, {ModItems.sopsign, 4}, {ModItems.chernobylsign, 16}, {ModItems.titanium_sword, 18}, {ModItems.lead_gavel, 8}, {ModItems.wrench, 20} diff --git a/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java index 2a9db50d0..0aebf583b 100644 --- a/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java @@ -2,7 +2,6 @@ package com.hbm.world.gen.util; import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; -import com.hbm.blocks.bomb.BlockChargeBase; import com.hbm.blocks.generic.BlockSkeletonHolder; import com.hbm.blocks.generic.LogicBlock; import com.hbm.entity.item.EntityFallingBlockNT; @@ -201,6 +200,14 @@ public class LogicBlockActions { for (int i = 0; i < 3; i++) { EntitySkeleton mob = new EntitySkeleton(world); mob.setPositionAndRotation(x, y, z, 0, 0); + EntityAIFireGun gunTask = new EntityAIFireGun(mob); + gunTask.minWait = 4; + gunTask.maxWait = 5; + gunTask.maxRange = 50; + gunTask.burstTime = 6; + gunTask.inaccuracy = 5F; + gunTask.randomBurst = false; + MobUtil.addFireTask(mob, gunTask); MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolGunsTier2, new Random()); MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolRanged, new Random()); world.spawnEntityInWorld(mob); @@ -221,8 +228,9 @@ public class LogicBlockActions { EntityAIFireGun gunTask = new EntityAIFireGun(mob); gunTask.minWait = 4; gunTask.maxWait = 5; + gunTask.maxRange = 100; gunTask.burstTime = 6; - gunTask.inaccuracy = 5F; + gunTask.inaccuracy = 1F; gunTask.randomBurst = false; MobUtil.addFireTask(mob, gunTask); MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolGunsTier3, new Random()); @@ -436,7 +444,7 @@ public class LogicBlockActions { TileEntity te = world.getTileEntity(x, y + 1, z); if (te instanceof TileEntityCharge) { TileEntityCharge bomb = (TileEntityCharge) te; - bomb.timer = 200; + bomb.timer = 1200; } } @@ -446,6 +454,7 @@ public class LogicBlockActions { TileEntityCharge bomb = (TileEntityCharge) te; bomb.started = true; } + world.setBlock(x, y, z, ModBlocks.block_steel); } diff --git a/src/main/resources/assets/hbm/structures/crane_mod.nbt b/src/main/resources/assets/hbm/structures/crane_mod.nbt index 7a13e830d6a23aeb89072e798d9848bc74773ba3..fe86cd9b065a4172d64ba488825a1e7bfafb457c 100644 GIT binary patch literal 14651 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 literal 14682 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 R7)k8O%`$G0a+Y~{{vY2fu@3+M From 660a4beacc24b0c2a7533b002d35fd5f78903499 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Sun, 19 Apr 2026 19:27:55 -0400 Subject: [PATCH 04/10] augh --- src/main/java/com/hbm/blocks/ModBlocks.java | 2 +- .../hbm/blocks/generic/BlockWandLogic.java | 44 +++++++++---------- .../com/hbm/blocks/generic/LogicBlock.java | 19 +++++--- .../hbm/blocks/generic/LogicBlockInvis.java | 21 +++++++++ .../hbm/world/gen/util/LogicBlockActions.java | 14 +++--- .../gen/util/LogicBlockInteractions.java | 18 +++++--- 6 files changed, 80 insertions(+), 38 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/generic/LogicBlockInvis.java diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 0f405629f..5c95e0e40 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -2359,7 +2359,7 @@ public class ModBlocks { wand_structure = new BlockWandStructure().setBlockName("wand_structure"); logic_block = new LogicBlock().setBlockName("logic_block").setBlockTextureName(RefStrings.MODID + ":logic_block"); - logic_block_invis = new LogicBlock().setBlockName("logic_block_invis").setBlockTextureName(RefStrings.MODID + ":logic_block"); + logic_block_invis = new LogicBlockInvis().setBlockName("logic_block_invis").setBlockTextureName(RefStrings.MODID + ":logic_block"); } diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java b/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java index 05e8737af..de444be2b 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java @@ -220,9 +220,7 @@ public class BlockWandLogic extends BlockContainer implements ILookOverlay, IToo public int placedRotation; Block disguise; - int disguiseMeta = -1; - - boolean invisible = false; + int disguiseMeta = 0; public String actionID = "FODDER_WAVE"; public String conditionID = "PLAYER_CUBE_5"; @@ -241,29 +239,31 @@ public class BlockWandLogic extends BlockContainer implements ILookOverlay, IToo } private void replace() { - if (!(worldObj.getBlock(xCoord, yCoord, zCoord) instanceof BlockWandLogic)) { - MainRegistry.logger.warn("Somehow the block at: " + xCoord + ", " + yCoord + ", " + zCoord + " isn't a logic block but we're doing a TE update as if it is, cancelling!"); - return; - } + if(!worldObj.isRemote) { + if (!(worldObj.getBlock(xCoord, yCoord, zCoord) instanceof BlockWandLogic)) { + MainRegistry.logger.warn("Somehow the block at: " + xCoord + ", " + yCoord + ", " + zCoord + " isn't a logic block but we're doing a TE update as if it is, cancelling!"); + return; + } - worldObj.setBlock(xCoord,yCoord,zCoord, disguise == null ? ModBlocks.logic_block_invis : ModBlocks.logic_block); + worldObj.setBlock(xCoord, yCoord, zCoord, disguise == null ? ModBlocks.logic_block_invis : ModBlocks.logic_block, 0, 3); - TileEntity te = worldObj.getTileEntity(xCoord, yCoord, zCoord); + TileEntity te = worldObj.getTileEntity(xCoord, yCoord, zCoord); - if(te == null || te instanceof BlockWandLoot.TileEntityWandLoot) { - MainRegistry.logger.warn("TE for logic block set incorrectly at: " + xCoord + ", " + yCoord + ", " + zCoord + ". If you're using some sort of world generation mod, report it to the author!"); - te = ModBlocks.wand_logic.createTileEntity(worldObj, 0); - worldObj.setTileEntity(xCoord, yCoord, zCoord, te); - } + if (te == null || te instanceof BlockWandLoot.TileEntityWandLoot) { + MainRegistry.logger.warn("TE for logic block set incorrectly at: " + xCoord + ", " + yCoord + ", " + zCoord + ". If you're using some sort of world generation mod, report it to the author!"); + te = ModBlocks.wand_logic.createTileEntity(worldObj, 0); + worldObj.setTileEntity(xCoord, yCoord, zCoord, te); + } - if(te instanceof LogicBlock.TileEntityLogicBlock){ - LogicBlock.TileEntityLogicBlock logic = (LogicBlock.TileEntityLogicBlock) te; - logic.actionID = actionID; - logic.conditionID = conditionID; - logic.interactionID = interactionID; - logic.direction = ForgeDirection.getOrientation(placedRotation); - logic.disguise = disguise; - logic.disguiseMeta = disguiseMeta; + if (te instanceof LogicBlock.TileEntityLogicBlock) { + LogicBlock.TileEntityLogicBlock logic = (LogicBlock.TileEntityLogicBlock) te; + logic.actionID = actionID; + logic.conditionID = conditionID; + logic.interactionID = interactionID; + logic.direction = ForgeDirection.getOrientation(placedRotation); + logic.disguise = disguise; + logic.disguiseMeta = disguiseMeta; + } } } diff --git a/src/main/java/com/hbm/blocks/generic/LogicBlock.java b/src/main/java/com/hbm/blocks/generic/LogicBlock.java index e78a85355..b5f1577b9 100644 --- a/src/main/java/com/hbm/blocks/generic/LogicBlock.java +++ b/src/main/java/com/hbm/blocks/generic/LogicBlock.java @@ -1,5 +1,6 @@ package com.hbm.blocks.generic; +import com.hbm.blocks.IBlockSideRotation; import com.hbm.blocks.ModBlocks; import com.hbm.world.gen.util.LogicBlockActions; import com.hbm.world.gen.util.LogicBlockConditions; @@ -51,15 +52,14 @@ public class LogicBlock extends BlockContainer { return super.getIcon(world, x, y, z, side); } + /* @Override public boolean isOpaqueCube() { return this != ModBlocks.logic_block_invis; - } + this == ModBlocks.logic_block_invis ? -1 : + }*/ + - @Override - public int getRenderType() { - return this == ModBlocks.logic_block_invis ? -1 : 0; - } @Override public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer player, int side, float subX, float subY, float subZ) { @@ -95,6 +95,9 @@ public class LogicBlock extends BlockContainer { public EntityPlayer player; public ForgeDirection direction = ForgeDirection.UNKNOWN; + + boolean disguised = false; + @Override public void updateEntity() { @@ -121,8 +124,14 @@ public class LogicBlock extends BlockContainer { timer++; } } + if(!disguised){ + markDirty(); + worldObj.markBlockForUpdate(xCoord,yCoord,zCoord); + disguised = true; + } } + @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); diff --git a/src/main/java/com/hbm/blocks/generic/LogicBlockInvis.java b/src/main/java/com/hbm/blocks/generic/LogicBlockInvis.java new file mode 100644 index 000000000..fb58b0baf --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/LogicBlockInvis.java @@ -0,0 +1,21 @@ +package com.hbm.blocks.generic; + +import com.hbm.blocks.IBlockSideRotation; +import net.minecraft.block.material.Material; + +public class LogicBlockInvis extends LogicBlock{ + + public LogicBlockInvis() { + super(); + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public int getRenderType() { + return -1; + } +} diff --git a/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java index 0aebf583b..cbbf17142 100644 --- a/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java @@ -393,8 +393,6 @@ public class LogicBlockActions { int y = tile.yCoord; int z = tile.zCoord; - ForgeDirection parallel = tile.direction.getRotation(ForgeDirection.UP); - if(tile.phase == 0 && !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(3, 3, 3)).isEmpty()){ world.getClosestPlayer(x,y,z, 300).addChatMessage(new ChatComponentText( EnumChatFormatting.LIGHT_PURPLE + "[POWER LOCK]" + @@ -402,11 +400,17 @@ public class LogicBlockActions { tile.phase++; TileEntityLockableBase safe = null; - if(world.getTileEntity(x - parallel.offsetX,y,z) instanceof TileEntityLockableBase) - safe = (TileEntityLockableBase) world.getTileEntity(x,y,z - parallel.offsetX); - if(safe != null){ + + for (int i1 = 0; i1 < 6; ++i1) { + if (world.getTileEntity(x + Facing.offsetsXForSide[i1], y + Facing.offsetsYForSide[i1], z + Facing.offsetsZForSide[i1]) instanceof TileEntityLockableBase) { + safe = (TileEntityLockableBase) world.getTileEntity(x + Facing.offsetsXForSide[i1], y + Facing.offsetsYForSide[i1], z + Facing.offsetsZForSide[i1]); + break; + } + } + if (safe != null) { safe.setPins(world.rand.nextInt(999)); } + } }; diff --git a/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java index 4a578c8b6..fc250a7a0 100644 --- a/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java @@ -11,6 +11,7 @@ import net.minecraft.potion.PotionEffect; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.Facing; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -70,8 +71,12 @@ public class LogicBlockInteractions { IEnergyHandlerMK2 handler = null; ForgeDirection parallel = logic.direction.getRotation(ForgeDirection.UP); - if(world.getTileEntity(x,y + 1,z) instanceof IEnergyHandlerMK2) - handler = (IEnergyHandlerMK2) world.getTileEntity(x,y + 1,z); + for (int i1 = 0; i1 < 6; ++i1) { + if(world.getTileEntity(x + Facing.offsetsXForSide[i1], y + Facing.offsetsYForSide[i1], z + Facing.offsetsZForSide[i1]) instanceof IEnergyHandlerMK2) { + handler = (IEnergyHandlerMK2) world.getTileEntity(x + Facing.offsetsXForSide[i1], y + Facing.offsetsYForSide[i1], z + Facing.offsetsZForSide[i1]); + break; + } + } if(handler == null || !(handler.getPower() > 500_000)) player.addChatMessage(new ChatComponentText( @@ -83,9 +88,12 @@ public class LogicBlockInteractions { EnumChatFormatting.RESET + " Power Restorted! Safe Unlocked!")); TileEntityLockableBase safe = null; - if(world.getTileEntity(x - parallel.offsetX,y,z) instanceof TileEntityLockableBase) - safe = (TileEntityLockableBase) world.getTileEntity(x - parallel.offsetX,y,z); - + for (int i1 = 0; i1 < 6; ++i1) { + if (world.getTileEntity(x + Facing.offsetsXForSide[i1], y + Facing.offsetsYForSide[i1], z + Facing.offsetsZForSide[i1]) instanceof TileEntityLockableBase) { + safe = (TileEntityLockableBase) world.getTileEntity(x + Facing.offsetsXForSide[i1], y + Facing.offsetsYForSide[i1], z + Facing.offsetsZForSide[i1]); + break; + } + } if(safe != null){ safe.unlock(); world.playSoundAtEntity(player, "hbm:block.lockOpen", 3.0F, 0.8F); From 01da67509745c17ef9684c08cdebffca31683d83 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Fri, 1 May 2026 12:38:37 -0400 Subject: [PATCH 05/10] woops --- src/main/java/com/hbm/blocks/generic/LogicBlock.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/hbm/blocks/generic/LogicBlock.java b/src/main/java/com/hbm/blocks/generic/LogicBlock.java index b5f1577b9..e2fe243bd 100644 --- a/src/main/java/com/hbm/blocks/generic/LogicBlock.java +++ b/src/main/java/com/hbm/blocks/generic/LogicBlock.java @@ -176,6 +176,7 @@ public class LogicBlock extends BlockContainer { @Override public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { this.readFromNBT(pkt.func_148857_g()); + worldObj.markBlockForUpdate(xCoord,yCoord,zCoord); } } From ad19247174895b6359f1c756c5929f7968529927 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Fri, 1 May 2026 12:57:55 -0400 Subject: [PATCH 06/10] unused cleanup, for now --- .../assets/hbm/structures/dead_dish_big.nbt | Bin 20634 -> 0 bytes .../assets/hbm/structures/dead_dish_small.nbt | Bin 5427 -> 0 bytes .../assets/hbm/structures/excavator.nbt | Bin 73893 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/main/resources/assets/hbm/structures/dead_dish_big.nbt delete mode 100644 src/main/resources/assets/hbm/structures/dead_dish_small.nbt delete mode 100644 src/main/resources/assets/hbm/structures/excavator.nbt diff --git a/src/main/resources/assets/hbm/structures/dead_dish_big.nbt b/src/main/resources/assets/hbm/structures/dead_dish_big.nbt deleted file mode 100644 index 3ec64e9183fb1917f3a5cecfcc84370956f3957e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20634 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 diff --git a/src/main/resources/assets/hbm/structures/dead_dish_small.nbt b/src/main/resources/assets/hbm/structures/dead_dish_small.nbt deleted file mode 100644 index cb6b5e178c12c7c5afd323812e1bd99a462c2613..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5427 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 Nf`Z_>k@t*O{1vgf18x8S From 3328da75e264cead08f5b95c53fce2addf933aa6 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Wed, 6 May 2026 18:48:53 -0400 Subject: [PATCH 07/10] timothy's suck n blows --- src/main/java/com/hbm/blocks/machine/MachineFan.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineFan.java b/src/main/java/com/hbm/blocks/machine/MachineFan.java index 971b5fe89..a8d0c22b2 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineFan.java +++ b/src/main/java/com/hbm/blocks/machine/MachineFan.java @@ -210,7 +210,7 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro return true; } - if(tool == ToolType.WRENCH) { + if(tool == ToolType.DEFUSER) { TileEntityFan tile = (TileEntityFan) world.getTileEntity(x, y, z); if(tile != null) { From f72cc804dba96ecaf1248ec3f6f71cd7e581c683 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Tue, 2 Jun 2026 14:12:03 -0400 Subject: [PATCH 08/10] locking loot blocks --- .../com/hbm/blocks/generic/BlockWandLoot.java | 48 +++++++++++++++++++ .../hbm/items/tool/ItemCounterfeitKeys.java | 29 ++++++----- .../machine/TileEntityLockableBase.java | 7 ++- 3 files changed, 72 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java b/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java index 14d40578b..eed5d3880 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java @@ -14,9 +14,11 @@ import com.hbm.config.StructureConfig; import com.hbm.interfaces.IBomb; import com.hbm.interfaces.ICopiable; import com.hbm.itempool.ItemPool; +import com.hbm.items.tool.ItemLock; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.tileentity.TileEntityLoadedBase; +import com.hbm.tileentity.machine.TileEntityLockableBase; import com.hbm.util.BufferUtil; import com.hbm.util.LootGenerator; import com.hbm.util.i18n.I18nUtil; @@ -36,6 +38,7 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; @@ -113,6 +116,11 @@ public class BlockWandLoot extends BlockContainer implements ILookOverlay, ITool text.add("Maximum items: " + loot.maxItems); } + if(loot.lockCode != 0){ + text.add("Container will be locked"); + text.add("Lockpicking chance:" + loot.lockMod); + } + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); } @@ -151,6 +159,12 @@ public class BlockWandLoot extends BlockContainer implements ILookOverlay, ITool } } + ItemStack held = player.getHeldItem(); + if(held != null && held.getItem() instanceof ItemLock){ + loot.lockMod = (float) ((ItemLock)held.getItem()).lockMod; + loot.lockCode = ItemLock.getPins(held); + } + return false; } @@ -243,6 +257,10 @@ public class BlockWandLoot extends BlockContainer implements ILookOverlay, ITool private float placedRotation; + private float lockMod = 0; + private int lockCode = 0; + private boolean cheesable = true; + private static final GameProfile FAKE_PROFILE = new GameProfile(UUID.fromString("839eb18c-50bc-400c-8291-9383f09763e7"), "[NTM]"); private static FakePlayer fakePlayer; @@ -280,6 +298,11 @@ public class BlockWandLoot extends BlockContainer implements ILookOverlay, ITool worldObj.setTileEntity(xCoord, yCoord, zCoord, te); } + if(te instanceof TileEntityLockableBase && lockCode != 0){ + ((TileEntityLockableBase) te).setPins(lockCode); + ((TileEntityLockableBase) te).setMod(lockMod); + ((TileEntityLockableBase) te).cheesable = lockMod != 0; + } if(te instanceof IInventory) { int count = minItems; if(maxItems - minItems > 0) count += worldObj.rand.nextInt(maxItems - minItems); @@ -332,6 +355,10 @@ public class BlockWandLoot extends BlockContainer implements ILookOverlay, ITool nbt.setString("pool", poolName); nbt.setFloat("rot", placedRotation); + nbt.setInteger("lockCode", lockCode); + nbt.setFloat("lockMod", lockMod); + nbt.setBoolean("cheesable", cheesable); + nbt.setBoolean("trigger", triggerReplace); } @@ -347,6 +374,10 @@ public class BlockWandLoot extends BlockContainer implements ILookOverlay, ITool if(replaceBlock == null) replaceBlock = ModBlocks.deco_loot; + lockCode = nbt.getInteger("lockCode"); + lockMod = nbt.getFloat("lockMod"); + cheesable = nbt.getBoolean("cheesable"); + triggerReplace = nbt.getBoolean("trigger"); } @@ -357,6 +388,11 @@ public class BlockWandLoot extends BlockContainer implements ILookOverlay, ITool buf.writeInt(minItems); buf.writeInt(maxItems); BufferUtil.writeString(buf, poolName); + + buf.writeInt(lockCode); + buf.writeFloat(lockMod); + buf.writeBoolean(cheesable); + } @Override @@ -366,6 +402,10 @@ public class BlockWandLoot extends BlockContainer implements ILookOverlay, ITool minItems = buf.readInt(); maxItems = buf.readInt(); poolName = BufferUtil.readString(buf); + + lockCode = buf.readInt(); + lockMod = buf.readFloat(); + cheesable = buf.readBoolean(); } @Override @@ -379,6 +419,10 @@ public class BlockWandLoot extends BlockContainer implements ILookOverlay, ITool nbt.setInteger("maxItems", maxItems); nbt.setString("poolName", poolName); + nbt.setInteger("lockCode", lockCode); + nbt.setFloat("lockMod", lockMod); + nbt.setBoolean("cheesable", cheesable); + return nbt; } @@ -390,6 +434,10 @@ public class BlockWandLoot extends BlockContainer implements ILookOverlay, ITool maxItems = nbt.getInteger("maxItems"); poolName = nbt.getString("poolName"); + lockCode = nbt.getInteger("lockCode"); + lockMod = nbt.getFloat("lockMod"); + cheesable = nbt.getBoolean("cheesable"); + } } diff --git a/src/main/java/com/hbm/items/tool/ItemCounterfeitKeys.java b/src/main/java/com/hbm/items/tool/ItemCounterfeitKeys.java index a7b7cefd1..ad27b3ee6 100644 --- a/src/main/java/com/hbm/items/tool/ItemCounterfeitKeys.java +++ b/src/main/java/com/hbm/items/tool/ItemCounterfeitKeys.java @@ -9,36 +9,43 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; public class ItemCounterfeitKeys extends Item { - + @Override public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int b, float f0, float f1, float f2) { TileEntity te = world.getTileEntity(x, y, z); - + if(te instanceof TileEntityLockableBase) { - + TileEntityLockableBase locked = (TileEntityLockableBase) te; - - if(locked.isLocked()) { + + if(locked.isLocked() && locked.cheesable) { ItemStack st = new ItemStack(ModItems.key_fake); ItemKeyPin.setPins(st, locked.getPins()); - + player.inventory.setInventorySlotContents(player.inventory.currentItem, st.copy()); - + if(!player.inventory.addItemStackToInventory(st.copy())) { player.dropPlayerItemWithRandomChoice(st.copy(), false); } - + player.inventoryContainer.detectAndSendChanges(); - + player.swingItem(); - + return true; + } else if(!locked.cheesable){ + player.addChatMessage(new ChatComponentText( + EnumChatFormatting.LIGHT_PURPLE + "This lock is too elaborate for a counterfeit key to be made")); + player.addChatMessage(new ChatComponentText( + EnumChatFormatting.LIGHT_PURPLE + "Perhaps there is another way around here to unlock it")); } } - + return false; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java index 6966b818a..ee7d0df86 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java @@ -16,7 +16,8 @@ public abstract class TileEntityLockableBase extends TileEntityLoadedBase { protected int lock; private boolean isLocked = false; protected double lockMod = 0.1D; - + /** Whether a counterfeit lock can be made out of it*/ + public boolean cheesable = true; public boolean isLocked() { return isLocked; } @@ -44,6 +45,7 @@ public abstract class TileEntityLockableBase extends TileEntityLoadedBase { super.readFromNBT(nbt); lock = nbt.getInteger("lock"); + cheesable = nbt.getBoolean("cheesable"); isLocked = nbt.getBoolean("isLocked"); lockMod = nbt.getDouble("lockMod"); } @@ -53,6 +55,7 @@ public abstract class TileEntityLockableBase extends TileEntityLoadedBase { super.writeToNBT(nbt); nbt.setInteger("lock", lock); + nbt.setBoolean("cheesable", cheesable); nbt.setBoolean("isLocked", isLocked); nbt.setDouble("lockMod", lockMod); } @@ -62,6 +65,7 @@ public abstract class TileEntityLockableBase extends TileEntityLoadedBase { super.serialize(buf); buf.writeInt(lock); + buf.writeBoolean(cheesable); buf.writeBoolean(isLocked); buf.writeDouble(lockMod); } @@ -71,6 +75,7 @@ public abstract class TileEntityLockableBase extends TileEntityLoadedBase { super.deserialize(buf); lock = buf.readInt(); + cheesable = buf.readBoolean(); isLocked = buf.readBoolean(); lockMod = buf.readDouble(); } From 05294a1c0722307d02f12677e4d2ca2ad42ffe40 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Tue, 2 Jun 2026 14:44:18 -0400 Subject: [PATCH 09/10] oops --- src/main/java/com/hbm/blocks/generic/BlockWandLoot.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java b/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java index eed5d3880..bf3e5b11e 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java @@ -302,6 +302,7 @@ public class BlockWandLoot extends BlockContainer implements ILookOverlay, ITool ((TileEntityLockableBase) te).setPins(lockCode); ((TileEntityLockableBase) te).setMod(lockMod); ((TileEntityLockableBase) te).cheesable = lockMod != 0; + ((TileEntityLockableBase) te).lock(); } if(te instanceof IInventory) { int count = minItems; From a39f82fa53b11d0da1258bbfea023a35e475e874 Mon Sep 17 00:00:00 2001 From: HbmMods Date: Tue, 2 Jun 2026 21:13:56 +0200 Subject: [PATCH 10/10] mh yes colores --- changelog | 6 + .../java/com/hbm/crafting/WeaponRecipes.java | 4 +- .../com/hbm/handler/nei/ArcWelderHandler.java | 12 +- .../handler/nei/NEIGenericRecipeHandler.java | 6 + .../hbm/inventory/fluid/tank/FluidTank.java | 3 +- .../com/hbm/inventory/gui/GUICrucible.java | 3 +- .../com/hbm/inventory/gui/GUIFusionTorus.java | 2 +- .../inventory/gui/element/GUIElements.java | 14 +++ .../recipes/AssemblyMachineRecipes.java | 2 +- .../inventory/recipes/CrucibleRecipes.java | 16 +-- .../hbm/inventory/recipes/FusionRecipe.java | 21 ++++ .../hbm/inventory/recipes/PUREXRecipe.java | 24 ++++ .../hbm/inventory/recipes/PUREXRecipes.java | 115 +++++++++--------- .../inventory/recipes/PlasmaForgeRecipe.java | 21 ++++ .../recipes/loader/GenericRecipe.java | 14 ++- .../java/com/hbm/main/CraftingManager.java | 2 +- src/main/java/com/hbm/util/ColorUtil.java | 4 + .../assets/hbm/manual/material/steel.json | 2 +- 18 files changed, 190 insertions(+), 81 deletions(-) create mode 100644 src/main/java/com/hbm/inventory/recipes/PUREXRecipe.java diff --git a/changelog b/changelog index 1c026a1eb..0561045f8 100644 --- a/changelog +++ b/changelog @@ -75,6 +75,12 @@ * Using state of the art anti-leave-the-screen technology, recipe tooltips (and most tooltips used by `GuiInfoScreen`) should no longer leave the screen * This means that the recipe selector can now have the tooltip follow the mouse instead of being eternally stuck in the corner * Recipe selector tooltips now have a nice orange and yellow border +* The nuclear charge and demolition nuclear grenade charge now need neutron reflectors +* Schrabidium grenade charges now use CMB steel instead of bronze +* The satellite base now only uses a medium thruster instead of a large one, making it no longer post pyrolysis +* The steel recipe in the crucible now requires flux + * The recipe is also now a fair bit slower (still faster than a blast furnace overall) +* Remodeled the catalytic reformer ## Fixed * Fixed RoR graph showing the wrong name in the GUI diff --git a/src/main/java/com/hbm/crafting/WeaponRecipes.java b/src/main/java/com/hbm/crafting/WeaponRecipes.java index 9e11962cc..315374e1c 100644 --- a/src/main/java/com/hbm/crafting/WeaponRecipes.java +++ b/src/main/java/com/hbm/crafting/WeaponRecipes.java @@ -277,8 +277,8 @@ public class WeaponRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.grenade_filling, 4, EnumGrenadeFilling.PLASMA.ordinal()), new Object[] { " C ", "KWK", 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CAPACITOR_BOARD), 'K', ModItems.cell_tritium, 'W', WEAPONSTEEL.plate() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.grenade_filling, 4, EnumGrenadeFilling.LASER.ordinal()), new Object[] { " C ", "KWK", 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ATOMIC_CLOCK), 'K', ModItems.crystal_redstone, 'W', WEAPONSTEEL.plate() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.grenade_filling, 1, EnumGrenadeFilling.NUCLEAR.ordinal()), new Object[] { " T ", "CPC", " T ", 'T', ModItems.ball_tatb, 'C', WEAPONSTEEL.plate(), 'P', PU239.nugget() }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.grenade_filling, 1, EnumGrenadeFilling.NUCLEAR_DEMO.ordinal()), new Object[] { "TPT", "CPC", "TPT", 'T', ModItems.ball_tatb, 'C', WEAPONSTEEL.plate(), 'P', PU239.nugget() }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.grenade_filling, 1, EnumGrenadeFilling.SCHRAB.ordinal()), new Object[] { "BCB", "TST", "BCB", 'B', ANY_BISMOIDBRONZE.plateCast(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CONTROLLER), 'T', ModItems.ball_tatb, 'S', ModItems.cell_sas3 }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.grenade_filling, 1, EnumGrenadeFilling.NUCLEAR_DEMO.ordinal()), new Object[] { "TPT", "CPC", "TPT", 'T', ModItems.ball_tatb, 'C', ModItems.neutron_reflector, 'P', PU239.nugget() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.grenade_filling, 1, EnumGrenadeFilling.SCHRAB.ordinal()), new Object[] { "BCB", "TST", "BCB", 'B', CMB.plateCast(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CONTROLLER), 'T', ModItems.ball_tatb, 'S', ModItems.cell_sas3 }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.grenade_extra, 1, EnumGrenadeExtra.GLUE.ordinal()), new Object[] { " P ", "PSP", " P ", 'P', Items.paper, 'S', Items.slime_ball }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.grenade_extra, 1, EnumGrenadeExtra.PROXY_FUZE.ordinal()), new Object[] { "C", "F", 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP), 'F', ModItems.safety_fuse }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.grenade_extra, 1, EnumGrenadeExtra.FRAG_SLEEVE.ordinal()), new Object[] { "BBB", " T ", "BBB", 'B', STEEL.bolt(), 'T', ModItems.ducttape }); diff --git a/src/main/java/com/hbm/handler/nei/ArcWelderHandler.java b/src/main/java/com/hbm/handler/nei/ArcWelderHandler.java index b1eb411bf..835e91ab1 100644 --- a/src/main/java/com/hbm/handler/nei/ArcWelderHandler.java +++ b/src/main/java/com/hbm/handler/nei/ArcWelderHandler.java @@ -1,12 +1,12 @@ package com.hbm.handler.nei; import java.awt.Rectangle; -import java.util.Locale; import com.hbm.blocks.ModBlocks; import com.hbm.inventory.gui.GUIMachineArcWelder; import com.hbm.inventory.recipes.ArcWelderRecipes; import com.hbm.inventory.recipes.ArcWelderRecipes.ArcWelderRecipe; +import com.hbm.util.BobMathUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; @@ -48,11 +48,11 @@ public class ArcWelderHandler extends NEIUniversalHandler { } FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; - String duration = String.format(Locale.US, "%,d", arc.duration) + " ticks"; - String consumption = String.format(Locale.US, "%,d", arc.consumption) + " HE/t"; - int side = 160; - fontRenderer.drawString(duration, side - fontRenderer.getStringWidth(duration), 43, 0x404040); - fontRenderer.drawString(consumption, side - fontRenderer.getStringWidth(consumption), 55, 0x404040); + String duration = BobMathUtil.getShortNumber(arc.duration) + " ticks"; + String consumption = BobMathUtil.getShortNumber(arc.consumption) + "HE/t"; + int side = 164; + fontRenderer.drawString(duration, side - fontRenderer.getStringWidth(duration), 45, 0x404040); + fontRenderer.drawString(consumption, side - fontRenderer.getStringWidth(consumption), 57, 0x404040); return; } } diff --git a/src/main/java/com/hbm/handler/nei/NEIGenericRecipeHandler.java b/src/main/java/com/hbm/handler/nei/NEIGenericRecipeHandler.java index fbffcdeb3..b40992f81 100644 --- a/src/main/java/com/hbm/handler/nei/NEIGenericRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/NEIGenericRecipeHandler.java @@ -320,4 +320,10 @@ public abstract class NEIGenericRecipeHandler extends TemplateRecipeHandler impl drawTexturedModalRect(74 + this.getMachineXOffset(rec.recipe), 7, 77, 87, 18, 50); } } + + @Override + public void drawExtras(int recipe) { + RecipeSet rec = (RecipeSet) this.arecipes.get(recipe); + rec.recipe.printNEIExtras(); + } } 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 c968699a0..6ade13f40 100644 --- a/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java +++ b/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java @@ -11,6 +11,7 @@ import com.hbm.inventory.FluidStack; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.gui.GuiInfoContainer; +import com.hbm.inventory.gui.element.GUIElements; import com.hbm.items.ModItems; import com.hbm.items.machine.IItemFluidIdentifier; import com.hbm.util.BobMathUtil; @@ -247,7 +248,7 @@ public class FluidTank implements Cloneable { } type.addInfo(list); - gui.drawInfo(list.toArray(new String[0]), mouseX, mouseY); + GUIElements.drawHoveringTextFluid(list, mouseX, mouseY, gui.getFontRenderer(), gui.getItemRenderer(), gui.width, gui.height, this.type); } } diff --git a/src/main/java/com/hbm/inventory/gui/GUICrucible.java b/src/main/java/com/hbm/inventory/gui/GUICrucible.java index 1c11acefb..b0845b5ff 100644 --- a/src/main/java/com/hbm/inventory/gui/GUICrucible.java +++ b/src/main/java/com/hbm/inventory/gui/GUICrucible.java @@ -9,6 +9,7 @@ import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerCrucible; +import com.hbm.inventory.gui.element.GUIElements; import com.hbm.inventory.material.Mats; import com.hbm.inventory.material.Mats.MaterialStack; import com.hbm.inventory.material.NTMMaterial.SmeltingBehavior; @@ -52,7 +53,7 @@ public class GUICrucible extends GuiInfoContainer { if(guiLeft + 106 <= x && guiLeft + 106 + 18 > x && guiTop + 80 < y && guiTop + 80 + 18 >= y) { if(this.crucible.recipe != null && CrucibleRecipes.INSTANCE.recipeNameMap.containsKey(this.crucible.recipe)) { CrucibleRecipe recipe = (CrucibleRecipe) CrucibleRecipes.INSTANCE.recipeNameMap.get(this.crucible.recipe); - this.func_146283_a(recipe.print(), x, y); + GUIElements.drawHoveringTextRecipe(recipe.print(), x, y, this.fontRendererObj, itemRender, this.width, this.height); } else { this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.recipe.setRecipe"), x, y); } diff --git a/src/main/java/com/hbm/inventory/gui/GUIFusionTorus.java b/src/main/java/com/hbm/inventory/gui/GUIFusionTorus.java index fe857246c..98e11de61 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIFusionTorus.java +++ b/src/main/java/com/hbm/inventory/gui/GUIFusionTorus.java @@ -59,7 +59,7 @@ public class GUIFusionTorus extends GuiInfoContainer { if(guiLeft + 43 <= mouseX && guiLeft + 43 + 18 > mouseX && guiTop + 80 < mouseY && guiTop + 80 + 18 >= mouseY) { if(recipe != null) { - this.func_146283_a(recipe.print(), mouseX, mouseY); + GUIElements.drawHoveringTextRecipe(recipe.print(), mouseX, mouseY, this.fontRendererObj, itemRender, this.width, this.height); } else { this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.recipe.setRecipe"), mouseX, mouseY); } diff --git a/src/main/java/com/hbm/inventory/gui/element/GUIElements.java b/src/main/java/com/hbm/inventory/gui/element/GUIElements.java index 7c0b2e5d2..c30aa81c4 100644 --- a/src/main/java/com/hbm/inventory/gui/element/GUIElements.java +++ b/src/main/java/com/hbm/inventory/gui/element/GUIElements.java @@ -6,7 +6,9 @@ import java.util.List; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; +import com.hbm.inventory.fluid.FluidType; import com.hbm.lib.RefStrings; +import com.hbm.util.ColorUtil; import com.hbm.util.Vec3NT; import net.minecraft.client.Minecraft; @@ -99,6 +101,18 @@ public class GUIElements { drawHoveringText(lines, x, y, font, itemRender, guiWidth, guiHeight, 6, STANDARD_LINE_DIST, STANDARD_COLOR_BACKGROUND, STANDARD_COLOR_BACKGROUND, RECIPE_COLOR_LINE0, RECIPE_COLOR_LINE1); } + public static void drawHoveringTextFluid(List lines, int x, int y, FontRenderer font, RenderItem itemRender, int guiWidth, int guiHeight, FluidType type) { + int color0 = type.getColor(); + int r = ColorUtil.ir(color0); + int g = ColorUtil.ig(color0); + int b = ColorUtil.ib(color0); + int add = (r + g + b) / 3 > 0x80 ? -0x40 : 0x40; + int color1 = ColorUtil.color(MathHelper.clamp_int(r + add, 0, 255), MathHelper.clamp_int(g + add, 0, 255), MathHelper.clamp_int(b + add, 0, 255)); + color0 |= 0xff000000; + color1 |= 0xff000000; + drawHoveringText(lines, x, y, font, itemRender, guiWidth, guiHeight, 6, STANDARD_LINE_DIST, STANDARD_COLOR_BACKGROUND, STANDARD_COLOR_BACKGROUND, color0, color1); + } + public static void drawHoveringText(List lines, int x, int y, FontRenderer font, RenderItem itemRender, int guiWidth, int guiHeight, int headerOffset, int lineDist, int colBG0, int colBG1, int colLine0, int colLine1) { if(!lines.isEmpty()) { diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index b66039479..2da4ce49c 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -946,7 +946,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.satellitebase").setup(600, 100).outputItems(new ItemStack(ModItems.sat_base, 1)) .inputItems(new OreDictStack(RUBBER.ingot(), 12), new OreDictStack(TI.shell(), 3), - new ComparableStack(ModItems.thruster_large, 1), + new ComparableStack(ModItems.thruster_medium, 1), new ComparableStack(ModItems.part_generic, 8, EnumPartType.LDE), new ComparableStack(ModItems.plate_desh, 4), new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.getID()), diff --git a/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java b/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java index b028f9727..4dc0e6754 100644 --- a/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java @@ -60,19 +60,19 @@ public class CrucibleRecipes extends GenericRecipes { int n = MaterialShapes.NUGGET.q(1); int i = MaterialShapes.INGOT.q(1); - this.register(new CrucibleRecipe("crucible.steel").setup(2, new ItemStack(ModItems.ingot_steel)) - .inputs(new MaterialStack(Mats.MAT_IRON, n * 2), new MaterialStack(Mats.MAT_CARBON, n)) + this.register(new CrucibleRecipe("crucible.steel").setup(20, new ItemStack(ModItems.ingot_steel)) + .inputs(new MaterialStack(Mats.MAT_IRON, n * 2), new MaterialStack(Mats.MAT_CARBON, n * 3), new MaterialStack(Mats.MAT_FLUX, n)) .outputs(new MaterialStack(Mats.MAT_STEEL, n * 2))); if(Compat.isModLoaded(Compat.MOD_GT6)) { - this.register(new CrucibleRecipe("crucible.steelWrought").setup(2, new ItemStack(ModItems.ingot_steel)) - .inputs(new MaterialStack(Mats.MAT_WROUGHTIRON, n * 2), new MaterialStack(Mats.MAT_CARBON, n)) + this.register(new CrucibleRecipe("crucible.steelWrought").setup(20, new ItemStack(ModItems.ingot_steel)) + .inputs(new MaterialStack(Mats.MAT_WROUGHTIRON, n * 2), new MaterialStack(Mats.MAT_CARBON, n * 3), new MaterialStack(Mats.MAT_FLUX, n)) .outputs(new MaterialStack(Mats.MAT_STEEL, n * 2))); - this.register(new CrucibleRecipe("crucible.steelPig").setup(2, new ItemStack(ModItems.ingot_steel)) - .inputs(new MaterialStack(Mats.MAT_PIGIRON, n * 2), new MaterialStack(Mats.MAT_CARBON, n)) + this.register(new CrucibleRecipe("crucible.steelPig").setup(20, new ItemStack(ModItems.ingot_steel)) + .inputs(new MaterialStack(Mats.MAT_PIGIRON, n * 2), new MaterialStack(Mats.MAT_CARBON, n * 3), new MaterialStack(Mats.MAT_FLUX, n)) .outputs(new MaterialStack(Mats.MAT_STEEL, n * 2))); - this.register(new CrucibleRecipe("crucible.steelMeteoric").setup(2, new ItemStack(ModItems.ingot_steel)) - .inputs(new MaterialStack(Mats.MAT_METEORICIRON, n * 2), new MaterialStack(Mats.MAT_CARBON, n)) + this.register(new CrucibleRecipe("crucible.steelMeteoric").setup(20, new ItemStack(ModItems.ingot_steel)) + .inputs(new MaterialStack(Mats.MAT_METEORICIRON, n * 2), new MaterialStack(Mats.MAT_CARBON, n * 3), new MaterialStack(Mats.MAT_FLUX, n)) .outputs(new MaterialStack(Mats.MAT_STEEL, n * 2))); } diff --git a/src/main/java/com/hbm/inventory/recipes/FusionRecipe.java b/src/main/java/com/hbm/inventory/recipes/FusionRecipe.java index 8611baa5a..ddce0166e 100644 --- a/src/main/java/com/hbm/inventory/recipes/FusionRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/FusionRecipe.java @@ -5,8 +5,11 @@ import java.util.List; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.util.BobMathUtil; +import com.hbm.util.Clock; import com.hbm.util.i18n.I18nUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; import net.minecraft.util.EnumChatFormatting; public class FusionRecipe extends GenericRecipe { @@ -43,4 +46,22 @@ public class FusionRecipe extends GenericRecipe { return list; } + + @Override + public void printNEIExtras() { + + int side = 164; + FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; + + String duration = BobMathUtil.getShortNumber(this.duration) + " ticks"; + fontRenderer.drawString(duration, side - fontRenderer.getStringWidth(duration), 45, 0x404040); + + if(Clock.get_ms() % 2000 < 1000) { + String consumption = BobMathUtil.getShortNumber(this.power) + "HE/t"; + fontRenderer.drawString(consumption, side - fontRenderer.getStringWidth(consumption), 57, 0x404040); + } else { + String temp = BobMathUtil.getShortNumber(this.ignitionTemp) + "Ky/t"; + fontRenderer.drawString(temp, side - fontRenderer.getStringWidth(temp), 57, 0xa000a0); + } + } } diff --git a/src/main/java/com/hbm/inventory/recipes/PUREXRecipe.java b/src/main/java/com/hbm/inventory/recipes/PUREXRecipe.java new file mode 100644 index 000000000..fb293f374 --- /dev/null +++ b/src/main/java/com/hbm/inventory/recipes/PUREXRecipe.java @@ -0,0 +1,24 @@ +package com.hbm.inventory.recipes; + +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.util.BobMathUtil; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; + +public class PUREXRecipe extends GenericRecipe { + + public PUREXRecipe(String name) { + super(name); + } + + @Override + public void printNEIExtras() { + + FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; + String line = BobMathUtil.getShortNumber(this.duration) + " ticks " + BobMathUtil.getShortNumber(this.power) + "HE/t"; + + int side = 164; + fontRenderer.drawString(line, side - fontRenderer.getStringWidth(line), 57, 0x306030); // why so geen + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java b/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java index 5e3f0c973..3b2434994 100644 --- a/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java @@ -10,7 +10,6 @@ import com.hbm.inventory.FluidStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.inventory.fluid.Fluids; -import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.inventory.recipes.loader.GenericRecipes; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemPWRFuel.EnumPWRFuel; @@ -19,7 +18,7 @@ import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; -public class PUREXRecipes extends GenericRecipes { +public class PUREXRecipes extends GenericRecipes { public static final PUREXRecipes INSTANCE = new PUREXRecipes(); @@ -29,7 +28,7 @@ public class PUREXRecipes extends GenericRecipes { @Override public int outputFluidLimit() { return 1; } @Override public String getFileName() { return "hbmPUREX.json"; } - @Override public GenericRecipe instantiateRecipe(String name) { return new GenericRecipe(name); } + @Override public PUREXRecipe instantiateRecipe(String name) { return new PUREXRecipe(name); } @Override public void registerDefaults() { @@ -41,7 +40,7 @@ public class PUREXRecipes extends GenericRecipes { long watzPower = 10_000; long vitrification = 1_000; - this.register(new GenericRecipe("purex.uzh").setup(600, 1_000) + this.register((PUREXRecipe) new PUREXRecipe("purex.uzh").setup(600, 1_000) .inputItems(new ComparableStack(ModItems.billet_uranium_fuel), new OreDictStack(ZR.billet(), 3)) .inputFluids(new FluidStack(Fluids.NITRIC_ACID, 1000), new FluidStack(Fluids.HYDROGEN, 4000)) @@ -49,7 +48,7 @@ public class PUREXRecipes extends GenericRecipes { //CP-1 String autoPile = "autoswitch.pile"; - this.register(new GenericRecipe("purex.pilepu").setup(40, pilePower).setNameWrapper("purex.recycle").setGroup(autoPile, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.pilepu").setup(40, pilePower).setNameWrapper("purex.recycle").setGroup(autoPile, this) .inputItems(new ComparableStack(ModItems.pile_rod_plutonium)) .inputFluids(new FluidStack(Fluids.SULFURIC_ACID, 100)) .outputItems(new ItemStack(ModItems.billet_pu_mix, 2), @@ -57,7 +56,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.plate_iron, 2)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pilepu239").setup(40, pilePower).setNameWrapper("purex.recycle").setGroup(autoPile, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.pilepu239").setup(40, pilePower).setNameWrapper("purex.recycle").setGroup(autoPile, this) .inputItems(new ComparableStack(ModItems.pile_rod_pu239)) .inputFluids(new FluidStack(Fluids.SULFURIC_ACID, 100)) .outputItems(new ItemStack(ModItems.billet_pu239, 1), @@ -68,7 +67,7 @@ public class PUREXRecipes extends GenericRecipes { // ZIRNOX String autoZirnox = "autoswitch.zirnox"; - this.register(new GenericRecipe("purex.zirnoxnu").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.zirnoxnu").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) .inputItems(new ComparableStack(ModItems.waste_natural_uranium)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_u238, 1), @@ -77,7 +76,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 2)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.zirnoxmeu").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.zirnoxmeu").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) .inputItems(new ComparableStack(ModItems.waste_uranium)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_pu_mix, 1), @@ -86,7 +85,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 2)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.zirnoxthmeu").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.zirnoxthmeu").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) .inputItems(new ComparableStack(ModItems.waste_thorium)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_u238, 1), @@ -95,7 +94,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 2)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.zirnoxmox").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.zirnoxmox").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) .inputItems(new ComparableStack(ModItems.waste_mox)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_pu_mix, 1), @@ -104,7 +103,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 3)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.zirnoxmep").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.zirnoxmep").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) .inputItems(new ComparableStack(ModItems.waste_plutonium)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_pu_mix, 2), @@ -112,7 +111,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 3)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.zirnoxheu233").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.zirnoxheu233").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) .inputItems(new ComparableStack(ModItems.waste_u233)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_u235, 1), @@ -121,7 +120,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 3)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.zirnoxheu235").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.zirnoxheu235").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) .inputItems(new ComparableStack(ModItems.waste_u235)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_pu238, 1), @@ -130,7 +129,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 3)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.zirnoxles").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.zirnoxles").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) .inputItems(new ComparableStack(ModItems.waste_schrabidium)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_beryllium, 2), @@ -139,7 +138,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 2)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.zirnoxzfbmox").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.zirnoxzfbmox").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) .inputItems(new ComparableStack(ModItems.waste_zfb_mox)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_zirconium, 3), @@ -150,7 +149,7 @@ public class PUREXRecipes extends GenericRecipes { // Plate Fuel String autoPlate = "autoswitch.plate"; - this.register(new GenericRecipe("purex.platemox").setup(100, platePower).setNameWrapper("purex.recycle").setGroup(autoPlate, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.platemox").setup(100, platePower).setNameWrapper("purex.recycle").setGroup(autoPlate, this) .inputItems(new ComparableStack(ModItems.waste_plate_mox)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.powder_sr90_tiny, 1), @@ -159,7 +158,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 4)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.platepu238be").setup(100, platePower).setNameWrapper("purex.recycle").setGroup(autoPlate, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.platepu238be").setup(100, platePower).setNameWrapper("purex.recycle").setGroup(autoPlate, this) .inputItems(new ComparableStack(ModItems.waste_plate_pu238be)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_beryllium, 1), @@ -168,7 +167,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nugget_lead, 2)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.platepu239").setup(100, platePower).setNameWrapper("purex.recycle").setGroup(autoPlate, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.platepu239").setup(100, platePower).setNameWrapper("purex.recycle").setGroup(autoPlate, this) .inputItems(new ComparableStack(ModItems.waste_plate_pu239)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_pu240, 2), @@ -177,7 +176,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 5)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.platera226be").setup(100, platePower).setNameWrapper("purex.recycle").setGroup(autoPlate, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.platera226be").setup(100, platePower).setNameWrapper("purex.recycle").setGroup(autoPlate, this) .inputItems(new ComparableStack(ModItems.waste_plate_ra226be)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_beryllium, 2), @@ -186,7 +185,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nugget_lead, 1)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.platesa326").setup(100, platePower).setNameWrapper("purex.recycle").setGroup(autoPlate, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.platesa326").setup(100, platePower).setNameWrapper("purex.recycle").setGroup(autoPlate, this) .inputItems(new ComparableStack(ModItems.waste_plate_sa326)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_solinium, 1), @@ -195,7 +194,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 6)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.plateu233").setup(100, platePower).setNameWrapper("purex.recycle").setGroup(autoPlate, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.plateu233").setup(100, platePower).setNameWrapper("purex.recycle").setGroup(autoPlate, this) .inputItems(new ComparableStack(ModItems.waste_plate_u233)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_u235, 1), @@ -204,7 +203,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 6)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.plateu235").setup(100, platePower).setNameWrapper("purex.recycle").setGroup(autoPlate, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.plateu235").setup(100, platePower).setNameWrapper("purex.recycle").setGroup(autoPlate, this) .inputItems(new ComparableStack(ModItems.waste_plate_u235)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_neptunium, 1), @@ -215,7 +214,7 @@ public class PUREXRecipes extends GenericRecipes { // PWR String autoPWR = "autoswitch.pwr"; - this.register(new GenericRecipe("purex.pwrmeu").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.pwrmeu").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MEU)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_u238, 3), @@ -224,7 +223,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 3)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrheu233").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.pwrheu233").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEU233)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_u235, 3), @@ -233,7 +232,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 5)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrheu235").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.pwrheu235").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEU235)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_neptunium, 3), @@ -242,7 +241,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 5)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrmen").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.pwrmen").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MEN)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_u238, 3), @@ -251,7 +250,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 3)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrhen237").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.pwrhen237").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEN237)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_pu238, 2), @@ -260,7 +259,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 5)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrmox").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.pwrmox").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MOX)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_u238, 3), @@ -269,7 +268,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 3)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrmep").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.pwrmep").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MEP)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_lead, 2), @@ -278,7 +277,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 3)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrhep239").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.pwrhep239").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEP239)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_pu_mix, 2), @@ -287,7 +286,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 5)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrhep241").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.pwrhep241").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEP241)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_lead, 3), @@ -296,7 +295,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 6)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrmea").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.pwrmea").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MEA)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_lead, 3), @@ -305,7 +304,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 6)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrhea242").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.pwrhea242").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEA242)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_lead, 3), @@ -314,7 +313,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 6)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrhes326").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.pwrhes326").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HES326)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_solinium, 3), @@ -323,7 +322,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 6)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrhes327").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.pwrhes327").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HES327)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_australium, 4), @@ -332,7 +331,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 6)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrbfbam").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.pwrbfbam").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.BFB_AM_MIX)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_am_mix, 9), @@ -341,7 +340,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 1)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrbfpu241").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.pwrbfpu241").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.BFB_PU241)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_pu241, 9), @@ -351,7 +350,7 @@ public class PUREXRecipes extends GenericRecipes { .setIconToFirstIngredient()); // Molten Salt - this.register(new GenericRecipe("purex.thoriumsalt").setup(20, 10_000).setIcon(ModItems.fluid_icon, Fluids.THORIUM_SALT.getID()) + this.register((PUREXRecipe) new PUREXRecipe("purex.thoriumsalt").setup(20, 10_000).setIcon(ModItems.fluid_icon, Fluids.THORIUM_SALT.getID()) .inputFluids(new FluidStack(Fluids.THORIUM_SALT_DEPLETED, 16_000)) .inputItems(new OreDictStack(TH232.nugget(), 2)) .outputFluids(new FluidStack(Fluids.THORIUM_SALT, 16_000)) @@ -361,7 +360,7 @@ public class PUREXRecipes extends GenericRecipes { // Watz String autoWatz = "autoswitch.watz"; - this.register(new GenericRecipe("purex.watzschrab").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.watzschrab").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.SCHRABIDIUM)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_solinium, 15), @@ -370,7 +369,7 @@ public class PUREXRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.watzhes").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.watzhes").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.HES)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_solinium, 17), @@ -379,7 +378,7 @@ public class PUREXRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.watzmes").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.watzmes").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.MES)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_solinium, 12), @@ -388,7 +387,7 @@ public class PUREXRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.watzles").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.watzles").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.LES)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_solinium, 9), @@ -397,7 +396,7 @@ public class PUREXRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.watzhen").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.watzhen").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.HEN)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_pu239, 12), @@ -406,7 +405,7 @@ public class PUREXRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.watzmeu").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.watzmeu").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.MEU)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_pu239, 12), @@ -415,7 +414,7 @@ public class PUREXRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.watzmep").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.watzmep").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.MEP)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_pu241, 12), @@ -424,7 +423,7 @@ public class PUREXRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.watzlead").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.watzlead").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.LEAD)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_lead, 6), @@ -433,7 +432,7 @@ public class PUREXRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.watzboron").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.watzboron").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.BORON)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.powder_coal_tiny, 12), @@ -442,7 +441,7 @@ public class PUREXRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.watzdu").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.watzdu").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.DU)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_polonium, 12), @@ -457,7 +456,7 @@ public class PUREXRecipes extends GenericRecipes { ItemStack copy = nuggetNQR.copy(); copy.stackSize = 12; - this.register(new GenericRecipe("purex.watznaqadah").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.watznaqadah").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.NQD)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(copy, @@ -466,7 +465,7 @@ public class PUREXRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.watznaqadria").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.watznaqadria").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.NQR)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_co60, 12), @@ -477,7 +476,7 @@ public class PUREXRecipes extends GenericRecipes { } //ICF - this.register(new GenericRecipe("purex.icf").setup(300, 10_000).setNameWrapper("purex.recycle") + this.register((PUREXRecipe) new PUREXRecipe("purex.icf").setup(300, 10_000).setNameWrapper("purex.recycle") .inputItems(new ComparableStack(ModItems.icf_pellet_depleted)) .outputItems(new ItemStack(ModItems.icf_pellet_empty, 1), new ItemStack(ModItems.pellet_charged, 1), @@ -486,22 +485,22 @@ public class PUREXRecipes extends GenericRecipes { .setIconToFirstIngredient()); /// Vitrification - this.register(new GenericRecipe("purex.vitliquid").setup(100, vitrification) + this.register((PUREXRecipe) new PUREXRecipe("purex.vitliquid").setup(100, vitrification) .inputItems(new ComparableStack(ModBlocks.sand_mix, 1, EnumSandType.LEAD)) .inputFluids(new FluidStack(Fluids.WASTEFLUID, 1_000)) .outputItems(new ItemStack(ModItems.nuclear_waste_vitrified))); - this.register(new GenericRecipe("purex.vitgaseous").setup(100, vitrification) + this.register((PUREXRecipe) new PUREXRecipe("purex.vitgaseous").setup(100, vitrification) .inputItems(new ComparableStack(ModBlocks.sand_mix, 1, EnumSandType.LEAD)) .inputFluids(new FluidStack(Fluids.WASTEGAS, 1_000)) .outputItems(new ItemStack(ModItems.nuclear_waste_vitrified))); - this.register(new GenericRecipe("purex.vitsolid").setup(300, vitrification) + this.register((PUREXRecipe) new PUREXRecipe("purex.vitsolid").setup(300, vitrification) .inputItems(new ComparableStack(ModBlocks.sand_mix, 1, EnumSandType.LEAD), new ComparableStack(ModItems.nuclear_waste, 4)) .outputItems(new ItemStack(ModItems.nuclear_waste_vitrified, 4))); // Schrabidium - this.register(new GenericRecipe("purex.schraranium").setup(200, 1_000).setNameWrapper("purex.schrab") + this.register((PUREXRecipe) new PUREXRecipe("purex.schraranium").setup(200, 1_000).setNameWrapper("purex.schrab") .inputItems(new ComparableStack(ModItems.ingot_schraranium)) .inputFluids(new FluidStack(Fluids.KEROSENE, 2_000), new FluidStack(Fluids.NITRIC_ACID, 1_000)) .outputItems(new ItemStack(ModItems.nugget_schrabidium, 3), @@ -510,21 +509,21 @@ public class PUREXRecipes extends GenericRecipes { .setIconToFirstIngredient()); String autoSchrab = "autoswitch.schrab"; - this.register(new GenericRecipe("purex.schrabzirnox").setup(200, 50_000).setNameWrapper("purex.schrab").setGroup(autoSchrab, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.schrabzirnox").setup(200, 50_000).setNameWrapper("purex.schrab").setGroup(autoSchrab, this) .inputItems(new ComparableStack(ModItems.waste_plutonium)) .inputFluids(new FluidStack(Fluids.SOLVENT, 4_000), new FluidStack(Fluids.SCHRABIDIC, 250)) .outputItems(new ItemStack(ModItems.powder_schrabidium, 1), new ItemStack(ModItems.nugget_technetium, 3), new ItemStack(ModItems.nuclear_waste_tiny, 4)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.schrabpwr").setup(200, 50_000).setNameWrapper("purex.schrab").setGroup(autoSchrab, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.schrabpwr").setup(200, 50_000).setNameWrapper("purex.schrab").setGroup(autoSchrab, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MEP)) .inputFluids(new FluidStack(Fluids.SOLVENT, 4_000), new FluidStack(Fluids.SCHRABIDIC, 250)) .outputItems(new ItemStack(ModItems.powder_schrabidium, 1), new ItemStack(ModItems.nugget_technetium, 3), new ItemStack(ModItems.nuclear_waste_tiny, 4)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.schrabmen").setup(200, 50_000).setNameWrapper("purex.schrab").setGroup(autoSchrab, this) + this.register((PUREXRecipe) new PUREXRecipe("purex.schrabmen").setup(200, 50_000).setNameWrapper("purex.schrab").setGroup(autoSchrab, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MEN)) .inputFluids(new FluidStack(Fluids.SOLVENT, 4_000), new FluidStack(Fluids.SCHRABIDIC, 250)) .outputItems(new ItemStack(ModItems.powder_schrabidium, 1), diff --git a/src/main/java/com/hbm/inventory/recipes/PlasmaForgeRecipe.java b/src/main/java/com/hbm/inventory/recipes/PlasmaForgeRecipe.java index e8cb2fa9c..4637b8bd0 100644 --- a/src/main/java/com/hbm/inventory/recipes/PlasmaForgeRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/PlasmaForgeRecipe.java @@ -5,8 +5,11 @@ import java.util.List; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.util.BobMathUtil; +import com.hbm.util.Clock; import com.hbm.util.i18n.I18nUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; import net.minecraft.util.EnumChatFormatting; public class PlasmaForgeRecipe extends GenericRecipe { @@ -31,4 +34,22 @@ public class PlasmaForgeRecipe extends GenericRecipe { return list; } + + @Override + public void printNEIExtras() { + + int side = 164; + FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; + + String duration = BobMathUtil.getShortNumber(this.duration) + " ticks"; + fontRenderer.drawString(duration, side - fontRenderer.getStringWidth(duration), 45, 0x404040); + + if(Clock.get_ms() % 2000 < 1000) { + String consumption = BobMathUtil.getShortNumber(this.power) + "HE/t"; + fontRenderer.drawString(consumption, side - fontRenderer.getStringWidth(consumption), 57, 0x404040); + } else { + String temp = BobMathUtil.getShortNumber(this.ignitionTemp) + "TU/t"; + fontRenderer.drawString(temp, side - fontRenderer.getStringWidth(temp), 57, 0xa000a0); + } + } } diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java index 145ed89ab..40ee9bf27 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -17,6 +17,8 @@ import com.hbm.util.BobMathUtil; import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; @@ -132,6 +134,17 @@ public class GenericRecipe { if(this.nameWrapper != null) name = I18nUtil.resolveKey(this.nameWrapper, name); return name; } + + public void printNEIExtras() { + + FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; + String duration = BobMathUtil.getShortNumber(this.duration) + " ticks"; + String consumption = BobMathUtil.getShortNumber(this.power) + "HE/t"; + + int side = 164; + fontRenderer.drawString(duration, side - fontRenderer.getStringWidth(duration), 45, 0x404040); + fontRenderer.drawString(consumption, side - fontRenderer.getStringWidth(consumption), 57, 0x404040); + } public List print() { List list = new ArrayList(); @@ -186,7 +199,6 @@ public class GenericRecipe { } } - /** Default impl only matches localized name substring, can be extended to include ingredients as well */ public boolean matchesSearch(String substring) { return getLocalizedName().toLowerCase(Locale.US).contains(substring.toLowerCase(Locale.US)); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 7544c7782..1204e54e2 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -517,7 +517,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.flame_war), 1), new Object[] { "WHW", "CTP", "WOW", 'W', Item.getItemFromBlock(Blocks.planks), 'T', Item.getItemFromBlock(Blocks.tnt), 'H', ModItems.flame_pony, 'C', ModItems.flame_conspiracy, 'P', ModItems.flame_politics, 'O', ModItems.flame_opinion }); addRecipeAuto(new ItemStack(ModBlocks.det_cord, 4), new Object[] { " P ", "PGP", " P ", 'P', Items.paper, 'G', Items.gunpowder }); addRecipeAuto(new ItemStack(ModBlocks.det_charge, 1), new Object[] { "PDP", "DTD", "PDP", 'P', STEEL.plate(), 'D', ModBlocks.det_cord, 'T', ANY_PLASTICEXPLOSIVE.ingot() }); - addRecipeAuto(new ItemStack(ModBlocks.det_nuke, 1), new Object[] { "PFP", "DCD", "PFP", 'P', DESH.plateCast(), 'D', ModBlocks.det_charge, 'C', ModItems.man_core, 'F', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CONTROLLER) }); + addRecipeAuto(new ItemStack(ModBlocks.det_nuke, 1), new Object[] { "PFP", "DCD", "PFP", 'P', ModItems.neutron_reflector, 'D', ModBlocks.det_charge, 'C', ModItems.man_core, 'F', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CONTROLLER) }); addRecipeAuto(new ItemStack(ModBlocks.det_miner, 4), new Object[] { "FFF", "ITI", "ITI", 'F', Items.flint, 'I', IRON.plate(), 'T', ModItems.ball_dynamite }); addRecipeAuto(new ItemStack(ModBlocks.det_miner, 12), new Object[] { "FFF", "ITI", "ITI", 'F', Items.flint, 'I', STEEL.plate(), 'T', ANY_PLASTICEXPLOSIVE.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.emp_bomb, 1), new Object[] { "LML", "LCL", "LML", 'L', PB.plate(), 'M', ModItems.magnetron, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED) }); diff --git a/src/main/java/com/hbm/util/ColorUtil.java b/src/main/java/com/hbm/util/ColorUtil.java index eb5554ade..04603885a 100644 --- a/src/main/java/com/hbm/util/ColorUtil.java +++ b/src/main/java/com/hbm/util/ColorUtil.java @@ -71,6 +71,10 @@ public class ColorUtil { } } + public static int color(int r, int g, int b) { + return ((r & 255) << 16) | ((g & 255) << 8) | (b & 255); + } + public static int ir(int color) { return (color & 0xff0000) >> 16; } diff --git a/src/main/resources/assets/hbm/manual/material/steel.json b/src/main/resources/assets/hbm/manual/material/steel.json index a8ec9cb71..06c913dd6 100644 --- a/src/main/resources/assets/hbm/manual/material/steel.json +++ b/src/main/resources/assets/hbm/manual/material/steel.json @@ -9,7 +9,7 @@ "zh_CN": "钢" }, "content": { - "en_US": "Upgraded version of iron, basic material. Used in almost everything. Initially obtained by combining coal and iron in a [[blast furnace|Blast Furnace]]. Upgraded recipes are available later on via [[crucible|Crucible]] and [[rotary furnace|Rotary Furnace]].", + "en_US": "Upgraded version of iron, basic material. Used in almost everything. Initially obtained by combining sand, coal and iron in a [[blast furnace|Blast Furnace]]. Upgraded recipes are available later on via [[crucible|Crucible]] and [[rotary furnace|Rotary Furnace]].", "uk_UA": "Покращена версія заліза, базовий матеріал. Використовується майже в усьому. Спочатку отримується шляхом поєднання вугілля та заліза в [[доменній печі|Blast Furnace]]. Покращені рецепти доступні пізніше в [[ливарні|Crucible]] та [[роторній печі|Rotary Furnace]].", "ru_RU": "Улучшенная версия железа, базовый материал. Используется почти во всем. Изначально получается путём комбинирования угля и железа в [[доменной печи|Blast Furnace]]. Улучшенные рецепты доступны позже через [[тигель|Crucible]] и [[роторную печь|Rotary Furnace]].", "zh_CN": "铁的升级版,是一种基础金属,几乎所有东西都要用到钢。最初可通过在[[高炉|Blast Furnace]]中混合煤炭和铁获取,而之后也有通过[[坩埚|Crucible]]和[[回转炉|Rotary Furnace]]制作的高级配方。"