From c2c09fd55ab910ad031216d1e98e0d1d20351057 Mon Sep 17 00:00:00 2001 From: bukowski912 Date: Tue, 28 Jan 2025 17:30:57 +1100 Subject: [PATCH] Support oxygen fill for Electrolytic Breathing Unit - Add config "Fill Hydrogen" & "Fill Oxygen (Disables Feeder)" --- .../c10fcd8abbb6a520fc3ac2cf14b627d36958dd55 | 6 +- .../mekanism/assets/mekanism/lang/en_ud.json | 2 + .../mekanism/assets/mekanism/lang/en_us.json | 2 + .../client/lang/MekanismLangProvider.java | 2 + .../ModuleElectrolyticBreathingUnit.java | 75 +++++++++++++------ .../common/registries/MekanismModules.java | 2 + 6 files changed, 65 insertions(+), 24 deletions(-) diff --git a/src/datagen/generated/mekanism/.cache/c10fcd8abbb6a520fc3ac2cf14b627d36958dd55 b/src/datagen/generated/mekanism/.cache/c10fcd8abbb6a520fc3ac2cf14b627d36958dd55 index d7f8794f09c..956a2c7ded1 100644 --- a/src/datagen/generated/mekanism/.cache/c10fcd8abbb6a520fc3ac2cf14b627d36958dd55 +++ b/src/datagen/generated/mekanism/.cache/c10fcd8abbb6a520fc3ac2cf14b627d36958dd55 @@ -1,5 +1,5 @@ -// 1.21.1 2025-01-04T16:37:51.1646312 Languages: en_us for mod: mekanism +// 1.21.1 2025-01-29T18:15:32.8673868 Languages: en_us for mod: mekanism 8d915354d84b3a4d60c65f9280fdd7ceca016c35 assets/mekanism/lang/en_au.json 8d915354d84b3a4d60c65f9280fdd7ceca016c35 assets/mekanism/lang/en_gb.json -471fdc7ece86c06b7b15bc05491624e542a26c10 assets/mekanism/lang/en_ud.json -6a732ccdeb564cb51389a2ac7832c1cf6231b359 assets/mekanism/lang/en_us.json +f1953d1767e2ba8f6ec1c75c4c5114827c05a534 assets/mekanism/lang/en_ud.json +e50d48cfbf46cfd333fbbbdd1b261f5c3207b4f3 assets/mekanism/lang/en_us.json diff --git a/src/datagen/generated/mekanism/assets/mekanism/lang/en_ud.json b/src/datagen/generated/mekanism/assets/mekanism/lang/en_ud.json index 8672b800ba4..1e35ed09cea 100644 --- a/src/datagen/generated/mekanism/assets/mekanism/lang/en_ud.json +++ b/src/datagen/generated/mekanism/assets/mekanism/lang/en_ud.json @@ -2629,6 +2629,8 @@ "module.mekanism.blasting_unit": "ʇᴉu∩ ᵷuᴉʇsɐꞁᗺ", "module.mekanism.bonus_attack_damage": "ǝᵷɐɯɐᗡ ʞɔɐʇʇⱯ snuoᗺ", "module.mekanism.breathing.held": "pꞁǝH ꞁꞁᴉℲ", + "module.mekanism.breathing.hydrogen": "uǝᵷoɹpʎH ꞁꞁᴉℲ", + "module.mekanism.breathing.oxygen": "(ɹǝpǝǝℲ sǝꞁqɐsᴉᗡ) uǝᵷʎxO ꞁꞁᴉℲ", "module.mekanism.charge_distribution_unit": "ʇᴉu∩ uoᴉʇnqᴉɹʇsᴉᗡ ǝᵷɹɐɥƆ", "module.mekanism.charge_inventory": "ʎɹoʇuǝʌuI ǝᵷɹɐɥƆ", "module.mekanism.charge_suit": "ʇᴉnS ǝᵷɹɐɥƆ", diff --git a/src/datagen/generated/mekanism/assets/mekanism/lang/en_us.json b/src/datagen/generated/mekanism/assets/mekanism/lang/en_us.json index 0d555e8a64d..e84e68a39cc 100644 --- a/src/datagen/generated/mekanism/assets/mekanism/lang/en_us.json +++ b/src/datagen/generated/mekanism/assets/mekanism/lang/en_us.json @@ -2632,6 +2632,8 @@ "module.mekanism.blasting_unit": "Blasting Unit", "module.mekanism.bonus_attack_damage": "Bonus Attack Damage", "module.mekanism.breathing.held": "Fill Held", + "module.mekanism.breathing.hydrogen": "Fill Hydrogen", + "module.mekanism.breathing.oxygen": "Fill Oxygen (Disables Feeder)", "module.mekanism.charge_distribution_unit": "Charge Distribution Unit", "module.mekanism.charge_inventory": "Charge Inventory", "module.mekanism.charge_suit": "Charge Suit", diff --git a/src/datagen/main/java/mekanism/client/lang/MekanismLangProvider.java b/src/datagen/main/java/mekanism/client/lang/MekanismLangProvider.java index e9ffe691231..40caf2f45b6 100644 --- a/src/datagen/main/java/mekanism/client/lang/MekanismLangProvider.java +++ b/src/datagen/main/java/mekanism/client/lang/MekanismLangProvider.java @@ -1759,6 +1759,8 @@ private void addMisc() { addModuleConfig(ModuleGravitationalModulatingUnit.SPEED_BOOST, "Speed Boost"); add(MekanismLang.MODULE_VISION_ENHANCEMENT, "Vision Enhancement"); addModuleConfig(ModuleElectrolyticBreathingUnit.FILL_HELD, "Fill Held"); + addModuleConfig(ModuleElectrolyticBreathingUnit.FILL_HYDROGEN, "Fill Hydrogen"); + addModuleConfig(ModuleElectrolyticBreathingUnit.FILL_OXYGEN, "Fill Oxygen (Disables Feeder)"); addModuleConfig(ModuleInhalationPurificationUnit.BENEFICIAL_EFFECTS, "Remove Beneficial"); addModuleConfig(ModuleInhalationPurificationUnit.NEUTRAL_EFFECTS, "Remove Neutral"); addModuleConfig(ModuleInhalationPurificationUnit.HARMFUL_EFFECTS, "Remove Harmful"); diff --git a/src/main/java/mekanism/common/content/gear/mekasuit/ModuleElectrolyticBreathingUnit.java b/src/main/java/mekanism/common/content/gear/mekasuit/ModuleElectrolyticBreathingUnit.java index 2470c0c91b5..59a814875d2 100644 --- a/src/main/java/mekanism/common/content/gear/mekasuit/ModuleElectrolyticBreathingUnit.java +++ b/src/main/java/mekanism/common/content/gear/mekasuit/ModuleElectrolyticBreathingUnit.java @@ -28,12 +28,62 @@ import net.neoforged.neoforge.fluids.FluidType; @ParametersAreNotNullByDefault -public record ModuleElectrolyticBreathingUnit(boolean fillHeld) implements ICustomModule { +public record ModuleElectrolyticBreathingUnit(boolean fillHeld, boolean fillHydrogen, boolean fillOxygen) implements ICustomModule { public static final ResourceLocation FILL_HELD = Mekanism.rl("breathing.held"); + public static final ResourceLocation FILL_HYDROGEN = Mekanism.rl("breathing.hydrogen"); + public static final ResourceLocation FILL_OXYGEN = Mekanism.rl("breathing.oxygen"); public ModuleElectrolyticBreathingUnit(IModule module) { - this(module.getBooleanConfigOrFalse(FILL_HELD)); + this(module.getBooleanConfigOrFalse(FILL_HELD), module.getBooleanConfigOrFalse(FILL_HYDROGEN), module.getBooleanConfigOrFalse(FILL_OXYGEN)); + } + + private long produceHydrogen(Player player, int maxRate) { + if (!fillHydrogen) { + return 0; + } + long hydrogenUsed = 0; + ChemicalStack hydrogenStack = MekanismChemicals.HYDROGEN.getStack(maxRate * 2L); + ItemStack chestStack = player.getItemBySlot(EquipmentSlot.CHEST); + if (checkChestPlate(chestStack)) { + IChemicalHandler chestCapability = Capabilities.CHEMICAL.getCapability(chestStack); + if (chestCapability != null) { + hydrogenUsed = maxRate * 2L - chestCapability.insertChemical(hydrogenStack, Action.EXECUTE).getAmount(); + hydrogenStack.shrink(hydrogenUsed); + } + } + if (fillHeld) { + ItemStack handStack = player.getItemBySlot(EquipmentSlot.MAINHAND); + IChemicalHandler handCapability = Capabilities.CHEMICAL.getCapability(handStack); + if (handCapability != null) { + hydrogenUsed = maxRate * 2L - handCapability.insertChemical(hydrogenStack, Action.EXECUTE).getAmount(); + } + } + return hydrogenUsed; + } + + private long produceOxygen(Player player, int maxRate) { + if (!fillOxygen) { + int oxygenUsed = Math.min(maxRate, player.getMaxAirSupply() - player.getAirSupply()); + player.setAirSupply(player.getAirSupply() + oxygenUsed); + return oxygenUsed; + } + long oxygenUsed = 0; + ChemicalStack oxygenStack = MekanismChemicals.OXYGEN.getStack(maxRate); + ItemStack chestStack = player.getItemBySlot(EquipmentSlot.CHEST); + IChemicalHandler chestCapability = Capabilities.CHEMICAL.getCapability(chestStack); + if (chestCapability != null) { + oxygenUsed = maxRate - chestCapability.insertChemical(oxygenStack, Action.EXECUTE).getAmount(); + oxygenStack.shrink(oxygenUsed); + } + if (fillHeld) { + ItemStack handStack = player.getItemBySlot(EquipmentSlot.MAINHAND); + IChemicalHandler handCapability = Capabilities.CHEMICAL.getCapability(handStack); + if (handCapability != null) { + oxygenUsed = maxRate - handCapability.insertChemical(oxygenStack, Action.EXECUTE).getAmount(); + } + } + return oxygenUsed; } @Override @@ -61,27 +111,10 @@ public void tickServer(IModule module, IModuleC if (productionRate > 0) { long usage = 2 * MekanismConfig.general.FROM_H2.get(); int maxRate = MathUtils.clampToInt(Math.min(productionRate, module.getContainerEnergy(stack) / usage)); - long hydrogenUsed = 0; - ChemicalStack hydrogenStack = MekanismChemicals.HYDROGEN.getStack(maxRate * 2L); - ItemStack chestStack = player.getItemBySlot(EquipmentSlot.CHEST); - if (checkChestPlate(chestStack)) { - IChemicalHandler chestCapability = Capabilities.CHEMICAL.getCapability(chestStack); - if (chestCapability != null) { - hydrogenUsed = maxRate * 2L - chestCapability.insertChemical(hydrogenStack, Action.EXECUTE).getAmount(); - hydrogenStack.shrink(hydrogenUsed); - } - } - if (fillHeld) { - ItemStack handStack = player.getItemBySlot(EquipmentSlot.MAINHAND); - IChemicalHandler handCapability = Capabilities.CHEMICAL.getCapability(handStack); - if (handCapability != null) { - hydrogenUsed = maxRate * 2L - handCapability.insertChemical(hydrogenStack, Action.EXECUTE).getAmount(); - } - } - int oxygenUsed = Math.min(maxRate, player.getMaxAirSupply() - player.getAirSupply()); + long hydrogenUsed = produceHydrogen(player, maxRate); + long oxygenUsed = produceOxygen(player, maxRate); long used = Math.max(Mth.ceil(hydrogenUsed / 2D), oxygenUsed); module.useEnergy(player, stack, MathUtils.multiplyClamped(usage, used)); - player.setAirSupply(player.getAirSupply() + oxygenUsed); } } diff --git a/src/main/java/mekanism/common/registries/MekanismModules.java b/src/main/java/mekanism/common/registries/MekanismModules.java index 11008dc58cb..0a6ae821e36 100644 --- a/src/main/java/mekanism/common/registries/MekanismModules.java +++ b/src/main/java/mekanism/common/registries/MekanismModules.java @@ -128,6 +128,8 @@ private MekanismModules() { public static final ModuleRegistryObject ELECTROLYTIC_BREATHING_UNIT = MODULES.register("electrolytic_breathing_unit", ModuleElectrolyticBreathingUnit::new, () -> MekanismItems.MODULE_ELECTROLYTIC_BREATHING.asItem(), builder -> builder.maxStackSize(4) .addConfig(ModuleBooleanConfig.create(ModuleElectrolyticBreathingUnit.FILL_HELD, true)) + .addConfig(ModuleBooleanConfig.create(ModuleElectrolyticBreathingUnit.FILL_HYDROGEN, true)) + .addConfig(ModuleBooleanConfig.create(ModuleElectrolyticBreathingUnit.FILL_OXYGEN, false)) ); public static final ModuleRegistryObject INHALATION_PURIFICATION_UNIT = MODULES.register("inhalation_purification_unit", ModuleInhalationPurificationUnit::new, () -> MekanismItems.MODULE_INHALATION_PURIFICATION.asItem(), builder -> builder