/*
* 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 mods.railcraft.api.carts.IItemCart;
import mods.railcraft.common.core.RailcraftConfig;
import mods.railcraft.common.fluids.FluidItemHelper;
import mods.railcraft.common.gui.EnumGui;
import mods.railcraft.common.gui.GuiHandler;
import mods.railcraft.common.util.inventory.InvTools;
import mods.railcraft.common.util.misc.Game;
import net.minecraft.block.Block;
import net.minecraft.entity.item.EntityMinecart;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import java.util.ArrayList;
import java.util.List;
public class EntityCartCargo extends EntityCartFiltered implements IItemCart {
private static final byte SLOTS_FILLED_DATA_ID = 25;
public EntityCartCargo(World world) {
super(world);
}
public EntityCartCargo(World world, double d, double d1, double d2) {
this(world);
setPosition(d, d1 + (double) yOffset, d2);
motionX = 0.0D;
motionY = 0.0D;
motionZ = 0.0D;
prevPosX = d;
prevPosY = d1;
prevPosZ = d2;
}
@Override
public ICartType getCartType() {
return EnumCart.CARGO;
}
@Override
protected void entityInit() {
super.entityInit();
dataWatcher.addObject(SLOTS_FILLED_DATA_ID, new Integer(-1));
}
public int getSlotsFilled() {
return dataWatcher.getWatchableObjectInt(SLOTS_FILLED_DATA_ID);
}
private void setSlotsFilled(int slotsFilled) {
dataWatcher.updateObject(SLOTS_FILLED_DATA_ID, slotsFilled);
}
@Override
public void onUpdate() {
super.onUpdate();
if (Game.isHost(worldObj))
setSlotsFilled(InvTools.countStacks(this));
}
@Override
public List<ItemStack> getItemsDropped() {
List<ItemStack> items = new ArrayList<ItemStack>();
if (RailcraftConfig.doCartsBreakOnDrop()) {
items.add(new ItemStack(Items.minecart));
items.add(new ItemStack(Blocks.trapped_chest));
} else
items.add(getCartItem());
return items;
}
@Override
public boolean doInteract(EntityPlayer player) {
if (Game.isHost(worldObj)) {
GuiHandler.openGui(EnumGui.CART_CARGO, player, worldObj, this);
}
return true;
}
@Override
public Block func_145820_n() {
return null;
}
// public Block func_145820_n() {
// return Blocks.trapped_chest;
// }
@Override
public int getDefaultDisplayTileOffset() {
return 8;
}
@Override
public int getSizeInventory() {
return 18;
}
@Override
public boolean isItemValidForSlot(int slot, ItemStack stack) {
ItemStack filter = getFilterItem();
if (!InvTools.isItemEqual(stack, filter))
return false;
if (!RailcraftConfig.chestAllowLiquids())
return getStackInSlot(slot) == null || !FluidItemHelper.isContainer(stack);
return true;
}
@Override
public boolean canPassItemRequests() {
return true;
}
@Override
public boolean canAcceptPushedItem(EntityMinecart requester, ItemStack stack) {
return true;
}
@Override
public boolean canProvidePulledItem(EntityMinecart requester, ItemStack stack) {
return true;
}
}