Created teleportation method for V1_12_R1.

This commit is contained in:
JitseB 2018-04-25 16:58:32 +02:00
parent 1a99cfd2e6
commit a3136e4d00
3 changed files with 44 additions and 4 deletions

View File

@ -162,4 +162,13 @@ public abstract class NPC {
// Internal method.
protected abstract void sendHidePackets(Player player);
public void teleport(Player player, Location location) {
this.location = location;
sendTeleportationPackets(player);
}
// Internal method.
public abstract void sendTeleportationPackets(Player player);
}

View File

@ -6,10 +6,7 @@ package net.jitse.npclib.nms.v1_12_R1;
import net.jitse.npclib.api.NPC;
import net.jitse.npclib.nms.holograms.Hologram;
import net.jitse.npclib.nms.v1_12_R1.packets.PacketPlayOutEntityHeadRotationWrapper;
import net.jitse.npclib.nms.v1_12_R1.packets.PacketPlayOutNamedEntitySpawnWrapper;
import net.jitse.npclib.nms.v1_12_R1.packets.PacketPlayOutPlayerInfoWrapper;
import net.jitse.npclib.nms.v1_12_R1.packets.PacketPlayOutScoreboardTeamWrapper;
import net.jitse.npclib.nms.v1_12_R1.packets.*;
import net.jitse.npclib.skin.Skin;
import net.minecraft.server.v1_12_R1.*;
import org.bukkit.Bukkit;
@ -100,4 +97,13 @@ public class NPC_V1_12_R1 extends NPC {
Bukkit.getScheduler().runTaskLater(plugin, () ->
playerConnection.sendPacket(packetPlayOutScoreboardTeamUnregister), 5);
}
@Override
public void sendTeleportationPackets(Player player) {
PlayerConnection playerConnection = ((CraftPlayer) player).getHandle().playerConnection;
PacketPlayOutEntityTeleport packetPlayOutEntityTeleport = new PacketPlayOutEntityTeleportWrapper().create(entityId, location);
playerConnection.sendPacket(packetPlayOutEntityTeleport);
}
}

View File

@ -4,10 +4,35 @@
package net.jitse.npclib.nms.v1_12_R1.packets;
import com.comphenix.tinyprotocol.Reflection;
import net.minecraft.server.v1_12_R1.PacketPlayOutEntityTeleport;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.BlockFace;
/**
* @author Jitse Boonstra
*/
public class PacketPlayOutEntityTeleportWrapper {
public PacketPlayOutEntityTeleport create(int entityId, Location location) {
PacketPlayOutEntityTeleport packetPlayOutEntityTeleport = new PacketPlayOutEntityTeleport();
Reflection.getField(packetPlayOutEntityTeleport.getClass(), "a", int.class)
.set(packetPlayOutEntityTeleport, entityId);
Reflection.getField(packetPlayOutEntityTeleport.getClass(), "b", double.class)
.set(packetPlayOutEntityTeleport, location.getX());
Reflection.getField(packetPlayOutEntityTeleport.getClass(), "c", double.class)
.set(packetPlayOutEntityTeleport, location.getY());
Reflection.getField(packetPlayOutEntityTeleport.getClass(), "d", double.class)
.set(packetPlayOutEntityTeleport, location.getZ());
Reflection.getField(packetPlayOutEntityTeleport.getClass(), "e", byte.class)
.set(packetPlayOutEntityTeleport, (byte) ((int) (location.getYaw() * 256.0F / 360.0F)));
Reflection.getField(packetPlayOutEntityTeleport.getClass(), "f", byte.class)
.set(packetPlayOutEntityTeleport, (byte) ((int) (location.getPitch() * 256.0F / 360.0F)));
Reflection.getField(packetPlayOutEntityTeleport.getClass(), "g", boolean.class)
.set(packetPlayOutEntityTeleport, location.getBlock().getRelative(BlockFace.DOWN).getType() != Material.AIR);
return packetPlayOutEntityTeleport;
}
}