修复增强聊天信息中,一个可能导致数据竞争的问题

This commit is contained in:
2024-12-26 23:51:50 +08:00
parent e5502384bc
commit 970c2c5cfd

View File

@@ -3,14 +3,17 @@ package ling.coordinateRecorder.Listener;
import ling.coordinateRecorder.CoordinateRecorder; import ling.coordinateRecorder.CoordinateRecorder;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
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.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.util.HashMap; import java.util.HashMap;
import java.util.Set;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@@ -39,17 +42,7 @@ public class ChatEnhancement implements Listener {
return map.get(n); return map.get(n);
} }
@EventHandler protected void playerChat(Player player, String message, Set<Player> list) {
public void onPlayerChat(AsyncPlayerChatEvent event) {
Player player = event.getPlayer();
String message = event.getMessage();
ItemStack mainHandItem = player.getInventory().getItemInMainHand();
if (mainHandItem.getType() == Material.AIR)
return;
//BaseComponent item = CoordinateRecorder.getItemShowService().addItem(mainHandItem);
HashMap<Integer, BaseComponent> hashMap = new HashMap<>(); HashMap<Integer, BaseComponent> hashMap = new HashMap<>();
// 输出消息 // 输出消息
@@ -90,18 +83,24 @@ public class ChatEnhancement implements Listener {
finalMessage.addExtra(remainingText); finalMessage.addExtra(remainingText);
} }
/* for (Player recipient : list) {
String[] parts = message.split("\\[item\\]", -1);
for (int i = 0; i < parts.length; i++) {
finalMessage.addExtra(new TextComponent(parts[i]));
if (i < parts.length - 1) {
finalMessage.addExtra(item);
}
}*/
for (Player recipient : event.getRecipients()) {
recipient.spigot().sendMessage(finalMessage); recipient.spigot().sendMessage(finalMessage);
} }
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onPlayerChat(AsyncPlayerChatEvent event) {
Player player = event.getPlayer();
String message = event.getMessage();
event.setCancelled(true); event.setCancelled(true);
Set<Player> list = event.getRecipients();
if (event.isAsynchronous()) {
Bukkit.getScheduler().runTask(CoordinateRecorder.getCurrent(), () -> {
playerChat(player, message, list);
});
} else {
playerChat(player, message, list);
}
} }
} }