我的代码
public Set<Chunk> floodSearch(int x, int z, FactionData colour) {
Set<Chunk> toClaim = new HashSet<>();
if ((instance.getChunkManager().getFactionDataByChunk(Bukkit.getServer().getWorld(Config.FACTION_WORLD.getData().toString()).getChunkAt(x, z)) == null) && (toClaim.size() <= (int) Config.MAX_FILL_SIZE.getData())) {
//FIRST LOOK IF THE CENTER CHUNK IS EVEN CLAIMED OR NOT, IF IT
toClaim.add(Bukkit.getWorld(Config.FACTION_WORLD.getData().toString()).getChunkAt(x, z));
// NOW SEARCH FOR THE NEIGHBOURS
floodSearch(x, z + 1, colour); // north
floodSearch(x, z - 1, colour); // south
floodSearch(x - 1, z, colour); // west
floodSearch(x + 1, z, colour); // east
}
return toClaim;
}
错误:
[23:09:04] [Server thread/ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'f' in plugin PixliesFactionSystem v1.0.1
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[patched_1.15.1.jar:git-Paper-23]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159) ~[patched_1.15.1.jar:git-Paper-23]
at org.bukkit.craftbukkit.v1_15_R1.CraftServer.dispatchCommand(CraftServer.java:740) ~[patched_1.15.1.jar:git-Paper-23]
at net.minecraft.server.v1_15_R1.PlayerConnection.handleCommand(PlayerConnection.java:1820) ~[patched_1.15.1.jar:git-Paper-23]
at net.minecraft.server.v1_15_R1.PlayerConnection.a(PlayerConnection.java:1628) ~[patched_1.15.1.jar:git-Paper-23]
at net.minecraft.server.v1_15_R1.PacketPlayInChat.a(PacketPlayInChat.java:47) ~[patched_1.15.1.jar:git-Paper-23]
at net.minecraft.server.v1_15_R1.PacketPlayInChat.a(PacketPlayInChat.java:5) ~[patched_1.15.1.jar:git-Paper-23]
at net.minecraft.server.v1_15_R1.PlayerConnectionUtils.lambda$ensureMainThread$0(PlayerConnectionUtils.java:23) ~[patched_1.15.1.jar:git-Paper-23]
at net.minecraft.server.v1_15_R1.TickTask.run(SourceFile:18) ~[patched_1.15.1.jar:git-Paper-23]
at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136) ~[patched_1.15.1.jar:git-Paper-23]
at net.minecraft.server.v1_15_R1.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[patched_1.15.1.jar:git-Paper-23]
at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109) ~[patched_1.15.1.jar:git-Paper-23]
at net.minecraft.server.v1_15_R1.MinecraftServer.aZ(MinecraftServer.java:1037) ~[patched_1.15.1.jar:git-Paper-23]
at net.minecraft.server.v1_15_R1.MinecraftServer.executeNext(MinecraftServer.java:1030) ~[patched_1.15.1.jar:git-Paper-23]
at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.awaitTasks(IAsyncTaskHandler.java:119) ~[patched_1.15.1.jar:git-Paper-23]
at net.minecraft.server.v1_15_R1.MinecraftServer.sleepForTick(MinecraftServer.java:1014) ~[patched_1.15.1.jar:git-Paper-23]
at net.minecraft.server.v1_15_R1.MinecraftServer.run(MinecraftServer.java:937) ~[patched_1.15.1.jar:git-Paper-23]
at java.lang.Thread.run(Thread.java:834) [?:?]
Caused by: java.lang.StackOverflowError
at java.util.HashMap.hash(HashMap.java:339) ~[?:?]
at java.util.LinkedHashMap.get(LinkedHashMap.java:440) ~[?:?]
at org.bukkit.craftbukkit.v1_15_R1.CraftServer.getWorld(CraftServer.java:1082) ~[patched_1.15.1.jar:git-Paper-23]
at org.bukkit.Bukkit.getWorld(Bukkit.java:525) ~[patched_1.15.1.jar:git-Paper-23]
at me.mickmmars.factions.factions.FactionManager.floodSearch(FactionManager.java:775) ~[?:?]
at me.mickmmars.factions.factions.FactionManager.floodSearch(FactionManager.java:781) ~[?:?]
at me.mickmmars.factions.factions.FactionManager.floodSearch(FactionManager.java:781) ~[?:?]
at me.mickmmars.factions.factions.FactionManager.floodSearch(FactionManager.java:782) ~[?:?]
at me.mickmmars.factions.factions.FactionManager.floodSearch(FactionManager.java:781) ~[?:?]
at me.mickmmars.factions.factions.FactionManager.floodSearch(FactionManager.java:782) ~[?:?]
at me.mickmmars.factions.factions.FactionManager.floodSearch(FactionManager.java:781) ~[?:?]
at me.mickmmars.factions.factions.FactionManager.floodSearch(FactionManager.java:782) ~[?:?]
at me.mickmmars.factions.factions.FactionManager.floodSearch(FactionManager.java:781) ~[?:?]
它一直都在向at me.mickmmars...
错误发送垃圾邮件。
说明我尝试做的是/f claim fill
。在我的派系系统中,当您声明空心形状(例如圆形)时,我想发出填充该形状的命令。我的灵感来自其开源的Massivecraft派系。https://github.com/MassiveCraft/Factions/blob/master/src/com/massivecraft/factions/cmd/CmdFactionsSetFill.java如果你们能帮助我,我将非常感激。谢谢!
虽然如果您实际上阻止递归函数访问已访问的单元格,从代码中还不清楚,但我认为总堆栈限制可能小于访问所有单元格所需的实际递归深度。
我的建议是使用fifo队列,并执行一个循环,在队列的一端添加新的单元格,并从另一端开始对要退出工作的单元格进行排队。这和递归一样好,但是没有人为的递归级别限制。