/* * 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.blocks.machine.gamma; import cofh.api.energy.IEnergyProvider; import mods.railcraft.api.carts.CartTools; import mods.railcraft.common.blocks.machine.IEnumMachine; import mods.railcraft.common.carts.EntityCartRF; import mods.railcraft.common.gui.EnumGui; import mods.railcraft.common.gui.GuiHandler; import mods.railcraft.common.plugins.rf.RedstoneFluxPlugin; import mods.railcraft.common.util.misc.Game; import mods.railcraft.common.util.network.IGuiReturnHandler; import net.minecraft.entity.item.EntityMinecart; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; public class TileRFUnloader extends TileRFLoaderBase implements IEnergyProvider, IGuiReturnHandler { private boolean waitTillEmpty = true; private static final int AMOUNT_TO_PUSH_TO_TILES = 2000; @Override public IEnumMachine getMachineType() { return EnumMachineGamma.RF_UNLOADER; } @Override public boolean openGui(EntityPlayer player) { GuiHandler.openGui(EnumGui.UNLOADER_RF, player, worldObj, xCoord, yCoord, zCoord); return true; } @Override public void updateEntity() { super.updateEntity(); if (Game.isNotHost(worldObj)) return; RedstoneFluxPlugin.pushToTiles(this, tileCache, AMOUNT_TO_PUSH_TO_TILES); } @Override protected boolean processCart() { boolean transferred = false; EntityMinecart cart = CartTools.getMinecartOnSide(worldObj, xCoord, yCoord, zCoord, 0.1f, direction); if (cart != currentCart) { setPowered(false); currentCart = cart; cartWasSent(); } if (cart == null) return false; if (!canHandleCart(cart)) { sendCart(cart); return false; } if (isPaused()) return false; EntityCartRF rfCart = (EntityCartRF) cart; if (amountRF < getMaxRF() && rfCart.getRF() > 0) { int request = TRANSFER_RATE; int room = getMaxRF() - getRF(); if (room < request) { request = room; } double extracted = rfCart.removeRF(request); amountRF += extracted; transferred = extracted > 0; } if (!transferred && !isPowered() && shouldSendCart(cart)) sendCart(cart); return transferred; } @Override protected boolean shouldSendCart(EntityMinecart cart) { if (!(cart instanceof EntityCartRF)) return true; EntityCartRF rfCart = (EntityCartRF) cart; if (!waitTillEmpty) return true; else if (rfCart.getRF() <= 0) return true; return false; } @Override public void writeToNBT(NBTTagCompound nbttagcompound) { super.writeToNBT(nbttagcompound); nbttagcompound.setBoolean("WaitTillEmpty", waitTillEmpty()); } @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); setWaitTillEmpty(nbttagcompound.getBoolean("WaitTillEmpty")); } @Override public void writePacketData(DataOutputStream data) throws IOException { super.writePacketData(data); data.writeBoolean(waitTillEmpty); } @Override public void readPacketData(DataInputStream data) throws IOException { super.readPacketData(data); waitTillEmpty = data.readBoolean(); } @Override public void writeGuiData(DataOutputStream data) throws IOException { data.writeBoolean(waitTillEmpty); } @Override public void readGuiData(DataInputStream data, EntityPlayer sender) throws IOException { waitTillEmpty = data.readBoolean(); } public boolean waitTillEmpty() { return waitTillEmpty; } public void setWaitTillEmpty(boolean wait) { waitTillEmpty = wait; } @Override public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) { return removeRF(maxExtract, simulate); } @Override public int getEnergyStored(ForgeDirection from) { return getRF(); } @Override public int getMaxEnergyStored(ForgeDirection from) { return getMaxRF(); } @Override public boolean canConnectEnergy(ForgeDirection from) { return true; } }