diff --git a/src/main/java/com/hbm/hazard/HazardRegistry.java b/src/main/java/com/hbm/hazard/HazardRegistry.java index 7941322b3..c5b657d69 100644 --- a/src/main/java/com/hbm/hazard/HazardRegistry.java +++ b/src/main/java/com/hbm/hazard/HazardRegistry.java @@ -1,5 +1,6 @@ package com.hbm.hazard; +import com.hbm.hazard.transformer.HazardTransformerRadiationNBT; import com.hbm.hazard.type.HazardTypeBase; import com.hbm.hazard.type.HazardTypeRadiation; import com.hbm.items.special.ItemHazard; @@ -11,6 +12,9 @@ public class HazardRegistry { public static void registerItems() { HazardSystem.register("ingotPlutonium", makeData(RADIATION, ItemHazard.pu * ItemHazard.ingot)); //TODO: move all the itemhazard stuff here + + //TODO: move this into its own method + HazardSystem.trafos.add(new HazardTransformerRadiationNBT()); } private static HazardData makeData() { return new HazardData(); } diff --git a/src/main/java/com/hbm/hazard/HazardSystem.java b/src/main/java/com/hbm/hazard/HazardSystem.java index 37be806d4..33c597105 100644 --- a/src/main/java/com/hbm/hazard/HazardSystem.java +++ b/src/main/java/com/hbm/hazard/HazardSystem.java @@ -5,6 +5,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; +import com.hbm.hazard.transformer.HazardTransformerBase; import com.hbm.interfaces.Untested; import com.hbm.inventory.RecipesCommon.ComparableStack; @@ -35,6 +36,10 @@ public class HazardSystem { * For items that should, for whichever reason, be completely exempt from the hazard system. */ public static final HashSet blacklist = new HashSet(); + /* + * List of hazard transformers, called in order before and after unrolling all the HazardEntries. + */ + public static final List trafos = new ArrayList(); /** * Automatically casts the first parameter and registers it to the HazSys @@ -109,6 +114,10 @@ public class HazardSystem { List entries = new ArrayList(); + for(HazardTransformerBase trafo : trafos) { + trafo.transformPre(stack, entries); + } + int mutex = 0; for(HazardData data : chronological) { @@ -122,6 +131,10 @@ public class HazardSystem { } } + for(HazardTransformerBase trafo : trafos) { + trafo.transformPost(stack, entries); + } + return entries; } @@ -156,6 +169,17 @@ public class HazardSystem { } } } + + public static void updateLivingInventory(EntityLivingBase entity) { + + for(int i = 0; i < 5; i++) { + ItemStack stack = entity.getEquipmentInSlot(i); + + if(stack != null) { + applyHazards(stack, entity); + } + } + } @SideOnly(Side.CLIENT) public static void addFullTooltip(ItemStack stack, EntityPlayer player, List list) { diff --git a/src/main/java/com/hbm/hazard/transformer/HazardTransformerBase.java b/src/main/java/com/hbm/hazard/transformer/HazardTransformerBase.java new file mode 100644 index 000000000..dae52db0f --- /dev/null +++ b/src/main/java/com/hbm/hazard/transformer/HazardTransformerBase.java @@ -0,0 +1,13 @@ +package com.hbm.hazard.transformer; + +import java.util.List; + +import com.hbm.hazard.HazardEntry; + +import net.minecraft.item.ItemStack; + +public abstract class HazardTransformerBase { + + public abstract void transformPre(ItemStack stack, List entries); + public abstract void transformPost(ItemStack stack, List entries); +} diff --git a/src/main/java/com/hbm/hazard/transformer/HazardTransformerRadiationNBT.java b/src/main/java/com/hbm/hazard/transformer/HazardTransformerRadiationNBT.java new file mode 100644 index 000000000..6621fd117 --- /dev/null +++ b/src/main/java/com/hbm/hazard/transformer/HazardTransformerRadiationNBT.java @@ -0,0 +1,25 @@ +package com.hbm.hazard.transformer; + +import java.util.List; + +import com.hbm.hazard.HazardEntry; +import com.hbm.hazard.HazardRegistry; + +import net.minecraft.item.ItemStack; + +public class HazardTransformerRadiationNBT extends HazardTransformerBase { + + public static final String RAD_KEY = "hfrHazRadiation"; + + @Override + public void transformPre(ItemStack stack, List entries) { } + + @Override + public void transformPost(ItemStack stack, List entries) { + + if(stack.hasTagCompound() && stack.stackTagCompound.hasKey(RAD_KEY)) { + entries.add(new HazardEntry(HazardRegistry.RADIATION, stack.stackTagCompound.getFloat(RAD_KEY))); + } + } + +} diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index d3b31bac4..663eb5b20 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -33,6 +33,7 @@ import com.hbm.handler.ArmorModHandler; import com.hbm.handler.BossSpawnHandler; import com.hbm.handler.EntityEffectHandler; import com.hbm.handler.RadiationWorldHandler; +import com.hbm.hazard.HazardSystem; import com.hbm.interfaces.IBomb; import com.hbm.handler.HTTPHandler; import com.hbm.items.IEquipReceiver; @@ -486,6 +487,10 @@ public class ModEventHandler { } EntityEffectHandler.onUpdate(event.entityLiving); + + if(!event.entity.worldObj.isRemote && !(event.entityLiving instanceof EntityPlayer)) { + HazardSystem.updateLivingInventory(event.entityLiving); + } } public static int currentBrightness = 0; @@ -943,6 +948,10 @@ public class ModEventHandler { } /// PU RADIATION END /// + + /// NEW ITEM SYS START /// + HazardSystem.updatePlayerInventory(player); + /// NEW ITEM SYS END /// } //TODO: rewrite this so it doesn't look like shit