Created
July 23, 2018 04:03
-
-
Save Galaxtone/d73949555a5e2edae2bd0fb5c0840935 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.galaxtone.reltp; | |
import java.util.UUID; | |
import io.netty.buffer.ByteBuf; | |
import net.minecraft.client.Minecraft; | |
import net.minecraft.entity.Entity; | |
import net.minecraft.entity.player.EntityPlayer; | |
import net.minecraft.entity.player.EntityPlayerMP; | |
import net.minecraft.util.math.Vec3d; | |
import net.minecraftforge.fml.common.network.simpleimpl.IMessage; | |
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; | |
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; | |
public class RelativeTeleportPacket implements IMessage { | |
private boolean isPlayer; | |
private int entityId; | |
private UUID uuid; | |
private Vec3d relativePosition; | |
private Vec3d rotationOrigin; | |
private float relativeYaw; | |
private float relativePitch; | |
@Override | |
public String toString() { | |
return "{" + (this.isPlayer ? "Player UUID: " + this.uuid : "Entity ID: " + this.entityId) + ", Position: " + relativePosition.toString() + ", Origin: " + rotationOrigin.toString() + ", Rotation: [" + relativeYaw + ", " + relativePitch + "]}"; | |
} | |
public RelativeTeleportPacket(Entity entity, Vec3d relativePosition, Vec3d rotationOrigin, float relativeYaw, float relativePitch) { | |
if (entity instanceof EntityPlayerMP) { | |
this.isPlayer = true; | |
EntityPlayerMP player = (EntityPlayerMP) entity; | |
this.uuid = EntityPlayer.getUUID(player.getGameProfile()); | |
} else { | |
this.isPlayer = false; | |
this.entityId = entity.getEntityId(); | |
} | |
this.relativePosition = relativePosition; | |
this.rotationOrigin = rotationOrigin; | |
this.relativeYaw = relativeYaw; | |
this.relativePitch = relativePitch; | |
} | |
public RelativeTeleportPacket() {} | |
@Override | |
public void fromBytes(ByteBuf buffer) { | |
this.isPlayer = buffer.readBoolean(); | |
if (this.isPlayer) { | |
this.uuid = new UUID(buffer.readLong(), buffer.readLong()); | |
} else { | |
this.entityId = buffer.readInt(); | |
} | |
this.relativePosition = new Vec3d(buffer.readDouble(), buffer.readDouble(), buffer.readDouble()); | |
this.rotationOrigin = new Vec3d(buffer.readDouble(), buffer.readDouble(), buffer.readDouble()); | |
this.relativeYaw = buffer.readFloat(); | |
this.relativePitch = buffer.readFloat(); | |
} | |
@Override | |
public void toBytes(ByteBuf buffer) { | |
buffer.writeBoolean(this.isPlayer); | |
if (this.isPlayer) { | |
buffer.writeLong(this.uuid.getMostSignificantBits()); | |
buffer.writeLong(this.uuid.getLeastSignificantBits()); | |
} else { | |
buffer.writeInt(this.entityId); | |
} | |
buffer.writeDouble(relativePosition.x); | |
buffer.writeDouble(relativePosition.y); | |
buffer.writeDouble(relativePosition.z); | |
buffer.writeDouble(rotationOrigin.x); | |
buffer.writeDouble(rotationOrigin.y); | |
buffer.writeDouble(rotationOrigin.z); | |
buffer.writeFloat(relativeYaw); | |
buffer.writeFloat(relativePitch); | |
} | |
public static final class Handler implements IMessageHandler<RelativeTeleportPacket, IMessage> { | |
@Override | |
public IMessage onMessage(RelativeTeleportPacket message, MessageContext context) { | |
Minecraft minecraft = Minecraft.getMinecraft(); | |
Entity entity; | |
if (message.isPlayer) | |
entity = minecraft.world.getPlayerEntityByUUID(message.uuid); | |
else | |
entity = minecraft.world.getEntityByID(message.entityId); | |
minecraft.addScheduledTask(() -> { | |
TeleportUtils.relativeMove(entity, message.relativePosition, message.rotationOrigin, message.relativeYaw, message.relativePitch); | |
}); | |
return null; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment