dmulloy2 / ProtocolLib

Provides read and write access to the Minecraft protocol with Bukkit.
GNU General Public License v2.0
1.03k stars 259 forks source link

Paper Component outdated #1387

Closed Galajus closed 3 years ago

Galajus commented 3 years ago

Describe the bug I cant get Component.text from Objective send packet

To Reproduce Steps to reproduce the behavior:

Code causing error: Component component = (Component) packet.getModifier().read(1);

I'm trying too with TextComponent and ScoreComponent

Whole method:

this.protocolManager.addPacketListener
                (new PacketAdapter(galajus.getPlugin(), ListenerPriority.NORMAL, PacketType.Play.Server.SCOREBOARD_OBJECTIVE) {

            @Override
            public void onPacketSending(PacketEvent e) {
                if (e.getPacketType() != PacketType.Play.Server.SCOREBOARD_OBJECTIVE) return;
                Player p = e.getPlayer();
                PacketContainer packet = e.getPacket();
                HelpGalajus.infoLogToConsole(packet.toString());

                HelpGalajus.infoLogToConsole(packet.getStrings().read(0));
                try {
                    Component component = (Component) packet.getModifier().read(1);
                    HelpGalajus.infoLogToConsole(component.toString()); //log to console
                } catch (ClassCastException ex) {
                    ex.printStackTrace();
                }
            }
        });
    Error:
    ```
    [14:26:26 WARN]: java.lang.ClassCastException: class io.papermc.paper.adventure.AdventureComponent cannot be cast to class net.kyori.adventure.text.ScoreComponent (io.papermc.paper.adventure.AdventureComponent and net.kyori.adventure.text.ScoreComponent are in unnamed module of loader 'app')

[14:26:26 WARN]: at galajus-1.9.jar//pl.galajus.Protocolib.PacketListenerScoreboardObjectives$1.onPacketSending(PacketListenerScoreboardObjectives.java:42) [14:26:26 WARN]: at ProtocolLib.jar//com.comphenix.protocol.injector.SortedPacketListenerList.invokeSendingListener(SortedPacketListenerList.java:195)[14:26:26 WARN]: at ProtocolLib.jar//com.comphenix.protocol.injector.SortedPacketListenerList.invokePacketSending(SortedPacketListenerList.java:149)


**Expected behavior**
I want get Objective title

**Screenshots**
none

**Version Info**

ProtocolLib Dump Timestamp: 08/30/21 15:36:33

ProtocolLib Version: ProtocolLib v4.7.0 Bukkit Version: 1.17.1-R0.1-SNAPSHOT Server Version: git-Purpur-1334 (MC: 1.17.1) Java Version: 16.0.2

ProtocolLib: com.comphenix.protocol.ProtocolLib@27e6e94e[ statistics=com.comphenix.protocol.metrics.Statistics@376e9096 backgroundCompiler=com.comphenix.protocol.reflect.compiler.BackgroundCompiler@5539bd9b packetTask=8 tickCounter=654462 unhookTask=com.comphenix.protocol.injector.DelayedSingleTask@40eb9cb4 configExpectedMod=1 updater=com.comphenix.protocol.updater.SpigotUpdater@5057b17e redirectHandler=com.comphenix.protocol.ProtocolLib$2@13fe61c2 commandProtocol=com.comphenix.protocol.CommandProtocol@b33c343 commandPacket=com.comphenix.protocol.CommandPacket@17a1e0ad commandFilter=com.comphenix.protocol.CommandFilter@7a107f66 packetLogging=com.comphenix.protocol.PacketLogging@1a80f197 skipDisable=false isEnabled=true loader=org.bukkit.plugin.java.JavaPluginLoader@fbc005f server=CraftServer{serverName=Purpur,serverVersion=git-Purpur-1334,minecraftVersion=1.17.1} file=plugins\ProtocolLib.jar description=org.bukkit.plugin.PluginDescriptionFile@6e128b44 dataFolder=plugins\ProtocolLib classLoader=PluginClassLoader{plugin=ProtocolLib v4.7.0, pluginEnabled=true, url=plugins\ProtocolLib.jar} naggable=true newConfig=YamlConfiguration[path='', root='YamlConfiguration'] configFile=plugins\ProtocolLib\config.yml logger=com.destroystokyo.paper.utils.PaperPluginLogger@1c528b9f ] Manager: com.comphenix.protocol.injector.PacketFilterManager@a28a1dd[ unhookTask=com.comphenix.protocol.injector.DelayedSingleTask@40eb9cb4 packetListeners=[PacketAdapter[plugin=Galajus, sending=ListeningWhitelist[priority=NORMAL, packets=[SCOREBOARD_SCORE[class=PacketPlayOutScoreboardScore, id=86]], gamephase=PLAYING, options=[]], receiving=EMPTY_WHITELIST], PacketAdapter[plugin=HolographicDisplays, sending=ListeningWhitelist[priority=NORMAL, packets=[SPAWN_ENTITY[class=PacketPlayOutSpawnEntity, id=0], SPAWN_ENTITY_LIVING[class=PacketPlayOutSpawnEntityLiving, id=2], ENTITY_METADATA[class=PacketPlayOutEntityMetadata, id=77], REL_ENTITY_MOVE[class=PacketPlayOutRelEntityMove, id=41], REL_ENTITY_MOVE_LOOK[class=PacketPlayOutRelEntityMoveLook, id=42]], gamephase=PLAYING, options=[]], receiving=EMPTY_WHITELIST], PacketAdapter[plugin=Galajus, sending=ListeningWhitelist[priority=NORMAL, packets=[SCOREBOARD_OBJECTIVE[class=PacketPlayOutScoreboardObjective, id=83]], gamephase=PLAYING, options=[]], receiving=EMPTY_WHITELIST], PacketAdapter[plugin=CMI, sending=ListeningWhitelist[priority=HIGH, packets=[UNLOAD_CHUNK[class=PacketPlayOutUnloadChunk, id=29]], gamephase=PLAYING, options=[]], receiving=EMPTY_WHITELIST]] packetInjector=com.comphenix.protocol.injector.netty.ProtocolInjector$5@701a4377 playerInjection=com.comphenix.protocol.injector.netty.ProtocolInjector$4@1d6ec73f inputBufferedPackets=[] recievedListeners=com.comphenix.protocol.injector.SortedPacketListenerList@15e8a97e sendingListeners=com.comphenix.protocol.injector.SortedPacketListenerList@5a81c457 hasClosed=false classLoader=PluginClassLoader{plugin=ProtocolLib v4.7.0, pluginEnabled=true, url=plugins\ProtocolLib.jar} reporter=com.comphenix.protocol.ProtocolLib$1@7822358b server=CraftServer{serverName=Purpur,serverVersion=git-Purpur-1334,minecraftVersion=1.17.1} library=ProtocolLib v4.7.0 asyncFilterManager=com.comphenix.protocol.async.AsyncFilterManager@139e428f knowsServerPackets=true knowsClientPackets=true phaseLoginCount=0 phasePlayingCount=4 packetCreation=false nettyInjector=com.comphenix.protocol.injector.netty.ProtocolInjector@1f9623e2 pluginVerifier=com.comphenix.protocol.injector.PluginVerifier@3103f9a9 hasRecycleDistance=true minecraftVersion=(MC: 1.17.1) debug=false ]

Listeners: pl.galajus.Protocolib.PacketListenerScoreboardObjectives$2@218d2929[ plugin=Galajus v1.9 connectionSide=SERVER_SIDE receivingWhitelist=EMPTY_WHITELIST sendingWhitelist=ListeningWhitelist[priority=NORMAL, packets=[SCOREBOARD_SCORE[class=PacketPlayOutScoreboardScore, id=86]], gamephase=PLAYING, options=[]] ] com.gmail.filoghost.holographicdisplays.bridge.protocollib.current.ProtocolLibHookImpl$1@33d1817d[ plugin=HolographicDisplays v2.4.8 connectionSide=SERVER_SIDE receivingWhitelist=EMPTY_WHITELIST sendingWhitelist=ListeningWhitelist[priority=NORMAL, packets=[SPAWN_ENTITY[class=PacketPlayOutSpawnEntity, id=0], SPAWN_ENTITY_LIVING[class=PacketPlayOutSpawnEntityLiving, id=2], ENTITY_METADATA[class=PacketPlayOutEntityMetadata, id=77], REL_ENTITY_MOVE[class=PacketPlayOutRelEntityMove, id=41], REL_ENTITY_MOVE_LOOK[class=PacketPlayOutRelEntityMoveLook, id=42]], gamephase=PLAYING, options=[]] ] pl.galajus.Protocolib.PacketListenerScoreboardObjectives$1@4621338d[ plugin=Galajus v1.9 connectionSide=SERVER_SIDE receivingWhitelist=EMPTY_WHITELIST sendingWhitelist=ListeningWhitelist[priority=NORMAL, packets=[SCOREBOARD_OBJECTIVE[class=PacketPlayOutScoreboardObjective, id=83]], gamephase=PLAYING, options=[]] ] com.Zrips.CMI.AllListeners.ProtocolEvent$1@4254f2ba[ plugin=CMI v9.0.1.2 connectionSide=SERVER_SIDE receivingWhitelist=EMPTY_WHITELIST sendingWhitelist=ListeningWhitelist[priority=HIGH, packets=[UNLOAD_CHUNK[class=PacketPlayOutUnloadChunk, id=29]], gamephase=PLAYING, options=[]] ]

Plugins Using ProtocolLib: Galajus by [Galajus] HolographicDisplays by [filoghost] CMI by [Zrips]


**Additional context**
I dont want create second threat but i have a question, why every packet is firing twice? I have that with protocolib and por expample waterfall (when i get map of commands sended to player).

Example - protocolib:

[14:26:26 INFO]: [GALAJUS] PacketContainer[type=SCOREBOARD_SCORE[class=PacketPlayOutScoreboardScore, id=86], structureModifier=StructureModifier[fieldType=class java.lang.Object, data=[private final java.lang.String net.minecraft.network.protocol.game.PacketPlayOutScoreboardScore.a, private final java.lang.String net.minecraft.network.protocol.game.PacketPlayOutScoreboardScore.b, private final int net.minecraft.network.protocol.game.PacketPlayOutScoreboardScore.c, private final net.minecraft.server.ScoreboardServer$Action net.minecraft.network.protocol.game.PacketPlayOutScoreboardScore.d]]] [14:26:26 INFO]: [GALAJUS] Galajusek [14:26:26 INFO]: [GALAJUS] Daily_Galajusek [14:26:26 INFO]: [GALAJUS] 0 [14:26:26 INFO]: [GALAJUS] PacketContainer[type=SCOREBOARD_SCORE[class=PacketPlayOutScoreboardScore, id=86], structureModifier=StructureModifier[fieldType=class java.lang.Object, data=[private final java.lang.String net.minecraft.network.protocol.game.PacketPlayOutScoreboardScore.a, private final java.lang.String net.minecraft.network.protocol.game.PacketPlayOutScoreboardScore.b, private final int net.minecraft.network.protocol.game.PacketPlayOutScoreboardScore.c, private final net.minecraft.server.ScoreboardServer$Action net.minecraft.network.protocol.game.PacketPlayOutScoreboardScore.d]]] [14:26:26 INFO]: [GALAJUS] Galajusek [14:26:26 INFO]: [GALAJUS] Daily_Galajusek [14:26:26 INFO]: [GALAJUS] 12

what is intresting look that (post problem error)

[14:26:26 WARN]: java.lang.ClassCastException: class io.papermc.paper.adventure.AdventureComponent cannot be cast to class net.kyori.adventure.text.ScoreComponent (io.papermc.paper.adventure.AdventureComponent and net.kyori.adventure.text.ScoreComponent are in unnamed module of loader 'app')

second fire of a same packet:

[14:26:26 WARN]: java.lang.ClassCastException: class net.minecraft.network.chat.ChatComponentText cannot be cast to class net.kyori.adventure.text.ScoreComponent (net.minecraft.network.chat.ChatComponentText and net.kyori.adventure.text.ScoreComponent are in unnamed module of loader 'app')

Two other classes (nms and paper -> maybe this is error from paper?)

Paper geting map of commands result

14:40:22 [INFO] [Beblok] <-> ServerConnector [lobby] has connected 14:40:22 [INFO] [GALAJUSBUNGEE] forceresourcepacks | Command(name=frp, permission=forceresourcepacks.command, aliases=[forceresourcepacks], permissionMessage=null) 14:40:22 [INFO] [GALAJUSBUNGEE] server | Command(name=server, permission=bungeecord.command.server, aliases=[], permissionMessage=null) 14:40:22 [INFO] [GALAJUSBUNGEE] bf | Command(name=aegis, permission=null, aliases=[escanorproxy, botfilter, bf, antibot, proxy], permissionMessage=null) 14:40:22 [INFO] [GALAJUSBUNGEE] resetpack | Command(name=resetpack, permission=forceresourcepacks.command.resetpack, aliases=[], permissionMessage=null) 14:40:22 [INFO] [GALAJUSBUNGEE] log | Command(name=login, permission=null, aliases=[log, l], permissionMessage=null) [... more commands...]


double...

14:40:22 [INFO] [GALAJUSBUNGEE] log | Command(name=login, permission=null, aliases=[log, l], permissionMessage=null) 14:40:22 [INFO] [GALAJUSBUNGEE] login | Command(name=login, permission=null, aliases=[log, l], permissionMessage=null) 14:40:22 [INFO] [GALAJUSBUNGEE] l | Command(name=login, permission=null, aliases=[log, l], permissionMessage=null) 14:40:22 [INFO] [GALAJUSBUNGEE] logout | Command(name=logout, permission=null, aliases=[], permissionMessage=null) 14:40:22 [INFO] [GALAJUSBUNGEE] reg | Command(name=register, permission=null, aliases=[reg], permissionMessage=null) 14:40:22 [INFO] [GALAJUSBUNGEE] register | Command(name=register, permission=null, aliases=[reg], permissionMessage=null) 14:40:23 [INFO] [GALAJUSBUNGEE] forceresourcepacks | Command(name=frp, permission=forceresourcepacks.command, aliases=[forceresourcepacks], permissionMessage=null) [...morecommands...]

Code of getting map of commands:

@EventHandler public void onDefineCommand(ProxyDefineCommandsEvent e) {

    if (e.getReceiver() instanceof ProxiedPlayer p) {

        if (p.hasPermission("galajus")) return;

        e.getCommands().clear();
        Map<String, Command> commandMap = galajusBungee.getPluginData().getCommandMap();
        e.getCommands().putAll(commandMap);
    }
}
```
Galajus commented 3 years ago

Up, i'm forgot about that: This is error when i try convert packet Objective title, e packet is not exist in 1.17.1

[04:15:10 ERROR]: Parameters:
  net.minecraft.network.protocol.game.PacketPlayOutScoreboardObjective@699a05ae[
    d=Arena
    e=io.papermc.paper.adventure.AdventureComponent@7794bdea
    f=INTEGER
    g=0
  ]

Ok, i found :d

WrappedChatComponent.fromHandle();