001 package net.minecraftforge.liquids; 002 003 import net.minecraft.src.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 void setLiquid(LiquidStack liquid) { 044 this.liquid = liquid; 045 } 046 047 @Override 048 public void setCapacity(int capacity) { 049 this.capacity = capacity; 050 } 051 052 @Override 053 public int getCapacity() { 054 return this.capacity; 055 } 056 057 @Override 058 public int fill(LiquidStack resource, boolean doFill) { 059 if(resource == null || resource.itemID <= 0) 060 return 0; 061 062 if(liquid == null || liquid.itemID <= 0) { 063 if(resource.amount <= capacity) { 064 if(doFill) 065 this.liquid = resource.copy(); 066 return resource.amount; 067 } else { 068 if(doFill) { 069 this.liquid = resource.copy(); 070 this.liquid.amount = capacity; 071 if (tile!=null) 072 LiquidEvent.fireEvent(new LiquidEvent.LiquidFillingEvent(liquid, tile.worldObj, tile.xCoord, tile.yCoord, tile.zCoord, this)); 073 } 074 return capacity; 075 } 076 } 077 078 if(!liquid.isLiquidEqual(resource)) 079 return 0; 080 081 int space = capacity - liquid.amount; 082 if(resource.amount <= space) { 083 if(doFill) 084 this.liquid.amount += resource.amount; 085 return resource.amount; 086 } else { 087 088 if(doFill) 089 this.liquid.amount = capacity; 090 return space; 091 } 092 093 } 094 @Override 095 public LiquidStack drain(int maxDrain, boolean doDrain) { 096 if(liquid == null || liquid.itemID <= 0) 097 return null; 098 if(liquid.amount <= 0) 099 return null; 100 101 int used = maxDrain; 102 if(liquid.amount < used) 103 used = liquid.amount; 104 105 if(doDrain) { 106 liquid.amount -= used; 107 } 108 109 LiquidStack drained = new LiquidStack(liquid.itemID, used, liquid.itemMeta); 110 111 // Reset liquid if emptied 112 if(liquid.amount <= 0) 113 liquid = null; 114 115 if (doDrain && tile!=null) 116 LiquidEvent.fireEvent(new LiquidEvent.LiquidDrainingEvent(drained, tile.worldObj, tile.xCoord, tile.yCoord, tile.zCoord, this)); 117 118 return drained; 119 } 120 121 @Override 122 public int getTankPressure() { 123 return tankPressure; 124 } 125 126 public void setTankPressure(int pressure) 127 { 128 this.tankPressure = pressure; 129 } 130 131 }