diff options
Diffstat (limited to 'src/Java/gtPlusPlus/core/fluids')
-rw-r--r-- | src/Java/gtPlusPlus/core/fluids/BlockFluidBase.java | 27 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/core/fluids/FactoryFluid.java | 12 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/core/fluids/FluidFactory.java | 57 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/core/fluids/FluidPackage.java | 26 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/core/fluids/ItemGenericFluidBucket.java | 102 |
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; } + } |