Update to 1.17.

Refactor away NMS reflection and replace with ProtocolLib reflection.
This commit is contained in:
Aust1n46 2021-06-16 22:51:34 -04:00
parent 00032823cc
commit 77eea94fad
6 changed files with 19 additions and 142 deletions

View File

@ -6,19 +6,15 @@ import java.io.DataInputStream;
import java.io.DataOutputStream; import java.io.DataOutputStream;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.Field;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.SimpleCommandMap;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.RegisteredServiceProvider;
@ -28,7 +24,6 @@ import org.bukkit.scheduler.BukkitScheduler;
import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.utility.MinecraftReflection;
import me.clip.placeholderapi.PlaceholderAPI; import me.clip.placeholderapi.PlaceholderAPI;
import mineverse.Aust1n46.chat.alias.Alias; import mineverse.Aust1n46.chat.alias.Alias;
@ -52,7 +47,6 @@ import mineverse.Aust1n46.chat.listeners.SignListener;
import mineverse.Aust1n46.chat.localization.Localization; import mineverse.Aust1n46.chat.localization.Localization;
import mineverse.Aust1n46.chat.localization.LocalizedMessage; import mineverse.Aust1n46.chat.localization.LocalizedMessage;
import mineverse.Aust1n46.chat.utilities.Format; import mineverse.Aust1n46.chat.utilities.Format;
import mineverse.Aust1n46.chat.versions.VersionHandler;
import net.milkbowl.vault.chat.Chat; import net.milkbowl.vault.chat.Chat;
import net.milkbowl.vault.permission.Permission; import net.milkbowl.vault.permission.Permission;
@ -83,12 +77,6 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
private static Permission permission = null; private static Permission permission = null;
private static Chat chat = null; private static Chat chat = null;
// NMS
private static Field posField;
private static Class<?> chatMessageType;
private static Field commandMap;
private static Field knownCommands;
@Override @Override
public void onEnable() { public void onEnable() {
ccInfo = new ChatChannelInfo(); ccInfo = new ChatChannelInfo();
@ -153,7 +141,6 @@ 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"));
loadNMS();
Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Attaching to Executors")); Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Attaching to Executors"));
Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Establishing BungeeCord")); Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Establishing BungeeCord"));
@ -241,18 +228,6 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
}, 0L, 60L); // three second interval }, 0L, 60L); // three second interval
} }
@SuppressWarnings("unused")
private void loadCommandMap() {
try {
commandMap = Bukkit.getServer().getClass().getDeclaredField("commandMap");
commandMap.setAccessible(true);
knownCommands = SimpleCommandMap.class.getDeclaredField("knownCommands");
knownCommands.setAccessible(true);
}
catch(Exception e) {
}
}
private void registerListeners() { private void registerListeners() {
PluginManager pluginManager = getServer().getPluginManager(); PluginManager pluginManager = getServer().getPluginManager();
pluginManager.registerEvents(new Channel(), this); pluginManager.registerEvents(new Channel(), this);
@ -263,43 +238,6 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
ProtocolLibrary.getProtocolManager().addPacketListener(new PacketListener()); ProtocolLibrary.getProtocolManager().addPacketListener(new PacketListener());
} }
private void loadNMS() {
try {
posField = MinecraftReflection.getMinecraftClass("PacketPlayOutChat").getDeclaredField("b");
posField.setAccessible(true);
//MineverseChat.messageMethod = MinecraftReflection.getMinecraftClass("ChatBaseComponent").getDeclaredMethod("getString");
//MineverseChat.messageMethod.setAccessible(true);
}
catch(Exception e) {
e.printStackTrace();
}
if(!VersionHandler.is1_7_10() && !VersionHandler.is1_8() && !VersionHandler.is1_9() && !VersionHandler.is1_10() && !VersionHandler.is1_11()) {
try {
chatMessageType = getNMSClass("ChatMessageType");
}
catch(Exception e) {
e.printStackTrace();
}
}
}
private Class<?> getNMSClass(String name) {
try {
return Class.forName("net.minecraft.server." + getVersion() + "." + name);
}
catch(ClassNotFoundException e) {
e.printStackTrace();
return null;
}
}
private String getVersion() {
return Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
}
private boolean setupPermissions() { private boolean setupPermissions() {
RegisteredServiceProvider<Permission> permissionProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class); RegisteredServiceProvider<Permission> permissionProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class);
if(permissionProvider != null) { if(permissionProvider != null) {
@ -320,23 +258,6 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
return getPlugin(MineverseChat.class); return getPlugin(MineverseChat.class);
} }
@SuppressWarnings("unchecked")
public static void unregister(String name) {
try {
((Map<String, Command>) knownCommands.get((SimpleCommandMap) commandMap.get(Bukkit.getServer()))).remove(name);
}
catch(Exception e) {
}
}
public static Field getPosField() {
return posField;
}
public static Class<?> getChatMessageType() {
return chatMessageType;
}
public static Chat getVaultChat() { public static Chat getVaultChat() {
return chat; return chat;
} }

View File

@ -76,7 +76,7 @@ public class VentureChatGui implements VentureCommand {
Inventory inv = Bukkit.createInventory(null, this.getSlots(), "VentureChat: " + target.getName() + " GUI"); Inventory inv = Bukkit.createInventory(null, this.getSlots(), "VentureChat: " + target.getName() + " GUI");
ItemStack close = null; ItemStack close = null;
ItemStack skull = null; ItemStack skull = null;
if(VersionHandler.is1_7_10()) { if(VersionHandler.is1_7()) {
close = new ItemStack(Material.BEDROCK); close = new ItemStack(Material.BEDROCK);
} }
else { else {
@ -135,7 +135,7 @@ public class VentureChatGui implements VentureCommand {
Inventory inv = Bukkit.createInventory(null, this.getSlots(), "VentureChat: Discord_Message GUI"); Inventory inv = Bukkit.createInventory(null, this.getSlots(), "VentureChat: Discord_Message GUI");
ItemStack close = null; ItemStack close = null;
ItemStack skull = null; ItemStack skull = null;
if(VersionHandler.is1_7_10()) { if(VersionHandler.is1_7()) {
close = new ItemStack(Material.BEDROCK); close = new ItemStack(Material.BEDROCK);
} }
else { else {

View File

@ -236,7 +236,7 @@ public class CommandListener implements CommandExecutor, Listener {
SkullMeta skullMeta = (SkullMeta) skull.getItemMeta(); SkullMeta skullMeta = (SkullMeta) skull.getItemMeta();
ChatChannel channel = ChatChannel.getChannel(ChatColor.stripColor(skullMeta.getLore().get(0)).replace("Channel: ", "")); ChatChannel channel = ChatChannel.getChannel(ChatColor.stripColor(skullMeta.getLore().get(0)).replace("Channel: ", ""));
int hash = Integer.parseInt(ChatColor.stripColor(skullMeta.getLore().get(1).replace("Hash: ", ""))); int hash = Integer.parseInt(ChatColor.stripColor(skullMeta.getLore().get(1).replace("Hash: ", "")));
if(VersionHandler.is1_7_10()) { if(VersionHandler.is1_7()) {
if(item.getType() == Material.BEDROCK) { if(item.getType() == Material.BEDROCK) {
mcp.getPlayer().closeInventory(); mcp.getPlayer().closeInventory();
} }

View File

@ -7,8 +7,6 @@ import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
import mineverse.Aust1n46.chat.utilities.Format; import mineverse.Aust1n46.chat.utilities.Format;
import mineverse.Aust1n46.chat.versions.VersionHandler; import mineverse.Aust1n46.chat.versions.VersionHandler;
import java.lang.reflect.Field;
import com.comphenix.protocol.PacketType; import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.ListenerPriority; import com.comphenix.protocol.events.ListenerPriority;
import com.comphenix.protocol.events.PacketAdapter; import com.comphenix.protocol.events.PacketAdapter;
@ -41,24 +39,22 @@ public class PacketListener extends PacketAdapter {
return; return;
} }
Field posField = MineverseChat.getPosField();
if(posField == null) {
return;
}
try { try {
if(VersionHandler.is1_7_2() || VersionHandler.is1_7_10() || VersionHandler.is1_7_9()) { if(VersionHandler.is1_7()) {
if(!(((boolean) posField.get(packet.getHandle())))) { packet.getBooleans().getField(0).setAccessible(true);
if(!((boolean) packet.getBooleans().getField(0).get(packet.getHandle()))) {
return; return;
} }
} }
else if(VersionHandler.is1_8() || VersionHandler.is1_9() || VersionHandler.is1_10() || VersionHandler.is1_11()) { else if(VersionHandler.is1_8() || VersionHandler.is1_9() || VersionHandler.is1_10() || VersionHandler.is1_11()) {
if(((Byte) posField.get(packet.getHandle())).intValue() > 1) { packet.getBytes().getField(0).setAccessible(true);
if(((Byte) packet.getBytes().getField(0).get(packet.getHandle())).intValue() > 1) {
return; return;
} }
} }
else { else {
if(((Object) posField.get(packet.getHandle())) == MineverseChat.getChatMessageType().getEnumConstants()[2]) { packet.getChatTypes().getField(0).setAccessible(true);
if(packet.getChatTypes().getField(0).get(packet.getHandle()) == packet.getChatTypes().getField(0).getType().getEnumConstants()[2]) {
return; return;
} }
} }

View File

@ -492,8 +492,8 @@ public class Format {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static String toColoredText(Object o, Class<?> c) { public static String toColoredText(Object o, Class<?> c) {
if (VersionHandler.is1_7_10()) { if (VersionHandler.is1_7()) {
return "This method is not currently supported in 1.7"; return "\"extra\":[{\"text\":\"Hover to see original message is not currently supported in 1.7\",\"color\":\"red\"}]";
} }
List<Object> finalList = new ArrayList<>(); List<Object> finalList = new ArrayList<>();
StringBuilder stringbuilder = new StringBuilder(); StringBuilder stringbuilder = new StringBuilder();
@ -521,7 +521,7 @@ public class Format {
stringbuilder.append(jsonObject.toJSONString() + ","); stringbuilder.append(jsonObject.toJSONString() + ",");
} }
catch(Exception e) { catch(Exception e) {
return "Something went wrong. Could not access color."; return "\"extra\":[{\"text\":\"Something went wrong. Could not access color.\",\"color\":\"red\"}]";
} }
} }
} catch (Exception e) { } catch (Exception e) {
@ -541,7 +541,7 @@ public class Format {
try { try {
splitComponents(finalList, o, c); splitComponents(finalList, o, c);
for (Object component : finalList) { for (Object component : finalList) {
if (VersionHandler.is1_7_10()) { if (VersionHandler.is1_7()) {
stringbuilder.append((String) component.getClass().getMethod("e").invoke(component)); stringbuilder.append((String) component.getClass().getMethod("e").invoke(component));
} else { } else {
stringbuilder.append((String) component.getClass().getMethod("getText").invoke(component)); stringbuilder.append((String) component.getClass().getMethod("getText").invoke(component));
@ -915,7 +915,7 @@ public class Format {
} }
private static Sound getDefaultMessageSound() { private static Sound getDefaultMessageSound() {
if(VersionHandler.is1_8() || VersionHandler.is1_7_10() || VersionHandler.is1_7_2() || VersionHandler.is1_7_9()) { if(VersionHandler.is1_7() || VersionHandler.is1_8()) {
return Sound.valueOf(DEFAULT_LEGACY_MESSAGE_SOUND); return Sound.valueOf(DEFAULT_LEGACY_MESSAGE_SOUND);
} }
else { else {

View File

@ -5,46 +5,10 @@ import org.bukkit.Bukkit;
//This class contains methods for determining what version of Minecraft the server is running. //This class contains methods for determining what version of Minecraft the server is running.
public class VersionHandler { public class VersionHandler {
public static boolean is1_2_5() {
return Bukkit.getVersion().contains("1.2.5");
}
public static boolean is1_3_2() {
return Bukkit.getVersion().contains("1.3.2");
}
public static boolean is1_4_7() {
return Bukkit.getVersion().contains("1.4.7");
}
public static boolean is1_5_2() {
return Bukkit.getVersion().contains("1.5.2");
}
public static boolean is1_6_2() {
return Bukkit.getVersion().contains("1.6.2");
}
public static boolean is1_6_4() {
return Bukkit.getVersion().contains("1.6.4");
}
public static boolean is1_7() { public static boolean is1_7() {
return Bukkit.getVersion().contains("1.7"); return Bukkit.getVersion().contains("1.7");
} }
public static boolean is1_7_2() {
return Bukkit.getVersion().contains("1.7") && Bukkit.getServer().getClass().getPackage().getName().contains("R1");
}
public static boolean is1_7_9() {
return Bukkit.getVersion().contains("1.7") && Bukkit.getServer().getClass().getPackage().getName().contains("R3");
}
public static boolean is1_7_10() {
return Bukkit.getVersion().contains("1.7") && Bukkit.getServer().getClass().getPackage().getName().contains("R4");
}
public static boolean is1_8() { public static boolean is1_8() {
return Bukkit.getVersion().contains("1.8"); return Bukkit.getVersion().contains("1.8");
} }
@ -85,11 +49,7 @@ public class VersionHandler {
return Bukkit.getVersion().contains("1.16"); return Bukkit.getVersion().contains("1.16");
} }
public static boolean isCauldron() { public static boolean is1_17() {
return false; return Bukkit.getVersion().contains("1.17");
}
public static boolean matchesVersion(String s) {
return Bukkit.getVersion().contains(s) || Bukkit.getServer().getClass().getPackage().getName().contains(s);
} }
} }