From c44cb67656042a651dd425c39267778729bb1d06 Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 25 Mar 2021 12:53:43 +0100 Subject: [PATCH] hazardous block items, funny centralized hazard system for items --- src/main/java/com/hbm/blocks/ModBlocks.java | 2 +- .../com/hbm/blocks/generic/BlockOutgas.java | 13 +- .../hbm/blocks/generic/BlockRadioactive.java | 29 ++++ .../java/com/hbm/interfaces/IItemHazard.java | 46 +++++++ src/main/java/com/hbm/items/ModItems.java | 20 +-- .../com/hbm/items/block/ItemBlockHazard.java | 43 ++++++ .../com/hbm/items/special/ItemHazard.java | 128 +++-------------- .../com/hbm/modules/ItemHazardModule.java | 129 ++++++++++++++++++ 8 files changed, 291 insertions(+), 119 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/generic/BlockRadioactive.java create mode 100644 src/main/java/com/hbm/interfaces/IItemHazard.java create mode 100644 src/main/java/com/hbm/items/block/ItemBlockHazard.java create mode 100644 src/main/java/com/hbm/modules/ItemHazardModule.java diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index c71d7815e..c5bc3e9c0 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1064,7 +1064,7 @@ public class ModBlocks { block_yellowcake = new BlockFallingRad(Material.sand, 0.5F, 3F).setBlockName("block_yellowcake").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeSand).setHardness(5.0F).setResistance(600.0F).setBlockTextureName(RefStrings.MODID + ":block_yellowcake"); block_insulator = new BlockRotatablePillar(Material.cloth, RefStrings.MODID + ":block_insulator_top").setBlockName("block_insulator").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeCloth).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_insulator_side"); block_fiberglass = new BlockRotatablePillar(Material.cloth, RefStrings.MODID + ":block_fiberglass_top").setBlockName("block_fiberglass").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeCloth).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_fiberglass_side"); - block_asbestos = new BlockOutgas(Material.cloth, true, 5, true).setBlockName("block_asbestos").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeCloth).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_asbestos"); + block_asbestos = new BlockOutgas(Material.cloth, true, 5, true).addAsbestos().toBlock().setBlockName("block_asbestos").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeCloth).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_asbestos"); block_cobalt = new BlockGeneric(Material.iron).setBlockName("block_cobalt").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_cobalt"); block_lithium = new BlockLithium(Material.iron).setBlockName("block_lithium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_lithium"); block_white_phosphorus = new BlockGeneric(Material.rock).setBlockName("block_white_phosphorus").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_white_phosphorus"); diff --git a/src/main/java/com/hbm/blocks/generic/BlockOutgas.java b/src/main/java/com/hbm/blocks/generic/BlockOutgas.java index a5e043d13..5104c5db8 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockOutgas.java +++ b/src/main/java/com/hbm/blocks/generic/BlockOutgas.java @@ -3,6 +3,8 @@ package com.hbm.blocks.generic; import java.util.Random; import com.hbm.blocks.ModBlocks; +import com.hbm.interfaces.IItemHazard; +import com.hbm.modules.ItemHazardModule; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -11,15 +13,18 @@ import net.minecraft.init.Blocks; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class BlockOutgas extends BlockOre { +public class BlockOutgas extends BlockOre implements IItemHazard { boolean randomTick; int rate; boolean onBreak; boolean onNeighbour; + + ItemHazardModule module; public BlockOutgas(Material mat, boolean randomTick, int rate, boolean onBreak) { super(mat); + this.module = new ItemHazardModule(); this.setTickRandomly(randomTick); this.randomTick = randomTick; this.rate = rate; @@ -29,9 +34,15 @@ public class BlockOutgas extends BlockOre { public BlockOutgas(Material mat, boolean randomTick, int rate, boolean onBreak, boolean onNeighbour) { this(mat, randomTick, rate, onBreak); + this.module = new ItemHazardModule(); this.onNeighbour = onNeighbour; } + @Override + public ItemHazardModule getModule() { + return module; + } + public int tickRate(World p_149738_1_) { return rate; } diff --git a/src/main/java/com/hbm/blocks/generic/BlockRadioactive.java b/src/main/java/com/hbm/blocks/generic/BlockRadioactive.java new file mode 100644 index 000000000..1edcebf69 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockRadioactive.java @@ -0,0 +1,29 @@ +package com.hbm.blocks.generic; + +import com.hbm.interfaces.IItemHazard; +import com.hbm.modules.ItemHazardModule; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; + +public class BlockRadioactive extends Block implements IItemHazard { + + ItemHazardModule module; + + private float radIn = 0.0F; + private float radMax = 0.0F; + + public BlockRadioactive(Material mat, float rad, float max) { + super(mat); + this.module = new ItemHazardModule(); + this.setTickRandomly(true); + radIn = rad; + radMax = max; + } + + @Override + public ItemHazardModule getModule() { + return module; + } + +} diff --git a/src/main/java/com/hbm/interfaces/IItemHazard.java b/src/main/java/com/hbm/interfaces/IItemHazard.java new file mode 100644 index 000000000..0d34c1f88 --- /dev/null +++ b/src/main/java/com/hbm/interfaces/IItemHazard.java @@ -0,0 +1,46 @@ +package com.hbm.interfaces; + +import com.hbm.items.special.ItemHazard; +import com.hbm.modules.ItemHazardModule; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; + +public interface IItemHazard { + + public ItemHazardModule getModule(); + + public default IItemHazard addRadiation(float radiation) { + this.getModule().addRadiation(radiation); + return this; + } + + public default IItemHazard addDigamma(float digamma) { + this.getModule().addDigamma(digamma); + return this; + } + + public default IItemHazard addFire(int fire) { + this.getModule().addFire(fire); + return this; + } + + public default IItemHazard addAsbestos() { + this.getModule().addAsbestos(); + return this; + } + + public default IItemHazard addHydroReactivity() { + this.getModule().addHydroReactivity(); + return this; + } + + //the only ugly part of this entire system is the manual casting so that the rest of the daisychained setters work + public default Item toItem() { + return (Item)this; + } + + public default Block toBlock() { + return (Block)this; + } +} diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 4de90fedb..9b24266c5 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -2260,7 +2260,7 @@ public class ModItems { plate_copper = new Item().setUnlocalizedName("plate_copper").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_copper"); plate_gold = new Item().setUnlocalizedName("plate_gold").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_gold"); plate_advanced_alloy = new Item().setUnlocalizedName("plate_advanced_alloy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_advanced_alloy"); - lithium = new ItemHazard().addHydroReactivity().setUnlocalizedName("lithium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":lithium"); + lithium = new ItemHazard().addHydroReactivity().toItem().setUnlocalizedName("lithium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":lithium"); ingot_zirconium = new Item().setUnlocalizedName("ingot_zirconium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_zirconium"); ingot_semtex = new ItemLemon(4, 5, true).setUnlocalizedName("ingot_semtex").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_semtex"); ingot_phosphorus = new ItemHazard(0F, true).setUnlocalizedName("ingot_phosphorus").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_phosphorus"); @@ -2321,8 +2321,8 @@ public class ModItems { ingot_saturnite = new ItemCustomLore().setUnlocalizedName("ingot_saturnite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_saturnite"); plate_saturnite = new ItemCustomLore().setUnlocalizedName("plate_saturnite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_saturnite"); ingot_fiberglass = new ItemCustomLore().setUnlocalizedName("ingot_fiberglass").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_fiberglass"); - ingot_asbestos = new ItemHazard().addAsbestos().setUnlocalizedName("ingot_asbestos").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_asbestos"); - powder_asbestos = new ItemHazard().addAsbestos().setUnlocalizedName("powder_asbestos").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_asbestos"); + ingot_asbestos = new ItemHazard().addAsbestos().toItem().setUnlocalizedName("ingot_asbestos").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_asbestos"); + powder_asbestos = new ItemHazard().addAsbestos().toItem().setUnlocalizedName("powder_asbestos").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_asbestos"); ingot_electronium = new ItemCustomLore().setUnlocalizedName("ingot_electronium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_electronium"); nugget_mercury = new ItemCustomLore().setUnlocalizedName("nugget_mercury").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_mercury"); bottle_mercury = new ItemCustomLore().setUnlocalizedName("bottle_mercury").setContainerItem(Items.glass_bottle).setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bottle_mercury"); @@ -2413,7 +2413,7 @@ public class ModItems { crystal_schrabidium = new ItemHazard(ItemHazard.sa326 * ItemHazard.block, false, true).setUnlocalizedName("crystal_schrabidium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_schrabidium"); crystal_rare = new Item().setUnlocalizedName("crystal_rare").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_rare"); crystal_phosphorus = new ItemHazard(0.0F, true).setUnlocalizedName("crystal_phosphorus").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_phosphorus"); - crystal_lithium = new ItemHazard().addHydroReactivity().setUnlocalizedName("crystal_lithium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_lithium"); + crystal_lithium = new ItemHazard().addHydroReactivity().toItem().setUnlocalizedName("crystal_lithium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_lithium"); crystal_starmetal = new Item().setUnlocalizedName("crystal_starmetal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_starmetal"); crystal_trixite = new ItemHazard(10.0F).setUnlocalizedName("crystal_trixite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_trixite"); @@ -2444,7 +2444,7 @@ public class ModItems { powder_chlorophyte = new Item().setUnlocalizedName("powder_chlorophyte").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_chlorophyte"); powder_red_copper = new Item().setUnlocalizedName("powder_red_copper").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_red_copper"); powder_steel = new Item().setUnlocalizedName("powder_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_steel"); - powder_lithium = new ItemHazard().addHydroReactivity().setUnlocalizedName("powder_lithium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lithium"); + powder_lithium = new ItemHazard().addHydroReactivity().toItem().setUnlocalizedName("powder_lithium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lithium"); powder_zirconium = new Item().setUnlocalizedName("powder_zirconium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_zirconium"); redstone_depleted = new Item().setUnlocalizedName("redstone_depleted").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":redstone_depleted"); powder_power = new ItemCustomLore().setUnlocalizedName("powder_power").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_energy_alt"); @@ -2478,7 +2478,7 @@ public class ModItems { powder_spark_mix = new Item().setUnlocalizedName("powder_spark_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_spark_mix"); powder_desh = new Item().setUnlocalizedName("powder_desh").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_desh"); powder_steel_tiny = new Item().setUnlocalizedName("powder_steel_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_steel_tiny"); - powder_lithium_tiny = new ItemHazard().addHydroReactivity().setUnlocalizedName("powder_lithium_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lithium_tiny"); + powder_lithium_tiny = new ItemHazard().addHydroReactivity().toItem().setUnlocalizedName("powder_lithium_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lithium_tiny"); powder_neodymium_tiny = new Item().setUnlocalizedName("powder_neodymium_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_neodymium_tiny"); powder_cobalt_tiny = new Item().setUnlocalizedName("powder_cobalt_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_cobalt_tiny"); powder_niobium_tiny = new Item().setUnlocalizedName("powder_niobium_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_niobium_tiny"); @@ -2665,7 +2665,7 @@ public class ModItems { pellet_rtg = new ItemRTGPellet(ItemHazard.pu238 * ItemHazard.billet * 3, true).setUnlocalizedName("pellet_rtg").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":pellet_rtg"); pellet_rtg_weak = new ItemHazard(ItemHazard.pu238 * ItemHazard.billet).setUnlocalizedName("pellet_rtg_weak").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":pellet_rtg_weak"); pellet_rtg_polonium = new ItemHazard(ItemHazard.po210 * ItemHazard.billet * 3, true).setUnlocalizedName("pellet_rtg_polonium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":pellet_rtg_polonium"); - pellet_rtg_gold = new ItemHazard().addRadiation(ItemHazard.au198 * ItemHazard.billet * 3).addFire(15).setUnlocalizedName("pellet_rtg_gold").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":pellet_rtg_gold"); + pellet_rtg_gold = new ItemHazard().addRadiation(ItemHazard.au198 * ItemHazard.billet * 3).addFire(15).toItem().setUnlocalizedName("pellet_rtg_gold").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":pellet_rtg_gold"); tritium_deuterium_cake = new ItemCustomLore().setUnlocalizedName("tritium_deuterium_cake").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":tritium_deuterium_cake"); piston_selenium = new Item().setUnlocalizedName("piston_selenium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":piston_selenium"); @@ -3036,9 +3036,9 @@ public class ModItems { rod_dual_coolant = new ItemCustomLore().setUnlocalizedName("rod_dual_coolant").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_dual_empty).setTextureName(RefStrings.MODID + ":rod_dual_coolant"); rod_quad_coolant = new ItemCustomLore().setUnlocalizedName("rod_quad_coolant").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_quad_empty).setTextureName(RefStrings.MODID + ":rod_quad_coolant"); - rod_lithium = new ItemHazard().addHydroReactivity().setUnlocalizedName("rod_lithium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_empty).setTextureName(RefStrings.MODID + ":rod_lithium"); - rod_dual_lithium = new ItemHazard().addHydroReactivity().setUnlocalizedName("rod_dual_lithium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_dual_empty).setTextureName(RefStrings.MODID + ":rod_dual_lithium"); - rod_quad_lithium = new ItemHazard().addHydroReactivity().setUnlocalizedName("rod_quad_lithium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_quad_empty).setTextureName(RefStrings.MODID + ":rod_quad_lithium"); + rod_lithium = new ItemHazard().addHydroReactivity().toItem().setUnlocalizedName("rod_lithium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_empty).setTextureName(RefStrings.MODID + ":rod_lithium"); + rod_dual_lithium = new ItemHazard().addHydroReactivity().toItem().setUnlocalizedName("rod_dual_lithium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_dual_empty).setTextureName(RefStrings.MODID + ":rod_dual_lithium"); + rod_quad_lithium = new ItemHazard().addHydroReactivity().toItem().setUnlocalizedName("rod_quad_lithium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_quad_empty).setTextureName(RefStrings.MODID + ":rod_quad_lithium"); rod_tritium = new ItemHazard(0.5F).setUnlocalizedName("rod_tritium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_empty).setTextureName(RefStrings.MODID + ":rod_tritium"); rod_dual_tritium = new ItemHazard(1F).setUnlocalizedName("rod_dual_tritium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_dual_empty).setTextureName(RefStrings.MODID + ":rod_dual_tritium"); diff --git a/src/main/java/com/hbm/items/block/ItemBlockHazard.java b/src/main/java/com/hbm/items/block/ItemBlockHazard.java new file mode 100644 index 000000000..6f0c832c1 --- /dev/null +++ b/src/main/java/com/hbm/items/block/ItemBlockHazard.java @@ -0,0 +1,43 @@ +package com.hbm.items.block; + +import java.util.List; + +import com.hbm.interfaces.IItemHazard; +import com.hbm.modules.ItemHazardModule; + +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class ItemBlockHazard extends ItemBlock { + + ItemHazardModule module; + + public ItemBlockHazard(Block block) { + super(block); + + if(block instanceof IItemHazard) { + this.module = ((IItemHazard)block).getModule(); + } + } + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int i, boolean b) { + + if(entity instanceof EntityLivingBase && this.module != null) + this.module.applyEffects((EntityLivingBase) entity, stack.stackSize, i, b); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + + super.addInformation(stack, player, list, bool); + + if(this.module != null) + this.module.addInformation(stack, player, list, bool); + } +} diff --git a/src/main/java/com/hbm/items/special/ItemHazard.java b/src/main/java/com/hbm/items/special/ItemHazard.java index 84369f2ac..f4270fc3a 100644 --- a/src/main/java/com/hbm/items/special/ItemHazard.java +++ b/src/main/java/com/hbm/items/special/ItemHazard.java @@ -2,7 +2,9 @@ package com.hbm.items.special; import java.util.List; +import com.hbm.interfaces.IItemHazard; import com.hbm.inventory.BreederRecipes; +import com.hbm.modules.ItemHazardModule; import com.hbm.util.ArmorUtil; import com.hbm.util.ContaminationUtil; import com.hbm.util.I18nUtil; @@ -16,7 +18,7 @@ import net.minecraft.potion.PotionEffect; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class ItemHazard extends ItemCustomLore { +public class ItemHazard extends ItemCustomLore implements IItemHazard { //AU192 64h α 500.00Rad/s 2 much spice :( //PO210 138d α 025.00Rad/s Spicy @@ -57,121 +59,30 @@ public class ItemHazard extends ItemCustomLore { public static final float rod = 0.5F; public static final float rod_dual = 1.0F; public static final float rod_quad = 2.0F; - - float radiation; - float digamma; - int fire; - boolean blinding; - boolean asbestos; - boolean hydro; + + ItemHazardModule module; public ItemHazard() { + this.module = new ItemHazardModule(); } - - public ItemHazard addRadiation(float radiation) { - this.radiation = radiation; - return this; - } - - public ItemHazard addDigamma(float digamma) { - this.digamma = digamma; - return this; - } - - public ItemHazard addFire(int fire) { - this.fire = fire; - return this; - } - - public ItemHazard addAsbestos() { - this.asbestos = true; - return this; - } - - public ItemHazard addHydroReactivity() { - this.hydro = true; - return this; + + @Override + public ItemHazardModule getModule() { + return this.module; } @Override public void onUpdate(ItemStack stack, World world, Entity entity, int i, boolean b) { if(entity instanceof EntityLivingBase) - applyEffects((EntityLivingBase) entity, stack.stackSize, i, b); - } - - public void applyEffects(EntityLivingBase entity, float mod, int slot, boolean currentItem) { - - if(this.radiation > 0) - ContaminationUtil.applyRadData(entity, this.radiation * mod / 20F); - - if(this.digamma > 0) - ContaminationUtil.applyDigammaData(entity, 1F / ((float) digamma)); - - if(this.fire > 0) - entity.setFire(this.fire); - - if(this.asbestos) - ContaminationUtil.applyAsbestos(entity, (int) (1 * mod)); - - if(this.hydro && currentItem) { - - if(!entity.worldObj.isRemote && entity.isInWater() && entity instanceof EntityPlayer) { - - EntityPlayer player = (EntityPlayer) entity; - ItemStack held = player.getHeldItem(); - - player.inventory.mainInventory[player.inventory.currentItem] = held.getItem().getContainerItem(held); - player.inventoryContainer.detectAndSendChanges(); - player.worldObj.newExplosion(null, player.posX, player.posY + player.getEyeHeight() - player.getYOffset(), player.posZ, 2F, true, true); - } - } - - if(this.blinding && !(entity instanceof EntityPlayer && ArmorUtil.checkForGoggles((EntityPlayer) entity))) { - ((EntityLivingBase) entity).addPotionEffect(new PotionEffect(Potion.blindness.id, 100, 0)); - } + this.module.applyEffects((EntityLivingBase) entity, stack.stackSize, i, b); } @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { super.addInformation(stack, player, list, bool); - - if(this.radiation > 0) { - list.add(EnumChatFormatting.GREEN + "[" + I18nUtil.resolveKey("trait.radioactive") + "]"); - String rad = "" + (Math.floor(radiation * 1000) / 1000); - list.add(EnumChatFormatting.YELLOW + (rad + "RAD/s")); - } - - if(this.fire > 0) { - list.add(EnumChatFormatting.GOLD + "[" + I18nUtil.resolveKey("trait.hot") + "]"); - } - - if(this.blinding) { - list.add(EnumChatFormatting.DARK_AQUA + "[" + I18nUtil.resolveKey("trait.blinding") + "]"); - } - - if(this.asbestos) { - list.add(EnumChatFormatting.WHITE + "[" + I18nUtil.resolveKey("trait.asbestos") + "]"); - } - - if(this.hydro) { - list.add(EnumChatFormatting.RED + "[" + I18nUtil.resolveKey("trait.hydro") + "]"); - } - - if(this.digamma > 0) { - float d = ((int) ((1000F / digamma) * 10F)) / 10F; - list.add(EnumChatFormatting.RED + "[" + I18nUtil.resolveKey("trait.digamma") + "]"); - list.add(EnumChatFormatting.DARK_RED + "" + d + "mDRX/s"); - } - - int[] breeder = BreederRecipes.getFuelValue(stack); - - if(breeder != null) { - list.add(BreederRecipes.getHEATString("[" + I18nUtil.resolveKey("trait.heat", breeder[0]) + "]", breeder[0])); - list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.breeding", breeder[1])); - list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.furnace", (breeder[0] * breeder[1] * 5))); - } + this.module.addInformation(stack, player, list, bool); } /* @@ -179,19 +90,22 @@ public class ItemHazard extends ItemCustomLore { */ @Deprecated() public ItemHazard(float radiation) { - this.radiation = radiation; + this(); + this.module.addRadiation(radiation); } @Deprecated() public ItemHazard(float radiation, boolean fire) { - this.radiation = radiation; - if(fire) this.fire = 5; + this(); + this.module.addRadiation(radiation); + if(fire) this.module.addFire(5); } @Deprecated() public ItemHazard(float radiation, boolean fire, boolean blinding) { - this.radiation = radiation; - this.blinding = blinding; - if(fire) this.fire = 5; + this(); + this.module.addRadiation(radiation); + this.module.addBlinding(); + if(fire) this.module.addFire(5); } } diff --git a/src/main/java/com/hbm/modules/ItemHazardModule.java b/src/main/java/com/hbm/modules/ItemHazardModule.java new file mode 100644 index 000000000..df04efa36 --- /dev/null +++ b/src/main/java/com/hbm/modules/ItemHazardModule.java @@ -0,0 +1,129 @@ +package com.hbm.modules; + +import java.util.List; + +import com.hbm.inventory.BreederRecipes; +import com.hbm.items.special.ItemHazard; +import com.hbm.util.ArmorUtil; +import com.hbm.util.ContaminationUtil; +import com.hbm.util.I18nUtil; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.EnumChatFormatting; + +public class ItemHazardModule { + + /** + * Dependency injection: It's fun for boys and girls! + * All this interface-pattern-wish-wash only exists for three reasons: + * -it lets me add item hazards with ease by using self-returning setters + * -it's agnositc and also works with ItemBlocks or whatever implementation I want it to work + * -it makes the system truly centralized and I don't have to add new cases to 5 different classes when adding a new hazard + */ + + float radiation; + float digamma; + int fire; + boolean blinding; + boolean asbestos; + boolean hydro; + + public void addRadiation(float radiation) { + this.radiation = radiation; + } + + public void addDigamma(float digamma) { + this.digamma = digamma; + } + + public void addFire(int fire) { + this.fire = fire; + } + + public void addAsbestos() { + this.asbestos = true; + } + + public void addBlinding() { + this.blinding = true; + } + + public void addHydroReactivity() { + this.hydro = true; + } + + public void applyEffects(EntityLivingBase entity, float mod, int slot, boolean currentItem) { + + if(this.radiation > 0) + ContaminationUtil.applyRadData(entity, this.radiation * mod / 20F); + + if(this.digamma > 0) + ContaminationUtil.applyDigammaData(entity, 1F / ((float) digamma)); + + if(this.fire > 0) + entity.setFire(this.fire); + + if(this.asbestos) + ContaminationUtil.applyAsbestos(entity, (int) (1 * mod)); + + if(this.hydro && currentItem) { + + if(!entity.worldObj.isRemote && entity.isInWater() && entity instanceof EntityPlayer) { + + EntityPlayer player = (EntityPlayer) entity; + ItemStack held = player.getHeldItem(); + + player.inventory.mainInventory[player.inventory.currentItem] = held.getItem().getContainerItem(held); + player.inventoryContainer.detectAndSendChanges(); + player.worldObj.newExplosion(null, player.posX, player.posY + player.getEyeHeight() - player.getYOffset(), player.posZ, 2F, true, true); + } + } + + if(this.blinding && !(entity instanceof EntityPlayer && ArmorUtil.checkForGoggles((EntityPlayer) entity))) { + ((EntityLivingBase) entity).addPotionEffect(new PotionEffect(Potion.blindness.id, 100, 0)); + } + } + + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + + if(this.radiation > 0) { + list.add(EnumChatFormatting.GREEN + "[" + I18nUtil.resolveKey("trait.radioactive") + "]"); + String rad = "" + (Math.floor(radiation * 1000) / 1000); + list.add(EnumChatFormatting.YELLOW + (rad + "RAD/s")); + } + + if(this.fire > 0) { + list.add(EnumChatFormatting.GOLD + "[" + I18nUtil.resolveKey("trait.hot") + "]"); + } + + if(this.blinding) { + list.add(EnumChatFormatting.DARK_AQUA + "[" + I18nUtil.resolveKey("trait.blinding") + "]"); + } + + if(this.asbestos) { + list.add(EnumChatFormatting.WHITE + "[" + I18nUtil.resolveKey("trait.asbestos") + "]"); + } + + if(this.hydro) { + list.add(EnumChatFormatting.RED + "[" + I18nUtil.resolveKey("trait.hydro") + "]"); + } + + if(this.digamma > 0) { + float d = ((int) ((1000F / digamma) * 10F)) / 10F; + list.add(EnumChatFormatting.RED + "[" + I18nUtil.resolveKey("trait.digamma") + "]"); + list.add(EnumChatFormatting.DARK_RED + "" + d + "mDRX/s"); + } + + int[] breeder = BreederRecipes.getFuelValue(stack); + + if(breeder != null) { + list.add(BreederRecipes.getHEATString("[" + I18nUtil.resolveKey("trait.heat", breeder[0]) + "]", breeder[0])); + list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.breeding", breeder[1])); + list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.furnace", (breeder[0] * breeder[1] * 5))); + } + } +}