diff options
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/gregtech/GT_Mod.java | 2 | ||||
-rw-r--r-- | src/main/java/gregtech/api/enchants/Enchantment_Hazmat.java | 54 | ||||
-rw-r--r-- | src/main/java/gregtech/api/util/GT_Utility.java | 67 | ||||
-rw-r--r-- | src/main/java/gregtech/common/GT_Proxy.java | 3 |
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); |