diff options
Diffstat (limited to 'src/Java/binnie/core/liquid')
-rw-r--r-- | src/Java/binnie/core/liquid/BinnieFluid.java | 32 | ||||
-rw-r--r-- | src/Java/binnie/core/liquid/FluidContainer.java | 95 | ||||
-rw-r--r-- | src/Java/binnie/core/liquid/IFluidType.java | 28 | ||||
-rw-r--r-- | src/Java/binnie/core/liquid/ILiquidType.java | 7 | ||||
-rw-r--r-- | src/Java/binnie/core/liquid/ItemFluidContainer.java | 179 | ||||
-rw-r--r-- | src/Java/binnie/core/liquid/ManagerLiquid.java | 80 |
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()); + } +} |