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.data.DisplayMessage;
|
||||||
import cn.hamster3.mc.plugin.core.common.util.CoreUtils;
|
import cn.hamster3.mc.plugin.core.common.util.CoreUtils;
|
||||||
import cn.hamster3.mc.plugin.core.common.util.Pair;
|
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.audience.Audience;
|
||||||
|
import net.kyori.adventure.text.TextReplacementConfig;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
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.bukkit.event.player.PlayerTeleportEvent;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
@@ -30,6 +33,7 @@ public class BallBukkitListener implements Listener, BallListener {
|
|||||||
public static final BallBukkitListener INSTANCE = new BallBukkitListener();
|
public static final BallBukkitListener INSTANCE = new BallBukkitListener();
|
||||||
|
|
||||||
private final HashMap<UUID, Pair<Location, DisplayMessage>> playerToLocation = new HashMap<>();
|
private final HashMap<UUID, Pair<Location, DisplayMessage>> playerToLocation = new HashMap<>();
|
||||||
|
private final HashMap<UUID, ToPlayerData> playerToPlayer = new HashMap<>();
|
||||||
|
|
||||||
private BallBukkitListener() {
|
private BallBukkitListener() {
|
||||||
}
|
}
|
||||||
@@ -107,17 +111,33 @@ public class BallBukkitListener implements Listener, BallListener {
|
|||||||
}
|
}
|
||||||
Location location = toPlayer.getLocation();
|
Location location = toPlayer.getLocation();
|
||||||
for (UUID uuid : event.getSendPlayerUUID()) {
|
for (UUID uuid : event.getSendPlayerUUID()) {
|
||||||
Player player = Bukkit.getPlayer(uuid);
|
Player sendPlayer = Bukkit.getPlayer(uuid);
|
||||||
if (player != null) {
|
if (sendPlayer != null) {
|
||||||
HamsterBallPlugin.sync(() -> {
|
HamsterBallPlugin.sync(() -> {
|
||||||
player.teleport(location);
|
sendPlayer.teleport(location);
|
||||||
if (event.getDoneMessage() != null) {
|
if (event.getDoneMessage() != null) {
|
||||||
Audience audience = CoreBukkitAPI.getInstance().getAudienceProvider().player(player);
|
Audience audience = CoreBukkitAPI.getInstance().getAudienceProvider().player(sendPlayer);
|
||||||
event.getDoneMessage().show(audience);
|
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 {
|
} 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;
|
break;
|
||||||
@@ -126,19 +146,43 @@ public class BallBukkitListener implements Listener, BallListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH)
|
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH)
|
||||||
public void onPlayerLogin(PlayerLoginEvent event) {
|
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
Pair<Location, DisplayMessage> pair = playerToLocation.remove(player.getUniqueId());
|
UUID uuid = player.getUniqueId();
|
||||||
if (pair == null) {
|
Pair<Location, DisplayMessage> pair = playerToLocation.remove(uuid);
|
||||||
return;
|
if (pair != null) {
|
||||||
}
|
|
||||||
HamsterBallPlugin.sync(() -> {
|
|
||||||
player.teleport(pair.getKey(), PlayerTeleportEvent.TeleportCause.PLUGIN);
|
player.teleport(pair.getKey(), PlayerTeleportEvent.TeleportCause.PLUGIN);
|
||||||
if (pair.getValue() != null) {
|
if (pair.getValue() != null) {
|
||||||
Audience audience = CoreBukkitAPI.getInstance().getAudienceProvider().player(player);
|
Audience audience = CoreBukkitAPI.getInstance().getAudienceProvider().player(player);
|
||||||
pair.getValue().show(audience);
|
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>
|
* <p>
|
||||||
* 支持跨服传送
|
* 支持跨服传送
|
||||||
*
|
*
|
||||||
* @param sendPlayer 被传送的玩家
|
* @param sendPlayer 被传送的玩家
|
||||||
* @param toPlayer 传送的目标玩家
|
* @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) {
|
public void sendPlayerToPlayer(@NotNull UUID sendPlayer, @NotNull UUID toPlayer, @Nullable DisplayMessage doneMessage, @Nullable DisplayMessage doneTargetMessage) {
|
||||||
sendBallMessage(
|
sendBallMessage(
|
||||||
@@ -579,9 +581,10 @@ public abstract class BallAPI {
|
|||||||
* <p>
|
* <p>
|
||||||
* 支持跨服传送
|
* 支持跨服传送
|
||||||
*
|
*
|
||||||
* @param sendPlayerUUID 被传送的玩家
|
* @param sendPlayerUUID 被传送的玩家
|
||||||
* @param toPlayer 传送的目标玩家
|
* @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) {
|
public void sendPlayerToPlayer(@NotNull Collection<UUID> sendPlayerUUID, @NotNull UUID toPlayer, @Nullable DisplayMessage doneMessage, @Nullable DisplayMessage doneTargetMessage) {
|
||||||
sendBallMessage(
|
sendBallMessage(
|
||||||
|
Reference in New Issue
Block a user