aboutsummaryrefslogtreecommitdiff
path: root/src/Java/binnie/core/liquid
diff options
context:
space:
mode:
Diffstat (limited to 'src/Java/binnie/core/liquid')
-rw-r--r--src/Java/binnie/core/liquid/BinnieFluid.java32
-rw-r--r--src/Java/binnie/core/liquid/FluidContainer.java95
-rw-r--r--src/Java/binnie/core/liquid/IFluidType.java28
-rw-r--r--src/Java/binnie/core/liquid/ILiquidType.java7
-rw-r--r--src/Java/binnie/core/liquid/ItemFluidContainer.java179
-rw-r--r--src/Java/binnie/core/liquid/ManagerLiquid.java80
6 files changed, 421 insertions, 0 deletions
diff --git a/src/Java/binnie/core/liquid/BinnieFluid.java b/src/Java/binnie/core/liquid/BinnieFluid.java
new file mode 100644
index 0000000000..e0ac5fc815
--- /dev/null
+++ b/src/Java/binnie/core/liquid/BinnieFluid.java
@@ -0,0 +1,32 @@
+package binnie.core.liquid;
+
+import net.minecraftforge.fluids.Fluid;
+
+class BinnieFluid
+ extends Fluid
+{
+ private final String name;
+ final IFluidType fluidType;
+
+ public String getLocalizedName()
+ {
+ return this.name;
+ }
+
+ public BinnieFluid(IFluidType fluid)
+ {
+ super(fluid.getIdentifier());
+ this.fluidType = fluid;
+ this.name = fluid.getName();
+ }
+
+ public int getColor()
+ {
+ return this.fluidType.getColour();
+ }
+
+ public IFluidType getType()
+ {
+ return this.fluidType;
+ }
+}
diff --git a/src/Java/binnie/core/liquid/FluidContainer.java b/src/Java/binnie/core/liquid/FluidContainer.java
new file mode 100644
index 0000000000..0bfb14512b
--- /dev/null
+++ b/src/Java/binnie/core/liquid/FluidContainer.java
@@ -0,0 +1,95 @@
+package binnie.core.liquid;
+
+import binnie.core.BinnieCore;
+import binnie.core.Mods;
+import binnie.core.Mods.Mod;
+import binnie.core.proxy.BinnieProxy;
+import binnie.genetics.item.GeneticsItems;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraftforge.fluids.FluidContainerRegistry;
+import net.minecraftforge.fluids.FluidContainerRegistry.FluidContainerData;
+
+public enum FluidContainer
+{
+ Bucket, Capsule, Refractory, Can, Glass, Cylinder;
+
+ IIcon bottle;
+ IIcon contents;
+ ItemFluidContainer item;
+
+ private FluidContainer() {}
+
+ public int getMaxStackSize()
+ {
+ return this == Bucket ? 1 : 16;
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void updateIcons(IIconRegister register)
+ {
+ this.bottle = BinnieCore.proxy.getIcon(register, this == Cylinder ? "binniecore" : "forestry", "liquids/" + toString().toLowerCase() + ".bottle");
+
+ this.contents = BinnieCore.proxy.getIcon(register, this == Cylinder ? "binniecore" : "forestry", "liquids/" + toString().toLowerCase() + ".contents");
+ }
+
+ public IIcon getBottleIcon()
+ {
+ return this.bottle;
+ }
+
+ public IIcon getContentsIcon()
+ {
+ return this.contents;
+ }
+
+ public String getName()
+ {
+ return BinnieCore.proxy.localise("item.container." + name().toLowerCase());
+ }
+
+ public boolean isActive()
+ {
+ return getEmpty() != null;
+ }
+
+ public ItemStack getEmpty()
+ {
+ switch (1.$SwitchMap$binnie$core$liquid$FluidContainer[ordinal()])
+ {
+ case 1:
+ return new ItemStack(Items.bucket, 1, 0);
+ case 2:
+ return Mods.Forestry.stack("canEmpty");
+ case 3:
+ return Mods.Forestry.stack("waxCapsule");
+ case 4:
+ return new ItemStack(Items.glass_bottle, 1, 0);
+ case 5:
+ return Mods.Forestry.stack("refractoryEmpty");
+ case 6:
+ return GeneticsItems.Cylinder.get(1);
+ }
+ return null;
+ }
+
+ public void registerContainerData(IFluidType fluid)
+ {
+ if (!isActive()) {
+ return;
+ }
+ ItemStack filled = this.item.getContainer(fluid);
+
+ ItemStack empty = getEmpty();
+ if ((filled == null) || (empty == null) || (fluid.get(1000) == null)) {
+ return;
+ }
+ FluidContainerRegistry.FluidContainerData data = new FluidContainerRegistry.FluidContainerData(fluid.get(1000), filled, empty);
+
+ FluidContainerRegistry.registerFluidContainer(data);
+ }
+}
diff --git a/src/Java/binnie/core/liquid/IFluidType.java b/src/Java/binnie/core/liquid/IFluidType.java
new file mode 100644
index 0000000000..3d0bd46d2b
--- /dev/null
+++ b/src/Java/binnie/core/liquid/IFluidType.java
@@ -0,0 +1,28 @@
+package binnie.core.liquid;
+
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.util.IIcon;
+import net.minecraftforge.fluids.FluidStack;
+
+public abstract interface IFluidType
+{
+ public abstract IIcon getIcon();
+
+ public abstract void registerIcon(IIconRegister paramIIconRegister);
+
+ public abstract String getName();
+
+ public abstract String getIdentifier();
+
+ public abstract FluidStack get(int paramInt);
+
+ public abstract int getColour();
+
+ public abstract int getContainerColour();
+
+ public abstract int getTransparency();
+
+ public abstract boolean canPlaceIn(FluidContainer paramFluidContainer);
+
+ public abstract boolean showInCreative(FluidContainer paramFluidContainer);
+}
diff --git a/src/Java/binnie/core/liquid/ILiquidType.java b/src/Java/binnie/core/liquid/ILiquidType.java
new file mode 100644
index 0000000000..69e035a3c3
--- /dev/null
+++ b/src/Java/binnie/core/liquid/ILiquidType.java
@@ -0,0 +1,7 @@
+package binnie.core.liquid;
+
+public abstract interface ILiquidType
+ extends IFluidType
+{
+ public abstract int ordinal();
+}
diff --git a/src/Java/binnie/core/liquid/ItemFluidContainer.java b/src/Java/binnie/core/liquid/ItemFluidContainer.java
new file mode 100644
index 0000000000..fe3e72a123
--- /dev/null
+++ b/src/Java/binnie/core/liquid/ItemFluidContainer.java
@@ -0,0 +1,179 @@
+package binnie.core.liquid;
+
+import binnie.Binnie;
+import binnie.extratrees.alcohol.AlcoholEffect;
+import binnie.extratrees.alcohol.drink.DrinkManager;
+import binnie.extratrees.alcohol.drink.IDrinkLiquid;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.EnumAction;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemFood;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.FoodStats;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.World;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+
+public class ItemFluidContainer
+ extends ItemFood
+{
+ private FluidContainer container;
+ public static int LiquidExtraBee = 64;
+ public static int LiquidExtraTree = 128;
+ public static int LiquidJuice = 256;
+ public static int LiquidAlcohol = 384;
+ public static int LiquidSpirit = 512;
+ public static int LiquidLiqueuer = 640;
+ public static int LiquidGenetics = 768;
+ private static Map<Integer, String> idToFluid = new HashMap();
+ private static Map<String, Integer> fluidToID = new HashMap();
+
+ public static void registerFluid(IFluidType fluid, int id)
+ {
+ idToFluid.put(Integer.valueOf(id), fluid.getIdentifier().toLowerCase());
+ fluidToID.put(fluid.getIdentifier().toLowerCase(), Integer.valueOf(id));
+ }
+
+ public ItemFluidContainer(FluidContainer container)
+ {
+ super(0, false);
+ this.container = container;
+ container.item = this;
+ this.maxStackSize = container.getMaxStackSize();
+ setHasSubtypes(true);
+ setUnlocalizedName("container" + container.name());
+ setCreativeTab(CreativeTabs.tabMaterials);
+ }
+
+ private FluidStack getLiquid(ItemStack stack)
+ {
+ String liquid = (String)idToFluid.get(Integer.valueOf(stack.getItemDamage()));
+ return liquid == null ? null : Binnie.Liquid.getLiquidStack(liquid, 1000);
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister register)
+ {
+ this.container.updateIcons(register);
+ }
+
+ public String getItemStackDisplayName(ItemStack itemstack)
+ {
+ if (itemstack == null) {
+ return "???";
+ }
+ FluidStack fluid = getLiquid(itemstack);
+ if (fluid == null) {
+ return "Missing Fluid";
+ }
+ return fluid.getFluid().getLocalizedName(fluid) + " " + this.container.getName();
+ }
+
+ public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List itemList)
+ {
+ for (IFluidType liquid : Binnie.Liquid.fluids.values()) {
+ if ((liquid.canPlaceIn(this.container)) &&
+
+ (liquid.showInCreative(this.container))) {
+ itemList.add(getContainer(liquid));
+ }
+ }
+ }
+
+ public ItemStack getContainer(IFluidType liquid)
+ {
+ int id = ((Integer)fluidToID.get(liquid.getIdentifier().toLowerCase())).intValue();
+ ItemStack itemstack = new ItemStack(this, 1, id);
+ return itemstack;
+ }
+
+ public IIcon getIcon(ItemStack itemstack, int j)
+ {
+ if (j > 0) {
+ return this.container.getBottleIcon();
+ }
+ return this.container.getContentsIcon();
+ }
+
+ @SideOnly(Side.CLIENT)
+ public int getColorFromItemStack(ItemStack item, int pass)
+ {
+ FluidStack fluid = getLiquid(item);
+ if (fluid == null) {
+ return 16777215;
+ }
+ if ((pass == 0) && ((fluid.getFluid() instanceof BinnieFluid))) {
+ return ((BinnieFluid)fluid.getFluid()).fluidType.getContainerColour();
+ }
+ return super.getColorFromItemStack(item, pass);
+ }
+
+ public boolean requiresMultipleRenderPasses()
+ {
+ return true;
+ }
+
+ public ItemStack onEaten(ItemStack stack, World world, EntityPlayer player)
+ {
+ player.getFoodStats().func_151686_a(this, stack);
+ world.playSoundAtEntity(player, "random.burp", 0.5F, world.rand.nextFloat() * 0.1F + 0.9F);
+ onFoodEaten(stack, world, player);
+ return this.container.getEmpty();
+ }
+
+ protected void onFoodEaten(ItemStack stack, World world, EntityPlayer player)
+ {
+ if (!world.isRemote)
+ {
+ FluidStack fluid = getLiquid(stack);
+ IDrinkLiquid liquid = DrinkManager.getLiquid(fluid);
+ if (liquid != null) {
+ AlcoholEffect.makeDrunk(player, liquid.getABV() * fluid.amount);
+ }
+ }
+ }
+
+ public int getMaxItemUseDuration(ItemStack stack)
+ {
+ return 32;
+ }
+
+ public EnumAction getItemUseAction(ItemStack stack)
+ {
+ return isDrinkable(stack) ? EnumAction.drink : EnumAction.none;
+ }
+
+ public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
+ {
+ if (isDrinkable(stack)) {
+ player.setItemInUse(stack, getMaxItemUseDuration(stack));
+ }
+ return stack;
+ }
+
+ public int func_150905_g(ItemStack p_150905_1_)
+ {
+ return 0;
+ }
+
+ public float func_150906_h(ItemStack p_150906_1_)
+ {
+ return 0.0F;
+ }
+
+ private boolean isDrinkable(ItemStack stack)
+ {
+ FluidStack fluid = getLiquid(stack);
+ IDrinkLiquid liquid = DrinkManager.getLiquid(fluid);
+ return liquid == null ? false : liquid.isConsumable();
+ }
+}
diff --git a/src/Java/binnie/core/liquid/ManagerLiquid.java b/src/Java/binnie/core/liquid/ManagerLiquid.java
new file mode 100644
index 0000000000..f0ab486cc0
--- /dev/null
+++ b/src/Java/binnie/core/liquid/ManagerLiquid.java
@@ -0,0 +1,80 @@
+package binnie.core.liquid;
+
+import binnie.core.ManagerBase;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+
+public class ManagerLiquid
+ extends ManagerBase
+{
+ Map<String, IFluidType> fluids = new LinkedHashMap();
+
+ public Collection<IFluidType> getFluidTypes()
+ {
+ return this.fluids.values();
+ }
+
+ public void createLiquids(IFluidType[] liquids, int startID)
+ {
+ for (IFluidType liquid : liquids)
+ {
+ BinnieFluid fluid = createLiquid(liquid, startID++);
+ if (fluid == null) {
+ throw new RuntimeException("Liquid registered incorrectly - " + liquid.getIdentifier());
+ }
+ }
+ }
+
+ public BinnieFluid createLiquid(IFluidType fluid, int id)
+ {
+ this.fluids.put(fluid.getIdentifier().toLowerCase(), fluid);
+ BinnieFluid bFluid = new BinnieFluid(fluid);
+ FluidRegistry.registerFluid(bFluid);
+ ItemFluidContainer.registerFluid(fluid, id);
+ return bFluid;
+ }
+
+ public FluidStack getLiquidStack(String name, int amount)
+ {
+ return FluidRegistry.getFluidStack(name.toLowerCase(), amount);
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void reloadIcons(IIconRegister register)
+ {
+ for (IFluidType type : this.fluids.values())
+ {
+ Fluid fluid = getLiquidStack(type.getIdentifier(), 1).getFluid();
+ type.registerIcon(register);
+ if (fluid == null) {
+ throw new RuntimeException("[Binnie] Liquid not registered properly - " + type.getIdentifier());
+ }
+ fluid.setIcons(type.getIcon());
+ }
+ }
+
+ public void init() {}
+
+ public void postInit()
+ {
+ for (IFluidType fluid : this.fluids.values()) {
+ for (FluidContainer container : FluidContainer.values()) {
+ if ((container.isActive()) && (fluid.canPlaceIn(container))) {
+ container.registerContainerData(fluid);
+ }
+ }
+ }
+ }
+
+ public IFluidType getFluidType(String liquid)
+ {
+ return (IFluidType)this.fluids.get(liquid.toLowerCase());
+ }
+}