aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/gregtech/GT_Mod.java2
-rw-r--r--src/main/java/gregtech/api/enchants/Enchantment_Hazmat.java54
-rw-r--r--src/main/java/gregtech/api/util/GT_Utility.java67
-rw-r--r--src/main/java/gregtech/common/GT_Proxy.java3
4 files changed, 114 insertions, 12 deletions
diff --git a/src/main/java/gregtech/GT_Mod.java b/src/main/java/gregtech/GT_Mod.java
index 9dd563c701..e38f4f0d02 100644
--- a/src/main/java/gregtech/GT_Mod.java
+++ b/src/main/java/gregtech/GT_Mod.java
@@ -20,6 +20,7 @@ import cpw.mods.fml.common.event.FMLServerStoppingEvent;
import cpw.mods.fml.common.registry.EntityRegistry;
import gregtech.api.GregTech_API;
import gregtech.api.enchants.Enchantment_EnderDamage;
+import gregtech.api.enchants.Enchantment_Hazmat;
import gregtech.api.enchants.Enchantment_Radioactivity;
import gregtech.api.enums.ConfigCategories;
import gregtech.api.enums.Element;
@@ -231,6 +232,7 @@ public class GT_Mod implements IGT_Mod {
GT_PreLoad.loadConfig(tMainConfig);
+ new Enchantment_Hazmat();
new Enchantment_EnderDamage();
new Enchantment_Radioactivity();
diff --git a/src/main/java/gregtech/api/enchants/Enchantment_Hazmat.java b/src/main/java/gregtech/api/enchants/Enchantment_Hazmat.java
new file mode 100644
index 0000000000..136b5c61a6
--- /dev/null
+++ b/src/main/java/gregtech/api/enchants/Enchantment_Hazmat.java
@@ -0,0 +1,54 @@
+package gregtech.api.enchants;
+
+import gregtech.api.enums.ConfigCategories;
+import gregtech.api.util.GT_Config;
+import gregtech.api.util.GT_LanguageManager;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.enchantment.EnumEnchantmentType;
+import net.minecraft.item.ItemArmor;
+import net.minecraft.item.ItemStack;
+
+public class Enchantment_Hazmat extends Enchantment {
+ public static Enchantment_Hazmat INSTANCE;
+
+ public Enchantment_Hazmat() {
+ super(GT_Config.addIDConfig(ConfigCategories.IDs.enchantments, "Hazmat", 13), 0, EnumEnchantmentType.armor);
+ GT_LanguageManager.addStringLocalization(getName(), "Hazmat");
+ INSTANCE = this;
+ }
+
+ @Override
+ public int getMinEnchantability(int aLevel) {
+ return 50;
+ }
+
+ @Override
+ public int getMaxEnchantability(int aLevel) {
+ return 100;
+ }
+
+ @Override
+ public int getMaxLevel() {
+ return 1;
+ }
+
+ @Override
+ public boolean canApply(ItemStack aStack) {
+ return aStack != null && (aStack.getItem() instanceof ItemArmor);
+ }
+
+ @Override
+ public boolean canApplyAtEnchantingTable(ItemStack itemStack) {
+ return false;
+ }
+
+ @Override
+ public boolean isAllowedOnBooks() {
+ return false;
+ }
+
+ @Override
+ public String getName() {
+ return "enchantment.protection.hazmat";
+ }
+}
diff --git a/src/main/java/gregtech/api/util/GT_Utility.java b/src/main/java/gregtech/api/util/GT_Utility.java
index 38e3ef0d8b..cfa261c321 100644
--- a/src/main/java/gregtech/api/util/GT_Utility.java
+++ b/src/main/java/gregtech/api/util/GT_Utility.java
@@ -24,6 +24,7 @@ import cpw.mods.fml.common.registry.GameRegistry;
import gregtech.api.GregTech_API;
import gregtech.api.damagesources.GT_DamageSources;
import gregtech.api.damagesources.GT_DamageSources.DamageSourceHotItem;
+import gregtech.api.enchants.Enchantment_Hazmat;
import gregtech.api.enchants.Enchantment_Radioactivity;
import gregtech.api.enums.*;
import gregtech.api.events.BlockScanningEvent;
@@ -2654,41 +2655,83 @@ public class GT_Utility {
}
public static boolean isWearingFullFrostHazmat(EntityLivingBase aEntity) {
- for (byte i = 1; i < 5; i++)
- if (!isStackInList(aEntity.getEquipmentInSlot(i), GregTech_API.sFrostHazmatList)) return false;
+ for (byte i = 1; i < 5; i++) {
+ ItemStack tStack = aEntity.getEquipmentInSlot(i);
+
+ if (!isStackInList(tStack, GregTech_API.sFrostHazmatList) && !hasHazmatEnchant(tStack)) {
+ return false;
+ }
+ }
return true;
}
public static boolean isWearingFullHeatHazmat(EntityLivingBase aEntity) {
- for (byte i = 1; i < 5; i++)
- if (!isStackInList(aEntity.getEquipmentInSlot(i), GregTech_API.sHeatHazmatList)) return false;
+ for (byte i = 1; i < 5; i++) {
+ ItemStack tStack = aEntity.getEquipmentInSlot(i);
+
+ if (!isStackInList(tStack, GregTech_API.sHeatHazmatList) && !hasHazmatEnchant(tStack)) {
+ return false;
+ }
+ }
+
return true;
}
public static boolean isWearingFullBioHazmat(EntityLivingBase aEntity) {
- for (byte i = 1; i < 5; i++)
- if (!isStackInList(aEntity.getEquipmentInSlot(i), GregTech_API.sBioHazmatList)) return false;
+ for (byte i = 1; i < 5; i++) {
+ ItemStack tStack = aEntity.getEquipmentInSlot(i);
+
+ if (!isStackInList(tStack, GregTech_API.sBioHazmatList) && !hasHazmatEnchant(tStack)) {
+ return false;
+ }
+ }
return true;
}
public static boolean isWearingFullRadioHazmat(EntityLivingBase aEntity) {
- for (byte i = 1; i < 5; i++)
- if (!isStackInList(aEntity.getEquipmentInSlot(i), GregTech_API.sRadioHazmatList)) return false;
+ for (byte i = 1; i < 5; i++) {
+ ItemStack tStack = aEntity.getEquipmentInSlot(i);
+
+ if (!isStackInList(tStack, GregTech_API.sRadioHazmatList) && !hasHazmatEnchant(tStack)) {
+ return false;
+ }
+ }
return true;
}
public static boolean isWearingFullElectroHazmat(EntityLivingBase aEntity) {
- for (byte i = 1; i < 5; i++)
- if (!isStackInList(aEntity.getEquipmentInSlot(i), GregTech_API.sElectroHazmatList)) return false;
+ for (byte i = 1; i < 5; i++) {
+ ItemStack tStack = aEntity.getEquipmentInSlot(i);
+
+ if (!isStackInList(tStack, GregTech_API.sElectroHazmatList) && !hasHazmatEnchant(tStack)) {
+ return false;
+ }
+ }
return true;
}
public static boolean isWearingFullGasHazmat(EntityLivingBase aEntity) {
- for (byte i = 1; i < 5; i++)
- if (!isStackInList(aEntity.getEquipmentInSlot(i), GregTech_API.sGasHazmatList)) return false;
+ for (byte i = 1; i < 5; i++) {
+ ItemStack tStack = aEntity.getEquipmentInSlot(i);
+
+ if (!isStackInList(tStack, GregTech_API.sGasHazmatList) && !hasHazmatEnchant(tStack)) {
+ return false;
+ }
+ }
return true;
}
+ public static boolean hasHazmatEnchant(ItemStack aStack) {
+ if (aStack == null) return false;
+ Map<Integer, Integer> tEnchantments = EnchantmentHelper.getEnchantments(aStack);
+ Integer tLevel = tEnchantments.get(Enchantment_Hazmat.INSTANCE.effectId);
+
+ if (tLevel != null && tLevel.intValue() >= 1) {
+ return true;
+ }
+ return false;
+ }
+
public static float getHeatDamageFromItem(ItemStack aStack) {
ItemData tData = GT_OreDictUnificator.getItemData(aStack);
return tData == null
diff --git a/src/main/java/gregtech/common/GT_Proxy.java b/src/main/java/gregtech/common/GT_Proxy.java
index 1a97ddd4d0..92cfd04655 100644
--- a/src/main/java/gregtech/common/GT_Proxy.java
+++ b/src/main/java/gregtech/common/GT_Proxy.java
@@ -2981,6 +2981,9 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG
}
public static boolean providesProtection(ItemStack aStack) {
+
+ if (GT_Utility.hasHazmatEnchant(aStack)) return true;
+
boolean isGas = GT_Utility.isStackInList(aStack, GregTech_API.sGasHazmatList);
boolean isBio = GT_Utility.isStackInList(aStack, GregTech_API.sBioHazmatList);
boolean isFrost = GT_Utility.isStackInList(aStack, GregTech_API.sFrostHazmatList);