diff --git a/api/src/main/java/io/akarin/server/core/AkarinGlobalConfig.java b/api/src/main/java/io/akarin/server/core/AkarinGlobalConfig.java index de7c07fbf..b8c2f9760 100644 --- a/api/src/main/java/io/akarin/server/core/AkarinGlobalConfig.java +++ b/api/src/main/java/io/akarin/server/core/AkarinGlobalConfig.java @@ -219,4 +219,9 @@ public class AkarinGlobalConfig { private static void enableModernUserCaches() { userCacheExpireDays = getSeconds(getString("core.user-cache-expire-time", "30d")); } + + public static boolean spinningAwaitTicking = true; + private static void spinningAwaitTicking() { + spinningAwaitTicking = getBoolean("core.spinning-tick-await", spinningAwaitTicking); + } } \ No newline at end of file diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java index af8620e45..dba29f4f4 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -604,6 +604,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke } public void move(EnumMoveType enummovetype, double d0, double d1, double d2) { + System.out.print("move"); if (this.noclip) { this.a(this.getBoundingBox().d(d0, d1, d2)); this.recalcPosition(); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java index 28acfc97c..64777c881 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -17,6 +17,7 @@ import com.mojang.authlib.minecraft.MinecraftSessionService; import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; import com.mojang.datafixers.DataFixer; +import io.akarin.server.core.AkarinGlobalConfig; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufOutputStream; import io.netty.buffer.Unpooled; @@ -816,7 +817,14 @@ public abstract class MinecraftServer implements IAsyncTaskHandler, IMojangStati } } if (wait > 0) { - Thread.sleep(wait / 1000000); + // Akarin start + if (AkarinGlobalConfig.spinningAwaitTicking) { + long park = System.nanoTime(); + while ((System.nanoTime() - park) < wait); + } else { + Thread.sleep(wait / 1000000); + } + // Akarin end curTime = System.nanoTime(); wait = TICK_TIME - (curTime - lastTick); }