SpraxDev / BetterChairs

BetterChairs is a Minecraft plugin, that allows you to sit on chairs.
MIT License
38 stars 5 forks source link

Paper version 1.21.1 not recognized #242

Closed Fluggs closed 1 month ago

Fluggs commented 1 month ago

Describe the bug Paper 1.21.1 does not seem to be supported. When I try to sit, nothing happens and an error is thrown in the server console.

To Reproduce

  1. Launch a fresh install of Paper 1.21.1
  2. Install BetterChairs
  3. Launch server
  4. Try to sit

Screenshots, Videos, Logs or Errors Launch:

[BetterChairs] Enabling BetterChairs v1.9.1
[BetterChairs] Your server version (null) is not fully supported - Loading fallback...

Sitting:

[10:09:22 ERROR]: Could not pass event PlayerInteractEvent to BetterChairs v1.9.1
java.lang.ExceptionInInitializerError: null
        at BetterChairs-v1.9.1.jar/de.sprax2013.betterchairs.third_party.de.tr7zw.nbtapi.NBTEntity.getCompound(NBTEntity.java:81) ~[BetterChairs-v1.9.1.jar:?]
        at BetterChairs-v1.9.1.jar/de.sprax2013.betterchairs.third_party.de.tr7zw.nbtapi.NBT.modify(NBT.java:320) ~[BetterChairs-v1.9.1.jar:?]
        at BetterChairs-v1.9.1.jar/de.sprax2013.betterchairs.ChairUtils.applyChairProtections(ChairUtils.java:55) ~[BetterChairs-v1.9.1.jar:?]
        at BetterChairs-v1.9.1.jar/de.sprax2013.betterchairs.BetterChairsPlugin$1.spawnChairEntity(BetterChairsPlugin.java:133) ~[BetterChairs-v1.9.1.jar:?]
        at BetterChairs-v1.9.1.jar/de.sprax2013.betterchairs.ChairManager.create(ChairManager.java:95) ~[BetterChairs-v1.9.1.jar:?]
        at BetterChairs-v1.9.1.jar/de.sprax2013.betterchairs.ChairManager.create(ChairManager.java:78) ~[BetterChairs-v1.9.1.jar:?]
        at BetterChairs-v1.9.1.jar/de.sprax2013.betterchairs.EventListener.lambda$onInteract$3(EventListener.java:227) ~[BetterChairs-v1.9.1.jar:?]
        at BetterChairs-v1.9.1.jar/de.sprax2013.betterchairs.EventListener.onInteract(EventListener.java:239) ~[BetterChairs-v1.9.1.jar:?]
        at com.destroystokyo.paper.event.executor.MethodHandleEventExecutor.execute(MethodHandleEventExecutor.java:40) ~[paper-mojangapi-1.21.1-R0.1-SNAPSHOT.jar:?]
        at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[paper-mojangapi-1.21.1-R0.1-SNAPSHOT.jar:1.21.1-5-7d7f123]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[paper-mojangapi-1.21.1-R0.1-SNAPSHOT.jar:?]
        at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:131) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:628) ~[paper-mojangapi-1.21.1-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:602) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at net.minecraft.server.level.ServerPlayerGameMode.useItemOn(ServerPlayerGameMode.java:536) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at net.minecraft.server.network.ServerGamePacketListenerImpl.handleUseItemOn(ServerGamePacketListenerImpl.java:1871) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at net.minecraft.network.protocol.game.ServerboundUseItemOnPacket.handle(ServerboundUseItemOnPacket.java:44) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at net.minecraft.network.protocol.game.ServerboundUseItemOnPacket.handle(ServerboundUseItemOnPacket.java:11) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$0(PacketUtils.java:56) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at net.minecraft.server.TickTask.run(TickTask.java:18) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:151) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:24) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1537) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:201) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:125) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1514) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1507) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:135) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at net.minecraft.server.MinecraftServer.managedBlock(MinecraftServer.java:1466) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:1473) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1318) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:330) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at java.base/java.lang.Thread.run(Thread.java:1570) ~[?:?]
Caused by: java.lang.NullPointerException: Cannot invoke "Object.hashCode()" because "pk" is null
        at java.base/java.util.ImmutableCollections$MapN.probe(ImmutableCollections.java:1328) ~[?:?]
        at java.base/java.util.ImmutableCollections$MapN.get(ImmutableCollections.java:1242) ~[?:?]
        at java.base/java.util.ImmutableCollections$AbstractImmutableMap.getOrDefault(ImmutableCollections.java:1097) ~[?:?]
        at io.papermc.paper.pluginremap.reflect.PaperReflection.mapDeclaredFieldName(PaperReflection.java:79) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at io.papermc.reflectionrewriter.runtime.AbstractDefaultRulesReflectionProxy.getDeclaredField(AbstractDefaultRulesReflectionProxy.java:90) ~[reflection-rewriter-runtime-0.0.3.jar:?]
        at io.papermc.paper.pluginremap.reflect.PaperReflectionHolder.getDeclaredField(Unknown Source) ~[paper-1.21.1.jar:1.21.1-5-7d7f123]
        at BetterChairs-v1.9.1.jar/de.sprax2013.betterchairs.third_party.de.tr7zw.nbtapi.NBTReflectionUtil.<clinit>(NBTReflectionUtil.java:59) ~[BetterChairs-v1.9.1.jar:?]
        ... 34 more

Additional context Digging around in the plugin, I found the version parsing here: https://github.com/SpraxDev/LimeDevUtility/blob/master/modules/spigot/lime-spigot-api/src/main/java/de/sprax2013/lime/spigot/nms/NmsVersionDetector.java#L26

return Optional.of(Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]);

Quoting paper docs ( https://docs.papermc.io/paper/dev/internals ):

Parsing the version from the package name of classes is no longer possible as of 1.20.5 as Paper stopped relocating the CraftBukkit package. See the reflection section for more information.

SpraxDev commented 1 month ago

I've actually started preparing 1.21.1 support this morning and I've released it just now.

The code you found is actually the most important one for Paper support right now, but it actually handles Paper servers in the catch-block: https://github.com/SpraxDev/LimeDevUtility/blob/master/modules/spigot/lime-spigot-api/src/main/java/de/sprax2013/lime/spigot/nms/NmsVersionDetector.java#L29-L30

The mapping just has to be updated for new Paper versions to work.


I'll close the issue but let me know if v1.10.0 still doesn't work for you!

Fluggs commented 1 month ago

Tested and works, thanks!

SpraxDev commented 1 month ago

Thanks for testing and letting me know!