Skip to content

Commit

Permalink
support advanced chat format in 1.16 NMS module
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Jul 18, 2020
1 parent 8ac8e2a commit 27e8f7e
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 21 deletions.
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}
}
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down
Expand Up @@ -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.*;
Expand All @@ -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;
Expand Down Expand Up @@ -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);
}

Expand All @@ -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))));
}
}

Expand Down Expand Up @@ -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<DataWatcher.Item<?>> 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);
Expand Down
@@ -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;

Expand All @@ -15,15 +17,15 @@ 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);
}

@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);
}
Expand Down
@@ -1,13 +1,15 @@
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;
import com.denizenscript.denizen.nms.v1_16.impl.entities.EntityFakePlayerImpl;
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;
Expand All @@ -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;

Expand Down Expand Up @@ -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<IChatBaseComponent> name = Optional.of(text);
Optional<IChatBaseComponent> name = Optional.of(Handler.componentToNMS(FormattedTextHelper.parse(nameToApply)));
item.a(name);
}
else if (watcherId == 3) { // 3: custom name visible metadata
Expand Down
Expand Up @@ -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;
Expand Down Expand Up @@ -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)};
Expand Down

0 comments on commit 27e8f7e

Please sign in to comment.