Compare commits

..

No commits in common. "master" and "v3.4.2" have entirely different histories.

12 changed files with 110 additions and 236 deletions

View File

@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>mineverse.Aust1n46.chat</groupId> <groupId>mineverse.Aust1n46.chat</groupId>
<artifactId>VentureChat</artifactId> <artifactId>VentureChat</artifactId>
<version>3.7.2</version> <version>3.4.2</version>
<url>https://bitbucket.org/Aust1n46/venturechat/src/master</url> <url>https://bitbucket.org/Aust1n46/venturechat/src/master</url>
<scm> <scm>
<url>https://bitbucket.org/Aust1n46/venturechat/src/master</url> <url>https://bitbucket.org/Aust1n46/venturechat/src/master</url>
@ -204,21 +204,21 @@
<dependency> <dependency>
<groupId>net.md-5</groupId> <groupId>net.md-5</groupId>
<artifactId>bungeecord-api</artifactId> <artifactId>bungeecord-api</artifactId>
<version>1.20-R0.1-SNAPSHOT</version> <version>1.13-SNAPSHOT</version>
<type>jar</type> <type>jar</type>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>net.md-5</groupId> <groupId>net.md-5</groupId>
<artifactId>bungeecord-api</artifactId> <artifactId>bungeecord-api</artifactId>
<version>1.20-R0.1-SNAPSHOT</version> <version>1.13-SNAPSHOT</version>
<type>javadoc</type> <type>javadoc</type>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.spigotmc</groupId> <groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId> <artifactId>spigot-api</artifactId>
<version>1.20-R0.1-SNAPSHOT</version> <version>1.19-R0.1-SNAPSHOT</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>

View File

@ -1,16 +0,0 @@
package mineverse.Aust1n46.chat;
public enum ClickAction {
SUGGEST_COMMAND, RUN_COMMAND, OPEN_URL, NONE;
private final String jsonValue;
ClickAction() {
jsonValue = name().toLowerCase();
}
@Override
public String toString() {
return jsonValue;
}
}

View File

@ -78,17 +78,6 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
// Vault // Vault
private static Permission permission = null; private static Permission permission = null;
private static Chat chat = null; private static Chat chat = null;
// TODO: This won't be so poorly done in the 4.0.0 branch I promise...
public static boolean isConnectedToProxy() {
try {
final MineverseChat plugin = MineverseChat.getInstance();
return (plugin.getServer().spigot().getConfig().getBoolean("settings.bungeecord")
|| plugin.getServer().spigot().getPaperConfig().getBoolean("settings.velocity-support.enabled")
|| plugin.getServer().spigot().getPaperConfig().getBoolean("proxies.velocity.enabled"));
} catch (final NoSuchMethodError ignored) {} // Thrown if server isn't Paper.
return false;
}
@Override @Override
public void onEnable() { public void onEnable() {
@ -136,12 +125,10 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
registerListeners(); registerListeners();
Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Registering Listeners")); Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Registering Listeners"));
Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Attaching to Executors")); Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Attaching to Executors"));
if (MineverseChat.isConnectedToProxy()) { Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Establishing BungeeCord"));
Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Establishing BungeeCord")); Bukkit.getMessenger().registerOutgoingPluginChannel(this, PLUGIN_MESSAGING_CHANNEL);
Bukkit.getMessenger().registerOutgoingPluginChannel(this, PLUGIN_MESSAGING_CHANNEL); Bukkit.getMessenger().registerIncomingPluginChannel(this, PLUGIN_MESSAGING_CHANNEL, this);
Bukkit.getMessenger().registerIncomingPluginChannel(this, PLUGIN_MESSAGING_CHANNEL, this);
}
PluginManager pluginManager = getServer().getPluginManager(); PluginManager pluginManager = getServer().getPluginManager();
if(pluginManager.isPluginEnabled("Towny")) { if(pluginManager.isPluginEnabled("Towny")) {
@ -216,7 +203,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
} }
} }
} }
if (getConfig().getString("loglevel", "info").equals("trace")) { if (getConfig().getString("loglevel", "info").equals("debug")) {
Bukkit.getConsoleSender() Bukkit.getConsoleSender()
.sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Updating Player Mutes")); .sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Updating Player Mutes"));
} }
@ -376,9 +363,6 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
@Override @Override
public void onPluginMessageReceived(String channel, Player player, byte[] inputStream) { public void onPluginMessageReceived(String channel, Player player, byte[] inputStream) {
if (!MineverseChat.isConnectedToProxy()) {
return;
}
if(!channel.equals(PLUGIN_MESSAGING_CHANNEL)) { if(!channel.equals(PLUGIN_MESSAGING_CHANNEL)) {
return; return;
} }
@ -447,7 +431,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
if(getConfig().getBoolean("ignorechat", false)) { if(getConfig().getBoolean("ignorechat", false)) {
if(!p.getIgnores().contains(senderUUID)) { if(!p.getIgnores().contains(senderUUID)) {
// System.out.println("Chat sent"); // System.out.println("Chat sent");
Format.sendPacketPlayOutChat(p.getPlayer(), packet); Format.sendPacketPlayOutChat(p.getPlayer(), packet);
} }
continue; continue;
} }
@ -621,15 +605,6 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
sendPluginMessage(stream); sendPluginMessage(stream);
return; return;
} }
if (p.getPlayer().hasPermission("venturechat.ignore.bypass")) {
out.writeUTF("Ignore");
out.writeUTF("Bypass");
out.writeUTF(server);
out.writeUTF(receiver);
out.writeUTF(sender.toString());
sendPluginMessage(stream);
return;
}
out.writeUTF("Ignore"); out.writeUTF("Ignore");
out.writeUTF("Echo"); out.writeUTF("Echo");
out.writeUTF(server); out.writeUTF(server);
@ -665,12 +640,6 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
.replace("{player}", receiverName)); .replace("{player}", receiverName));
synchronize(p, true); synchronize(p, true);
} }
if(identifier.equals("Bypass")) {
String receiver = msgin.readUTF();
UUID sender = UUID.fromString(msgin.readUTF());
MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(sender);
p.getPlayer().sendMessage(LocalizedMessage.IGNORE_PLAYER_CANT.toString().replace("{player}", receiver));
}
} }
if(subchannel.equals("Mute")) { if(subchannel.equals("Mute")) {
String identifier = msgin.readUTF(); String identifier = msgin.readUTF();

View File

@ -2,15 +2,13 @@ package mineverse.Aust1n46.chat.json;
import java.util.List; import java.util.List;
import mineverse.Aust1n46.chat.ClickAction;
public class JsonAttribute { public class JsonAttribute {
private String name; private String name;
private List<String> hoverText; private List<String> hoverText;
private ClickAction clickAction; private String clickAction;
private String clickText; private String clickText;
public JsonAttribute(String name, List<String> hoverText, ClickAction clickAction, String clickText) { public JsonAttribute(String name, List<String> hoverText, String clickAction, String clickText) {
this.name = name; this.name = name;
this.hoverText = hoverText; this.hoverText = hoverText;
this.clickAction = clickAction; this.clickAction = clickAction;
@ -25,7 +23,7 @@ public class JsonAttribute {
return hoverText; return hoverText;
} }
public ClickAction getClickAction() { public String getClickAction() {
return clickAction; return clickAction;
} }

View File

@ -7,66 +7,58 @@ import java.util.List;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import mineverse.Aust1n46.chat.ClickAction;
import mineverse.Aust1n46.chat.MineverseChat; import mineverse.Aust1n46.chat.MineverseChat;
import mineverse.Aust1n46.chat.utilities.Format;
public class JsonFormat { public class JsonFormat {
private static MineverseChat plugin = MineverseChat.getInstance(); private static MineverseChat plugin = MineverseChat.getInstance();
private static HashMap<String, JsonFormat> jsonFormats; private static HashMap<String, JsonFormat> jsonFormats;
private List<JsonAttribute> jsonAttributes; private List<JsonAttribute> jsonAttributes;
private int priority; private int priority;
private String name; private String name;
public JsonFormat(String name, int priority, List<JsonAttribute> jsonAttributes) { public JsonFormat(String name, int priority, List<JsonAttribute> jsonAttributes) {
this.name = name; this.name = name;
this.priority = priority; this.priority = priority;
this.jsonAttributes = jsonAttributes; this.jsonAttributes = jsonAttributes;
} }
public static void initialize() { public static void initialize() {
jsonFormats = new HashMap<String, JsonFormat>(); jsonFormats = new HashMap<String, JsonFormat>();
ConfigurationSection jsonFormatSection = plugin.getConfig().getConfigurationSection("jsonformatting"); ConfigurationSection jsonFormatSection = plugin.getConfig().getConfigurationSection("jsonformatting");
for (String jsonFormat : jsonFormatSection.getKeys(false)) { for (String jsonFormat : jsonFormatSection.getKeys(false)) {
int priority = jsonFormatSection.getInt(jsonFormat + ".priority", 0); int priority = jsonFormatSection.getInt(jsonFormat + ".priority", 0);
List<JsonAttribute> jsonAttributes = new ArrayList<>(); List<JsonAttribute> jsonAttributes = new ArrayList<>();
ConfigurationSection jsonAttributeSection = jsonFormatSection.getConfigurationSection(jsonFormat + ".json_attributes"); ConfigurationSection jsonAttributeSection = jsonFormatSection.getConfigurationSection(jsonFormat + ".json_attributes");
if (jsonAttributeSection != null) { if (jsonAttributeSection != null) {
for (String attribute : jsonAttributeSection.getKeys(false)) { for (String attribute : jsonAttributeSection.getKeys(false)) {
List<String> hoverText = jsonAttributeSection.getStringList(attribute + ".hover_text"); List<String> hoverText = jsonAttributeSection.getStringList(attribute + ".hover_text");
String clickActionText = jsonAttributeSection.getString(attribute + ".click_action", "none"); String clickAction = jsonAttributeSection.getString(attribute + ".click_action", "");
try { String clickText = jsonAttributeSection.getString(attribute + ".click_text", "");
ClickAction clickAction = ClickAction.valueOf(clickActionText.toUpperCase()); jsonAttributes.add(new JsonAttribute(attribute, hoverText, clickAction, clickText));
String clickText = jsonAttributeSection.getString(attribute + ".click_text", ""); }
jsonAttributes.add(new JsonAttribute(attribute, hoverText, clickAction, clickText)); }
} catch (IllegalArgumentException | NullPointerException exception) { jsonFormats.put(jsonFormat.toLowerCase(), new JsonFormat(jsonFormat, priority, jsonAttributes));
plugin.getServer().getConsoleSender() }
.sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - Illegal click_action: " + clickActionText + " in jsonFormat: " + jsonFormat)); }
}
}
}
jsonFormats.put(jsonFormat.toLowerCase(), new JsonFormat(jsonFormat, priority, jsonAttributes));
}
}
public static Collection<JsonFormat> getJsonFormats() { public static Collection<JsonFormat> getJsonFormats() {
return jsonFormats.values(); return jsonFormats.values();
} }
public static JsonFormat getJsonFormat(String name) { public static JsonFormat getJsonFormat(String name) {
return jsonFormats.get(name.toLowerCase()); return jsonFormats.get(name.toLowerCase());
} }
public String getName() { public String getName() {
return name; return name;
} }
public int getPriority() { public int getPriority() {
return priority; return priority;
} }
public List<JsonAttribute> getJsonAttributes() { public List<JsonAttribute> getJsonAttributes() {
return jsonAttributes; return jsonAttributes;
} }
} }

View File

@ -72,15 +72,20 @@ public class LoginListener implements Listener {
mcp.addListening(ch.getName()); mcp.addListening(ch.getName());
} }
} }
if (MineverseChat.isConnectedToProxy()) { try {
long delayInTicks = 20L; if(plugin.getServer().spigot().getConfig().getBoolean("settings.bungeecord") || plugin.getServer().spigot().getPaperConfig().getBoolean("settings.velocity-support.enabled")) {
final MineverseChatPlayer sync = mcp; long delayInTicks = 20L;
plugin.getServer().getScheduler().runTaskLaterAsynchronously(plugin, new Runnable() { final MineverseChatPlayer sync = mcp;
public void run() { plugin.getServer().getScheduler().runTaskLaterAsynchronously(plugin, new Runnable() {
MineverseChat.synchronize(sync, false); public void run() {
} MineverseChat.synchronize(sync, false);
}, delayInTicks); }
}, delayInTicks);
}
}
catch(NoSuchMethodError exception) { // Thrown if server isn't Paper.
// Do nothing
} }
} }
} }

View File

@ -105,9 +105,6 @@ public class VentureChatBungee extends Plugin implements Listener, VentureChatPr
if(!event.getTag().equals(VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_STRING) && !event.getTag().contains("viaversion:")) { if(!event.getTag().equals(VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_STRING) && !event.getTag().contains("viaversion:")) {
return; return;
} }
// Critical to prevent client from sending or receiving messages
event.setCancelled(true);
if(!(event.getSender() instanceof Server)) { if(!(event.getSender() instanceof Server)) {
return; return;
} }

View File

@ -205,18 +205,6 @@ public class VentureChatProxy {
source.sendPluginMessage(server, outstream.toByteArray()); source.sendPluginMessage(server, outstream.toByteArray());
} }
} }
if(identifier.equals("Bypass")) {
String server = in.readUTF();
String player = in.readUTF();
String sender = in.readUTF();
out.writeUTF("Ignore");
out.writeUTF("Bypass");
out.writeUTF(player);
out.writeUTF(sender);
if(!source.getServer(server).isEmpty()) {
source.sendPluginMessage(server, outstream.toByteArray());
}
}
} }
if(subchannel.equals("Mute")) { if(subchannel.equals("Mute")) {
String identifier = in.readUTF(); String identifier = in.readUTF();

View File

@ -134,14 +134,12 @@ public class VentureChatVelocity implements VentureChatProxySource {
if(!channelIdentifierId.equals(VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_STRING) && !channelIdentifierId.contains("viaversion:")) { if(!channelIdentifierId.equals(VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_STRING) && !channelIdentifierId.contains("viaversion:")) {
return; return;
} }
// Critical to prevent client from sending or receiving messages
event.setResult(ForwardResult.handled());
if(!(event.getSource() instanceof ServerConnection)) { if(!(event.getSource() instanceof ServerConnection)) {
return; return;
} }
String serverName = ((ServerConnection) event.getSource()).getServerInfo().getName(); String serverName = ((ServerConnection) event.getSource()).getServerInfo().getName();
VentureChatProxy.onPluginMessage(event.getData(), serverName, this); VentureChatProxy.onPluginMessage(event.getData(), serverName, this);
event.setResult(ForwardResult.handled());
} }
@Override @Override

View File

@ -10,7 +10,6 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Sound; import org.bukkit.Sound;
@ -23,7 +22,6 @@ import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.wrappers.WrappedChatComponent; import com.comphenix.protocol.wrappers.WrappedChatComponent;
import me.clip.placeholderapi.PlaceholderAPI; import me.clip.placeholderapi.PlaceholderAPI;
import mineverse.Aust1n46.chat.ClickAction;
import mineverse.Aust1n46.chat.api.MineverseChatAPI; import mineverse.Aust1n46.chat.api.MineverseChatAPI;
import mineverse.Aust1n46.chat.api.MineverseChatPlayer; import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
import mineverse.Aust1n46.chat.json.JsonAttribute; import mineverse.Aust1n46.chat.json.JsonAttribute;
@ -68,9 +66,10 @@ public class Format {
*/ */
public static String convertToJson(MineverseChatPlayer sender, String format, String chat) { public static String convertToJson(MineverseChatPlayer sender, String format, String chat) {
JsonFormat JSONformat = JsonFormat.getJsonFormat(sender.getJsonFormat()); JsonFormat JSONformat = JsonFormat.getJsonFormat(sender.getJsonFormat());
String f = escapeJsonChars(format);
String c = escapeJsonChars(chat); String c = escapeJsonChars(chat);
String json = "[\"\",{\"text\":\"\",\"extra\":["; String json = "[\"\",{\"text\":\"\",\"extra\":[";
json += convertPlaceholders(format, JSONformat, sender); json += convertPlaceholders(f, JSONformat, sender);
json += "]}"; json += "]}";
json += "," + convertLinks(c); json += "," + convertLinks(c);
json += "]"; json += "]";
@ -110,48 +109,31 @@ public class Format {
indexStart = matcher.start(); indexStart = matcher.start();
indexEnd = matcher.end(); indexEnd = matcher.end();
placeholder = remaining.substring(indexStart, indexEnd); placeholder = remaining.substring(indexStart, indexEnd);
formattedPlaceholder = escapeJsonChars(Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), placeholder))); formattedPlaceholder = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), placeholder));
temp += convertToJsonColors(escapeJsonChars(lastCode + remaining.substring(0, indexStart))) + ","; temp += convertToJsonColors(lastCode + remaining.substring(0, indexStart)) + ",";
lastCode = getLastCode(lastCode + remaining.substring(0, indexStart)); lastCode = getLastCode(lastCode + remaining.substring(0, indexStart));
boolean placeholderHasJsonAttribute = false; String action = "";
String text = "";
String hover = "";
for (JsonAttribute jsonAttribute : format.getJsonAttributes()) { for (JsonAttribute jsonAttribute : format.getJsonAttributes()) {
if (placeholder.contains(jsonAttribute.getName().replace("{", "").replace("}", ""))) { if (placeholder.contains(jsonAttribute.getName().replace("{", "").replace("}", ""))) {
final StringBuilder hover = new StringBuilder(); action = jsonAttribute.getClickAction();
text = Format.FormatStringAll(
PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), jsonAttribute.getClickText()));
for (String st : jsonAttribute.getHoverText()) { for (String st : jsonAttribute.getHoverText()) {
hover.append(Format.FormatStringAll(st) + "\n"); hover += Format.FormatStringAll(st) + "\n";
} }
final String hoverText;
if(!hover.isEmpty()) {
hoverText = escapeJsonChars(Format.FormatStringAll(
PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), hover.substring(0, hover.length() - 1))));
} else {
hoverText = StringUtils.EMPTY;
}
final ClickAction clickAction = jsonAttribute.getClickAction();
final String actionJson;
if (clickAction == ClickAction.NONE) {
actionJson = StringUtils.EMPTY;
} else {
final String clickText = escapeJsonChars(Format.FormatStringAll(
PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), jsonAttribute.getClickText())));
actionJson = ",\"clickEvent\":{\"action\":\"" + jsonAttribute.getClickAction().toString() + "\",\"value\":\"" + clickText
+ "\"}";
}
final String hoverJson;
if (hoverText.isEmpty()) {
hoverJson = StringUtils.EMPTY;
} else {
hoverJson = ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":["
+ convertToJsonColors(hoverText) + "]}}";
}
temp += convertToJsonColors(lastCode + formattedPlaceholder, actionJson + hoverJson) + ",";
placeholderHasJsonAttribute = true;
break;
} }
} }
if (!placeholderHasJsonAttribute) { if(!hover.isEmpty()) {
temp += convertToJsonColors(lastCode + formattedPlaceholder) + ","; hover = Format.FormatStringAll(
PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), hover.substring(0, hover.length() - 1)));
} }
temp += convertToJsonColors(lastCode + formattedPlaceholder,
",\"clickEvent\":{\"action\":\"" + action + "\",\"value\":\"" + text
+ "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":["
+ convertToJsonColors(hover) + "]}}")
+ ",";
lastCode = getLastCode(lastCode + formattedPlaceholder); lastCode = getLastCode(lastCode + formattedPlaceholder);
remaining = remaining.substring(indexEnd); remaining = remaining.substring(indexEnd);
} else { } else {
@ -190,8 +172,8 @@ public class Format {
if (ChatColor.stripColor(link).contains("https://")) if (ChatColor.stripColor(link).contains("https://"))
https = "s"; https = "s";
temp += convertToJsonColors(lastCode + link, temp += convertToJsonColors(lastCode + link,
",\"underlined\":" + underlineURLs() ",\"underlined\":\"" + underlineURLs()
+ ",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"http" + https + "://" + "\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"http" + https + "://"
+ ChatColor.stripColor(link.replace("http://", "").replace("https://", "")) + ChatColor.stripColor(link.replace("http://", "").replace("https://", ""))
+ "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":["
+ convertToJsonColors(lastCode + link) + "]}}") + convertToJsonColors(lastCode + link) + "]}}")
@ -343,35 +325,15 @@ public class Format {
underlined = false; underlined = false;
} }
if (bold) if (bold)
if (VersionHandler.isAtLeast_1_20_4()) { modifier += ",\"bold\":\"true\"";
modifier += ",\"bold\":true";
} else {
modifier += ",\"bold\":\"true\"";
}
if (obfuscated) if (obfuscated)
if (VersionHandler.isAtLeast_1_20_4()) { modifier += ",\"obfuscated\":\"true\"";
modifier += ",\"obfuscated\":true";
} else {
modifier += ",\"obfuscated\":\"true\"";
}
if (italic) if (italic)
if (VersionHandler.isAtLeast_1_20_4()) { modifier += ",\"italic\":\"true\"";
modifier += ",\"italic\":true";
} else {
modifier += ",\"italic\":\"true\"";
}
if (underlined) if (underlined)
if (VersionHandler.isAtLeast_1_20_4()) { modifier += ",\"underlined\":\"true\"";
modifier += ",\"underlined\":true";
} else {
modifier += ",\"underlined\":\"true\"";
}
if (strikethrough) if (strikethrough)
if (VersionHandler.isAtLeast_1_20_4()) { modifier += ",\"strikethrough\":\"true\"";
modifier += ",\"strikethrough\":true";
} else {
modifier += ",\"strikethrough\":\"true\"";
}
remaining = remaining.substring(colorLength); remaining = remaining.substring(colorLength);
colorLength = LEGACY_COLOR_CODE_LENGTH; colorLength = LEGACY_COLOR_CODE_LENGTH;
indexNextColor = remaining.indexOf(BUKKIT_COLOR_CODE_PREFIX); indexNextColor = remaining.indexOf(BUKKIT_COLOR_CODE_PREFIX);
@ -468,20 +430,16 @@ public class Format {
public static PacketContainer createPacketPlayOutChat(String json) { public static PacketContainer createPacketPlayOutChat(String json) {
final PacketContainer container; final PacketContainer container;
if (VersionHandler.isAtLeast_1_20_4()) { // 1.20.4+ if (VersionHandler.isAbove_1_19()) {
container = new PacketContainer(PacketType.Play.Server.SYSTEM_CHAT);
container.getChatComponents().write(0, WrappedChatComponent.fromJson(json));
container.getBooleans().write(0, false);
} else if (VersionHandler.isAbove_1_19()) { // 1.19.1 -> 1.20.3
container = new PacketContainer(PacketType.Play.Server.SYSTEM_CHAT); container = new PacketContainer(PacketType.Play.Server.SYSTEM_CHAT);
container.getStrings().write(0, json); container.getStrings().write(0, json);
container.getBooleans().write(0, false); container.getBooleans().write(0, false);
} else if (VersionHandler.isUnder_1_19()) { // 1.7 -> 1.19 } else if (VersionHandler.isUnder_1_19()) {
WrappedChatComponent component = WrappedChatComponent.fromJson(json); WrappedChatComponent component = WrappedChatComponent.fromJson(json);
container = new PacketContainer(PacketType.Play.Server.CHAT); container = new PacketContainer(PacketType.Play.Server.CHAT);
container.getModifier().writeDefaults(); container.getModifier().writeDefaults();
container.getChatComponents().write(0, component); container.getChatComponents().write(0, component);
} else { // 1.19 } else {
container = new PacketContainer(PacketType.Play.Server.SYSTEM_CHAT); container = new PacketContainer(PacketType.Play.Server.SYSTEM_CHAT);
container.getStrings().write(0, json); container.getStrings().write(0, json);
container.getIntegers().write(0, 1); container.getIntegers().write(0, 1);
@ -491,19 +449,15 @@ public class Format {
public static PacketContainer createPacketPlayOutChat(WrappedChatComponent component) { public static PacketContainer createPacketPlayOutChat(WrappedChatComponent component) {
final PacketContainer container; final PacketContainer container;
if (VersionHandler.isAtLeast_1_20_4()) { // 1.20.4+ if (VersionHandler.isAbove_1_19()) {
container = new PacketContainer(PacketType.Play.Server.SYSTEM_CHAT);
container.getChatComponents().write(0, component);
container.getBooleans().write(0, false);
} else if (VersionHandler.isAbove_1_19()) { // 1.19.1 -> 1.20.3
container = new PacketContainer(PacketType.Play.Server.SYSTEM_CHAT); container = new PacketContainer(PacketType.Play.Server.SYSTEM_CHAT);
container.getStrings().write(0, component.getJson()); container.getStrings().write(0, component.getJson());
container.getBooleans().write(0, false); container.getBooleans().write(0, false);
} else if (VersionHandler.isUnder_1_19()) { // 1.7 -> 1.19 } else if (VersionHandler.isUnder_1_19()) {
container = new PacketContainer(PacketType.Play.Server.CHAT); container = new PacketContainer(PacketType.Play.Server.CHAT);
container.getModifier().writeDefaults(); container.getModifier().writeDefaults();
container.getChatComponents().write(0, component); container.getChatComponents().write(0, component);
} else { // 1.19 } else {
container = new PacketContainer(PacketType.Play.Server.SYSTEM_CHAT); container = new PacketContainer(PacketType.Play.Server.SYSTEM_CHAT);
container.getStrings().write(0, component.getJson()); container.getStrings().write(0, component.getJson());
container.getIntegers().write(0, 1); container.getIntegers().write(0, 1);
@ -811,13 +765,8 @@ public class Format {
.replace(")", "\\)").replace("|", "\\|").replace("+", "\\+").replace("*", "\\*"); .replace(")", "\\)").replace("|", "\\|").replace("+", "\\+").replace("*", "\\*");
} }
public static String underlineURLs() { public static boolean underlineURLs() {
final boolean configValue = getInstance().getConfig().getBoolean("underlineurls", true); return getInstance().getConfig().getBoolean("underlineurls", true);
if (VersionHandler.isAtLeast_1_20_4()) {
return String.valueOf(configValue);
} else {
return "\"" + configValue + "\"";
}
} }
public static String parseTimeStringFromMillis(long millis) { public static String parseTimeStringFromMillis(long millis) {

View File

@ -2,12 +2,10 @@ package mineverse.Aust1n46.chat.versions;
import com.comphenix.protocol.utility.MinecraftVersion; import com.comphenix.protocol.utility.MinecraftVersion;
//This class contains methods for determining what version of Minecraft the server is running.
public final class VersionHandler { public final class VersionHandler {
public static final MinecraftVersion SERVER_VERSION = MinecraftVersion.getCurrentVersion(); public static final MinecraftVersion SERVER_VERSION = MinecraftVersion.getCurrentVersion();
private static final MinecraftVersion MC1_19 = new MinecraftVersion(1, 19, 0);
private static final MinecraftVersion MC1_19_1 = new MinecraftVersion(1, 19, 1);
private static final MinecraftVersion MC1_20_4 = new MinecraftVersion(1, 20, 4);
private VersionHandler() { private VersionHandler() {
} }
@ -69,14 +67,10 @@ public final class VersionHandler {
} }
public static boolean isUnder_1_19() { public static boolean isUnder_1_19() {
return !SERVER_VERSION.isAtLeast(MC1_19); return !SERVER_VERSION.isAtLeast(MinecraftVersion.WILD_UPDATE);
} }
public static boolean isAbove_1_19() { public static boolean isAbove_1_19() {
return SERVER_VERSION.isAtLeast(MC1_19_1); return !is1_19() && SERVER_VERSION.isAtLeast(MinecraftVersion.WILD_UPDATE);
}
public static boolean isAtLeast_1_20_4() {
return SERVER_VERSION.isAtLeast(MC1_20_4);
} }
} }

View File

@ -136,7 +136,7 @@ messageremovertext: '&c&o<message removed>'
# The name of the group is the permissions node for the format # The name of the group is the permissions node for the format
# Example: venturechat.json.Owner is the node for the group Owner # Example: venturechat.json.Owner is the node for the group Owner
# A lower priority overrides a higher priority if a player has more than 1 group # A lower priority overrides a higher priority if a player has more than 1 group
# Possible options for click_action are suggest_command, run_command, open_url, and none # Possible options for click_name and click_prefix are suggest_command, run_command, and open_url
jsonformatting: jsonformatting:
Default: # This default format is required! Do not delete or rename it! Default: # This default format is required! Do not delete or rename it!
priority: 2147483647 # Integer.MAX_VALUE priority: 2147483647 # Integer.MAX_VALUE