"Cannot resolve constructor"我需要帮助知道程序出错的地方



我正在尝试更新这个Spigot插件,但在处理聊天的部分收到了一个错误。我已经更新了API,相同的代码部分适用于以前的版本,所以我猜需要一些新的东西,但我不知道是什么。

相关库为craftbukkit-1.16.3-R0.1-SNAPSHOT

无法解析构造函数"PacketPlayOutChat(net.minecraft.server.v1_16_R2.IChatMutableComponent(">

这是Intellij:中引发错误的特殊代码段

public void sendJson(Player p) {
((CraftPlayer) p).getHandle().playerConnection.sendPacket(new PacketPlayOutChat(ChatSerializer.a(toString())));
}

这是java类的其余部分,以防其中的某些内容与问题有关。

package me.karasumori.applymc.utils.common;
import net.minecraft.server.v1_16_R2.IChatBaseComponent.ChatSerializer;
import net.minecraft.server.v1_16_R2.PacketPlayOutChat;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
public class JsonBuilder {
public enum ClickAction {
RUN_COMMAND, SUGGEST_COMMAND, OPEN_URL
}
public enum HoverAction {
SHOW_TEXT
}
private List<String> extras = new ArrayList<>();
public JsonBuilder(String... text) {
for (String extra : text)
parse(extra);
}
public JsonBuilder parse(String text) {
String regex = "[&�]{1}([a-fA-Fl-oL-O0-9]){1}";
text = text.replaceAll(regex, "�$1");
if (!Pattern.compile(regex).matcher(text).find()) {
withText(text);
return this;
}
String[] words = text.split(regex);
int index = words[0].length();
for (String word : words) {
try {
if (index != words[0].length())
withText(word).withColor("�" + text.charAt(index - 1));
} catch (Exception e) {
e.printStackTrace();
}
index += word.length() + 2;
}
return this;
}
public JsonBuilder withText(String text) {
extras.add("{text:"" + text + ""}");
return this;
}
public JsonBuilder withColor(ChatColor color) {
String c = color.name().toLowerCase();
addSegment(color.isColor() ? "color:" + c : c + ":true");
return this;
}
public JsonBuilder withColor(String color) {
while (color.length() != 1)
color = color.substring(1).trim();
withColor(ChatColor.getByChar(color));
return this;
}
public JsonBuilder withClickEvent(ClickAction action, String value) {
addSegment("clickEvent:{action:" + action.toString().toLowerCase() + ",value:"" + value + ""}");
return this;
}
public JsonBuilder withHoverEvent(HoverAction action, String value) {
addSegment("hoverEvent:{action:" + action.toString().toLowerCase() + ",value:"" + value + ""}");
return this;
}
private void addSegment(String segment) {
String lastText = extras.get(extras.size() - 1);
lastText = lastText.substring(0, lastText.length() - 1) + "," + segment + "}";
extras.remove(extras.size() - 1);
extras.add(lastText);
}
public String toString() {
if (extras.size() <= 1)
return extras.size() == 0 ? "{text:""}" : extras.get(0);
String text = extras.get(0).substring(0, extras.get(0).length() - 1) + ",extra:[";
extras.remove(0);
;
for (String extra : extras)
text = text + extra + ",";
text = text.substring(0, text.length() - 1) + "]}";
return text;
}
public void sendJson(Player p) {
((CraftPlayer) p).getHandle().playerConnection.sendPacket(new PacketPlayOutChat(ChatSerializer.a(toString())));
}
public void sendAllJson() {
for (Player p : Bukkit.getOnlinePlayers())
sendJson(p);
}
}

我对java还不太了解,很抱歉,如果我的问题很模糊,

PacketPlayOutChat构造函数不排除ChatSerializer.a()返回的对象。它正在排除一个IChatMutableComponent对象。

在这里阅读更多关于java构造函数

最新更新