MineColonies

MineColonies

57M Downloads

Supply Camp Dissapeared on placement

maximus1218 opened this issue ยท 13 comments

commented

version 0.11.940-ALPHA / Minecraft 1.15.2

Expected behavior

  • Supply Camp Placement
  • Supply camp gets placed onto the world, successfully, and visibly

Actual behavior

  • Supply camp disappears on placement
  • When I place the supply camp, I got the achievement for it, so it registered as placed. The supply camp also left my inventory. But upon placement, nothing happened. The blocks that should be there did not even register. It changed absolutely nothing about the landscape.
  1. Craft Supply Camp
  2. Create space on terrain for supply camp placement
  3. Place Supply Camp
  4. Supply Camp leaves inventory but was not placed.
commented

Can you reproduce that?

commented

I am getting this same error and consistently have it happen. it places just fine when in creative, but if survival it will do as stated: get achievement, think it is there, but show nothing and not allow another to be placed.

When it fails, it often hangs the server and we see "[23:02:00] [Server-Worker-5/WARN] [minecraft/JigsawManager]: Empty or none existent pool: minecraft:none" in the screen log, over and over and over. Then when it dies, it takes the whole server with it - we restart and it's like we deleted the "world" folder from the server.

We do get an error log as well:
java.lang.Error: ServerHangWatchdog detected that a single server tick took 60.00 seconds (should be max 0.05)java.lang.Error: ServerHangWatchdog detected that a single server tick took 60.00 seconds (should be max 0.05) at sun.misc.Unsafe.park(Native Method) ~[?:1.8.0_252] {} at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) ~[?:1.8.0_252] {} at net.minecraft.util.concurrent.ThreadTaskExecutor.func_223705_bi(SourceFile:139) ~[?:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B} at net.minecraft.util.concurrent.ThreadTaskExecutor.func_213161_c(SourceFile:129) ~[?:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B} at net.minecraft.world.server.ServerChunkProvider.func_212849_a_(SourceFile:139) ~[?:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:assets/immersive_portals/immersive_portals.mixins.json:MixinServerChunkManager,pl:mixin:APP:lithium.mixins.json:avoid_allocations.MixinServerChunkProvider,pl:mixin:A} at net.minecraft.world.World.func_217353_a(World.java:149) ~[?:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:assets/immersive_portals/immersive_portals.mixins.json:MixinWorld,pl:mixin:APP:lithium.mixins.json:avoid_allocations.MixinWorld,pl:mixin:A,pl:runtimedistcleaner:A} at net.minecraft.world.IWorldReader.func_217348_a(IWorldReader.java:101) ~[?:?] {re:classloading,pl:runtimedistcleaner:A,re:mixin,pl:runtimedistcleaner:A} at net.minecraft.world.World.func_212866_a_(World.java:145) ~[?:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:assets/immersive_portals/immersive_portals.mixins.json:MixinWorld,pl:mixin:APP:lithium.mixins.json:avoid_allocations.MixinWorld,pl:mixin:A,pl:runtimedistcleaner:A} at net.minecraft.world.World.func_180495_p(World.java:361) ~[?:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:assets/immersive_portals/immersive_portals.mixins.json:MixinWorld,pl:mixin:APP:lithium.mixins.json:avoid_allocations.MixinWorld,pl:mixin:A,pl:runtimedistcleaner:A} at com.ldtteam.structurize.util.InstantStructurePlacer.placeStructure(InstantStructurePlacer.java:174) ~[?:0.10.315-ALPHA] {re:classloading} at com.minecolonies.api.util.InstantStructurePlacer.placeStructure(InstantStructurePlacer.java:107) ~[?:0.11.939-ALPHA] {re:classloading} at com.ldtteam.structurize.util.ScanToolOperation.apply(ScanToolOperation.java:168) ~[?:0.10.315-ALPHA] {re:classloading} at com.ldtteam.structurize.management.Manager.onWorldTick(Manager.java:70) ~[?:0.10.315-ALPHA] {re:classloading} at com.ldtteam.structurize.event.EventSubscriber.onWorldTick(EventSubscriber.java:87) ~[?:0.10.315-ALPHA] {re:classloading} at net.minecraftforge.eventbus.ASMEventHandler_409_EventSubscriber_onWorldTick_WorldTickEvent.invoke(.dynamic) ~[?:?] {} at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:80) ~[eventbus-2.1.0-service.jar:?] {} at net.minecraftforge.eventbus.EventBus.post(EventBus.java:258) ~[eventbus-2.1.0-service.jar:?] {} at net.minecraftforge.fml.hooks.BasicEventHooks.onPreWorldTick(BasicEventHooks.java:94) ~[?:?] {re:classloading} at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:846) ~[?:?] {re:classloading,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,pl:mixin:A,pl:runtimedistcleaner:A} at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:330) ~[?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:784) ~[?:?] {re:classloading,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,pl:mixin:A,pl:runtimedistcleaner:A} at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:637) ~[?:?] {re:classloading,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,pl:mixin:A,pl:runtimedistcleaner:A} at java.lang.Thread.run(Thread.java:748) [?:1.8.0_252] {}

Things to note:

  • Due to other mods we use, we had to upgrade to Forge 31.1.77 and that is when this started happening.

  • I found for me if I included the Immersive Portals mod, it would not place. I remove that mod, and it works. I have asked them for help as well on this as we want both mods (I have not tested any other mods at this time, due to error log mentioning it above)

I am not sure either of these points are relevant but this is hands-down my favorite mod and want to be sure it works 100% even after we get the initial camp placed!

commented

Good find in the log, please report this to the immersive portals mod they are using a coremod with mixins to do something that blocks the placement on our end. I don't believe there is anything we can do on our side to fix this. We're just calling minecraft methods to spawn entities (item frames, armour stands, etc) and that mod is intercepting our calls.

commented

Is there any way that you guys could create a compatibility with their mods? I know that coremods are frowned upon, but compatibility would help a lot of us out.

commented

they are using a coremod with mixins to do something that blocks the placement on our end

@Raycoms Hi, I help develop Immersive Portals, could you let me know what is failing for your mod so we can try to fix it? I don't know how minecolonies' code works, but afaik IP should not be "intercepting" method calls like this. Knowing which vanilla function is borked would help immensely.

commented
final Optional<EntityType<?>> type = EntityType.readEntityType(compound);
                    if (type.isPresent())
                    {
                        final Entity entity = type.get().create(world);
                        if (entity != null)
                        {
                            entity.deserializeNBT(compound);

                            entity.setUniqueId(UUID.randomUUID());
                            final Vec3d worldPos = entity.getPositionVector().add(pos.getX(), pos.getY(), pos.getZ());
                            entity.setPosition(worldPos.x, worldPos.y, worldPos.z);

                            world.addEntity(entity);
                            storage.addToBeKilledEntity(entity);
                        }
                    }

It seems to be failing here on world.addEntity(entity)

commented

It seems to be caused by that it tries to call getBlockState in the alternate4 dimension and alternate4 dimension's generation seems stuck so the server main thread waits for it forever. It stucks in vazkii.quark.world.gen.structure.BigDungeonStructure$Start.func_214625_a so it may be an issue with quark

commented

Did you enable dimension stack? Normally if you don't access alternate4 it will not try to generate terrain.
It seems that the one who access alternate4 is this

at com.ldtteam.structurize.util.InstantStructurePlacer.placeStructure(InstantStructurePlacer.java:174)
	at com.minecolonies.api.util.InstantStructurePlacer.placeStructure(InstantStructurePlacer.java:107)
	at com.ldtteam.structurize.util.ScanToolOperation.apply(ScanToolOperation.java:168)
	at com.ldtteam.structurize.management.Manager.onWorldTick(Manager.java:70)
	at com.ldtteam.structurize.event.EventSubscriber.onWorldTick(EventSubscriber.java:87)
commented

so there are actually two issues intertwined:

  1. quark's generation in alternate4 stuck. (last time biomes o plenty also stuck in alternate4 because of a typo which is fixed)
  2. structurize should not place structures in alternate4 if the player places a tent in overworld (unless the player enables dimension stack and included alternate4?)
commented

Or structurize does not try to access alternate4 but something else tried to access alternate4 and the server worker thread lags, but the issue only manifest when structurize invokes getblockState?

commented

This is weird because we just get the general world from the player when placing this. There is no way we should be accessing any other dimension

commented

We do not dimension stack. It was causing other issues (serious server lag).

What is special about dimension 4?

commented

Dimension stack was used on my part while I was finding this error.