Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package practicalities.blocks;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- import java.util.function.Consumer;
- import net.minecraft.block.Block;
- import net.minecraft.block.state.IBlockState;
- import net.minecraft.nbt.NBTTagCompound;
- import net.minecraft.nbt.NBTTagList;
- import net.minecraft.network.NetworkManager;
- import net.minecraft.network.Packet;
- import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
- import net.minecraft.tileentity.TileEntity;
- import net.minecraft.util.AxisAlignedBB;
- import net.minecraft.util.BlockPos;
- import net.minecraft.util.EnumFacing;
- import net.minecraft.util.ITickable;
- import net.minecraft.world.World;
- import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint;
- import net.minecraftforge.fml.common.registry.GameRegistry;
- import practicalities.Logger;
- import practicalities.lib.util.WorldTraceUtil;
- import practicalities.lib.util.vec.Vector3;
- import practicalities.network.NetHandler;
- import practicalities.network.message.MessageSyncLasers;
- public class TileLaser extends TileEntity implements ITickable {
- int hitCounter = 0;
- public EnumFacing facing = EnumFacing.UP, attached = EnumFacing.DOWN;
- List<Laser> oldLasers = new ArrayList<>();
- Laser currentLaser = null;
- public boolean powered = false;
- public static class Laser {
- public double start, end, lastStart, lastEnd;
- public BlockPos moveEnd(World w, Vector3 origin, double speed, EnumFacing direction) {
- Vector3 endVec = origin.copy().add(new Vector3(direction, this.end));
- double amountToMove = WorldTraceUtil.rayHitDistance(w, endVec, speed, direction);
- end += amountToMove;
- if(amountToMove != speed) {
- endVec = origin.copy().add(new Vector3(direction, this.end)).floor();
- return new BlockPos(endVec.vec3());
- }
- return null;
- }
- public NBTTagCompound tag() {
- NBTTagCompound tag = new NBTTagCompound();
- tag.setDouble(START_TAG, start);
- tag.setDouble(END_TAG, end);
- return tag;
- }
- public static Laser fromTag(NBTTagCompound tag) {
- Laser laser = new Laser();
- laser.start = tag.getDouble(START_TAG);
- laser.end = tag.getDouble(END_TAG);
- return laser;
- }
- public static final String START_TAG = "s", END_TAG = "e";
- }
- public void eachLaser(Consumer<Laser> r) {
- if(currentLaser != null) r.accept(currentLaser);
- oldLasers.forEach(r);
- }
- AxisAlignedBB renderBox = AxisAlignedBB.fromBounds(
- -RANGE, -RANGE, -RANGE,
- RANGE, RANGE, RANGE);
- @Override
- public AxisAlignedBB getRenderBoundingBox() {
- return renderBox.offset(pos.getX(), pos.getY(), pos.getZ());//new AxisAlignedBB(pos, pos.add(1, 1, 1)).expand(RANGE, RANGE, RANGE);
- }
- @Override
- public double getMaxRenderDistanceSquared() {
- return (RANGE*3)*(RANGE*3);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement