From 4830d3a842271640549c52dd4b70401a26f4e405 Mon Sep 17 00:00:00 2001 From: Sotr Date: Sat, 9 Jun 2018 00:30:36 +0800 Subject: [PATCH] [Major] Ensures no concurrent tick one world --- .../java/io/akarin/server/core/AkarinSlackScheduler.java | 3 --- .../akarin/server/mixin/core/MixinMinecraftServer.java | 9 +++++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/sources/src/main/java/io/akarin/server/core/AkarinSlackScheduler.java b/sources/src/main/java/io/akarin/server/core/AkarinSlackScheduler.java index 5c96c729b..f5813264e 100644 --- a/sources/src/main/java/io/akarin/server/core/AkarinSlackScheduler.java +++ b/sources/src/main/java/io/akarin/server/core/AkarinSlackScheduler.java @@ -1,9 +1,6 @@ package io.akarin.server.core; -import org.bukkit.entity.Player; - import io.akarin.api.Akari; -import net.minecraft.server.ChatMessage; import net.minecraft.server.EntityPlayer; import net.minecraft.server.MinecraftServer; import net.minecraft.server.PacketPlayOutKeepAlive; diff --git a/sources/src/main/java/io/akarin/server/mixin/core/MixinMinecraftServer.java b/sources/src/main/java/io/akarin/server/mixin/core/MixinMinecraftServer.java index 3026eb462..d203248f1 100644 --- a/sources/src/main/java/io/akarin/server/mixin/core/MixinMinecraftServer.java +++ b/sources/src/main/java/io/akarin/server/mixin/core/MixinMinecraftServer.java @@ -140,15 +140,20 @@ public class MixinMinecraftServer { Akari.silentTiming = true; // Disable timings Akari.STAGE_TICK.submit(() -> { // Never tick one world concurrently! + // TODO better treat world index for (int i = 1; i <= worlds.size(); ++i) { WorldServer world = worlds.get(i < worlds.size() ? i : 0); - tickEntities(world); + synchronized (world.tickLock) { + tickEntities(world); + } } }, null); for (int i = 0; i < worlds.size(); ++i) { WorldServer world = worlds.get(i); - tickWorld(world); + synchronized (world.tickLock) { + tickWorld(world); + } } Akari.STAGE_TICK.take();