WesJD / AnvilGUI

Capture user input in Minecraft through an anvil GUI in under 20 lines of code
MIT License
475 stars 114 forks source link

Index 2 out of bounds for length 2 #335

Closed 0PandaDEV closed 3 months ago

0PandaDEV commented 3 months ago

AnvilGUI Version: 1.9.5-SNAPSHOT SpigotAPI Version: 1.21-R0.1-SNAPSHOT Minecraft Server: 1.21 Paper

new AnvilGUI.Builder()
        .onClick((state, text) -> {
            RankAPI.setPrefix((Player) sender, args[1].toLowerCase(), ChatColor.translateAlternateColorCodes('&', " " + text.getText()));
            return Collections.singletonList(AnvilGUI.ResponseAction.close());
        })
        .text(Main.getInstance().getConfig().getString("Ranks." + args[1].toLowerCase() + ".prefix").replace("§", "&"))
        .itemLeft(new ItemStack(Material.NAME_TAG))
        .title("Enter the new prefix")
        .plugin(Main.getInstance())
        .open(player);
[15:32:11 ERROR]: Command exception: /rank prefix owner
org.bukkit.command.CommandException: Unhandled exception executing command 'rank' in plugin Nextron v1.5.7
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[paper-api-1.21-R0.1-SNAPSHOT.jar:?]
        at io.papermc.paper.command.brigadier.bukkit.BukkitCommandNode$BukkitBrigCommand.run(BukkitCommandNode.java:91) ~[paper-1.21.jar:1.21-9-4ea696f]
        at com.mojang.brigadier.context.ContextChain.runExecutable(ContextChain.java:73) ~[brigadier-1.2.9.jar:?]
        at net.minecraft.commands.execution.tasks.ExecuteCommand.execute(ExecuteCommand.java:31) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.commands.execution.tasks.ExecuteCommand.execute(ExecuteCommand.java:19) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.commands.execution.UnboundEntryAction.lambda$bind$0(UnboundEntryAction.java:8) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.commands.execution.CommandQueueEntry.execute(CommandQueueEntry.java:5) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.commands.execution.ExecutionContext.runCommandQueue(ExecutionContext.java:103) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.commands.Commands.executeCommandInContext(Commands.java:446) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.commands.Commands.performCommand(Commands.java:353) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.commands.Commands.performCommand(Commands.java:340) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.commands.Commands.performCommand(Commands.java:335) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.server.network.ServerGamePacketListenerImpl.performUnsignedChatCommand(ServerGamePacketListenerImpl.java:2147) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.server.network.ServerGamePacketListenerImpl.lambda$handleChatCommand$11(ServerGamePacketListenerImpl.java:2121) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.server.TickTask.run(TickTask.java:18) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:151) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:24) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1478) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:201) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:125) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1456) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1449) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:135) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.server.MinecraftServer.managedBlock(MinecraftServer.java:1408) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1529) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1246) ~[paper-1.21.jar:1.21-9-4ea696f]
        at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:329) ~[paper-1.21.jar:1.21-9-4ea696f]
        at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]
Caused by: java.lang.ExceptionInInitializerError
        at Nextron-1.5.7.jar/net.pandadev.anvilgui.AnvilGUI$Builder.<init>(AnvilGUI.java:400) ~[Nextron-1.5.7.jar:?]
        at Nextron-1.5.7.jar/net.pandadev.nextron.commands.RankCommand.execute(RankCommand.java:122) ~[Nextron-1.5.7.jar:?]
        at Nextron-1.5.7.jar/net.pandadev.nextron.commands.CommandBase.onCommand(CommandBase.java:50) ~[Nextron-1.5.7.jar:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[paper-api-1.21-R0.1-SNAPSHOT.jar:?]
        ... 27 more
Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 2 out of bounds for length 2
        at Nextron-1.5.7.jar/net.pandadev.anvilgui.version.VersionMatcher.match(VersionMatcher.java:29) ~[Nextron-1.5.7.jar:?]
        at Nextron-1.5.7.jar/net.pandadev.anvilgui.AnvilGUI.<clinit>(AnvilGUI.java:42) ~[Nextron-1.5.7.jar:?]
        at Nextron-1.5.7.jar/net.pandadev.anvilgui.AnvilGUI$Builder.<init>(AnvilGUI.java:400) ~[Nextron-1.5.7.jar:?]
        at Nextron-1.5.7.jar/net.pandadev.nextron.commands.RankCommand.execute(RankCommand.java:122) ~[Nextron-1.5.7.jar:?]
        at Nextron-1.5.7.jar/net.pandadev.nextron.commands.CommandBase.onCommand(CommandBase.java:50) ~[Nextron-1.5.7.jar:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[paper-api-1.21-R0.1-SNAPSHOT.jar:?]
        ... 27 more

https://github.com/0PandaDEV/Nextron/commit/1a13fa5616f379bdb17c01c0e5bba4eaf2395b03

spnda commented 3 months ago

Ah, amazing. Another good reason why we should've just gone with my implementation in #331. The version string is 1.21-R0.1-SNAPSHOT, and there is no minor version, which breaks the version parsing code.

0dinD commented 3 months ago

Well it would be a pretty simple fix, but yeah I still like the solution in #331 better because it's less complex and so there's less room for bugs like these to hide.

0PandaDEV commented 3 months ago

So how do i fix this now?

0dinD commented 3 months ago

So how do i fix this now?

If you need an urgent fix, the easiest solution is to use Spigot instead of Paper for now (this issue only affects Paper servers). Or you could build #331 from the source code. But I would probably just wait until a fix such as #331 is merged and a new AnvilGUI build is published to the Maven repository.

0dinD commented 3 months ago

I think this issue can be closed now that #331 was merged. The problem is gone for me when using AnvilGUI version 1.9.6-SNAPSHOT.