aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus/core/fluids
diff options
context:
space:
mode:
Diffstat (limited to 'src/Java/gtPlusPlus/core/fluids')
-rw-r--r--src/Java/gtPlusPlus/core/fluids/BlockFluidBase.java27
-rw-r--r--src/Java/gtPlusPlus/core/fluids/FactoryFluid.java12
-rw-r--r--src/Java/gtPlusPlus/core/fluids/FluidFactory.java57
-rw-r--r--src/Java/gtPlusPlus/core/fluids/FluidPackage.java26
-rw-r--r--src/Java/gtPlusPlus/core/fluids/ItemGenericFluidBucket.java102
5 files changed, 192 insertions, 32 deletions
diff --git a/src/Java/gtPlusPlus/core/fluids/BlockFluidBase.java b/src/Java/gtPlusPlus/core/fluids/BlockFluidBase.java
index 2aa598fc96..dc7c9c2e78 100644
--- a/src/Java/gtPlusPlus/core/fluids/BlockFluidBase.java
+++ b/src/Java/gtPlusPlus/core/fluids/BlockFluidBase.java
@@ -9,6 +9,7 @@ import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.util.IIcon;
+import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.BlockFluidClassic;
@@ -20,12 +21,20 @@ public class BlockFluidBase extends BlockFluidClassic {
protected static IIcon stillIcon;
@SideOnly(Side.CLIENT)
protected static IIcon flowingIcon;
-
+
protected final short[] mRGB;
+
+ public BlockFluidBase(Fluid fluid, short[] aRGB) {
+ this(fluid, Material.water, aRGB);
+ }
+
public BlockFluidBase(Fluid fluid, Material material, short[] aRGB) {
super(fluid, material);
mRGB = aRGB;
+ this.setHardness(100.0F);
+ this.setLightOpacity(3);
+ this.disableStats();
}
@Override
@@ -76,4 +85,20 @@ public class BlockFluidBase extends BlockFluidClassic {
return super.recolourBlock(world, x, y, z, side, colour);
}
+ @Override
+ public boolean canDisplace(IBlockAccess world, int x, int y, int z) {
+ if (world.getBlock(x, y, z).getMaterial().isLiquid()) {
+ return false;
+ }
+ return super.canDisplace(world, x, y, z);
+ }
+
+ @Override
+ public boolean displaceIfPossible(World world, int x, int y, int z) {
+ if (world.getBlock(x, y, z).getMaterial().isLiquid()) {
+ return false;
+ }
+ return super.displaceIfPossible(world, x, y, z);
+ }
+
}
diff --git a/src/Java/gtPlusPlus/core/fluids/FactoryFluid.java b/src/Java/gtPlusPlus/core/fluids/FactoryFluid.java
index befdf87c27..3359f18f7d 100644
--- a/src/Java/gtPlusPlus/core/fluids/FactoryFluid.java
+++ b/src/Java/gtPlusPlus/core/fluids/FactoryFluid.java
@@ -10,17 +10,25 @@ public class FactoryFluid extends Fluid implements Runnable {
private final String mTextureName;
private final short[] mRGBa;
- public FactoryFluid(String fluidName, int luminosity, int density, int temp, int viscosity, final short[] aRGBa) {
- this(fluidName, null, luminosity, density, temp, viscosity, false, EnumRarity.common, aRGBa);
+ public FactoryFluid(String fluidName, final short[] aRGBa) {
+ this(fluidName, null, Short.MIN_VALUE, Short.MIN_VALUE, Short.MIN_VALUE, Short.MIN_VALUE, false, EnumRarity.common, aRGBa);
}
+ public FactoryFluid(String fluidName, int luminosity, int density, int temp, int viscosity, final short[] aRGBa) {
+ this(fluidName, null, luminosity, density, temp, viscosity, (density == Short.MIN_VALUE || density >= 0 ? false : true), EnumRarity.common, aRGBa);
+ }
+
public FactoryFluid(String fluidName, Block aBlock, int luminosity, int density, int temp, int viscosity, boolean gas, EnumRarity aRarity, final short[] aRGBa) {
super(fluidName);
this.mRGBa = aRGBa;
this.setBlock(aBlock);
+ if (luminosity != Short.MIN_VALUE)
this.setLuminosity(luminosity);
+ if (density != Short.MIN_VALUE)
this.setDensity(density);
+ if (temp != Short.MIN_VALUE)
this.setTemperature(temp);
+ if (viscosity != Short.MIN_VALUE)
this.setViscosity(viscosity);
this.setGaseous(gas);
this.setRarity(aRarity);
diff --git a/src/Java/gtPlusPlus/core/fluids/FluidFactory.java b/src/Java/gtPlusPlus/core/fluids/FluidFactory.java
index fad545ce68..dffd7f55e9 100644
--- a/src/Java/gtPlusPlus/core/fluids/FluidFactory.java
+++ b/src/Java/gtPlusPlus/core/fluids/FluidFactory.java
@@ -18,6 +18,7 @@ import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
+import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
@@ -52,8 +53,13 @@ public class FluidFactory {
public static final Map<Integer, Fluid> mMetaToFluidMap = new LinkedHashMap<Integer, Fluid>();
public static final Map<Integer, ItemStack> mMetaToBucketMap = new LinkedHashMap<Integer, ItemStack>();
public static final Map<Integer, Block> mMetaToBlockMap = new LinkedHashMap<Integer, Block>();
+
+
+ //Special Colour Handling
+ public static final Map<Integer, Integer> mMetaToColourMap = new LinkedHashMap<Integer, Integer>();
+ public static Item mGenericBucket;
private static FluidPackage mErrorFluid;
private static AutoMap<FluidPackage> mGeneratedFluids = new AutoMap<FluidPackage>();
@@ -61,10 +67,13 @@ public class FluidFactory {
}
- public static void init() {
- GameRegistry.registerItem(new ItemGenericFluidBucket(Blocks.air), "gtpp.bucket.generic");
- for (FluidPackage y : mGeneratedFluids) {
- FluidRegistry.registerFluid(y.get());
+ public static void init() {
+ mGenericBucket = new ItemGenericFluidBucket(Blocks.air);
+ GameRegistry.registerItem(mGenericBucket, "gtpp.bucket.generic");
+ for (FluidPackage y : mGeneratedFluids) {
+ if (!y.valid()) {
+ continue;
+ }
GameRegistry.registerBlock(y.mBlock, FluidItemBlock.class, "gtpp_" + y.mName);
FluidContainerRegistry.registerFluidContainer(y.get(), y.mBucket, new ItemStack(Items.bucket));
}
@@ -75,6 +84,34 @@ public class FluidFactory {
}
+ /**
+ * Generates a 'Water' type fluid.
+ * @param aID - The Fluid ID (Must be unique)
+ * @param aUnlocalName - Unlocalized Fluid Name
+ * @param aRGB - a {@link Short[]} containing the RGB of the FluidPackage.
+ * @return - A fully constructed & registered {@linkplain FluidPackage}
+ */
+ public static FluidPackage generate(int aID, String aUnlocalName, short[] aRGB) {
+ return generate(aID, aUnlocalName, Short.MIN_VALUE, Short.MIN_VALUE, Short.MIN_VALUE, Short.MIN_VALUE, aRGB);
+ }
+
+ /**
+ * Generate a {@link FluidPackage} from the data provided. This FluidPackage is automatically registered and handled internally.
+ * Pass in {@link Short}.MIN_VALUE for any of the Fluid Fields (Besides ID, Name or RGB) and it will default to water values.
+ * @param aID - The Fluid ID (Must be unique)
+ * @param aUnlocalName - Unlocalized Fluid Name
+ * @param luminosity - How bright is the fluid.
+ * @param density - completely arbitrary; negative density indicates that the fluid is
+ * lighter than air. Default value is approximately the real-life density of water in kg/m^3.
+ * @param temp - completely arbitrary; higher temperature indicates that the fluid is
+ * hotter than air. Default value is approximately the real-life room temperature of water in degrees Kelvin
+ * @param viscosity - completely arbitrary; negative values are not
+ * permissible. Default value is approximately the real-life density of water in m/s^2 (x10^-3). *
+ * Higher viscosity means that a fluid flows more slowly, like molasses.
+ * Lower viscosity means that a fluid flows more quickly, like helium.
+ * @param aRGB - a {@link Short[]} containing the RGB of the FluidPackage.
+ * @return - A fully constructed & registered {@linkplain FluidPackage}
+ */
public static FluidPackage generate(int aID, String aUnlocalName, int luminosity, int density, int temp,
int viscosity, short[] aRGB) {
@@ -91,7 +128,7 @@ public class FluidFactory {
Fluid aGenFluid = fluid(aUnlocalName, luminosity, density, temp, viscosity, aRGB);
Block aGenBlock = block(aGenFluid, aRGB);
- ItemStack aGenBucket = bucket();
+ ItemStack aGenBucket = bucket(aID);
aFluidToGenerate = new FluidPackage(aID, aUnlocalName, aGenFluid, aGenBucket, aGenBlock);
@@ -118,12 +155,16 @@ public class FluidFactory {
return new FactoryFluid(aUnlocalName, luminosity, density, temp, viscosity, aRGB);
}
- private static ItemStack bucket() {
- return null;
+ private static ItemStack bucket(int aID) {
+ return ItemGenericFluidBucket.registerFluidForBucket(aID);
}
private static Block block(Fluid aFluidForBlock, short[] aRGB) {
- return new BlockFluidBase(aFluidForBlock, Material.water, aRGB);
+ if (aFluidForBlock != null) {
+ FluidRegistry.registerFluid(aFluidForBlock);
+ return new BlockFluidBase(aFluidForBlock, aRGB);
+ }
+ return Blocks.dirt;
}
/**
diff --git a/src/Java/gtPlusPlus/core/fluids/FluidPackage.java b/src/Java/gtPlusPlus/core/fluids/FluidPackage.java
index 7c8cf70c70..29f831776b 100644
--- a/src/Java/gtPlusPlus/core/fluids/FluidPackage.java
+++ b/src/Java/gtPlusPlus/core/fluids/FluidPackage.java
@@ -1,9 +1,26 @@
package gtPlusPlus.core.fluids;
-import static gtPlusPlus.core.fluids.FluidFactory.*;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
+import static gtPlusPlus.core.fluids.FluidFactory.mBlockToBucketMap;
+import static gtPlusPlus.core.fluids.FluidFactory.mBlockToFluidMap;
+import static gtPlusPlus.core.fluids.FluidFactory.mBlockToMetaMap;
+import static gtPlusPlus.core.fluids.FluidFactory.mBlockToNameMap;
+import static gtPlusPlus.core.fluids.FluidFactory.mBucketToBlockMap;
+import static gtPlusPlus.core.fluids.FluidFactory.mBucketToFluidMap;
+import static gtPlusPlus.core.fluids.FluidFactory.mBucketToMetaMap;
+import static gtPlusPlus.core.fluids.FluidFactory.mBucketToNameMap;
+import static gtPlusPlus.core.fluids.FluidFactory.mFluidToBlockMap;
+import static gtPlusPlus.core.fluids.FluidFactory.mFluidToBucketMap;
+import static gtPlusPlus.core.fluids.FluidFactory.mFluidToMetaMap;
+import static gtPlusPlus.core.fluids.FluidFactory.mFluidToNameMap;
+import static gtPlusPlus.core.fluids.FluidFactory.mMetaToBlockMap;
+import static gtPlusPlus.core.fluids.FluidFactory.mMetaToBucketMap;
+import static gtPlusPlus.core.fluids.FluidFactory.mMetaToColourMap;
+import static gtPlusPlus.core.fluids.FluidFactory.mMetaToFluidMap;
+import static gtPlusPlus.core.fluids.FluidFactory.mMetaToNameMap;
+import static gtPlusPlus.core.fluids.FluidFactory.mNameToBlockMap;
+import static gtPlusPlus.core.fluids.FluidFactory.mNameToBucketMap;
+import static gtPlusPlus.core.fluids.FluidFactory.mNameToFluidMap;
+import static gtPlusPlus.core.fluids.FluidFactory.mNameToMetaMap;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
@@ -45,6 +62,7 @@ public class FluidPackage {
mMetaToBucketMap.put(aID, aBucket);
mMetaToBlockMap.put(aID, aBlock);
+ mMetaToColourMap.put(aID, aFluid.getColor());
mID = aID;
mName = aName;
diff --git a/src/Java/gtPlusPlus/core/fluids/ItemGenericFluidBucket.java b/src/Java/gtPlusPlus/core/fluids/ItemGenericFluidBucket.java
index ab2fe11d8c..d41fccb3ed 100644
--- a/src/Java/gtPlusPlus/core/fluids/ItemGenericFluidBucket.java
+++ b/src/Java/gtPlusPlus/core/fluids/ItemGenericFluidBucket.java
@@ -5,8 +5,13 @@ import java.util.List;
import java.util.Map;
import cpw.mods.fml.common.eventhandler.Event;
+import gtPlusPlus.api.objects.GregtechException;
+import gtPlusPlus.api.objects.data.AutoMap;
+import gtPlusPlus.core.lib.CORE;
+import gtPlusPlus.core.util.minecraft.ItemUtils;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
+import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
@@ -22,10 +27,28 @@ import net.minecraftforge.event.entity.player.FillBucketEvent;
public class ItemGenericFluidBucket extends ItemBucket {
+ private static IIcon mBaseBucketTexture;
+ private static IIcon mOverlayBucketTexture;
+ private static AutoMap<Block> mInternalFluidCache = new AutoMap<Block>();
+
public ItemGenericFluidBucket(Block aFluid) {
super(aFluid);
this.setContainerItem(Items.bucket);
this.maxStackSize = 1;
+ mInternalFluidCache.put(aFluid);
+ }
+
+ public static ItemStack registerFluidForBucket(int aID) {
+
+ if (FluidFactory.mMetaToBucketMap.containsKey(aID)) {
+ try {
+ throw new GregtechException(""+aID+" is already registered! Unable to register fluid: "+FluidFactory.mMetaToFluidMap.get(aID).getLocalizedName());
+ } catch (GregtechException e) {
+ System.exit(0);
+ }
+ }
+ mInternalFluidCache.put(FluidFactory.mMetaToBlockMap.get(aID));
+ return ItemUtils.simpleMetaStack(FluidFactory.mGenericBucket, aID, 1);
}
Map<Integer, IIcon> mIconCache = new LinkedHashMap<Integer, IIcon>();
@@ -36,7 +59,7 @@ public class ItemGenericFluidBucket extends ItemBucket {
*/
public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
- Block isFull = FluidFactory.mBucketToBlockMap.get(aStack);
+ Block isFull = FluidFactory.mMetaToBlockMap.get(aStack.getItemDamage());
boolean flag = isFull == Blocks.air;
MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(aWorld, aPlayer, flag);
@@ -179,19 +202,27 @@ public class ItemGenericFluidBucket extends ItemBucket {
}
@Override
- public int getMetadata(int p_77647_1_) {
- // TODO Auto-generated method stub
- return super.getMetadata(p_77647_1_);
+ public boolean getHasSubtypes() {
+ return mInternalFluidCache.size() > 0;
}
@Override
- public boolean getHasSubtypes() {
- return super.getHasSubtypes();
+ public void getSubItems(Item item, CreativeTabs tab, List list) {
+ list.add(new ItemStack(item, 1, 0));
+ for (Block f : mInternalFluidCache) {
+ Integer aMeta;
+ if (f != null) {
+ aMeta = FluidFactory.mBlockToMetaMap.get(f);
+ if (aMeta != null) {
+ list.add(new ItemStack(item, 1, aMeta));
+ }
+ }
+ }
}
@Override
public int getMaxDamage() {
- return super.getMaxDamage();
+ return 512;
}
@Override
@@ -211,20 +242,20 @@ public class ItemGenericFluidBucket extends ItemBucket {
}
@Override
- public void getSubItems(Item p_150895_1_, CreativeTabs p_150895_2_, List p_150895_3_) {
- // TODO Auto-generated method stub
- super.getSubItems(p_150895_1_, p_150895_2_, p_150895_3_);
- }
-
- @Override
public boolean isRepairable() {
return false;
}
@Override
- public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining) {
- IIcon aTemp = mIconCache.get(stack.getItemDamage());
- return aTemp != null ? aTemp : super.getIcon(stack, renderPass, player, usingItem, useRemaining);
+ public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining) {
+ if (stack != null && renderPass == 1) {
+ return mOverlayBucketTexture;
+ }
+ else {
+ return mBaseBucketTexture;
+ }
+ /*IIcon aTemp = mIconCache.get(stack.getItemDamage());
+ return aTemp != null ? aTemp : super.getIcon(stack, renderPass, player, usingItem, useRemaining);*/
}
@Override
@@ -234,7 +265,7 @@ public class ItemGenericFluidBucket extends ItemBucket {
@Override
public int getMaxDamage(ItemStack stack) {
- return 0;
+ return 512;
}
@Override
@@ -245,6 +276,43 @@ public class ItemGenericFluidBucket extends ItemBucket {
@Override
public int getItemEnchantability(ItemStack stack) {
return 0;
+ }
+
+ @Override
+ public IIcon getIconFromDamageForRenderPass(final int damage, final int pass) {
+ if (pass == 1) {
+ return mOverlayBucketTexture;
+ }
+ else {
+ return mBaseBucketTexture;
+ }
+ }
+
+ @Override
+ public void registerIcons(final IIconRegister i) {
+ mBaseBucketTexture = i.registerIcon("bucket_empty");
+ mOverlayBucketTexture = i.registerIcon(CORE.MODID+":bucket.generic.overlay");
+ }
+
+ @Override
+ public boolean tryPlaceContainedLiquid(World p_77875_1_, int p_77875_2_, int p_77875_3_, int p_77875_4_) {
+ return tryPlaceContainedLiquid(Blocks.air, p_77875_1_, p_77875_2_, p_77875_3_, p_77875_4_);
+ }
+
+ @Override
+ public int getColorFromItemStack(ItemStack aStack, int aPass) {
+ if (aPass == 0) {
+ return super.getColorFromItemStack(aStack, aPass);
+ }
+ else {
+ return FluidFactory.mMetaToColourMap.get(aStack.getItemDamage());
+ }
+ }
+
+ @Override
+ public boolean requiresMultipleRenderPasses() {
+ return true;
}
+
}