From 27e8f7ed09038f993f24e24957b95c0859ac049d Mon Sep 17 00:00:00 2001 From: Alex 'mcmonkey' Goodwin Date: Fri, 17 Jul 2020 18:55:51 -0700 Subject: [PATCH] support advanced chat format in 1.16 NMS module --- .../denizen/nms/v1_16/Handler.java | 6 ++++++ .../v1_16/helpers/AdvancementHelperImpl.java | 4 +++- .../nms/v1_16/helpers/PacketHelperImpl.java | 17 +++++++---------- .../denizen/nms/v1_16/impl/SidebarImpl.java | 6 ++++-- .../handlers/DenizenNetworkManagerImpl.java | 9 +++------ .../impl/network/packets/PacketOutChatImpl.java | 5 +++-- 6 files changed, 26 insertions(+), 21 deletions(-) diff --git a/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/Handler.java b/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/Handler.java index e7ca7e5711..68c3d1fef3 100644 --- a/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/Handler.java +++ b/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/Handler.java @@ -26,6 +26,7 @@ import net.md_5.bungee.api.chat.hover.content.Content; import net.md_5.bungee.api.chat.hover.content.Item; import net.md_5.bungee.api.chat.hover.content.Text; +import net.md_5.bungee.chat.ComponentSerializer; import net.minecraft.server.v1_16_R1.*; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -251,4 +252,9 @@ else if (contentObject instanceof net.md_5.bungee.api.chat.hover.content.Entity) throw new UnsupportedOperationException(); } } + + public static IChatMutableComponent componentToNMS(BaseComponent[] spigot) { + String json = ComponentSerializer.toString(spigot); + return IChatBaseComponent.ChatSerializer.b(json); + } } diff --git a/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/helpers/AdvancementHelperImpl.java b/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/helpers/AdvancementHelperImpl.java index 98fa013af0..1a85e1994b 100644 --- a/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/helpers/AdvancementHelperImpl.java +++ b/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/helpers/AdvancementHelperImpl.java @@ -2,6 +2,8 @@ import com.denizenscript.denizen.nms.interfaces.AdvancementHelper; import com.denizenscript.denizen.nms.util.ReflectionHelper; +import com.denizenscript.denizen.nms.v1_16.Handler; +import com.denizenscript.denizen.utilities.FormattedTextHelper; import net.minecraft.server.v1_16_R1.*; import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; @@ -127,7 +129,7 @@ private static Advancement asNMSCopy(com.denizenscript.denizen.nms.util.Advancem ? getAdvancementDataWorld().REGISTRY.advancements.get(asMinecraftKey(advancement.parent)) : null; AdvancementDisplay display = new AdvancementDisplay(CraftItemStack.asNMSCopy(advancement.icon), - new ChatComponentText(advancement.title), new ChatComponentText(advancement.description), + Handler.componentToNMS(FormattedTextHelper.parse(advancement.title)), Handler.componentToNMS(FormattedTextHelper.parse(advancement.description)), asMinecraftKey(advancement.background), AdvancementFrameType.valueOf(advancement.frame.name()), advancement.toast, advancement.announceToChat, advancement.hidden); display.a(advancement.xOffset, advancement.yOffset); diff --git a/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/helpers/PacketHelperImpl.java b/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/helpers/PacketHelperImpl.java index 7668851186..a18ec53a18 100644 --- a/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/helpers/PacketHelperImpl.java +++ b/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/helpers/PacketHelperImpl.java @@ -2,10 +2,12 @@ import com.denizenscript.denizen.nms.NMSHandler; import com.denizenscript.denizen.nms.util.ReflectionHelper; +import com.denizenscript.denizen.nms.v1_16.Handler; import com.denizenscript.denizen.nms.v1_16.impl.jnbt.CompoundTagImpl; import com.denizenscript.denizen.nms.interfaces.PacketHelper; import com.denizenscript.denizen.nms.util.jnbt.CompoundTag; import com.denizenscript.denizen.nms.util.jnbt.JNBTListTag; +import com.denizenscript.denizen.utilities.FormattedTextHelper; import com.denizenscript.denizen.utilities.debugging.Debug; import com.mojang.datafixers.util.Pair; import net.minecraft.server.v1_16_R1.*; @@ -19,7 +21,6 @@ import org.bukkit.craftbukkit.v1_16_R1.entity.CraftEntity; import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftItemStack; -import org.bukkit.craftbukkit.v1_16_R1.util.CraftChatMessage; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; @@ -170,8 +171,8 @@ public void showBannerUpdate(Player player, Location location, DyeColor base, Li @Override public void showTabListHeaderFooter(Player player, String header, String footer) { PacketPlayOutPlayerListHeaderFooter packet = new PacketPlayOutPlayerListHeaderFooter(); - packet.header = new ChatComponentText(header); - packet.footer = new ChatComponentText(footer); + packet.header = Handler.componentToNMS(FormattedTextHelper.parse(header)); + packet.footer = Handler.componentToNMS(FormattedTextHelper.parse(footer)); sendPacket(player, packet); } @@ -184,10 +185,10 @@ public void resetTabListHeaderFooter(Player player) { public void showTitle(Player player, String title, String subtitle, int fadeInTicks, int stayTicks, int fadeOutTicks) { sendPacket(player, new PacketPlayOutTitle(fadeInTicks, stayTicks, fadeOutTicks)); if (title != null) { - sendPacket(player, new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.TITLE, new ChatComponentText(title))); + sendPacket(player, new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.TITLE, Handler.componentToNMS(FormattedTextHelper.parse(title)))); } if (subtitle != null) { - sendPacket(player, new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.SUBTITLE, new ChatComponentText(subtitle))); + sendPacket(player, new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.SUBTITLE, Handler.componentToNMS(FormattedTextHelper.parse(subtitle)))); } } @@ -280,11 +281,7 @@ public void sendRename(Player player, Entity entity, String name) { PacketPlayOutEntityMetadata packet = new PacketPlayOutEntityMetadata(); ENTITY_METADATA_EID_SETTER.invoke(packet, entity.getEntityId()); List> list = new ArrayList<>(); - ChatComponentText text = new ChatComponentText(""); - for (IChatBaseComponent component : CraftChatMessage.fromString(name)) { - text.addSibling(component); - } - list.add(new DataWatcher.Item<>(ENTITY_CUSTOM_NAME_METADATA, Optional.of(text))); + list.add(new DataWatcher.Item<>(ENTITY_CUSTOM_NAME_METADATA, Optional.of(Handler.componentToNMS(FormattedTextHelper.parse(name))))); list.add(new DataWatcher.Item<>(ENTITY_CUSTOM_NAME_VISIBLE_METADATA, true)); ENTITY_METADATA_LIST_SETTER.invoke(packet, list); sendPacket(player, packet); diff --git a/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/impl/SidebarImpl.java b/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/impl/SidebarImpl.java index 248cc70e4a..048f8688f8 100644 --- a/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/impl/SidebarImpl.java +++ b/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/impl/SidebarImpl.java @@ -1,7 +1,9 @@ package com.denizenscript.denizen.nms.v1_16.impl; +import com.denizenscript.denizen.nms.v1_16.Handler; import com.denizenscript.denizen.nms.v1_16.helpers.PacketHelperImpl; import com.denizenscript.denizen.nms.abstracts.Sidebar; +import com.denizenscript.denizen.utilities.FormattedTextHelper; import net.minecraft.server.v1_16_R1.*; import org.bukkit.entity.Player; @@ -15,7 +17,7 @@ public class SidebarImpl extends Sidebar { public SidebarImpl(Player player) { super(player); - IChatBaseComponent chatComponentTitle = new ChatComponentText(title); + IChatBaseComponent chatComponentTitle = Handler.componentToNMS(FormattedTextHelper.parse(title)); this.obj1 = new ScoreboardObjective(dummyScoreboard, "dummy_1", dummyCriteria, chatComponentTitle, IScoreboardCriteria.EnumScoreboardHealthDisplay.INTEGER); this.obj2 = new ScoreboardObjective(dummyScoreboard, "dummy_2", dummyCriteria, chatComponentTitle, IScoreboardCriteria.EnumScoreboardHealthDisplay.INTEGER); } @@ -23,7 +25,7 @@ public SidebarImpl(Player player) { @Override protected void setDisplayName(String title) { if (this.obj1 != null) { - IChatBaseComponent chatComponentTitle = new ChatComponentText(title); + IChatBaseComponent chatComponentTitle = Handler.componentToNMS(FormattedTextHelper.parse(title)); this.obj1.setDisplayName(chatComponentTitle); this.obj2.setDisplayName(chatComponentTitle); } diff --git a/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/impl/network/handlers/DenizenNetworkManagerImpl.java b/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/impl/network/handlers/DenizenNetworkManagerImpl.java index 3437cdb20c..d5231d8ee8 100644 --- a/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/impl/network/handlers/DenizenNetworkManagerImpl.java +++ b/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/impl/network/handlers/DenizenNetworkManagerImpl.java @@ -1,6 +1,7 @@ package com.denizenscript.denizen.nms.v1_16.impl.network.handlers; import com.denizenscript.denizen.nms.interfaces.EntityHelper; +import com.denizenscript.denizen.nms.v1_16.Handler; import com.denizenscript.denizen.nms.v1_16.impl.ProfileEditorImpl; import com.denizenscript.denizen.nms.v1_16.impl.network.packets.*; import com.denizenscript.denizen.nms.v1_16.impl.blocks.BlockLightImpl; @@ -8,6 +9,7 @@ import com.denizenscript.denizen.nms.interfaces.packets.PacketOutSpawnEntity; import com.denizenscript.denizen.objects.LocationTag; import com.denizenscript.denizen.scripts.commands.entity.RenameCommand; +import com.denizenscript.denizen.utilities.FormattedTextHelper; import com.denizenscript.denizen.utilities.blocks.ChunkCoordinate; import com.denizenscript.denizen.utilities.blocks.FakeBlock; import com.denizenscript.denizen.utilities.entity.EntityAttachmentHelper; @@ -21,7 +23,6 @@ import net.minecraft.server.v1_16_R1.*; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_16_R1.util.CraftChatMessage; import org.bukkit.entity.Player; import org.bukkit.util.Vector; @@ -182,11 +183,7 @@ public void processCustomNameForPacket(Packet packet) { DataWatcherObject watcherObject = item.a(); int watcherId = watcherObject.a(); if (watcherId == 2) { // 2: Custom name metadata - ChatComponentText text = new ChatComponentText(""); - for (IChatBaseComponent component : CraftChatMessage.fromString(nameToApply)) { - text.addSibling(component); - } - Optional name = Optional.of(text); + Optional name = Optional.of(Handler.componentToNMS(FormattedTextHelper.parse(nameToApply))); item.a(name); } else if (watcherId == 3) { // 3: custom name visible metadata diff --git a/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/impl/network/packets/PacketOutChatImpl.java b/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/impl/network/packets/PacketOutChatImpl.java index 85bd46f76d..a4e8877898 100644 --- a/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/impl/network/packets/PacketOutChatImpl.java +++ b/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/impl/network/packets/PacketOutChatImpl.java @@ -2,11 +2,12 @@ import com.denizenscript.denizen.nms.interfaces.packets.PacketOutChat; import com.denizenscript.denizen.nms.util.ReflectionHelper; +import com.denizenscript.denizen.nms.v1_16.Handler; +import com.denizenscript.denizen.utilities.FormattedTextHelper; import com.denizenscript.denizencore.utilities.debugging.Debug; import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.chat.ComponentSerializer; -import net.minecraft.server.v1_16_R1.ChatComponentText; import net.minecraft.server.v1_16_R1.ChatMessageType; import net.minecraft.server.v1_16_R1.IChatBaseComponent; import net.minecraft.server.v1_16_R1.PacketPlayOutChat; @@ -73,7 +74,7 @@ public void setPosition(int position) { public void setMessage(String message) { try { if (!bungee) { - MESSAGE.set(internal, new ChatComponentText(message)); + MESSAGE.set(internal, Handler.componentToNMS(FormattedTextHelper.parse(message))); } else { internal.components = new BaseComponent[]{new TextComponent(message)};