Skip to content

Fix : BentoBoxLevelTaskType throwing ClassCastException - #886

Merged
Krakenied merged 1 commit into
LMBishop:masterfrom
Bad-Pop:master
Oct 8, 2026
Merged

Krakenied merged 1 commit into
LMBishop:masterfrom
Bad-Pop:master

Conversation

@Bad-Pop

@Bad-Pop Bad-Pop commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

The BentoBoxLevelTaskType class was attempting to parse a long value, while the YAML configuration specified an Integer.

This behavior caused a ClassCastException to be thrown every time a player used the /is level command :

[00:00:50 ERROR]: Could not pass event IslandLevelCalculatedEvent to Quests v3.16.1-430c34a
java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.Long (java.lang.Integer and java.lang.Long are in module java.base of loader 'bootstrap')
        at Quests-3.16.1-430c34a.jar//com.leonardobishop.quests.bukkit.tasktype.type.dependent.BentoBoxLevelTaskType.handle(BentoBoxLevelTaskType.java:66) ~[?:?]
        at Quests-3.16.1-430c34a.jar//com.leonardobishop.quests.bukkit.tasktype.type.dependent.BentoBoxLevelTaskType.onIslandLevelCalculated(BentoBoxLevelTaskType.java:43) ~[?:?]
        at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[paper-api-1.21.11-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:71) ~[paper-api-1.21.11-R0.1-SNAPSHOT.jar:?]
        at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54) ~[paper-1.21.11.jar:1.21.11-127-bd74bf6]
        at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:131) ~[paper-1.21.11.jar:1.21.11-127-bd74bf6]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:628) ~[paper-api-1.21.11-R0.1-SNAPSHOT.jar:?]
        at Level-2.28.1-1788014941501.jar//world.bentobox.level.LevelsManager.fireIslandLevelCalcEvent(LevelsManager.java:134) ~[?:?]
        at Level-2.28.1-1788014941501.jar//world.bentobox.level.LevelsManager.lambda$calculateLevel$1(LevelsManager.java:112) ~[?:?]
        at java.base/java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:739) ~[?:?]
        at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:531) ~[?:?]
        at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2206) ~[?:?]
        at Level-2.28.1-1788014941501.jar//world.bentobox.level.calculators.IslandLevelCalculator.lambda$scanIsland$17(IslandLevelCalculator.java:860) ~[?:?]
        at java.base/java.util.concurrent.CompletableFuture$UniRun.tryFire(CompletableFuture.java:808) ~[?:?]
        at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:531) ~[?:?]
        at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2206) ~[?:?]
        at org.bukkit.craftbukkit.CraftWorld.lambda$getChunkAtAsync$12(CraftWorld.java:1996) ~[paper-1.21.11.jar:1.21.11-127-bd74bf6]
        at ca.spottedleaf.moonrise.patches.chunk_system.scheduling.ChunkTaskScheduler.lambda$scheduleTickingState$2(ChunkTaskScheduler.java:399) ~[paper-1.21.11.jar:1.21.11-127-bd74bf6]
        at ca.spottedleaf.moonrise.patches.chunk_system.scheduling.NewChunkHolder.lambda$completeFullStatusConsumers$4(NewChunkHolder.java:1384) ~[paper-1.21.11.jar:1.21.11-127-bd74bf6]
        at ca.spottedleaf.concurrentutil.executor.queue.PrioritisedTaskQueue$PrioritisedQueuedTask.execute(PrioritisedTaskQueue.java:345) ~[concurrentutil-0.0.8.jar:?]
        at ca.spottedleaf.concurrentutil.executor.queue.PrioritisedTaskQueue.executeTask(PrioritisedTaskQueue.java:126) ~[concurrentutil-0.0.8.jar:?]
        at ca.spottedleaf.moonrise.patches.chunk_system.scheduling.ChunkTaskScheduler.executeMainThreadTask(ChunkTaskScheduler.java:338) ~[paper-1.21.11.jar:1.21.11-127-bd74bf6]
        at net.minecraft.server.level.ServerChunkCache$MainThreadExecutor.pollTask(ServerChunkCache.java:831) ~[paper-1.21.11.jar:1.21.11-127-bd74bf6]
        at net.minecraft.server.level.ServerChunkCache.pollTask(ServerChunkCache.java:429) ~[paper-1.21.11.jar:1.21.11-127-bd74bf6]
        at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1512) ~[paper-1.21.11.jar:1.21.11-127-bd74bf6]
        at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1499) ~[paper-1.21.11.jar:1.21.11-127-bd74bf6]
        at net.minecraft.server.MinecraftServer.recordTaskExecutionTimeWhileWaiting(MinecraftServer.java:1225) ~[paper-1.21.11.jar:1.21.11-127-bd74bf6]
        at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1341) ~[paper-1.21.11.jar:1.21.11-127-bd74bf6]
        at net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:388) ~[paper-1.21.11.jar:1.21.11-127-bd74bf6]
        at java.base/java.lang.Thread.run(Thread.java:1474) ~[?:?]

I also noticed a second issue: Math.max(level, levelNeeded) returns at least the target level, even when the island is below it. To correctly cap progression, we need to use Math.min.

@Krakenied

Copy link
Copy Markdown
Collaborator

lgtm, thanks

@Krakenied
Krakenied merged commit 80e3356 into LMBishop:master Oct 8, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants