2013-01-03 15:58:19 +01:00
|
|
|
package liquidmechanics.common.handlers;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import liquidmechanics.common.LiquidMechanics;
|
2013-01-03 18:18:47 +01:00
|
|
|
import liquidmechanics.common.tileentity.TileEntityPipe;
|
2013-01-03 15:58:19 +01:00
|
|
|
import net.minecraft.block.Block;
|
2013-01-03 18:18:47 +01:00
|
|
|
import net.minecraft.item.ItemStack;
|
2013-01-03 15:58:19 +01:00
|
|
|
import net.minecraftforge.event.ForgeSubscribe;
|
|
|
|
import net.minecraftforge.liquids.LiquidDictionary;
|
|
|
|
import net.minecraftforge.liquids.LiquidStack;
|
|
|
|
import net.minecraftforge.liquids.LiquidDictionary.LiquidRegisterEvent;
|
|
|
|
|
|
|
|
public class LiquidHandler
|
|
|
|
{
|
|
|
|
// Active list of all Liquid that can be used//
|
|
|
|
public static List<LiquidData> allowedLiquids = new ArrayList<LiquidData>();
|
|
|
|
// PreDefinned Liquids//
|
|
|
|
public static LiquidData steam;
|
|
|
|
public static LiquidData water;
|
|
|
|
public static LiquidData lava;
|
2013-01-03 18:18:47 +01:00
|
|
|
public static LiquidData air;
|
|
|
|
|
|
|
|
// public static LiquidData oil; TODO add
|
|
|
|
// public static LiquidData fuel;
|
2013-01-03 15:58:19 +01:00
|
|
|
/**
|
|
|
|
* Called to add the default liquids to the allowed list
|
|
|
|
*/
|
|
|
|
public static void addDefaultLiquids()
|
|
|
|
{
|
2013-01-03 18:18:47 +01:00
|
|
|
steam = new LiquidData("Steam", LiquidDictionary.getOrCreateLiquid("Steam", new LiquidStack(LiquidMechanics.blockSteamBlock, 1)), true, 100);
|
2013-01-03 15:58:19 +01:00
|
|
|
allowedLiquids.add(steam);
|
2013-01-03 18:18:47 +01:00
|
|
|
water = new LiquidData("water", LiquidDictionary.getOrCreateLiquid("Water", new LiquidStack(Block.waterStill, 1)), false, 32);
|
2013-01-03 15:58:19 +01:00
|
|
|
allowedLiquids.add(water);
|
2013-01-03 18:18:47 +01:00
|
|
|
lava = new LiquidData("Lava", LiquidDictionary.getOrCreateLiquid("Lava", new LiquidStack(Block.lavaStill, 1)), false, 20);
|
2013-01-03 15:58:19 +01:00
|
|
|
allowedLiquids.add(lava);
|
2013-01-03 18:18:47 +01:00
|
|
|
air = new LiquidData("Air", LiquidDictionary.getOrCreateLiquid("Air", new LiquidStack(0, 1)), false, 0);
|
|
|
|
allowedLiquids.add(air);
|
2013-01-03 15:58:19 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@ForgeSubscribe
|
|
|
|
public void liquidRegisterEvent(LiquidRegisterEvent event)
|
|
|
|
{
|
|
|
|
// TODO use this to add new liquid types to the data list
|
|
|
|
// or something along the lines of IDing liquids for use
|
2013-01-03 18:18:47 +01:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the LiquidData linked to the liquid by name
|
|
|
|
*
|
|
|
|
* @param name
|
|
|
|
* - String name, not case sensitive
|
|
|
|
*/
|
|
|
|
public static LiquidData get(String name)
|
|
|
|
{
|
|
|
|
for (LiquidData data : LiquidHandler.allowedLiquids)
|
|
|
|
{
|
|
|
|
if (LiquidData.getName(data).equalsIgnoreCase(name)) { return data; }
|
|
|
|
}
|
|
|
|
return air;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static LiquidData get(LiquidStack stack)
|
|
|
|
{
|
|
|
|
for (LiquidData data : LiquidHandler.allowedLiquids)
|
|
|
|
{
|
|
|
|
if (isEqual(stack, data)) { return data; }
|
|
|
|
}
|
|
|
|
return air;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gets a liquid stack of type & volume
|
|
|
|
*/
|
|
|
|
public static LiquidStack getStack(LiquidData type, int vol)
|
|
|
|
{
|
|
|
|
if(type == null) return null;
|
|
|
|
return new LiquidStack(LiquidData.getStack(type).itemID, vol, LiquidData.getStack(type).itemMeta);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static int getMeta(LiquidData type)
|
|
|
|
{
|
|
|
|
if (type == LiquidHandler.steam) return 0;
|
|
|
|
if (type == LiquidHandler.water) return 1;
|
|
|
|
if (type == LiquidHandler.lava) return 2;
|
|
|
|
return 20;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static LiquidData getFromMeta(int meta)
|
|
|
|
{
|
|
|
|
switch (meta)
|
2013-01-03 15:58:19 +01:00
|
|
|
{
|
2013-01-03 18:18:47 +01:00
|
|
|
case 0:
|
|
|
|
return steam;
|
|
|
|
case 1:
|
|
|
|
return water;
|
|
|
|
case 2:
|
|
|
|
return lava;
|
|
|
|
}
|
|
|
|
return air;
|
2013-01-03 15:58:19 +01:00
|
|
|
|
2013-01-03 18:18:47 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public static LiquidData getFromBlockID(int id)
|
|
|
|
{
|
|
|
|
for (LiquidData data : allowedLiquids)
|
2013-01-03 15:58:19 +01:00
|
|
|
{
|
2013-01-03 18:18:47 +01:00
|
|
|
if (LiquidData.getStack(data).itemID == id) { return data; }
|
2013-01-03 15:58:19 +01:00
|
|
|
}
|
2013-01-03 18:18:47 +01:00
|
|
|
return air;
|
|
|
|
}
|
2013-01-03 15:58:19 +01:00
|
|
|
|
2013-01-03 18:18:47 +01:00
|
|
|
/**
|
|
|
|
* compare a stack with a liquid type to see if there the same
|
|
|
|
*
|
|
|
|
* @param stack
|
|
|
|
* @param type
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public static boolean isEqual(LiquidStack stack, LiquidData type)
|
|
|
|
{
|
|
|
|
if (stack == null || type == null)
|
|
|
|
return false;
|
|
|
|
if (LiquidData.getStack(type).itemID == stack.itemID && LiquidData.getStack(type).itemMeta == stack.itemMeta) { return true; }
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
public static boolean isEqual(LiquidStack stack, LiquidStack type)
|
|
|
|
{
|
|
|
|
if (stack == null || type == null)
|
|
|
|
return false;
|
|
|
|
if (type.itemID == stack.itemID && type.itemMeta == stack.itemMeta) { return true; }
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
public static ItemStack consumeItem(ItemStack stack)
|
|
|
|
{
|
|
|
|
if (stack.stackSize == 1)
|
|
|
|
{
|
|
|
|
if (stack.getItem().hasContainerItem()) return stack.getItem().getContainerItemStack(stack);
|
|
|
|
else return null;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
stack.splitStack(1);
|
|
|
|
|
|
|
|
return stack;
|
|
|
|
}
|
2013-01-03 15:58:19 +01:00
|
|
|
}
|
|
|
|
}
|