fix: 修正 sendPlayerToPlayer 的消息提示

This commit is contained in:
2023-06-05 10:24:53 +08:00
parent 3a393014f0
commit 70fda95767
2 changed files with 66 additions and 19 deletions

View File

@@ -12,14 +12,17 @@ import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
import cn.hamster3.mc.plugin.core.common.data.DisplayMessage;
import cn.hamster3.mc.plugin.core.common.util.CoreUtils;
import cn.hamster3.mc.plugin.core.common.util.Pair;
import lombok.AllArgsConstructor;
import lombok.Data;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.TextReplacementConfig;
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.PlayerLoginEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.jetbrains.annotations.NotNull;
@@ -30,6 +33,7 @@ public class BallBukkitListener implements Listener, BallListener {
public static final BallBukkitListener INSTANCE = new BallBukkitListener();
private final HashMap<UUID, Pair<Location, DisplayMessage>> playerToLocation = new HashMap<>();
private final HashMap<UUID, ToPlayerData> playerToPlayer = new HashMap<>();
private BallBukkitListener() {
}
@@ -107,17 +111,33 @@ public class BallBukkitListener implements Listener, BallListener {
}
Location location = toPlayer.getLocation();
for (UUID uuid : event.getSendPlayerUUID()) {
Player player = Bukkit.getPlayer(uuid);
if (player != null) {
Player sendPlayer = Bukkit.getPlayer(uuid);
if (sendPlayer != null) {
HamsterBallPlugin.sync(() -> {
player.teleport(location);
sendPlayer.teleport(location);
if (event.getDoneMessage() != null) {
Audience audience = CoreBukkitAPI.getInstance().getAudienceProvider().player(player);
event.getDoneMessage().show(audience);
Audience audience = CoreBukkitAPI.getInstance().getAudienceProvider().player(sendPlayer);
event.getDoneMessage().show(audience, TextReplacementConfig.builder()
.matchLiteral("%player_name%")
.replacement(toPlayer.getName())
.build());
}
if (event.getDoneTargetMessage() != null) {
Audience audience = CoreBukkitAPI.getInstance().getAudienceProvider().player(toPlayer);
event.getDoneTargetMessage().show(audience, TextReplacementConfig.builder()
.matchLiteral("%player_name%")
.replacement(sendPlayer.getName())
.build());
}
});
} else {
playerToLocation.put(uuid, new Pair<>(location, event.getDoneMessage()));
ToPlayerData data = new ToPlayerData(
toPlayer.getUniqueId(),
toPlayer.getLocation(),
event.getDoneMessage(),
event.getDoneTargetMessage()
);
playerToPlayer.put(uuid, data);
}
}
break;
@@ -126,19 +146,43 @@ public class BallBukkitListener implements Listener, BallListener {
}
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH)
public void onPlayerLogin(PlayerLoginEvent event) {
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
Pair<Location, DisplayMessage> pair = playerToLocation.remove(player.getUniqueId());
if (pair == null) {
return;
}
HamsterBallPlugin.sync(() -> {
UUID uuid = player.getUniqueId();
Pair<Location, DisplayMessage> pair = playerToLocation.remove(uuid);
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);
}
});
}
ToPlayerData toPlayerData = playerToPlayer.remove(uuid);
if (toPlayerData != null) {
player.teleport(toPlayerData.location);
if (toPlayerData.doneMessage != null) {
Audience audience = CoreBukkitAPI.getInstance().getAudienceProvider().player(player);
toPlayerData.doneMessage.show(audience, TextReplacementConfig.builder()
.matchLiteral("%player_name%")
.replacement(BallAPI.getInstance().getPlayerName(toPlayerData.toPlayerUUID, ""))
.build());
}
if (toPlayerData.doneTargetMessage != null) {
Audience audience = CoreBukkitAPI.getInstance().getAudienceProvider().player(toPlayerData.toPlayerUUID);
toPlayerData.doneTargetMessage.show(audience, TextReplacementConfig.builder()
.matchLiteral("%player_name%")
.replacement(player.getName())
.build());
}
}
}
@Data
@AllArgsConstructor
private static class ToPlayerData {
private UUID toPlayerUUID;
private Location location;
private DisplayMessage doneMessage;
private DisplayMessage doneTargetMessage;
}
}

View File

@@ -565,6 +565,8 @@ public abstract class BallAPI {
*
* @param sendPlayer 被传送的玩家
* @param toPlayer 传送的目标玩家
* @param doneMessage 传送完成后显示的消息,自动将 %player_name% 替换成传送目标玩家的名称
* @param doneTargetMessage 传送完成后目标玩家显示的消息,自动将 %player_name% 替换成被传送者的名称
*/
public void sendPlayerToPlayer(@NotNull UUID sendPlayer, @NotNull UUID toPlayer, @Nullable DisplayMessage doneMessage, @Nullable DisplayMessage doneTargetMessage) {
sendBallMessage(
@@ -581,7 +583,8 @@ public abstract class BallAPI {
*
* @param sendPlayerUUID 被传送的玩家
* @param toPlayer 传送的目标玩家
* @param doneMessage 传送完成后显示的消息
* @param doneMessage 传送完成后显示的消息,自动将 %player_name% 替换成传送目标玩家的名称
* @param doneTargetMessage 传送完成后目标玩家显示的消息,自动将 %player_name% 替换成被传送者的名称
*/
public void sendPlayerToPlayer(@NotNull Collection<UUID> sendPlayerUUID, @NotNull UUID toPlayer, @Nullable DisplayMessage doneMessage, @Nullable DisplayMessage doneTargetMessage) {
sendBallMessage(