package ihl.collector; import java.util.Iterator; import java.util.List; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.util.ForgeDirection; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import ic2.api.energy.event.EnergyTileLoadEvent; import ic2.api.energy.event.EnergyTileUnloadEvent; import ic2.api.energy.tile.IEnergySink; import ic2.api.item.ElectricItem; import ic2.api.network.INetworkClientTileEntityEventListener; import ic2.core.ContainerBase; import ic2.core.IC2; import ic2.core.IHasGui; import ic2.core.block.TileEntityInventory; import ic2.core.block.invslot.InvSlot; import ic2.core.block.invslot.InvSlot.Access; import ihl.IHLMod; import ihl.utils.IHLInvSlotDischarge; public class ChargerEjectorTileEntity extends TileEntityInventory implements IEnergySink, IHasGui, INetworkClientTileEntityEventListener { private int tier; public int maxStorage=10000000; private double energy=0D; public final IHLInvSlotDischarge dischargeSlot; public final InvSlotMultiCharge chargeSlot; public boolean addedToEnergyNet = false; public int[] chargeSlotStatus = new int[9]; public int[] prevChargeSlotStatus = new int[9]; public ItemStack chargeItemStack0; public ItemStack chargeItemStack1; public ItemStack chargeItemStack2; public ItemStack chargeItemStack3; public ItemStack chargeItemStack4; public ItemStack chargeItemStack5; public ItemStack chargeItemStack6; public ItemStack chargeItemStack7; public ItemStack chargeItemStack8; private int slotNumNet=0; public boolean isGuiScreenOpened=false; public boolean autoEject=true; public boolean firstTickUpdate=true; public ChargerEjectorTileEntity() { super(); this.tier=4; this.dischargeSlot = new IHLInvSlotDischarge(this, 0, Access.IO, this.tier, InvSlot.InvSide.BOTTOM); this.chargeSlot = new InvSlotMultiCharge(this, 1, this.tier,9); } @Override public ItemStack getWrenchDrop(EntityPlayer entityPlayer) { if(this.dischargeSlot.get()!=null)this.worldObj.spawnEntityInWorld(new EntityItem(this.worldObj, this.xCoord, this.yCoord+1, this.zCoord, this.dischargeSlot.get())); for(int i=0;i getNetworkedFields() { List fields = super.getNetworkedFields(); for(int i=0;i0) { this.chargeSlotStatus[i]=1; } else { this.chargeSlotStatus[i]=2; } } } } @Override public void updateEntityServer() { if(this.firstTickUpdate && this.isGuiScreenOpened) { IC2.network.get().updateTileEntityField(this, "autoEject"); this.firstTickUpdate=false; } if(this.energy < 1.0D && this.getActive()) { this.setActive(false); } else if(this.energy >= 1.0D && !this.getActive()) { this.setActive(true); } updateChargerSlotStatus(); { List eItemsList = this.getEItemsList(); if(eItemsList!=null && eItemsList.size()>0) { Iterator ei = eItemsList.iterator(); while(ei.hasNext()) { EntityItem entity=(EntityItem) ei.next(); if(!entity.isDead && entity.getEntityItem()!=null && entity.getEntityItem().stackSize>0) { if(this.chargeSlot.addItemStackToFirstEmptyStack(entity.getEntityItem())) { entity.setDead(); } } else { entity.setDead(); } } } EntityPlayer player = this.worldObj.getClosestPlayer(this.xCoord+0.5D, this.yCoord+0.5D, this.zCoord+0.5D, 1.1D); if(player!=null && player instanceof EntityPlayerMP) { for(int i=0;i=0 && player.inventory.addItemStackToInventory(this.chargeSlot.get(i))) { this.chargeSlot.put(i, null); } } } } if(this.slotNumNet= 1.0D) { for(int i=0;i 1.0D) { amount = this.dischargeSlot.discharge(this.getDemandedEnergy(), false); this.energy += amount; } } } @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); try { this.energy = nbttagcompound.getDouble("energy"); } catch (Exception var3) { this.energy = nbttagcompound.getInteger("energy"); if (this.maxStorage > Integer.MAX_VALUE) { this.energy *= 10.0D; } } this.autoEject=nbttagcompound.getBoolean("autoeject"); } @Override public void writeToNBT(NBTTagCompound nbttagcompound) { super.writeToNBT(nbttagcompound); nbttagcompound.setDouble("energy", this.energy); nbttagcompound.setBoolean("autoeject", this.autoEject); } @Override public boolean acceptsEnergyFrom(TileEntity emitter, ForgeDirection direction) { return direction==ForgeDirection.DOWN; } @Override @SideOnly(Side.CLIENT) public GuiScreen getGui(EntityPlayer arg0, boolean arg1) { return new ChargerEjectorGui(new ChargerEjectorContainer(arg0, this)); } @Override public ContainerBase getGuiContainer(EntityPlayer arg0) { return new ChargerEjectorContainer(arg0, this); } @Override public void onGuiClosed(EntityPlayer arg0) { this.isGuiScreenOpened=false; } @Override public String getInventoryName() { return "charger_ejector"; } public int getStored() { return Math.round((float)this.energy); } public void setStored(double value) { this.energy=value; } public boolean getGui(EntityPlayer player) { this.isGuiScreenOpened = this instanceof IHasGui ? (IC2.platform.isSimulating() ? IC2.platform.launchGui(player, this) : true) : false; return this.isGuiScreenOpened; } private ItemStack getChargeISByNum(int num) { switch(num) { case 0: return this.chargeItemStack0; case 1: return this.chargeItemStack1; case 2: return this.chargeItemStack2; case 3: return this.chargeItemStack3; case 4: return this.chargeItemStack4; case 5: return this.chargeItemStack5; case 6: return this.chargeItemStack6; case 7: return this.chargeItemStack7; case 8: return this.chargeItemStack8; default: return this.chargeItemStack0; } } private void setChargeISByNum(int num, ItemStack stack) { switch(num) { case 0: this.chargeItemStack0=stack; break; case 1: this.chargeItemStack1=stack; break; case 2: this.chargeItemStack2=stack; break; case 3: this.chargeItemStack3=stack; break; case 4: this.chargeItemStack4=stack; break; case 5: this.chargeItemStack5=stack; break; case 6: this.chargeItemStack6=stack; break; case 7: this.chargeItemStack7=stack; break; case 8: this.chargeItemStack8=stack; break; default: this.chargeItemStack0=stack; } } @SuppressWarnings("unchecked") protected List getEItemsList() { double range = 0.2D; AxisAlignedBB searchArea = AxisAlignedBB.getBoundingBox(this.xCoord-range,this.yCoord,this.zCoord-range,this.xCoord+1.0D+range,this.yCoord+1.0D+range,this.zCoord+1.0D+range); List eItemsList = this.worldObj.getEntitiesWithinAABB(EntityItem.class, searchArea); return eItemsList; } //1.7.10 API @Override public double getDemandedEnergy() { return this.maxStorage - this.energy; } @Override public int getSinkTier() { return this.tier; } @Override public double injectEnergy(ForgeDirection directionFrom, double amount, double voltage) { if (this.energy >= this.maxStorage) { return amount; } else { this.energy += amount; return 0.0D; } } @Override public void onNetworkEvent(EntityPlayer player, int event) { switch(event) { case 0: if(!this.autoEject) { this.autoEject=true; IC2.network.get().updateTileEntityField(this, "autoEject"); } break; case 1: if(this.autoEject) { this.autoEject=false; IC2.network.get().updateTileEntityField(this, "autoEject"); } break; case 2: callCollectors(); break; case 3: eraseMemory(); break; default: break; } } @SuppressWarnings("unchecked") private void callCollectors() { double range = 64D; AxisAlignedBB searchArea = AxisAlignedBB.getBoundingBox(this.xCoord-range,this.yCoord,this.zCoord-range,this.xCoord+1.0D+range,this.yCoord+1.0D+range,this.zCoord+1.0D+range); List eList = this.worldObj.getEntitiesWithinAABB(CollectorEntity.class, searchArea); if(!eList.isEmpty()) { Iterator eListIterator=eList.iterator(); while(eListIterator.hasNext()) { CollectorEntity fbbe = eListIterator.next(); fbbe.currentTask=CollectorEntity.Tasks.RECHARGE; fbbe.charger=this; } } } private void eraseMemory() { for(int i=0;i