thecodewarrior

Untitled

Oct 13th, 2014
267
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.75 KB | None | 0 0
  1. package com.piercecorcoran.laserPower;
  2.  
  3. import net.minecraft.block.Block;
  4. import net.minecraft.nbt.NBTTagCompound;
  5. import net.minecraft.network.Packet;
  6. import net.minecraft.tileentity.TileEntity;
  7. import net.minecraft.util.AxisAlignedBB;
  8. import net.minecraft.world.World;
  9. import net.minecraftforge.common.util.ForgeDirection;
  10. import cofh.api.energy.EnergyStorage;
  11. import cofh.api.energy.IEnergyHandler;
  12. import cofh.api.energy.TileEnergyHandler;
  13. import cpw.mods.fml.relauncher.Side;
  14. import cpw.mods.fml.relauncher.SideOnly;
  15.  
  16. public class TileEntityMachineLaser extends TileEnergyHandler {
  17.    
  18.     public boolean isTransmitter;
  19.     public int maxRange = 100;
  20.     public ForgeDirection direction = null;
  21.     private boolean hasConnection;
  22.     public int length;
  23.    
  24.    
  25.     public TileEntityMachineLaser(boolean transmitter) {
  26.         super();
  27.         isTransmitter = transmitter;
  28.         this.storage = new EnergyStorage(1000000,10000,10000);
  29.     }
  30.    
  31.     @Override
  32.     public void readFromNBT(NBTTagCompound nbt) {
  33.         super.writeToNBT(nbt);
  34.         isTransmitter = nbt.getBoolean("isTransmitter");
  35.         direction = ForgeDirection.getOrientation(nbt.getInteger("direction"));
  36.     }
  37.    
  38.     @Override
  39.     public void writeToNBT(NBTTagCompound nbt) {
  40.         super.writeToNBT(nbt);
  41.         nbt.setBoolean("isTransmitter", isTransmitter);
  42.         nbt.setInteger("direction", getDirectionFacing().ordinal());
  43.     }
  44.    
  45.     public static TileEntity createTileEntity(World world, int meta, boolean transmitter)
  46.     {
  47.        return new TileEntityMachineLaser(transmitter);
  48.     }
  49.    
  50.     public boolean shouldDrawBeam() {
  51.         if(!isTransmitter) return false;
  52.         if(hasConnection) return true;
  53.         return false;
  54.     }
  55.    
  56.     public ForgeDirection getDirectionFacing() {
  57.         if(direction == null) return ForgeDirection.NORTH;
  58.         return direction;
  59.     }
  60.    
  61.     public void outputToAdjacent() {
  62.         for(ForgeDirection d : ForgeDirection.VALID_DIRECTIONS){
  63.             int targetX = this.xCoord + d.offsetX;
  64.             int targetY = this.yCoord + d.offsetY;
  65.             int targetZ = this.zCoord + d.offsetZ;
  66.             TileEntity tile = this.worldObj.getTileEntity(targetX, targetY, targetZ);
  67.             if(tile instanceof IEnergyHandler) {
  68.                 IEnergyHandler h = (IEnergyHandler) tile;
  69.                 int canProvide = this.storage.extractEnergy(this.storage.getMaxExtract(), true);
  70.                 int canReceive =    h.receiveEnergy(d.getOpposite(), canProvide, false);
  71.                 this.storage.extractEnergy(canReceive, false);
  72.             }
  73.         }
  74.     }
  75.    
  76.     public void updateEntity() {
  77.         if(isTransmitter) {
  78.             Block b = null;
  79.             hasConnection = false;
  80.            
  81.             for(int i = 1; i < maxRange; i++) {
  82.                 int x = xCoord;
  83.                 int y = yCoord;
  84.                 int z = zCoord;
  85.                
  86.                 switch(getDirectionFacing())
  87.                 {
  88.                 case UP:
  89.                     y = y + i;
  90.                     break;
  91.                 case DOWN:
  92.                     y = y - i;
  93.                     break;
  94.                 case SOUTH:
  95.                     z = z + i;
  96.                     break;
  97.                 case NORTH:
  98.                     z = z - i;
  99.                     break;
  100.                 case EAST:
  101.                     x = x + i;
  102.                     break;
  103.                 case WEST:
  104.                     x = x - i;
  105.                     break;
  106.                 default:
  107.                 }
  108.                 if(!worldObj.isAirBlock(x,y,z)) {
  109.                     b = this.worldObj.getBlock(x,y,z);
  110.                     if(b.equals(LaserPowerMod.blockLaserReceiver)) {
  111.                         hasConnection = true;
  112.                         IEnergyHandler tile = (IEnergyHandler) this.worldObj.getTileEntity(x,y,z);
  113.                         int canProvide = this.storage.extractEnergy(this.storage.getMaxExtract(), true);
  114.                         int canReceive = tile.receiveEnergy(getDirectionFacing().getOpposite(), canProvide, false);
  115.                         this.storage.extractEnergy(canReceive, false);
  116.                         System.out.println("transferred " + canReceive + "RF");
  117.                     }
  118.                     break;
  119.                 }
  120.                
  121.                 length = i;            
  122.             }
  123.         } else {
  124.             outputToAdjacent();
  125.         }
  126.     }
  127.  
  128.     @Override
  129.     @SideOnly(Side.CLIENT)
  130.     public double getMaxRenderDistanceSquared()
  131.     {
  132.         return 65536;
  133.     }
  134.    
  135.     @Override
  136.     @SideOnly(Side.CLIENT)
  137.     public AxisAlignedBB getRenderBoundingBox()
  138.     {
  139.         return INFINITE_EXTENT_AABB;
  140.     }
  141. }
Advertisement
Add Comment
Please, Sign In to add comment