Skip to content

About ArrayIndexOutOfBoundsException in chatgames.yml #19

@M-WhiteXFox

Description

@M-WhiteXFox

If I remove the contents of chatgames.yml/Rewards in quotes, but leave the quotes in, it may raise an error

My TChat version is 4.3.1

Here’s an example from the chatgames.yml file

    rewards:
      - ""

It will cause an error to be reported

[13:27:52 WARN]: [TChat] Task #57862 for TChat v4.3.1 generated an exception
java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
        at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:1014) ~[paper-1.21.jar:1.21-130-b1b5d4c]
        at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:1004) ~[paper-1.21.jar:1.21-130-b1b5d4c]
        at org.bukkit.Bukkit.dispatchCommand(Bukkit.java:1103) ~[paper-api-1.21-R0.1-SNAPSHOT.jar:?]
        at TChat-4.3.1.jar/utils.ChatGamesSender.lambda$executeRewards$0(ChatGamesSender.java:307) ~[TChat-4.3.1.jar:?]
        at org.bukkit.craftbukkit.scheduler.CraftTask.run(CraftTask.java:86) ~[paper-1.21.jar:1.21-130-b1b5d4c]
        at org.bukkit.craftbukkit.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:475) ~[paper-1.21.jar:1.21-130-b1b5d4c]
        at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:1726) ~[paper-1.21.jar:1.21-130-b1b5d4c]
        at net.minecraft.server.dedicated.DedicatedServer.tickChildren(DedicatedServer.java:473) ~[paper-1.21.jar:1.21-130-b1b5d4c]
        at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1598) ~[paper-1.21.jar:1.21-130-b1b5d4c]
        at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1304) ~[paper-1.21.jar:1.21-130-b1b5d4c]
        at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:330) ~[paper-1.21.jar:1.21-130-b1b5d4c]
        at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]

I believe the cause of this error is in the executeRewards method at line 302 in ChatGamesSender.java. The check currentGame.getRewards() != null verifies whether it is not null, but it does not ensure that it contains any content.

    private void executeRewards(Player player) {
        if (currentGame.getRewards() != null) {
            for (String reward : currentGame.getRewards()) {
                final String command = reward.replace("%winner%", player.getName());
                Bukkit.getScheduler().runTask(plugin, () -> {
                    Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command);
                });
            }
        }
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions