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