/* * 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.carts; import cpw.mods.fml.relauncher.ReflectionHelper; import java.util.ArrayList; import java.util.List; import net.minecraft.entity.item.EntityMinecartFurnace; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; import net.minecraft.world.World; import mods.railcraft.common.core.RailcraftConfig; import mods.railcraft.common.plugins.forge.FuelPlugin; import mods.railcraft.common.util.inventory.InvTools; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; public class EntityCartFurnace extends EntityMinecartFurnace { public EntityCartFurnace(World world) { super(world); } public EntityCartFurnace(World world, double x, double y, double z) { super(world, x, y, z); } public List<ItemStack> getItemsDropped() { List<ItemStack> items = new ArrayList<ItemStack>(); if (RailcraftConfig.doCartsBreakOnDrop()) { items.add(new ItemStack(Items.minecart)); items.add(new ItemStack(Blocks.furnace)); } else items.add(getCartItem()); return items; } @Override public void killMinecart(DamageSource par1DamageSource) { setDead(); List<ItemStack> drops = getItemsDropped(); if (this.func_95999_t() != null) drops.get(0).setStackDisplayName(this.func_95999_t()); for (ItemStack item : drops) { entityDropItem(item, 0.0F); } } @Override public ItemStack getCartItem() { ItemStack stack = new ItemStack(Items.furnace_minecart); if (hasCustomInventoryName()) stack.setStackDisplayName(getCommandSenderName()); return stack; } public double getDrag() { return DRAG_FACTOR; } @Override public boolean interactFirst(EntityPlayer player) { Integer fuel = ReflectionHelper.getPrivateValue(EntityMinecartFurnace.class, this, 0); if (fuel <= 0) { ItemStack stack = player.inventory.getCurrentItem(); if (stack != null) { int burnTime = FuelPlugin.getBurnTime(stack); if (burnTime > 0) { if (!player.capabilities.isCreativeMode) player.inventory.setInventorySlotContents(player.inventory.currentItem, InvTools.depleteItem(stack)); fuel += burnTime; ReflectionHelper.setPrivateValue(EntityMinecartFurnace.class, this, fuel, 0); pushX = posX - player.posX; pushZ = posZ - player.posZ; } } } return true; } private static final double DRAG_FACTOR = 0.99; private static final double PUSH_FACTOR = 0.1D; }