diff --git a/sources/src/main/java/io/akarin/api/internal/Akari.java b/sources/src/main/java/io/akarin/api/internal/Akari.java index 245b93523..a4f7994b4 100644 --- a/sources/src/main/java/io/akarin/api/internal/Akari.java +++ b/sources/src/main/java/io/akarin/api/internal/Akari.java @@ -55,8 +55,12 @@ public abstract class Akari { public static final ExecutorCompletionService STAGE_TICK = new ExecutorCompletionService<>(Executors.newSingleThreadExecutor(new AssignableFactory())); public static boolean isPrimaryThread() { + return isPrimaryThread(true); + } + + public static boolean isPrimaryThread(boolean assign) { Thread current = Thread.currentThread(); - return current == MinecraftServer.getServer().primaryThread || current instanceof AssignableThread; + return current == MinecraftServer.getServer().primaryThread || (assign ? current instanceof AssignableThread : false); } public static final String EMPTY_STRING = ""; diff --git a/sources/src/main/java/io/akarin/server/mixin/core/MixinTimingHandler.java b/sources/src/main/java/io/akarin/server/mixin/core/MixinTimingHandler.java index cb834a8ed..3fede2c32 100644 --- a/sources/src/main/java/io/akarin/server/mixin/core/MixinTimingHandler.java +++ b/sources/src/main/java/io/akarin/server/mixin/core/MixinTimingHandler.java @@ -27,7 +27,7 @@ public abstract class MixinTimingHandler { @Overwrite public Timing startTimingIfSync() { - if (Akari.isPrimaryThread()) { // Use non-mock method + if (Akari.isPrimaryThread(false)) { // Use non-mock method startTiming(); } return (Timing) this; @@ -36,12 +36,12 @@ public abstract class MixinTimingHandler { @SuppressWarnings({ "rawtypes", "unchecked" }) @Inject(method = "startTiming", at = @At("HEAD"), cancellable = true) public void onStartTiming(CallbackInfoReturnable ci) { - if (!Akari.isPrimaryThread()) ci.setReturnValue(this); // Avoid modify any field + if (!Akari.isPrimaryThread(false)) ci.setReturnValue(this); // Avoid modify any field } @Overwrite public void stopTimingIfSync() { - if (Akari.isPrimaryThread()) { + if (Akari.isPrimaryThread(false)) { stopTiming(true); // Avoid twice thread check } } @@ -53,7 +53,7 @@ public abstract class MixinTimingHandler { public void stopTiming(boolean alreadySync) { if (!enabled) return; - if (!alreadySync && !Akari.isPrimaryThread()) { + if (!alreadySync && !Akari.isPrimaryThread(false)) { if (AkarinGlobalConfig.silentAsyncTimings) return; Bukkit.getLogger().log(Level.SEVERE, "stopTiming called async for " + name);