aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Java/gtPlusPlus/api/objects/data/AutoMap.java79
-rw-r--r--src/Java/gtPlusPlus/core/handler/events/GeneralTooltipEventHandler.java14
-rw-r--r--src/Java/gtPlusPlus/core/util/minecraft/HazmatUtils.java190
3 files changed, 269 insertions, 14 deletions
diff --git a/src/Java/gtPlusPlus/api/objects/data/AutoMap.java b/src/Java/gtPlusPlus/api/objects/data/AutoMap.java
index 4663229514..fe2caa466d 100644
--- a/src/Java/gtPlusPlus/api/objects/data/AutoMap.java
+++ b/src/Java/gtPlusPlus/api/objects/data/AutoMap.java
@@ -3,7 +3,7 @@ package gtPlusPlus.api.objects.data;
import java.io.Serializable;
import java.util.*;
-public class AutoMap<V> implements Iterable<V>, Cloneable, Serializable, Collection<V>, Queue<V> {
+public class AutoMap<V> implements Iterable<V>, Cloneable, Serializable, Collection<V>, Queue<V>, List<V> {
/**
* The Internal Map
@@ -22,6 +22,10 @@ public class AutoMap<V> implements Iterable<V>, Cloneable, Serializable, Collect
this(new LinkedHashMap<Integer, V>());
}
+ public Map<Integer, V> getMap(){
+ return mInternalMap;
+ }
+
public AutoMap(Map<Integer, V> defaultMapType) {
mInternalMap = defaultMapType;
mInternalNameMap = new LinkedHashMap<String, Integer>();
@@ -211,5 +215,78 @@ public class AutoMap<V> implements Iterable<V>, Cloneable, Serializable, Collect
public V peek() {
return element();
}
+
+ @Override
+ public boolean addAll(int index, Collection<? extends V> c) {
+ for (V y : c) {
+ add(y);
+ }
+ return true;
+ }
+
+ @Override
+ public V set(int index, V element) {
+ return mInternalMap.put(index, element);
+ }
+
+ @Override
+ public void add(int index, V element) {
+ add(element);
+ }
+
+ @Override
+ public V remove(int index) {
+ V h = mInternalMap.get(index);
+ set(index, null);
+ return h;
+ }
+
+ @Override
+ public int indexOf(Object o) {
+ int aCount = 0;
+ for (V of : mInternalMap.values()) {
+ if (of != o) {
+ aCount++;
+ continue;
+ }
+ else {
+ return aCount;
+ }
+ }
+ return -1;
+ }
+
+ @Override
+ public int lastIndexOf(Object o) {
+ //TODO
+ return indexOf(o);
+ }
+
+ @Override
+ public ListIterator<V> listIterator() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ListIterator<V> listIterator(int index) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public List<V> subList(int fromIndex, int toIndex) {
+ AutoMap<V> aNewSubList = new AutoMap<V>();
+ for (int slot=fromIndex; slot<=toIndex; slot++) {
+ V obj = mInternalMap.get(slot);
+ if (obj == null) {
+ continue;
+ }
+ else {
+ aNewSubList.put(obj);
+ }
+ }
+ return aNewSubList;
+ }
}
diff --git a/src/Java/gtPlusPlus/core/handler/events/GeneralTooltipEventHandler.java b/src/Java/gtPlusPlus/core/handler/events/GeneralTooltipEventHandler.java
index ef91647c1a..5b49b495ce 100644
--- a/src/Java/gtPlusPlus/core/handler/events/GeneralTooltipEventHandler.java
+++ b/src/Java/gtPlusPlus/core/handler/events/GeneralTooltipEventHandler.java
@@ -1,22 +1,16 @@
package gtPlusPlus.core.handler.events;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
-
-import net.minecraft.block.Block;
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
-import net.minecraft.util.EnumChatFormatting;
-
import gregtech.api.enums.ItemList;
-import gregtech.api.util.GT_Utility;
import gtPlusPlus.GTplusplus;
import gtPlusPlus.GTplusplus.INIT_PHASE;
-import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.core.block.ModBlocks;
-import gtPlusPlus.core.handler.events.BlockEventHandler;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.util.minecraft.ItemUtils;
import gtPlusPlus.core.util.sys.KeyboardUtils;
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.EnumChatFormatting;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
public class GeneralTooltipEventHandler {
@@ -29,7 +23,7 @@ public class GeneralTooltipEventHandler {
public void onItemTooltip(ItemTooltipEvent event){
- if (GTplusplus.CURRENT_LOAD_PHASE != INIT_PHASE.STARTED && GTplusplus.CURRENT_LOAD_PHASE != INIT_PHASE.SERVER_START) {
+ if (GTplusplus.CURRENT_LOAD_PHASE != INIT_PHASE.STARTED || GTplusplus.CURRENT_LOAD_PHASE != INIT_PHASE.SERVER_START) {
return;
}
if (event.itemStack == null) {
diff --git a/src/Java/gtPlusPlus/core/util/minecraft/HazmatUtils.java b/src/Java/gtPlusPlus/core/util/minecraft/HazmatUtils.java
index f05b1ef393..638e5dec10 100644
--- a/src/Java/gtPlusPlus/core/util/minecraft/HazmatUtils.java
+++ b/src/Java/gtPlusPlus/core/util/minecraft/HazmatUtils.java
@@ -7,50 +7,186 @@ import static gregtech.api.GregTech_API.sGasHazmatList;
import static gregtech.api.GregTech_API.sHeatHazmatList;
import static gregtech.api.GregTech_API.sRadioHazmatList;
+import java.util.Collections;
+import java.util.HashMap;
+
+import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import gregtech.api.objects.GT_HashSet;
+import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.util.GT_ModHandler;
+import gtPlusPlus.GTplusplus;
+import gtPlusPlus.GTplusplus.INIT_PHASE;
import gtPlusPlus.api.objects.data.AutoMap;
+import gtPlusPlus.core.util.Utils;
+import ic2.core.Ic2Items;
+import ic2.core.item.armor.ItemArmorHazmat;
+import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
+import net.minecraftforge.event.entity.player.ItemTooltipEvent;
public class HazmatUtils {
+
+
+ public static final GT_HashSet<GT_ItemStack> sHazmatList = new GT_HashSet<GT_ItemStack>();
+
+ private static final HashMap<ItemStack, AutoMap<String>> mToolTips = new HashMap<ItemStack, AutoMap<String>>();
+
+
+ private static boolean mInit = false;
+ private static HazmatUtils mInstance;
+
+ public static void init() {
+ if (mInit){
+ return;
+ }
+
+ mInstance = new HazmatUtils();
+
+ sHazmatList.add(GT_ModHandler.getIC2Item("hazmatHelmet", 1L, 32767));
+ sHazmatList.add(GT_ModHandler.getIC2Item("hazmatChestplate", 1L, 32767));
+ sHazmatList.add(GT_ModHandler.getIC2Item("hazmatLeggings", 1L, 32767));
+ sHazmatList.add(GT_ModHandler.getIC2Item("hazmatBoots", 1L, 32767));
+ //Make Nano a hazmat suit
+ addProtection(Ic2Items.nanoHelmet);
+ addProtection(Ic2Items.nanoBodyarmor);
+ addProtection(Ic2Items.nanoLeggings);
+ addProtection(Ic2Items.nanoBoots);
+
+ //Make Quantum a hazmat suit
+ addProtection(Ic2Items.quantumHelmet);
+ addProtection(Ic2Items.quantumBodyarmor);
+ addProtection(Ic2Items.quantumLeggings);
+ addProtection(Ic2Items.quantumBoots);
+
+ Utils.registerEvent(mInstance);
+
+ }
+
+ private final static String mToolTipText = "Provides protection from:";
+
+ @SubscribeEvent
+ public void onItemTooltip(ItemTooltipEvent event){
+ if (GTplusplus.CURRENT_LOAD_PHASE != INIT_PHASE.STARTED || GTplusplus.CURRENT_LOAD_PHASE != INIT_PHASE.SERVER_START) {
+ return;
+ }
+ if (event.itemStack == null || isVanillaHazmatPiece(event.itemStack)) {
+ return;
+ }
+ else {
+ ItemStack aStack = event.itemStack;
+ String[] aTooltips = getTooltips(aStack);
+ if (aTooltips == null || aTooltips.length == 0) {
+ return;
+ }
+ else {
+ if (providesProtection(aStack)) {
+ event.toolTip.add("Provides full hazmat protection.");
+ }
+ else {
+ event.toolTip.add(mToolTipText);
+ for (String r : aTooltips) {
+ event.toolTip.add(" - "+r);
+ }
+ }
+ }
+ }
+ }
+
+
+ /**
+ * Static function to replace {@link #ic2.core.item.armor.ItemArmorHazmat.hasCompleteHazmat(EntityLivingBase)}.
+ * Because IC2 doesn't let us register things ourself, anything registered via GT/GT++ will return true.
+ * @param living - Entity Wearing Armour
+ * @return - Does {@link EntityLivingBase} have a full hazmat suit on?
+ */
+ public static boolean hasCompleteHazmat(EntityLivingBase living) {
+ //Entity is Null, cannot have Hazmat.
+ if (living == null || living.isDead) {
+ return false;
+ }
+ else {
+
+ //Map All Player Armour slots
+ AutoMap<ItemStack> aEquipment = new AutoMap<ItemStack>();
+ for (int i = 1; i < 5; ++i) {
+ ItemStack stack = living.getEquipmentInSlot(i);
+
+ //Item is Null, cannot have full suit
+ if (stack == null) {
+ return false;
+ }
+ else {
+ aEquipment.put(stack);
+ }
+ }
+
+ //Compare Equipment to all items mapped for full hazmat.
+ for (ItemStack aSlotStack : aEquipment) {
+ if (!isHazmatPiece(aSlotStack)) {
+ return false;
+ }
+ }
+
+ //We are in some kind of full hazmat, huzzah!
+ return true;
+ }
+ }
+
+
+
+ public static boolean isVanillaHazmatPiece(ItemStack aArmour) {
+ return aArmour != null ? aArmour.getItem() instanceof ItemArmorHazmat : false;
+ }
+
+ public static boolean isHazmatPiece(ItemStack aStack) {
+ return isVanillaHazmatPiece(aStack) || providesProtection(aStack);
+ }
+
/**
* Registers the {@link ItemStack} to all types of protection.
* Provides full hazmat protection. Frost, Fire, Bio, Gas, Radioaton & Electricity.
* @param aStack - The Armour to provide protection.
* @return - Did we register this ItemStack properly?
*/
- public boolean addProtection(ItemStack aStack) {
+ public static boolean addProtection(ItemStack aStack) {
AutoMap<Boolean> aAdded = new AutoMap<Boolean>();
aAdded.put(addProtection_Frost(aStack));
aAdded.put(addProtection_Fire(aStack));
aAdded.put(addProtection_Biohazard(aStack));
aAdded.put(addProtection_Gas(aStack));
aAdded.put(addProtection_Radiation(aStack));
- aAdded.put(addProtection_Electricty(aStack));
+ aAdded.put(addProtection_Electricty(aStack));
for (boolean b : aAdded) {
if (!b) {
return false;
}
}
+ sHazmatList.add(aStack);
return true;
}
-
public static boolean addProtection_Frost(ItemStack aStack) {
+ registerTooltip(aStack, "Frost");
return addProtection_Generic(sFrostHazmatList, aStack);
}
public static boolean addProtection_Fire(ItemStack aStack) {
+ registerTooltip(aStack, "Heat");
return addProtection_Generic(sHeatHazmatList, aStack);
}
public static boolean addProtection_Biohazard(ItemStack aStack) {
+ registerTooltip(aStack, "Biohazards");
return addProtection_Generic(sBioHazmatList, aStack);
}
public static boolean addProtection_Gas(ItemStack aStack) {
+ registerTooltip(aStack, "Gas");
return addProtection_Generic(sGasHazmatList, aStack);
}
public static boolean addProtection_Radiation(ItemStack aStack) {
+ registerTooltip(aStack, "Radiation");
return addProtection_Generic(sRadioHazmatList, aStack);
}
public static boolean addProtection_Electricty(ItemStack aStack) {
+ registerTooltip(aStack, "Electricity");
return addProtection_Generic(sElectroHazmatList, aStack);
}
@@ -60,4 +196,52 @@ public class HazmatUtils {
return aMapSize < aSet.size();
}
+ public static boolean providesProtection(ItemStack aStack) {
+ return providesProtetion_Generic(sHazmatList, aStack);
+ }
+ public static boolean providesProtetion_Frost(ItemStack aStack) {
+ return providesProtetion_Generic(sFrostHazmatList, aStack);
+ }
+ public static boolean providesProtetion_Fire(ItemStack aStack) {
+ return providesProtetion_Generic(sHeatHazmatList, aStack);
+ }
+ public static boolean providesProtetion_Biohazard(ItemStack aStack) {
+ return providesProtetion_Generic(sBioHazmatList, aStack);
+ }
+ public static boolean providesProtetion_Gas(ItemStack aStack) {
+ return providesProtetion_Generic(sGasHazmatList, aStack);
+ }
+ public static boolean providesProtetion_Radiation(ItemStack aStack) {
+ return providesProtetion_Generic(sRadioHazmatList, aStack);
+ }
+ public static boolean providesProtetion_Electricity(ItemStack aStack) {
+ return providesProtetion_Generic(sElectroHazmatList, aStack);
+ }
+
+ private static boolean providesProtetion_Generic(GT_HashSet aSet, ItemStack aStack) {
+ if (isVanillaHazmatPiece(aStack)) {
+ return true;
+ }
+ return aSet.getMap().containsKey(aStack);
+ }
+
+ private static String[] getTooltips(ItemStack aStack) {
+ AutoMap<String> aTempTooltipData = mToolTips.get(aStack);
+ if (aTempTooltipData == null) {
+ return new String[] {};
+ }
+ else {
+ Collections.sort(aTempTooltipData);
+ return aTempTooltipData.toArray();
+ }
+ }
+
+ private static void registerTooltip(ItemStack aStack, String aTooltip) {
+ AutoMap<String> aTempTooltipData = mToolTips.get(aStack);
+ if (aTempTooltipData == null) {
+ aTempTooltipData = new AutoMap<String>();
+ }
+ aTempTooltipData.add(aTooltip);
+ }
+
}