Created teleportation method for V1_12_R1.
This commit is contained in:
@@ -162,4 +162,13 @@ public abstract class NPC {
|
|||||||
|
|
||||||
// Internal method.
|
// Internal method.
|
||||||
protected abstract void sendHidePackets(Player player);
|
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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,10 +6,7 @@ package net.jitse.npclib.nms.v1_12_R1;
|
|||||||
|
|
||||||
import net.jitse.npclib.api.NPC;
|
import net.jitse.npclib.api.NPC;
|
||||||
import net.jitse.npclib.nms.holograms.Hologram;
|
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.*;
|
||||||
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.skin.Skin;
|
import net.jitse.npclib.skin.Skin;
|
||||||
import net.minecraft.server.v1_12_R1.*;
|
import net.minecraft.server.v1_12_R1.*;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@@ -100,4 +97,13 @@ public class NPC_V1_12_R1 extends NPC {
|
|||||||
Bukkit.getScheduler().runTaskLater(plugin, () ->
|
Bukkit.getScheduler().runTaskLater(plugin, () ->
|
||||||
playerConnection.sendPacket(packetPlayOutScoreboardTeamUnregister), 5);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,10 +4,35 @@
|
|||||||
|
|
||||||
package net.jitse.npclib.nms.v1_12_R1.packets;
|
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
|
* @author Jitse Boonstra
|
||||||
*/
|
*/
|
||||||
public class PacketPlayOutEntityTeleportWrapper {
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user