/* * 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.ICartContentsTextureProvider; import mods.railcraft.common.gui.EnumGui; import mods.railcraft.common.gui.GuiHandler; import mods.railcraft.common.util.misc.Game; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.IIcon; import net.minecraft.world.World; import java.util.ArrayList; import java.util.List; public final class EntityCartRF extends CartBase implements ICartContentsTextureProvider { private static final int DATA_ID_RF = 25; private static final int RF_CAP = 2000000; public EntityCartRF(World world) { super(world); } public EntityCartRF(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 protected void entityInit() { super.entityInit(); dataWatcher.addObject(DATA_ID_RF, 0); } public int addRF(int amount) { if (amount <= 0) return 0; if (getRF() >= RF_CAP) return 0; if (RF_CAP - getRF() >= amount) { setRF(getRF() + amount); return amount; } int used = RF_CAP - getRF(); setRF(RF_CAP); return used; } public int removeRF(int request) { if (request <= 0) return 0; if (getRF() >= request) { setRF(getRF() - request); return request; } int ret = getRF(); setRF(0); return ret; } public void setRF(int amount) { dataWatcher.updateObject(DATA_ID_RF, amount); } public int getRF() { return dataWatcher.getWatchableObjectInt(DATA_ID_RF); } public int getMaxRF() { return RF_CAP; } @Override public List<ItemStack> getItemsDropped() { List<ItemStack> items = new ArrayList<ItemStack>(); items.add(getCartItem()); return items; } @Override public void onUpdate() { super.onUpdate(); if (Game.isNotHost(worldObj)) return; if (getRF() > RF_CAP) setRF(RF_CAP); } @Override public boolean doInteract(EntityPlayer player) { if (Game.isHost(worldObj)) GuiHandler.openGui(EnumGui.CART_RF, player, worldObj, this); return true; } @Override public boolean canBeRidden() { return false; } @Override public final float getMaxCartSpeedOnRail() { int numLocomotives = Train.getTrain(this).getNumRunningLocomotives(); if (numLocomotives == 0) return super.getMaxCartSpeedOnRail(); return Math.min(1.2F, 0.08F + (numLocomotives - 1) * 0.075F); } @Override protected void readEntityFromNBT(NBTTagCompound nbt) { super.readEntityFromNBT(nbt); setRF(nbt.getInteger("rf")); } @Override protected void writeEntityToNBT(NBTTagCompound nbt) { super.writeEntityToNBT(nbt); nbt.setInteger("rf", getRF()); } // @Override // public Block func_145820_n() { // return Blocks.redstone_block; // } @Override public double getDrag() { return CartConstants.STANDARD_DRAG; } @Override public IIcon getBlockTextureOnSide(int side) { return null; } }