MegavexNetwork / scoreboard-library

Powerful packet-level scoreboard library for Paper/Spigot servers
https://megavex.net
MIT License
122 stars 13 forks source link

Objectives support #5

Closed vytskalt closed 10 months ago

vytskalt commented 1 year ago

TODO:

closes #3

huanmeng-qwq commented 10 months ago

Can you promote the completion of this feature? @vytskalt

vytskalt commented 10 months ago

Can you promote the completion of this feature? @vytskalt

I don't have much time due to school atm unfortunately, but I'll try to complete this within a week

huanmeng-qwq commented 10 months ago

Is it ready to use?

vytskalt commented 10 months ago

no, i haven't tested it yet and only implemented the packet stuff for 1.20.2 so far

huanmeng-qwq commented 10 months ago

Looking forward to successfully running on 1.8.8!

vytskalt commented 10 months ago

Looking forward to successfully running on 1.8.8!

I've implemented it for 1.8.8, seems to work fine from my limited testing. You can change the version of the dependency to 087d086945 to get the changes. Example is here. Can you test it out if it works for you?

huanmeng-qwq commented 10 months ago

It seems that the version of packetevent I am using has not been implemented yet? https://github.com/MegavexNetwork/scoreboard-library/blob/087d086945df2535ee843c1f5cb7fe61ccd24923/versions/packetevents/src/main/java/net/megavex/scoreboardlibrary/implementation/packetAdapter/packetevents/PacketAdapterImpl.java#L55-L58

vytskalt commented 10 months ago

Yeah I havent implemented it for packetevents yet, but you can use the native 1.8.8 packet adapter

huanmeng-qwq commented 10 months ago

findAndLoadImplementationClass cannot correctly obtain the version by using 'Bukkit.getServer().getBukkitVersion()'. I am using a custom Spigot, can you try switching to 'Bukkit.getServer().getClass().getPackage()'?

vytskalt commented 10 months ago

findAndLoadImplementationClass cannot correctly obtain the version by using 'Bukkit.getServer().getBukkitVersion()'. I am using a custom Spigot, can you try switching to 'Bukkit.getServer().getClass().getPackage()'?

PaperMC has recently advised to switch from using Bukkit.getServer().getClass().getPackage() to Bukkit.getServer().getBukkitVersion() as they plan to remove the version from the package https://discord.com/channels/289587909051416579/1077385604012179486/1155459001090318346 (PaperMC discord)

What kind of values does your custom spigot return?

huanmeng-qwq commented 10 months ago

It's the commitId of git example: ForkSpigot-980636d

vytskalt commented 10 months ago

It's the commitId of git example: ForkSpigot-980636d

Not sure what I can do to fix it. The git hash should be in Bukkit.getServer().getVersion() and not Bukkit.getVersion().getBukkitVersion()

huanmeng-qwq commented 10 months ago

Okay, I will try to make it work.

huanmeng-qwq commented 10 months ago
[22:49:14 ERROR]: [address|username] <-> DownstreamBridge <-> [server] - encountered exception
java.lang.IllegalArgumentException: Objective c6ad7e1834 already exists in this scoreboard
        at com.google.common.base.Preconditions.checkArgument(Preconditions.java:220) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at net.md_5.bungee.api.score.Scoreboard.addObjective(Scoreboard.java:55) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at net.md_5.bungee.connection.DownstreamBridge.handle(DownstreamBridge.java:188) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at net.md_5.bungee.protocol.packet.ScoreboardObjective.handle(ScoreboardObjective.java:67) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at net.md_5.bungee.netty.HandlerBoss.channelRead(HandlerBoss.java:114) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:336) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:308) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:800) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:499) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:397) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at java.lang.Thread.run(Thread.java:833) ~[?:?]
objective = objectiveManager.create(randomKey());
objectiveManager.display(ObjectiveDisplaySlot.playerList(), objective);
objective.score(nickName(), 10);
objectiveManager.addPlayer(viewer);

I haven't created an objective before, so I can confirm that it's the first one

vytskalt commented 10 months ago

Interesting, ill check it out

vytskalt commented 10 months ago
[22:49:14 ERROR]: [address|username] <-> DownstreamBridge <-> [server] - encountered exception
java.lang.IllegalArgumentException: Objective c6ad7e1834 already exists in this scoreboard
        at com.google.common.base.Preconditions.checkArgument(Preconditions.java:220) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at net.md_5.bungee.api.score.Scoreboard.addObjective(Scoreboard.java:55) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at net.md_5.bungee.connection.DownstreamBridge.handle(DownstreamBridge.java:188) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at net.md_5.bungee.protocol.packet.ScoreboardObjective.handle(ScoreboardObjective.java:67) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at net.md_5.bungee.netty.HandlerBoss.channelRead(HandlerBoss.java:114) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:336) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:308) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:800) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:499) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:397) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[Waterfall.jar:git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:c6ccee1:unknown]
        at java.lang.Thread.run(Thread.java:833) ~[?:?]
objective = objectiveManager.create(randomKey());
objectiveManager.display(ObjectiveDisplaySlot.playerList(), objective);
objective.score(nickName(), 10);
objectiveManager.addPlayer(viewer);

I haven't created an objective before, so I can confirm that it's the first one

fixed

vytskalt commented 10 months ago

new version is b747d4bfeb, only thing left is to test everything and then ill merge this

vytskalt commented 10 months ago

That might be a limitation in the vanilla client itself

huanmeng-qwq commented 10 months ago

Okay, so far I don't have any problems. I have tested PlayerList and BelowName (v1_8_R3-b747d4bfeb)

vytskalt commented 10 months ago

Everything appears to be working from my testing, will merge this and make a release