andrei1058 / andrei1058/BedWars1058
[Bug] BedWars1058 v25.5-SNAPSHOT throws NullPointerException only on game end / final kill
- Lingua principale
- Java
- Stelle
- 393
- Fork
- 286
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
Description
When a player gets eliminated (final kill) or the game ends, the following error appears in console:
[08:30:17 ERROR]: Could not pass event PlayerDeathEvent to BedWars1058 v25.5-SNAPSHOT
java.lang.NullPointerException: Cannot invoke "String.trim()" because the return value of "com.andrei1058.bedwars.api.server.VersionSupport.getShopUpgradeIdentifier(org.bukkit.inventory.ItemStack)" is null
at bedwars-plugin-25.5-SNAPSHOT.jar/com.andrei1058.bedwars.listeners.dropshandler.PlayerDrops.handlePlayerDrops(PlayerDrops.java:97) ~[bedwars-plugin-25.5-SNAPSHOT.jar:?]
at bedwars-plugin-25.5-SNAPSHOT.jar/com.andrei1058.bedwars.listeners.DamageDeathMove.onDeath(DamageDeathMove.java:482) ~[bedwars-plugin-25.5-SNAPSHOT.jar:?]
at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[paper-api-1.21.4-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[paper-api-1.21.4-R0.1-SNAPSHOT.jar:?]
at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:131) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:628) ~[paper-api-1.21.4-R0.1-SNAPSHOT.jar:?]
at org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerDeathEvent(CraftEventFactory.java:1028) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.server.level.ServerPlayer.die(ServerPlayer.java:1088) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.world.entity.LivingEntity.hurtServer(LivingEntity.java:1495) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.world.entity.player.Player.hurtServer(Player.java:937) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.server.level.ServerPlayer.hurtServer(ServerPlayer.java:1227) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.world.entity.Entity.hurtOrSimulate(Entity.java:2225) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.world.entity.player.Player.attack(Player.java:1291) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.server.level.ServerPlayer.attack(ServerPlayer.java:2445) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.server.network.ServerGamePacketListenerImpl$2.onAttack(ServerGamePacketListenerImpl.java:2834) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.network.protocol.game.ServerboundInteractPacket$1.dispatch(ServerboundInteractPacket.java:29) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.network.protocol.game.ServerboundInteractPacket.dispatch(ServerboundInteractPacket.java:91) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.server.network.ServerGamePacketListenerImpl.handleInteract(ServerGamePacketListenerImpl.java:2757) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.network.protocol.game.ServerboundInteractPacket.handle(ServerboundInteractPacket.java:78) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.network.protocol.game.ServerboundInteractPacket.handle(ServerboundInteractPacket.java:14) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$0(PacketUtils.java:29) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.server.TickTask.run(TickTask.java:18) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:155) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:24) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1448) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:176) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:129) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1428) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1422) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:139) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.server.MinecraftServer.managedBlock(MinecraftServer.java:1379) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:1387) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1264) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:310) ~[paper-1.21.4.jar:1.21.4-232-12d8fe0]
at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]
Note: This error does NOT occur on regular deaths (e.g., falling into void before bed break). It only happens when a player is permanently eliminated (final kill) or when the entire game ends. Since our test environment only had two players, final kill equals game end – we cannot determine which specific scenario triggers it.
Root Cause Analysis
The method getShopUpgradeIdentifier() returns null for some ItemStack that the eliminated player had in their inventory. This likely happens because:
• The item was purchased from a shop but lacks a proper upgrade identifier (possibly due to incompatible NBT data).
• The drop handler (PlayerDrops.handlePlayerDrops) is called only on permanent elimination/game end, and at that point it tries to process all items, encountering one without a valid identifier.
• Incompatibility between BedWars1058 25.5-SNAPSHOT and Paper 1.21.4's item component system may cause the identifier to be missing.
The code at PlayerDrops.java:97 calls .trim() on the result without null-checking, leading to the NPE.
Steps to Reproduce
1. Install BedWars1058 v25.5-SNAPSHOT on Paper 1.21.4.
2. Start a game with at least two players.
3. Eliminate the other player (break bed then kill) OR let the game end naturally.
4. Observe the error in console after the final kill/game end event.
Expected Behavior
Player elimination and game end should be handled gracefully without exceptions; drops should be processed correctly.
Temporary Workaround
• Check all custom items on your server (especially those from plugins like Essentials, ShopGUI+, etc.) and ensure they are not interfering with BedWars' drop handler.
• Downgrade to a stable build of BedWars1058 (e.g., 23.x series) if possible.
• Wait for an official fix from the developer.
Environment
• Server Software: Paper 1.21.4 (build #232)
• Plugin Version: BedWars1058 v25.5-SNAPSHOT
• Java: Java 21
• OS: Windows 11
Guida per i contributori
Apri la guida per i contributori
Valutazione
Questa issue non è ancora stata valutata.