001package net.minecraftforge.liquids;
002
003import net.minecraft.tileentity.TileEntity;
004import net.minecraft.world.World;
005import net.minecraftforge.common.MinecraftForge;
006import net.minecraftforge.event.Event;
007
008public class LiquidEvent extends Event {
009    public final LiquidStack liquid;
010    public final int x;
011    public final int y;
012    public final int z;
013    public final World world;
014
015    public LiquidEvent(LiquidStack liquid, World world, int x, int y, int z)
016    {
017        this.liquid = liquid;
018        this.world = world;
019        this.x = x;
020        this.y = y;
021        this.z = z;
022    }
023
024    /**
025     * Mods should fire this event when they move liquids around (pipe networks etc)
026     *
027     * @author cpw
028     *
029     */
030    public static class LiquidMotionEvent extends LiquidEvent
031    {
032        public LiquidMotionEvent(LiquidStack liquid, World world, int x, int y, int z)
033        {
034            super(liquid, world, x, y, z);
035        }
036    }
037
038    /**
039     * Mods should fire this event when a liquid is {@link ILiquidTank#fill(LiquidStack, boolean)} their tank implementation.
040     * {@link LiquidTank} does.
041     *
042     * @author cpw
043     *
044     */
045    public static class LiquidFillingEvent extends LiquidEvent
046    {
047        public final ILiquidTank tank;
048
049        public LiquidFillingEvent(LiquidStack liquid, World world, int x, int y, int z, ILiquidTank tank)
050        {
051            super(liquid, world, x, y, z);
052            this.tank = tank;
053        }
054    }
055
056    /**
057     * Mods should fire this event when a liquid is {@link ILiquidTank#drain(int, boolean)} from their tank.
058     * @author cpw
059     *
060     */
061    public static class LiquidDrainingEvent extends LiquidEvent
062    {
063        public final ILiquidTank tank;
064
065        public LiquidDrainingEvent(LiquidStack liquid, World world, int x, int y, int z, ILiquidTank tank)
066        {
067            super(liquid, world, x, y, z);
068            this.tank = tank;
069        }
070    }
071
072
073    /**
074     * Mods should fire this event when a liquid "spills", for example, if a block containing liquid is broken.
075     *
076     * @author cpw
077     *
078     */
079    public static class LiquidSpilledEvent extends LiquidEvent
080    {
081        public LiquidSpilledEvent(LiquidStack liquid, World world, int x, int y, int z)
082        {
083            super(liquid, world, x, y, z);
084        }
085    }
086
087    /**
088     * A handy shortcut for firing the various liquid events
089     *
090     * @param event
091     */
092    public static final void fireEvent(LiquidEvent event)
093    {
094        MinecraftForge.EVENT_BUS.post(event);
095    }
096}