From decbe16e9804d5f1e0a54d798b925de5f9fbcddf Mon Sep 17 00:00:00 2001 From: MiniDay <372403923@qq.com> Date: Thu, 19 Jan 2023 12:28:55 +0800 Subject: [PATCH] =?UTF-8?q?fix(bukkit):=20=E4=BC=A0=E9=80=81=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=A4=B1=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bukkit/listener/BallBukkitListener.java | 51 +++++++++++++------ .../listener/BallBungeeCordListener.java | 12 +++++ 2 files changed, 48 insertions(+), 15 deletions(-) diff --git a/hamster-ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/listener/BallBukkitListener.java b/hamster-ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/listener/BallBukkitListener.java index 08b97f4..972696b 100644 --- a/hamster-ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/listener/BallBukkitListener.java +++ b/hamster-ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/listener/BallBukkitListener.java @@ -2,7 +2,6 @@ package cn.hamster3.mc.plugin.ball.bukkit.listener; import cn.hamster3.mc.plugin.ball.bukkit.data.BukkitLocation; import cn.hamster3.mc.plugin.ball.common.api.BallAPI; -import cn.hamster3.mc.plugin.ball.common.data.BallLocation; import cn.hamster3.mc.plugin.ball.common.data.BallMessageInfo; import cn.hamster3.mc.plugin.ball.common.entity.BallServerType; import cn.hamster3.mc.plugin.ball.common.event.operate.DispatchConsoleCommandEvent; @@ -10,14 +9,17 @@ import cn.hamster3.mc.plugin.ball.common.event.operate.DispatchPlayerCommandEven import cn.hamster3.mc.plugin.ball.common.event.operate.SendPlayerToLocationEvent; import cn.hamster3.mc.plugin.ball.common.event.operate.SendPlayerToPlayerEvent; import cn.hamster3.mc.plugin.ball.common.listener.BallListener; +import cn.hamster3.mc.plugin.core.bukkit.api.CoreBukkitAPI; import cn.hamster3.mc.plugin.core.common.constant.CoreConstantObjects; +import cn.hamster3.mc.plugin.core.common.data.DisplayMessage; +import cn.hamster3.mc.plugin.core.common.util.Pair; +import net.kyori.adventure.audience.Audience; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.jetbrains.annotations.NotNull; @@ -28,7 +30,7 @@ import java.util.UUID; public class BallBukkitListener extends BallListener implements Listener { public static final BallBukkitListener INSTANCE = new BallBukkitListener(); - private final HashMap playerToLocation = new HashMap<>(); + private final HashMap> playerToLocation = new HashMap<>(); private BallBukkitListener() { } @@ -72,23 +74,41 @@ public class BallBukkitListener extends BallListener implements Listener { } case SendPlayerToLocationEvent.ACTION: { SendPlayerToLocationEvent event = CoreConstantObjects.GSON.fromJson(info.getContent(), SendPlayerToLocationEvent.class); - BallLocation location = event.getLocation(); + BukkitLocation location = new BukkitLocation(event.getLocation()); if (BallAPI.getInstance().isLocalServer(location.getServerID())) { for (UUID uuid : event.getSendPlayerUUID()) { - playerToLocation.put(uuid, new BukkitLocation(location).toBukkitLocation()); + Player player = Bukkit.getPlayer(uuid); + if (player != null) { + player.teleport(location.toBukkitLocation()); + if (event.getDoneMessage() != null) { + Audience audience = CoreBukkitAPI.getInstance().getAudienceProvider().player(player); + event.getDoneMessage().show(audience); + } + } else { + playerToLocation.put(uuid, new Pair<>(location.toBukkitLocation(), event.getDoneMessage())); + } } } break; } case SendPlayerToPlayerEvent.ACTION: { SendPlayerToPlayerEvent event = CoreConstantObjects.GSON.fromJson(info.getContent(), SendPlayerToPlayerEvent.class); - Player player = Bukkit.getPlayer(event.getToPlayerUUID()); - if (player == null) { + Player toPlayer = Bukkit.getPlayer(event.getToPlayerUUID()); + if (toPlayer == null) { return; } - Location location = player.getLocation(); + Location location = toPlayer.getLocation(); for (UUID uuid : event.getSendPlayerUUID()) { - playerToLocation.put(uuid, location); + Player player = Bukkit.getPlayer(uuid); + if (player != null) { + player.teleport(location); + if (event.getDoneMessage() != null) { + Audience audience = CoreBukkitAPI.getInstance().getAudienceProvider().player(player); + event.getDoneMessage().show(audience); + } + } else { + playerToLocation.put(uuid, new Pair<>(location, event.getDoneMessage())); + } } break; } @@ -98,13 +118,14 @@ public class BallBukkitListener extends BallListener implements Listener { @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH) public void onPlayerLogin(PlayerLoginEvent event) { Player player = event.getPlayer(); - Location location = playerToLocation.remove(player.getUniqueId()); - if (location != null) { - player.teleport(location, PlayerTeleportEvent.TeleportCause.PLUGIN); + Pair pair = playerToLocation.remove(player.getUniqueId()); + if (pair != null) { + player.teleport(pair.getKey(), PlayerTeleportEvent.TeleportCause.PLUGIN); + if (pair.getValue() != null) { + Audience audience = CoreBukkitAPI.getInstance().getAudienceProvider().player(player); + pair.getValue().show(audience); + } } } - @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH) - public void onAsyncPlayerChat(AsyncPlayerChatEvent event) { - } } diff --git a/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/listener/BallBungeeCordListener.java b/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/listener/BallBungeeCordListener.java index 165b97b..7c0918c 100644 --- a/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/listener/BallBungeeCordListener.java +++ b/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/listener/BallBungeeCordListener.java @@ -93,6 +93,18 @@ public final class BallBungeeCordListener extends BallListener implements Listen } break; } + case SendPlayerToLocationEvent.ACTION: { + SendPlayerToLocationEvent event = CoreConstantObjects.GSON.fromJson(info.getContent(), SendPlayerToLocationEvent.class); + String serverID = event.getLocation().getServerID(); + for (UUID uuid : event.getSendPlayerUUID()) { + ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid); + if (player.getServer().getInfo().getName().equals(serverID)) { + continue; + } + player.connect(ProxyServer.getInstance().getServerInfo(serverID)); + } + break; + } } }