001 package net.minecraftforge.liquids; 002 003 import net.minecraft.tileentity.TileEntity; 004 005 /** 006 * Reference implementation of ILiquidTank. Use this or implement your own. 007 */ 008 public class LiquidTank implements ILiquidTank { 009 private LiquidStack liquid; 010 private int capacity; 011 private int tankPressure; 012 private TileEntity tile; 013 014 public LiquidTank(int capacity) { 015 this(null, capacity); 016 } 017 018 public LiquidTank(int liquidId, int quantity, int capacity) { 019 this(new LiquidStack(liquidId, quantity), capacity); 020 } 021 022 public LiquidTank(int liquidId, int quantity, int capacity, TileEntity tile) { 023 this(liquidId, quantity, capacity); 024 this.tile = tile; 025 } 026 027 public LiquidTank(LiquidStack liquid, int capacity) { 028 this.liquid = liquid; 029 this.capacity = capacity; 030 } 031 032 public LiquidTank(LiquidStack liquid, int capacity, TileEntity tile) 033 { 034 this(liquid, capacity); 035 this.tile = tile; 036 } 037 @Override 038 public LiquidStack getLiquid() { 039 return this.liquid; 040 } 041 042 @Override 043 public int getCapacity() { 044 return this.capacity; 045 } 046 047 @Override 048 public int fill(LiquidStack resource, boolean doFill) { 049 if(resource == null || resource.itemID <= 0) 050 return 0; 051 052 if(liquid == null || liquid.itemID <= 0) { 053 if(resource.amount <= capacity) { 054 if(doFill) 055 this.liquid = resource.copy(); 056 return resource.amount; 057 } else { 058 if(doFill) { 059 this.liquid = resource.copy(); 060 this.liquid.amount = capacity; 061 if (tile!=null) 062 LiquidEvent.fireEvent(new LiquidEvent.LiquidFillingEvent(liquid, tile.worldObj, tile.xCoord, tile.yCoord, tile.zCoord, this)); 063 } 064 return capacity; 065 } 066 } 067 068 if(!liquid.isLiquidEqual(resource)) 069 return 0; 070 071 int space = capacity - liquid.amount; 072 if(resource.amount <= space) { 073 if(doFill) 074 this.liquid.amount += resource.amount; 075 return resource.amount; 076 } else { 077 078 if(doFill) 079 this.liquid.amount = capacity; 080 return space; 081 } 082 083 } 084 @Override 085 public LiquidStack drain(int maxDrain, boolean doDrain) { 086 if(liquid == null || liquid.itemID <= 0) 087 return null; 088 if(liquid.amount <= 0) 089 return null; 090 091 int used = maxDrain; 092 if(liquid.amount < used) 093 used = liquid.amount; 094 095 if(doDrain) { 096 liquid.amount -= used; 097 } 098 099 LiquidStack drained = new LiquidStack(liquid.itemID, used, liquid.itemMeta); 100 101 // Reset liquid if emptied 102 if(liquid.amount <= 0) 103 liquid = null; 104 105 if (doDrain && tile!=null) 106 LiquidEvent.fireEvent(new LiquidEvent.LiquidDrainingEvent(drained, tile.worldObj, tile.xCoord, tile.yCoord, tile.zCoord, this)); 107 108 return drained; 109 } 110 111 @Override 112 public int getTankPressure() { 113 return tankPressure; 114 } 115 116 public void setTankPressure(int pressure) 117 { 118 this.tankPressure = pressure; 119 } 120 121 }