From 4482e1099994b5de42f7873631d6311b921a20c9 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 27 Aug 2023 19:29:37 +0200 Subject: [PATCH] the malicious gigglefish from the silly dimension --- changelog | 12 ++++ gradle.properties | 8 +-- src/main/java/com/hbm/blocks/ModBlocks.java | 43 ++++++------- .../com/hbm/blocks/bomb/ExplosiveCharge.java | 9 +-- .../java/com/hbm/blocks/bomb/NukeBoy.java | 1 - .../java/com/hbm/blocks/bomb/NukeCustom.java | 10 +-- .../java/com/hbm/blocks/bomb/NukeGadget.java | 11 +--- .../java/com/hbm/blocks/bomb/NukeMan.java | 9 +-- .../java/com/hbm/blocks/bomb/NukeMike.java | 9 +-- src/main/java/com/hbm/blocks/bomb/NukeN2.java | 9 +-- .../java/com/hbm/blocks/bomb/NukeTsar.java | 13 +--- .../hbm/blocks/generic/BlockBedrockOre.java | 51 --------------- .../com/hbm/blocks/generic/BlockHazard.java | 1 + .../hbm/blocks/generic/BlockSellafield.java | 17 ++--- .../hbm/blocks/machine/BlockFluidBarrel.java | 1 - .../blocks/machine/MachineBigAssTank9000.java | 1 - .../com/hbm/blocks/machine/MachineFan.java | 9 ++- .../hbm/blocks/machine/MachineFluidTank.java | 1 - .../hbm/blocks/machine/PistonInserter.java | 10 ++- .../hbm/blocks/network/BlockConveyorBase.java | 11 +++- .../hbm/blocks/network/BlockCraneBase.java | 9 ++- .../com/hbm/blocks/network/CraneRouter.java | 13 ++-- .../com/hbm/blocks/network/CraneSplitter.java | 11 +++- .../java/com/hbm/blocks/test/TestCore.java | 9 +-- .../entity/effect/EntityNukeCloudSmall.java | 1 + .../hbm/entity/effect/EntityNukeTorex.java | 57 +++++++++++++---- .../com/hbm/entity/missile/EntityMIRV.java | 9 +-- .../entity/missile/EntityMissileCustom.java | 15 ++--- .../hbm/entity/missile/EntityMissileMirv.java | 9 +-- .../entity/missile/EntityMissileNuclear.java | 9 +-- .../hbm/entity/projectile/EntityModBeam.java | 4 +- .../explosion/ExplosionNukeRayBatched.java | 9 ++- .../container/ContainerNukeTsar.java | 55 +++++++---------- .../com/hbm/inventory/gui/GUINukeTsar.java | 35 +++++++---- .../inventory/recipes/AssemblerRecipes.java | 11 +--- .../recipes/ElectrolyserFluidRecipes.java | 3 +- .../java/com/hbm/items/armor/ItemModLens.java | 1 - .../java/com/hbm/items/tool/ItemWandD.java | 1 + .../com/hbm/items/tool/WeaponSpecial.java | 9 +-- .../com/hbm/items/weapon/ItemAmmoArty.java | 8 +-- src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../java/com/hbm/main/CraftingManager.java | 2 - src/main/java/com/hbm/main/MainRegistry.java | 1 + .../com/hbm/main/ModEventHandlerClient.java | 1 - .../tileentity/bomb/TileEntityLaunchPad.java | 2 - .../bomb/TileEntityNukeBalefire.java | 4 +- .../tileentity/bomb/TileEntityNukeN45.java | 9 +-- .../machine/TileEntityPWRController.java | 2 +- .../machine/TileEntityStorageDrum.java | 15 +++-- .../machine/storage/TileEntityBarrel.java | 1 - .../storage/TileEntityMachineFluidTank.java | 1 - .../java/com/hbm/world/feature/BiomeCave.java | 4 +- .../java/com/hbm/world/feature/DeepLayer.java | 4 +- .../java/com/hbm/world/feature/OreCave.java | 4 +- .../java/com/hbm/world/feature/OreLayer.java | 4 +- .../com/hbm/world/feature/OreLayer3D.java | 4 +- .../com/hbm/world/feature/SchistStratum.java | 4 +- src/main/resources/assets/hbm/lang/de_DE.lang | 38 +++++++++++- src/main/resources/assets/hbm/lang/en_US.lang | 58 +++++++++++------- .../textures/gui/weapon/ivyMikeSchematic.png | Bin 16860 -> 16183 bytes .../gui/weapon/tsarBombaSchematic.png | Bin 2706 -> 9652 bytes 61 files changed, 340 insertions(+), 334 deletions(-) delete mode 100644 src/main/java/com/hbm/blocks/generic/BlockBedrockOre.java diff --git a/changelog b/changelog index 9862d630b0..8e2b10e3a4 100644 --- a/changelog +++ b/changelog @@ -4,6 +4,7 @@ * Has some design similarities with the RBMK, but in 3D * Relatively easy to build and safe to operate * Does not use any tile entity rendering and all math is pre-calculated when the reactor is assembled, making this one even more performant than the old large reactor + * Balancing might change, so keep that in mind when updating in the future * Sodalite * A gem that can be extracted from fluorite or lapis ore * Can be heated in the combination oven to make sodium and chlorine @@ -27,6 +28,16 @@ * Fluorite ore is now centrifugable * Fluorite crystals now centrifuge into slightly less fluorite but also yield sodalite * Blast resistance values for most resistant blocks have been changed, most blocks now have much lower resistance which means there's now a practical difference between concrete and ducrete. Resistance values also match the block's cost more closely. +* Using a screwdriver, the input and output sides of conveyor cranes (inserters, ejectors, etc) can now be configured, allowing them to operate around corners +* Sandstone's blast resistance is now as high as stone's, but only against nuclear explosions +* The tsar bomba model has been updated +* The nuclear explosion animation has been replaced with the TOREX system, instead of a static model that moves around, the mushroom clouds are now made of simulated particles +* Sellafite now uses random ticks instead of scheduled ticks every second, while this does reduce its radioactivity quite a bit, it prevents the tick queue from slowing down to a crawl with large amounts of sellafite from nuclear explosions +* Conveyor blocks now have tooltips explaining what they do and how they can be configured +* The large reactor still works despite the PWR being added, but the parts have been made uncraftable +* Unused watz parts have been hidden from the creative inventory +* Removed the bedrok coltan ore, since it was replaced by generic bedrock ores anyway +* Updated decal on the congo lake grenade launcher ## Fixed * Fixed FEnSU's IO limit not working properly @@ -40,3 +51,4 @@ * Corium is now a finite fluid, fixing an issue where a single fuel rod can be used to create a giant blob of corium, lagging out the server * Fixed bullets not being able to pass things like tall grass * Whether the player has received a guide book is now saved as part of the extprop which might fix an issue where offline mode players get a new book on every start +* Fixed electrolyser fluid recipes not showing the input amount diff --git a/gradle.properties b/gradle.properties index e8d6592228..962c3fabf7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=4690 +mod_build_number=4704 credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion algorithms),\ \ Hoboy (textures, models), Doctor17 (russian localization), Drillgon200 (effects, models,\ @@ -8,11 +8,11 @@ credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion al \ (chinese localization), Frooz (models), Minecreep (models), VT-6/24 (models, textures), Pheo (textures,\ \ various machines, models, weapons), V�r (gas centrifuges, better worldgen, ZIRNOX, CP-1 parts, starter guide),\ \ Adam29 (liquid petroleum, ethanol, electric furnace), Pashtet (russian localization), MartinTheDragon\ - \ (calculator, chunk-based fallout), haru315 (spiral point algorithm), Sten89 (models), Pixelguru26\ - \ (textures), TheBlueHat (textures), Alcater (GUI textures, porting), impbk2002 (project settings),\ + \ (calculator, chunk-based fallout, bendable cranes), haru315 (spiral point algorithm), Sten89 (models), Pixelguru26\ + \ (textures), TheBlueHat (textures), Alcater (GUI textures, porting), impbk2002 (project settings), Nos (models),\ \ Burningwater202 (laminate glass), OvermindDL1 (project settings), TehTemmie (reacher radiation function),\ \ Toshayo (satellite loot system, project settings, gradle curse task), Silly541 (config for safe ME drives),\ \ Voxelstice (OpenComputers integration, turbine spinup), BallOfEnergy1 (OpenComputers integration), martemen\ \ (project settings), Pvndols (thorium fuel recipe, gas turbine), JamesH2 (blood mechanics, nitric acid,\ \ particle emitter), sdddddf80 (recipe configs, chinese localization, custom machine holograms),\ - \ SuperCraftAlex (tooltips) LePeep (coilgun model, BDCL QC), Maksymisio (polish localization) + \ SuperCraftAlex (tooltips) LePeep (coilgun model, BDCL QC), 70k (textures), Maksymisio (polish localization) diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 72da339573..dd5bf106ab 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -88,8 +88,6 @@ public static void mainRegistry() public static Block ore_bedrock; public static Block ore_volcano; - public static Block ore_bedrock_coltan; - public static Block ore_nether_coal; public static Block ore_nether_smoldering; public static Block ore_nether_uranium; @@ -1398,8 +1396,6 @@ private static void initializeBlock() { ore_cinnebar = new BlockOre(Material.rock).setBlockName("ore_cinnebar").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_cinnebar"); ore_coltan = new BlockOre(Material.rock).setBlockName("ore_coltan").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_coltan"); - ore_bedrock_coltan = new BlockBedrockOre().setBlockName("ore_bedrock_coltan").setCreativeTab(null).setBlockUnbreakable().setResistance(1_000_000).setBlockTextureName(RefStrings.MODID + ":ore_bedrock_coltan"); - ore_oil = new BlockOre(Material.rock).setBlockName("ore_oil").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_oil"); ore_oil_empty = new BlockGeneric(Material.rock).setBlockName("ore_oil_empty").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_oil_empty"); ore_oil_sand = new BlockFalling(Material.sand).setBlockName("ore_oil_sand").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeSand).setHardness(0.5F).setResistance(1.0F).setBlockTextureName(RefStrings.MODID + ":ore_oil_sand_alt"); @@ -1579,7 +1575,7 @@ private static void initializeBlock() { brick_concrete_cracked = new BlockGeneric(Material.rock).setBlockName("brick_concrete_cracked").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(60.0F).setBlockTextureName(RefStrings.MODID + ":brick_concrete_cracked"); brick_concrete_broken = new BlockGeneric(Material.rock).setBlockName("brick_concrete_broken").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(45.0F).setBlockTextureName(RefStrings.MODID + ":brick_concrete_broken"); brick_concrete_marked = new BlockWriting(Material.rock, RefStrings.MODID + ":brick_concrete").setBlockName("brick_concrete_marked").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(160.0F).setBlockTextureName(RefStrings.MODID + ":brick_concrete_marked"); - brick_obsidian = new BlockGeneric(Material.rock).setBlockName("brick_obsidian").setCreativeTab(MainRegistry.blockTab).setLightOpacity(15).setHardness(15.0F).setResistance(2400.0F).setBlockTextureName(RefStrings.MODID + ":brick_obsidian"); + brick_obsidian = new BlockGeneric(Material.rock).setBlockName("brick_obsidian").setCreativeTab(MainRegistry.blockTab).setLightOpacity(15).setHardness(15.0F).setResistance(120.0F).setBlockTextureName(RefStrings.MODID + ":brick_obsidian"); brick_light = new BlockGeneric(Material.rock).setBlockName("brick_light").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(20.0F).setBlockTextureName(RefStrings.MODID + ":brick_light"); brick_compound = new BlockGeneric(Material.rock).setBlockName("brick_compound").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(400.0F).setBlockTextureName(RefStrings.MODID + ":brick_compound"); cmb_brick = new BlockGeneric(Material.rock).setBlockName("cmb_brick").setCreativeTab(MainRegistry.blockTab).setHardness(25.0F).setResistance(5000.0F).setBlockTextureName(RefStrings.MODID + ":cmb_brick"); @@ -1990,7 +1986,6 @@ private static void initializeBlock() { crane_unboxer = new CraneUnboxer().setBlockName("crane_unboxer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); crane_splitter = new CraneSplitter().setBlockName("crane_splitter").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":crane_side"); fan = new MachineFan().setBlockName("fan").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); - piston_inserter = new PistonInserter().setBlockName("piston_inserter").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); chain = new BlockChain(Material.iron).setBlockName("dungeon_chain").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":chain"); @@ -2082,9 +2077,9 @@ private static void initializeBlock() { watz_control = new BlockPillar(Material.iron, RefStrings.MODID + ":watz_control_top").setBlockName("watz_control").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_control_side"); watz_cooler = new BlockPillar(Material.iron, RefStrings.MODID + ":watz_cooler_top").setBlockName("watz_cooler").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_cooler_side"); watz_end = new BlockToolConversion(Material.iron).addVariant("_bolted").setBlockName("watz_end").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_casing"); - watz_hatch = new WatzHatch(Material.iron).setBlockName("watz_hatch").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_hatch"); - watz_conductor = new BlockCableConnect(Material.iron).setBlockName("watz_conductor").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_conductor_top"); - watz_core = new WatzCore(Material.iron).setBlockName("watz_core").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_computer"); + watz_hatch = new WatzHatch(Material.iron).setBlockName("watz_hatch").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":watz_hatch"); + watz_conductor = new BlockCableConnect(Material.iron).setBlockName("watz_conductor").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":watz_conductor_top"); + watz_core = new WatzCore(Material.iron).setBlockName("watz_core").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":watz_computer"); watz = new Watz().setBlockName("watz").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); watz_pump = new WatzPump().setBlockName("watz_pump").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); @@ -2485,7 +2480,6 @@ private static void registerBlock() { GameRegistry.registerBlock(cluster_copper, ItemBlockBase.class, cluster_copper.getUnlocalizedName()); //Bedrock ores - GameRegistry.registerBlock(ore_bedrock_coltan, ore_bedrock_coltan.getUnlocalizedName()); GameRegistry.registerBlock(ore_bedrock_oil, ore_bedrock_oil.getUnlocalizedName()); //Nice Meme @@ -3233,21 +3227,20 @@ private static void registerBlock() { register(radio_torch_receiver); register(radio_torch_counter); - GameRegistry.registerBlock(crane_extractor, crane_extractor.getUnlocalizedName()); - GameRegistry.registerBlock(crane_inserter, crane_inserter.getUnlocalizedName()); - GameRegistry.registerBlock(crane_grabber, crane_grabber.getUnlocalizedName()); - GameRegistry.registerBlock(crane_router, crane_router.getUnlocalizedName()); - GameRegistry.registerBlock(crane_boxer, crane_boxer.getUnlocalizedName()); - GameRegistry.registerBlock(crane_unboxer, crane_unboxer.getUnlocalizedName()); - GameRegistry.registerBlock(conveyor, conveyor.getUnlocalizedName()); - GameRegistry.registerBlock(conveyor_double, conveyor_double.getUnlocalizedName()); - GameRegistry.registerBlock(conveyor_triple, conveyor_triple.getUnlocalizedName()); - GameRegistry.registerBlock(conveyor_chute, conveyor_chute.getUnlocalizedName()); - GameRegistry.registerBlock(conveyor_lift, conveyor_lift.getUnlocalizedName()); - GameRegistry.registerBlock(crane_splitter, crane_splitter.getUnlocalizedName()); - GameRegistry.registerBlock(fan, fan.getUnlocalizedName()); - - GameRegistry.registerBlock(piston_inserter, piston_inserter.getUnlocalizedName()); + register(crane_extractor); + register(crane_inserter); + register(crane_grabber); + register(crane_router); + register(crane_boxer); + register(crane_unboxer); + register(conveyor); + register(conveyor_double); + register(conveyor_triple); + register(conveyor_chute); + register(conveyor_lift); + register(crane_splitter); + register(fan); + register(piston_inserter); GameRegistry.registerBlock(chain, chain.getUnlocalizedName()); GameRegistry.registerBlock(ladder_sturdy, ladder_sturdy.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/bomb/ExplosiveCharge.java b/src/main/java/com/hbm/blocks/bomb/ExplosiveCharge.java index f3d5f88e8a..262f4be366 100644 --- a/src/main/java/com/hbm/blocks/bomb/ExplosiveCharge.java +++ b/src/main/java/com/hbm/blocks/bomb/ExplosiveCharge.java @@ -2,7 +2,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.config.BombConfig; -import com.hbm.entity.effect.EntityNukeCloudSmall; +import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.entity.logic.EntityNukeExplosionMK5; import com.hbm.explosion.ExplosionLarge; import com.hbm.explosion.ExplosionNT; @@ -78,12 +78,7 @@ public BombReturnCode explode(World world, int x, int y, int z) { } if(this == ModBlocks.det_nuke) { world.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(world, BombConfig.missileRadius, x + 0.5, y + 0.5, z + 0.5)); - - EntityNukeCloudSmall entity2 = new EntityNukeCloudSmall(world, 1000, BombConfig.missileRadius * 0.005F); - entity2.posX = x; - entity2.posY = y; - entity2.posZ = z; - world.spawnEntityInWorld(entity2); + EntityNukeTorex.statFac(world, x + 0.5, y + 0.5, z + 0.5, BombConfig.missileRadius); } } diff --git a/src/main/java/com/hbm/blocks/bomb/NukeBoy.java b/src/main/java/com/hbm/blocks/bomb/NukeBoy.java index d25f59ace1..c6b96a4768 100644 --- a/src/main/java/com/hbm/blocks/bomb/NukeBoy.java +++ b/src/main/java/com/hbm/blocks/bomb/NukeBoy.java @@ -4,7 +4,6 @@ import com.hbm.blocks.ModBlocks; import com.hbm.config.BombConfig; -import com.hbm.entity.effect.EntityNukeCloudSmall; import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.entity.logic.EntityNukeExplosionMK5; import com.hbm.interfaces.IBomb; diff --git a/src/main/java/com/hbm/blocks/bomb/NukeCustom.java b/src/main/java/com/hbm/blocks/bomb/NukeCustom.java index a00b74d566..ebc21403eb 100644 --- a/src/main/java/com/hbm/blocks/bomb/NukeCustom.java +++ b/src/main/java/com/hbm/blocks/bomb/NukeCustom.java @@ -4,7 +4,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.entity.effect.EntityCloudFleija; -import com.hbm.entity.effect.EntityNukeCloudSmall; +import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.entity.grenade.EntityGrenadeZOMG; import com.hbm.entity.logic.EntityBalefire; import com.hbm.entity.logic.EntityNukeExplosionMK3; @@ -169,7 +169,7 @@ public static void explodeCustom(World worldObj, double xCoord, double yCoord, d bf.setPosition(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5); bf.destructionRange = (int) amat; worldObj.spawnEntityInWorld(bf); - worldObj.spawnEntityInWorld(EntityNukeCloudSmall.statFacBale(worldObj, xCoord + 0.5, yCoord + 5, zCoord + 0.5, amat * 1.5F, 1000)); + EntityNukeTorex.statFacBale(worldObj, xCoord + 0.5, yCoord + 5, zCoord + 0.5, amat); /// HYDROGEN /// } else if(hydro > 0) { @@ -179,7 +179,7 @@ public static void explodeCustom(World worldObj, double xCoord, double yCoord, d dirty *= 0.25F; worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, (int)hydro, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5).moreFallout((int)dirty)); - worldObj.spawnEntityInWorld(EntityNukeCloudSmall.statFac(worldObj, xCoord + 0.5, yCoord + 5, zCoord + 0.5, hydro)); + EntityNukeTorex.statFac(worldObj, xCoord + 0.5, yCoord + 5, zCoord + 0.5, hydro); /// NUCLEAR /// } else if(nuke > 0) { @@ -188,7 +188,7 @@ public static void explodeCustom(World worldObj, double xCoord, double yCoord, d nuke = Math.min(nuke, maxNuke); worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, (int)nuke, xCoord + 0.5, yCoord + 5, zCoord + 0.5).moreFallout((int)dirty)); - worldObj.spawnEntityInWorld(EntityNukeCloudSmall.statFac(worldObj, xCoord + 0.5, yCoord + 5, zCoord + 0.5, nuke)); + EntityNukeTorex.statFac(worldObj, xCoord + 0.5, yCoord + 5, zCoord + 0.5, nuke); /// NON-NUCLEAR /// } else if(tnt >= 75) { @@ -196,7 +196,7 @@ public static void explodeCustom(World worldObj, double xCoord, double yCoord, d tnt = Math.min(tnt, maxTnt); worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFacNoRad(worldObj, (int)tnt, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5)); - worldObj.spawnEntityInWorld(EntityNukeCloudSmall.statFac(worldObj, xCoord + 0.5, yCoord + 5, zCoord + 0.5, tnt)); + EntityNukeTorex.statFac(worldObj, xCoord + 0.5, yCoord + 5, zCoord + 0.5, tnt); } else if(tnt > 0) { ExplosionLarge.explode(worldObj, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, tnt, true, true, true); diff --git a/src/main/java/com/hbm/blocks/bomb/NukeGadget.java b/src/main/java/com/hbm/blocks/bomb/NukeGadget.java index 9c555b1327..a09d7c31fe 100644 --- a/src/main/java/com/hbm/blocks/bomb/NukeGadget.java +++ b/src/main/java/com/hbm/blocks/bomb/NukeGadget.java @@ -4,7 +4,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.config.BombConfig; -import com.hbm.entity.effect.EntityNukeCloudSmall; +import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.entity.logic.EntityNukeExplosionMK5; import com.hbm.interfaces.IBomb; import com.hbm.main.MainRegistry; @@ -130,13 +130,8 @@ public boolean igniteTestBomb(World world, int x, int y, int z) { tetn.clearSlots(); world.playSoundEffect(x, y, z, "random.explode", 1.0f, world.rand.nextFloat() * 0.1F + 0.9F); - world.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(world, BombConfig.gadgetRadius, x + 0.5, y + 0.5, z + 0.5)); - - EntityNukeCloudSmall entity2 = new EntityNukeCloudSmall(world, 1000, BombConfig.gadgetRadius * 0.005F); - entity2.posX = x; - entity2.posY = y; - entity2.posZ = z; - world.spawnEntityInWorld(entity2); + world.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(world, BombConfig.gadgetRadius, x + 0.5, y + 0.5, z + 0.5)); + EntityNukeTorex.statFac(world, x + 0.5, y + 0.5, z + 0.5, BombConfig.gadgetRadius); } return false; diff --git a/src/main/java/com/hbm/blocks/bomb/NukeMan.java b/src/main/java/com/hbm/blocks/bomb/NukeMan.java index 9f8a8b9416..d9fc4f1a56 100644 --- a/src/main/java/com/hbm/blocks/bomb/NukeMan.java +++ b/src/main/java/com/hbm/blocks/bomb/NukeMan.java @@ -4,7 +4,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.config.BombConfig; -import com.hbm.entity.effect.EntityNukeCloudSmall; +import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.entity.logic.EntityNukeExplosionMK5; import com.hbm.interfaces.IBomb; import com.hbm.main.MainRegistry; @@ -124,12 +124,7 @@ public boolean igniteTestBomb(World world, int x, int y, int z) { world.playSoundEffect(x, y, z, "random.explode", 1.0f, world.rand.nextFloat() * 0.1F + 0.9F); world.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(world, BombConfig.manRadius, x + 0.5, y + 0.5, z + 0.5)); - - EntityNukeCloudSmall entity2 = new EntityNukeCloudSmall(world, 1000, BombConfig.manRadius * 0.005F); - entity2.posX = x; - entity2.posY = y; - entity2.posZ = z; - world.spawnEntityInWorld(entity2); + EntityNukeTorex.statFac(world, x + 0.5, y + 0.5, z + 0.5, BombConfig.manRadius); } return false; diff --git a/src/main/java/com/hbm/blocks/bomb/NukeMike.java b/src/main/java/com/hbm/blocks/bomb/NukeMike.java index 75216a1eb2..84e1787584 100644 --- a/src/main/java/com/hbm/blocks/bomb/NukeMike.java +++ b/src/main/java/com/hbm/blocks/bomb/NukeMike.java @@ -4,7 +4,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.config.BombConfig; -import com.hbm.entity.effect.EntityNukeCloudSmall; +import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.entity.logic.EntityNukeExplosionMK5; import com.hbm.interfaces.IBomb; import com.hbm.main.MainRegistry; @@ -131,12 +131,7 @@ public boolean igniteTestBomb(World world, int x, int y, int z, int r) { world.playSoundEffect(x, y, z, "random.explode", 1.0f, world.rand.nextFloat() * 0.1F + 0.9F); world.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(world, BombConfig.mikeRadius, x + 0.5, y + 0.5, z + 0.5)); - - EntityNukeCloudSmall entity2 = new EntityNukeCloudSmall(world, 1000, r * 0.005F); - entity2.posX = x; - entity2.posY = y; - entity2.posZ = z; - world.spawnEntityInWorld(entity2); + EntityNukeTorex.statFac(world, x + 0.5, y + 0.5, z + 0.5, BombConfig.mikeRadius); } return false; diff --git a/src/main/java/com/hbm/blocks/bomb/NukeN2.java b/src/main/java/com/hbm/blocks/bomb/NukeN2.java index a01f83d251..c65eef0f75 100644 --- a/src/main/java/com/hbm/blocks/bomb/NukeN2.java +++ b/src/main/java/com/hbm/blocks/bomb/NukeN2.java @@ -4,7 +4,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.config.BombConfig; -import com.hbm.entity.effect.EntityNukeCloudSmall; +import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.entity.logic.EntityNukeExplosionMK5; import com.hbm.interfaces.IBomb; import com.hbm.main.MainRegistry; @@ -120,12 +120,7 @@ public boolean igniteTestBomb(World world, int x, int y, int z, int r) { world.playSoundEffect(x, y, z, "random.explode", 1.0f, world.rand.nextFloat() * 0.1F + 0.9F); world.spawnEntityInWorld(EntityNukeExplosionMK5.statFacNoRad(world, r, x + 0.5, y + 0.5, z + 0.5)); - - EntityNukeCloudSmall entity2 = new EntityNukeCloudSmall(world, 1000, r * 0.005F); - entity2.posX = x; - entity2.posY = y; - entity2.posZ = z; - world.spawnEntityInWorld(entity2); + EntityNukeTorex.statFac(world, x + 0.5, y + 0.5, z + 0.5, r); } return false; diff --git a/src/main/java/com/hbm/blocks/bomb/NukeTsar.java b/src/main/java/com/hbm/blocks/bomb/NukeTsar.java index 51514ced24..f064a053ae 100644 --- a/src/main/java/com/hbm/blocks/bomb/NukeTsar.java +++ b/src/main/java/com/hbm/blocks/bomb/NukeTsar.java @@ -4,7 +4,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.config.BombConfig; -import com.hbm.entity.effect.EntityNukeCloudSmall; +import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.entity.logic.EntityNukeExplosionMK5; import com.hbm.interfaces.IBomb; import com.hbm.main.MainRegistry; @@ -127,18 +127,9 @@ public void onNeighborBlockChange(World p_149695_1_, int x, int y, int z, Block public boolean igniteTestBomb(World world, int x, int y, int z, int r) { if(!world.isRemote) { tetn.clearSlots(); - // world.spawnParticle("hugeexplosion", x, y, z, 0, 0, 0); world.playSoundEffect(x, y, z, "random.explode", 1.0f, world.rand.nextFloat() * 0.1F + 0.9F); - world.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(world, r, x + 0.5, y + 0.5, z + 0.5)); - - EntityNukeCloudSmall entity2 = new EntityNukeCloudSmall(world, 1000, r * 0.005F); - entity2.posX = x; - entity2.posY = y; - entity2.posZ = z; - world.spawnEntityInWorld(entity2); - - // ExplosionNukeAdvanced.mush(world, x, y, z); + EntityNukeTorex.statFac(world, x + 0.5, y + 0.5, z + 0.5, r); } return false; diff --git a/src/main/java/com/hbm/blocks/generic/BlockBedrockOre.java b/src/main/java/com/hbm/blocks/generic/BlockBedrockOre.java deleted file mode 100644 index 766f3df311..0000000000 --- a/src/main/java/com/hbm/blocks/generic/BlockBedrockOre.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.hbm.blocks.generic; - -import com.hbm.blocks.ModBlocks; -import com.hbm.items.ModItems; - -import api.hbm.block.IDrillInteraction; -import api.hbm.block.IMiningDrill; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public class BlockBedrockOre extends Block implements IDrillInteraction { - - public BlockBedrockOre() { - super(Material.rock); - } - - @Override - public boolean canBreak(World world, int x, int y, int z, int meta, IMiningDrill drill) { - return drill.getDrillRating() > 70; - } - - @Override - public ItemStack extractResource(World world, int x, int y, int z, int meta, IMiningDrill drill) { - - if(drill.getDrillRating() > 70) - return null; - - Item drop = this.getDrop(); - - if(drop == null) - return null; - - return world.rand.nextInt(50) == 0 ? new ItemStack(drop) : null; - } - - @Override - public float getRelativeHardness(World world, int x, int y, int z, int meta, IMiningDrill drill) { - return 30; - } - - private Item getDrop() { - - if(this == ModBlocks.ore_bedrock_coltan) - return ModItems.fragment_coltan; - - return null; - } -} diff --git a/src/main/java/com/hbm/blocks/generic/BlockHazard.java b/src/main/java/com/hbm/blocks/generic/BlockHazard.java index 94008085f4..b3bdfc1459 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockHazard.java +++ b/src/main/java/com/hbm/blocks/generic/BlockHazard.java @@ -138,6 +138,7 @@ public int tickRate(World world) { public void onBlockAdded(World world, int x, int y, int z) { super.onBlockAdded(world, x, y, z); + // who wrote this??? rad = HazardSystem.getHazardLevelFromStack(new ItemStack(this), HazardRegistry.RADIATION) * 0.1F; if(this.rad > 0) diff --git a/src/main/java/com/hbm/blocks/generic/BlockSellafield.java b/src/main/java/com/hbm/blocks/generic/BlockSellafield.java index 2f4a618c35..03c53b9f45 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockSellafield.java +++ b/src/main/java/com/hbm/blocks/generic/BlockSellafield.java @@ -29,6 +29,8 @@ public class BlockSellafield extends BlockHazard { public BlockSellafield(Material mat) { super(mat); this.setCreativeTab(MainRegistry.blockTab); + this.needsRandomTick = true; + this.rad = 0.5F; } @Override @@ -41,19 +43,20 @@ public void onEntityWalking(World world, int x, int y, int z, Entity entity) { @Override public void updateTick(World world, int x, int y, int z, Random rand) { - - ChunkRadiationManager.proxy.incrementRad(world, x, y, z, this.rad); - + int meta = world.getBlockMetadata(x, y, z); - if(rand.nextInt(meta == 0 ? 30 * 60 : 15 * 60) == 0) { + ChunkRadiationManager.proxy.incrementRad(world, x, y, z, this.rad * (meta + 1)); + + if(rand.nextInt(meta == 0 ? 25 : 15) == 0) { if(meta > 0) world.setBlockMetadataWithNotify(x, y, z, meta - 1, 2); else world.setBlock(x, y, z, ModBlocks.sellafield_slaked); } - - world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world)); } + + @Override public void onBlockAdded(World world, int x, int y, int z) { } + @SideOnly(Side.CLIENT) protected IIcon[] icons; @@ -86,6 +89,4 @@ public void registerBlockIcons(IIconRegister iconRegister) { public IIcon getIcon(int side, int meta) { return this.icons[meta % this.icons.length]; } - - } diff --git a/src/main/java/com/hbm/blocks/machine/BlockFluidBarrel.java b/src/main/java/com/hbm/blocks/machine/BlockFluidBarrel.java index 1798b5b599..7444f30f1a 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockFluidBarrel.java +++ b/src/main/java/com/hbm/blocks/machine/BlockFluidBarrel.java @@ -12,7 +12,6 @@ import com.hbm.main.MainRegistry; import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.machine.storage.TileEntityBarrel; -import com.hbm.tileentity.machine.storage.TileEntityMachineFluidTank; import com.hbm.util.I18nUtil; import cpw.mods.fml.client.registry.RenderingRegistry; diff --git a/src/main/java/com/hbm/blocks/machine/MachineBigAssTank9000.java b/src/main/java/com/hbm/blocks/machine/MachineBigAssTank9000.java index 782bc09ee2..54aecbef7e 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineBigAssTank9000.java +++ b/src/main/java/com/hbm/blocks/machine/MachineBigAssTank9000.java @@ -12,7 +12,6 @@ import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.storage.TileEntityMachineBAT9000; -import com.hbm.tileentity.machine.storage.TileEntityMachineFluidTank; import com.hbm.util.I18nUtil; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; diff --git a/src/main/java/com/hbm/blocks/machine/MachineFan.java b/src/main/java/com/hbm/blocks/machine/MachineFan.java index 6a37de202b..37a96e5f8d 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineFan.java +++ b/src/main/java/com/hbm/blocks/machine/MachineFan.java @@ -2,6 +2,8 @@ import java.util.List; +import com.hbm.blocks.ITooltipProvider; + import api.hbm.block.IBlowable; import api.hbm.block.IToolable; import cpw.mods.fml.relauncher.Side; @@ -20,7 +22,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class MachineFan extends BlockContainer implements IToolable { +public class MachineFan extends BlockContainer implements IToolable, ITooltipProvider { public MachineFan() { super(Material.iron); @@ -142,4 +144,9 @@ public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, in return true; } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + this.addStandardInfo(stack, player, list, ext); + } } diff --git a/src/main/java/com/hbm/blocks/machine/MachineFluidTank.java b/src/main/java/com/hbm/blocks/machine/MachineFluidTank.java index f6d487718d..e24b468472 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineFluidTank.java +++ b/src/main/java/com/hbm/blocks/machine/MachineFluidTank.java @@ -14,7 +14,6 @@ import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.IRepairable; import com.hbm.tileentity.TileEntityProxyCombo; -import com.hbm.tileentity.machine.storage.TileEntityMachineBattery; import com.hbm.tileentity.machine.storage.TileEntityMachineFluidTank; import com.hbm.util.I18nUtil; diff --git a/src/main/java/com/hbm/blocks/machine/PistonInserter.java b/src/main/java/com/hbm/blocks/machine/PistonInserter.java index 91e3e25b12..8b95fed922 100644 --- a/src/main/java/com/hbm/blocks/machine/PistonInserter.java +++ b/src/main/java/com/hbm/blocks/machine/PistonInserter.java @@ -1,6 +1,9 @@ package com.hbm.blocks.machine; +import java.util.List; + import com.hbm.blocks.BlockContainerBase; +import com.hbm.blocks.ITooltipProvider; import com.hbm.tileentity.INBTPacketReceiver; import api.hbm.block.IInsertable; @@ -21,7 +24,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class PistonInserter extends BlockContainerBase { +public class PistonInserter extends BlockContainerBase implements ITooltipProvider { public PistonInserter() { super(Material.iron); @@ -383,4 +386,9 @@ public void setInventorySlotContents(int slot, ItemStack stack) { @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { return true; } } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + this.addStandardInfo(stack, player, list, ext); + } } diff --git a/src/main/java/com/hbm/blocks/network/BlockConveyorBase.java b/src/main/java/com/hbm/blocks/network/BlockConveyorBase.java index 62a8a2b558..44ce478393 100644 --- a/src/main/java/com/hbm/blocks/network/BlockConveyorBase.java +++ b/src/main/java/com/hbm/blocks/network/BlockConveyorBase.java @@ -1,5 +1,8 @@ package com.hbm.blocks.network; +import java.util.List; + +import com.hbm.blocks.ITooltipProvider; import com.hbm.entity.item.EntityMovingItem; import com.hbm.lib.RefStrings; @@ -13,6 +16,7 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.IIcon; @@ -22,7 +26,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public abstract class BlockConveyorBase extends Block implements IConveyorBelt { +public abstract class BlockConveyorBase extends Block implements IConveyorBelt, ITooltipProvider { @SideOnly(Side.CLIENT) protected IIcon sideIcon; @@ -159,4 +163,9 @@ public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase p world.setBlockMetadataWithNotify(x, y, z, 4, 2); } } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + this.addStandardInfo(stack, player, list, ext); + } } diff --git a/src/main/java/com/hbm/blocks/network/BlockCraneBase.java b/src/main/java/com/hbm/blocks/network/BlockCraneBase.java index 577ceb6140..ef73c5f4fd 100644 --- a/src/main/java/com/hbm/blocks/network/BlockCraneBase.java +++ b/src/main/java/com/hbm/blocks/network/BlockCraneBase.java @@ -2,6 +2,7 @@ import api.hbm.block.IToolable; import com.hbm.blocks.IBlockSideRotation; +import com.hbm.blocks.ITooltipProvider; import com.hbm.items.tool.ItemTooling; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; @@ -27,9 +28,10 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +import java.util.List; import java.util.Random; -public abstract class BlockCraneBase extends BlockContainer implements IBlockSideRotation, IToolable { +public abstract class BlockCraneBase extends BlockContainer implements IBlockSideRotation, IToolable, ITooltipProvider { @SideOnly(Side.CLIENT) protected IIcon iconSide; @SideOnly(Side.CLIENT) protected IIcon iconIn; @@ -304,4 +306,9 @@ public void dropContents(World world, int x, int y, int z, Block block, int meta super.breakBlock(world, x, y, z, block, meta); } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + this.addStandardInfo(stack, player, list, ext); + } } diff --git a/src/main/java/com/hbm/blocks/network/CraneRouter.java b/src/main/java/com/hbm/blocks/network/CraneRouter.java index 06dc1769f0..a89d2a695d 100644 --- a/src/main/java/com/hbm/blocks/network/CraneRouter.java +++ b/src/main/java/com/hbm/blocks/network/CraneRouter.java @@ -4,6 +4,7 @@ import java.util.List; import com.hbm.blocks.IBlockMultiPass; +import com.hbm.blocks.ITooltipProvider; import com.hbm.entity.item.EntityMovingItem; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; @@ -32,7 +33,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class CraneRouter extends BlockContainer implements IBlockMultiPass, IEnterableBlock { +public class CraneRouter extends BlockContainer implements IBlockMultiPass, IEnterableBlock, ITooltipProvider { @SideOnly(Side.CLIENT) protected IIcon iconOverlay; @@ -194,11 +195,11 @@ protected void sendOnRoute(World world, int x, int y, int z, IConveyorItem item, } } - @Override - public boolean canPackageEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorPackage entity) { - return false; - } + @Override public boolean canPackageEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorPackage entity) { return false; } + @Override public void onPackageEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorPackage entity) { } @Override - public void onPackageEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorPackage entity) { } + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + this.addStandardInfo(stack, player, list, ext); + } } diff --git a/src/main/java/com/hbm/blocks/network/CraneSplitter.java b/src/main/java/com/hbm/blocks/network/CraneSplitter.java index 11de7afda0..a39396fb03 100644 --- a/src/main/java/com/hbm/blocks/network/CraneSplitter.java +++ b/src/main/java/com/hbm/blocks/network/CraneSplitter.java @@ -1,6 +1,9 @@ package com.hbm.blocks.network; +import java.util.List; + import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ITooltipProvider; import com.hbm.entity.item.EntityMovingItem; import com.hbm.lib.RefStrings; import com.hbm.tileentity.network.TileEntityCraneSplitter; @@ -14,6 +17,7 @@ import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; @@ -22,7 +26,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class CraneSplitter extends BlockDummyable implements IConveyorBelt, IEnterableBlock { +public class CraneSplitter extends BlockDummyable implements IConveyorBelt, IEnterableBlock, ITooltipProvider { @SideOnly(Side.CLIENT) public IIcon iconTopLeft; @SideOnly(Side.CLIENT) public IIcon iconTopRight; @@ -154,4 +158,9 @@ public ForgeDirection getTravelDirection(World world, int x, int y, int z, Vec3 if(meta >= 12) return ForgeDirection.getOrientation(meta - offset); return ForgeDirection.getOrientation(meta).getRotation(ForgeDirection.UP); } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + this.addStandardInfo(stack, player, list, ext); + } } diff --git a/src/main/java/com/hbm/blocks/test/TestCore.java b/src/main/java/com/hbm/blocks/test/TestCore.java index ff070e919d..049f7eae99 100644 --- a/src/main/java/com/hbm/blocks/test/TestCore.java +++ b/src/main/java/com/hbm/blocks/test/TestCore.java @@ -3,7 +3,7 @@ import java.util.Random; import com.hbm.config.BombConfig; -import com.hbm.entity.effect.EntityNukeCloudSmall; +import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.entity.logic.EntityNukeExplosionMK5; import net.minecraft.block.Block; @@ -27,12 +27,7 @@ public void updateTick(World world, int x, int y, int z, Random rand) { world.setBlockToAir(x, y, z); world.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(world, BombConfig.missileRadius, x + 0.5, y + 0.5, z + 0.5)); - - EntityNukeCloudSmall entity2 = new EntityNukeCloudSmall(world, 1000, BombConfig.missileRadius * 0.005F); - entity2.posX = x; - entity2.posY = y; - entity2.posZ = z; - world.spawnEntityInWorld(entity2); + EntityNukeTorex.statFac(world, x + 0.5, y + 0.5, z + 0.5, BombConfig.missileRadius); } else if(meta > 0) { diff --git a/src/main/java/com/hbm/entity/effect/EntityNukeCloudSmall.java b/src/main/java/com/hbm/entity/effect/EntityNukeCloudSmall.java index b2794a939c..2aee5b3493 100644 --- a/src/main/java/com/hbm/entity/effect/EntityNukeCloudSmall.java +++ b/src/main/java/com/hbm/entity/effect/EntityNukeCloudSmall.java @@ -9,6 +9,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; +@Deprecated public class EntityNukeCloudSmall extends Entity { public int maxAge = 1000; diff --git a/src/main/java/com/hbm/entity/effect/EntityNukeTorex.java b/src/main/java/com/hbm/entity/effect/EntityNukeTorex.java index be72b5c8b0..56f2a9f67d 100644 --- a/src/main/java/com/hbm/entity/effect/EntityNukeTorex.java +++ b/src/main/java/com/hbm/entity/effect/EntityNukeTorex.java @@ -2,6 +2,8 @@ import java.util.ArrayList; +import com.hbm.util.TrackerUtil; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.Entity; @@ -34,6 +36,7 @@ public EntityNukeTorex(World world) { @Override protected void entityInit() { this.dataWatcher.addObject(10, new Float(1)); + this.dataWatcher.addObject(11, new Integer(0)); } @Override @@ -60,7 +63,7 @@ public void onUpdate() { lastSpawnY = posY - 3; } - int spawnTarget = worldObj.getHeightValue((int) Math.floor(posX), (int) Math.floor(posZ)) - 3; + int spawnTarget = Math.max(worldObj.getHeightValue((int) Math.floor(posX), (int) Math.floor(posZ)) - 3, 1); double moveSpeed = 0.5D; if(Math.abs(spawnTarget - lastSpawnY) < moveSpeed) { @@ -69,6 +72,7 @@ public void onUpdate() { lastSpawnY += moveSpeed * Math.signum(spawnTarget - lastSpawnY); } + // spawn mush clouds double range = (torusWidth - rollerSize) * 0.25; double simSpeed = getSimulationSpeed(); int toSpawn = (int) Math.ceil(10 * simSpeed * simSpeed); @@ -82,7 +86,8 @@ public void onUpdate() { cloudlets.add(cloud); } - if(ticksExisted < 50) { + // spawn shock clouds + if(ticksExisted < 100) { int cloudCount = ticksExisted * 5; int shockLife = Math.max(300 - ticksExisted * 20, 50); @@ -97,6 +102,7 @@ public void onUpdate() { } } + // spawn ring clouds if(ticksExisted < 200) { for(int i = 0; i < 2; i++) { Cloudlet cloud = new Cloudlet(posX, posY + coreHeight, posZ, (float)(rand.nextDouble() * 2D * Math.PI), 0, lifetime, TorexType.RING); @@ -133,6 +139,11 @@ public EntityNukeTorex setScale(float scale) { return this; } + public EntityNukeTorex setType(int type) { + this.dataWatcher.updateObject(11, type); + return this; + } + public double getSimulationSpeed() { int lifetime = getMaxAge(); @@ -404,11 +415,21 @@ private void updateColor() { dist = Math.max(dist, 1); double col = 2D / dist; - this.color = Vec3.createVectorHelper( - Math.max(col * 2, 0.25), - Math.max(col * 1.5, 0.25), - Math.max(col * 0.5, 0.25) - ); + int type = EntityNukeTorex.this.dataWatcher.getWatchableObjectInt(11); + + if(type == 1) { + this.color = Vec3.createVectorHelper( + Math.max(col * 1, 0.25), + Math.max(col * 2, 0.25), + Math.max(col * 0.5, 0.25) + ); + } else { + this.color = Vec3.createVectorHelper( + Math.max(col * 2, 0.25), + Math.max(col * 1.5, 0.25), + Math.max(col * 0.5, 0.25) + ); + } } public Vec3 getInterpPos(float interp) { @@ -461,15 +482,27 @@ public static enum TorexType { RING } - @Override - protected void readEntityFromNBT(NBTTagCompound nbt) { } - - @Override - protected void writeEntityToNBT(NBTTagCompound nbt) { } + @Override protected void writeEntityToNBT(NBTTagCompound nbt) { } + @Override public boolean writeToNBTOptional(NBTTagCompound nbt) { return false; } + @Override public void readEntityFromNBT(NBTTagCompound nbt) { this.setDead(); } @Override @SideOnly(Side.CLIENT) public boolean isInRangeToRenderDist(double distance) { return true; } + + public static void statFac(World world, double x, double y, double z, float scale) { + EntityNukeTorex torex = new EntityNukeTorex(world).setScale(MathHelper.clamp_float(scale * 0.01F, 0.5F, 5F)); + torex.setPosition(x, y, z); + world.spawnEntityInWorld(torex); + TrackerUtil.setTrackingRange(world, torex, 1000); + } + + public static void statFacBale(World world, double x, double y, double z, float scale) { + EntityNukeTorex torex = new EntityNukeTorex(world).setScale(MathHelper.clamp_float(scale * 0.01F, 0.5F, 5F)).setType(1); + torex.setPosition(x, y, z); + world.spawnEntityInWorld(torex); + TrackerUtil.setTrackingRange(world, torex, 1000); + } } diff --git a/src/main/java/com/hbm/entity/missile/EntityMIRV.java b/src/main/java/com/hbm/entity/missile/EntityMIRV.java index c7aa4b0afc..e5a4054f6d 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMIRV.java +++ b/src/main/java/com/hbm/entity/missile/EntityMIRV.java @@ -1,7 +1,7 @@ package com.hbm.entity.missile; import com.hbm.config.BombConfig; -import com.hbm.entity.effect.EntityNukeCloudSmall; +import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.entity.logic.EntityNukeExplosionMK5; import com.hbm.entity.particle.EntitySmokeFX; @@ -37,12 +37,7 @@ public void onUpdate() { if(this.worldObj.getBlock((int) this.posX, (int) this.posY, (int) this.posZ) != Blocks.air) { if(!this.worldObj.isRemote) { worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.mirvRadius, posX, posY, posZ)); - - EntityNukeCloudSmall entity2 = new EntityNukeCloudSmall(this.worldObj, 1000, BombConfig.mirvRadius * 0.005F); - entity2.posX = this.posX; - entity2.posY = this.posY; - entity2.posZ = this.posZ; - this.worldObj.spawnEntityInWorld(entity2); + EntityNukeTorex.statFac(worldObj, posX, posY, posZ, BombConfig.mirvRadius); } this.setDead(); } diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileCustom.java b/src/main/java/com/hbm/entity/missile/EntityMissileCustom.java index 6deaa70ce3..41841568c6 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileCustom.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileCustom.java @@ -6,6 +6,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.blocks.bomb.BlockTaint; import com.hbm.entity.effect.EntityNukeCloudSmall; +import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.entity.logic.EntityBalefire; import com.hbm.entity.logic.EntityNukeExplosionMK5; import com.hbm.entity.logic.IChunkLoader; @@ -327,11 +328,7 @@ public void onImpact() { case NUCLEAR: case TX: worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, (int) strength, posX, posY, posZ)); - EntityNukeCloudSmall nuke = new EntityNukeCloudSmall(worldObj, 1000, strength * 0.005F); - nuke.posX = posX; - nuke.posY = posY; - nuke.posZ = posZ; - worldObj.spawnEntityInWorld(nuke); + EntityNukeTorex.statFac(worldObj, posX, posY, posZ, strength); break; case BALEFIRE: EntityBalefire bf = new EntityBalefire(worldObj); @@ -340,15 +337,11 @@ public void onImpact() { bf.posZ = this.posZ; bf.destructionRange = (int) strength; worldObj.spawnEntityInWorld(bf); - worldObj.spawnEntityInWorld(EntityNukeCloudSmall.statFacBale(worldObj, posX, posY + 5, posZ, strength * 1.5F, 1000)); + EntityNukeTorex.statFacBale(worldObj, posX, posY, posZ, strength); break; case N2: worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFacNoRad(worldObj, (int) strength, posX, posY, posZ)); - EntityNukeCloudSmall n2 = new EntityNukeCloudSmall(worldObj, 1000, strength * 0.005F); - n2.posX = posX; - n2.posY = posY; - n2.posZ = posZ; - worldObj.spawnEntityInWorld(n2); + EntityNukeTorex.statFac(worldObj, posX, posY, posZ, strength); break; case TAINT: int r = (int) strength; diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileMirv.java b/src/main/java/com/hbm/entity/missile/EntityMissileMirv.java index 627d074a16..e5dbe3db72 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileMirv.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileMirv.java @@ -4,7 +4,7 @@ import java.util.List; import com.hbm.config.BombConfig; -import com.hbm.entity.effect.EntityNukeCloudSmall; +import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.entity.logic.EntityNukeExplosionMK5; import com.hbm.items.ModItems; @@ -25,12 +25,7 @@ public EntityMissileMirv(World world, float x, float y, float z, int a, int b) { public void onImpact() { worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.missileRadius * 2, posX, posY, posZ)); - - EntityNukeCloudSmall entity2 = new EntityNukeCloudSmall(this.worldObj, 1000, BombConfig.missileRadius * 2 * 0.005F); - entity2.posX = this.posX; - entity2.posY = this.posY - 9; - entity2.posZ = this.posZ; - this.worldObj.spawnEntityInWorld(entity2); + EntityNukeTorex.statFac(worldObj, posX, posY, posZ, BombConfig.missileRadius * 2); } @Override diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileNuclear.java b/src/main/java/com/hbm/entity/missile/EntityMissileNuclear.java index 76d2d3e1ee..f7db048604 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileNuclear.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileNuclear.java @@ -4,7 +4,7 @@ import java.util.List; import com.hbm.config.BombConfig; -import com.hbm.entity.effect.EntityNukeCloudSmall; +import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.entity.logic.EntityNukeExplosionMK5; import com.hbm.items.ModItems; @@ -25,12 +25,7 @@ public EntityMissileNuclear(World world, float x, float y, float z, int a, int b public void onImpact() { this.worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.missileRadius, posX, posY, posZ)); - - EntityNukeCloudSmall entity2 = new EntityNukeCloudSmall(this.worldObj, 1000, BombConfig.missileRadius * 0.005F); - entity2.posX = this.posX; - entity2.posY = this.posY; - entity2.posZ = this.posZ; - this.worldObj.spawnEntityInWorld(entity2); + EntityNukeTorex.statFac(worldObj, posX, posY, posZ, BombConfig.missileRadius); } @Override diff --git a/src/main/java/com/hbm/entity/projectile/EntityModBeam.java b/src/main/java/com/hbm/entity/projectile/EntityModBeam.java index b8e8365f92..f8a2e6be7c 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityModBeam.java +++ b/src/main/java/com/hbm/entity/projectile/EntityModBeam.java @@ -5,7 +5,7 @@ import com.hbm.config.BombConfig; import com.hbm.entity.effect.EntityBlackHole; import com.hbm.entity.effect.EntityCloudFleijaRainbow; -import com.hbm.entity.effect.EntityNukeCloudSmall; +import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.entity.effect.EntityRagingVortex; import com.hbm.entity.effect.EntityVortex; import com.hbm.entity.grenade.EntityGrenadeZOMG; @@ -490,7 +490,7 @@ private void explode() { this.worldObj.playSoundEffect(this.posX, this.posY, this.posZ, "random.explode", 100.0f, this.worldObj.rand.nextFloat() * 0.1F + 0.9F); this.worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.gadgetRadius, posX, posY, posZ)); - this.worldObj.spawnEntityInWorld(EntityNukeCloudSmall.statFac(worldObj, posX, posY, posZ, BombConfig.gadgetRadius)); + EntityNukeTorex.statFac(worldObj, posX, posY, posZ, BombConfig.gadgetRadius); } } } diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeRayBatched.java b/src/main/java/com/hbm/explosion/ExplosionNukeRayBatched.java index 8077d7dc68..f66c5f047a 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNukeRayBatched.java +++ b/src/main/java/com/hbm/explosion/ExplosionNukeRayBatched.java @@ -108,7 +108,7 @@ public void collectTip(int count) { Block block = world.getBlock(iX, iY, iZ); if(!block.getMaterial().isLiquid()) - res -= Math.pow(block.getExplosionResistance(null), 7.5D - fac); + res -= Math.pow(masqueradeResistance(block), 7.5D - fac); //else // res -= Math.pow(Blocks.air.getExplosionResistance(null), 7.5D - fac); // air is 0, might want to raise that is necessary @@ -150,6 +150,13 @@ public void collectTip(int count) { isAusf3Complete = true; } + public static float masqueradeResistance(Block block) { + + if(block == Blocks.sandstone) return Blocks.stone.getExplosionResistance(null); + if(block == Blocks.obsidian) return Blocks.stone.getExplosionResistance(null) * 3; + return block.getExplosionResistance(null); + } + /** little comparator for roughly sorting chunks by distance to the center */ public class CoordComparator implements Comparator { diff --git a/src/main/java/com/hbm/inventory/container/ContainerNukeTsar.java b/src/main/java/com/hbm/inventory/container/ContainerNukeTsar.java index aafabe2d59..9877e66f30 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerNukeTsar.java +++ b/src/main/java/com/hbm/inventory/container/ContainerNukeTsar.java @@ -16,59 +16,50 @@ public ContainerNukeTsar(InventoryPlayer invPlayer, TileEntityNukeTsar tedf) { nukeTsar = tedf; - this.addSlotToContainer(new Slot(tedf, 0, 35, 17)); - this.addSlotToContainer(new Slot(tedf, 1, 71, 17)); - this.addSlotToContainer(new Slot(tedf, 2, 35, 53)); - this.addSlotToContainer(new Slot(tedf, 3, 71, 53)); - this.addSlotToContainer(new Slot(tedf, 4, 53, 35)); - this.addSlotToContainer(new Slot(tedf, 5, 98, 35)); + this.addSlotToContainer(new Slot(tedf, 0, 48, 101)); + this.addSlotToContainer(new Slot(tedf, 1, 66, 101)); + this.addSlotToContainer(new Slot(tedf, 2, 84, 101)); + this.addSlotToContainer(new Slot(tedf, 3, 102, 101)); + this.addSlotToContainer(new Slot(tedf, 4, 55, 51)); + this.addSlotToContainer(new Slot(tedf, 5, 138, 101)); - for(int i = 0; i < 3; i++) - { - for(int j = 0; j < 9; j++) - { - this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 9; j++) { + this.addSlotToContainer(new Slot(invPlayer, 9 + j + i * 9, 48 + j * 18, 151 + i * 18)); } } - - for(int i = 0; i < 9; i++) - { - this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 48 + i * 18, 209)); } } @Override - public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) - { + public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) { ItemStack var3 = null; Slot var4 = (Slot) this.inventorySlots.get(par2); - - if (var4 != null && var4.getHasStack()) - { + + if(var4 != null && var4.getHasStack()) { ItemStack var5 = var4.getStack(); var3 = var5.copy(); - - if (par2 <= 5) { - if (!this.mergeItemStack(var5, 6, this.inventorySlots.size(), true)) - { + + if(par2 <= 5) { + if(!this.mergeItemStack(var5, 6, this.inventorySlots.size(), true)) { return null; } } else { return null; } - - if (var5.stackSize == 0) - { + + if(var5.stackSize == 0) { var4.putStack((ItemStack) null); - } - else - { + } else { var4.onSlotChanged(); } } - + return var3; - } + } @Override public boolean canInteractWith(EntityPlayer player) { diff --git a/src/main/java/com/hbm/inventory/gui/GUINukeTsar.java b/src/main/java/com/hbm/inventory/gui/GUINukeTsar.java index e91e91e65c..4d22cde31b 100644 --- a/src/main/java/com/hbm/inventory/gui/GUINukeTsar.java +++ b/src/main/java/com/hbm/inventory/gui/GUINukeTsar.java @@ -8,6 +8,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerNukeTsar; +import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.tileentity.bomb.TileEntityNukeTsar; import com.hbm.util.I18nUtil; @@ -15,14 +16,15 @@ public class GUINukeTsar extends GuiInfoContainer { private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/weapon/tsarBombaSchematic.png"); - private TileEntityNukeTsar testNuke; + private static ResourceLocation textureMike = new ResourceLocation(RefStrings.MODID + ":textures/gui/weapon/ivyMikeSchematic.png"); + private TileEntityNukeTsar tsar; public GUINukeTsar(InventoryPlayer invPlayer, TileEntityNukeTsar tedf) { super(new ContainerNukeTsar(invPlayer, tedf)); - testNuke = tedf; + tsar = tedf; - this.xSize = 176; - this.ySize = 166; + this.xSize = 256; + this.ySize = 233; } @Override @@ -35,10 +37,10 @@ public void drawScreen(int mouseX, int mouseY, float f) { @Override protected void drawGuiContainerForegroundLayer( int i, int j) { - String name = this.testNuke.hasCustomInventoryName() ? this.testNuke.getInventoryName() : I18n.format(this.testNuke.getInventoryName()); + String name = this.tsar.hasCustomInventoryName() ? this.tsar.getInventoryName() : I18n.format(this.tsar.getInventoryName()); this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); - this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 48, this.ySize - 96 + 2, 4210752); } @Override @@ -46,16 +48,23 @@ protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + Minecraft.getMinecraft().getTextureManager().bindTexture(textureMike); - if(testNuke.isReady()) - { - drawTexturedModalRect(guiLeft + 133, guiTop + 34, 176, 0, 16, 16); - } + if(tsar.isFilled()) drawTexturedModalRect(guiLeft + 18, guiTop + 50, 176, 18, 16, 16); + else if(tsar.isReady()) drawTexturedModalRect(guiLeft + 18, guiTop + 50, 176, 0, 16, 16); - if(testNuke.isFilled()) - { - drawTexturedModalRect(guiLeft + 133, guiTop + 34, 176, 18, 16, 16); + for(int i = 0; i < 4; i++) { + if(tsar.getStackInSlot(i) != null && tsar.getStackInSlot(i).getItem() == ModItems.explosive_lenses) switch(i) { + case 0: drawTexturedModalRect(guiLeft + 24 + 16, guiTop + 20 + 16, 209, 1, 23, 23); break; + case 2: drawTexturedModalRect(guiLeft + 47 + 16, guiTop + 20 + 16, 232, 1, 23, 23); break; + case 1: drawTexturedModalRect(guiLeft + 24 + 16, guiTop + 43 + 16, 209, 24, 23, 23); break; + case 3: drawTexturedModalRect(guiLeft + 47 + 16, guiTop + 43 + 16, 232, 24, 23, 23); break; + } } + + if(tsar.getStackInSlot(5) != null && tsar.getStackInSlot(5).getItem() == ModItems.tsar_core) + drawTexturedModalRect(guiLeft + 75 + 16, guiTop + 25 + 16, 176, 220, 80, 36); this.drawInfoPanel(guiLeft - 16, guiTop + 16, 16, 16, 2); } diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 88cbdd9a7c..81d40b76e3 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -391,9 +391,9 @@ private static void registerDefaults() { makeRecipe(new ComparableStack(ModItems.mp_thruster_15_solid_hexdecuple, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.plate(), 6), new OreDictStack(DURA.ingot(), 12), new ComparableStack(ModItems.coil_tungsten, 6), },500); makeRecipe(new ComparableStack(ModItems.mp_thruster_15_hydrogen, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new ComparableStack(ModBlocks.deco_pipe_quad, 1), new OreDictStack(W.ingot(), 8), new OreDictStack(STEEL.plate(), 6), new ComparableStack(ModItems.tank_steel, 1), new OreDictStack(DESH.ingot(), 4), },500); makeRecipe(new ComparableStack(ModItems.mp_thruster_15_hydrogen_dual, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new ComparableStack(ModBlocks.deco_pipe_quad, 1), new OreDictStack(W.ingot(), 4), new OreDictStack(STEEL.plate(), 6), new ComparableStack(ModItems.tank_steel, 1), new OreDictStack(DESH.ingot(), 1), },500); - makeRecipe(new ComparableStack(ModItems.mp_thruster_15_balefire_short, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModBlocks.reactor_element, 1), new OreDictStack(DESH.ingot(), 8), new OreDictStack(BIGMT.plate(), 12), new ComparableStack(ModItems.board_copper, 2), new ComparableStack(ModItems.ingot_uranium_fuel, 4), new ComparableStack(ModItems.pipes_steel, 2), },500); - makeRecipe(new ComparableStack(ModItems.mp_thruster_15_balefire, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModBlocks.reactor_element, 2), new OreDictStack(DESH.ingot(), 16), new OreDictStack(BIGMT.plate(), 24), new ComparableStack(ModItems.board_copper, 4), new ComparableStack(ModItems.ingot_uranium_fuel, 8), new ComparableStack(ModItems.pipes_steel, 2), },500); - makeRecipe(new ComparableStack(ModItems.mp_thruster_15_balefire_large, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModBlocks.reactor_element, 2), new OreDictStack(DESH.ingot(), 24), new OreDictStack(BIGMT.plate(), 32), new ComparableStack(ModItems.board_copper, 4), new ComparableStack(ModItems.ingot_uranium_fuel, 8), new ComparableStack(ModItems.pipes_steel, 2), },500); + makeRecipe(new ComparableStack(ModItems.mp_thruster_15_balefire_short, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModBlocks.pwr_fuel, 1), new OreDictStack(DESH.ingot(), 8), new OreDictStack(BIGMT.plate(), 12), new ComparableStack(ModItems.board_copper, 2), new ComparableStack(ModItems.ingot_uranium_fuel, 4), new ComparableStack(ModItems.pipes_steel, 2), },500); + makeRecipe(new ComparableStack(ModItems.mp_thruster_15_balefire, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModBlocks.pwr_fuel, 2), new OreDictStack(DESH.ingot(), 16), new OreDictStack(BIGMT.plate(), 24), new ComparableStack(ModItems.board_copper, 4), new ComparableStack(ModItems.ingot_uranium_fuel, 8), new ComparableStack(ModItems.pipes_steel, 2), },500); + makeRecipe(new ComparableStack(ModItems.mp_thruster_15_balefire_large, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModBlocks.pwr_fuel, 2), new OreDictStack(DESH.ingot(), 24), new OreDictStack(BIGMT.plate(), 32), new ComparableStack(ModItems.board_copper, 4), new ComparableStack(ModItems.ingot_uranium_fuel, 8), new ComparableStack(ModItems.pipes_steel, 2), },500); makeRecipe(new ComparableStack(ModItems.mp_thruster_20_kerosene, 1), new AStack[] {new ComparableStack(ModItems.seg_20, 1), new ComparableStack(ModBlocks.deco_pipe_quad, 1), new OreDictStack(W.ingot(), 16), new OreDictStack(STEEL.plate(), 12), new OreDictStack(DESH.ingot(), 8), },500); makeRecipe(new ComparableStack(ModItems.mp_thruster_20_kerosene_dual, 1), new AStack[] {new ComparableStack(ModItems.seg_20, 1), new ComparableStack(ModBlocks.deco_pipe_quad, 1), new OreDictStack(W.ingot(), 8), new OreDictStack(STEEL.plate(), 6), new OreDictStack(DESH.ingot(), 4), },500); makeRecipe(new ComparableStack(ModItems.mp_thruster_20_kerosene_triple, 1), new AStack[] {new ComparableStack(ModItems.seg_20, 1), new ComparableStack(ModBlocks.deco_pipe_quad, 1), new OreDictStack(W.ingot(), 12), new OreDictStack(STEEL.plate(), 8), new OreDictStack(DESH.ingot(), 6), },500); @@ -1029,11 +1029,6 @@ private static void registerDefaults() { if(!GeneralConfig.enable528) { makeRecipe(new ComparableStack(ModBlocks.machine_hephaestus, 1), new AStack[] { new ComparableStack(ModItems.pipes_steel, 1), new OreDictStack(STEEL.ingot(), 24), new OreDictStack(CU.plate(), 24), new OreDictStack(NB.ingot(), 4), new OreDictStack(RUBBER.ingot(), 12), new ComparableStack(ModBlocks.glass_quartz, 16) }, 150); - makeRecipe(new ComparableStack(ModBlocks.reactor_element, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 2), new OreDictStack(OreDictManager.getReflector(), 4), new OreDictStack(PB.plate(), 2), new OreDictStack(ZR.ingot(), 2), },150); - makeRecipe(new ComparableStack(ModBlocks.reactor_control, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 4), new OreDictStack(PB.ingot(), 6), new ComparableStack(ModItems.bolt_tungsten, 6), new ComparableStack(ModItems.motor, 1), },100); - makeRecipe(new ComparableStack(ModBlocks.reactor_hatch, 1), new AStack[] {new ComparableStack(ModBlocks.brick_concrete, 1), new OreDictStack(STEEL.plate(), 6), },150); - makeRecipe(new ComparableStack(ModBlocks.reactor_conductor, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 4), new OreDictStack(CU.plate(), 12), new ComparableStack(ModItems.wire_tungsten, 4), },130); - makeRecipe(new ComparableStack(ModBlocks.reactor_computer, 1), new AStack[] {new ComparableStack(ModBlocks.reactor_conductor, 2), new ComparableStack(ModItems.circuit_targeting_tier3, 4), new ComparableStack(ModItems.circuit_gold, 1), },250); makeRecipe(new ComparableStack(ModBlocks.machine_radgen, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 8), new OreDictStack(STEEL.plate(), 32), new ComparableStack(ModItems.coil_magnetized_tungsten, 6), new ComparableStack(ModItems.wire_magnetized_tungsten, 24), new ComparableStack(ModItems.circuit_gold, 4), new ComparableStack(ModItems.reactor_core, 3), new OreDictStack(STAR.ingot(), 1), new OreDictStack("dyeRed", 1), },400); makeRecipe(new ComparableStack(ModBlocks.machine_reactor_breeding, 1), new AStack[] {new ComparableStack(ModItems.reactor_core, 1), new OreDictStack(STEEL.ingot(), 12), new OreDictStack(PB.plate(), 16), new ComparableStack(ModBlocks.reinforced_glass, 4), new OreDictStack(ASBESTOS.ingot(), 4), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new ComparableStack(ModItems.crt_display, 1)},150); makeRecipe(new ComparableStack(ModBlocks.reactor_research, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 8), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new ComparableStack(ModItems.motor_desh, 2), new OreDictStack(B.ingot(), 5), new OreDictStack(PB.plate(), 8), new ComparableStack(ModItems.crt_display, 3), new ComparableStack(ModItems.circuit_copper, 2), },300); diff --git a/src/main/java/com/hbm/inventory/recipes/ElectrolyserFluidRecipes.java b/src/main/java/com/hbm/inventory/recipes/ElectrolyserFluidRecipes.java index 0f783b9f9b..658f0d305f 100644 --- a/src/main/java/com/hbm/inventory/recipes/ElectrolyserFluidRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ElectrolyserFluidRecipes.java @@ -12,7 +12,6 @@ import com.hbm.inventory.FluidStack; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; -import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemFluidIcon; @@ -45,7 +44,7 @@ public static HashMap getRecipes() { if(recipe.output2.type != Fluids.NONE) outputs.add(ItemFluidIcon.make(recipe.output2)); for(ItemStack byproduct : recipe.byproduct) outputs.add(byproduct); - recipes.put(new ComparableStack(ItemFluidIcon.make(input)), outputs.toArray()); + recipes.put(ItemFluidIcon.make(input), outputs.toArray()); } return recipes; diff --git a/src/main/java/com/hbm/items/armor/ItemModLens.java b/src/main/java/com/hbm/items/armor/ItemModLens.java index f7d3675fc1..a9df9cfff8 100644 --- a/src/main/java/com/hbm/items/armor/ItemModLens.java +++ b/src/main/java/com/hbm/items/armor/ItemModLens.java @@ -84,7 +84,6 @@ public void modUpdate(EntityLivingBase entity, ItemStack armor) { if(addIf(ModBlocks.ore_oil, b, 300, aX, seg, aZ, "Oil", 0xa0a0a0, player)) hits++; if(addIf(ModBlocks.ore_bedrock_oil, b, 300, aX, seg, aZ, "Bedrock Oil", 0xa0a0a0, player)) hits++; if(addIf(ModBlocks.ore_coltan, b, 5, aX, seg, aZ, "Coltan", 0xa0a000, player)) hits++; - if(addIf(ModBlocks.ore_bedrock_coltan, b, 1, aX, seg, aZ, "Bedrock Coltan", 0xa0a000, player)) hits++; if(addIf(ModBlocks.stone_gneiss, b, 5000, aX, seg, aZ, "Schist", 0x8080ff, player)) hits++; if(addIf(ModBlocks.ore_australium, b, 1000, aX, seg, aZ, "Australium", 0xffff00, player)) hits++; if(addIf(Blocks.end_portal_frame, b, 1, aX, seg, aZ, "End Portal", 0x40b080, player)) hits++; diff --git a/src/main/java/com/hbm/items/tool/ItemWandD.java b/src/main/java/com/hbm/items/tool/ItemWandD.java index f5c56a1a24..2d661577c7 100644 --- a/src/main/java/com/hbm/items/tool/ItemWandD.java +++ b/src/main/java/com/hbm/items/tool/ItemWandD.java @@ -64,6 +64,7 @@ public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer pla EntityNukeTorex torex = new EntityNukeTorex(world); torex.setPositionAndRotation(pos.blockX, pos.blockY + 1, pos.blockZ, 0, 0); torex.setScale(1.5F); + torex.setType(1); world.spawnEntityInWorld(torex); /*EntityTracker entitytracker = ((WorldServer) world).getEntityTracker(); IntHashMap map = ReflectionHelper.getPrivateValue(EntityTracker.class, entitytracker, "trackedEntityIDs", "field_72794_c"); diff --git a/src/main/java/com/hbm/items/tool/WeaponSpecial.java b/src/main/java/com/hbm/items/tool/WeaponSpecial.java index 1fc052d415..c59daa0163 100644 --- a/src/main/java/com/hbm/items/tool/WeaponSpecial.java +++ b/src/main/java/com/hbm/items/tool/WeaponSpecial.java @@ -4,7 +4,7 @@ import java.util.Random; import com.google.common.collect.Multimap; -import com.hbm.entity.effect.EntityNukeCloudSmall; +import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.entity.logic.EntityNukeExplosionMK5; import com.hbm.entity.projectile.EntityRubble; import com.hbm.items.ModItems; @@ -152,12 +152,7 @@ public boolean hitEntity(ItemStack stack, EntityLivingBase entity, EntityLivingB if(entityPlayer.fallDistance >= 20 && !((EntityPlayer)entityPlayer).capabilities.isCreativeMode) { if(!world.isRemote) { world.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(world, 100, entity.posX, entity.posY, entity.posZ)); - - EntityNukeCloudSmall entity2 = new EntityNukeCloudSmall(world, 1000, 100 * 0.005F); - entity2.posX = entity.posX; - entity2.posY = entity.posY; - entity2.posZ = entity.posZ; - world.spawnEntityInWorld(entity2); + EntityNukeTorex.statFac(world, entity.posX, entity.posY, entity.posZ, 100); } } } diff --git a/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java b/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java index bb62a11b53..30b1fdeab1 100644 --- a/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java +++ b/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java @@ -6,7 +6,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.config.BombConfig; import com.hbm.entity.effect.EntityMist; -import com.hbm.entity.effect.EntityNukeCloudSmall; +import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.entity.logic.EntityNukeExplosionMK5; import com.hbm.entity.projectile.EntityArtilleryShell; import com.hbm.explosion.ExplosionChaos; @@ -263,11 +263,7 @@ public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) { this.itemTypes[NUKE] = new ArtilleryShell("ammo_arty_nuke", SpentCasing.COLOR_CASE_16INCH_NUKE) { public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) { shell.worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(shell.worldObj, BombConfig.missileRadius, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord)); - EntityNukeCloudSmall entity2 = new EntityNukeCloudSmall(shell.worldObj, 1000, BombConfig.missileRadius * 0.005F); - entity2.posX = mop.hitVec.xCoord; - entity2.posY = mop.hitVec.yCoord; - entity2.posZ = mop.hitVec.zCoord; - shell.worldObj.spawnEntityInWorld(entity2); + EntityNukeTorex.statFac(shell.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, BombConfig.missileRadius); shell.setDead(); } }; diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index a941f65687..aff896dcf1 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (4690)"; + public static final String VERSION = "1.0.27 BETA (4704)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 18a1e1f49a..7c0d6c0472 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -1056,8 +1056,6 @@ public static void reg2() { addRecipeAuto(new ItemStack(ModBlocks.struct_launcher_core_large, 1), new Object[] { "SIS", "ICI", "BEB", 'S', ModItems.circuit_red_copper, 'I', Blocks.iron_bars, 'C', ModItems.circuit_targeting_tier4, 'B', ModBlocks.struct_launcher, 'E', ModBlocks.machine_battery }); addRecipeAuto(new ItemStack(ModBlocks.struct_soyuz_core, 1), new Object[] { "CUC", "TST", "TBT", 'C', ModItems.circuit_targeting_tier4, 'U', ModItems.upgrade_power_3, 'T', ModBlocks.barrel_steel, 'S', ModBlocks.steel_scaffold, 'B', ModBlocks.machine_lithium_battery }); addRecipeAuto(new ItemStack(ModItems.reactor_sensor, 1), new Object[] { "WPW", "CMC", "PPP", 'W', ModItems.wire_tungsten, 'P', PB.plate(), 'C', ModItems.circuit_targeting_tier3, 'M', ModItems.magnetron }); - addRecipeAuto(new ItemStack(ModBlocks.reactor_ejector, 1), new Object[] { "CLC", "MHM", "CLC", 'C', ModBlocks.brick_concrete, 'L', PB.plate(), 'M', ModItems.motor, 'H', ModBlocks.reactor_hatch }); - addRecipeAuto(new ItemStack(ModBlocks.reactor_inserter, 1), new Object[] { "CLC", "MHM", "CLC", 'C', ModBlocks.brick_concrete, 'L', CU.plate(), 'M', ModItems.motor, 'H', ModBlocks.reactor_hatch }); addRecipeAuto(new ItemStack(ModBlocks.rbmk_console, 1), new Object[] { "BBB", "DGD", "DCD", 'B', B.ingot(), 'D', ModBlocks.deco_rbmk, 'G', KEY_ANYPANE, 'C', ModItems.circuit_targeting_tier3 }); addRecipeAuto(new ItemStack(ModBlocks.rbmk_crane_console, 1), new Object[] { "BCD", "DDD", 'B', B.ingot(), 'D', ModBlocks.deco_rbmk, 'C', ModItems.circuit_targeting_tier3 }); addRecipeAuto(new ItemStack(ModBlocks.hadron_core, 1), new Object[] { "CCC", "DSD", "CCC", 'C', ModBlocks.hadron_coil_alloy, 'D', ModBlocks.hadron_diode, 'S', ModItems.circuit_schrabidium }); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index d17a166104..e8834cff78 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -1166,6 +1166,7 @@ public void handleMissingMappings(FMLMissingMappingsEvent event) { ignoreMappings.add("hbm:item.primer_9"); ignoreMappings.add("hbm:item.primer_50"); ignoreMappings.add("hbm:item.primer_buckshot"); + ignoreMappings.add("hbm:tile.ore_bedrock_coltan"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index a1bc1b705d..8390aa880c 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -68,7 +68,6 @@ import com.hbm.util.I18nUtil; import com.hbm.util.ItemStackUtil; import com.hbm.util.LoggingUtil; -import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.wiaj.GuiWorldInAJar; import com.hbm.wiaj.cannery.CanneryBase; import com.hbm.wiaj.cannery.Jars; diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPad.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPad.java index a0c0b82b22..7781511f54 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPad.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPad.java @@ -4,8 +4,6 @@ import com.hbm.blocks.bomb.LaunchPad; import com.hbm.inventory.container.ContainerLaunchPadTier1; import com.hbm.inventory.gui.GUILaunchPadTier1; -import com.hbm.items.ModItems; -import com.hbm.items.tool.ItemDesingator; import com.hbm.lib.Library; import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.PacketDispatcher; diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java index 6403145d4a..4044d26dff 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java @@ -1,6 +1,6 @@ package com.hbm.tileentity.bomb; -import com.hbm.entity.effect.EntityNukeCloudSmall; +import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.entity.logic.EntityBalefire; import com.hbm.inventory.container.ContainerNukeFstbmb; import com.hbm.inventory.gui.GUINukeFstbmb; @@ -128,7 +128,7 @@ public void explode() { bf.posZ = zCoord + 0.5; bf.destructionRange = (int) 250; worldObj.spawnEntityInWorld(bf); - worldObj.spawnEntityInWorld(EntityNukeCloudSmall.statFacBale(worldObj, xCoord + 0.5, yCoord + 5, zCoord + 0.5, 250 * 1.5F, 1000)); + EntityNukeTorex.statFacBale(worldObj, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, 250); } public String getMinutes() { diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN45.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN45.java index 19fe5165dd..07cd73d6a4 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN45.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN45.java @@ -4,7 +4,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.config.BombConfig; -import com.hbm.entity.effect.EntityNukeCloudSmall; +import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.entity.logic.EntityNukeExplosionMK5; import com.hbm.explosion.ExplosionLarge; import com.hbm.inventory.container.ContainerNukeN45; @@ -262,12 +262,7 @@ public static void explode(World world, int x, int y, int z, int type) { break; case 4: world.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(world, (int)(BombConfig.missileRadius * 0.75F), x + 0.5, y + 0.5, z + 0.5)); - - EntityNukeCloudSmall entity2 = new EntityNukeCloudSmall(world, 1000, BombConfig.missileRadius * 0.005F * 0.75F); - entity2.posX = x; - entity2.posY = y; - entity2.posZ = z; - world.spawnEntityInWorld(entity2); + EntityNukeTorex.statFac(world, x + 0.5, y + 0.5, z + 0.5, BombConfig.missileRadius * 0.75F); break; } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java b/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java index 866820e63b..ec42fb0c8c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java @@ -231,7 +231,7 @@ public void updateEntity() { this.flux = newFlux; - if(tanks[0].getTankType().hasTrait(FT_PWRModerator.class)) { + if(tanks[0].getTankType().hasTrait(FT_PWRModerator.class) && tanks[0].getFill() > 0) { this.flux *= tanks[0].getTankType().getTrait(FT_PWRModerator.class).getMultiplier(); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java b/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java index 9b9a4432c1..151c61c128 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java @@ -107,19 +107,26 @@ public void updateEntity() { slots[i] = new ItemStack(ModItems.nuclear_waste_short_depleted_tiny, 1, meta); } - if(item == ModItems.ingot_au198 && worldObj.rand.nextInt(VersatileConfig.getShortDecayChance() / 100) == 0) { + if(item == ModItems.ingot_au198 && worldObj.rand.nextInt(VersatileConfig.getShortDecayChance() / 20) == 0) { slots[i] = new ItemStack(ModItems.ingot_mercury, 1, meta); } - if(item == ModItems.ingot_au198 && worldObj.rand.nextInt(VersatileConfig.getShortDecayChance() / 20) == 0) { + if(item == ModItems.nugget_au198 && worldObj.rand.nextInt(VersatileConfig.getShortDecayChance() / 100) == 0) { slots[i] = new ItemStack(ModItems.nugget_mercury, 1, meta); } - if(item == ModItems.ingot_pb209 && worldObj.rand.nextInt(VersatileConfig.getShortDecayChance() / 50) == 0) { + if(item == ModItems.ingot_pb209 && worldObj.rand.nextInt(VersatileConfig.getShortDecayChance() / 10) == 0) { slots[i] = new ItemStack(ModItems.ingot_bismuth, 1, meta); } - if(item == ModItems.nugget_pb209 && worldObj.rand.nextInt(VersatileConfig.getShortDecayChance() / 10) == 0) { + if(item == ModItems.nugget_pb209 && worldObj.rand.nextInt(VersatileConfig.getShortDecayChance() / 50) == 0) { slots[i] = new ItemStack(ModItems.nugget_bismuth, 1, meta); } + + if(item == ModItems.powder_sr90 && worldObj.rand.nextInt(VersatileConfig.getShortDecayChance() / 10) == 0) { + slots[i] = new ItemStack(ModItems.powder_zirconium, 1, meta); + } + if(item == ModItems.nugget_sr90 && worldObj.rand.nextInt(VersatileConfig.getShortDecayChance() / 50) == 0) { + slots[i] = new ItemStack(ModItems.nugget_zirconium, 1, meta); + } } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java index 360d25ebec..32444fda78 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java @@ -16,7 +16,6 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityMachineBase; -import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java index 9332cb7506..ec0d5ae578 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java @@ -33,7 +33,6 @@ import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.IRepairable; import com.hbm.tileentity.TileEntityMachineBase; -import com.hbm.util.I18nUtil; import com.hbm.util.ParticleUtil; import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.common.Optional; diff --git a/src/main/java/com/hbm/world/feature/BiomeCave.java b/src/main/java/com/hbm/world/feature/BiomeCave.java index 0add71808d..f1beb0d102 100644 --- a/src/main/java/com/hbm/world/feature/BiomeCave.java +++ b/src/main/java/com/hbm/world/feature/BiomeCave.java @@ -13,7 +13,7 @@ import net.minecraft.world.gen.NoiseGeneratorPerlin; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.event.terraingen.DecorateBiomeEvent; +import net.minecraftforge.event.terraingen.PopulateChunkEvent; public class BiomeCave { @@ -52,7 +52,7 @@ public BiomeCave setYLevel(int yLevel) { } @SubscribeEvent - public void onDecorate(DecorateBiomeEvent.Pre event) { + public void onDecorate(PopulateChunkEvent.Pre event) { World world = event.world; diff --git a/src/main/java/com/hbm/world/feature/DeepLayer.java b/src/main/java/com/hbm/world/feature/DeepLayer.java index b8f29cf411..685fdb7ebd 100644 --- a/src/main/java/com/hbm/world/feature/DeepLayer.java +++ b/src/main/java/com/hbm/world/feature/DeepLayer.java @@ -11,14 +11,14 @@ import net.minecraft.world.World; import net.minecraft.world.gen.NoiseGeneratorPerlin; import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.event.terraingen.DecorateBiomeEvent; +import net.minecraftforge.event.terraingen.PopulateChunkEvent; public class DeepLayer { NoiseGeneratorPerlin noise; @SubscribeEvent - public void onDecorate(DecorateBiomeEvent.Pre event) { + public void onDecorate(PopulateChunkEvent.Pre event) { World world = event.world; if(world.provider == null || world.provider.dimensionId != 0) return; diff --git a/src/main/java/com/hbm/world/feature/OreCave.java b/src/main/java/com/hbm/world/feature/OreCave.java index eed1cdfdc8..49ae81a9bc 100644 --- a/src/main/java/com/hbm/world/feature/OreCave.java +++ b/src/main/java/com/hbm/world/feature/OreCave.java @@ -13,7 +13,7 @@ import net.minecraft.world.gen.NoiseGeneratorPerlin; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.event.terraingen.DecorateBiomeEvent; +import net.minecraftforge.event.terraingen.PopulateChunkEvent; public class OreCave { @@ -71,7 +71,7 @@ public OreCave setDimension(int dim) { @SuppressWarnings("incomplete-switch") @SubscribeEvent - public void onDecorate(DecorateBiomeEvent.Pre event) { + public void onDecorate(PopulateChunkEvent.Pre event) { World world = event.world; diff --git a/src/main/java/com/hbm/world/feature/OreLayer.java b/src/main/java/com/hbm/world/feature/OreLayer.java index b0411b1476..8e658cb654 100644 --- a/src/main/java/com/hbm/world/feature/OreLayer.java +++ b/src/main/java/com/hbm/world/feature/OreLayer.java @@ -10,7 +10,7 @@ import net.minecraft.world.World; import net.minecraft.world.gen.NoiseGeneratorPerlin; import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.terraingen.DecorateBiomeEvent; +import net.minecraftforge.event.terraingen.PopulateChunkEvent; public class OreLayer { @@ -65,7 +65,7 @@ public OreLayer setDimension(int dim) { } @SubscribeEvent - public void onDecorate(DecorateBiomeEvent.Pre event) { + public void onDecorate(PopulateChunkEvent.Pre event) { World world = event.world; diff --git a/src/main/java/com/hbm/world/feature/OreLayer3D.java b/src/main/java/com/hbm/world/feature/OreLayer3D.java index aee3cf43d5..08650db8e5 100644 --- a/src/main/java/com/hbm/world/feature/OreLayer3D.java +++ b/src/main/java/com/hbm/world/feature/OreLayer3D.java @@ -8,7 +8,7 @@ import net.minecraft.world.World; import net.minecraft.world.gen.NoiseGeneratorPerlin; import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.terraingen.DecorateBiomeEvent; +import net.minecraftforge.event.terraingen.PopulateChunkEvent; public class OreLayer3D { @@ -51,7 +51,7 @@ public OreLayer3D setThreshold(double threshold) { } @SubscribeEvent - public void onDecorate(DecorateBiomeEvent.Pre event) { + public void onDecorate(PopulateChunkEvent.Pre event) { World world = event.world; diff --git a/src/main/java/com/hbm/world/feature/SchistStratum.java b/src/main/java/com/hbm/world/feature/SchistStratum.java index f16f4b93af..28d5d6fe2a 100644 --- a/src/main/java/com/hbm/world/feature/SchistStratum.java +++ b/src/main/java/com/hbm/world/feature/SchistStratum.java @@ -9,14 +9,14 @@ import net.minecraft.block.material.Material; import net.minecraft.world.World; import net.minecraft.world.gen.NoiseGeneratorPerlin; -import net.minecraftforge.event.terraingen.DecorateBiomeEvent; +import net.minecraftforge.event.terraingen.PopulateChunkEvent; public class SchistStratum { NoiseGeneratorPerlin noise; @SubscribeEvent - public void onDecorate(DecorateBiomeEvent.Pre event) { + public void onDecorate(PopulateChunkEvent.Pre event) { if(this.noise == null) { this.noise = new NoiseGeneratorPerlin(new Random(event.world.getSeed()), 4); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 25ba978210..c93c379109 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -275,6 +275,7 @@ container.amsLimiter=AMS-Stabilisator (Deko) container.anvil=Stufe %s Amboss container.arcFurnace=Lichtbogenofen container.armorTable=Rüstungsmodifikationstisch +container.ashpit=Aschekasten container.assembler=Fertigungsmaschine container.autocrafter=Automatische Werkbank container.barrel=Fass @@ -1893,6 +1894,7 @@ item.gun_calamity_ammo.name=.50 BMG Patrone (LEGACY) item.gun_calamity_dual.name=Sattelkanone item.gun_chemthrower.name=Chemowerfer item.gun_coilgun.name=Gaußpistole +item.gun_cryocannon.name=Kyro-Kanone item.gun_cryolator.name=Der Cryolator item.gun_cryolator_ammo.name=Kryozelle item.gun_dampfmaschine.name=Garantiert keine Scherzwaffe @@ -3710,18 +3712,30 @@ tile.concrete_stairs.name=Betonfliesentreppe tile.concrete_super.name=Super Beton tile.concrete_super_broken.name=Schimmliger Schutt tile.conveyor.name=Förderband +tile.conveyor.desc=Bewegt Items$Kann mit Schraubenzieher im Uhrzeigersinn gedreht werden$Shiftclick umdas Band zu biegen tile.conveyor_chute.name=Förderschütte +tile.conveyor_chute.desc=Bewegt Items nach unten$Die unterste Schütte verhält sich wie ein normales Förderband tile.conveyor_double.name=Zweispuriges Förderband +tile.conveyor_double.desc=Bewegt Items$Kann mit Schraubenzieher im Uhrzeigersinn gedreht werden$Shiftclick umdas Band zu biegen tile.conveyor_lift.name=Kettenaufzug +tile.conveyor_lift.desc=Bewegt Items nach oben$Benötigt mindestens zwei Aufzüge übereinander um richtig zu funktionieren tile.conveyor_triple.name=Dreispuriges Förderband +tile.conveyor_triple.desc=Bewegt Items$Kann mit Schraubenzieher im Uhrzeigersinn gedreht werden$Shiftclick umdas Band zu biegen tile.corium_block.name=Corium tile.crane_boxer.name=Förderband-Verpacker +tile.crane_boxer.desc=Lädt eine konfigurierbare Menge Stacks in Boxen$Rechstclick mit Schraubenzieher um Eingang zu definieren$Shiftclick mit Schraubenzieher um Ausgang zu definieren$Zweimal clicken, um gegenüberliegende Seite zu definieren tile.crane_extractor.name=Förderband-Auswerfer +tile.crane_extractor.desc=Nimmt Items aus behältern und legt sie auf Förderbänder$Hat bis zu 9 Filterslots mit Black- und Whitelist$Rechstclick mit Schraubenzieher um Ausgang zu definieren$Shiftclick mit Schraubenzieher um Eingang zu definieren$Zweimal clicken, um gegenüberliegende Seite zu definieren tile.crane_grabber.name=Förderband-Greifer +tile.crane_grabber.desc=Nimmt Items von vorbeilaufenden Förderbändern und legt sie in Behälter$Nimmt nur Items von der nähesten Spur$Hat bis zu 9 Filterslots mit Black- und Whitelist$Rechstclick mit Schraubenzieher um Eingang zu definieren$Shiftclick mit Schraubenzieher um Ausgang zu definieren$Zweimal clicken, um gegenüberliegende Seite zu definieren tile.crane_inserter.name=Förderband-Einsetzer +tile.crane_inserter.desc=Akzeptiert Items von Förderbändern und legt sie in Behälter$Rechstclick mit Schraubenzieher um Eingang zu definieren$Shiftclick mit Schraubenzieher um Ausgang zu definieren$Zweimal clicken, um gegenüberliegende Seite zu definieren tile.crane_router.name=Förderband-Sortierer +tile.crane_router.desc=Sortiert Items basierend auf eingestellte Kriterien$Seiten können als Blacklist, Whitelist oder Wildcard eingestellt werden$Widlcard-Seiten werden nur verwendet, wenn kein anderer Filter zutrifft tile.crate_splitter.name=Förderband-Teiler +tile.crane_splitter.desc=Teilt Items und Stacks gleichmäßig auf zwei Förderbänder$Zählt selbst als Förderband, kann also direkt in Einsetzer und Sortierer führen tile.crane_unboxer.name=Förderband-Entpacker +tile.crane_unboxer.desc=Öffnet boxen$Rechstclick mit Schraubenzieher um Ausgang zu definieren$Shiftclick mit Schraubenzieher um Eingang zu definieren$Zweimal clicken, um gegenüberliegende Seite zu definieren tile.crashed_bomb.name=Blindgänger tile.crate.name=Vorratskiste tile.crate_ammo.name=Sternenmetallkiste @@ -3814,6 +3828,7 @@ tile.factory_titanium_furnace.name=Einfache Fabrikzugriffsluke tile.factory_titanium_hull.name=Fabrikblock tile.fallout.name=Fallout tile.fan.name=Ventilator +tile.fan.desc=Kann mit Redstone aktiviert werden$Bewegt Entities bis zu 10 Blöcke$Rechtsclick mit Schraubenzieher um den Ventilator umzudrehen tile.fence_metal.name=Maschendrahtzaun tile.field_disturber.name=Hochenergiefeld-Jammer tile.fire_digamma.name=Verweilendes Digamma @@ -3961,7 +3976,7 @@ tile.machine_amgen.name=Umgebungsstrahlungs-Generator tile.machine_arc_furnace_off.name=Lichtbogenofen tile.machine_arc_furnace_on.name=Lichtbogenofen tile.machine_armor_table.name=Rüstungsmodifikationstisch -tile.machine_ashpit.name=Ashekasten +tile.machine_ashpit.name=Aschekasten tile.machine_ashpit.desc=Sammelt Asche von Feuerbüchsen und Heizöfen tile.machine_assembler.name=Fertigungsmaschine tile.machine_assemfac.name=Fertigungsfabrik @@ -4211,6 +4226,8 @@ tile.pink_log.name=Pinkes Holz tile.pink_planks.name=Pinke Holzbretter tile.pink_slab.name=Pinke Holzstufe tile.pink_stairs.name=Pinke Holztreppen +tile.piston_inserter.name=Einsetzer-Kolben +tile.piston_inserter.desc=Kann ein Item halten$Wenn mit Redstone aktiviert, setzt das Item in gebohrten Graphit ein$Alle Items in gebohrten Graphitblöcken in der Linie werden einen Block verschoben$Benötigt einen Luftblock zwischen sich selbst und dem Graphit tile.plant_dead.name=Tote Pflanze tile.plant_flower.cd0.name=Senf-Weide tile.plant_flower.cd1.name=Senf-Weide @@ -4232,6 +4249,25 @@ tile.pribris.name=RBMK-Schutt tile.pribris_burning.name=Flammender RBMK-Schutt tile.pribris_digamma.name=Geschwärzter RBMK-Schutt tile.pribris_radiating.name=Glühender RBMK-Schutt +tile.pwr_block.name=PWR +tile.pwr_casing.name=PWR Druckbehälter +tile.pwr_casing.desc=Muss alle internen Teile des PWRs abdecken$Platzierung: Hülle +tile.pwr_channel.name=PWR Kühlmittelkanal +tile.pwr_channel.desc=Nutzt Hitze aus der Hülle um Kühlmittle zu erhitzen$Platzierung: Egal +tile.pwr_control.name=PWR Steuerstäbe +tile.pwr_control.desc=Reguliert verbundene Brennstäbe$Platzierung: Gitter, zwischen Brennstäben +tile.pwr_controller.name=PWR Controller +tile.pwr_controller.desc=Zugangsterminal zum PWR$Platzierung: Hülle, nur eines pro Reaktor$Rechtsclick um Reaktor zusammenzubauen +tile.pwr_fuel.name=PWR Brennstäbe +tile.pwr_fuel.desc=Erhöht die Kapazität für Brennelemente$Platzierung: Gitter, für höhere Reaktivität +tile.pwr_heatex.name=PWR Waärmetauscher +tile.pwr_heatex.desc=Gleicht Kerntemparatur mit Hülltemparatur aus$Platzierung: Egal +tile.pwr_neutron_source.name=PWR Neutronenquelle +tile.pwr_neutron_source.desc=Fügt dem Kern 20 Flux hinzu$Platzierung: Egal$Flux erreicht den Kern nur, wenn Steuerstäbe offen sind +tile.pwr_port.name=PWR Zugangsport +tile.pwr_port.desc=Erlaubt IO für Items und Flüssigkeiten$Platzierung: Hülle +tile.pwr_reflector.name=PWR Neutronenreflektor +tile.pwr_reflector.desc=Reflektier Neutronen auf Brennstäbe zurück$Platzierung: Hülle, für höhere Reaktivität$Gültiger Block für Hülle tile.radio_torch_counter.name=Redstone-over-Radio Itemzähler tile.radio_torch_counter.desc=Kann auf ebenen Flächen oder Komparator-kompatiblen Blöcken platziert werden$Signal basiert auf Anzahl passender Items tile.radio_torch_receiver.name=Redstone-over-Radio Empfänger diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 87e424890d..a34f8457c1 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -632,6 +632,7 @@ container.amsLimiter=AMS Stabilizer (Deco) container.anvil=Tier %s Anvil container.arcFurnace=Arc Furnace container.armorTable=Armor Modification Table +container.ashpit=Ashpit container.assembler=Assembly Machine container.autocrafter=Automatic Crafting Table container.barrel=Barrel @@ -2610,6 +2611,7 @@ item.gun_calamity_dual.name=Saddle Gun item.gun_chemthrower.name=Chemthrower item.gun_coilgun.name=Coilgun item.gun_congolake.name=Congo Lake +item.gun_cryocannon.name=Cryo Cannon item.gun_cryolator.name=The Cryolator item.gun_cryolator_ammo.name=Cryo Cell item.gun_dampfmaschine.name=Totally Not a Joke Weapon @@ -4680,18 +4682,30 @@ tile.concrete_stairs.name=Concrete Tile Stairs tile.concrete_super.name=Über Concrete tile.concrete_super_broken.name=Moldy Debris tile.conveyor.name=Conveyor Belt +tile.conveyor.desc=Moves items dropped on it$Can be rotated clockwise with a screwdriver$Shift-click with screwdriver to bend tile.conveyor_chute.name=Conveyor Chute +tile.conveyor_chute.desc=Moves items down$The bottom-most chute will act like a regular conveyor belt tile.conveyor_double.name=Double-Lane Conveyor Belt +tile.conveyor_double.desc=Moves items dropped on it$Can be rotated clockwise with a screwdriver$Shift-click with screwdriver to bend tile.conveyor_lift.name=Conveyor Chain Lift +tile.conveyor_lift.desc=Moves items up$Requires at least two blocks on top of each other to work properly tile.conveyor_triple.name=Triple-Lane Conveyor Belt +tile.conveyor_triple.desc=Moves items dropped on it$Can be rotated clockwise with a screwdriver$Shift-click with screwdriver to bend tile.corium_block.name=Corium tile.crane_boxer.name=Conveyor Boxer +tile.crane_boxer.desc=Loads a configurable amount of stacks into boxes which move along conveyor belts$Right-click with screwdriver to set input side$Shift-click with screwdriver to set the output side$Click twice to set the opposite side tile.crane_extractor.name=Conveyor Ejector +tile.crane_extractor.desc=Takes items from inventories and places them on covneyor belts$Has up to 9 filter slots with black and whitelist$Right-click with screwdriver to set output side$Shift-click with screwdriver to set the input side$Click twice to set the opposite side tile.crane_grabber.name=Conveyor Grabber +tile.crane_grabber.desc=Takes items from passing conveyors and places them into containers$Will only take items from the closest lane$Has up to 9 filter slots with black and whitelist$Right-click with screwdriver to set input side$Shift-click with screwdriver to set the output side$Click twice to set the opposite side tile.crane_inserter.name=Conveyor Inserter +tile.crane_inserter.desc=Accepts items from conveyors and places them into containers$Right-click with screwdriver to set input side$Shift-click with screwdriver to set the output side$Click twice to set the opposite side tile.crane_router.name=Conveyor Sorter +tile.crane_router.desc=Sorts item based on defined criteria$Sides can be defined as blacklist, whitelist or wildcard$Wildcard sides are only chosen if no other filter matches tile.crane_splitter.name=Conveyor Splitter +tile.crane_splitter.desc=Splits items and stacks evenly onto two conveyor belts$Is a conveyor belt itself, so it can directly input into an inserter or sorter tile.crane_unboxer.name=Conveyor Unboxer +tile.crane_unboxer.desc=Receives boxes and extracts their contents$Right-click with screwdriver to set output side$Shift-click with screwdriver to set the input side$Click twice to set the opposite side tile.crashed_bomb.name=Dud tile.crate.name=Supply Crate tile.crate_ammo.name=Starmetal Crate @@ -4714,27 +4728,6 @@ tile.deco_asbestos.name=Asbestos Roof tile.deco_beryllium.name=Beryllium Deco Block tile.deco_computer.ibm_300pl.name=IBM Personal Computer 300PL tile.deco_emitter.name=Deco Light Emitter -tile.part_emitter.name=Deco Particle Emitter -tile.piston_inserter.name=Inserter -tile.pwr_block.name=PWR -tile.pwr_casing.name=PWR Pressure Vessel -tile.pwr_casing.desc=Needs to cover all internal parts for the reactor to form$Placement: Casing -tile.pwr_channel.name=PWR Coolant Channel -tile.pwr_channel.desc=Uses hull heat to heat up coolant$Placement: Any -tile.pwr_control.name=PWR Control Rod -tile.pwr_control.desc=Allows connected fuel rods to be controlled$Placement: Grid, between control rods -tile.pwr_controller.name=PWR Controller -tile.pwr_controller.desc=Access terminal for the PWR$Placement: Casing, only one per reactor$Right-click to assemble the reactor -tile.pwr_fuel.name=PWR Fuel Rod -tile.pwr_fuel.desc=Increases PWR fuel capacity$Placement: Grid, for increased reactivity -tile.pwr_heatex.name=PWR Heat Exchanger -tile.pwr_heatex.desc=Moves core heat to the hull$Placement: Any -tile.pwr_neutron_source.name=PWR Neutron Source -tile.pwr_neutron_source.desc=Adds 20 flux to the core$Placement: Any$Flux only reaches fuel rods if connections are open -tile.pwr_port.name=PWR Access Port -tile.pwr_port.desc=Allows item and fluid IO$Placement: Casing -tile.pwr_reflector.name=PWR Neutron Reflector -tile.pwr_reflector.desc=Reflects neutrons back to fuel rods$Placement: Grid, for increased reactivity$Valid casing material tile.deco_lead.name=Lead Deco Block tile.deco_rbmk.name=RBMK Deco Block tile.deco_rbmk_smooth.name=Smooth RBMK Deco Block @@ -4806,6 +4799,7 @@ tile.factory_titanium_furnace.name=Basic Factory Access Hatch tile.factory_titanium_hull.name=Factory Block tile.fallout.name=Fallout tile.fan.name=Fan +tile.fan.desc=Activates using redstone$Will push entities up to 10 blocks$Right-click with screwdriver to flip tile.fence_metal.name=Chainlink Fence tile.field_disturber.name=High Energy Field Jammer tile.filing_cabinet.green.name=Dusty Filing Cabinet @@ -5205,11 +5199,14 @@ tile.ore_uranium_scorched.name=Scorched Uranium Ore tile.ore_verticium.name=Dollar Green Mineral tile.ore_volcano.name=Geothermal Vent tile.ore_weidanium.name=Weidite +tile.part_emitter.name=Deco Particle Emitter tile.pink_barrel.name=Kerosene Barrel tile.pink_log.name=Pink Log tile.pink_planks.name=Pink Wood Planks tile.pink_slab.name=Pink Wood Slab tile.pink_stairs.name=Pink Wood Stairs +tile.piston_inserter.name=Inserter +tile.piston_inserter.desc=Can receive one item using automation$Using redstone, it will insert the item into drilled graphite$All drilled graphite in the chain will have their items pushed by one block$Needs one block of air between the graphite tile.plant_dead.name=Dead Plant tile.plant_flower.cd0.name=Mustard Willow tile.plant_flower.cd1.name=Mustard Willow @@ -5231,6 +5228,25 @@ tile.pribris.name=RBMK Debris tile.pribris_burning.name=Flaming RBMK Debris tile.pribris_digamma.name=Blackened RBMK Debris tile.pribris_radiating.name=Smoldering RBMK Debris +tile.pwr_block.name=PWR +tile.pwr_casing.name=PWR Pressure Vessel +tile.pwr_casing.desc=Needs to cover all internal parts for the reactor to form$Placement: Casing +tile.pwr_channel.name=PWR Coolant Channel +tile.pwr_channel.desc=Uses hull heat to heat up coolant$Placement: Any +tile.pwr_control.name=PWR Control Rod +tile.pwr_control.desc=Allows connected fuel rods to be controlled$Placement: Grid, between fuel rods +tile.pwr_controller.name=PWR Controller +tile.pwr_controller.desc=Access terminal for the PWR$Placement: Casing, only one per reactor$Right-click to assemble the reactor +tile.pwr_fuel.name=PWR Fuel Rod +tile.pwr_fuel.desc=Increases PWR fuel capacity$Placement: Grid, for increased reactivity +tile.pwr_heatex.name=PWR Heat Exchanger +tile.pwr_heatex.desc=Moves core heat to the hull$Placement: Any +tile.pwr_neutron_source.name=PWR Neutron Source +tile.pwr_neutron_source.desc=Adds 20 flux to the core$Placement: Any$Flux only reaches fuel rods if connections are open +tile.pwr_port.name=PWR Access Port +tile.pwr_port.desc=Allows item and fluid IO$Placement: Casing +tile.pwr_reflector.name=PWR Neutron Reflector +tile.pwr_reflector.desc=Reflects neutrons back to fuel rods$Placement: Grid, for increased reactivity$Valid casing material tile.radio_torch_counter.name=Redstone-over-Radio Item Counter tile.radio_torch_counter.desc=Placable on flat surfaces or comparator-compatible blocks$Bases signal on the amount of matching items tile.radio_torch_receiver.name=Redstone-over-Radio Receiver diff --git a/src/main/resources/assets/hbm/textures/gui/weapon/ivyMikeSchematic.png b/src/main/resources/assets/hbm/textures/gui/weapon/ivyMikeSchematic.png index 6a1c5e40f275e5b7adde98dd23df9347c1589cac..6df7cce0facb7b0744bc3a0395ca4ec0482a3176 100644 GIT binary patch literal 16183 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 KwoJw(=zjr(Tqu5F7#o2<{LV+y`C$ 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 literal 2706 zcmeHJYfw{H5I*;ktKmijF+6=yi5Ns)0+kU1mk5$n9vNPO6$}W7C=Y2WNT^;ARNg2Q zG(sj!DN-v?uvHWa5fOwUMA0fnAgvSuMG_Pe1xbTC`oF(Aqi6Qap80mq?0&m@W=;mn z(@g_4L;(OAOood$0Fdek0iv2p?Yj`*t5SqL&K}MH)aH?9Ll6Me0L$IiRfTWdxY5tg zFDomnt*uR|RH~5A>vIJ@kqV?f)}zcn6ppv2k81co zv|O0 z6-k0yyDsBS6Xb{JsijZX%f1*%sI_5Yg+Z>Z?9B^m2v))6KMG7G>|=O47~RP-PD=8; zt3yW0t4|IwH^AM+6We++*3$j4hP7oC0;+IO|3uxUxUCU7gXbK6E~6 zom|Az6FvJW-ruM_(TEtQBpm#!oy73G^0=mYxVL{2t(4m)`p(;SK%H?=hk@qHu};EN zhPcQd`{5k(0;WkWK&6dtV2;t5T+in(PE8HlbP=JfT~r^y-Ee5yZwFMxw>XG&Bzr>- znzmreMbQ`GhqTf}6%q=adUFe=ln!yt4l}ve&L5Q5bOd=K{gkWufTg!kmh24Rk zFjYTs$OAi;4j-2OZiCD88?}WBtJTnC->Sr;IH9@A*ou#sL)q=v4)A!%N!+c7h|wy8 zCiug)I>E$euy>iNyRl1+e5SZH>cYn3vP?XxLM>XBb9iPu!FIz6#!<)VQm54tMG9R7 z4@B$mYD|UEZ#<6!`SxBto+Z_2ETLfqyt(eh9)cpgs=)+lEz3rQJ@uh1oI8@I2=&3a z&m43SiH#`M1I?GtSf&=?MO9fS(H3DSGR;Xad;}9J`<2eyz+>w=$CbiFb{TLteb2<+ zAH`@lcee2P_XE~RIL!I-D4mC+>-=%Ci)<3+(fV&@pL(@kSNd)iO3A|)gYlgqPApy4 z_-IQ{L<*h>X$-5qu1LlGy%ut3HOT_Y-RZ>y+az9^!i-R;antXf@AEP{OF>_+QEsyf zb{lWL%JWM2!%Q&X^N;nMA(T)umK_|Fan9?}rC;aAq+6z^UjJl|dGTH4$--B0G@9!j z#m|HxjkhiJSFEBuq#^OLVwF$R`Mu@F0zDc6-K?W%hbqE zavkY};UKtEb|2M3WV5|j1Y2LeEUCP)%Urm`K_s@f*3Y|U24xplwkrXY%U|wwCsSzv zlYg^XzPyoswLFZIg7>7tR2;UN2w?$4C6W<69Hz2)AURL7b?`YY%PoQ=EUrE}=(Vg2 zpn~_(#nmTc&<8oAY|1eVaM%zCo;MIo2E@)9oSZIQ{QHAe2dteo(my($mRqTUeURb) z4ghOIk z4(zXm@_~`!mkzUT(V@zSGT?iW q1