Skip to content

Commit

Permalink
Add cfg for Boiler fluids
Browse files Browse the repository at this point in the history
Closes #193
  • Loading branch information
serenibyss committed Dec 12, 2021
1 parent 4faa830 commit 1382f97
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 8 deletions.
37 changes: 33 additions & 4 deletions src/main/java/gregtech/api/recipes/ModHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,18 @@
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import net.minecraftforge.oredict.ShapedOreRecipe;
import net.minecraftforge.oredict.ShapelessOreRecipe;
import net.minecraftforge.registries.IForgeRegistry;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.lang.reflect.Field;
import java.util.*;
Expand All @@ -48,11 +51,37 @@
public class ModHandler {

/**
* Returns if that Liquid is Water or Distilled Water
* Returns if that Liquid is Water or Distilled Water, or a valid Boiler Fluid.
*/
public static boolean isWater(FluidStack fluid) {
return new FluidStack(FluidRegistry.WATER, 1).isFluidEqual(fluid)
|| Materials.DistilledWater.getFluid(1).isFluidEqual(fluid);
public static boolean isWater(@Nullable FluidStack fluid) {
if (fluid == null) return false;
if (fluid.isFluidEqual(new FluidStack(FluidRegistry.WATER, 1))) return true;
if (fluid.isFluidEqual(Materials.DistilledWater.getFluid(1))) return true;

for (String fluidName : ConfigHolder.machines.boilerFluids) {
Fluid f = FluidRegistry.getFluid(fluidName);
if (f != null && fluid.isFluidEqual(new FluidStack(f, 1))) return true;
}
return false;
}

public static FluidStack getWaterFromContainer(@Nonnull IFluidHandler fluidHandler, boolean doDrain) {
FluidStack drainedWater = fluidHandler.drain(Materials.Water.getFluid(1), doDrain);
if (drainedWater == null || drainedWater.amount == 0) {
drainedWater = fluidHandler.drain(Materials.DistilledWater.getFluid(1), doDrain);
}
if (drainedWater == null || drainedWater.amount == 0) {
for (String fluidName : ConfigHolder.machines.boilerFluids) {
Fluid f = FluidRegistry.getFluid(fluidName);
if (f != null) {
drainedWater = fluidHandler.drain(new FluidStack(f, 1), doDrain);
if (drainedWater != null && drainedWater.amount > 0) {
break;
}
}
}
}
return drainedWater;
}

/**
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/gregtech/common/ConfigHolder.java
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,10 @@ public static class MachineOptions {

@Config.Comment({"Whether to play machine sounds while machines are active.", "Default: true"})
public boolean machineSounds = true;

@Config.Comment({"Additional Fluids to allow in GT Boilers in place of Water or Distilled Water.",
"Useful for mods like TerraFirmaCraft with different Fluids for Water", "Default: none"})
public String[] boilerFluids = new String[0];
}

public static class WorldGenOptions {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,10 +233,7 @@ protected void updateFormedValid() {
this.lastTickSteamOutput = 0;
if (currentTemperature >= BOILING_TEMPERATURE) {
boolean doWaterDrain = getOffsetTimer() % 20 == 0;
FluidStack drainedWater = fluidImportInventory.drain(Materials.Water.getFluid(1), doWaterDrain);
if (drainedWater == null || drainedWater.amount == 0) {
drainedWater = fluidImportInventory.drain(Materials.DistilledWater.getFluid(1), doWaterDrain);
}
FluidStack drainedWater = ModHandler.getWaterFromContainer(fluidImportInventory, doWaterDrain);
if (drainedWater != null && drainedWater.amount > 0) {
if (currentTemperature > BOILING_TEMPERATURE && hasNoWater) {
float explosionPower = currentTemperature / (float) BOILING_TEMPERATURE * 2.0f;
Expand Down

0 comments on commit 1382f97

Please sign in to comment.