Advertisement
Guest User

TileLaser

a guest
Jan 18th, 2016
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.82 KB | None | 0 0
  1. package practicalities.blocks;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Iterator;
  5. import java.util.List;
  6. import java.util.function.Consumer;
  7.  
  8. import net.minecraft.block.Block;
  9. import net.minecraft.block.state.IBlockState;
  10. import net.minecraft.nbt.NBTTagCompound;
  11. import net.minecraft.nbt.NBTTagList;
  12. import net.minecraft.network.NetworkManager;
  13. import net.minecraft.network.Packet;
  14. import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
  15. import net.minecraft.tileentity.TileEntity;
  16. import net.minecraft.util.AxisAlignedBB;
  17. import net.minecraft.util.BlockPos;
  18. import net.minecraft.util.EnumFacing;
  19. import net.minecraft.util.ITickable;
  20. import net.minecraft.world.World;
  21. import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint;
  22. import net.minecraftforge.fml.common.registry.GameRegistry;
  23. import practicalities.Logger;
  24. import practicalities.lib.util.WorldTraceUtil;
  25. import practicalities.lib.util.vec.Vector3;
  26. import practicalities.network.NetHandler;
  27. import practicalities.network.message.MessageSyncLasers;
  28.  
  29. public class TileLaser extends TileEntity implements ITickable {
  30.  
  31.     int hitCounter = 0;
  32.    
  33.     public EnumFacing facing = EnumFacing.UP, attached = EnumFacing.DOWN;
  34.    
  35.     List<Laser> oldLasers = new ArrayList<>();
  36.     Laser currentLaser = null;
  37.    
  38.     public boolean powered = false;
  39.    
  40.     public static class Laser {
  41.         public double start, end, lastStart, lastEnd;
  42.        
  43.         public BlockPos moveEnd(World w, Vector3 origin, double speed, EnumFacing direction) {
  44.             Vector3 endVec = origin.copy().add(new Vector3(direction, this.end));
  45.             double amountToMove = WorldTraceUtil.rayHitDistance(w, endVec, speed, direction);
  46.             end += amountToMove;
  47.             if(amountToMove != speed) {
  48.                 endVec = origin.copy().add(new Vector3(direction, this.end)).floor();
  49.                
  50.                 return new BlockPos(endVec.vec3());
  51.             }
  52.             return null;
  53.         }
  54.        
  55.         public NBTTagCompound tag() {
  56.             NBTTagCompound tag = new NBTTagCompound();
  57.             tag.setDouble(START_TAG, start);
  58.             tag.setDouble(END_TAG,   end);
  59.             return tag;
  60.         }
  61.        
  62.         public static Laser fromTag(NBTTagCompound tag) {
  63.             Laser laser = new Laser();
  64.             laser.start = tag.getDouble(START_TAG);
  65.             laser.end   = tag.getDouble(END_TAG);
  66.             return laser;
  67.         }
  68.        
  69.         public static final String START_TAG = "s", END_TAG = "e";
  70.     }
  71.    
  72.     public void eachLaser(Consumer<Laser> r) {
  73.         if(currentLaser != null) r.accept(currentLaser);
  74.         oldLasers.forEach(r);
  75.     }
  76.    
  77.     AxisAlignedBB renderBox = AxisAlignedBB.fromBounds(
  78.             -RANGE, -RANGE, -RANGE,
  79.              RANGE,  RANGE,  RANGE);
  80.    
  81.     @Override
  82.     public AxisAlignedBB getRenderBoundingBox() {
  83.         return renderBox.offset(pos.getX(), pos.getY(), pos.getZ());//new AxisAlignedBB(pos, pos.add(1, 1, 1)).expand(RANGE, RANGE, RANGE);
  84.     }
  85.    
  86.     @Override
  87.     public double getMaxRenderDistanceSquared() {
  88.         return (RANGE*3)*(RANGE*3);
  89.     }
  90.    
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement