diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryBlockEntity.kt index 8e48128f3..59d9efe96 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryBlockEntity.kt @@ -54,6 +54,7 @@ import ru.dbotthepony.mc.otm.core.util.TickList import ru.dbotthepony.mc.otm.core.util.countingLazy import ru.dbotthepony.mc.otm.network.BlockEntitySyncPacket import ru.dbotthepony.mc.otm.network.syncher.SynchableGroup +import ru.dbotthepony.mc.otm.once import ru.dbotthepony.mc.otm.onceServer import ru.dbotthepony.mc.otm.registry.game.MBlocks import ru.dbotthepony.mc.otm.sometimeServer @@ -240,7 +241,10 @@ abstract class MatteryBlockEntity(p_155228_: BlockEntityType<*>, p_155229_: Bloc protected fun waitForServerLevel(lambda: () -> Unit) { if (level is ServerLevel) { - lambda.invoke() + if (executeWaitForServerLevel) + lambda.invoke() + else + waitForServerLevel.add(lambda) } else if (level == null) { waitForServerLevel.add(lambda) } @@ -371,6 +375,7 @@ abstract class MatteryBlockEntity(p_155228_: BlockEntityType<*>, p_155229_: Bloc val syncher = SynchableGroup() private val synchers = Object2ObjectArrayMap() + private var executeWaitForServerLevel = false override fun setLevel(level: Level) { val old = this.level @@ -380,9 +385,15 @@ abstract class MatteryBlockEntity(p_155228_: BlockEntityType<*>, p_155229_: Bloc if (!level.isClientSide) { subscribe() - waitForServerLevel.forEach { it.invoke() } - waitForServerLevel.clear() + + level.once { + if (isRemoved) return@once + executeWaitForServerLevel = true + waitForServerLevel.forEach { it.invoke() } + waitForServerLevel.clear() + } } else { + executeWaitForServerLevel = true waitForServerLevel.clear() BlockEntitySyncPacket.applyBacklog(this) }