Resize worlds

This commit is contained in:
Sotr
2018-08-07 16:54:57 +08:00
parent 241a8ffefa
commit b41e4fd8c3
2 changed files with 9 additions and 4 deletions

View File

@@ -57,7 +57,7 @@ public abstract class Akari {
/** /**
* A common tick pool * A common tick pool
*/ */
public static final ExecutorCompletionService<?> STAGE_TICK = new ExecutorCompletionService<>(Executors.newFixedThreadPool(4, new AssignableFactory())); public static ExecutorCompletionService<?> STAGE_TICK;
public static boolean isPrimaryThread() { public static boolean isPrimaryThread() {
return isPrimaryThread(true); return isPrimaryThread(true);

View File

@@ -41,6 +41,7 @@ import net.minecraft.server.WorldServer;
@Mixin(value = MinecraftServer.class, remap = false) @Mixin(value = MinecraftServer.class, remap = false)
public abstract class MixinMinecraftServer { public abstract class MixinMinecraftServer {
@Shadow @Final public Thread primaryThread; @Shadow @Final public Thread primaryThread;
private int cachedWorlds;
@Overwrite @Overwrite
public String getServerModName() { public String getServerModName() {
@@ -53,6 +54,8 @@ public abstract class MixinMinecraftServer {
shift = At.Shift.BEFORE shift = At.Shift.BEFORE
)) ))
private void prerun(CallbackInfo info) { private void prerun(CallbackInfo info) {
Akari.STAGE_TICK = new ExecutorCompletionService<>(Executors.newFixedThreadPool((cachedWorlds = worlds.size()), new AssignableFactory()));
primaryThread.setPriority(AkarinGlobalConfig.primaryThreadPriority < Thread.NORM_PRIORITY ? Thread.NORM_PRIORITY : primaryThread.setPriority(AkarinGlobalConfig.primaryThreadPriority < Thread.NORM_PRIORITY ? Thread.NORM_PRIORITY :
(AkarinGlobalConfig.primaryThreadPriority > Thread.MAX_PRIORITY ? 10 : AkarinGlobalConfig.primaryThreadPriority)); (AkarinGlobalConfig.primaryThreadPriority > Thread.MAX_PRIORITY ? 10 : AkarinGlobalConfig.primaryThreadPriority));
@@ -178,6 +181,8 @@ public abstract class MixinMinecraftServer {
@Overwrite @Overwrite
public void D() throws InterruptedException { public void D() throws InterruptedException {
if (worlds.size() != cachedWorlds) Akari.STAGE_TICK = new ExecutorCompletionService<>(Executors.newFixedThreadPool(cachedWorlds, new AssignableFactory())); // Resize
Runnable runnable; Runnable runnable;
MinecraftTimings.bukkitSchedulerTimer.startTiming(); MinecraftTimings.bukkitSchedulerTimer.startTiming();
this.server.getScheduler().mainThreadHeartbeat(this.ticks); this.server.getScheduler().mainThreadHeartbeat(this.ticks);