允许使用[1-41]标签来展示玩家背包内指定标号的格子内的物品
This commit is contained in:
@@ -10,29 +10,94 @@ import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/// 增强聊天信息
|
||||
public class ChatEnhancement implements Listener {
|
||||
private static final Pattern pattern = Pattern.compile("\\[item\\]|\\[(\\d{1,2})\\]");
|
||||
|
||||
protected static BaseComponent getComponent(HashMap<Integer, BaseComponent> map, Player player, int n) {
|
||||
if (map.containsKey(n)) {
|
||||
return map.get(n);
|
||||
}
|
||||
if (n < 0 || n > 41) {
|
||||
return null;
|
||||
}
|
||||
if (n == 0) {
|
||||
ItemStack mainHandItem = player.getInventory().getItemInMainHand();
|
||||
if (mainHandItem.getType() == Material.AIR)
|
||||
return null;
|
||||
map.put(0, CoordinateRecorder.getItemShowService().addItem(mainHandItem));
|
||||
return map.get(0);
|
||||
}
|
||||
ItemStack item = player.getInventory().getItem(n - 1);
|
||||
if (item == null || item.getType() == Material.AIR)
|
||||
return null;
|
||||
map.put(n, CoordinateRecorder.getItemShowService().addItem(item));
|
||||
return map.get(n);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerChat(AsyncPlayerChatEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
String message = event.getMessage();
|
||||
if (!message.contains("[item]"))
|
||||
return;
|
||||
|
||||
ItemStack mainHandItem = player.getInventory().getItemInMainHand();
|
||||
if (mainHandItem.getType() == Material.AIR)
|
||||
return;
|
||||
|
||||
BaseComponent item = CoordinateRecorder.getItemShowService().addItem(mainHandItem);
|
||||
//BaseComponent item = CoordinateRecorder.getItemShowService().addItem(mainHandItem);
|
||||
|
||||
String[] parts = message.split("\\[item\\]", -1);
|
||||
HashMap<Integer, BaseComponent> hashMap = new HashMap<>();
|
||||
|
||||
// 输出消息
|
||||
TextComponent finalMessage = new TextComponent("<" + player.getName() + "> ");
|
||||
|
||||
Matcher matcher = pattern.matcher(message);
|
||||
// 记录上一个匹配项的结束位置
|
||||
int lastMatchEnd = 0;
|
||||
while (matcher.find()) {
|
||||
// 获取当前匹配项之前的子串(上一个匹配项之后到当前匹配项之前的部分)
|
||||
String substringBeforeCurrentTag = message.substring(lastMatchEnd, matcher.start());
|
||||
lastMatchEnd = matcher.end();
|
||||
finalMessage.addExtra(substringBeforeCurrentTag);
|
||||
//主手
|
||||
if (matcher.group(0).equals("[item]")) {
|
||||
BaseComponent component = getComponent(hashMap, player, 0);
|
||||
if (component != null)
|
||||
finalMessage.addExtra(component);
|
||||
else
|
||||
finalMessage.addExtra(matcher.group(0));
|
||||
} else {
|
||||
//指定格子
|
||||
try {
|
||||
int index = Integer.parseInt(matcher.group(1));
|
||||
BaseComponent component = getComponent(hashMap, player, index);
|
||||
if (component != null)
|
||||
finalMessage.addExtra(component);
|
||||
else
|
||||
finalMessage.addExtra(matcher.group(0));
|
||||
} catch (NumberFormatException e) {
|
||||
finalMessage.addExtra(matcher.group(0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (lastMatchEnd < message.length()) {
|
||||
String remainingText = message.substring(lastMatchEnd);
|
||||
finalMessage.addExtra(remainingText);
|
||||
}
|
||||
|
||||
/*
|
||||
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);
|
||||
|
||||
@@ -46,6 +46,7 @@ public class ItemShowService implements Service {
|
||||
lockFlag.set(false);
|
||||
}
|
||||
|
||||
@SuppressWarnings("ExtractMethodRecommender")
|
||||
public BaseComponent addItem(ItemStack item) {
|
||||
assert item.getItemMeta() != null;
|
||||
lock();
|
||||
@@ -59,6 +60,9 @@ public class ItemShowService implements Service {
|
||||
}
|
||||
BaseComponent message = new TextComponent("[");
|
||||
message.addExtra(itemName);
|
||||
if (item.getAmount() > 1) {
|
||||
message.addExtra("*" + item.getAmount());
|
||||
}
|
||||
message.addExtra("]");
|
||||
message.setColor(ChatColor.YELLOW);
|
||||
message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("点击查看物品详情")));
|
||||
|
||||
Reference in New Issue
Block a user