hassansyyid

PoweredTileEntity

Jun 24th, 2015
357
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.64 KB | None | 0 0
  1. package com.arisux.avp.entities.tile;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Iterator;
  5. import java.util.List;
  6. import java.util.ListIterator;
  7. import java.util.Set;
  8.  
  9. import net.minecraft.nbt.NBTTagCompound;
  10. import net.minecraft.network.NetworkManager;
  11. import net.minecraft.network.Packet;
  12. import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
  13. import net.minecraft.tileentity.TileEntity;
  14. import net.minecraft.util.EnumFacing;
  15.  
  16. import com.arisux.avp.interfaces.IPowerDevice;
  17.  
  18. public abstract class PoweredTileEntity extends TileEntity implements IPowerDevice
  19. {
  20.     public double voltage, amps;
  21.     public boolean circuitConnectedToPower;
  22.     public ArrayList<PoweredTileEntity> arrayAdded = new ArrayList<PoweredTileEntity>();
  23.     @Override
  24.     public void updateEntity()
  25.     {
  26.         super.updateEntity();
  27.        
  28.         if (this.isVoltageInOperatingRange())
  29.         {
  30.             this.onVoltageTick();
  31.         }
  32.        
  33.         if (this.voltage > this.getMaxOperatingVoltage())
  34.         {
  35.             this.onOverloadTick();
  36.         }
  37.        
  38.         if (this.voltage <= this.getMinOperatingVoltage())
  39.         {
  40.             this.onUnderloadTick();
  41.         }
  42.  
  43.         if (this.getPowerSourceTile() == null)
  44.         {
  45.             this.voltage = 0;
  46.         }
  47.        
  48.         if (this.canOutputPower())
  49.         {
  50.             this.outputPower();
  51.         }
  52.        
  53.         if(!this.isConnectedToPower(this))
  54.         {
  55.             this.circuitConnectedToPower = false;
  56.             this.voltage = 0;
  57.         }
  58.     }
  59.    
  60.     public boolean isConnectedToPower(PoweredTileEntity e){
  61.         try{
  62.         List<PoweredTileEntity> list = new ArrayList<PoweredTileEntity>();
  63.         list.add(e);
  64.         list.add(e.getTop());
  65.         list.add(e.getBack());
  66.         list.add(e.getBottom());
  67.         list.add(e.getLeft());
  68.         list.add(e.getRight());
  69.         list.add(e.getFront());
  70.  
  71.         for(PoweredTileEntity te : list){
  72.             if(arrayAdded.contains(te)){
  73.             if(e instanceof TileEntitySolarPanel || e instanceof TileEntityRepulsionGenerator){
  74.                 arrayAdded.add(te);
  75.                 return true;
  76.             }
  77.             else{
  78.                 arrayAdded.add(te.getTop());
  79.                 if(isConnectedToPower(te.getTop())){
  80.                     return isConnectedToPower(te.getTop());
  81.                 }
  82.                 arrayAdded.add(te.getBack());
  83.                 if(isConnectedToPower(te.getBack())){
  84.                     return isConnectedToPower(te.getBack());
  85.                 }
  86.                 arrayAdded.add(te.getBottom());
  87.                 if(isConnectedToPower(te.getBottom())){
  88.                     return isConnectedToPower(te.getBottom());
  89.                 }
  90.                 arrayAdded.add(te.getLeft());
  91.                 if(isConnectedToPower(te.getLeft())){
  92.                     return isConnectedToPower(te.getLeft());
  93.                 }
  94.                 arrayAdded.add(te.getRight());
  95.                 if(isConnectedToPower(te.getRight())){
  96.                     return isConnectedToPower(te.getRight());
  97.                 }
  98.                 arrayAdded.add(te.getFront());
  99.                 if(isConnectedToPower(te.getFront())){
  100.                     return isConnectedToPower(te.getRight());
  101.                 }
  102.  
  103.                 else if(!isConnectedToPower(te.getFront()) && !isConnectedToPower(te.getRight()) && !isConnectedToPower(te.getLeft()) && !isConnectedToPower(te.getBottom()) && !isConnectedToPower(te.getBack()) && !isConnectedToPower(te.getTop())){
  104.                     return false;
  105.                 }
  106.             }
  107.             }
  108.         }
  109.         }catch(NullPointerException exception){
  110.             //Nothin
  111.         }
  112.         return false;
  113.     }
  114.        
  115.         //while(ite.hasNext()){
  116.         //  PoweredTileEntity e = ite.next();
  117.         //  if (e instanceof TileEntitySolarPanel || e instanceof TileEntityRepulsionGenerator){
  118.         //      arrayAdded.add(e);
  119.         //      circuitConnectedToPower = true;
  120.         //      return true;
  121.         //  }
  122.         //  else if (e instanceof TileEntityPowerline || e instanceof TileEntityTransformer || e instanceof TileEntityNegativeTransformer || e instanceof TileEntityCryostasisTube){
  123.         //      if(arrayAdded.contains(e)){
  124.         //          break;
  125.         //      }
  126.         //      else{
  127.         //          ite.add(e.getTop());
  128.         //          ite.add(e.getBack());
  129.         //          ite.add(e.getBottom());
  130.         //          ite.add(e.getLeft());
  131.         //          ite.add(e.getRight());
  132.         //          ite.add(e.getFront());
  133.         //          arrayAdded.add(e);
  134.         //          ite = list.listIterator();
  135.         ///     }
  136.         /// }
  137.         /// else if(e == null){
  138.         //      circuitConnectedToPower = false;
  139.             //  return false;
  140.         //  }
  141.         //}
  142.         //  return false;
  143.     //}
  144.     public void outputPower()
  145.     {
  146.         double voltage = this.getVoltageAfterApplyingResistance();
  147.        
  148.         this.outputPowerToTile(this.getTop(), voltage);
  149.         this.outputPowerToTile(this.getBottom(), voltage);
  150.         this.outputPowerToTile(this.getFront(), voltage);
  151.         this.outputPowerToTile(this.getBack(), voltage);
  152.         this.outputPowerToTile(this.getLeft(), voltage);
  153.         this.outputPowerToTile(this.getRight(), voltage);
  154.     }
  155.    
  156.     public void outputPowerToTile(PoweredTileEntity tile, double voltage)
  157.     {
  158.         if (tile != null && tile.getPowerSourceTile() == this)
  159.         {
  160.             tile.setVoltage(voltage);
  161.         }
  162.         else if(tile != null && tile instanceof TileEntityPowerline && tile.getVoltage() == 0){
  163.             tile.setVoltage(this.getVoltage());
  164.         }
  165.     }
  166.  
  167.     @Override
  168.     public abstract void onVoltageTick();
  169.  
  170.     @Override
  171.     public abstract void onOverloadTick();
  172.  
  173.     @Override
  174.     public abstract void onUnderloadTick();
  175.  
  176.     @Override
  177.     public Packet getDescriptionPacket()
  178.     {
  179.         NBTTagCompound nbtTag = new NBTTagCompound();
  180.         this.writeToNBT(nbtTag);
  181.         return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 1, nbtTag);
  182.     }
  183.  
  184.     @Override
  185.     public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet)
  186.     {
  187.         readFromNBT(packet.func_148857_g());
  188.     }
  189.  
  190.     @Override
  191.     public void writeToNBT(NBTTagCompound tag)
  192.     {
  193.         super.writeToNBT(tag);
  194.  
  195.         tag.setDouble("Volts", this.voltage);
  196.         tag.setDouble("Amps", this.amps);
  197.     }
  198.  
  199.     @Override
  200.     public void readFromNBT(NBTTagCompound tag)
  201.     {
  202.         super.readFromNBT(tag);
  203.  
  204.         this.voltage = tag.getDouble("Volts");
  205.         this.amps = tag.getDouble("Amps");
  206.     }
  207.  
  208.     public void setVoltage(double voltageIn)
  209.     {
  210.         this.voltage = voltageIn;
  211.     }
  212.  
  213.     public double getVoltageAfterApplyingResistance()
  214.     {
  215.         return this.getVoltage() - this.getResistance() <= 0 ? 0 : this.getVoltage() - this.getResistance();
  216.     }
  217.  
  218.     public void setAmps(double ampsIn)
  219.     {
  220.         this.amps = ampsIn;
  221.     }
  222.  
  223.     public PoweredTileEntity getPoweredTileAt(int x, int y, int z)
  224.     {
  225.         return this.worldObj.getTileEntity(x, y, z) instanceof PoweredTileEntity ? (PoweredTileEntity) this.worldObj.getTileEntity(x, y, z) : null;
  226.     }
  227.  
  228.     public PoweredTileEntity getPowerSourceTile()
  229.     {
  230.         if (getTop() != null && getTop().isOutputVoltageHigherThan(this) && getTop().canOutputPower())
  231.         {
  232.             return getTop();
  233.         }
  234.         if (getBottom() != null && getBottom().isOutputVoltageHigherThan(this) && getBottom().canOutputPower())
  235.         {
  236.             return getBottom();
  237.         }
  238.         if (getFront() != null && getFront().isOutputVoltageHigherThan(this) && getFront().canOutputPower())
  239.         {
  240.             return getFront();
  241.         }
  242.         if (getBack() != null && getBack().isOutputVoltageHigherThan(this) && getBack().canOutputPower())
  243.         {
  244.             return getBack();
  245.         }
  246.         if (getLeft() != null && getLeft().isOutputVoltageHigherThan(this) && getLeft().canOutputPower())
  247.         {
  248.             return getLeft();
  249.         }
  250.         if (getRight() != null && getRight().isOutputVoltageHigherThan(this) && getRight().canOutputPower())
  251.         {
  252.             return getRight();
  253.         }
  254.         if (getTop() instanceof TileEntityTransformer)
  255.         {
  256.             TileEntityTransformer t = (TileEntityTransformer)getTop();
  257.             if(!t.isOriginalPowerSourceAttached()){
  258.                 return null;
  259.             }
  260.             return (PoweredTileEntity) t.getPowerSource();
  261.         }
  262.         if (getBottom() instanceof TileEntityTransformer)
  263.         {
  264.             TileEntityTransformer t = (TileEntityTransformer)getBottom();
  265.             if(!t.isOriginalPowerSourceAttached()){
  266.                 return null;
  267.             }
  268.             return (PoweredTileEntity) t.getPowerSource();
  269.         }
  270.         if (getFront() instanceof TileEntityTransformer)
  271.         {
  272.             TileEntityTransformer t = (TileEntityTransformer)getFront();
  273.             if(!t.isOriginalPowerSourceAttached()){
  274.                 return null;
  275.             }
  276.             return (PoweredTileEntity) t.getPowerSource();
  277.         }
  278.         if (getBack() instanceof TileEntityTransformer)
  279.         {
  280.             TileEntityTransformer t = (TileEntityTransformer)getBack();
  281.             if(!t.isOriginalPowerSourceAttached()){
  282.                 return null;
  283.             }
  284.             return (PoweredTileEntity) t.getPowerSource();
  285.         }
  286.         if (getLeft() instanceof TileEntityTransformer)
  287.         {
  288.             TileEntityTransformer t = (TileEntityTransformer)getLeft();
  289.             if(!t.isOriginalPowerSourceAttached()){
  290.                 return null;
  291.             }
  292.             return (PoweredTileEntity) t.getPowerSource();
  293.         }
  294.         if (getRight() instanceof TileEntityTransformer)
  295.         {
  296.             TileEntityTransformer t = (TileEntityTransformer)getRight();
  297.             if(!t.isOriginalPowerSourceAttached()){
  298.                 return null;
  299.             }
  300.             return (PoweredTileEntity) t.getPowerSource();
  301.         }
  302.         if (getTop() instanceof TileEntityNegativeTransformer)
  303.         {
  304.             TileEntityNegativeTransformer t = (TileEntityNegativeTransformer)getTop();
  305.             if(!t.isOriginalPowerSourceAttached()){
  306.                 return null;
  307.             }
  308.             return (PoweredTileEntity) t.getPowerSource();
  309.         }
  310.         if (getBottom() instanceof TileEntityNegativeTransformer)
  311.         {
  312.             TileEntityNegativeTransformer t = (TileEntityNegativeTransformer)getBottom();
  313.             if(!t.isOriginalPowerSourceAttached()){
  314.                 return null;
  315.             }
  316.             return (PoweredTileEntity) t.getPowerSource();
  317.         }
  318.         if (getFront() instanceof TileEntityNegativeTransformer)
  319.         {
  320.             TileEntityNegativeTransformer t = (TileEntityNegativeTransformer)getFront();
  321.             if(!t.isOriginalPowerSourceAttached()){
  322.                 return null;
  323.             }
  324.             return (PoweredTileEntity) t.getPowerSource();
  325.         }
  326.         if (getBack() instanceof TileEntityNegativeTransformer)
  327.         {
  328.             TileEntityNegativeTransformer t = (TileEntityNegativeTransformer)getBack();
  329.             if(!t.isOriginalPowerSourceAttached()){
  330.                 return null;
  331.             }
  332.             return (PoweredTileEntity) t.getPowerSource();
  333.         }
  334.         if (getLeft() instanceof TileEntityNegativeTransformer)
  335.         {
  336.             TileEntityNegativeTransformer t = (TileEntityNegativeTransformer)getLeft();
  337.             if(!t.isOriginalPowerSourceAttached()){
  338.                 return null;
  339.             }
  340.             return (PoweredTileEntity) t.getPowerSource();
  341.         }
  342.         if (getRight() instanceof TileEntityNegativeTransformer)
  343.         {
  344.             TileEntityNegativeTransformer t = (TileEntityNegativeTransformer)getRight();
  345.             if(!t.isOriginalPowerSourceAttached()){
  346.                 return null;
  347.             }
  348.             return (PoweredTileEntity) t.getPowerSource();
  349.         }
  350.         return null;
  351.     }
  352.    
  353.     public boolean isVoltageInOperatingRange()
  354.     {
  355.         return this.getVoltage() < this.getMaxOperatingVoltage() && this.getVoltage() > this.getMinOperatingVoltage();
  356.     }
  357.  
  358.     public boolean isPowered()
  359.     {
  360.         return this.getVoltage() != 0;
  361.     }
  362.  
  363.     public boolean isOutputVoltageLessThan(PoweredTileEntity device)
  364.     {
  365.         return this.getVoltage() < device.getVoltage();
  366.     }
  367.  
  368.     public boolean isOutputVoltageHigherThan(PoweredTileEntity device)
  369.     {
  370.         return this.getVoltage() > device.getVoltage();
  371.     }
  372.  
  373.     public PoweredTileEntity getTop()
  374.     {
  375.         return this.getPoweredTileAt(this.xCoord, this.yCoord + 1, this.zCoord);
  376.     }
  377.  
  378.     public PoweredTileEntity getBottom()
  379.     {
  380.         return this.getPoweredTileAt(this.xCoord, this.yCoord - 1, this.zCoord);
  381.     }
  382.  
  383.     public PoweredTileEntity getFront()
  384.     {
  385.         return this.getPoweredTileAt(this.xCoord, this.yCoord, this.zCoord - 1);
  386.     }
  387.  
  388.     public PoweredTileEntity getBack()
  389.     {
  390.         return this.getPoweredTileAt(this.xCoord, this.yCoord, this.zCoord + 1);
  391.     }
  392.  
  393.     public PoweredTileEntity getRight()
  394.     {
  395.         return this.getPoweredTileAt(this.xCoord - 1, this.yCoord, this.zCoord);
  396.     }
  397.  
  398.     public PoweredTileEntity getLeft()
  399.     {
  400.         return this.getPoweredTileAt(this.xCoord + 1, this.yCoord, this.zCoord);
  401.     }
  402.  
  403.     @Override
  404.     public double getVoltage()
  405.     {
  406.         return this.voltage;
  407.     }
  408.  
  409.     @Override
  410.     public double getMaxOperatingVoltage()
  411.     {
  412.         return 140;
  413.     }
  414.  
  415.     @Override
  416.     public double getMinOperatingVoltage()
  417.     {
  418.         return 110;
  419.     }
  420.  
  421.     @Override
  422.     public double getAmperage()
  423.     {
  424.         return this.amps;
  425.     }
  426.  
  427.     @Override
  428.     public double getMaxOperatingAmps()
  429.     {
  430.         return 4;
  431.     }
  432.  
  433.     @Override
  434.     public double getMinOperatingAmps()
  435.     {
  436.         return 1;
  437.     }
  438.  
  439.     @Override
  440.     public double getResistance()
  441.     {
  442.         return 0.1;
  443.     }
  444.  
  445.     @Override
  446.     public boolean canOutputPower()
  447.     {
  448.         return false;
  449.     }
  450. }
Advertisement
Add Comment
Please, Sign In to add comment