mirror of https://github.com/Minestom/Minestom.git
Fixed players being able to move during teleport
This commit is contained in:
parent
2e17c8a8e1
commit
8ab29368a6
|
@ -91,7 +91,9 @@ public class Player extends LivingEntity implements CommandSender {
|
|||
private DimensionType dimensionType;
|
||||
private GameMode gameMode;
|
||||
protected final Set<Chunk> viewableChunks = new CopyOnWriteArraySet<>();
|
||||
|
||||
private final AtomicInteger teleportId = new AtomicInteger();
|
||||
private int receivedTeleportId;
|
||||
|
||||
private final Queue<ClientPlayPacket> packets = Queues.newConcurrentLinkedQueue();
|
||||
private final boolean levelFlat;
|
||||
|
@ -1927,6 +1929,18 @@ public class Player extends LivingEntity implements CommandSender {
|
|||
playerConnection.sendPacket(updateViewPositionPacket);
|
||||
}
|
||||
|
||||
public int getLastSentTeleportId() {
|
||||
return teleportId.get();
|
||||
}
|
||||
|
||||
public int getLastReceivedTeleportId() {
|
||||
return receivedTeleportId;
|
||||
}
|
||||
|
||||
public void refreshReceivedTeleportId(int receivedTeleportId) {
|
||||
this.receivedTeleportId = receivedTeleportId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used for synchronization purpose, mainly for teleportation
|
||||
*/
|
||||
|
|
|
@ -2,12 +2,8 @@ package net.minestom.server.listener;
|
|||
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.event.player.PlayerMoveEvent;
|
||||
import net.minestom.server.instance.Chunk;
|
||||
import net.minestom.server.instance.Instance;
|
||||
import net.minestom.server.network.packet.client.play.ClientPlayerPacket;
|
||||
import net.minestom.server.network.packet.client.play.ClientPlayerPositionAndRotationPacket;
|
||||
import net.minestom.server.network.packet.client.play.ClientPlayerPositionPacket;
|
||||
import net.minestom.server.network.packet.client.play.ClientPlayerRotationPacket;
|
||||
import net.minestom.server.network.packet.client.play.*;
|
||||
import net.minestom.server.utils.Position;
|
||||
import net.minestom.server.utils.chunk.ChunkUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
@ -48,6 +44,11 @@ public class PlayerPositionListener {
|
|||
yaw, pitch, onGround);
|
||||
}
|
||||
|
||||
public static void teleportConfirmListener(ClientTeleportConfirmPacket packet, Player player) {
|
||||
final int packetTeleportId = packet.teleportId;
|
||||
player.refreshReceivedTeleportId(packetTeleportId);
|
||||
}
|
||||
|
||||
private static void processMovement(@NotNull Player player, double x, double y, double z,
|
||||
float yaw, float pitch, boolean onGround) {
|
||||
final Instance instance = player.getInstance();
|
||||
|
@ -58,9 +59,7 @@ public class PlayerPositionListener {
|
|||
}
|
||||
|
||||
// Prevent the player from moving during a teleport
|
||||
final double distance = player.getPosition().getDistance(x, y, z);
|
||||
final int chunkRange = player.getChunkRange() * Chunk.CHUNK_SECTION_SIZE;
|
||||
if (distance >= chunkRange) {
|
||||
if (player.getLastSentTeleportId() != player.getLastReceivedTeleportId()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
package net.minestom.server.listener;
|
||||
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.network.packet.client.play.ClientTeleportConfirmPacket;
|
||||
|
||||
public class TeleportListener {
|
||||
|
||||
public static void listener(ClientTeleportConfirmPacket packet, Player player) {
|
||||
// Empty
|
||||
}
|
||||
|
||||
}
|
|
@ -39,6 +39,7 @@ public final class PacketListenerManager {
|
|||
setListener(ClientPlayerRotationPacket.class, PlayerPositionListener::playerLookListener);
|
||||
setListener(ClientPlayerPositionPacket.class, PlayerPositionListener::playerPositionListener);
|
||||
setListener(ClientPlayerPositionAndRotationPacket.class, PlayerPositionListener::playerPositionAndLookListener);
|
||||
setListener(ClientTeleportConfirmPacket.class, PlayerPositionListener::teleportConfirmListener);
|
||||
setListener(ClientPlayerDiggingPacket.class, PlayerDiggingListener::playerDiggingListener);
|
||||
setListener(ClientAnimationPacket.class, AnimationListener::animationListener);
|
||||
setListener(ClientInteractEntityPacket.class, UseEntityListener::useEntityListener);
|
||||
|
@ -50,7 +51,6 @@ public final class PacketListenerManager {
|
|||
setListener(ClientTabCompletePacket.class, TabCompleteListener::listener);
|
||||
setListener(ClientPluginMessagePacket.class, PluginMessageListener::listener);
|
||||
setListener(ClientPlayerAbilitiesPacket.class, AbilitiesListener::listener);
|
||||
setListener(ClientTeleportConfirmPacket.class, TeleportListener::listener);
|
||||
setListener(ClientResourcePackStatusPacket.class, ResourcePackListener::listener);
|
||||
setListener(ClientAdvancementTabPacket.class, AdvancementTabListener::listener);
|
||||
setListener(ClientSpectatePacket.class, SpectateListener::listener);
|
||||
|
|
Loading…
Reference in New Issue