From ca35a9c19530ee52e4c1b8ebe5a8191e3c85e7a7 Mon Sep 17 00:00:00 2001 From: "Alex \"mcmonkey\" Goodwin" Date: Thu, 16 Jun 2022 23:36:55 -0700 Subject: [PATCH] 1.19 message receive fix --- .../PlayerReceivesActionbarScriptEvent.java | 8 ++- .../PlayerReceivesMessageScriptEvent.java | 32 ++++++---- .../nms/interfaces/packets/PacketOutChat.java | 6 -- .../packets/DenizenPacketHandler.java | 30 ++++----- .../handlers/DenizenNetworkManagerImpl.java | 5 +- .../network/packets/PacketOutChatImpl.java | 30 --------- .../handlers/DenizenNetworkManagerImpl.java | 22 +++---- .../network/packets/PacketOutChatImpl.java | 30 --------- .../handlers/DenizenNetworkManagerImpl.java | 22 +++---- .../network/packets/PacketOutChatImpl.java | 30 --------- .../handlers/DenizenNetworkManagerImpl.java | 48 +++++++++------ .../network/packets/PacketOutChatImpl.java | 61 +++++++++++++++++++ 12 files changed, 152 insertions(+), 172 deletions(-) create mode 100644 v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/network/packets/PacketOutChatImpl.java diff --git a/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerReceivesActionbarScriptEvent.java b/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerReceivesActionbarScriptEvent.java index b11b4de20f..508539c50e 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerReceivesActionbarScriptEvent.java +++ b/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerReceivesActionbarScriptEvent.java @@ -1,5 +1,7 @@ package com.denizenscript.denizen.events.player; +import net.md_5.bungee.api.ChatColor; + public class PlayerReceivesActionbarScriptEvent extends PlayerReceivesMessageScriptEvent { // <--[event] @@ -32,8 +34,12 @@ public PlayerReceivesActionbarScriptEvent() { instance = this; } + @Override + public ChatColor baseColor() { + return ChatColor.WHITE; + } + public static PlayerReceivesActionbarScriptEvent instance; - public boolean modified; @Override public boolean couldMatch(ScriptPath path) { diff --git a/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerReceivesMessageScriptEvent.java b/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerReceivesMessageScriptEvent.java index 628739b0cd..accc677058 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerReceivesMessageScriptEvent.java +++ b/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerReceivesMessageScriptEvent.java @@ -1,6 +1,7 @@ package com.denizenscript.denizen.events.player; import com.denizenscript.denizen.objects.PlayerTag; +import com.denizenscript.denizen.utilities.FormattedTextHelper; import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData; import com.denizenscript.denizen.events.BukkitScriptEvent; import com.denizenscript.denizen.utilities.packets.NetworkInterceptHelper; @@ -8,8 +9,8 @@ import com.denizenscript.denizencore.objects.ObjectTag; import com.denizenscript.denizencore.scripts.ScriptEntryData; import com.denizenscript.denizencore.utilities.CoreUtilities; - -import java.util.function.Consumer; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.chat.ComponentSerializer; public class PlayerReceivesMessageScriptEvent extends BukkitScriptEvent { @@ -25,7 +26,7 @@ public class PlayerReceivesMessageScriptEvent extends BukkitScriptEvent { // // @Warning Using this will forcibly sync the chat thread. // - // @Triggers when a player receives any chat message from the server. + // @Triggers when a player receives any chat message from the server. This does not normally include *player* chat, instead prefer <@link event player chats> for that. // // @Context // returns an ElementTag of the message. @@ -48,16 +49,21 @@ public PlayerReceivesMessageScriptEvent() { public ElementTag message; public ElementTag rawJson; public ElementTag system; + public boolean modified; public PlayerTag player; public boolean loaded; - public Consumer modifyMessage; - public Consumer modifyRawJson; - public Consumer modifyCancellation; + public ChatColor baseColor() { + return ChatColor.BLACK; + } - @Override - public void cancellationChanged() { - modifyCancellation.accept(cancelled); + public void reset() { + player = null; + message = null; + rawJson = null; + system = null; + cancelled = false; + modified = false; } @Override @@ -87,13 +93,15 @@ public boolean applyDetermination(ScriptPath path, ObjectTag determinationObj) { String determination = determinationObj.toString(); String lower = CoreUtilities.toLowerCase(determination); if (lower.startsWith("message:")) { - message = new ElementTag(determination.substring("message:".length())); - modifyMessage.accept(message.asString()); + message = new ElementTag(determination.substring("message:".length()), true); + rawJson = new ElementTag(ComponentSerializer.toString(FormattedTextHelper.parse(message.asString(), baseColor())), true); + modified = true; return true; } if (lower.startsWith("raw_json:")) { rawJson = new ElementTag(determination.substring("raw_json:".length())); - modifyRawJson.accept(rawJson.asString()); + message = new ElementTag(FormattedTextHelper.stringify(ComponentSerializer.parse(rawJson.asString()), baseColor()), true); + modified = true; return true; } } diff --git a/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/packets/PacketOutChat.java b/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/packets/PacketOutChat.java index 7834ca2d15..e10750f165 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/packets/PacketOutChat.java +++ b/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/packets/PacketOutChat.java @@ -6,15 +6,9 @@ public interface PacketOutChat { boolean isActionbar(); - int getPosition(); - String getMessage(); String getRawJson(); - void setPosition(int position); - - void setMessage(String message); - void setRawJson(String rawJson); } diff --git a/plugin/src/main/java/com/denizenscript/denizen/utilities/packets/DenizenPacketHandler.java b/plugin/src/main/java/com/denizenscript/denizen/utilities/packets/DenizenPacketHandler.java index c0747bf3b9..11279bfd66 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/utilities/packets/DenizenPacketHandler.java +++ b/plugin/src/main/java/com/denizenscript/denizen/utilities/packets/DenizenPacketHandler.java @@ -4,7 +4,6 @@ import com.denizenscript.denizen.events.player.*; import com.denizenscript.denizen.nms.NMSHandler; import com.denizenscript.denizen.nms.NMSVersion; -import com.denizenscript.denizen.utilities.implementation.DenizenCoreImplementation; import com.denizenscript.denizen.nms.interfaces.packets.*; import com.denizenscript.denizen.utilities.debugging.Debug; import com.denizenscript.denizen.objects.EntityTag; @@ -12,6 +11,7 @@ import com.denizenscript.denizen.scripts.commands.player.GlowCommand; import com.denizenscript.denizen.scripts.commands.server.ExecuteCommand; import com.denizenscript.denizencore.DenizenCore; +import com.denizenscript.denizencore.events.ScriptEvent; import com.denizenscript.denizencore.objects.core.ElementTag; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -114,43 +114,45 @@ public boolean shouldInterceptChatPacket() { || PlayerReceivesActionbarScriptEvent.instance.loaded; } - public boolean sendPacket(final Player player, final PacketOutChat chat) { + public PlayerReceivesMessageScriptEvent sendPacket(final Player player, final PacketOutChat chat) { if (!chat.isActionbar() && ExecuteCommand.silencedPlayers.contains(player.getUniqueId())) { - return true; + PlayerReceivesMessageScriptEvent event = (PlayerReceivesMessageScriptEvent) PlayerReceivesMessageScriptEvent.instance.clone(); + event.cancelled = true; + return event; } if (chat.getMessage() == null) { - return false; + return null; } final PlayerReceivesMessageScriptEvent event = chat.isActionbar() ? PlayerReceivesActionbarScriptEvent.instance : PlayerReceivesMessageScriptEvent.instance; if (event.loaded) { - Callable eventCall = () -> { + Callable eventCall = () -> { + event.reset(); event.message = new ElementTag(chat.getMessage()); event.rawJson = new ElementTag(chat.getRawJson()); event.system = new ElementTag(chat.isSystem()); event.player = PlayerTag.mirrorBukkitPlayer(player); - event.modifyMessage = chat::setMessage; - event.modifyRawJson = chat::setRawJson; - event.cancelled = false; - event.modifyCancellation = (c) -> event.cancelled = c; - event.fire(); - return event.cancelled; + PlayerReceivesMessageScriptEvent result = (PlayerReceivesMessageScriptEvent) event.fire(); + if (result.modified) { + chat.setRawJson(result.rawJson.asString()); + } + return result; }; try { if (DenizenCore.implementation.isSafeThread()) { return eventCall.call(); } else { - FutureTask futureTask = new FutureTask<>(eventCall); + FutureTask futureTask = new FutureTask<>(eventCall); Bukkit.getScheduler().runTask(Denizen.getInstance(), futureTask); return futureTask.get(); } } catch (Exception e) { Debug.echoError(e); - return false; + return null; } } - return false; + return null; } public boolean shouldInterceptMetadata() { 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 26d432358a..8d0d353e81 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,5 +1,6 @@ package com.denizenscript.denizen.nms.v1_16.impl.network.handlers; +import com.denizenscript.denizen.events.player.PlayerReceivesMessageScriptEvent; import com.denizenscript.denizen.nms.abstracts.BlockLight; import com.denizenscript.denizen.nms.v1_16.Handler; import com.denizenscript.denizen.nms.v1_16.impl.ProfileEditorImpl; @@ -819,7 +820,9 @@ public boolean processMirrorForPacket(Packet packet) { public boolean processPacketHandlerForPacket(Packet packet) { if (packet instanceof PacketPlayOutChat && DenizenPacketHandler.instance.shouldInterceptChatPacket()) { - return DenizenPacketHandler.instance.sendPacket(player.getBukkitEntity(), new PacketOutChatImpl((PacketPlayOutChat) packet)); + PacketOutChatImpl packetHelper = new PacketOutChatImpl((PacketPlayOutChat) packet); + PlayerReceivesMessageScriptEvent result = DenizenPacketHandler.instance.sendPacket(player.getBukkitEntity(), packetHelper); + return result != null && result.cancelled; } else if (packet instanceof PacketPlayOutEntityMetadata && DenizenPacketHandler.instance.shouldInterceptMetadata()) { return DenizenPacketHandler.instance.sendPacket(player.getBukkitEntity(), new PacketOutEntityMetadataImpl((PacketPlayOutEntityMetadata) packet)); 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 a12407f95a..0a3186d197 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 @@ -54,11 +54,6 @@ public boolean isActionbar() { return position == ChatMessageType.GAME_INFO; } - @Override - public int getPosition() { - return position.ordinal(); - } - @Override public String getMessage() { return message; @@ -69,31 +64,6 @@ public String getRawJson() { return rawJson; } - @Override - public void setPosition(int position) { - try { - POSITION.set(internal, position); - } - catch (Exception e) { - Debug.echoError(e); - } - } - - @Override - public void setMessage(String message) { - try { - if (!bungee) { - MESSAGE.set(internal, Handler.componentToNMS(FormattedTextHelper.parse(message, ChatColor.WHITE))); - } - else { - internal.components = FormattedTextHelper.parse(message, ChatColor.WHITE); - } - } - catch (Exception e) { - Debug.echoError(e); - } - } - @Override public void setRawJson(String rawJson) { try { diff --git a/v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/impl/network/handlers/DenizenNetworkManagerImpl.java b/v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/impl/network/handlers/DenizenNetworkManagerImpl.java index 4d2c00fb4c..0460492e97 100644 --- a/v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/impl/network/handlers/DenizenNetworkManagerImpl.java +++ b/v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/impl/network/handlers/DenizenNetworkManagerImpl.java @@ -2,6 +2,7 @@ import com.denizenscript.denizen.events.player.PlayerHearsSoundScriptEvent; import com.denizenscript.denizen.events.player.PlayerReceivesActionbarScriptEvent; +import com.denizenscript.denizen.events.player.PlayerReceivesMessageScriptEvent; import com.denizenscript.denizen.nms.abstracts.BlockLight; import com.denizenscript.denizen.nms.v1_17.Handler; import com.denizenscript.denizen.nms.v1_17.ReflectionMappingsInfo; @@ -23,6 +24,7 @@ import com.denizenscript.denizen.utilities.entity.HideEntitiesHelper; import com.denizenscript.denizen.utilities.packets.DenizenPacketHandler; import com.denizenscript.denizen.utilities.packets.HideParticles; +import com.denizenscript.denizencore.events.ScriptEvent; import com.denizenscript.denizencore.objects.core.ElementTag; import com.denizenscript.denizencore.utilities.CoreConfiguration; import com.mojang.datafixers.util.Pair; @@ -271,27 +273,17 @@ public boolean processActionbarPacket(Packet packet, GenericFutureListener { - event.message = new ElementTag(msg); - event.modified = true; - }; - event.modifyRawJson = (json) -> { - event.message = new ElementTag(FormattedTextHelper.stringify(ComponentSerializer.parse(json), ChatColor.WHITE)); - event.modified = true; - }; - event.modifyCancellation = (c) -> event.cancelled = c; - event.cancelled = false; - event.modified = false; - event.fire(); + event = (PlayerReceivesActionbarScriptEvent) event.fire(); if (event.cancelled) { return true; } if (event.modified) { - Component component = Handler.componentToNMS(FormattedTextHelper.parse(event.message.asString(), ChatColor.WHITE)); + Component component = Handler.componentToNMS(ComponentSerializer.parse(event.rawJson.asString())); ClientboundSetActionBarTextPacket newPacket = new ClientboundSetActionBarTextPacket(component); oldManager.send(newPacket, genericfuturelistener); return true; @@ -951,7 +943,9 @@ public boolean processMirrorForPacket(Packet packet) { public boolean processPacketHandlerForPacket(Packet packet) { if (packet instanceof ClientboundChatPacket && DenizenPacketHandler.instance.shouldInterceptChatPacket()) { - return DenizenPacketHandler.instance.sendPacket(player.getBukkitEntity(), new PacketOutChatImpl((ClientboundChatPacket) packet)); + PacketOutChatImpl packetHelper = new PacketOutChatImpl((ClientboundChatPacket) packet); + PlayerReceivesMessageScriptEvent result = DenizenPacketHandler.instance.sendPacket(player.getBukkitEntity(), packetHelper); + return result != null && result.cancelled; } else if (packet instanceof ClientboundSetEntityDataPacket && DenizenPacketHandler.instance.shouldInterceptMetadata()) { return DenizenPacketHandler.instance.sendPacket(player.getBukkitEntity(), new PacketOutEntityMetadataImpl((ClientboundSetEntityDataPacket) packet)); diff --git a/v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/impl/network/packets/PacketOutChatImpl.java b/v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/impl/network/packets/PacketOutChatImpl.java index 7d7fbafc95..285244ab97 100644 --- a/v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/impl/network/packets/PacketOutChatImpl.java +++ b/v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/impl/network/packets/PacketOutChatImpl.java @@ -53,11 +53,6 @@ public boolean isActionbar() { return position == ChatType.GAME_INFO; } - @Override - public int getPosition() { - return position.ordinal(); - } - @Override public String getMessage() { return message; @@ -68,31 +63,6 @@ public String getRawJson() { return rawJson; } - @Override - public void setPosition(int position) { - try { - POSITION.set(internal, position); - } - catch (Exception e) { - Debug.echoError(e); - } - } - - @Override - public void setMessage(String message) { - try { - if (!bungee) { - MESSAGE.set(internal, Handler.componentToNMS(FormattedTextHelper.parse(message, ChatColor.WHITE))); - } - else { - internal.components = FormattedTextHelper.parse(message, ChatColor.WHITE); - } - } - catch (Exception e) { - Debug.echoError(e); - } - } - @Override public void setRawJson(String rawJson) { try { diff --git a/v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/impl/network/handlers/DenizenNetworkManagerImpl.java b/v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/impl/network/handlers/DenizenNetworkManagerImpl.java index 2c6982ece3..29bc4a82d7 100644 --- a/v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/impl/network/handlers/DenizenNetworkManagerImpl.java +++ b/v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/impl/network/handlers/DenizenNetworkManagerImpl.java @@ -2,6 +2,7 @@ import com.denizenscript.denizen.events.player.PlayerHearsSoundScriptEvent; import com.denizenscript.denizen.events.player.PlayerReceivesActionbarScriptEvent; +import com.denizenscript.denizen.events.player.PlayerReceivesMessageScriptEvent; import com.denizenscript.denizen.events.player.PlayerReceivesTablistUpdateScriptEvent; import com.denizenscript.denizen.nms.abstracts.BlockLight; import com.denizenscript.denizen.nms.v1_18.Handler; @@ -25,6 +26,7 @@ import com.denizenscript.denizen.utilities.entity.HideEntitiesHelper; import com.denizenscript.denizen.utilities.packets.DenizenPacketHandler; import com.denizenscript.denizen.utilities.packets.HideParticles; +import com.denizenscript.denizencore.events.ScriptEvent; import com.denizenscript.denizencore.objects.core.ElementTag; import com.denizenscript.denizencore.utilities.CoreConfiguration; import com.denizenscript.denizencore.utilities.CoreUtilities; @@ -396,27 +398,17 @@ public boolean processActionbarPacket(Packet packet, GenericFutureListener { - event.message = new ElementTag(msg); - event.modified = true; - }; - event.modifyRawJson = (json) -> { - event.message = new ElementTag(FormattedTextHelper.stringify(ComponentSerializer.parse(json), ChatColor.WHITE)); - event.modified = true; - }; - event.modifyCancellation = (c) -> event.cancelled = c; - event.cancelled = false; - event.modified = false; - event.fire(); + event = (PlayerReceivesActionbarScriptEvent) event.fire(); if (event.cancelled) { return true; } if (event.modified) { - Component component = Handler.componentToNMS(FormattedTextHelper.parse(event.message.asString(), ChatColor.WHITE)); + Component component = Handler.componentToNMS(ComponentSerializer.parse(event.rawJson.asString())); ClientboundSetActionBarTextPacket newPacket = new ClientboundSetActionBarTextPacket(component); oldManager.send(newPacket, genericfuturelistener); return true; @@ -1101,7 +1093,9 @@ public boolean processMirrorForPacket(Packet packet) { public boolean processPacketHandlerForPacket(Packet packet) { if (packet instanceof ClientboundChatPacket && DenizenPacketHandler.instance.shouldInterceptChatPacket()) { - return DenizenPacketHandler.instance.sendPacket(player.getBukkitEntity(), new PacketOutChatImpl((ClientboundChatPacket) packet)); + PacketOutChatImpl packetHelper = new PacketOutChatImpl((ClientboundChatPacket) packet); + PlayerReceivesMessageScriptEvent result = DenizenPacketHandler.instance.sendPacket(player.getBukkitEntity(), packetHelper); + return result != null && result.cancelled; } else if (packet instanceof ClientboundSetEntityDataPacket && DenizenPacketHandler.instance.shouldInterceptMetadata()) { return DenizenPacketHandler.instance.sendPacket(player.getBukkitEntity(), new PacketOutEntityMetadataImpl((ClientboundSetEntityDataPacket) packet)); diff --git a/v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/impl/network/packets/PacketOutChatImpl.java b/v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/impl/network/packets/PacketOutChatImpl.java index f46d191f57..5b96117aa1 100644 --- a/v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/impl/network/packets/PacketOutChatImpl.java +++ b/v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/impl/network/packets/PacketOutChatImpl.java @@ -53,11 +53,6 @@ public boolean isActionbar() { return position == ChatType.GAME_INFO; } - @Override - public int getPosition() { - return position.ordinal(); - } - @Override public String getMessage() { return message; @@ -68,31 +63,6 @@ public String getRawJson() { return rawJson; } - @Override - public void setPosition(int position) { - try { - POSITION.set(internal, position); - } - catch (Exception e) { - Debug.echoError(e); - } - } - - @Override - public void setMessage(String message) { - try { - if (!bungee) { - MESSAGE.set(internal, Handler.componentToNMS(FormattedTextHelper.parse(message, ChatColor.WHITE))); - } - else { - internal.components = FormattedTextHelper.parse(message, ChatColor.WHITE); - } - } - catch (Exception e) { - Debug.echoError(e); - } - } - @Override public void setRawJson(String rawJson) { try { diff --git a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/network/handlers/DenizenNetworkManagerImpl.java b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/network/handlers/DenizenNetworkManagerImpl.java index f47221a660..062f3e80b3 100644 --- a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/network/handlers/DenizenNetworkManagerImpl.java +++ b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/network/handlers/DenizenNetworkManagerImpl.java @@ -2,6 +2,7 @@ import com.denizenscript.denizen.events.player.PlayerHearsSoundScriptEvent; import com.denizenscript.denizen.events.player.PlayerReceivesActionbarScriptEvent; +import com.denizenscript.denizen.events.player.PlayerReceivesMessageScriptEvent; import com.denizenscript.denizen.events.player.PlayerReceivesTablistUpdateScriptEvent; import com.denizenscript.denizen.nms.abstracts.BlockLight; import com.denizenscript.denizen.nms.v1_19.Handler; @@ -44,6 +45,7 @@ import net.minecraft.core.NonNullList; import net.minecraft.core.SectionPos; import net.minecraft.core.particles.ParticleOptions; +import net.minecraft.data.BuiltinRegistries; import net.minecraft.network.Connection; import net.minecraft.network.ConnectionProtocol; import net.minecraft.network.FriendlyByteBuf; @@ -294,10 +296,10 @@ public void send(Packet packet, GenericFutureListener packet, GenericFutureListener { - event.message = new ElementTag(msg); - event.modified = true; - }; - event.modifyRawJson = (json) -> { - event.message = new ElementTag(FormattedTextHelper.stringify(ComponentSerializer.parse(json), ChatColor.WHITE)); - event.modified = true; - }; - event.modifyCancellation = (c) -> event.cancelled = c; - event.cancelled = false; - event.modified = false; - event.fire(); + event = (PlayerReceivesActionbarScriptEvent) event.fire(); if (event.cancelled) { return true; } if (event.modified) { - Component component = Handler.componentToNMS(FormattedTextHelper.parse(event.message.asString(), ChatColor.WHITE)); + Component component = Handler.componentToNMS(ComponentSerializer.parse(event.rawJson.asString())); ClientboundSetActionBarTextPacket newPacket = new ClientboundSetActionBarTextPacket(component); oldManager.send(newPacket, genericfuturelistener); return true; @@ -1090,13 +1082,29 @@ public boolean processMirrorForPacket(Packet packet) { return false; } - public boolean processPacketHandlerForPacket(Packet packet) { - // TODO: 1.19: New chat system, probably needs event changes? - /* - if (packet instanceof ClientboundChatPacket && DenizenPacketHandler.instance.shouldInterceptChatPacket()) { - return DenizenPacketHandler.instance.sendPacket(player.getBukkitEntity(), new PacketOutChatImpl((ClientboundChatPacket) packet)); + public boolean processPacketHandlerForPacket(Packet packet, GenericFutureListener> genericfuturelistener) { + if (DenizenPacketHandler.instance.shouldInterceptChatPacket()) { + PacketOutChatImpl packetHelper = null; + if (packet instanceof ClientboundSystemChatPacket) { + packetHelper = new PacketOutChatImpl((ClientboundSystemChatPacket) packet); + } + else if (packet instanceof ClientboundPlayerChatPacket) { + packetHelper = new PacketOutChatImpl((ClientboundPlayerChatPacket) packet); + } + if (packetHelper != null) { + PlayerReceivesMessageScriptEvent result = DenizenPacketHandler.instance.sendPacket(player.getBukkitEntity(), packetHelper); + if (result != null) { + if (result.cancelled) { + return true; + } + if (result.modified) { + oldManager.send(new ClientboundSystemChatPacket(ComponentSerializer.parse(result.rawJson.asString()), BuiltinRegistries.CHAT_TYPE.getId(packetHelper.position)), genericfuturelistener); + return true; + } + } + } } - else */if (packet instanceof ClientboundSetEntityDataPacket && DenizenPacketHandler.instance.shouldInterceptMetadata()) { + if (packet instanceof ClientboundSetEntityDataPacket && DenizenPacketHandler.instance.shouldInterceptMetadata()) { return DenizenPacketHandler.instance.sendPacket(player.getBukkitEntity(), new PacketOutEntityMetadataImpl((ClientboundSetEntityDataPacket) packet)); } return false; diff --git a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/network/packets/PacketOutChatImpl.java b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/network/packets/PacketOutChatImpl.java new file mode 100644 index 0000000000..5c7b393fba --- /dev/null +++ b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/network/packets/PacketOutChatImpl.java @@ -0,0 +1,61 @@ +package com.denizenscript.denizen.nms.v1_19.impl.network.packets; + +import com.denizenscript.denizen.nms.interfaces.packets.PacketOutChat; +import com.denizenscript.denizen.utilities.FormattedTextHelper; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.chat.ComponentSerializer; +import net.minecraft.data.BuiltinRegistries; +import net.minecraft.network.chat.ChatType; +import net.minecraft.network.protocol.game.ClientboundPlayerChatPacket; +import net.minecraft.network.protocol.game.ClientboundSystemChatPacket; + +public class PacketOutChatImpl implements PacketOutChat { + + public static ChatType ACTIONBAR_TYPE = BuiltinRegistries.CHAT_TYPE.get(ChatType.GAME_INFO); + + public ClientboundPlayerChatPacket playerPacket; + public ClientboundSystemChatPacket systemPacket; + public ChatType position; + public String message; + public String rawJson; + + public PacketOutChatImpl(ClientboundSystemChatPacket internal) { + systemPacket = internal; + rawJson = internal.content(); + message = FormattedTextHelper.stringify(ComponentSerializer.parse(rawJson), ChatColor.BLACK); + position = BuiltinRegistries.CHAT_TYPE.getHolder(internal.typeId()).get().value(); + } + + public PacketOutChatImpl(ClientboundPlayerChatPacket internal) { + playerPacket = internal; + rawJson = ComponentSerializer.toString(internal.signedContent()); + message = FormattedTextHelper.stringify(ComponentSerializer.parse(rawJson), ChatColor.BLACK); + position = BuiltinRegistries.CHAT_TYPE.getHolder(internal.typeId()).get().value(); + } + + + @Override + public boolean isSystem() { + return systemPacket != null; + } + + @Override + public boolean isActionbar() { + return position == ACTIONBAR_TYPE; + } + + @Override + public String getMessage() { + return message; + } + + @Override + public String getRawJson() { + return rawJson; + } + + @Override + public void setRawJson(String rawJson) { + this.rawJson = rawJson; + } +}