/*
* Copyright (c) CovertJaguar, 2014 http://railcraft.info
*
* This code is the property of CovertJaguar
* and may only be used with explicit written
* permission unless otherwise specified on the
* license page at http://railcraft.info/wiki/info:license.
*/
package mods.railcraft.common.plugins.forge;
import cpw.mods.fml.common.IFuelHandler;
import mods.railcraft.common.blocks.aesthetics.cube.EnumCube;
import mods.railcraft.common.fluids.FluidItemHelper;
import mods.railcraft.common.items.RailcraftToolItems;
import mods.railcraft.common.fluids.Fluids;
import mods.railcraft.common.fluids.FluidHelper;
import mods.railcraft.common.items.ItemRailcraft;
import mods.railcraft.common.util.inventory.InvTools;
import mods.railcraft.common.util.misc.Game;
import net.minecraft.block.Block;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntityFurnace;
import net.minecraftforge.fluids.FluidStack;
/**
*
* @author CovertJaguar <http://www.railcraft.info>
*/
public class FuelPlugin {
private static IFuelHandler fuelHandler;
private static ItemStack lastFuel;
private static int lastFuelValue;
public static IFuelHandler getFuelHandler() {
if (fuelHandler == null)
fuelHandler = new FuelHandler();
return fuelHandler;
}
private static class FuelHandler implements IFuelHandler {
private static final int COKE_HEAT = 3200;
private final ItemStack coke = RailcraftToolItems.getCoalCoke();
private final ItemStack cokeBlock = EnumCube.COKE_BLOCK.getItem();
private FuelHandler() {
}
@Override
public int getBurnTime(ItemStack fuel) {
if (fuel == null)
return 0;
if (InvTools.isItemEqual(fuel, coke))
return COKE_HEAT;
if (InvTools.isItemEqual(fuel, cokeBlock))
return COKE_HEAT * 10;
if (fuel.getItem() instanceof ItemRailcraft)
return ((ItemRailcraft) fuel.getItem()).getHeatValue(fuel);
return 0;
}
}
/**
* Internal function that provides custom fuel values before requesting them
* from Minecraft. It also caches the last fuel hit to reduce cpu cycles.
*
* @param stack The item to test
* @return The fuel value
*/
public static int getBurnTime(ItemStack stack) {
if (stack == null)
return 0;
if (InvTools.isItemEqualSemiStrict(stack, lastFuel))
return lastFuelValue;
lastFuel = stack;
lastFuelValue = findFuelValue(stack);
return lastFuelValue;
}
private static int findFuelValue(ItemStack stack) {
try {
Item item = stack.getItem();
if (item instanceof ItemBlock) {
Block block = InvTools.getBlockFromStack(stack);
String name = block.getUnlocalizedName();
if (name != null && name.contains("blockScaffold"))
return 0;
}
// if (itemID == Item.coal.itemID && stack.getItemDamage() == 0)
// return 1600;
if (item == Items.blaze_rod)
return 1000;
FluidStack liquid = FluidItemHelper.getFluidStackInContainer(stack);
if (liquid != null && Fluids.LAVA.get() == liquid.getFluid())
return liquid.amount;
String name = stack.getItem().getUnlocalizedName();
if (name != null && name.contains("itemScrap"))
return 0;
return TileEntityFurnace.getItemBurnTime(stack);
} catch (Exception ex) {
Game.logThrowable("Error in Fuel Handler! Is some mod creating items that are not compliant with standards?", ex);
}
return 0;
}
}