diff --git a/src/main/java/mekanism/client/ClientTickHandler.java b/src/main/java/mekanism/client/ClientTickHandler.java index 31c7d82259c..822cf643fa0 100644 --- a/src/main/java/mekanism/client/ClientTickHandler.java +++ b/src/main/java/mekanism/client/ClientTickHandler.java @@ -70,9 +70,9 @@ public class ClientTickHandler { public static Set tickingSet = new ReferenceOpenHashSet<>(); public static Map portableTeleports = new Object2ObjectOpenHashMap<>(); public static int wheelStatus = 0; + public static boolean visionEnhancement = false; public boolean initHoliday = false; public boolean shouldReset = false; - public static boolean visionEnhancement = false; public static void killDeadNetworks() { tickingSet.removeIf(iClientTicker -> !iClientTicker.needsTicks()); @@ -166,17 +166,6 @@ public static void portableTeleport(EntityPlayer player, EnumHand hand, Frequenc } } - @SubscribeEvent - public void renderEntityPre(RenderPlayerEvent.Pre evt) { - setModelVisibility(evt.getEntityPlayer(), evt.getRenderer(), false); - } - - - @SubscribeEvent - public void renderEntityPost(RenderPlayerEvent.Post evt) { - setModelVisibility(evt.getEntityPlayer(), evt.getRenderer(), true); - } - private static void setModelVisibility(EntityPlayer entity, Render entityModel, boolean showModel) { if (entityModel instanceof RenderPlayer renderPlayer) { if (entity.getItemStackFromSlot(EntityEquipmentSlot.HEAD).getItem() instanceof ItemMekaSuitArmor) { @@ -204,6 +193,20 @@ private static void setModelVisibility(EntityPlayer entity, Render entityMode } } + public static boolean isVisionEnhancementOn(EntityPlayer player) { + ItemStack head = player.getItemStackFromSlot(EntityEquipmentSlot.HEAD); + return !head.isEmpty() && head.getItem() instanceof ItemMekAsuitHeadArmour armour && UpgradeHelper.isUpgradeInstalled(head, moduleUpgrade.VisionEnhancementUnit) && armour.isVision; + } + + @SubscribeEvent + public void renderEntityPre(RenderPlayerEvent.Pre evt) { + setModelVisibility(evt.getEntityPlayer(), evt.getRenderer(), false); + } + + @SubscribeEvent + public void renderEntityPost(RenderPlayerEvent.Post evt) { + setModelVisibility(evt.getEntityPlayer(), evt.getRenderer(), true); + } //Maybe it works @SubscribeEvent @@ -211,7 +214,6 @@ public void remove(WorldEvent.Unload event) { portableTeleports.remove(mc.player); } - @SubscribeEvent public void onTick(ClientTickEvent event) { if (event.phase == Phase.START) { @@ -451,19 +453,6 @@ public void onMouseEvent(MouseEvent event) { } } - private static class TeleportData { - - private EnumHand hand; - private Frequency freq; - private long teleportTime; - - public TeleportData(EnumHand h, Frequency f, long t) { - hand = h; - freq = f; - teleportTime = t; - } - } - @SubscribeEvent public void GuiScreenEvent(GuiOpenEvent event) { if (event.getGui() instanceof GuiGameOver) { @@ -472,18 +461,13 @@ public void GuiScreenEvent(GuiOpenEvent event) { } if (mc.player instanceof EntityPlayerSP) { ItemStack head = mc.player.getItemStackFromSlot(EntityEquipmentSlot.HEAD); - if (!mc.player.isEntityAlive() && !head.isEmpty() && head.getItem() instanceof ItemMekAsuitHeadArmour && UpgradeHelper.isUpgradeInstalled(head, moduleUpgrade.EMERGENCY_RESCUE)) { + if (!mc.player.isEntityAlive() && !head.isEmpty() && head.getItem() instanceof ItemMekAsuitHeadArmour armour && ((UpgradeHelper.isUpgradeInstalled(head, moduleUpgrade.EMERGENCY_RESCUE) && armour.getEmergency(head)) || (UpgradeHelper.isUpgradeInstalled(head, moduleUpgrade.ADVANCED_INTERCEPTION_SYSTEM_UNIT) && armour.getInterception(head)))) { event.setCanceled(true); } } } } - public static boolean isVisionEnhancementOn(EntityPlayer player) { - ItemStack head = player.getItemStackFromSlot(EntityEquipmentSlot.HEAD); - return !head.isEmpty() && head.getItem() instanceof ItemMekAsuitHeadArmour armour&& UpgradeHelper.isUpgradeInstalled(head, moduleUpgrade.VisionEnhancementUnit) && armour.isVision; - } - @SubscribeEvent public void onFogLighting(EntityViewRenderEvent.FogColors event) { if (visionEnhancement) { @@ -511,4 +495,17 @@ public void onFog(EntityViewRenderEvent.RenderFogEvent event) { } } + private static class TeleportData { + + private EnumHand hand; + private Frequency freq; + private long teleportTime; + + public TeleportData(EnumHand h, Frequency f, long t) { + hand = h; + freq = f; + teleportTime = t; + } + } + } diff --git a/src/main/java/mekanism/common/CommonPlayerTickHandler.java b/src/main/java/mekanism/common/CommonPlayerTickHandler.java index 5b96e229404..ef023dc4a58 100644 --- a/src/main/java/mekanism/common/CommonPlayerTickHandler.java +++ b/src/main/java/mekanism/common/CommonPlayerTickHandler.java @@ -188,7 +188,6 @@ public void isMekAsuitArmorFlying(EntityPlayer player) { } - @SubscribeEvent public void onEntityAttacked(LivingAttackEvent event) { EntityLivingBase entity = event.getEntityLiving(); @@ -401,18 +400,16 @@ public void getBreakSpeed(PlayerEvent.BreakSpeed event) { event.setNewSpeed(speed); } - @Desugar - private record FallEnergyInfo(ItemStack stack, float damageRatio, float energyCost) { - } - //When the player dies @SubscribeEvent public void onDeath(LivingDeathEvent event) { if (event.getEntityLiving() instanceof EntityPlayer player) { ItemStack head = player.getItemStackFromSlot(EntityEquipmentSlot.HEAD); - if (!head.isEmpty() && head.getItem() instanceof ItemMekAsuitHeadArmour && UpgradeHelper.isUpgradeInstalled(head, moduleUpgrade.EMERGENCY_RESCUE)) { + if (!head.isEmpty() && head.getItem() instanceof ItemMekAsuitHeadArmour armour && + ((UpgradeHelper.isUpgradeInstalled(head, moduleUpgrade.EMERGENCY_RESCUE) && armour.getEmergency(head)) || + (UpgradeHelper.isUpgradeInstalled(head, moduleUpgrade.ADVANCED_INTERCEPTION_SYSTEM_UNIT) && armour.getInterception(head)))) { event.setCanceled(true); - if (!UpgradeHelper.isUpgradeInstalled(head,moduleUpgrade.ADVANCED_INTERCEPTION_SYSTEM_UNIT)){ + if (!UpgradeHelper.isUpgradeInstalled(head, moduleUpgrade.ADVANCED_INTERCEPTION_SYSTEM_UNIT)) { int installed = UpgradeHelper.getUpgradeLevel(head, moduleUpgrade.EMERGENCY_RESCUE); int toAdd = Math.max(installed - 1, 0); UpgradeHelper.setUpgradeLevel(head, moduleUpgrade.EMERGENCY_RESCUE, toAdd); @@ -429,15 +426,16 @@ public void onDeath(LivingDeathEvent event) { } } - @SubscribeEvent public void onLivingUpdate(LivingUpdateEvent event) { //If the player is affected by setHealth //What? Why do you want to go straight to setHealth? - if (MekanismConfig.current().mekce.MekAsuitOverloadProtection.val()){ + if (MekanismConfig.current().mekce.MekAsuitOverloadProtection.val()) { if (event.getEntityLiving() instanceof EntityPlayer player) { ItemStack head = player.getItemStackFromSlot(EntityEquipmentSlot.HEAD); - if (!player.isEntityAlive() && !head.isEmpty() && head.getItem() instanceof ItemMekAsuitHeadArmour && UpgradeHelper.isUpgradeInstalled(head, moduleUpgrade.EMERGENCY_RESCUE)) { + if (!player.isEntityAlive() && !head.isEmpty() && head.getItem() instanceof ItemMekAsuitHeadArmour armour && + ((UpgradeHelper.isUpgradeInstalled(head, moduleUpgrade.EMERGENCY_RESCUE) && armour.getEmergency(head)) || + (UpgradeHelper.isUpgradeInstalled(head, moduleUpgrade.ADVANCED_INTERCEPTION_SYSTEM_UNIT) && armour.getInterception(head)))) { player.hurtResistantTime = 20; player.deathTime = 0; player.isDead = false; @@ -448,7 +446,7 @@ public void onLivingUpdate(LivingUpdateEvent event) { player.addPotionEffect(new PotionEffect(MobEffects.ABSORPTION, 100, 2)); player.setAir(300); player.getFoodStats().addStats(20, 20); - if (!UpgradeHelper.isUpgradeInstalled(head,moduleUpgrade.ADVANCED_INTERCEPTION_SYSTEM_UNIT)){ + if (!UpgradeHelper.isUpgradeInstalled(head, moduleUpgrade.ADVANCED_INTERCEPTION_SYSTEM_UNIT)) { int installed = UpgradeHelper.getUpgradeLevel(head, moduleUpgrade.EMERGENCY_RESCUE); int toAdd = Math.max(installed - 1, 0); UpgradeHelper.setUpgradeLevel(head, moduleUpgrade.EMERGENCY_RESCUE, toAdd); @@ -457,4 +455,8 @@ public void onLivingUpdate(LivingUpdateEvent event) { } } } + + @Desugar + private record FallEnergyInfo(ItemStack stack, float damageRatio, float energyCost) { + } } diff --git a/src/main/java/mekanism/common/item/armor/ItemMekAsuitBodyArmour.java b/src/main/java/mekanism/common/item/armor/ItemMekAsuitBodyArmour.java index 6bfc86816a3..c3bdf4c0f76 100644 --- a/src/main/java/mekanism/common/item/armor/ItemMekAsuitBodyArmour.java +++ b/src/main/java/mekanism/common/item/armor/ItemMekAsuitBodyArmour.java @@ -1,5 +1,6 @@ package mekanism.common.item.armor; +import com.brandon3055.draconicevolution.api.itemconfig.ItemConfigFieldRegistry; import com.google.common.collect.Multimap; import mekanism.api.EnumColor; import mekanism.api.gas.Gas; @@ -253,12 +254,16 @@ public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { if (!world.isRemote) { ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); ItemStack headStack = player.getItemStackFromSlot(EntityEquipmentSlot.HEAD); + boolean isHealth = false; + if (headStack.getItem() instanceof ItemMekAsuitHeadArmour armour){ + isHealth = UpgradeHelper.isUpgradeInstalled(headStack, moduleUpgrade.ADVANCED_INTERCEPTION_SYSTEM_UNIT) && armour.getInterception(headStack); + } if (chestStack.getItem() instanceof ItemMekAsuitBodyArmour) { if (UpgradeHelper.isUpgradeInstalled(chestStack, moduleUpgrade.CHARGE_DISTRIBUTION_UNIT)) { chargeSuit(player); } if (UpgradeHelper.isUpgradeInstalled(chestStack, moduleUpgrade.HEALTH_REGENERATION)) { - if (!UpgradeHelper.isUpgradeInstalled(headStack, moduleUpgrade.ADVANCED_INTERCEPTION_SYSTEM_UNIT)) { + if (isHealth) { ArmourTick++; if (player.getHealth() < player.getMaxHealth() && ArmourTick % 20 == 0) { player.heal(UpgradeHelper.getUpgradeLevel(chestStack, moduleUpgrade.HEALTH_REGENERATION)); diff --git a/src/main/java/mekanism/common/item/armor/ItemMekAsuitHeadArmour.java b/src/main/java/mekanism/common/item/armor/ItemMekAsuitHeadArmour.java index 2baa6a87b38..3b06de903cd 100644 --- a/src/main/java/mekanism/common/item/armor/ItemMekAsuitHeadArmour.java +++ b/src/main/java/mekanism/common/item/armor/ItemMekAsuitHeadArmour.java @@ -1,5 +1,8 @@ package mekanism.common.item.armor; +import com.brandon3055.draconicevolution.api.itemconfig.BooleanConfigField; +import com.brandon3055.draconicevolution.api.itemconfig.ItemConfigFieldRegistry; +import com.brandon3055.draconicevolution.api.itemconfig.ToolConfigHelper; import com.google.common.collect.Collections2; import com.google.common.collect.Lists; import com.google.common.collect.Multimap; @@ -13,6 +16,7 @@ import mekanism.common.MekanismFluids; import mekanism.common.MekanismItems; import mekanism.common.config.MekanismConfig; +import mekanism.common.integration.MekanismHooks; import mekanism.common.item.interfaces.IItemHUDProvider; import mekanism.common.moduleUpgrade; import mekanism.common.util.ItemDataUtils; @@ -26,7 +30,6 @@ import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -34,6 +37,7 @@ import net.minecraft.util.DamageSource; import net.minecraft.world.World; import net.minecraft.world.biome.Biome; +import net.minecraftforge.fml.common.Optional; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import org.jetbrains.annotations.NotNull; @@ -59,7 +63,7 @@ public boolean isValidArmor(ItemStack stack, EntityEquipmentSlot armorType, Enti public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, EntityEquipmentSlot armorSlot, ModelBiped _default) { ModelMekAsuitHead armorModel = ModelMekAsuitHead.head; ModuleSolarHelmet Solar = ModuleSolarHelmet.solar; - if (UpgradeHelper.isUpgradeInstalled(itemStack, moduleUpgrade.SolarRechargingUnit)) { + if (UpgradeHelper.isUpgradeInstalled(itemStack, moduleUpgrade.SolarRechargingUnit) && getSolar(itemStack)) { if (armorModel.helmet_armor.childModels.contains(armorModel.hide)) { armorModel.helmet_armor.childModels.remove(armorModel.hide); } @@ -92,7 +96,7 @@ public ArmorProperties getProperties(EntityLivingBase player, @NotNull ItemStack ArmorProperties properties = new ArmorProperties(0, 0, 0); if (this == MekanismItems.MekAsuitHelmet) { properties = new ArmorProperties(1, MekanismConfig.current().meka.MekaSuitHelmetDamageRatio.val(), MekanismConfig.current().meka.MekaSuitHelmetDamageMax.val()); - properties.Toughness = MekanismConfig.current().meka.mekaSuitToughness.val(); + properties.Toughness = MekanismConfig.current().meka.mekaSuitToughness.val(); } return properties; } @@ -165,7 +169,6 @@ public int getStored(ItemStack itemstack) { } - public GasStack useGas(ItemStack itemstack, int amount) { GasStack gas = getGas(itemstack); if (gas == null) { @@ -186,7 +189,7 @@ public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); if (headStack.getItem() instanceof ItemMekAsuitHeadArmour item) { - if (UpgradeHelper.isUpgradeInstalled(itemStack, moduleUpgrade.NutritionalInjectionUnit)) { + if (UpgradeHelper.isUpgradeInstalled(itemStack, moduleUpgrade.NutritionalInjectionUnit) && getNutritional(itemStack)) { if (player.canEat(false) && item.getGas(headStack) != null) { int needed = Math.min(20 - player.getFoodStats().getFoodLevel(), item.getStored(headStack) / 50); int toFeed = Math.min((int) MekanismConfig.current().meka.mekaSuitEnergyUsageNutritionalInjection.val(), needed); @@ -198,7 +201,7 @@ public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { } } - if (UpgradeHelper.isUpgradeInstalled(itemStack, moduleUpgrade.ElectrolyticBreathingUnit)) { + if (UpgradeHelper.isUpgradeInstalled(itemStack, moduleUpgrade.ElectrolyticBreathingUnit) && getElectrolyticBreathing(itemStack)) { if (player.isEntityAlive() && player.isInsideOfMaterial(Material.WATER)) { if (!player.canBreatheUnderwater() && !player.capabilities.disableDamage) { player.setAir(300); @@ -217,28 +220,28 @@ public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { if (UpgradeHelper.isUpgradeInstalled(itemStack, moduleUpgrade.InhalationPurificationUnit)) { List effects = Lists.newArrayList(player.getActivePotionEffects()); - //if () - for (PotionEffect potion : Collections2.filter(effects, potion -> potion.getPotion().isBadEffect())) { - item.setEnergy(headStack, item.getEnergy(headStack) - MekanismConfig.current().meka.mekaSuitEnergyUsagePotionTick.val()); - player.removePotionEffect(potion.getPotion()); + if (getInhalationBad(headStack)) { + for (PotionEffect potion : Collections2.filter(effects, potion -> potion.getPotion().isBadEffect())) { + item.setEnergy(headStack, item.getEnergy(headStack) - MekanismConfig.current().meka.mekaSuitEnergyUsagePotionTick.val()); + player.removePotionEffect(potion.getPotion()); + } + } + if (getInhalationGood(headStack)) { + for (PotionEffect potion : Collections2.filter(effects, potion -> !potion.getPotion().isBadEffect())) { + item.setEnergy(headStack, item.getEnergy(headStack) - 40000); + player.removePotionEffect(potion.getPotion()); + } } - /*if () - for (PotionEffect potion : Collections2.filter(effects, potion -> !potion.getPotion().isBadEffect())) { - item.setEnergy(headStack, item.getEnergy(headStack) - 40000); - player.removePotionEffect(potion.getPotion()); - } - */ } - if (UpgradeHelper.isUpgradeInstalled(itemStack, moduleUpgrade.VisionEnhancementUnit) && !player.getEntityWorld().isDaytime() && !player.getEntityWorld().provider.isNether()) { + if (UpgradeHelper.isUpgradeInstalled(itemStack, moduleUpgrade.VisionEnhancementUnit) && ((getVisionAuto(itemStack) && !player.getEntityWorld().isDaytime() && !player.getEntityWorld().provider.isNether()) || getVision(itemStack))) { isVision = true; item.setEnergy(headStack, item.getEnergy(headStack) - MekanismConfig.current().meka.mekaSuitEnergyUsageVisionEnhancement.val()); - }else { + } else { isVision = false; } - - if (UpgradeHelper.isUpgradeInstalled(headStack, moduleUpgrade.SolarRechargingUnit)) { + if (UpgradeHelper.isUpgradeInstalled(headStack, moduleUpgrade.SolarRechargingUnit) && getSolar(headStack)) { if (player.getEntityWorld().isDaytime() && player.getEntityWorld().canSeeSky(player.getPosition())) { Biome b = player.getEntityWorld().provider.getBiomeForCoords(player.getPosition()); float tempEff = 0.3f * (0.8f - b.getTemperature(player.getPosition())); @@ -281,10 +284,10 @@ public List getValidModule(ItemStack stack) { @Override public void addHUDStrings(List list, EntityPlayer player, ItemStack stack, EntityEquipmentSlot slotType) { if (slotType == getEquipmentSlot()) { - if (UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.NutritionalInjectionUnit)) { + if (UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.NutritionalInjectionUnit) && getNutritional(stack)) { list.add(LangUtils.localize("tooltip.autoeatgas.stored") + " " + EnumColor.ORANGE + (getStored(stack) > 0 ? getStored(stack) : LangUtils.localize("tooltip.noGas"))); } - if (UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.EMERGENCY_RESCUE)) { + if (UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.EMERGENCY_RESCUE) && getEmergency(stack)) { list.add(LangUtils.localize("tooltip.meka_head.Emergency_rescue") + " " + UpgradeHelper.getUpgradeLevel(stack, moduleUpgrade.EMERGENCY_RESCUE)); } if (!Mekanism.hooks.DraconicEvolution) { @@ -293,4 +296,155 @@ public void addHUDStrings(List list, EntityPlayer player, ItemStack stac } } + + + @Override + @Optional.Method(modid = MekanismHooks.DraconicEvolution_MOD_ID) + public ItemConfigFieldRegistry getFields(ItemStack stack, ItemConfigFieldRegistry registry) { + if (UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.SolarRechargingUnit)) { + registry.register(stack, new BooleanConfigField("SolarRechargingUnit", true, "config.field.SolarRechargingUnit.description")); + } + if (UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.ElectrolyticBreathingUnit)) { + registry.register(stack, new BooleanConfigField("ElectrolyticBreathingUnit", true, "config.field.ElectrolyticBreathingUnit.description")); + } + if (UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.VisionEnhancementUnit)) { + registry.register(stack, new BooleanConfigField("VisionAuto", true, "config.field.VisionAuto.description")); + registry.register(stack, new BooleanConfigField("Vision", false, "config.field.Vision.description")); + } + if (UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.InhalationPurificationUnit)) { + registry.register(stack, new BooleanConfigField("InhalationBad", true, "config.field.InhalationBad.description")); + registry.register(stack, new BooleanConfigField("InhalationGood", false, "config.field.InhalationGood.description")); + } + if (UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.NutritionalInjectionUnit)) { + registry.register(stack, new BooleanConfigField("Nutritional", true, "config.field.Nutritional.description")); + } + if (UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.EMERGENCY_RESCUE)) { + registry.register(stack, new BooleanConfigField("emergencyRescue", true, "config.field.emergencyRescue.description")); + } + if (UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.ADVANCED_INTERCEPTION_SYSTEM_UNIT)) { + registry.register(stack, new BooleanConfigField("Interception", true, "config.field.Interception.description")); + } + super.getFields(stack, registry); + return registry; + } + + + public boolean getSolar(ItemStack stack) { + if (Mekanism.hooks.DraconicEvolution) { + return getDESolar(stack); + } else { + return true; + } + } + + @Optional.Method(modid = MekanismHooks.DraconicEvolution_MOD_ID) + public boolean getDESolar(ItemStack stack) { + return ToolConfigHelper.getBooleanField("SolarRechargingUnit", stack); + } + + + public boolean getElectrolyticBreathing(ItemStack stack) { + if (Mekanism.hooks.DraconicEvolution) { + return getDEElectrolyticBreathing(stack); + } else { + return true; + } + } + + @Optional.Method(modid = MekanismHooks.DraconicEvolution_MOD_ID) + public boolean getDEElectrolyticBreathing(ItemStack stack) { + return ToolConfigHelper.getBooleanField("ElectrolyticBreathingUnit", stack); + } + + public boolean getVision(ItemStack stack) { + if (Mekanism.hooks.DraconicEvolution) { + return getDEVision(stack); + } else { + return false; + } + } + + public boolean getVisionAuto(ItemStack stack) { + if (Mekanism.hooks.DraconicEvolution) { + return getDEVisionAuto(stack); + } else { + return true; + } + } + + @Optional.Method(modid = MekanismHooks.DraconicEvolution_MOD_ID) + public boolean getDEVision(ItemStack stack) { + return ToolConfigHelper.getBooleanField("Vision", stack); + } + + @Optional.Method(modid = MekanismHooks.DraconicEvolution_MOD_ID) + public boolean getDEVisionAuto(ItemStack stack) { + return ToolConfigHelper.getBooleanField("VisionAuto", stack); + } + + public boolean getInhalationBad(ItemStack stack) { + if (Mekanism.hooks.DraconicEvolution) { + return getDEInhalationBad(stack); + } else { + return true; + } + } + + public boolean getInhalationGood(ItemStack stack) { + if (Mekanism.hooks.DraconicEvolution) { + return getDEInhalationGood(stack); + } else { + return false; + } + } + + @Optional.Method(modid = MekanismHooks.DraconicEvolution_MOD_ID) + public boolean getDEInhalationBad(ItemStack stack) { + return ToolConfigHelper.getBooleanField("InhalationBad", stack); + } + + @Optional.Method(modid = MekanismHooks.DraconicEvolution_MOD_ID) + public boolean getDEInhalationGood(ItemStack stack) { + return ToolConfigHelper.getBooleanField("InhalationGood", stack); + } + + public boolean getNutritional(ItemStack stack) { + if (Mekanism.hooks.DraconicEvolution) { + return getDENutritional(stack); + } else { + return true; + } + } + + @Optional.Method(modid = MekanismHooks.DraconicEvolution_MOD_ID) + public boolean getDENutritional(ItemStack stack) { + return ToolConfigHelper.getBooleanField("Nutritional", stack); + } + + public boolean getEmergency(ItemStack stack) { + if (Mekanism.hooks.DraconicEvolution) { + return getDEemergency(stack); + } else { + return true; + } + } + + @Optional.Method(modid = MekanismHooks.DraconicEvolution_MOD_ID) + public boolean getDEemergency(ItemStack stack) { + return ToolConfigHelper.getBooleanField("emergencyRescue", stack); + } + + public boolean getInterception(ItemStack stack) { + if (Mekanism.hooks.DraconicEvolution) { + return getDEInterception(stack); + } else { + return true; + } + } + + @Optional.Method(modid = MekanismHooks.DraconicEvolution_MOD_ID) + public boolean getDEInterception(ItemStack stack) { + return ToolConfigHelper.getBooleanField("Interception", stack); + } + } diff --git a/src/main/java/mekanism/common/item/armor/ItemMekaSuitArmor.java b/src/main/java/mekanism/common/item/armor/ItemMekaSuitArmor.java index 918a7ffc599..3f792ed172c 100644 --- a/src/main/java/mekanism/common/item/armor/ItemMekaSuitArmor.java +++ b/src/main/java/mekanism/common/item/armor/ItemMekaSuitArmor.java @@ -1,6 +1,10 @@ package mekanism.common.item.armor; import cofh.redstoneflux.api.IEnergyContainerItem; +import com.brandon3055.draconicevolution.api.itemconfig.BooleanConfigField; +import com.brandon3055.draconicevolution.api.itemconfig.IConfigurableItem; +import com.brandon3055.draconicevolution.api.itemconfig.ItemConfigFieldRegistry; +import com.brandon3055.draconicevolution.api.itemconfig.ToolConfigHelper; import com.brandon3055.draconicevolution.items.armor.ICustomArmor; import ic2.api.item.IElectricItemManager; import ic2.api.item.IHazmatLike; @@ -17,10 +21,7 @@ import mekanism.common.integration.redstoneflux.RFIntegration; import mekanism.common.integration.tesla.TeslaItemWrapper; import mekanism.common.moduleUpgrade; -import mekanism.common.util.ItemDataUtils; -import mekanism.common.util.LangUtils; -import mekanism.common.util.MekanismUtils; -import mekanism.common.util.UpgradeHelper; +import mekanism.common.util.*; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; @@ -52,10 +53,12 @@ @Optional.Interface(iface = "ic2.api.item.ISpecialElectricItem", modid = MekanismHooks.IC2_MOD_ID), @Optional.Interface(iface = "cofh.redstoneflux.api.IEnergyContainerItem", modid = MekanismHooks.REDSTONEFLUX_MOD_ID), @Optional.Interface(iface = "ic2.api.item.IHazmatLike", modid = MekanismHooks.IC2_MOD_ID), - @Optional.Interface(iface = "com.brandon3055.draconicevolution.items.armor.ICustomArmor", modid = MekanismHooks.DraconicEvolution_MOD_ID) + @Optional.Interface(iface = "com.brandon3055.draconicevolution.items.armor.ICustomArmor", modid = MekanismHooks.DraconicEvolution_MOD_ID), + @Optional.Interface(iface = "com.brandon3055.draconicevolution.api.itemconfig.IConfigurableItem", modid = MekanismHooks.DraconicEvolution_MOD_ID), + @Optional.Interface(iface = "com.brandon3055.draconicevolution.api.itemconfig.ToolConfigHelper", modid = MekanismHooks.DraconicEvolution_MOD_ID) }) public abstract class ItemMekaSuitArmor extends ItemArmor implements IEnergizedItem, - ISpecialElectricItem, IEnergyContainerItem, ISpecialArmor, IModuleUpgrade, IHazmatLike, ICustomArmor { + ISpecialElectricItem, IEnergyContainerItem, ISpecialArmor, IModuleUpgrade, IHazmatLike, ICustomArmor, IConfigurableItem { private final float absorption; @@ -169,7 +172,8 @@ private static boolean isSource(DamageSource source) { source == DamageSource.GENERIC || source == DamageSource.HOT_FLOOR || source == DamageSource.IN_FIRE || source == DamageSource.IN_WALL || source == DamageSource.LAVA || source == DamageSource.LIGHTNING_BOLT || - source == DamageSource.ON_FIRE || source == DamageSource.WITHER); + source == DamageSource.ON_FIRE || source == DamageSource.WITHER + ); } private static boolean Originaltype(DamageSource source) { @@ -369,14 +373,9 @@ public void Shielding(ItemStack stack) { if (tag.hasKey("ncRadiationResistance")) { nc = tag.getDouble("ncRadiationResistance"); } - if (UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.RADIATION_SHIELDING_UNIT) && nc < getShieldingByArmor()) { + if (UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.RADIATION_SHIELDING_UNIT) && getRadiation(stack) && nc < getShieldingByArmor()) { tag.setDouble("ncRadiationResistance", getShieldingByArmor()); } - /* - if (nc == 0 && !tag.isEmpty()) { - tag.removeTag("ncRadiationResistance"); - } - */ } } @@ -389,14 +388,14 @@ public boolean hasEffect(ItemStack stack) { @Override @Optional.Method(modid = MekanismHooks.IC2_MOD_ID) public boolean addsProtection(EntityLivingBase entityLivingBase, EntityEquipmentSlot slotType, ItemStack stack) { - return UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.RADIATION_SHIELDING_UNIT); + return UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.RADIATION_SHIELDING_UNIT) && getRadiation(stack); } abstract double getShieldingByArmor(); @Override public boolean handleUnblockableDamage(EntityLivingBase entity, @Nonnull ItemStack armor, DamageSource source, double damage, int slot) { - if (UpgradeHelper.isUpgradeInstalled(armor, moduleUpgrade.RADIATION_SHIELDING_UNIT)) { + if (UpgradeHelper.isUpgradeInstalled(armor, moduleUpgrade.RADIATION_SHIELDING_UNIT) && getRadiation(armor)) { return source.damageType.equals("radiation") || source.damageType.equals("sulphuric_acid") || source.damageType.equals("acid_burn") || source.damageType.equals("corium_burn") || source.damageType.equals("hot_coolant_burn"); } return false; @@ -405,7 +404,7 @@ public boolean handleUnblockableDamage(EntityLivingBase entity, @Nonnull ItemSta @Override public void damageArmor(EntityLivingBase entity, @Nonnull ItemStack stack, DamageSource source, int damage, int slot) { if (Mekanism.hooks.IC2Loaded) { - if (UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.RADIATION_SHIELDING_UNIT)) { + if (UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.RADIATION_SHIELDING_UNIT) && getRadiation(stack)) { Potion radiation = Potion.getPotionFromResourceLocation("ic2:radiation"); if (radiation != null && entity.isPotionActive(radiation)) { entity.removePotionEffect(radiation); @@ -425,10 +424,14 @@ public String getItemStackDisplayName(@Nonnull ItemStack itemstack) { public float getProtectionPoints(ItemStack stack) { if (UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.ENERGY_SHIELD_UNIT)) { int upgradeLevel = UpgradeHelper.getUpgradeLevel(stack, moduleUpgrade.ENERGY_SHIELD_UNIT); - if (MekanismConfig.current().meka.mekaSuitShield.val()) { - return MekanismConfig.current().meka.mekaSuitShieldCapacity.val() * getProtectionShare() * (int) Math.pow(2, upgradeLevel); + if (ToolConfigHelper.getBooleanField("armorEnergyShield", stack)) { + if (MekanismConfig.current().meka.mekaSuitShield.val()) { + return MekanismConfig.current().meka.mekaSuitShieldCapacity.val() * getProtectionShare() * (int) Math.pow(2, upgradeLevel); + } else { + return MekanismConfig.current().meka.mekaSuitShieldCapacity.val() * getProtectionShare() * upgradeLevel; + } } else { - return MekanismConfig.current().meka.mekaSuitShieldCapacity.val() * this.getProtectionShare() * upgradeLevel; + return ItemNBTHelper.getFloat(stack, "ProtectionPoints", 0); } } else { return 0.0F; @@ -447,7 +450,7 @@ private float getProtectionShare() { @Override @Optional.Method(modid = MekanismHooks.DraconicEvolution_MOD_ID) public float getRecoveryRate(ItemStack stack) { - if (UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.ENERGY_SHIELD_UNIT)) { + if (UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.ENERGY_SHIELD_UNIT) && ToolConfigHelper.getBooleanField("armorEnergyShield", stack)) { int upgradeLevel = UpgradeHelper.getUpgradeLevel(stack, moduleUpgrade.ENERGY_SHIELD_UNIT); if (MekanismConfig.current().meka.mekaSuitRecovery.val()) { return MekanismConfig.current().meka.mekaSuitRecoveryRate.val() * (int) Math.pow(2, upgradeLevel); @@ -522,6 +525,38 @@ public void modifyEnergy(ItemStack stack, int modify) { } } + @Override + @Optional.Method(modid = MekanismHooks.DraconicEvolution_MOD_ID) + public int getProfileCount(ItemStack stack) { + return 3; + } + + @Override + @Optional.Method(modid = MekanismHooks.DraconicEvolution_MOD_ID) + public ItemConfigFieldRegistry getFields(ItemStack stack, ItemConfigFieldRegistry registry) { + if (UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.ENERGY_SHIELD_UNIT)) { + registry.register(stack, new BooleanConfigField("armorEnergyShield", true, "config.field.armorEnergyShield.description")); + } + if (UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.RADIATION_SHIELDING_UNIT)) { + registry.register(stack, new BooleanConfigField("armorRadiationShielding", true, "config.field.armorRadiationShielding.description")); + } + return registry; + } + + + public boolean getRadiation(ItemStack stack) { + if (Mekanism.hooks.DraconicEvolution) { + return getDERadiation(stack); + } else { + return true; + } + } + + @Optional.Method(modid = MekanismHooks.DraconicEvolution_MOD_ID) + public boolean getDERadiation(ItemStack stack) { + return ToolConfigHelper.getBooleanField("armorRadiationShielding", stack); + } + private static class FoundArmorDetails { private final EnergyUsageInfo usageInfo; diff --git a/src/main/java/mekanism/common/util/ItemNBTHelper.java b/src/main/java/mekanism/common/util/ItemNBTHelper.java new file mode 100644 index 00000000000..92abd3aca14 --- /dev/null +++ b/src/main/java/mekanism/common/util/ItemNBTHelper.java @@ -0,0 +1,49 @@ +package mekanism.common.util; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + + +public final class ItemNBTHelper { + + + // GETTERS /////////////////////////////////////////////////////////////////// + + public static boolean verifyExistance(ItemStack stack, String tag) { + NBTTagCompound compound = stack.getTagCompound(); + if (compound == null) return false; + else return stack.getTagCompound().hasKey(tag); + } + + public static byte getByte(ItemStack stack, String tag, byte defaultExpected) { + return verifyExistance(stack, tag) ? stack.getTagCompound().getByte(tag) : defaultExpected; + } + + public static boolean getBoolean(ItemStack stack, String tag, boolean defaultExpected) { + return verifyExistance(stack, tag) ? stack.getTagCompound().getBoolean(tag) : defaultExpected; + } + + public static short getShort(ItemStack stack, String tag, short defaultExpected) { + return verifyExistance(stack, tag) ? stack.getTagCompound().getShort(tag) : defaultExpected; + } + + public static int getInteger(ItemStack stack, String tag, int defaultExpected) { + return verifyExistance(stack, tag) ? stack.getTagCompound().getInteger(tag) : defaultExpected; + } + + public static long getLong(ItemStack stack, String tag, long defaultExpected) { + return verifyExistance(stack, tag) ? stack.getTagCompound().getLong(tag) : defaultExpected; + } + + public static float getFloat(ItemStack stack, String tag, float defaultExpected) { + return verifyExistance(stack, tag) ? stack.getTagCompound().getFloat(tag) : defaultExpected; + } + + public static double getDouble(ItemStack stack, String tag, double defaultExpected) { + return verifyExistance(stack, tag) ? stack.getTagCompound().getDouble(tag) : defaultExpected; + } + + public static String getString(ItemStack stack, String tag, String defaultExpected) { + return verifyExistance(stack, tag) ? stack.getTagCompound().getString(tag) : defaultExpected; + } +} \ No newline at end of file diff --git a/src/main/resources/assets/mekanism/lang/en_us.lang b/src/main/resources/assets/mekanism/lang/en_us.lang index 09000084445..32e5d545b3e 100644 --- a/src/main/resources/assets/mekanism/lang/en_us.lang +++ b/src/main/resources/assets/mekanism/lang/en_us.lang @@ -1770,4 +1770,27 @@ item.module.energy_shield_unit.name=Energy shield unit module.Energy_shield_unit.desc=Use Draconic Evolution's shield to block damage item.module.advanced_interception_system_unit.name=Advanced Energy Shield Interception and Rescue System Unit module.Advanced_interception_system_unit.desc=Not hurting -tooltip.install.DR2=Draconic Additionsneeds to be installed to work. \ No newline at end of file +tooltip.install.DR2=Draconic Additionsneeds to be installed to work. + +config.field.armorEnergyShield.entry=Energy Shield +config.field.armorEnergyShield.description=Whether or not Energy Shield is enabled is allowed +config.field.armorRadiationShielding.entry=Electromagnetic radiation shielding +config.field.armorRadiationShielding.description=Whether it is allowed to turn on the electromagnetic radiation shield +config.field.SolarRechargingUnit.entry=Solar Recharging Unit +config.field.SolarRechargingUnit.description=Whether the solar charging unit is allowed to be enabled +config.field.ElectrolyticBreathingUnit.entry=Electrolytic Breathing Unit +config.field.ElectrolyticBreathingUnit.description=Whether an electrolytic breathing apparatus is allowed +config.field.VisionAuto.entry=Automatic night vision mode +config.field.VisionAuto.description=Whether to allow automatic night vision mode to be enabled +config.field.Vision.entry=Always-on night vision mode +config.field.Vision.description=Whether to use the night vision mode directly +config.field.InhalationBad.entry=Inhalation purifies the negative effect +config.field.InhalationBad.description=Remove negative effects +config.field.InhalationGood.entry=Inhalation purification buff effect +config.field.InhalationGood.description=Removed positive effects +config.field.Nutritional.entry=Nutritional Injection Unit +config.field.Nutritional.description=Automatic feeding of stored nutrient paste +config.field.emergencyRescue.entry=Emergency rescue unit +config.field.emergencyRescue.description=Whether or not the emergency rescue unit is enabled +config.field.Interception.entry=Advanced Energy Shield Interception and Rescue System Unit +config.field.Interception.description=Whether or not to enable the Advanced Energy Shield Interception and Rescue System unit \ No newline at end of file diff --git a/src/main/resources/assets/mekanism/lang/zh_cn.lang b/src/main/resources/assets/mekanism/lang/zh_cn.lang index 61645dd5cf5..9570fb754c2 100644 --- a/src/main/resources/assets/mekanism/lang/zh_cn.lang +++ b/src/main/resources/assets/mekanism/lang/zh_cn.lang @@ -1747,4 +1747,27 @@ item.module.energy_shield_unit.name=能量护盾单元 module.Energy_shield_unit.desc=使用Draconic Evolution护盾来抵挡伤害 item.module.advanced_interception_system_unit.name=先进能量护盾拦截救援系统单元 module.Advanced_interception_system_unit.desc=不再受伤 -tooltip.install.DR2=需要安装Draconic Additions才能工作。 \ No newline at end of file +tooltip.install.DR2=需要安装Draconic Additions才能工作。 + +config.field.armorEnergyShield.entry=能量护盾 +config.field.armorEnergyShield.description=是否允许启用能量护盾 +config.field.armorRadiationShielding.entry=电磁辐射屏蔽层 +config.field.armorRadiationShielding.description=是否允许启用电磁辐射屏蔽层 +config.field.SolarRechargingUnit.entry=太阳能充电单元 +config.field.SolarRechargingUnit.description=是否允许启用太阳能充电单元 +config.field.ElectrolyticBreathingUnit.entry=电解呼吸装置 +config.field.ElectrolyticBreathingUnit.description=是否允许启用电解呼吸装置 +config.field.VisionAuto.entry=自动夜视模式 +config.field.VisionAuto.description=是否允许启用自动夜视模式 +config.field.Vision.entry=常开夜视模式 +config.field.Vision.description=是否一直使用夜视模式 +config.field.InhalationBad.entry=吸入净化负面效果 +config.field.InhalationBad.description=移除负面效果 +config.field.InhalationGood.entry=吸入净化增益效果 +config.field.InhalationGood.description=移除增益效果 +config.field.Nutritional.entry=营养注射单元 +config.field.Nutritional.description=自动喂食已存储的营养糊剂 +config.field.emergencyRescue.entry=紧急救援单元 +config.field.emergencyRescue.description=是否启用紧急救援单元 +config.field.Interception.entry=先进能量护盾拦截救援系统单元 +config.field.Interception.description=是否启用先进能量护盾拦截救援系统单元 \ No newline at end of file