create_ponder_wonder

Exports Create ponders to disk.
git clone git://git.oshgnacknak.de/create_ponder_wonder.git
Log | Files | Refs | README

commit 56bdcbb256c74640798c2cd1d143133a76474507
parent 7ab09e3351743d8bc79790f4fab36dfd3af104c7
Author: grimmauld <soeren@benjos.de>
Date:   Fri, 16 Apr 2021 16:01:05 +0200

Pause server ticking during ponder rendering

Diffstat:
Mbuild.gradle | 1+
Msrc/main/java/de/oshgnacknak/create_ponder_wonder/PonderRenderScheduler.java | 10+++++++++-
Msrc/main/java/de/oshgnacknak/create_ponder_wonder/commands/StopRenderingCommand.java | 1-
Asrc/main/java/de/oshgnacknak/create_ponder_wonder/mixin/PauseServerMixin.java | 20++++++++++++++++++++
Msrc/main/resources/create_ponder_wonder.mixins.json | 3++-
5 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/build.gradle b/build.gradle @@ -103,6 +103,7 @@ repositories { dependencies { minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" implementation fg.deobf("curse.maven:create-328085:3278516") + // runtimeOnly fg.deobf("curse.maven:fpsred-280294:3103648") compile fg.deobf("io.github.noeppi_noeppi.mods:LibX:1.16.3-1.0.15") annotationProcessor 'org.spongepowered:mixin:0.8:processor' } diff --git a/src/main/java/de/oshgnacknak/create_ponder_wonder/PonderRenderScheduler.java b/src/main/java/de/oshgnacknak/create_ponder_wonder/PonderRenderScheduler.java @@ -14,6 +14,8 @@ import java.util.concurrent.TimeUnit; public class PonderRenderScheduler { + private static final int GC_INTERVAL = 200; + private ExecutorService executorService; private boolean rendering; @@ -54,8 +56,10 @@ public class PonderRenderScheduler { for (PonderRenderer.RenderResult result : new PonderRenderer(ponder)) { Path out = path.resolve(String.format("%06d.png", result.frame)); result.image.write(out); - System.gc(); + if (result.frame % GC_INTERVAL == 0) + System.gc(); } + System.gc(); CreatePonderWonder.chat("Finished rendering Ponder: " + path); CreatePonderWonder.LOGGER.info("Finished rendering Ponder: {}", path); @@ -104,4 +108,8 @@ public class PonderRenderScheduler { CreatePonderWonder.LOGGER.info("Stopped rendering ponders"); CreatePonderWonder.chat("Stopped rendering ponders"); } + + public boolean isRendering() { + return rendering; + } } \ No newline at end of file diff --git a/src/main/java/de/oshgnacknak/create_ponder_wonder/commands/StopRenderingCommand.java b/src/main/java/de/oshgnacknak/create_ponder_wonder/commands/StopRenderingCommand.java @@ -1,7 +1,6 @@ package de.oshgnacknak.create_ponder_wonder.commands; import com.mojang.brigadier.context.CommandContext; -import com.mojang.brigadier.exceptions.CommandSyntaxException; import de.oshgnacknak.create_ponder_wonder.CreatePonderWonder; import net.minecraft.command.CommandSource; diff --git a/src/main/java/de/oshgnacknak/create_ponder_wonder/mixin/PauseServerMixin.java b/src/main/java/de/oshgnacknak/create_ponder_wonder/mixin/PauseServerMixin.java @@ -0,0 +1,20 @@ +package de.oshgnacknak.create_ponder_wonder.mixin; + +import de.oshgnacknak.create_ponder_wonder.CreatePonderWonder; +import net.minecraft.server.MinecraftServer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.function.BooleanSupplier; + +@Mixin(MinecraftServer.class) +public class PauseServerMixin { + + @Inject(at = @At(value = "INVOKE"), method = "Lnet/minecraft/server/MinecraftServer;updateTimeLightAndEntities(Ljava/util/function/BooleanSupplier;)V", cancellable = true) + private void tick(BooleanSupplier sup, CallbackInfo ci) { + if (CreatePonderWonder.PONDER_RENDERER.isRendering()) + ci.cancel(); + } +} diff --git a/src/main/resources/create_ponder_wonder.mixins.json b/src/main/resources/create_ponder_wonder.mixins.json @@ -1,9 +1,10 @@ { "required": true, - "package": "de.oshganknak.create_ponder_wonder.mixin", + "package": "de.oshgnacknak.create_ponder_wonder.mixin", "compatibilityLevel": "JAVA_8", "refmap": "hackforge.refmap.json", "mixins": [ + "PauseServerMixin" ], "injectors": { "defaultRequire": 1