aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/gregtech/api/enums/FluidState.java9
-rw-r--r--src/main/java/gregtech/api/fluid/GT_FluidFactory.java14
-rw-r--r--src/main/java/gregtech/api/interfaces/fluid/IGT_Fluid.java71
-rw-r--r--src/main/java/gregtech/api/interfaces/fluid/IGT_FluidBuilder.java20
-rw-r--r--src/main/java/gregtech/api/interfaces/fluid/IGT_RegisteredFluid.java56
-rw-r--r--src/main/java/gregtech/common/GT_Proxy.java109
-rw-r--r--src/main/java/gregtech/common/fluid/GT_Fluid.java205
-rw-r--r--src/main/java/gregtech/common/fluid/GT_FluidBuilder.java39
-rw-r--r--src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java28
9 files changed, 254 insertions, 297 deletions
diff --git a/src/main/java/gregtech/api/enums/FluidState.java b/src/main/java/gregtech/api/enums/FluidState.java
index ad27047a1c..a6e81ab43d 100644
--- a/src/main/java/gregtech/api/enums/FluidState.java
+++ b/src/main/java/gregtech/api/enums/FluidState.java
@@ -6,5 +6,12 @@ public enum FluidState {
MOLTEN,
PLASMA,
SLURRY;
- public static final FluidState[] VALUES = new FluidState[] {SLURRY, LIQUID, GAS, PLASMA, MOLTEN};
+
+ public static final FluidState[] VALID_STATES = new FluidState[] {SLURRY, LIQUID, GAS, PLASMA, MOLTEN};
+
+ public static FluidState fromValue(int stateValue) {
+ return stateValue >= 0 && stateValue < FluidState.VALID_STATES.length
+ ? FluidState.VALID_STATES[stateValue]
+ : FluidState.LIQUID;
+ }
}
diff --git a/src/main/java/gregtech/api/fluid/GT_FluidFactory.java b/src/main/java/gregtech/api/fluid/GT_FluidFactory.java
index 4aa39095ec..1622aa2e05 100644
--- a/src/main/java/gregtech/api/fluid/GT_FluidFactory.java
+++ b/src/main/java/gregtech/api/fluid/GT_FluidFactory.java
@@ -39,9 +39,9 @@ public class GT_FluidFactory {
* @param material The {@link Materials} of this {@link IGT_Fluid}
* @param state The {@link FluidState} of this {@link IGT_Fluid}
* @param temperature The fluid temperature in Kelvin
- * @return the registered {@link IGT_Fluid}
+ * @return the registered {@link Fluid}
*/
- public static IGT_Fluid of(
+ public static Fluid of(
final String fluidName,
final String localizedName,
final Materials material,
@@ -51,7 +51,8 @@ public class GT_FluidFactory {
.withLocalizedName(localizedName)
.withStateAndTemperature(state, temperature)
.buildAndRegister()
- .configureMaterials(material);
+ .configureMaterials(material)
+ .asFluid();
}
/**
@@ -60,14 +61,15 @@ public class GT_FluidFactory {
* @param localizedName The localized name of this {@link IGT_Fluid}
* @param state The {@link FluidState} of this {@link IGT_Fluid}
* @param temperature The fluid temperature in Kelvin
- * @return the registered {@link IGT_Fluid}
+ * @return the registered {@link Fluid}
*/
- public static IGT_Fluid of(
+ public static Fluid of(
final String fluidName, final String localizedName, final FluidState state, final int temperature) {
return builder(fluidName)
.withLocalizedName(localizedName)
.withStateAndTemperature(state, temperature)
- .buildAndRegister();
+ .buildAndRegister()
+ .asFluid();
}
/**
diff --git a/src/main/java/gregtech/api/interfaces/fluid/IGT_Fluid.java b/src/main/java/gregtech/api/interfaces/fluid/IGT_Fluid.java
index 5529e111bb..7c8b2b3f11 100644
--- a/src/main/java/gregtech/api/interfaces/fluid/IGT_Fluid.java
+++ b/src/main/java/gregtech/api/interfaces/fluid/IGT_Fluid.java
@@ -1,11 +1,5 @@
package gregtech.api.interfaces.fluid;
-import gregtech.api.enums.FluidState;
-import gregtech.api.enums.Materials;
-import net.minecraft.item.ItemStack;
-import net.minecraft.util.ResourceLocation;
-import net.minecraftforge.fluids.Fluid;
-import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidRegistry;
@SuppressWarnings("unused") // API might legitimately expose unused methods within this local project's scope
@@ -14,68 +8,7 @@ public interface IGT_Fluid {
/**
* Adds this {@link IGT_Fluid} to the {@link FluidRegistry} and internally-implemented registrations
*
- * @return {@link IGT_Fluid} self for call chaining
+ * @return {@link IGT_RegisteredFluid} The GregTech registered fluid
*/
- IGT_Fluid addFluid();
-
- /**
- * Registers the containers in the {@link FluidContainerRegistry} for this {@link IGT_Fluid}
- *
- * @param fullContainer The full fluid container
- * @param emptyContainer The empty fluid container
- * @param containerSize The size of the container
- * @return The {@link IGT_Fluid} for chaining
- *
- * @throws IllegalStateException on attempt to register containers for an unregistered fluid
- */
- IGT_Fluid registerContainers(
- final ItemStack fullContainer, final ItemStack emptyContainer, final int containerSize);
-
- /**
- * Registers the bucket-sized 1000L containers in the {@link FluidContainerRegistry} for this {@link IGT_Fluid}
- *
- * @param fullContainer The full container to associate with this {@link IGT_Fluid}
- * @param emptyContainer The empty container associate with this {@link IGT_Fluid}
- * @return {@link IGT_Fluid} self for call chaining
- *
- * @throws IllegalStateException on attempt to register containers for an unregistered fluid
- */
- IGT_Fluid registerBContainers(final ItemStack fullContainer, final ItemStack emptyContainer);
-
- /**
- * Registers the potion-sized 250L containers in the {@link FluidContainerRegistry} for this {@link IGT_Fluid}
- *
- * @param fullContainer The full container to associate with this {@link IGT_Fluid}
- * @param emptyContainer The empty container associate with this {@link IGT_Fluid}
- * @return {@link IGT_Fluid} self for call chaining
- *
- * @throws IllegalStateException on attempt to register containers for an unregistered fluid
- */
- IGT_Fluid registerPContainers(final ItemStack fullContainer, final ItemStack emptyContainer);
-
- /**
- * Updates the {@link Materials}'s fluids from this {@link IGT_Fluid}'s state
- *
- * @param material the {@link Materials} to configure based on this {@link IGT_Fluid} and {@link FluidState}
- * @return The {@link IGT_Fluid} for chaining
- *
- * @throws IllegalStateException on unknown {@link FluidState}
- * @throws IllegalStateException on attempt to register containers for an unregistered fluid
- */
- IGT_Fluid configureMaterials(final Materials material);
-
- /**
- * @return this {@link IGT_Fluid} cast to {@link Fluid}
- */
- Fluid asFluid();
-
- /**
- * @return the {@link ResourceLocation} of the still fluid texture
- */
- ResourceLocation getStillIconResourceLocation();
-
- /**
- * @return the {@link ResourceLocation} of the flowing fluid texture
- */
- ResourceLocation getFlowingIconResourceLocation();
+ IGT_RegisteredFluid addFluid();
}
diff --git a/src/main/java/gregtech/api/interfaces/fluid/IGT_FluidBuilder.java b/src/main/java/gregtech/api/interfaces/fluid/IGT_FluidBuilder.java
index 4010a465ce..a643b8aace 100644
--- a/src/main/java/gregtech/api/interfaces/fluid/IGT_FluidBuilder.java
+++ b/src/main/java/gregtech/api/interfaces/fluid/IGT_FluidBuilder.java
@@ -1,6 +1,7 @@
package gregtech.api.interfaces.fluid;
import gregtech.api.enums.FluidState;
+import javax.annotation.Nonnull;
import net.minecraft.block.Block;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fluids.Fluid;
@@ -12,12 +13,14 @@ public interface IGT_FluidBuilder {
* @param colorRGBA The {@code short[]} RGBA color of the {@link Fluid} or {@code null} for no defined RGBA color
* @return {@link IGT_FluidBuilder} self for call chaining
*/
+ @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value
IGT_FluidBuilder withColorRGBA(final short[] colorRGBA);
/**
* @param localizedName The localized name of this {@link IGT_FluidBuilder}
* @return {@link IGT_FluidBuilder} self for call chaining
*/
+ @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value
IGT_FluidBuilder withLocalizedName(final String localizedName);
/**
@@ -25,43 +28,50 @@ public interface IGT_FluidBuilder {
* @param temperature The Kelvin temperature of this {@link IGT_FluidBuilder}
* @return {@link IGT_FluidBuilder} self for call chaining
*/
+ @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value
IGT_FluidBuilder withStateAndTemperature(final FluidState fluidState, final int temperature);
/**
* @param stillIconResourceLocation the {@link ResourceLocation} of the still fluid icon
* @return {@link IGT_FluidBuilder} self for call chaining
*/
+ @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value
IGT_FluidBuilder withStillIconResourceLocation(final ResourceLocation stillIconResourceLocation);
/**
* @param flowingIconResourceLocation the {@link ResourceLocation} of the flowing fluid icon
* @return {@link IGT_FluidBuilder} self for call chaining
*/
+ @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value
IGT_FluidBuilder withFlowingIconResourceLocation(final ResourceLocation flowingIconResourceLocation);
/**
* @param textureName The name of the GregTech mod texture of this {@link IGT_FluidBuilder}
* @return {@link IGT_FluidBuilder} self for call chaining
*/
+ @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value
IGT_FluidBuilder withTextureName(final String textureName);
/**
- * @param fromGTFluid the {@link IGT_Fluid} to copy the texture from
+ * @param fluidBlock the {@link Block} implementation of the {@link IGT_Fluid}
* @return {@link IGT_FluidBuilder} self for call chaining
*/
- IGT_FluidBuilder withTextureFrom(final IGT_Fluid fromGTFluid);
+ @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value
+ IGT_FluidBuilder withFluidBlock(final Block fluidBlock);
/**
- * @param fluidBlock the {@link Block} implementation of the {@link IGT_Fluid}
+ * @param fromFluid the {@link Fluid} to copy the icons from
* @return {@link IGT_FluidBuilder} self for call chaining
*/
- IGT_FluidBuilder withFluidBlock(final Block fluidBlock);
+ @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value
+ IGT_FluidBuilder withIconsFrom(@Nonnull final Fluid fromFluid);
/**
* @param stillIconResourceLocation The {@link ResourceLocation} of the still fluid texture
* @param flowingIconResourceLocation The {@link ResourceLocation} of the flowing fluid texture
* @return {@link IGT_FluidBuilder} self for call chaining
*/
+ @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value
IGT_FluidBuilder withTextures(
final ResourceLocation stillIconResourceLocation, final ResourceLocation flowingIconResourceLocation);
@@ -79,5 +89,5 @@ public interface IGT_FluidBuilder {
* @see #build()
* @see IGT_Fluid#addFluid()
*/
- IGT_Fluid buildAndRegister();
+ IGT_RegisteredFluid buildAndRegister();
}
diff --git a/src/main/java/gregtech/api/interfaces/fluid/IGT_RegisteredFluid.java b/src/main/java/gregtech/api/interfaces/fluid/IGT_RegisteredFluid.java
new file mode 100644
index 0000000000..1d8cd2384f
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/fluid/IGT_RegisteredFluid.java
@@ -0,0 +1,56 @@
+package gregtech.api.interfaces.fluid;
+
+import gregtech.api.enums.FluidState;
+import gregtech.api.enums.Materials;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidContainerRegistry;
+
+public interface IGT_RegisteredFluid {
+
+ /**
+ * Registers the containers in the {@link FluidContainerRegistry} for this {@link IGT_Fluid}
+ *
+ * @param fullContainer The full fluid container
+ * @param emptyContainer The empty fluid container
+ * @param containerSize The size of the container
+ * @return The {@link IGT_RegisteredFluid} for call chaining
+ */
+ @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value
+ IGT_RegisteredFluid registerContainers(
+ final ItemStack fullContainer, final ItemStack emptyContainer, final int containerSize);
+
+ /**
+ * Registers the bucket-sized 1000L containers in the {@link FluidContainerRegistry} for this {@link IGT_Fluid}
+ *
+ * @param fullContainer The full container to associate with this {@link IGT_Fluid}
+ * @param emptyContainer The empty container associate with this {@link IGT_Fluid}
+ * @return {@link IGT_RegisteredFluid} for call chaining
+ */
+ @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value
+ IGT_RegisteredFluid registerBContainers(final ItemStack fullContainer, final ItemStack emptyContainer);
+
+ /**
+ * Registers the potion-sized 250L containers in the {@link FluidContainerRegistry} for this {@link IGT_Fluid}
+ *
+ * @param fullContainer The full container to associate with this {@link IGT_Fluid}
+ * @param emptyContainer The empty container associate with this {@link IGT_Fluid}
+ * @return {@link IGT_RegisteredFluid} self for call chaining
+ */
+ @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value
+ IGT_RegisteredFluid registerPContainers(final ItemStack fullContainer, final ItemStack emptyContainer);
+
+ /**
+ * Updates the {@link Materials}'s fluids from this {@link IGT_Fluid}'s state
+ *
+ * @param material the {@link Materials} to configure based on this {@link IGT_Fluid} and {@link FluidState}
+ * @return The {@link IGT_RegisteredFluid} for call chaining
+ */
+ @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value
+ IGT_RegisteredFluid configureMaterials(final Materials material);
+
+ /**
+ * @return this {@link IGT_Fluid} cast to {@link Fluid}
+ */
+ Fluid asFluid();
+}
diff --git a/src/main/java/gregtech/common/GT_Proxy.java b/src/main/java/gregtech/common/GT_Proxy.java
index 1f0eda5034..3bc5557fac 100644
--- a/src/main/java/gregtech/common/GT_Proxy.java
+++ b/src/main/java/gregtech/common/GT_Proxy.java
@@ -5,6 +5,7 @@ import static gregtech.api.enums.FluidState.GAS;
import static gregtech.api.enums.FluidState.LIQUID;
import static gregtech.api.enums.FluidState.MOLTEN;
import static gregtech.api.enums.FluidState.PLASMA;
+import static gregtech.api.enums.GT_Values.MOD_ID;
import static gregtech.api.enums.GT_Values.MOD_ID_RC;
import static gregtech.api.enums.GT_Values.MOD_ID_TC;
import static gregtech.api.enums.GT_Values.MOD_ID_TE;
@@ -43,7 +44,6 @@ import gregtech.api.fluid.GT_FluidFactory;
import gregtech.api.interfaces.IBlockOnWalkOver;
import gregtech.api.interfaces.IGlobalWirelessEnergy;
import gregtech.api.interfaces.IProjectileItem;
-import gregtech.api.interfaces.fluid.IGT_Fluid;
import gregtech.api.interfaces.internal.IGT_Mod;
import gregtech.api.interfaces.internal.IThaumcraftCompat;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
@@ -51,7 +51,6 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.items.GT_MetaGenerated_Item;
import gregtech.api.items.GT_MetaGenerated_Tool;
import gregtech.api.objects.GT_ChunkManager;
-import gregtech.api.objects.GT_Fluid;
import gregtech.api.objects.GT_FluidStack;
import gregtech.api.objects.GT_ItemStack;
import gregtech.api.objects.GT_UO_DimensionList;
@@ -119,6 +118,7 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.DamageSource;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.MathHelper;
+import net.minecraft.util.ResourceLocation;
import net.minecraft.world.ChunkCoordIntPair;
import net.minecraft.world.World;
import net.minecraft.world.WorldSettings.GameType;
@@ -138,7 +138,6 @@ import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.event.world.ChunkDataEvent;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidContainerRegistry;
-import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.oredict.OreDictionary;
import net.minecraftforge.oredict.RecipeSorter;
@@ -2552,7 +2551,7 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG
} else return;
for (int i = 0; i < 3; i++) {
crackedFluids[i] = GT_FluidFactory.builder(namePrefixes[i] + aMaterial.mName.toLowerCase(Locale.ENGLISH))
- .withTextureFrom((IGT_Fluid) uncrackedFluid)
+ .withIconsFrom(uncrackedFluid)
.withLocalizedName(orePrefixes[i].mLocalizedMaterialPre + aMaterial.mDefaultLocalName)
.withColorRGBA(aMaterial.mRGBa)
.withStateAndTemperature(GAS, 775)
@@ -2603,7 +2602,7 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG
} else return;
for (int i = 0; i < 3; i++) {
crackedFluids[i] = GT_FluidFactory.builder(namePrefixes[i] + aMaterial.mName.toLowerCase(Locale.ENGLISH))
- .withTextureFrom((IGT_Fluid) uncrackedFluid)
+ .withIconsFrom(uncrackedFluid)
.withLocalizedName(orePrefixes[i].mLocalizedMaterialPre + aMaterial.mDefaultLocalName)
.withColorRGBA(aMaterial.mRGBa)
.withStateAndTemperature(GAS, 775)
@@ -2640,19 +2639,19 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG
}
/**
- * @deprecated use {@link IGT_Fluid#addFluid}
+ * @deprecated use {@link GT_FluidFactory#builder}
* @see GT_FluidFactory#of(String, String, Materials, FluidState, int)
* @see GT_FluidFactory#of(String, String, FluidState, int)
*/
@Deprecated
public Fluid addFluid(String aName, String aLocalized, Materials aMaterial, int aState, int aTemperatureK) {
- return addFluid(aName, aLocalized, aMaterial, aState, aTemperatureK, null, null, 0);
+ return GT_FluidFactory.of(aName, aLocalized, aMaterial, FluidState.VALID_STATES[aState], aTemperatureK);
}
/**
- * @deprecated use {@link IGT_Fluid#addFluid}
- * @see GT_FluidFactory#builder
+ * @deprecated use {@link GT_FluidFactory#builder}
*/
+ @SuppressWarnings({"MethodWithTooManyParameters"}) // Deprecated method
@Deprecated
public Fluid addFluid(
String aName,
@@ -2663,24 +2662,20 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG
ItemStack aFullContainer,
ItemStack aEmptyContainer,
int aFluidAmount) {
- return addFluid(
- aName,
- aName.toLowerCase(Locale.ENGLISH),
- aLocalized,
- aMaterial,
- null,
- aState,
- aTemperatureK,
- aFullContainer,
- aEmptyContainer,
- aFluidAmount);
+ return GT_FluidFactory.builder(aName)
+ .withLocalizedName(aLocalized)
+ .withStateAndTemperature(FluidState.fromValue(aState), aTemperatureK)
+ .buildAndRegister()
+ .configureMaterials(aMaterial)
+ .registerContainers(aFullContainer, aEmptyContainer, aFluidAmount)
+ .asFluid();
}
/**
- * @deprecated use {@link IGT_Fluid#addFluid}
- * @see GT_FluidFactory#builder
+ * @deprecated use {@link GT_FluidFactory#builder}
*/
@Deprecated
+ @SuppressWarnings({"MethodWithTooManyParameters"}) // Deprecated method
public Fluid addFluid(
String aName,
String aTexture,
@@ -2692,67 +2687,15 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG
ItemStack aFullContainer,
ItemStack aEmptyContainer,
int aFluidAmount) {
- aName = aName.toLowerCase(Locale.ENGLISH);
-
- Fluid rFluid = new GT_Fluid(aName, aTexture, aRGBa != null ? aRGBa : Dyes._NULL.getRGBA());
- GT_LanguageManager.addStringLocalization(rFluid.getUnlocalizedName(), aLocalized == null ? aName : aLocalized);
- if (FluidRegistry.registerFluid(rFluid)) {
- switch (aState) {
- case 0:
- rFluid.setGaseous(false);
- rFluid.setViscosity(10000);
- break;
- case 1:
- case 4:
- rFluid.setGaseous(false);
- rFluid.setViscosity(1000);
- break;
- case 2:
- rFluid.setGaseous(true);
- rFluid.setDensity(-100);
- rFluid.setViscosity(200);
- break;
- case 3:
- rFluid.setGaseous(true);
- rFluid.setDensity(55536);
- rFluid.setViscosity(10);
- rFluid.setLuminosity(15);
- }
- } else {
- rFluid = FluidRegistry.getFluid(aName);
- }
- if (rFluid.getTemperature() == new Fluid("test").getTemperature()) {
- rFluid.setTemperature(aTemperatureK);
- }
- if (aMaterial != null) {
- switch (aState) {
- case 0:
- aMaterial.mSolid = rFluid;
- break;
- case 1:
- aMaterial.mFluid = rFluid;
- break;
- case 2:
- aMaterial.mGas = rFluid;
- break;
- case 3:
- aMaterial.mPlasma = rFluid;
- break;
- case 4:
- aMaterial.mStandardMoltenFluid = rFluid;
- }
- }
- if ((aFullContainer != null)
- && (aEmptyContainer != null)
- && (!FluidContainerRegistry.registerFluidContainer(
- new FluidStack(rFluid, aFluidAmount), aFullContainer, aEmptyContainer))) {
- GT_Values.RA.addFluidCannerRecipe(
- aFullContainer,
- GT_Utility.getContainerItem(aFullContainer, false),
- null,
- new FluidStack(rFluid, aFluidAmount));
- }
- return rFluid;
+ return GT_FluidFactory.builder(aName)
+ .withLocalizedName(aLocalized)
+ .withStillIconResourceLocation(new ResourceLocation(MOD_ID, "fluids/fluid." + aTexture))
+ .withColorRGBA(aRGBa)
+ .withStateAndTemperature(FluidState.fromValue(aState), aTemperatureK)
+ .buildAndRegister()
+ .configureMaterials(aMaterial)
+ .registerContainers(aFullContainer, aEmptyContainer, aFluidAmount)
+ .asFluid();
}
public File getSaveDirectory() {
diff --git a/src/main/java/gregtech/common/fluid/GT_Fluid.java b/src/main/java/gregtech/common/fluid/GT_Fluid.java
index b8bca3116a..e768358503 100644
--- a/src/main/java/gregtech/common/fluid/GT_Fluid.java
+++ b/src/main/java/gregtech/common/fluid/GT_Fluid.java
@@ -5,34 +5,38 @@ import gregtech.api.enums.FluidState;
import gregtech.api.enums.GT_Values;
import gregtech.api.enums.Materials;
import gregtech.api.interfaces.fluid.IGT_Fluid;
+import gregtech.api.interfaces.fluid.IGT_RegisteredFluid;
import gregtech.api.util.GT_LanguageManager;
import gregtech.api.util.GT_Utility;
+import javax.annotation.Nonnull;
import net.minecraft.item.ItemStack;
-import net.minecraft.util.IIcon;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
-public class GT_Fluid extends Fluid implements IGT_Fluid, Runnable {
+public class GT_Fluid extends Fluid implements IGT_Fluid, IGT_RegisteredFluid, Runnable {
private final String localizedName;
private final ResourceLocation stillIconResourceLocation;
private final ResourceLocation flowingIconResourceLocation;
private final short[] colorRGBA;
private final FluidState fluidState;
+ private final Fluid iconsFrom;
private Fluid registeredFluid;
+ private boolean hasRun = false;
/**
* Constructs this {@link IGT_Fluid} implementation from an {@link GT_FluidBuilder} instance
*
* @param builder The {@link GT_FluidBuilder} instance to construct this {@link IGT_Fluid} implementation
*/
- protected GT_Fluid(final GT_FluidBuilder builder) {
+ protected GT_Fluid(@Nonnull final GT_FluidBuilder builder) {
super(builder.fluidName);
this.localizedName = builder.localizedName;
this.stillIconResourceLocation = builder.stillIconResourceLocation;
this.flowingIconResourceLocation = builder.flowingIconResourceLocation;
+ this.iconsFrom = builder.iconsFrom;
this.block = builder.fluidBlock;
this.colorRGBA = builder.colorRGBA;
this.fluidState = builder.fluidState;
@@ -41,6 +45,37 @@ public class GT_Fluid extends Fluid implements IGT_Fluid, Runnable {
}
/**
+ * Adjusts this {@link Fluid}'s settings based on this {@link IGT_Fluid}'s state
+ */
+ protected void configureFromStateTemperature() {
+ switch (fluidState) {
+ case SLURRY:
+ setGaseous(false).setViscosity(10000);
+ break;
+ case GAS:
+ setGaseous(true).setDensity(-100).setViscosity(200);
+ break;
+ case PLASMA:
+ setGaseous(true).setDensity(55536).setViscosity(10).setLuminosity(15);
+ break;
+ case MOLTEN:
+ final int luminosity;
+ if (temperature >= 3500) {
+ luminosity = 15;
+ } else {
+ luminosity = temperature < 1000 ? 0 : 14 * (temperature - 1000) / 2500 + 1;
+ }
+ setLuminosity(luminosity);
+ case LIQUID:
+ default:
+ setGaseous(false).setViscosity(1000);
+ break;
+ }
+ }
+
+ // ----- Fluid implementations -----
+
+ /**
* @inheritDoc
*/
@Override
@@ -50,61 +85,41 @@ public class GT_Fluid extends Fluid implements IGT_Fluid, Runnable {
| Math.max(0, Math.min(255, colorRGBA[2]));
}
- /**
- * This {@link Runnable#run()} implementation is scheduled within the {@link GregTech_API#sGTBlockIconload}
- * to load this {@link IGT_Fluid}'s texture icons.
- *
- * @see Runnable#run()
- */
- @Override
- public void run() {
- final IIcon stillIcon = GregTech_API.sBlockIcons.registerIcon(stillIconResourceLocation.toString());
- if (flowingIconResourceLocation == null) {
- setIcons(stillIcon);
- } else {
- final IIcon flowingIcon = GregTech_API.sBlockIcons.registerIcon(flowingIconResourceLocation.toString());
- setIcons(stillIcon, flowingIcon);
- }
- }
+ // ----- IGT_Fluid interface implementations -----
- /**
- * @inheritDoc
- */
- @Override
- public IGT_Fluid addFluid() {
-
- if (FluidRegistry.registerFluid(this)) {
+ public IGT_RegisteredFluid addFluid() {
+ if (FluidRegistry.registerFluid(GT_Fluid.this)) {
// Registered as a new Fluid
- // Adds self as Runnable to the block icons loader run() tasks
+ registeredFluid = this;
+ // Schedules the gtFluid for the block icons loader run() tasks
GregTech_API.sGTBlockIconload.add(this);
// Adds a server-side localized-name
- GT_LanguageManager.addStringLocalization(this.getUnlocalizedName(), localizedName);
- registeredFluid = this;
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName(), localizedName);
} else {
- // Promotes Fluid from the registry to enable GT_Fluid methods
- registeredFluid = FluidRegistry.getFluid(fluidName);
+ // Fluid already registered, get it from the registry
+ registeredFluid = FluidRegistry.getFluid(GT_Fluid.this.fluidName);
// Sets temperature of already registered fluids if they use the default (temperature = 300)
if (registeredFluid.getTemperature() == new Fluid("test").getTemperature()) {
- registeredFluid.setTemperature(temperature);
+ registeredFluid.setTemperature(GT_Fluid.this.temperature);
}
}
return this;
}
+ // ----- IGT_RegisteredFluid interface implementations -----
+
/**
* @inheritDoc
*/
@Override
- public IGT_Fluid registerContainers(
+ public IGT_RegisteredFluid registerContainers(
final ItemStack fullContainer, final ItemStack emptyContainer, final int containerSize) {
- if (fullContainer == null || emptyContainer == null) return this;
- if (registeredFluid == null) {
- throw new IllegalStateException("Cannot register containers for an unregistered fluid");
- }
- final FluidStack fluidStack = new FluidStack(registeredFluid, containerSize);
- if (!FluidContainerRegistry.registerFluidContainer(fluidStack, fullContainer, emptyContainer)) {
- GT_Values.RA.addFluidCannerRecipe(
- fullContainer, GT_Utility.getContainerItem(fullContainer, false), null, fluidStack);
+ if (fullContainer != null && emptyContainer != null) {
+ final FluidStack fluidStack = new FluidStack(registeredFluid, containerSize);
+ if (!FluidContainerRegistry.registerFluidContainer(fluidStack, fullContainer, emptyContainer)) {
+ GT_Values.RA.addFluidCannerRecipe(
+ fullContainer, GT_Utility.getContainerItem(fullContainer, false), null, fluidStack);
+ }
}
return this;
}
@@ -113,7 +128,7 @@ public class GT_Fluid extends Fluid implements IGT_Fluid, Runnable {
* @inheritDoc
*/
@Override
- public IGT_Fluid registerBContainers(final ItemStack fullContainer, final ItemStack emptyContainer) {
+ public IGT_RegisteredFluid registerBContainers(final ItemStack fullContainer, final ItemStack emptyContainer) {
return registerContainers(fullContainer, emptyContainer, 1000);
}
@@ -121,7 +136,7 @@ public class GT_Fluid extends Fluid implements IGT_Fluid, Runnable {
* @inheritDoc
*/
@Override
- public IGT_Fluid registerPContainers(final ItemStack fullContainer, final ItemStack emptyContainer) {
+ public IGT_RegisteredFluid registerPContainers(final ItemStack fullContainer, final ItemStack emptyContainer) {
return registerContainers(fullContainer, emptyContainer, 250);
}
@@ -129,45 +144,26 @@ public class GT_Fluid extends Fluid implements IGT_Fluid, Runnable {
* @inheritDoc
*/
@Override
- public ResourceLocation getStillIconResourceLocation() {
- return stillIconResourceLocation;
- }
-
- /**
- * @inheritDoc
- */
- @Override
- public ResourceLocation getFlowingIconResourceLocation() {
- return flowingIconResourceLocation;
- }
-
- /**
- * @inheritDoc
- */
- @Override
- public IGT_Fluid configureMaterials(final Materials material) {
- if (registeredFluid == null) {
- throw new IllegalStateException("Cannot configure Materials with an unregistered fluid");
- }
-
- switch (fluidState) {
- case SLURRY:
- material.mSolid = registeredFluid;
- break;
- case LIQUID:
- material.mFluid = registeredFluid;
- break;
- case GAS:
- material.mGas = registeredFluid;
- break;
- case PLASMA:
- material.mPlasma = registeredFluid;
- break;
- case MOLTEN:
- material.mStandardMoltenFluid = registeredFluid;
- break;
- default:
- throw new IllegalStateException("Unexpected FluidState: " + fluidState);
+ public IGT_RegisteredFluid configureMaterials(final Materials material) {
+ if (material != null) {
+ switch (fluidState) {
+ case SLURRY:
+ material.mSolid = registeredFluid;
+ break;
+ case GAS:
+ material.mGas = registeredFluid;
+ break;
+ case PLASMA:
+ material.mPlasma = registeredFluid;
+ break;
+ case MOLTEN:
+ material.mStandardMoltenFluid = registeredFluid;
+ break;
+ case LIQUID:
+ default:
+ material.mFluid = registeredFluid;
+ break;
+ }
}
return this;
}
@@ -177,33 +173,34 @@ public class GT_Fluid extends Fluid implements IGT_Fluid, Runnable {
*/
@Override
public Fluid asFluid() {
- return registeredFluid == null ? this : registeredFluid;
+ return registeredFluid;
}
+ // ----- Runnable interface implementations -----
+
/**
- * Adjusts this {@link Fluid}'s settings based on this {@link IGT_Fluid}'s state
+ * This {@link Runnable#run()} implementation is scheduled within the {@link GregTech_API#sGTBlockIconload}
+ * to load this {@link IGT_Fluid}'s texture icons.
*
- * @throws IllegalStateException if {@link FluidState} is unknown
+ * @see Runnable#run()
*/
- protected void configureFromStateTemperature() {
- switch (fluidState) {
- case SLURRY:
- setGaseous(false).setViscosity(10000);
- break;
- case LIQUID:
- case MOLTEN:
- final int luminosity =
- temperature >= 3500 ? 15 : temperature < 1000 ? 0 : 14 * (temperature - 1000) / 2500 + 1;
- setGaseous(false).setViscosity(1000).setLuminosity(luminosity);
- break;
- case GAS:
- setGaseous(true).setDensity(-100).setViscosity(200);
- break;
- case PLASMA:
- setGaseous(true).setDensity(55536).setViscosity(10).setLuminosity(15);
- break;
- default:
- throw new IllegalStateException("Unexpected FluidState: " + fluidState);
+ @Override
+ public void run() {
+ if (!hasRun) {
+ if (iconsFrom instanceof GT_Fluid) {
+ // Needs the GT_Fluid to have registered its icons
+ ((GT_Fluid) iconsFrom).run();
+ stillIcon = iconsFrom.getStillIcon();
+ flowingIcon = iconsFrom.getFlowingIcon();
+ } else {
+ if (stillIconResourceLocation != null) {
+ stillIcon = GregTech_API.sBlockIcons.registerIcon(stillIconResourceLocation.toString());
+ }
+ if (flowingIconResourceLocation != null) {
+ flowingIcon = GregTech_API.sBlockIcons.registerIcon(flowingIconResourceLocation.toString());
+ }
+ }
+ hasRun = true;
}
}
}
diff --git a/src/main/java/gregtech/common/fluid/GT_FluidBuilder.java b/src/main/java/gregtech/common/fluid/GT_FluidBuilder.java
index b484f7aacb..48d4e0e95e 100644
--- a/src/main/java/gregtech/common/fluid/GT_FluidBuilder.java
+++ b/src/main/java/gregtech/common/fluid/GT_FluidBuilder.java
@@ -6,21 +6,28 @@ import gregtech.api.enums.Dyes;
import gregtech.api.enums.FluidState;
import gregtech.api.interfaces.fluid.IGT_Fluid;
import gregtech.api.interfaces.fluid.IGT_FluidBuilder;
+import gregtech.api.interfaces.fluid.IGT_RegisteredFluid;
import java.util.Locale;
+import javax.annotation.Nonnull;
import net.minecraft.block.Block;
+import net.minecraft.util.IIcon;
import net.minecraft.util.ResourceLocation;
+import net.minecraftforge.fluids.Fluid;
public class GT_FluidBuilder implements IGT_FluidBuilder {
- protected final String fluidName;
- protected String localizedName;
- protected ResourceLocation stillIconResourceLocation = null, flowingIconResourceLocation = null;
- protected short[] colorRGBA = Dyes._NULL.getRGBA();
- protected Block fluidBlock = null;
- protected FluidState fluidState;
- protected int temperature;
+ final String fluidName;
+ String localizedName;
+ ResourceLocation stillIconResourceLocation = null, flowingIconResourceLocation = null;
+ short[] colorRGBA = Dyes._NULL.getRGBA();
+ Block fluidBlock = null;
+ FluidState fluidState;
+ int temperature;
+ IIcon stillIcon;
+ IIcon flowingIcon;
+ Fluid iconsFrom;
public GT_FluidBuilder(final String fluidName) {
- this.fluidName = fluidName;
+ this.fluidName = fluidName.toLowerCase(Locale.ENGLISH);
}
/**
@@ -83,9 +90,8 @@ public class GT_FluidBuilder implements IGT_FluidBuilder {
* @inheritDoc
*/
@Override
- public IGT_FluidBuilder withTextureFrom(final IGT_Fluid fromGTFluid) {
- this.stillIconResourceLocation = fromGTFluid.getStillIconResourceLocation();
- this.flowingIconResourceLocation = fromGTFluid.getFlowingIconResourceLocation();
+ public IGT_FluidBuilder withIconsFrom(@Nonnull final Fluid fromFluid) {
+ this.iconsFrom = fromFluid;
return this;
}
@@ -114,9 +120,15 @@ public class GT_FluidBuilder implements IGT_FluidBuilder {
*/
@Override
public IGT_Fluid build() {
+ if (colorRGBA == null) {
+ colorRGBA = Dyes._NULL.getRGBA();
+ }
if (stillIconResourceLocation == null) {
withTextureName(fluidName.toLowerCase(Locale.ENGLISH));
}
+ if (localizedName == null) {
+ localizedName = fluidName;
+ }
return new GT_Fluid(this);
}
@@ -124,10 +136,7 @@ public class GT_FluidBuilder implements IGT_FluidBuilder {
* @inheritDoc
*/
@Override
- public IGT_Fluid buildAndRegister() {
- if (stillIconResourceLocation == null) {
- withTextureName(fluidName.toLowerCase(Locale.ENGLISH));
- }
+ public IGT_RegisteredFluid buildAndRegister() {
return build().addFluid();
}
}
diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java b/src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java
index 633a8d77ae..ad85963075 100644
--- a/src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java
+++ b/src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java
@@ -915,8 +915,7 @@ public class GT_Loader_Item_Block_And_Fluid implements Runnable {
Materials.Ice.mGas = Materials.Water.mGas;
Materials.Water.mGas.setTemperature(375).setGaseous(true);
- ItemList.sOilExtraHeavy = GT_FluidFactory.of("liquid_extra_heavy_oil", "Very Heavy Oil", LIQUID, 295)
- .asFluid();
+ ItemList.sOilExtraHeavy = GT_FluidFactory.of("liquid_extra_heavy_oil", "Very Heavy Oil", LIQUID, 295);
ItemList.sEpichlorhydrin = GT_FluidFactory.builder("liquid_epichlorhydrin")
.withLocalizedName("Epichlorohydrin")
.withStateAndTemperature(LIQUID, 295)
@@ -924,8 +923,7 @@ public class GT_Loader_Item_Block_And_Fluid implements Runnable {
.configureMaterials(Materials.Epichlorohydrin)
.registerBContainers(Materials.Epichlorohydrin.getCells(1), Materials.Empty.getCells(1))
.asFluid();
- ItemList.sDrillingFluid = GT_FluidFactory.of("liquid_drillingfluid", "Drilling Fluid", LIQUID, 295)
- .asFluid();
+ ItemList.sDrillingFluid = GT_FluidFactory.of("liquid_drillingfluid", "Drilling Fluid", LIQUID, 295);
ItemList.sToluene = GT_FluidFactory.builder("liquid_toluene")
.withLocalizedName("Toluene")
.withStateAndTemperature(LIQUID, 295)
@@ -1321,21 +1319,23 @@ public class GT_Loader_Item_Block_And_Fluid implements Runnable {
for (byte i = 0; i < Dyes.VALUES.length; i = (byte) (i + 1)) {
Dyes tDye = Dyes.VALUES[i];
Fluid tFluid;
- tDye.addFluidDye((Fluid)
+ tDye.addFluidDye(
GT_FluidFactory.builder("dye.watermixed." + tDye.name().toLowerCase(Locale.ENGLISH))
.withTextureName("dyes")
.withLocalizedName("Water Mixed " + tDye.mName + " Dye")
.withColorRGBA(tDye.getRGBA())
.withStateAndTemperature(LIQUID, 295)
- .buildAndRegister());
- tDye.addFluidDye((Fluid) GT_FluidFactory.builder(
- "dye.chemical." + tDye.name().toLowerCase(Locale.ENGLISH))
- .withTextureName("dyes")
- .withLocalizedName("Chemical " + tDye.mName + " Dye")
- .withColorRGBA(tDye.getRGBA())
- .withStateAndTemperature(LIQUID, 295)
- .buildAndRegister()
- .registerContainers(ItemList.SPRAY_CAN_DYES[i].get(1L), ItemList.Spray_Empty.get(1L), 2304));
+ .buildAndRegister()
+ .asFluid());
+ tDye.addFluidDye(
+ GT_FluidFactory.builder("dye.chemical." + tDye.name().toLowerCase(Locale.ENGLISH))
+ .withTextureName("dyes")
+ .withLocalizedName("Chemical " + tDye.mName + " Dye")
+ .withColorRGBA(tDye.getRGBA())
+ .withStateAndTemperature(LIQUID, 295)
+ .buildAndRegister()
+ .registerContainers(ItemList.SPRAY_CAN_DYES[i].get(1L), ItemList.Spray_Empty.get(1L), 2304)
+ .asFluid());
}
GT_FluidFactory.builder("ice")
.withLocalizedName("Crushed Ice")