diff options
| author | Foghrye4 <foghrye4@gmail.com> | 2016-04-11 19:44:54 +0300 |
|---|---|---|
| committer | Foghrye4 <foghrye4@gmail.com> | 2016-04-11 19:44:54 +0300 |
| commit | 05c78126859231a68e199dc34613689bd0978e2f (patch) | |
| tree | 050bea104a18c72905095d29f31bec2935a27a24 /ihl/flexible_cable/RectifierTransformerUnitTileEntity.java | |
Initial commit
Diffstat (limited to 'ihl/flexible_cable/RectifierTransformerUnitTileEntity.java')
| -rw-r--r-- | ihl/flexible_cable/RectifierTransformerUnitTileEntity.java | 333 |
1 files changed, 333 insertions, 0 deletions
diff --git a/ihl/flexible_cable/RectifierTransformerUnitTileEntity.java b/ihl/flexible_cable/RectifierTransformerUnitTileEntity.java new file mode 100644 index 0000000..1d13d0a --- /dev/null +++ b/ihl/flexible_cable/RectifierTransformerUnitTileEntity.java @@ -0,0 +1,333 @@ +package ihl.flexible_cable;
+
+import java.util.Iterator;
+import java.util.List;
+
+import ic2.api.energy.event.EnergyTileLoadEvent;
+import ic2.api.energy.event.EnergyTileUnloadEvent;
+import ic2.api.energy.tile.IEnergySink;
+import ic2.api.network.INetworkClientTileEntityEventListener;
+import ic2.core.IC2;
+import ic2.core.block.TileEntityBlock;
+import ic2.core.block.TileEntityInventory;
+import ihl.IHLMod;
+import ihl.flexible_cable.IHLGrid;
+import ihl.flexible_cable.NodeEntity;
+import ihl.interfaces.IEnergyNetNode;
+import ihl.interfaces.IMultiPowerCableHolder;
+import ihl.utils.IHLUtils;
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.common.util.ForgeDirection;
+
+public class RectifierTransformerUnitTileEntity extends TileEntityInventory implements INetworkClientTileEntityEventListener, IEnergySink, IMultiPowerCableHolder {
+
+ public boolean addedToEnergyNet=false;
+ public SubRTUEnergyNetNode[] energyNetNodes = new SubRTUEnergyNetNode[2];
+ public float mode = 1f;
+ public static float modeMultiplier = 2f;
+ public static float modeMax = 128f;
+ public static float modeMin = 1/modeMax;
+ public AxisAlignedBB aabb1;// Input zone "0"
+ public AxisAlignedBB aabb2;// Output zone "1"
+ public AxisAlignedBB aabb1_1;
+ public AxisAlignedBB aabb2_1;
+ public boolean checkCables=true;
+
+ public RectifierTransformerUnitTileEntity()
+ {
+ super();
+ for(short i=0;i<2;i++)
+ {
+ energyNetNodes[i] = new SubRTUEnergyNetNode(this, i);
+ }
+ aabb1 = AxisAlignedBB.getBoundingBox(this.xCoord, this.yCoord+1d, this.zCoord, this.xCoord+0.5d, this.yCoord+1.1d, this.zCoord+1d);
+ aabb2 = AxisAlignedBB.getBoundingBox(this.xCoord+0.5d, this.yCoord+1d, this.zCoord, this.xCoord+1d, this.yCoord+1.1d, this.zCoord+1d);
+ aabb1_1 = AxisAlignedBB.getBoundingBox(this.xCoord+0.2d, this.yCoord+1.4d, this.zCoord+0.45d, this.xCoord+0.3d, this.yCoord+1.5d, this.zCoord+0.55d);
+ aabb2_1 = AxisAlignedBB.getBoundingBox(this.xCoord+0.7d, this.yCoord+1.4d, this.zCoord+0.45d, this.xCoord+0.8d, this.yCoord+1.5d, this.zCoord+0.55d);
+ }
+
+ @Override
+ public void onLoaded()
+ {
+ super.onLoaded();
+ for(short i=0;i<2;i++)
+ {
+ energyNetNodes[i].onLoaded();
+ }
+ if (IC2.platform.isSimulating()&&!this.addedToEnergyNet)
+ {
+ MinecraftForge.EVENT_BUS.post(new EnergyTileLoadEvent(this));
+ this.addedToEnergyNet = true;
+ }
+ this.setupInteractingSpots(this.getFacing());
+ }
+
+ @Override
+ public void onUnloaded()
+ {
+ if (IC2.platform.isSimulating() && this.addedToEnergyNet)
+ {
+ MinecraftForge.EVENT_BUS.post(new EnergyTileUnloadEvent(this));
+ this.addedToEnergyNet = false;
+ }
+ super.onUnloaded();
+ }
+
+ @Override
+ public List<String> getNetworkedFields()
+ {
+ List<String> fields = super.getNetworkedFields();
+ fields.add("mode");
+ return fields;
+ }
+
+ @Override
+ public void setFacing(short facing1)
+ {
+ this.removeAttachedChains();
+ short facing2 = (short) Math.max(facing1, 2);
+ super.setFacing(facing2);
+ this.setupInteractingSpots(facing2);
+ }
+
+ public void setupInteractingSpots(short facing2)
+ {
+ double yStart=this.yCoord+0.98d;
+ switch (facing2)
+ {
+ case 2:
+ aabb1 = AxisAlignedBB.getBoundingBox(this.xCoord, yStart, this.zCoord, this.xCoord+0.5d, this.yCoord+1.1d, this.zCoord+1d);
+ aabb2 = AxisAlignedBB.getBoundingBox(this.xCoord+0.5d, yStart, this.zCoord, this.xCoord+1d, this.yCoord+1.1d, this.zCoord+1d);
+ aabb1_1 = AxisAlignedBB.getBoundingBox(this.xCoord+0.2d, this.yCoord+1.4d, this.zCoord+0.45d, this.xCoord+0.3d, this.yCoord+1.5d, this.zCoord+0.55d);
+ aabb2_1 = AxisAlignedBB.getBoundingBox(this.xCoord+0.7d, this.yCoord+1.4d, this.zCoord+0.45d, this.xCoord+0.8d, this.yCoord+1.5d, this.zCoord+0.55d);
+ break;
+ case 5:
+ aabb1 = AxisAlignedBB.getBoundingBox(this.xCoord, yStart, this.zCoord, this.xCoord+1d, this.yCoord+1.1d, this.zCoord+0.5d);
+ aabb2 = AxisAlignedBB.getBoundingBox(this.xCoord, yStart, this.zCoord+0.5d, this.xCoord+1d, this.yCoord+1.1d, this.zCoord+1d);
+ aabb1_1 = AxisAlignedBB.getBoundingBox(this.xCoord+0.45d, this.yCoord+1.4d, this.zCoord+0.2d, this.xCoord+0.55d, this.yCoord+1.5d, this.zCoord+0.3d);
+ aabb2_1 = AxisAlignedBB.getBoundingBox(this.xCoord+0.45d, this.yCoord+1.4d, this.zCoord+0.7d, this.xCoord+0.55d, this.yCoord+1.5d, this.zCoord+0.8d);
+ break;
+ case 3:
+ aabb2 = AxisAlignedBB.getBoundingBox(this.xCoord, yStart, this.zCoord, this.xCoord+0.5d, this.yCoord+1.1d, this.zCoord+1d);
+ aabb1 = AxisAlignedBB.getBoundingBox(this.xCoord+0.5d, yStart, this.zCoord, this.xCoord+1d, this.yCoord+1.1d, this.zCoord+1d);
+ aabb2_1 = AxisAlignedBB.getBoundingBox(this.xCoord+0.2d, this.yCoord+1.4d, this.zCoord+0.45d, this.xCoord+0.3d, this.yCoord+1.5d, this.zCoord+0.55d);
+ aabb1_1 = AxisAlignedBB.getBoundingBox(this.xCoord+0.7d, this.yCoord+1.4d, this.zCoord+0.45d, this.xCoord+0.8d, this.yCoord+1.5d, this.zCoord+0.55d);
+ break;
+ case 4:
+ aabb2 = AxisAlignedBB.getBoundingBox(this.xCoord, yStart, this.zCoord, this.xCoord+1d, this.yCoord+1.1d, this.zCoord+0.5d);
+ aabb1 = AxisAlignedBB.getBoundingBox(this.xCoord, yStart, this.zCoord+0.5d, this.xCoord+1d, this.yCoord+1.1d, this.zCoord+1d);
+ aabb2_1 = AxisAlignedBB.getBoundingBox(this.xCoord+0.45d, this.yCoord+1.4d, this.zCoord+0.2d, this.xCoord+0.55d, this.yCoord+1.5d, this.zCoord+0.3d);
+ aabb1_1 = AxisAlignedBB.getBoundingBox(this.xCoord+0.45d, this.yCoord+1.4d, this.zCoord+0.7d, this.xCoord+0.55d, this.yCoord+1.5d, this.zCoord+0.8d);
+ break;
+ default:
+ aabb1 = AxisAlignedBB.getBoundingBox(this.xCoord, yStart, this.zCoord, this.xCoord+0.5d, this.yCoord+1.1d, this.zCoord+1d);
+ aabb2 = AxisAlignedBB.getBoundingBox(this.xCoord+0.5d, yStart, this.zCoord, this.xCoord+1d, this.yCoord+1.1d, this.zCoord+1d);
+ aabb1_1 = AxisAlignedBB.getBoundingBox(this.xCoord+0.2d, this.yCoord+1.4d, this.zCoord+0.45d, this.xCoord+0.3d, this.yCoord+1.5d, this.zCoord+0.55d);
+ aabb2_1 = AxisAlignedBB.getBoundingBox(this.xCoord+0.7d, this.yCoord+1.4d, this.zCoord+0.45d, this.xCoord+0.8d, this.yCoord+1.5d, this.zCoord+0.55d);
+ break;
+ }
+ }
+
+ @Override
+ public ItemStack getWrenchDrop(EntityPlayer player)
+ {
+ return IHLUtils.getThisModItemStack("rectifierTransformerUnit");
+ }
+ @Override
+ public boolean wrenchCanSetFacing(EntityPlayer entityPlayer, int side)
+ {
+ return this.getFacing()!=(short)side;
+ }
+
+
+ @Override
+ public void writeToNBT(NBTTagCompound nbt) {
+ super.writeToNBT(nbt);
+ NBTTagList energyNetNodeNBTList = new NBTTagList();
+ for(SubRTUEnergyNetNode node:this.energyNetNodes)
+ {
+ energyNetNodeNBTList.appendTag(node.writeToNBT());
+ }
+ nbt.setTag("energyNetNodes", energyNetNodeNBTList);
+ nbt.setFloat("mode",this.mode);
+ }
+
+ @Override
+ public void readFromNBT(NBTTagCompound nbt) {
+ super.readFromNBT(nbt);
+ NBTTagList energyNetNodeNBTList=nbt.getTagList("energyNetNodes", 10);
+ for(int i=0;i<2;i++)
+ {
+ this.energyNetNodes[i].readFromNBT(energyNetNodeNBTList.getCompoundTagAt(i));
+ }
+ this.mode=nbt.getFloat("mode");
+ this.mode=this.mode==0f?1f:this.mode;
+ }
+
+ @Override
+ public void onNetworkEvent(EntityPlayer player, int event)
+ {
+ switch(event)
+ {
+ case 0:
+ break;
+ }
+ }
+
+ public void switchModeUp()
+ {
+ if(this.mode<modeMax)
+ {
+ this.mode*=modeMultiplier;
+ if(this.energyNetNodes[1].getGridID()!=-1)
+ {
+ if(this.energyNetNodes[0].getGridID()!=-1)
+ {
+ this.energyNetNodes[1].getGrid().injectEnergy(0, this.energyNetNodes[0].getGrid().getSinkVoltage(this.energyNetNodes[0])*this.mode, this.energyNetNodes[1]);
+ }
+ else if(this.energyNetNodes[1].getGrid().energy>=1d)
+ {
+ this.energyNetNodes[1].getGrid().injectEnergy(0, 400d*this.mode, this.energyNetNodes[1]);
+ }
+ }
+ IC2.network.get().updateTileEntityField(this, "mode");
+ }
+ }
+
+ public void switchModeDown()
+ {
+ if(this.mode>modeMin)
+ {
+ this.mode/=modeMultiplier;;
+ if(this.energyNetNodes[1].getGridID()!=-1)
+ {
+ if(this.energyNetNodes[0].getGridID()!=-1)
+ {
+ this.energyNetNodes[1].getGrid().injectEnergy(0, this.energyNetNodes[0].getGrid().getSinkVoltage(this.energyNetNodes[0])*this.mode, this.energyNetNodes[1]);
+ }
+ else if(this.energyNetNodes[1].getGrid().energy>=1d)
+ {
+ this.energyNetNodes[1].getGrid().injectEnergy(0, 400d*this.mode, this.energyNetNodes[1]);
+ }
+ }
+ IC2.network.get().updateTileEntityField(this, "mode");
+ }
+ }
+
+ @Override
+ public void onNetworkUpdate(String field)
+ {
+ if (field.equals("facing") && this.prevFacing != this.getFacing())
+ {
+ this.setupInteractingSpots(this.getFacing());
+ }
+ super.onNetworkUpdate(field);
+ }
+
+
+ @Override
+ public void updateEntityServer()
+ {
+
+ }
+
+ @Override
+ public String getInventoryName()
+ {
+ return "RTU";
+ }
+
+ @Override
+ public boolean acceptsEnergyFrom(TileEntity emitter,ForgeDirection direction)
+ {
+ return !direction.equals(ForgeDirection.UP);
+ }
+
+ @Override
+ public double getDemandedEnergy()
+ {
+ if(this.energyNetNodes[1].getGridID()!=-1 && this.energyNetNodes[1].getGrid().energy<1D)
+ {
+ return Integer.MAX_VALUE;
+ }
+ else
+ {
+ return 0d;
+ }
+ }
+
+ @Override
+ public int getSinkTier()
+ {
+ return 4;
+ }
+
+ @Override
+ public double injectEnergy(ForgeDirection directionFrom, double amount, double voltage)
+ {
+ if(getDemandedEnergy()>0d)
+ {
+ this.energyNetNodes[1].getGrid().injectEnergy(amount, 400d*this.mode, this.energyNetNodes[1]);
+ return 0d;
+ }
+ return amount;
+ }
+
+ public boolean isCableRemoved(int chainUniqueID)
+ {
+ if(!checkCables)
+ {
+ return false;
+ }
+ for(SubRTUEnergyNetNode sen:energyNetNodes)
+ {
+ if(!sen.isCableRemoved(chainUniqueID))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public IEnergyNetNode getEnergyNetNode(short facing)
+ {
+ return this.energyNetNodes[facing];
+ }
+
+ @Override
+ public short getSide(EntityPlayer player)
+ {
+ if(IHLUtils.isPlayerLookingAt(player, aabb1))
+ {
+ return 0;
+ }
+ else if(IHLUtils.isPlayerLookingAt(player, aabb2))
+ {
+ return 1;
+ }
+ else
+ {
+ return -1;
+ }
+ }
+
+ @Override
+ public void removeAttachedChains()
+ {
+ for(short i=0;i<2;i++)
+ {
+ energyNetNodes[i].removeAttachedChains();
+ }
+
+ }
+
+
+}
|
