diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftClientWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftClientWrapper.java index 4dc914ab6..415d17e6c 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftClientWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftClientWrapper.java @@ -396,4 +396,10 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra } } + @Override + public void setPreventAutoPause(boolean preventAutoPause) + { + throw new UnsupportedOperationException(); + } + } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftServerWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftServerWrapper.java index 32d9532ac..45906cf0c 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftServerWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftServerWrapper.java @@ -11,6 +11,7 @@ public class MinecraftServerWrapper implements IMinecraftSharedWrapper public static final MinecraftServerWrapper INSTANCE = new MinecraftServerWrapper(); public DedicatedServer dedicatedServer = null; + public boolean preventAutoPause = false; //=============// @@ -49,4 +50,10 @@ public class MinecraftServerWrapper implements IMinecraftSharedWrapper return this.dedicatedServer.getPlayerCount(); } + @Override + public void setPreventAutoPause(boolean preventAutoPause) + { + this.preventAutoPause = preventAutoPause; + } + } diff --git a/coreSubProjects b/coreSubProjects index 2a49fdee7..91dffa3c3 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 2a49fdee7f2cf1774953f6e04f5699e31eefa63c +Subproject commit 91dffa3c3e6759ec54afabfe60d6037cdbb6f957 diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/server/MixinMinecraftServer.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/server/MixinMinecraftServer.java new file mode 100644 index 000000000..29445798c --- /dev/null +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/server/MixinMinecraftServer.java @@ -0,0 +1,28 @@ +package com.seibel.distanthorizons.fabric.mixins.server; + +import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftServerWrapper; +import net.minecraft.server.MinecraftServer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +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 MixinMinecraftServer +{ + @Shadow + private int emptyTicks; + + @Inject(method = "tickServer", at = @At("HEAD")) + private void onTickServer(BooleanSupplier hasTimeLeft, CallbackInfo ci) + { + if (MinecraftServerWrapper.INSTANCE.preventAutoPause) + { + this.emptyTicks = 0; + } + } + +} diff --git a/fabric/src/main/resources/DistantHorizons.fabric.mixins.json b/fabric/src/main/resources/DistantHorizons.fabric.mixins.json index dca9096a5..5c7df8859 100644 --- a/fabric/src/main/resources/DistantHorizons.fabric.mixins.json +++ b/fabric/src/main/resources/DistantHorizons.fabric.mixins.json @@ -9,7 +9,8 @@ "server.MixinServerPlayer", "server.MixinTracingExecutor", "server.MixinUtilBackgroundThread", - "server.MixinLevelTicks" + "server.MixinLevelTicks", + "server.MixinMinecraftServer" ], "client": [ "client.MixinClientLevel", diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/server/MixinMinecraftServer.java b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/server/MixinMinecraftServer.java new file mode 100644 index 000000000..29445798c --- /dev/null +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/server/MixinMinecraftServer.java @@ -0,0 +1,28 @@ +package com.seibel.distanthorizons.fabric.mixins.server; + +import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftServerWrapper; +import net.minecraft.server.MinecraftServer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +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 MixinMinecraftServer +{ + @Shadow + private int emptyTicks; + + @Inject(method = "tickServer", at = @At("HEAD")) + private void onTickServer(BooleanSupplier hasTimeLeft, CallbackInfo ci) + { + if (MinecraftServerWrapper.INSTANCE.preventAutoPause) + { + this.emptyTicks = 0; + } + } + +} diff --git a/forge/src/main/resources/DistantHorizons.forge.mixins.json b/forge/src/main/resources/DistantHorizons.forge.mixins.json index 6539935e7..9d6292ade 100644 --- a/forge/src/main/resources/DistantHorizons.forge.mixins.json +++ b/forge/src/main/resources/DistantHorizons.forge.mixins.json @@ -8,7 +8,8 @@ "server.MixinTFChunkGenerator", "server.MixinChunkMap", "server.MixinServerPlayer", - "server.MixinEntity" + "server.MixinEntity", + "server.MixinMinecraftServer" ], "client": [ "client.MixinClientPacketListener", diff --git a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/server/MixinMinecraftServer.java b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/server/MixinMinecraftServer.java new file mode 100644 index 000000000..6eb0234d4 --- /dev/null +++ b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/server/MixinMinecraftServer.java @@ -0,0 +1,28 @@ +package com.seibel.distanthorizons.neoforge.mixins.server; + +import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftServerWrapper; +import net.minecraft.server.MinecraftServer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +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 MixinMinecraftServer +{ + @Shadow + private int emptyTicks; + + @Inject(method = "tickServer", at = @At("HEAD")) + private void onTickServer(BooleanSupplier hasTimeLeft, CallbackInfo ci) + { + if (MinecraftServerWrapper.INSTANCE.preventAutoPause) + { + this.emptyTicks = 0; + } + } + +} diff --git a/neoforge/src/main/resources/DistantHorizons.neoforge.mixins.json b/neoforge/src/main/resources/DistantHorizons.neoforge.mixins.json index e0f886569..a05364de6 100644 --- a/neoforge/src/main/resources/DistantHorizons.neoforge.mixins.json +++ b/neoforge/src/main/resources/DistantHorizons.neoforge.mixins.json @@ -9,7 +9,8 @@ "server.MixinTFChunkGenerator", "server.MixinTracingExecutor", "server.MixinUtilBackgroundThread", - "server.MixinLevelTicks" + "server.MixinLevelTicks", + "server.MixinMinecraftServer" ], "client": [ "client.MixinClientPacketListener",