001    package net.minecraftforge.liquids;
002    
003    import net.minecraft.tileentity.TileEntity;
004    import net.minecraft.world.World;
005    import net.minecraftforge.common.MinecraftForge;
006    import net.minecraftforge.event.Event;
007    
008    public 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            public LiquidMotionEvent(LiquidStack liquid, World world, int x, int y, int z) {
032                super(liquid, world, x, y, z);
033            }
034        }
035    
036        /**
037         * Mods should fire this event when a liquid is {@link ILiquidTank#fill(LiquidStack, boolean)} their tank implementation.
038         * {@link LiquidTank} does.
039         *
040         * @author cpw
041         *
042         */
043        public static class LiquidFillingEvent extends LiquidEvent {
044            public final ILiquidTank tank;
045    
046            public LiquidFillingEvent(LiquidStack liquid, World world, int x, int y, int z, ILiquidTank tank) {
047                super(liquid, world, x, y, z);
048                this.tank = tank;
049            }
050        }
051    
052        /**
053         * Mods should fire this event when a liquid is {@link ILiquidTank#drain(int, boolean)} from their tank.
054         * @author cpw
055         *
056         */
057        public static class LiquidDrainingEvent extends LiquidEvent {
058            public final ILiquidTank tank;
059    
060            public LiquidDrainingEvent(LiquidStack liquid, World world, int x, int y, int z, ILiquidTank tank) {
061                super(liquid, world, x, y, z);
062                this.tank = tank;
063            }
064        }
065    
066    
067        /**
068         * Mods should fire this event when a liquid "spills", for example, if a block containing liquid is broken.
069         *
070         * @author cpw
071         *
072         */
073        public static class LiquidSpilledEvent extends LiquidEvent {
074            public LiquidSpilledEvent(LiquidStack liquid, World world, int x, int y, int z) {
075                super(liquid, world, x, y, z);
076            }
077        }
078    
079        /**
080         * A handy shortcut for firing the various liquid events
081         *
082         * @param event
083         */
084        public static final void fireEvent(LiquidEvent event) {
085            MinecraftForge.EVENT_BUS.post(event);
086        }
087    }