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 010 public LiquidTank(int capacity) { 011 this(null, capacity); 012 } 013 014 public LiquidTank(int liquidId, int quantity, int capacity) { 015 this(new LiquidStack(liquidId, quantity), capacity); 016 } 017 public LiquidTank(LiquidStack liquid, int capacity) { 018 this.liquid = liquid; 019 this.capacity = capacity; 020 } 021 022 @Override 023 public LiquidStack getLiquid() { 024 return this.liquid; 025 } 026 027 @Override 028 public void setLiquid(LiquidStack liquid) { 029 this.liquid = liquid; 030 } 031 032 @Override 033 public void setCapacity(int capacity) { 034 this.capacity = capacity; 035 } 036 037 @Override 038 public int getCapacity() { 039 return this.capacity; 040 } 041 042 @Override 043 public int fill(LiquidStack resource, boolean doFill) { 044 if(resource == null || resource.itemID <= 0) 045 return 0; 046 047 if(liquid == null || liquid.itemID <= 0) { 048 if(resource.amount <= capacity) { 049 if(doFill) 050 this.liquid = resource.copy(); 051 return resource.amount; 052 } else { 053 if(doFill) { 054 this.liquid = resource.copy(); 055 this.liquid.amount = capacity; 056 } 057 return capacity; 058 } 059 } 060 061 if(!liquid.isLiquidEqual(resource)) 062 return 0; 063 064 int space = capacity - liquid.amount; 065 if(resource.amount <= space) { 066 if(doFill) 067 this.liquid.amount += resource.amount; 068 return resource.amount; 069 } else { 070 071 if(doFill) 072 this.liquid.amount = capacity; 073 return space; 074 } 075 076 } 077 @Override 078 public LiquidStack drain(int maxDrain, boolean doDrain) { 079 if(liquid == null || liquid.itemID <= 0) 080 return null; 081 if(liquid.amount <= 0) 082 return null; 083 084 int used = maxDrain; 085 if(liquid.amount < used) 086 used = liquid.amount; 087 088 if(doDrain) { 089 liquid.amount -= used; 090 } 091 092 LiquidStack drained = new LiquidStack(liquid.itemID, used, liquid.itemMeta); 093 094 // Reset liquid if emptied 095 if(liquid.amount <= 0) 096 liquid = null; 097 098 return drained; 099 } 100 }