2022-07-30 14:21:56 +02:00
|
|
|
/*
|
|
|
|
* This file is a part of the SteamWar software.
|
|
|
|
*
|
|
|
|
* Copyright (C) 2022 SteamWar.de-Serverteam
|
|
|
|
*
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Affero General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU Affero General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
2022-08-06 14:12:59 +02:00
|
|
|
package de.steamwar.bausystem.utils;
|
2022-07-30 14:21:56 +02:00
|
|
|
|
|
|
|
import net.minecraft.network.protocol.game.PacketPlayInFlying;
|
|
|
|
import net.minecraft.server.level.EntityPlayer;
|
2023-03-19 14:11:09 +01:00
|
|
|
import org.bukkit.Location;
|
2023-02-25 09:55:49 +01:00
|
|
|
import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer;
|
2022-07-30 14:21:56 +02:00
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
|
2023-03-19 14:11:09 +01:00
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.UUID;
|
|
|
|
|
2022-08-06 11:15:30 +02:00
|
|
|
public class PlayerMovementWrapper19 implements PlayerMovementWrapper {
|
2022-07-30 14:21:56 +02:00
|
|
|
|
2023-03-19 14:11:09 +01:00
|
|
|
private static class Position {
|
|
|
|
private double x;
|
|
|
|
private double y;
|
|
|
|
private double z;
|
|
|
|
private float yaw;
|
|
|
|
private float pitch;
|
|
|
|
}
|
|
|
|
|
|
|
|
private Map<UUID, Position> playerLocationMap = new HashMap<>();
|
|
|
|
|
2022-07-30 14:21:56 +02:00
|
|
|
@Override
|
|
|
|
public void setPosition(Player player, Object object) {
|
2023-03-19 14:11:09 +01:00
|
|
|
Position position = playerLocationMap.computeIfAbsent(player.getUniqueId(), uuid -> new Position());
|
2022-07-30 14:21:56 +02:00
|
|
|
PacketPlayInFlying packetPlayInFlying = ((PacketPlayInFlying) object);
|
|
|
|
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
|
|
|
|
if (packetPlayInFlying.h) {
|
|
|
|
entityPlayer.b(packetPlayInFlying.a, packetPlayInFlying.b, packetPlayInFlying.c, packetPlayInFlying.d, packetPlayInFlying.e);
|
2023-03-19 14:11:09 +01:00
|
|
|
position.x = packetPlayInFlying.a;
|
|
|
|
position.y = packetPlayInFlying.b;
|
|
|
|
position.z = packetPlayInFlying.c;
|
|
|
|
position.yaw = packetPlayInFlying.d;
|
|
|
|
position.pitch = packetPlayInFlying.e;
|
2022-07-30 14:21:56 +02:00
|
|
|
} else {
|
|
|
|
entityPlayer.e(packetPlayInFlying.a, packetPlayInFlying.b, packetPlayInFlying.c);
|
2023-03-19 14:11:09 +01:00
|
|
|
position.x = packetPlayInFlying.a;
|
|
|
|
position.y = packetPlayInFlying.b;
|
|
|
|
position.z = packetPlayInFlying.c;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void disable(Player player) {
|
|
|
|
Position position = playerLocationMap.remove(player.getUniqueId());
|
|
|
|
if (position != null) {
|
|
|
|
player.teleport(new Location(player.getWorld(), position.x, position.y, position.z, position.yaw, position.pitch));
|
2022-07-30 14:21:56 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|