fix: 修正 sendPlayerToPlayer 的消息提示
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -563,8 +563,10 @@ public abstract class BallAPI {
|
||||
* <p>
|
||||
* 支持跨服传送
|
||||
*
|
||||
* @param sendPlayer 被传送的玩家
|
||||
* @param toPlayer 传送的目标玩家
|
||||
* @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(
|
||||
@@ -579,9 +581,10 @@ public abstract class BallAPI {
|
||||
* <p>
|
||||
* 支持跨服传送
|
||||
*
|
||||
* @param sendPlayerUUID 被传送的玩家
|
||||
* @param toPlayer 传送的目标玩家
|
||||
* @param doneMessage 传送完成后显示的消息
|
||||
* @param sendPlayerUUID 被传送的玩家
|
||||
* @param toPlayer 传送的目标玩家
|
||||
* @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(
|
||||
|
Reference in New Issue
Block a user