From 39f473d8cd8ee4e977c61de8bb3534c6e1990caf Mon Sep 17 00:00:00 2001 From: Xiao-MoMi <70987828+Xiao-MoMi@users.noreply.github.com> Date: Fri, 6 Jan 2023 13:27:35 +0800 Subject: [PATCH] 2.1.7 --- build.gradle | 3 +- .../customnameplates/CustomNameplates.java | 2 + .../objects/bossbar/BossBarSender.java | 15 +-- .../objects/nameplates/ArmorStandManager.java | 8 +- .../objects/nameplates/FakeArmorStand.java | 92 +++++++++---------- .../objects/team/SimpleTeamVisibility.java | 7 +- .../objects/team/TeamPrefixSuffix.java | 7 +- .../customnameplates/utils/HoloUtil.java | 14 ++- .../customnameplates/utils/NameplateUtil.java | 23 ----- .../utils/TeamManagePacketUtil.java | 16 +--- 10 files changed, 69 insertions(+), 118 deletions(-) delete mode 100644 src/main/java/net/momirealms/customnameplates/utils/NameplateUtil.java diff --git a/build.gradle b/build.gradle index c3ef957..7fc39aa 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group = 'net.momirealms' -version = '2.1.6' +version = '2.1.7' repositories { mavenCentral() @@ -41,7 +41,6 @@ repositories { dependencies { compileOnly fileTree(dir:'libs',includes:['*.jar']) compileOnly 'io.papermc.paper:paper-api:1.17.1-R0.1-SNAPSHOT' - compileOnly 'com.comphenix.protocol:ProtocolLib:4.8.0' compileOnly 'me.clip:placeholderapi:2.11.1' compileOnly 'com.zaxxer:HikariCP:5.0.1' compileOnly 'commons-io:commons-io:2.11.0' diff --git a/src/main/java/net/momirealms/customnameplates/CustomNameplates.java b/src/main/java/net/momirealms/customnameplates/CustomNameplates.java index a7cccd2..38dcf7f 100644 --- a/src/main/java/net/momirealms/customnameplates/CustomNameplates.java +++ b/src/main/java/net/momirealms/customnameplates/CustomNameplates.java @@ -37,6 +37,7 @@ public final class CustomNameplates extends JavaPlugin { public static CustomNameplates plugin; public static BukkitAudiences adventure; public static ProtocolManager protocolManager; + public static String version; private ResourceManager resourceManager; private BossBarManager bossBarManager; @@ -62,6 +63,7 @@ public final class CustomNameplates extends JavaPlugin { public void onEnable() { adventure = BukkitAudiences.create(this); protocolManager = ProtocolLibrary.getProtocolManager(); + version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; //Don't delete this PacketContainer packet = new PacketContainer(PacketType.Play.Server.SCOREBOARD_TEAM); diff --git a/src/main/java/net/momirealms/customnameplates/objects/bossbar/BossBarSender.java b/src/main/java/net/momirealms/customnameplates/objects/bossbar/BossBarSender.java index 39214b5..fbf27c9 100644 --- a/src/main/java/net/momirealms/customnameplates/objects/bossbar/BossBarSender.java +++ b/src/main/java/net/momirealms/customnameplates/objects/bossbar/BossBarSender.java @@ -87,11 +87,7 @@ public class BossBarSender { public void show() { this.isShown = true; - try { - CustomNameplates.protocolManager.sendServerPacket(player, getPacket()); - } catch (InvocationTargetException e) { - AdventureUtil.consoleMessage("[CustomNameplates] Failed to display bossbar for " + player.getName()); - } + CustomNameplates.protocolManager.sendServerPacket(player, getPacket()); this.bukkitTask = new BukkitRunnable() { @Override @@ -114,12 +110,7 @@ public class BossBarSender { timer_1 = 0; if (text.update() || force) { force = false; - try { - CustomNameplates.protocolManager.sendServerPacket(player, getUpdatePacket()); - } - catch (InvocationTargetException e){ - AdventureUtil.consoleMessage("[CustomNameplates] Failed to update bossbar for " + player.getName()); - } + CustomNameplates.protocolManager.sendServerPacket(player, getUpdatePacket()); } } } @@ -174,7 +165,7 @@ public class BossBarSender { remove.setAccessible(true); packet.getModifier().write(1, remove.get(null)); CustomNameplates.protocolManager.sendServerPacket(player, packet); - } catch (InvocationTargetException | ClassNotFoundException e){ + } catch (ClassNotFoundException e){ AdventureUtil.consoleMessage("[CustomNameplates] Failed to remove bossbar for " + player.getName()); } catch (NoSuchFieldException | IllegalAccessException e) { throw new RuntimeException(e); diff --git a/src/main/java/net/momirealms/customnameplates/objects/nameplates/ArmorStandManager.java b/src/main/java/net/momirealms/customnameplates/objects/nameplates/ArmorStandManager.java index 3b067d5..41ec398 100644 --- a/src/main/java/net/momirealms/customnameplates/objects/nameplates/ArmorStandManager.java +++ b/src/main/java/net/momirealms/customnameplates/objects/nameplates/ArmorStandManager.java @@ -57,13 +57,7 @@ public class ArmorStandManager { } public void mount(Player receiver) { - try { - CustomNameplates.protocolManager.sendServerPacket(receiver, getMountPacket(getArmorStandIDs())); - } - catch (InvocationTargetException e) { - e.printStackTrace(); - AdventureUtil.consoleMessage("[CustomNameplates] Failed to mount player"); - } + CustomNameplates.protocolManager.sendServerPacket(receiver, getMountPacket(getArmorStandIDs())); } private PacketContainer getMountPacket(int[] passengers) { diff --git a/src/main/java/net/momirealms/customnameplates/objects/nameplates/FakeArmorStand.java b/src/main/java/net/momirealms/customnameplates/objects/nameplates/FakeArmorStand.java index 9fea3c5..5470ee5 100644 --- a/src/main/java/net/momirealms/customnameplates/objects/nameplates/FakeArmorStand.java +++ b/src/main/java/net/momirealms/customnameplates/objects/nameplates/FakeArmorStand.java @@ -20,7 +20,9 @@ package net.momirealms.customnameplates.objects.nameplates; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.wrappers.WrappedChatComponent; +import com.comphenix.protocol.wrappers.WrappedDataValue; import com.comphenix.protocol.wrappers.WrappedDataWatcher; +import com.google.common.collect.Lists; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.momirealms.customnameplates.CustomNameplates; @@ -34,8 +36,8 @@ import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.entity.Pose; -import java.lang.reflect.InvocationTargetException; import java.util.List; +import java.util.Objects; import java.util.Optional; import java.util.UUID; @@ -93,60 +95,35 @@ public class FakeArmorStand implements ArmorStand { if (yOffset == offset) return; yOffset = offset; for (Player all : asm.getNearbyPlayers()) { - try { - CustomNameplates.protocolManager.sendServerPacket(all, getTeleportPacket()); - } - catch (InvocationTargetException e) { - e.printStackTrace(); - } + CustomNameplates.protocolManager.sendServerPacket(all, getTeleportPacket()); } } @Override public void spawn(Player viewer) { - for (PacketContainer packet : getSpawnPackets(viewer)) { - try { - CustomNameplates.protocolManager.sendServerPacket(viewer, packet); - } - catch (InvocationTargetException e){ - e.printStackTrace(); - } + for (PacketContainer packet : getSpawnPackets()) { + CustomNameplates.protocolManager.sendServerPacket(viewer, packet); } } @Override public void destroy() { for (Player all : asm.getNearbyPlayers()) { - try { - CustomNameplates.protocolManager.sendServerPacket(all, destroyPacket); - } - catch (InvocationTargetException e) { - e.printStackTrace(); - } + CustomNameplates.protocolManager.sendServerPacket(all, destroyPacket); } } @Override public void destroy(Player viewer) { - try { - CustomNameplates.protocolManager.sendServerPacket(viewer, destroyPacket); - } - catch (InvocationTargetException e) { - e.printStackTrace(); - } + CustomNameplates.protocolManager.sendServerPacket(viewer, destroyPacket); } @Override public void teleport() { PacketContainer packet = getTeleportPacket(); for (Player all : asm.getNearbyPlayers()) { - try { - CustomNameplates.protocolManager.sendServerPacket(all, packet); - } - catch (InvocationTargetException e) { - e.printStackTrace(); - } + CustomNameplates.protocolManager.sendServerPacket(all, packet); } } @@ -155,12 +132,7 @@ public class FakeArmorStand implements ArmorStand { if (!asm.isNearby(viewer) && viewer != owner) { asm.spawn(viewer); } else { - try { - CustomNameplates.protocolManager.sendServerPacket(viewer, getTeleportPacket()); - } - catch (InvocationTargetException e) { - e.printStackTrace(); - } + CustomNameplates.protocolManager.sendServerPacket(viewer, getTeleportPacket()); } } @@ -188,7 +160,6 @@ public class FakeArmorStand implements ArmorStand { spawn(viewer); } - //传送包 public PacketContainer getTeleportPacket() { PacketContainer packet = new PacketContainer(PacketType.Play.Server.ENTITY_TELEPORT); @@ -205,13 +176,18 @@ public class FakeArmorStand implements ArmorStand { for (Player viewer : asm.getNearbyPlayers()) { PacketContainer metaPacket = new PacketContainer(PacketType.Play.Server.ENTITY_METADATA); metaPacket.getIntegers().write(0, entityId); - metaPacket.getWatchableCollectionModifier().write(0, createDataWatcher(getText().getLatestText(), true).getWatchableObjects()); - try { - CustomNameplates.protocolManager.sendServerPacket(viewer, metaPacket); - } - catch (InvocationTargetException e) { - e.printStackTrace(); + if (CustomNameplates.version.equals("v1_19_R2")) { + WrappedDataWatcher wrappedDataWatcher = createDataWatcher(getText().getLatestText(), true); + List wrappedDataValueList = Lists.newArrayList(); + wrappedDataWatcher.getWatchableObjects().stream().filter(Objects::nonNull).forEach(entry -> { + final WrappedDataWatcher.WrappedDataWatcherObject dataWatcherObject = entry.getWatcherObject(); + wrappedDataValueList.add(new WrappedDataValue(dataWatcherObject.getIndex(), dataWatcherObject.getSerializer(), entry.getRawValue())); + }); + metaPacket.getDataValueCollectionModifier().write(0, wrappedDataValueList); + } else { + metaPacket.getWatchableCollectionModifier().write(0, createDataWatcher(getText().getLatestText(), true).getWatchableObjects()); } + CustomNameplates.protocolManager.sendServerPacket(viewer, metaPacket); } } @@ -277,7 +253,7 @@ public class FakeArmorStand implements ArmorStand { } //创建生成包 - public PacketContainer[] getSpawnPackets(Player viewer) { + public PacketContainer[] getSpawnPackets() { PacketContainer entityPacket = new PacketContainer(PacketType.Play.Server.SPAWN_ENTITY); entityPacket.getModifier().write(0, entityId); @@ -291,10 +267,30 @@ public class FakeArmorStand implements ArmorStand { PacketContainer metaPacket = new PacketContainer(PacketType.Play.Server.ENTITY_METADATA); metaPacket.getIntegers().write(0, entityId); if (this.wrappedChatComponent == null) { - metaPacket.getWatchableCollectionModifier().write(0, createDataWatcher(getText().getLatestText(), true).getWatchableObjects()); + if (CustomNameplates.version.equals("v1_19_R2")) { + WrappedDataWatcher wrappedDataWatcher = createDataWatcher(getText().getLatestText(), true); + List wrappedDataValueList = Lists.newArrayList(); + wrappedDataWatcher.getWatchableObjects().stream().filter(Objects::nonNull).forEach(entry -> { + final WrappedDataWatcher.WrappedDataWatcherObject dataWatcherObject = entry.getWatcherObject(); + wrappedDataValueList.add(new WrappedDataValue(dataWatcherObject.getIndex(), dataWatcherObject.getSerializer(), entry.getRawValue())); + }); + metaPacket.getDataValueCollectionModifier().write(0, wrappedDataValueList); + } else { + metaPacket.getWatchableCollectionModifier().write(0, createDataWatcher(getText().getLatestText(), true).getWatchableObjects()); + } } else { - metaPacket.getWatchableCollectionModifier().write(0, createDataWatcher("", false).getWatchableObjects()); + if (CustomNameplates.version.equals("v1_19_R2")) { + WrappedDataWatcher wrappedDataWatcher = createDataWatcher("", false); + List wrappedDataValueList = Lists.newArrayList(); + wrappedDataWatcher.getWatchableObjects().stream().filter(Objects::nonNull).forEach(entry -> { + final WrappedDataWatcher.WrappedDataWatcherObject dataWatcherObject = entry.getWatcherObject(); + wrappedDataValueList.add(new WrappedDataValue(dataWatcherObject.getIndex(), dataWatcherObject.getSerializer(), entry.getRawValue())); + }); + metaPacket.getDataValueCollectionModifier().write(0, wrappedDataValueList); + } else { + metaPacket.getWatchableCollectionModifier().write(0, createDataWatcher("", false).getWatchableObjects()); + } } return new PacketContainer[] {entityPacket, metaPacket}; } diff --git a/src/main/java/net/momirealms/customnameplates/objects/team/SimpleTeamVisibility.java b/src/main/java/net/momirealms/customnameplates/objects/team/SimpleTeamVisibility.java index 9692c94..a8c371c 100644 --- a/src/main/java/net/momirealms/customnameplates/objects/team/SimpleTeamVisibility.java +++ b/src/main/java/net/momirealms/customnameplates/objects/team/SimpleTeamVisibility.java @@ -70,11 +70,6 @@ public class SimpleTeamVisibility implements TeamPacketInterface { if (NameplateManager.removeTag) internalStructure.getStrings().write(0, "never"); else internalStructure.getStrings().write(0, "always"); internalStructure.getEnumModifier(ChatColor.class, MinecraftReflection.getMinecraftClass("EnumChatFormat")).write(0,ChatColor.WHITE); - try { - CustomNameplates.protocolManager.sendServerPacket(player, packet); - } - catch (InvocationTargetException e) { - e.printStackTrace(); - } + CustomNameplates.protocolManager.sendServerPacket(player, packet); } } diff --git a/src/main/java/net/momirealms/customnameplates/objects/team/TeamPrefixSuffix.java b/src/main/java/net/momirealms/customnameplates/objects/team/TeamPrefixSuffix.java index 264396d..453930b 100644 --- a/src/main/java/net/momirealms/customnameplates/objects/team/TeamPrefixSuffix.java +++ b/src/main/java/net/momirealms/customnameplates/objects/team/TeamPrefixSuffix.java @@ -82,11 +82,6 @@ public class TeamPrefixSuffix implements TeamPacketInterface { internalStructure.getChatComponents().write(1, WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(nameplatesTeam.getPrefix()))); internalStructure.getChatComponents().write(2, WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(nameplatesTeam.getSuffix()))); internalStructure.getEnumModifier(ChatColor.class, MinecraftReflection.getMinecraftClass("EnumChatFormat")).write(0, nameplatesTeam.getColor()); - try { - CustomNameplates.protocolManager.sendServerPacket(player, packet); - } - catch (InvocationTargetException e) { - e.printStackTrace(); - } + CustomNameplates.protocolManager.sendServerPacket(player, packet); } } diff --git a/src/main/java/net/momirealms/customnameplates/utils/HoloUtil.java b/src/main/java/net/momirealms/customnameplates/utils/HoloUtil.java index 042c362..1b4cec6 100644 --- a/src/main/java/net/momirealms/customnameplates/utils/HoloUtil.java +++ b/src/main/java/net/momirealms/customnameplates/utils/HoloUtil.java @@ -21,7 +21,9 @@ import com.comphenix.protocol.PacketType; import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.wrappers.WrappedChatComponent; +import com.comphenix.protocol.wrappers.WrappedDataValue; import com.comphenix.protocol.wrappers.WrappedDataWatcher; +import com.google.common.collect.Lists; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.momirealms.customnameplates.CustomNameplates; @@ -66,7 +68,17 @@ public class HoloUtil { wrappedDataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(0, serializer2), mask1); wrappedDataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(15, serializer2), mask2); packet2.getModifier().write(0,id); - packet2.getWatchableCollectionModifier().write(0, wrappedDataWatcher.getWatchableObjects()); + + if (CustomNameplates.version.equals("v1_19_R2")) { + List wrappedDataValueList = Lists.newArrayList(); + wrappedDataWatcher.getWatchableObjects().stream().filter(Objects::nonNull).forEach(entry -> { + final WrappedDataWatcher.WrappedDataWatcherObject dataWatcherObject = entry.getWatcherObject(); + wrappedDataValueList.add(new WrappedDataValue(dataWatcherObject.getIndex(), dataWatcherObject.getSerializer(), entry.getRawValue())); + }); + packet2.getDataValueCollectionModifier().write(0, wrappedDataValueList); + } else { + packet2.getWatchableCollectionModifier().write(0, wrappedDataWatcher.getWatchableObjects()); + } cache.put(player, id); try { diff --git a/src/main/java/net/momirealms/customnameplates/utils/NameplateUtil.java b/src/main/java/net/momirealms/customnameplates/utils/NameplateUtil.java deleted file mode 100644 index da64c0a..0000000 --- a/src/main/java/net/momirealms/customnameplates/utils/NameplateUtil.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (C) <2022> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates.utils; - -public class NameplateUtil { - - -} diff --git a/src/main/java/net/momirealms/customnameplates/utils/TeamManagePacketUtil.java b/src/main/java/net/momirealms/customnameplates/utils/TeamManagePacketUtil.java index 7f8de49..cbe10bb 100644 --- a/src/main/java/net/momirealms/customnameplates/utils/TeamManagePacketUtil.java +++ b/src/main/java/net/momirealms/customnameplates/utils/TeamManagePacketUtil.java @@ -43,13 +43,8 @@ public class TeamManagePacketUtil { PacketContainer packetToAll = getPlayerTeamPacket(joinPlayer); for (Player all : Bukkit.getOnlinePlayers()) { getPlayerTeamPacket(all); - try { - CustomNameplates.protocolManager.sendServerPacket(joinPlayer, getPlayerTeamPacket(all)); - if (joinPlayer != all) CustomNameplates.protocolManager.sendServerPacket(all, packetToAll); - } - catch (InvocationTargetException e) { - e.printStackTrace(); - } + CustomNameplates.protocolManager.sendServerPacket(joinPlayer, getPlayerTeamPacket(all)); + if (joinPlayer != all) CustomNameplates.protocolManager.sendServerPacket(all, packetToAll); } } @@ -68,12 +63,7 @@ public class TeamManagePacketUtil { packetToAll.getIntegers().write(0,1); packetToAll.getStrings().write(0, quitPlayer.getName()); for (Player all : Bukkit.getOnlinePlayers()) { - try { - CustomNameplates.protocolManager.sendServerPacket(all, packetToAll); - } - catch (InvocationTargetException e) { - e.printStackTrace(); - } + CustomNameplates.protocolManager.sendServerPacket(all, packetToAll); } } }