Slimefun-Addon-Community / Galactifun

A Slimefun addon inspired by ClayTech
GNU General Public License v3.0
22 stars 24 forks source link

Crash upon generating chunks in earth's orbit #151

Open GentlemanCheesy opened 1 year ago

GentlemanCheesy commented 1 year ago

Description (Required)

When a player visited earths orbit it crashed the server. Upon deleting the world and trying to regenerate it to try to solve the issue the server crashes on start up.

Steps to reproduce the Issue (Required)

Unsure but it may be an issue with generating the chunks in 1.20 Minecraft. It happened as soon as the dimension was loaded.

Expected behavior (Required)

Not crashing on startup or world generation.

Server Log / Error Report

Crash report: https://pastebin.com/H7rnJHYz Logs: https://pastebin.com/Hcv56tea

Environment (Required)

Galactifun Dev 76 Slimefun Dev Build 1092 Paper Build 101 1.20.1

Seggan commented 1 year ago

This is really strange... The appropriate checks are in place... Can you try doing a clean Galactifun/Slimefun install? As in redownload and replace the JARs

Seggan commented 1 year ago

Actually, it might be a parallelization issue (data race); lemme cook up a test build

vochant commented 2 months ago

so strange... i did this change:

boolean before_err = false, after_err = false;
if (x < -7 || y < -7 || z < -7 || x > 7 || y > 7 || z > 7) {
    System.out.println("Unexcepted location! (" + x + ", " + y + ", " + z + ")");
    before_err = true;
}
if (this.currentMaterial >= 3) {
    System.out.println("Unexcepted value! " + this.currentMaterial);
    this.currentMaterial = 0;
    before_err = true;
}
if (this.currentMiddle == null) {
    System.out.println("this.currentMiddle is null");
    before_err = true;
}
if (before_err) {
    System.out.println("before: Calling with " + x + ", " + y + ", " + z + " :: " + this.currentMaterial);
    if (this.currentMiddle != null) {
        System.out.println("this.currentMiddle is " + this.currentMiddle.toString());
    }
}
int _old = this.currentMaterial;
this.currentRegion.setType(currentMiddle.clone().add(x, y, z), this.materials[this.currentMaterial++]);
if (_old != this.currentMaterial - 1) {
    System.out.println("Info Mismatch! " + _old + " & " + this.currentMaterial);
    after_err = true;
}
if (this.currentMaterial > 3) {
    System.out.println("Unexcepted value! " + this.currentMaterial);
    after_err = true;
}
if (this.currentMiddle == null) {
    System.out.println("this.currentMiddle is null");
    after_err = true;
}
if (after_err) {
    System.out.println("after: Calling with " + x + ", " + y + ", " + z);
    if (this.currentMiddle != null) {
        System.out.println("this.currentMiddle is " + this.currentMiddle.toString());
    }
}
if (this.currentMaterial == this.materials.length) {
    this.currentMaterial = 0;
}

then in the test:

[17:57:47 INFO]: [Galactifun] [STDOUT] Info Mismatch! 2 & 4
[17:57:47 INFO]: [Galactifun] [STDOUT] Unexcepted value! 4
[17:57:47 INFO]: [Galactifun] [STDOUT] after: Calling with 0, 0, 0
[17:57:47 ERROR]: [ChunkTaskScheduler] Chunk system error at chunk (99,-140), holder: NewChunkHolder{world=world_galactifun_earth_orbit, chunkX=99, chunkZ=-140, entityChunkFromDisk=false, lastChunkCompletion={chunk_class=net.minecraft.world.level.chunk.ProtoChunk,status=minecraft:carvers}, currentGenStatus=minecraft:carvers, requestedGenStatus=minecraft:initialize_light, generationTask=ChunkProgressionTask{class: io.papermc.paper.chunk.system.scheduling.ChunkUpgradeGenericStatusTask, for world: world_galactifun_earth_orbit, chunk: (99,-140), hashcode: 1603112352, priority: COMPLETING, status: minecraft:features, scheduled: true}, generationTaskStatus=minecraft:features, priority=NORMAL, priorityLocked=false, neighbourRequestedPriority=NORMAL, effective_priority=NORMAL, oldTicketLevel=34, currentTicketLevel=34, totalNeighboursUsingThisChunk=9, fullNeighbourChunksLoadedBitset=32505856, chunkStatusRaw=0, currentChunkStatus=INACCESSIBLE, pendingChunkStatus=INACCESSIBLE, is_unload_safe=ticket_level, killed=false}, exception:
java.lang.Throwable: java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
        at io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.unrecoverableChunkSystemFailure(ChunkTaskScheduler.java:276) ~[paper-1.20.2.jar:git-Paper-318]
        at io.papermc.paper.chunk.system.scheduling.NewChunkHolder.lambda$setGenerationTask$4(NewChunkHolder.java:1700) ~[paper-1.20.2.jar:git-Paper-318]
        at io.papermc.paper.chunk.system.scheduling.ChunkProgressionTask.complete0(ChunkProgressionTask.java:95) ~[paper-1.20.2.jar:git-Paper-318]
        at io.papermc.paper.chunk.system.scheduling.ChunkProgressionTask.complete(ChunkProgressionTask.java:75) ~[paper-1.20.2.jar:git-Paper-318]
        at io.papermc.paper.chunk.system.scheduling.ChunkUpgradeGenericStatusTask.run(ChunkUpgradeGenericStatusTask.java:105) ~[paper-1.20.2.jar:git-Paper-318]
        at io.papermc.paper.chunk.system.scheduling.queue.RadiusAwarePrioritisedExecutor$Task.run(RadiusAwarePrioritisedExecutor.java:467) ~[paper-1.20.2.jar:git-Paper-318]
        at ca.spottedleaf.concurrentutil.executor.standard.PrioritisedThreadedTaskQueue$PrioritisedTask.executeInternal(PrioritisedThreadedTaskQueue.java:351) ~[paper-1.20.2.jar:git-Paper-318]
        at ca.spottedleaf.concurrentutil.executor.standard.PrioritisedThreadedTaskQueue.executeTask(PrioritisedThreadedTaskQueue.java:118) ~[paper-1.20.2.jar:git-Paper-318]
        at ca.spottedleaf.concurrentutil.executor.standard.PrioritisedThreadPool$PrioritisedThread.pollTasks(PrioritisedThreadPool.java:274) ~[paper-1.20.2.jar:git-Paper-318]
        at ca.spottedleaf.concurrentutil.executor.standard.PrioritisedQueueExecutorThread.run(PrioritisedQueueExecutorThread.java:62) ~[paper-1.20.2.jar:git-Paper-318]
Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
        at io.github.addoncommunity.galactifun.util.Sphere.gen(Sphere.java:158) ~[Galactifun-Build 24 (git 8e97c63).jar:?]
        at io.github.addoncommunity.galactifun.util.Sphere.genEdges(Sphere.java:113) ~[Galactifun-Build 24 (git 8e97c63).jar:?]
        at io.github.addoncommunity.galactifun.util.Sphere.generate(Sphere.java:59) ~[Galactifun-Build 24 (git 8e97c63).jar:?]
        at io.github.addoncommunity.galactifun.base.universe.earth.EarthOrbit$2.populate(EarthOrbit.java:91) ~[Galactifun-Build 24 (git 8e97c63).jar:?]
        at net.minecraft.world.level.chunk.ChunkGenerator.applyBiomeDecoration(ChunkGenerator.java:490) ~[paper-1.20.2.jar:git-Paper-318]
        at org.bukkit.craftbukkit.v1_20_R2.generator.CustomChunkGenerator.a(CustomChunkGenerator.java:301) ~[paper-1.20.2.jar:git-Paper-318]
        at net.minecraft.world.level.chunk.ChunkStatus.lambda$static$11(ChunkStatus.java:127) ~[paper-1.20.2.jar:git-Paper-318]
        at net.minecraft.world.level.chunk.ChunkStatus$SimpleGenerationTask.doWork(ChunkStatus.java:342) ~[?:?]
        at net.minecraft.world.level.chunk.ChunkStatus.generate(ChunkStatus.java:259) ~[paper-1.20.2.jar:git-Paper-318]
        at io.papermc.paper.chunk.system.scheduling.ChunkUpgradeGenericStatusTask.run(ChunkUpgradeGenericStatusTask.java:86) ~[paper-1.20.2.jar:git-Paper-318]
        ... 5 more
[17:57:47 INFO]: [Galactifun] [STDOUT] this.currentMiddle is Location{world=CraftWorld{name=world_galactifun_earth_orbit},x=1864.0,y=203.0,z=-2041.0,pitch=0.0,yaw=0.0}
[17:57:47 INFO]: [Galactifun] [STDOUT] Unexcepted value! 4
[17:57:47 INFO]: [Galactifun] [STDOUT] before: Calling with 6, 0, 0 :: 0
[17:57:47 INFO]: [Galactifun] [STDOUT] this.currentMiddle is Location{world=CraftWorld{name=world_galactifun_earth_orbit},x=1864.0,y=203.0,z=-2041.0,pitch=0.0,yaw=0.0}
[17:57:47 INFO]: [Galactifun] [STDOUT] Info Mismatch! 0 & 0
[17:57:47 INFO]: [Galactifun] [STDOUT] after: Calling with 1, 2, 3
[17:57:47 INFO]: [Galactifun] [STDOUT] this.currentMiddle is Location{world=CraftWorld{name=world_galactifun_earth_orbit},x=1864.0,y=183.0,z=-1576.0,pitch=0.0,yaw=0.0}
[17:57:47 INFO]: [Galactifun] [STDOUT] Info Mismatch! 0 & 2
[17:57:47 INFO]: [Galactifun] [STDOUT] this.currentMiddle is null
[17:57:47 INFO]: [Galactifun] [STDOUT] after: Calling with -1, 2, 3
[17:57:47 INFO]: [Galactifun] [STDOUT] this.currentMiddle is null
[17:57:47 INFO]: [Galactifun] [STDOUT] before: Calling with 1, -2, 3 :: 2
[17:57:47 ERROR]: [ChunkTaskScheduler] Chunk system error at chunk (116,-99), holder: NewChunkHolder{world=world_galactifun_earth_orbit, chunkX=116, chunkZ=-99, entityChunkFromDisk=false, lastChunkCompletion={chunk_class=net.minecraft.world.level.chunk.ProtoChunk,status=minecraft:carvers}, currentGenStatus=minecraft:carvers, requestedGenStatus=minecraft:initialize_light, generationTask=ChunkProgressionTask{class: io.papermc.paper.chunk.system.scheduling.ChunkUpgradeGenericStatusTask, for world: world_galactifun_earth_orbit, chunk: (116,-99), hashcode: 1530298290, priority: COMPLETING, status: minecraft:features, scheduled: true}, generationTaskStatus=minecraft:features, priority=NORMAL, priorityLocked=false, neighbourRequestedPriority=NORMAL, effective_priority=NORMAL, oldTicketLevel=34, currentTicketLevel=34, totalNeighboursUsingThisChunk=3, fullNeighbourChunksLoadedBitset=0, chunkStatusRaw=0, currentChunkStatus=INACCESSIBLE, pendingChunkStatus=INACCESSIBLE, is_unload_safe=ticket_level, killed=false}, exception:
java.lang.Throwable: java.lang.NullPointerException: Cannot invoke "org.bukkit.Location.clone()" because "this.currentMiddle" is null
        at io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.unrecoverableChunkSystemFailure(ChunkTaskScheduler.java:276) ~[paper-1.20.2.jar:git-Paper-318]
        at io.papermc.paper.chunk.system.scheduling.NewChunkHolder.lambda$setGenerationTask$4(NewChunkHolder.java:1700) ~[paper-1.20.2.jar:git-Paper-318]
        at io.papermc.paper.chunk.system.scheduling.ChunkProgressionTask.complete0(ChunkProgressionTask.java:95) ~[paper-1.20.2.jar:git-Paper-318]
        at io.papermc.paper.chunk.system.scheduling.ChunkProgressionTask.complete(ChunkProgressionTask.java:75) ~[paper-1.20.2.jar:git-Paper-318]
        at io.papermc.paper.chunk.system.scheduling.ChunkUpgradeGenericStatusTask.run(ChunkUpgradeGenericStatusTask.java:105) ~[paper-1.20.2.jar:git-Paper-318]
        at io.papermc.paper.chunk.system.scheduling.queue.RadiusAwarePrioritisedExecutor$Task.run(RadiusAwarePrioritisedExecutor.java:467) ~[paper-1.20.2.jar:git-Paper-318]
        at ca.spottedleaf.concurrentutil.executor.standard.PrioritisedThreadedTaskQueue$PrioritisedTask.executeInternal(PrioritisedThreadedTaskQueue.java:351) ~[paper-1.20.2.jar:git-Paper-318]
        at ca.spottedleaf.concurrentutil.executor.standard.PrioritisedThreadedTaskQueue.executeTask(PrioritisedThreadedTaskQueue.java:118) ~[paper-1.20.2.jar:git-Paper-318]
        at ca.spottedleaf.concurrentutil.executor.standard.PrioritisedThreadPool$PrioritisedThread.pollTasks(PrioritisedThreadPool.java:274) ~[paper-1.20.2.jar:git-Paper-318]
        at ca.spottedleaf.concurrentutil.executor.standard.PrioritisedQueueExecutorThread.run(PrioritisedQueueExecutorThread.java:62) ~[paper-1.20.2.jar:git-Paper-318]
Caused by: java.lang.NullPointerException: Cannot invoke "org.bukkit.Location.clone()" because "this.currentMiddle" is null
        at io.github.addoncommunity.galactifun.util.Sphere.gen(Sphere.java:158) ~[Galactifun-Build 24 (git 8e97c63).jar:?]
        at io.github.addoncommunity.galactifun.util.Sphere.genCorners(Sphere.java:127) ~[Galactifun-Build 24 (git 8e97c63).jar:?]
        at io.github.addoncommunity.galactifun.util.Sphere.generate(Sphere.java:72) ~[Galactifun-Build 24 (git 8e97c63).jar:?]
        at io.github.addoncommunity.galactifun.base.universe.earth.EarthOrbit$2.populate(EarthOrbit.java:91) ~[Galactifun-Build 24 (git 8e97c63).jar:?]
        at net.minecraft.world.level.chunk.ChunkGenerator.applyBiomeDecoration(ChunkGenerator.java:490) ~[paper-1.20.2.jar:git-Paper-318]
        at org.bukkit.craftbukkit.v1_20_R2.generator.CustomChunkGenerator.a(CustomChunkGenerator.java:301) ~[paper-1.20.2.jar:git-Paper-318]
        at net.minecraft.world.level.chunk.ChunkStatus.lambda$static$11(ChunkStatus.java:127) ~[paper-1.20.2.jar:git-Paper-318]
        at net.minecraft.world.level.chunk.ChunkStatus$SimpleGenerationTask.doWork(ChunkStatus.java:342) ~[?:?]
        at net.minecraft.world.level.chunk.ChunkStatus.generate(ChunkStatus.java:259) ~[paper-1.20.2.jar:git-Paper-318]
        at io.papermc.paper.chunk.system.scheduling.ChunkUpgradeGenericStatusTask.run(ChunkUpgradeGenericStatusTask.java:86) ~[paper-1.20.2.jar:git-Paper-318]
        ... 5 more

how?