MUYUTwilighter / saplanting_fabric

A fabric mod that automatically plant sapling drops in minecraft games.
MIT License
6 stars 0 forks source link

ConcurrentModificationException on invoking World.setBlockState in multi-thread mode #15

Closed FeeeeK closed 10 months ago

FeeeeK commented 10 months ago

Looks like saplanting on 1.19.2 is not quite compatible with c2me:

[00:34:01] [SaplantingCoreThread/ERROR]: ThreadLocalRandom accessed from a different thread (owner: Server thread, current: SaplantingCoreThread)
This is usually NOT a bug in C2ME, but a bug in another mod or in vanilla code.
Possible solutions:
  - Find possible causes in the stack trace below and
    - if caused by another mod, report this to the corresponding mod authors
    - if no other mods are involved, report this to C2ME
minecraft_create  |
java.util.ConcurrentModificationException: ThreadLocalRandom accessed from a different thread (owner: Server thread, current: SaplantingCoreThread)
    at com.ishland.c2me.fixes.worldgen.threading_issues.common.CheckedThreadLocalRandom.handleNotOwner(CheckedThreadLocalRandom.java:55) ~[c2me-fixes-worldgen-threading-is+alpha.9.11-fd14208c8c793a1d.jar:?]
    at com.ishland.c2me.fixes.worldgen.threading_issues.common.CheckedThreadLocalRandom.isSafe(CheckedThreadLocalRandom.java:38) ~[c2me-fixes-worldgen-threading-is+alpha.9.11-fd14208c8c793a1d.jar:?]
    at com.ishland.c2me.fixes.worldgen.threading_issues.common.CheckedThreadLocalRandom.next(CheckedThreadLocalRandom.java:86) ~[c2me-fixes-worldgen-threading-is+alpha.9.11-fd14208c8c793a1d.jar:?]
    at net.minecraft.util.math.random.BaseRandom.nextInt(BaseRandom.java:33) ~[server-intermediary.jar:?]
    at net.minecraft.block.FireBlock.getFireTickDelay(net/minecraft/class_2358.java:311) ~[server-intermediary.jar:?]
    at net.minecraft.block.FireBlock.onBlockAdded(net/minecraft/class_2358.java:307) ~[server-intermediary.jar:?]
    at net.minecraft.block.AbstractBlock$AbstractBlockState.onBlockAdded(net/minecraft/class_4970$class_4971.java:936) ~[server-intermediary.jar:?]
    at net.minecraft.world.chunk.WorldChunk.redirect$blm000$carpet$onAdded(carpet/mixins/LevelChunk_fillUpdatesMixin.java [carpet.mixins.json]:23) ~[server-intermediary.jar:?]
    at net.minecraft.world.chunk.WorldChunk.setBlockState(net/minecraft/class_2818.java:263) ~[server-intermediary.jar:?]
    at net.minecraft.world.World.setBlockState(net/minecraft/class_1937.java:221) ~[server-intermediary.jar:?]
    at net.minecraft.block.Block.replace(net/minecraft/class_2248.java:168) ~[server-intermediary.jar:?]
    at net.minecraft.world.block.NeighborUpdater.replaceWithStateForNeighborUpdate(NeighborUpdater.java:37) ~[server-intermediary.jar:?]
    at net.minecraft.world.block.ChainRestrictedNeighborUpdater$StateReplacementEntry.update(ChainRestrictedNeighborUpdater.java:143) ~[server-intermediary.jar:?]
    at net.minecraft.world.block.ChainRestrictedNeighborUpdater.runQueuedUpdates(net/minecraft/class_7159.java:78) ~[server-intermediary.jar:?]
    at net.minecraft.world.block.ChainRestrictedNeighborUpdater.enqueue(net/minecraft/class_7159.java:65) ~[server-intermediary.jar:?]
    at net.minecraft.world.block.ChainRestrictedNeighborUpdater.updateNeighbors(net/minecraft/class_7159.java:47) ~[server-intermediary.jar:?]
    at net.minecraft.server.world.ServerWorld.updateNeighborsAlways(net/minecraft/class_3218.java:1015) ~[server-intermediary.jar:?]
    at net.minecraft.server.world.ServerWorld.updateNeighbors(net/minecraft/class_3218.java:1435) ~[server-intermediary.jar:?]
    at net.minecraft.world.World.redirect$bll000$carpet$updateNeighborsMaybe(carpet/mixins/Level_fillUpdatesMixin.java [carpet.mixins.json]:30) ~[server-intermediary.jar:?]
    at net.minecraft.world.World.setBlockState(net/minecraft/class_1937.java:245) ~[server-intermediary.jar:?]
    at net.minecraft.world.World.setBlockState(net/minecraft/class_1937.java:206) ~[server-intermediary.jar:?]
    at net.minecraft.entity.ItemEntity.plant(cool/muyucloud/saplanting/mixin/ItemEntityMixin.java [saplanting.mixins.json]:195) ~[server-intermediary.jar:?]
    at net.minecraft.entity.ItemEntity.run(cool/muyucloud/saplanting/mixin/ItemEntityMixin.java [saplanting.mixins.json]:222) ~[server-intermediary.jar:?]
    at net.minecraft.entity.ItemEntity.multiThreadRun(cool/muyucloud/saplanting/mixin/ItemEntityMixin.java [saplanting.mixins.json]:258) ~[server-intermediary.jar:?]
    at java.lang.Thread.run(Thread.java:1583) [?:?]
[00:34:01] [SaplantingCoreThread/ERROR]: Some Errors occurred during planting this item:
[00:34:01] [SaplantingCoreThread/ERROR]: ItemEntity: "91793d4e-0ae1-470d-9c01-d374b4963c21" at (-1592.649369281129, 63.875, -1528.6409849321706) in world "minecraft:dimension_type", biomes "Reference{ResourceKey[minecraft:worldgen/biome / minecraft:mangrove_swamp]=net.minecraft.world.biome.Biome@3c612eb9}"
BlockItem: "translation{key='block.minecraft.acacia_sapling', args=[]}"(minecraft:acacia_sapling)
Block: "translation{key='block.minecraft.acacia_sapling', args=[]}"(Block{minecraft:acacia_sapling})
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]: com.ishland.c2me.fixes.worldgen.threading_issues.common.CheckedThreadLocalRandom$1: ThreadLocalRandom accessed from a different thread (owner: Server thread, current: SaplantingCoreThread)
This is usually NOT a bug in C2ME, but a bug in another mod or in vanilla code.
Possible solutions:
  - Find possible causes in the stack trace below and
    - if caused by another mod, report this to the corresponding mod authors
    - if no other mods are involved, report this to C2ME
minecraft_create  |
 (You may make this a fatal warning instead of a hard crash with fixes.enforceSafeWorldRandomAccess setting in c2me.toml)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]: Caused by: java.util.ConcurrentModificationException: ThreadLocalRandom accessed from a different thread (owner: Server thread, current: SaplantingCoreThread)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at com.ishland.c2me.fixes.worldgen.threading_issues.common.CheckedThreadLocalRandom.handleNotOwner(CheckedThreadLocalRandom.java:55)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at com.ishland.c2me.fixes.worldgen.threading_issues.common.CheckedThreadLocalRandom.isSafe(CheckedThreadLocalRandom.java:38)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at com.ishland.c2me.fixes.worldgen.threading_issues.common.CheckedThreadLocalRandom.next(CheckedThreadLocalRandom.java:86)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at net.minecraft.util.math.random.BaseRandom.nextInt(BaseRandom.java:33)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at net.minecraft.block.FireBlock.getFireTickDelay(net/minecraft/block/FireBlock.java:311)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at net.minecraft.block.FireBlock.onBlockAdded(net/minecraft/block/FireBlock.java:307)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at net.minecraft.block.AbstractBlock$AbstractBlockState.onBlockAdded(net/minecraft/block/AbstractBlock$AbstractBlockState.java:936)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at net.minecraft.world.chunk.WorldChunk.redirect$blm000$carpet$onAdded(carpet/mixins/LevelChunk_fillUpdatesMixin.java [carpet.mixins.json]:23)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at net.minecraft.world.chunk.WorldChunk.setBlockState(net/minecraft/world/chunk/WorldChunk.java:263)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at net.minecraft.world.World.setBlockState(net/minecraft/world/World.java:221)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at net.minecraft.block.Block.replace(net/minecraft/block/Block.java:168)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at net.minecraft.world.block.NeighborUpdater.replaceWithStateForNeighborUpdate(NeighborUpdater.java:37)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at net.minecraft.world.block.ChainRestrictedNeighborUpdater$StateReplacementEntry.update(ChainRestrictedNeighborUpdater.java:143)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at net.minecraft.world.block.ChainRestrictedNeighborUpdater.runQueuedUpdates(net/minecraft/world/block/ChainRestrictedNeighborUpdater.java:78)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at net.minecraft.world.block.ChainRestrictedNeighborUpdater.enqueue(net/minecraft/world/block/ChainRestrictedNeighborUpdater.java:65)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at net.minecraft.world.block.ChainRestrictedNeighborUpdater.updateNeighbors(net/minecraft/world/block/ChainRestrictedNeighborUpdater.java:47)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at net.minecraft.server.world.ServerWorld.updateNeighborsAlways(net/minecraft/server/world/ServerWorld.java:1015)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at net.minecraft.server.world.ServerWorld.updateNeighbors(net/minecraft/server/world/ServerWorld.java:1435)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at net.minecraft.world.World.redirect$bll000$carpet$updateNeighborsMaybe(carpet/mixins/Level_fillUpdatesMixin.java [carpet.mixins.json]:30)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at net.minecraft.world.World.setBlockState(net/minecraft/world/World.java:245)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at net.minecraft.world.World.setBlockState(net/minecraft/world/World.java:206)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at net.minecraft.entity.ItemEntity.plant(cool/muyucloud/saplanting/mixin/ItemEntityMixin.java [saplanting.mixins.json]:195)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at net.minecraft.entity.ItemEntity.run(cool/muyucloud/saplanting/mixin/ItemEntityMixin.java [saplanting.mixins.json]:222)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at net.minecraft.entity.ItemEntity.multiThreadRun(cool/muyucloud/saplanting/mixin/ItemEntityMixin.java [saplanting.mixins.json]:258)
[00:34:01] [SaplantingCoreThread/INFO]: [STDERR]:   at java.base/java.lang.Thread.run(Thread.java:1583)
MUYUTwilighter commented 10 months ago

This problem is caused by multi-thread logic, before I fix this, you can disable multi-thread mode by configuring property "multiThread" as false.

Using command: /saplanting property multiThread false

Or modify config file /config/saplanting.json": "multiThread": true -> false then restart your game or use command: /saplanting file load

MUYUTwilighter commented 10 months ago

Issue fixed in Saplanting 1.2.5 on fabric

FeeeeK commented 10 months ago

Oh, wait, looks like 1.2.5 doesn't support 1.19.2, but modrinth says otherwise: image

A potential solution has been determined, this may resolve your problem:
      - Replace mod 'Saplanting' (saplanting) 1.2.5 with any version that is compatible with:
              - minecraft 1.19.2
 More details:
      - Mod 'Saplanting' (saplanting) 1.2.5 requires version 1.19 of 'Minecraft' (minecraft), but only the wrong version is present: 1.19.2!
MUYUTwilighter commented 10 months ago

Saplanting for fabric has stopped support for MC 1.19.2, you shall try update your game to 1.19.4 Or you can try use Saplanting 1.2.5 for MC 1.19.4 on your 1.19.2 client

If both doesn't work, use 1.2.4 and disable property "multiThread" via ways I mentioned before I fixed this issue

What's more, the version-support on Modrinth is auto-generated, and now it's corrected.