YUNG's Better Caves (Forge)

YUNG's Better Caves (Forge)

41M Downloads

Crash on world gen with Terraforged

TechniumUnlimited opened this issue · 16 comments

commented

Just updated with YungAPI and YungsBetterCaves (released in the last hour or so), and new world creation crashes game

Description: generating caves (TerraForged World-Gen)

java.lang.ClassCastException: com.terraforged.mod.chunk.fix.ChunkCarverFix cannot be cast to com.yungnickyoung.minecraft.bettercaves.world.IServerWorldHolder
	at com.yungnickyoung.minecraft.bettercaves.world.carver.BetterCavesCarver.carveRegion(BetterCavesCarver.java:37) ~[?:1.16.4-1.1] {re:classloading}
	at com.yungnickyoung.minecraft.bettercaves.world.carver.BetterCavesCarver.func_225555_a_(BetterCavesCarver.java:29) ~[?:1.16.4-1.1] {re:classloading}
	at net.minecraft.world.gen.carver.ConfiguredCarver.func_227207_a_(SourceFile:39) ~[?:?] {re:classloading,pl:accesstransformer:B}
	at com.terraforged.mod.chunk.generator.TerrainCarver.carveTerrain(TerrainCarver.java:80) ~[?:1.16.4-0.2.0-BETA-8] {re:classloading}
	at com.terraforged.mod.chunk.TFChunkGenerator.func_230350_a_(TFChunkGenerator.java:227) [?:1.16.4-0.2.0-BETA-8] {re:classloading}
	at net.minecraft.world.chunk.ChunkStatus.lambda$static$7(ChunkStatus.java:66) [?:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:bettercaves.mixins.json:ChunkStatusMixin,pl:mixin:A}
	at net.minecraft.world.chunk.ChunkStatus$$Lambda$2394/113309827.doWork(Unknown Source) [?:?] {}
	at net.minecraft.world.chunk.ChunkStatus$ISelectiveWorker.doWork(ChunkStatus.java:240) [?:?] {re:classloading}
	at net.minecraft.world.chunk.ChunkStatus.func_223198_a(ChunkStatus.java:198) [?:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:bettercaves.mixins.json:ChunkStatusMixin,pl:mixin:A}
	at net.minecraft.world.server.ChunkManager.lambda$null$18(ChunkManager.java:675) [?:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,xf:OptiFine:default,pl:mixin:A}
	at net.minecraft.world.server.ChunkManager$$Lambda$42522/624910863.apply(Unknown Source) [?:?] {}
	at com.mojang.datafixers.util.Either$Left.map(Either.java:38) [datafixerupper-4.0.26.jar:?] {}
	at net.minecraft.world.server.ChunkManager.lambda$chunkGenerate$20(ChunkManager.java:673) [?:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,xf:OptiFine:default,pl:mixin:A}
	at net.minecraft.world.server.ChunkManager$$Lambda$42507/617426953.apply(Unknown Source) [?:?] {}
	at java.util.concurrent.CompletableFuture.uniCompose(CompletableFuture.java:952) [?:1.8.0_51] {}
	at java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:926) [?:1.8.0_51] {}
	at java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:442) [?:1.8.0_51] {}
	at net.minecraft.world.chunk.ChunkTaskPriorityQueueSorter.func_219083_b(SourceFile:58) [?:?] {re:classloading}
	at net.minecraft.world.chunk.ChunkTaskPriorityQueueSorter$$Lambda$42520/1682737064.run(Unknown Source) [?:?] {}
	at net.minecraft.util.concurrent.DelegatedTaskExecutor.func_213148_e(SourceFile:94) [?:?] {re:classloading}
	at net.minecraft.util.concurrent.DelegatedTaskExecutor.func_213145_a(SourceFile:137) [?:?] {re:classloading}
	at net.minecraft.util.concurrent.DelegatedTaskExecutor.run(SourceFile:105) [?:?] {re:classloading}
	at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402) [?:1.8.0_51] {}
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) [?:1.8.0_51] {}
	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) [?:1.8.0_51] {}
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1689) [?:1.8.0_51] {re:computing_frames}
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) [?:1.8.0_51] {}```
commented

Hi, this isn't something TF can address.

Consider doing something like the following to get the world from wherever:

ServerWorld world = ServerLifecycleHooks.getCurrentServer().getWorld(World.OVERWORLD);

Or if you need to stick with mixins maybe mixin-implement IChunk::getWorldForge on the ChunkPrimer so you can get the world using that instead of downcasting.

commented

Can confirm:
crash-2021-01-15_15.25.30-client.txt

[1.16.4] YUNG's Better Caves v1.1
TerraForged-1.16.4-0.2.0-BETA-8

commented

Hello,

I also see an issue with the new BetterCaves-Forge-1.16.4-1.1.

Other version are: MC 1.16.4 and Forge-35.1.36.

Loaded into a personal survival game which loaded, however when I moved into an undiscovered chuck MC crashed.

For anyone with this issue just reloading previous Better Caves version: fixed the crash and world was playable again.

If it helps here is the crash report: And Thank you for the great mod....

---- Minecraft Crash Report ----
// Shall we play a game?

Time: 1/15/21 5:42 AM
Description: generating caves (TerraForged World-Gen)

java.lang.ClassCastException: com.terraforged.mod.chunk.fix.ChunkCarverFix cannot be cast to com.yungnickyoung.minecraft.bettercaves.world.IServerWorldHolder
at com.yungnickyoung.minecraft.bettercaves.world.carver.BetterCavesCarver.carveRegion(BetterCavesCarver.java:37) ~[bettercaves:1.16.4-1.1] {re:classloading}
at com.yungnickyoung.minecraft.bettercaves.world.carver.BetterCavesCarver.func_225555_a_(BetterCavesCarver.java:29) ~[bettercaves:1.16.4-1.1] {re:classloading}
at net.minecraft.world.gen.carver.ConfiguredCarver.func_227207_a_(SourceFile:39) ~[?:?] {re:classloading}
at com.terraforged.mod.chunk.generator.TerrainCarver.carveTerrain(TerrainCarver.java:80) ~[terraforged:1.16.4-0.2.0-BETA-8] {re:classloading}
at com.terraforged.mod.chunk.TFChunkGenerator.func_230350_a_(TFChunkGenerator.java:227) ~[terraforged:1.16.4-0.2.0-BETA-8] {re:classloading}
at net.minecraft.world.chunk.ChunkStatus.lambda$static$7(ChunkStatus.java:66) ~[?:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:bettercaves.mixins.json:ChunkStatusMixin,pl:mixin:A}
at net.minecraft.world.chunk.ChunkStatus$ISelectiveWorker.doWork(ChunkStatus.java:240) ~[?:?] {re:classloading}
at net.minecraft.world.chunk.ChunkStatus.func_223198_a(ChunkStatus.java:198) ~[?:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:bettercaves.mixins.json:ChunkStatusMixin,pl:mixin:A}
at net.minecraft.world.server.ChunkManager.lambda$null$18(ChunkManager.java:675) ~[?:?] {re:classloading,pl:accesstransformer:B,xf:OptiFine:default}
at com.mojang.datafixers.util.Either$Left.map(Either.java:38) ~[datafixerupper-4.0.26.jar:?] {re:classloading,re:classloading}
at net.minecraft.world.server.ChunkManager.lambda$chunkGenerate$20(ChunkManager.java:673) ~[?:?] {re:classloading,pl:accesstransformer:B,xf:OptiFine:default}
at java.util.concurrent.CompletableFuture.uniCompose(Unknown Source) ~[?:1.8.0_271] {}
at java.util.concurrent.CompletableFuture$UniCompose.tryFire(Unknown Source) ~[?:1.8.0_271] {}
at java.util.concurrent.CompletableFuture$Completion.run(Unknown Source) ~[?:1.8.0_271] {}
at net.minecraft.world.chunk.ChunkTaskPriorityQueueSorter.func_219083_b(SourceFile:58) ~[?:?] {re:classloading}
at net.minecraft.util.concurrent.DelegatedTaskExecutor.func_213148_e(SourceFile:94) [?:?] {re:classloading}
at net.minecraft.util.concurrent.DelegatedTaskExecutor.func_213145_a(SourceFile:137) [?:?] {re:classloading}
at net.minecraft.util.concurrent.DelegatedTaskExecutor.run(SourceFile:105) [?:?] {re:classloading}
at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(Unknown Source) [?:1.8.0_271] {}
at java.util.concurrent.ForkJoinTask.doExec(Unknown Source) [?:1.8.0_271] {}
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(Unknown Source) [?:1.8.0_271] {}
at java.util.concurrent.ForkJoinPool.runWorker(Unknown Source) [?:1.8.0_271] {re:computing_frames}
at java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source) [?:1.8.0_271] {}

A detailed walkthrough of the error, its code path and all known details is as follows:

-- Current Chunk --
Details:
Pos: [5, -12]
Status: surface
Structure Starts: [bettermineshafts:mineshaft, minecraft:ruined_portal, minecraft:stronghold, valhelsia_structures:castle, valhelsia_structures:castle_ruin, valhelsia_structures:forge, valhelsia_structures:player_house, valhelsia_structures:small_dungeon, valhelsia_structures:tower_ruin]
Structure Refs: []

-- TerraForged ChunkGenerator --
Details:
Seed: 862030887
Settings: {"miscellaneous":{"smoothLayerDecorator":true,"strataRegionSize":600,"strataDecorator":true,"oreCompatibleStoneOnly":true,"erosionDecorator":true,"plainStoneErosion":false,"naturalSnowDecorator":true,"customBiomeFeatures":true,"vanillaLakes":false,"vanillaSprings":true,"vanillaLavaLakes":true,"vanillaLavaSprings":true,"mountainBiomeUsage":0.4,"volcanoBiomeUsage":0.4},"dimensions":{"bedrockLayer":{"material":"minecraft:bedrock","minDepth":1,"variance":0},"dimensions":{"nether":"default","end":"default","includeExtraDimensions":true}},"world":{"continent":{"continentType":"MULTI","continentShape":"MANHATTAN","continentScale":3060,"continentJitter":0.699},"controlPoints":{"deepOcean":0.1,"shallowOcean":0.25,"beach":0.326,"coast":0.448,"inland":0.5},"properties":{"spawnType":"WORLD_ORIGIN","worldHeight":256,"seaLevel":60}},"climate":{"temperature":{"seedOffset":0,"scale":6,"falloff":2,"min":0.0,"max":0.98,"bias":0.05},"moisture":{"seedOffset":0,"scale":6,"falloff":1,"min":0.0,"max":1.0,"bias":0.0},"biomeShape":{"biomeSize":225,"macroNoiseSize":8,"biomeWarpScale":150,"biomeWarpStrength":80},"biomeEdgeShape":{"type":"SIMPLEX","scale":24,"octaves":2,"gain":0.5,"lacunarity":2.65,"strength":14}},"terrain":{"general":{"terrainSeedOffset":0,"terrainRegionSize":1200,"globalVerticalScale":0.98,"globalHorizontalScale":1.0,"fancyMountains":true},"steppe":{"weight":1.0,"baseScale":1.0,"verticalScale":1.0,"horizontalScale":1.0},"plains":{"weight":2.0,"baseScale":1.0,"verticalScale":1.0,"horizontalScale":1.0},"hills":{"weight":2.0,"baseScale":1.0,"verticalScale":1.0,"horizontalScale":1.0},"dales":{"weight":1.5,"baseScale":1.0,"verticalScale":1.0,"horizontalScale":1.0},"plateau":{"weight":1.5,"baseScale":1.0,"verticalScale":1.0,"horizontalScale":1.0},"badlands":{"weight":1.0,"baseScale":1.0,"verticalScale":1.0,"horizontalScale":1.0},"torridonian":{"weight":2.0,"baseScale":1.0,"verticalScale":1.0,"horizontalScale":1.0},"mountains":{"weight":2.5,"baseScale":1.0,"verticalScale":1.0,"horizontalScale":1.0},"volcano":{"weight":5.0,"baseScale":1.0,"verticalScale":1.0,"horizontalScale":1.0}},"rivers":{"seedOffset":0,"riverCount":8,"mainRivers":{"bedDepth":5,"minBankHeight":2,"maxBankHeight":6,"bedWidth":8,"bankWidth":20,"fade":0.75},"branchRivers":{"bedDepth":4,"minBankHeight":1,"maxBankHeight":4,"bedWidth":5,"bankWidth":14,"fade":0.975},"lakes":{"chance":0.3,"minStartDistance":0.0,"maxStartDistance":0.028,"depth":10,"sizeMin":75,"sizeMax":150,"minBankHeight":2,"maxBankHeight":10},"wetlands":{"chance":0.6,"sizeMin":175,"sizeMax":225}},"filters":{"erosion":{"dropletsPerChunk":135,"dropletLifetime":12,"dropletVolume":0.699,"dropletVelocity":0.699,"erosionRate":0.5,"depositeRate":0.5},"smoothing":{"iterations":1,"smoothingRadius":1.799,"smoothingRate":0.898}}}

-- TerraForged BiomeProvider --
Details:
Overworld Biomes: [minecraft:dark_forest, minecraft:snowy_tundra, minecraft:wooded_mountains, minecraft:tall_birch_forest, minecraft:lukewarm_ocean, minecraft:eroded_badlands, terraforged:snowy_fir_forest, minecraft:sunflower_plains, minecraft:modified_gravelly_mountains, minecraft:swamp, minecraft:forest, terraforged:warm_beach, minecraft:birch_forest, terraforged:taiga_scrub, minecraft:mountains, terraforged:frozen_lake, minecraft:badlands_plateau, terraforged:frozen_marsh, minecraft:savanna_plateau, minecraft:desert_lakes, minecraft:modified_wooded_badlands_plateau, minecraft:modified_badlands_plateau, minecraft:beach, minecraft:mushroom_fields, minecraft:frozen_river, terraforged:marshland, minecraft:giant_tree_taiga, minecraft:shattered_savanna_plateau, minecraft:badlands, terraforged:cold_steppe, minecraft:deep_ocean, minecraft:wooded_badlands_plateau, terraforged:cold_marshland, terraforged:shattered_savanna_scrub, minecraft:jungle, terraforged:lake, minecraft:modified_jungle_edge, minecraft:taiga_mountains, minecraft:deep_warm_ocean, minecraft:snowy_taiga, minecraft:taiga, minecraft:deep_lukewarm_ocean, minecraft:deep_frozen_ocean, minecraft:desert, minecraft:cold_ocean, minecraft:flower_forest, minecraft:snowy_taiga_mountains, terraforged:stone_forest, minecraft:modified_jungle, terraforged:fir_forest, minecraft:warm_ocean, terraforged:bryce, minecraft:jungle_edge, minecraft:frozen_ocean, terraforged:steppe, minecraft:bamboo_jungle, minecraft:plains, minecraft:snowy_beach, minecraft:snowy_mountains, terraforged:savanna_scrub, minecraft:deep_cold_ocean, minecraft:ice_spikes, minecraft:ocean, minecraft:giant_spruce_taiga, terraforged:flower_plains, minecraft:river, minecraft:gravelly_mountains, minecraft:savanna, minecraft:shattered_savanna]

-- TerraForged Performance Config --
Details:
version: 0.1
thread_count: 8
tile_size: 3
batching: true
batch_count: 6

-- TerraForged Biome Weights Config --
Details:
terraforged:example_biome: 10

-- TerraForged Profiler --
Details:
Timings:
Section Count Time MS Min MS Max MS Average MS
structure_starts 127 966 0 949 7.61
structure_refs 6 2 0 0 0.33
biomes 6 169 0 166 28.17
terrain 6 62 6 25 10.33
surface 1 8 8 8 8.00
carving 1 2 2 2 2.00
decoration 0 0 0 0 0.00
mob_spawns 0 0 0 0 0.00
Sum 56.44

-- System Details --
Details:
Minecraft Version: 1.16.4
Minecraft Version ID: 1.16.4
Operating System: Windows 10 (amd64) version 10.0
Java Version: 1.8.0_271, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 577286720 bytes (550 MB) / 5412225024 bytes (5161 MB) up to 11453595648 bytes (10923 MB)
CPUs: 12
JVM Flags: 5 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xss1M -Xmx12288m -Xms256m -XX:PermSize=256m
ModLauncher: 8.0.6+85+master.325de55
ModLauncher launch target: fmlclient
ModLauncher naming: srg
ModLauncher services:
/mixin-0.8.2.jar mixin PLUGINSERVICE
/eventbus-3.0.5-service.jar eventbus PLUGINSERVICE
/forge-1.16.4-35.1.36.jar object_holder_definalize PLUGINSERVICE
/forge-1.16.4-35.1.36.jar runtime_enum_extender PLUGINSERVICE
/accesstransformers-2.2.0-shadowed.jar accesstransformer PLUGINSERVICE
/forge-1.16.4-35.1.36.jar capability_inject_definalize PLUGINSERVICE
/forge-1.16.4-35.1.36.jar runtimedistcleaner PLUGINSERVICE
/mixin-0.8.2.jar mixin TRANSFORMATIONSERVICE
/preview_OptiFine_1.16.4_HD_U_G6_pre12.jar OptiFine TRANSFORMATIONSERVICE
/forge-1.16.4-35.1.36.jar fml TRANSFORMATIONSERVICE
FML: 35.1
Forge: net.minecraftforge:35.1.36
FML Language Providers:
[email protected]
minecraft@1
Mod List:
timecontrol-1.16.1-1.1.0.1.jar |TimeControl |timecontrol |1.1.0.1 |DONE |NOSIGNATURE
HudCompass-1.16.4-0.1.1.jar |HUD Compass |hudcompass |version |DONE |NOSIGNATURE
forgeautofish-2.0.0-1.16.x.jar |AutoFish for Forge |forgeautofish |2.0.0 |DONE |NOSIGNATURE
simplemagnets-1.0.11-mc1.16.4.jar |Simple Magnets |simplemagnets |1.0.11 |DONE |NOSIGNATURE
treeharvester_1.16.4-2.0.jar |Tree Harvester |treeharvester |2.0 |DONE |NOSIGNATURE
jei-1.16.4-7.6.1.65.jar |Just Enough Items |jei |7.6.1.65 |DONE |NOSIGNATURE
DoggyTalents-1.16.4-2.0.1.2.jar |Doggy Talents 2 |doggytalents |2.0.1.2 |DONE |NOSIGNATURE
abnormals_core-1.16.4-3.0.6.jar |Abnormals Core |abnormals_core |3.0.6 |DONE |NOSIGNATURE
borderless-1.16.4-1.1.0.jar |Borderless Window |borderless |1.16.4-1.1.0 |DONE |NOSIGNATURE
Mekanism-1.16.4-10.0.18.445.jar |Mekanism |mekanism |10.0.18 |DONE |NOSIGNATURE
mcw-windows-1.0.2-mc1.16.4.jar |Macaw's Windows |mcwwindows |1.0.2 |DONE |NOSIGNATURE
caelus-forge-1.16.4-2.1.0.2.jar |Caelus API |caelus |1.16.4-2.1.0.2 |DONE |NOSIGNATURE
ChickenDropFeathers-1.0-forge-1.16.4-35.1.0.jar |ChickenDropFeathers |chickendropfeathersmod |1.0 |DONE |NOSIGNATURE
create-mc1.16.3_v0.3e.jar |Create |create |mc1.16.3_v0.3e |DONE |NOSIGNATURE
BetterCaves-Forge-1.16.4-1.1.jar |YUNG's Better Caves |bettercaves |1.16.4-1.1 |DONE |NOSIGNATURE
Waystones_1.16.3-7.3.1.jar |Waystones |waystones |7.3.1 |DONE |NOSIGNATURE
TerraForged-1.16.4-0.2.0-BETA-8.jar |TerraForged |terraforged |0.2.0-BETA-8 |DONE |7b:73:d0:a2:c3:40:13:84:35:4f:c9:0e:2b:85:8c:08:ea:3c:3c:eb:f1:98:8b:5b:6e:ca:8a:a0:9a:cf:12:b3
XaerosWorldMap_1.11.7_Forge_1.16.4.jar |Xaero's World Map |xaeroworldmap |1.11.7 |DONE |NOSIGNATURE
citadel-1.5.3.jar |Citadel |citadel |1.5.3 |DONE |NOSIGNATURE
alexsmobs-1.4.1.jar |Alex's Mobs |alexsmobs |1.4.1 |DONE |NOSIGNATURE
YungsApi-1.16.4-Forge-2.jar |YUNG's API |yungsapi |1.16.4-Forge-2 |DONE |NOSIGNATURE
rangedpumps-0.8.2.jar |Ranged Pumps |rangedpumps |0.8.2 |DONE |NOSIGNATURE
branders-spawnermod-1.16.4-1.7.9.jar |Enhanced Mob Spawners |spawnermod |1.7.10 |DONE |NOSIGNATURE
Bookshelf-1.16.4-9.3.25.jar |Bookshelf |bookshelf |9.3.25 |DONE |eb:c4:b1:67:8b:f9:0c:db:dc:4f:01:b1:8e:61:64:39:4c:10:85:0b:a6:c4:c7:48:f0:fa:95:f2:cb:08:3a:e5
Roads-1.16.2-1.1.0.jar |Roads Mod |roads |1.1.0 |DONE |NOSIGNATURE
TinyMobFarm-1.16.4-1.1.1.jar |Tiny Mob Farm |tinymobfarm |1.1.1 |DONE |NOSIGNATURE
additional_lights-1.16.4-2.1.3.jar |Additional Lights |additional_lights |2.1.3 |DONE |NOSIGNATURE
MekanismGenerators-1.16.4-10.0.18.445.jar |Mekanism: Generators |mekanismgenerators |10.0.18 |DONE |NOSIGNATURE
ironagefurniture-1.16.4-0.1.0.2.jar |Iron Age Furniture |ironagefurniture |1.16.4-0.1.0 |DONE |NOSIGNATURE
Hwyla-forge-1.10.11-B78_1.16.2.jar |Waila |waila |1.10.11-B78_1.16.2 |DONE |NOSIGNATURE
WAWLA-1.16.4-7.0.2.jar |WAWLA |wawla |7.0.2 |DONE |ea:45:b3:82:b6:9d:50:16:95:e7:2e:34:e1:92:d5:b4:9b:69:90:d3:4f:2e:71:99:b0:be:40:80:27:1f:3e:b0
ImmersivePetroleum-1.16.4-3.1.0-2.jar |Immersive Petroleum |immersivepetroleum |3.1.0-2 |DONE |NOSIGNATURE
forge-1.16.4-35.1.36-universal.jar |Forge |forge |35.1.36 |DONE |22:af:21:d8:19:82:7f:93:94:fe:2b:ac:b7:e4:41:57:68:39:87:b1:a7:5c:c6:44:f9:25:74:21:14:f5:0d:90
shetiphiancore-1.16-3.8.4.jar |ShetiPhian-Core |shetiphiancore |3.8.4 |DONE |NOSIGNATURE
scuba-gear-1.16.4-1.0.1.jar |Scuba Gear |scuba_gear |1.0.1 |DONE |NOSIGNATURE
refinedstorage-1.9.11.jar |Refined Storage |refinedstorage |1.9.11 |DONE |NOSIGNATURE
easy_piglins-1.16.4-1.0.5.jar |Easy Piglins |easy_piglins |1.16.4-1.0.5 |DONE |NOSIGNATURE
DynamicSurroundings-1.16.4-4.0.3.4.jar |§3Dynamic Surroundings |dsurround |1.16.4-4.0.3.4 |DONE |b4:98:14:b9:76:55:25:4f:e5:5f:4d:71:90:87:43:5b:f9:d5:3a:02:60:42:5e:da:1f:15:9c:ff:be:a9:7c:77
ZeroCore2-1.16.4-2.0.19.jar |Zero CORE 2 |zerocore |1.16.4-2.0.19 |DONE |NOSIGNATURE
forge-1.16.4-35.1.36-client.jar |Minecraft |minecraft |1.16.4 |DONE |NOSIGNATURE
upgrade_aquatic-1.16.4-3.0.0.jar |Upgrade Aquatic |upgrade_aquatic |3.0.0 |DONE |NOSIGNATURE
torchmaster-2.3.5-alpha.jar |Torchmaster |torchmaster |2.3.5-alpha |DONE |NOSIGNATURE
endertanks-1.16-1.9.3.jar |EnderTanks |endertanks |1.9.3 |DONE |NOSIGNATURE
ImmersiveEngineering-1.16.4-4.1.2-129.jar |Immersive Engineering |immersiveengineering |1.16.4-4.1.2-129 |DONE |44:39:94:cf:1d:8c:be:3c:7f:a9:ee:f4:1e:63:a5:ac:61:f9:c2:87:d5:5b:d9:d6:8c:b5:3e:96:5d:8e:3f:b7
valhelsia_structures-16.0.5.jar |Valhelsia Structures |valhelsia_structures |16.0.5 |DONE |NOSIGNATURE
simplylight-1.16.4-1.1.1.jar |Simply Light |simplylight |1.16.4-1.1.1 |DONE |NOSIGNATURE
ChickenChunks-1.16.4-2.7.0.85-universal.jar |ChickenChunks |chickenchunks |2.7.0.85 |DONE |31:e6:db:63:47:4a:6e:e0:0a:2c:11:d1:76:db:4e:82:ff:56:2d:29:93:d2:e5:02:bd:d3:bd:9d:27:47:a5:71
TrackAPI-1.16.4-forge-1.2.1.jar |TrackAPI |trackapi |1.2 |DONE |NOSIGNATURE
simplybackpacks-1.16.3-1.4.13.jar |Simply Backpacks |simplybackpacks |1.16.3-1.4.13 |DONE |NOSIGNATURE
Corail-Recycler-NE-1.16.4-370.jar |Corail Recycler NE |corail_recycler_ne |1.16.4-370 |DONE |NOSIGNATURE
easy_villagers-1.16.4-1.1.27.jar |Easy Villagers |easy_villagers |1.16.4-1.1.27 |DONE |NOSIGNATURE
curios-forge-1.16.4-4.0.3.5.jar |Curios API |curios |1.16.4-4.0.3.5 |DONE |NOSIGNATURE
Xaeros_Minimap_21.0.0_Forge_1.16.4.jar |Xaero's Minimap |xaerominimap |21.0.0 |DONE |NOSIGNATURE
collective-1.16.4-1.53.jar |Collective |collective |1.53 |DONE |NOSIGNATURE
notenoughbreeding-1.16.4-1.0.0.jar |Not Enough Breeding |notenoughbreeding |1.16.4-1.0.0 |DONE |NOSIGNATURE
AutoRegLib-1.6-47.jar |AutoRegLib |autoreglib |1.6-47 |DONE |NOSIGNATURE
Quark-r2.4-294.jar |Quark |quark |r2.4-294 |DONE |NOSIGNATURE
overworld_quartz-1.16.4-1.1.0.2.jar |Overworld Quartz |overworld_quartz |1.1.0.1 |DONE |NOSIGNATURE
FluxNetworks-1.16.4-6.1.5.10.jar |Flux Networks |fluxnetworks |1.16.4-6.1.5.10 |DONE |NOSIGNATURE
structurize-0.13.104-ALPHA-universal.jar |Structurize |structurize |0.13.104-ALPHA |DONE |NOSIGNATURE
guncus-1.16.4-1.3.jar |Gun Customization: Infinity |guncus |1.16.4-1.3 |DONE |NOSIGNATURE
minecolonies-0.13.566-ALPHA-universal.jar |Minecolonies |minecolonies |0.13.566-ALPHA |DONE |NOSIGNATURE
MekanismTools-1.16.4-10.0.18.445.jar |Mekanism: Tools |mekanismtools |10.0.18 |DONE |NOSIGNATURE
architectury-1.3.80-forge.jar |Architectury |architectury |1.3.80 |DONE |NOSIGNATURE
AppleSkin-mc1.16.2-forge-1.0.14.jar |AppleSkin |appleskin |1.0.14 |DONE |NOSIGNATURE
ImmersiveRailroading-1.16.4-forge-1.8.0.1.jar |Immersive Railroading |immersiverailroading |1.16.4-forge-1.8.0 |DONE |NOSIGNATURE
UniversalModCore-1.16.4-forge-1.0.1.jar |Universal Mod Core |universalmodcore |1.0.1 |DONE |NOSIGNATURE
curiouselytra-forge-1.16.3-4.0.0.1.jar |Curious Elytra |curiouselytra |1.16.3-4.0.0.1 |DONE |NOSIGNATURE
mcw-furniture-2.0.0-mc1.16.4.jar |Macaw's Furniture |mcwfurnitures |2.0.0 |DONE |NOSIGNATURE
ExtremeReactors2-1.16.4-2.0.21.jar |Extreme Reactors 2 |bigreactors |1.16.4-2.0.21 |DONE |NOSIGNATURE
light-overlay-5.6.1.jar |Light Overlay |lightoverlay |5.6.1 |DONE |NOSIGNATURE
cloth-config-forge-4.1.3.jar |Cloth Config v4 API |cloth-config |4.1.3 |DONE |NOSIGNATURE
Aquaculture-1.16.4-2.1.12.jar |Aquaculture 2 |aquaculture |1.16.4-2.1.12 |DONE |NOSIGNATURE
BetterShieldsMC1.16.3-1.1.1.jar |Better Shields |bettershields |1.1.1 |DONE |NOSIGNATURE
Disenchanting-forge_1.16.3-1.6.0-alpha.jar |Disenchanting |disenchanting |1.6.0 |DONE |NOSIGNATURE
CodeChickenLib-1.16.4-3.5.0.401-universal.jar |CodeChicken Lib |codechickenlib |3.5.0.401 |DONE |31:e6:db:63:47:4a:6e:e0:0a:2c:11:d1:76:db:4e:82:ff:56:2d:29:93:d2:e5:02:bd:d3:bd:9d:27:47:a5:71
overloadedarmorbar-5.1.0.jar |Overloaded Armor Bar |overloadedarmorbar |5.1.0 |DONE |NOSIGNATURE
BetterMineshafts-Forge-1.16.3-1.1.1.jar |YUNG's Better Mineshafts |bettermineshafts |1.16.3-1.1.1 |DONE |NOSIGNATURE
WailaHarvestability-mc1.16.2-forge-1.1.13.jar |Waila Harvestability |wailaharvestability |1.1.13 |DONE |NOSIGNATURE
dungeons_gear-1.16.4-3.0.6.jar |Dungeons Gear |dungeons_gear |3.0.6 |DONE |NOSIGNATURE
Crash Report UUID: 80ba37da-8a3c-4f14-a000-d733a62c72d1
OptiFine Version: OptiFine_1.16.4_HD_U_G6_pre12
OptiFine Build: 20210110-191159
Render Distance Chunks: 10
Mipmaps: 4
Anisotropic Filtering: 1
Antialiasing: 0
Multitexture: false
Shaders: null
OpenGlVersion: 4.6.0 NVIDIA 460.89
OpenGlRenderer: GeForce GTX 1080/PCIe/SSE2
OpenGlVendor: NVIDIA Corporation
CpuCount: 12

commented

Can confirm I am getting the same error.

commented

@Won-Ton pretty sure mixins cannot apply to interfaces. I believe that was what murfrey was working on. Why can’t terraforged have ChunkDelegate extend one of the non-interface chunk classes and then override the methods needed? That would resolve this crash and possible prevent any future crash with mods that expect a vanilla chunk class

also, another issue with the serverlifecycle is, you don’t know what dimension you’re in. Carvers can run in any dimension so that’s not a solution but just puts the problem back to square one. Especially as iirc, Better Caves allows users to swap cavers to move them around any dimension so the context of the current world that the carver is in is needed. And it isn’t just gonna be the overworld

commented

My issue with overriding getWorldForge is that my mod now becomes contingent on that method being present, which could change on a whim by the Forge team. If that method gets changed or removed, we'll be back to square one with this issue. Mixing into vanilla chunk classes is a much more resilient solution.

commented

Won-Ton, ah that's right. I forgot forge patched in the getWorldForge. However, when trying to test mixin into the method, I dont think it is possible anyway. I tried looking up info on mixins into interfaces and all I could find is that mixins cant really do much with interfaces such as adding a field or new methods.
image

I still took a stab and tried this but getWorldForge still returns null. And I kind of agree with Nick as it feels like getWorldForge is legacy code that Forge would be likely to remove after another refactor although it is used in ChunkDataEvent.
https://gist.github.com/TelepathicGrunt/e733035c0a2af0e8f36c340b6c894b52

If you know how to make a working example mixin into the IChunk interface and get it to store/get the world along with the boolean of if the chunk was carved or not, then please share it. I don't see many options on Better Caves's end.

Edit: I see my mistake is that ChunkPrimerMixin doesn't implement IChunk but it needs to implement IServerWorldHolder. Classes cannot implement two interfaces at once which adds another layer of complexity to the problem.

commented

Was talking with someone and the only other solution Better Caves can even try is mixin a new world field into WorldCarver, then mixin into ChunkGenerator's carve method, and in the loop over configuredcarvers, and set the world of the configuredcarver's inner WorldCarver's world field. However, there is concerned about concurrency issues with this which might need the use of threadlocals.

also, chunkgenerators doesnt have a world either so we are... back to square one again.

Honestly, the safest and best solution is terraforged just extends one of the non-interface chunk classes. Would help prevent better caves having to do even more concerning hacks just to work with terraforged

commented

@Won-Ton pretty sure mixins cannot apply to interfaces. I believe that was what murfrey was working on. Why can’t terraforged have ChunkDelegate extend one of the non-interface chunk classes and then override the methods needed? That would resolve this crash and possible prevent any future crash with mods that expect a vanilla chunk class

ChunkPrimer implements IChunk which has forge's default IWorld getWorldForge() { return null; } patched onto it.
You can add an override for that onto ChunkPrimer via mixin in exactly the same way as is being done with IServerWorldHolder .

TF doesn't/won't extend ChunkPrimer because of allocations (ChunkPrimer is full of a bunch of initialized maps/lists/arrays).
The contract for ChunkCarver is IChunk which TF fulfills. Mojang's generator design is relatively strict on what it exposes to each generation step (with good reason) so it's on (the proverbial) 'you' if you want to circumvent it.

also, another issue with the serverlifecycle is, you don’t know what dimension you’re in. Carvers can run in any dimension so that’s not a solution but just puts the problem back to square one. Especially as iirc, Better Caves allows users to swap cavers to move them around any dimension so the context of the current world that the carver is in is needed. And it isn’t just gonna be the overworld

This is true. It was just a suggestion in case it fitted this mod's usecase.

commented

@Won-Ton Can you publish a 1.16 build? I'm gonna try to plug into your API and use the delegate chunk.

commented

@yungnickyoung for now, what you could do is wrap all casts in an if(chunk instanceof IServerWorldHolder){ ... } and treat the chunk as overworld and uncarved if the check fails. That would prevent the crash with terraforged until a better solution arises.

commented

@TelepathicGrunt

interface IServerWorldHolder extends IChunk

The hasCarved marker stuff would need another solution but that'd be trivial to solve

commented

@TelepathicGrunt For reference, this is what I was getting at - you mixin-implement the interface, not try mixin into the default method:

interface IChunk {
    ...
    default IWorld getWorldForge() {
        return null
    }
}

interface IServerWorldHolder extends IChunk {
    void setWorldForge(IWorld world);
}

@Mixin(ChunkPrimer.class)
abstract class MixinChunkPrimer implements IServerWorldHolder {

    private IWorld worldForge;

    @Override
    public IWorld getWorldForge() {
        return worldForge;
    }

    @Override
    public void setWorldForge(IWorld world) {
        this.worldForge = world;
    }
}

Anywho, I've submitted an alternative approach which I think should be a lot more solid go forward

commented

Thanks everyone for your help. I just uploaded v1.1.1, which should hopefully fix this issue. Please let me know if it works for you! I'll leave this issue open a little while longer in case it doesn't.

commented

Works beautifully ! Great looking underground to match the great looking overground ! Well done.

commented

Looks to be working.... Loaded old version generated world with all but a few chunks trimmed to reset most of it loaded fine where it would not before.

Very nice mod including better mineshafts mod....Just what MC needed.

Thank you for all your time,