From 05c78126859231a68e199dc34613689bd0978e2f Mon Sep 17 00:00:00 2001 From: Foghrye4 Date: Mon, 11 Apr 2016 19:44:54 +0300 Subject: Initial commit --- ihl/collector/ChargerEjectorTileEntity.java | 521 ++++++++++++++++++++++++++++ 1 file changed, 521 insertions(+) create mode 100644 ihl/collector/ChargerEjectorTileEntity.java (limited to 'ihl/collector/ChargerEjectorTileEntity.java') diff --git a/ihl/collector/ChargerEjectorTileEntity.java b/ihl/collector/ChargerEjectorTileEntity.java new file mode 100644 index 0000000..fdb18ed --- /dev/null +++ b/ihl/collector/ChargerEjectorTileEntity.java @@ -0,0 +1,521 @@ +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 ic2.core.network.NetworkManager; +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; + } + } + + 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; + } + } + + 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