From 34968a69450b3308c232ec51432d36b45198af47 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Fri, 27 Dec 2024 09:25:54 -0600 Subject: [PATCH] Add schedule fix mixin to neoforge also fix old fabric compiling --- .../fabric/mixins/server/MixinLevelTicks.java | 23 +++++++- .../mixins/server/MixinLevelTicks.java | 52 +++++++++++++++++++ .../DistantHorizons.neoforge.mixins.json | 3 +- 3 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/server/MixinLevelTicks.java diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/server/MixinLevelTicks.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/server/MixinLevelTicks.java index 87dbe7ad7..ca436eae2 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/server/MixinLevelTicks.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/server/MixinLevelTicks.java @@ -1,5 +1,25 @@ package com.seibel.distanthorizons.fabric.mixins.server; + +#if MC_VER < MC_1_21_3 + +import net.minecraft.world.entity.Entity; +import org.spongepowered.asm.mixin.Mixin; + +/** + * {@link MixinUtilBackgroundThread} was used for versions before 1.21.3 + * This is just a dummy class/mixin to make the compiler happy. + * + * @see MixinUtilBackgroundThread + */ +//@Mixin(net.minecraft.minecraft.class) // TODO we should allow version specific mixins so we don't have to create dummy mixins that exist for all MC versions +@Mixin(Entity.class) +public class MixinLevelTicks +{ + +} +#else + import com.seibel.distanthorizons.common.wrappers.DependencySetupDoneCheck; import net.minecraft.world.ticks.LevelTicks; @@ -20,7 +40,7 @@ public class MixinLevelTicks @Inject(method = "schedule", at = @At(value = "HEAD"), cancellable = true) - private void onChunkSave(ScheduledTick tick, CallbackInfo ci) + private void schedule(ScheduledTick tick, CallbackInfo ci) { // In MC 1.21.4 an error check was added to log attempting to schedule ticks for unloaded chunks // this caused a lot of unnecessary errors when generating sand (FallingBlock.class). @@ -31,3 +51,4 @@ public class MixinLevelTicks } } +#endif diff --git a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/server/MixinLevelTicks.java b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/server/MixinLevelTicks.java new file mode 100644 index 000000000..cfab9002a --- /dev/null +++ b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/server/MixinLevelTicks.java @@ -0,0 +1,52 @@ +package com.seibel.distanthorizons.fabric.mixins.server; + + +#if MC_VER < MC_1_21_3 + +import org.spongepowered.asm.mixin.Mixin; + +/** + * {@link MixinUtilBackgroundThread} was used for versions before 1.21.3 + * This is just a dummy class/mixin to make the compiler happy. + * + * @see MixinUtilBackgroundThread + */ +//@Mixin(net.minecraft.miminecraft.class) // TODO we should allow version specific mixins so we don't have to create dummy mixins that exist for all MC versions +public class MixinLevelTicks +{ + +} +#else + +import com.seibel.distanthorizons.common.wrappers.DependencySetupDoneCheck; + +import net.minecraft.world.ticks.LevelTicks; +import net.minecraft.world.ticks.ScheduledTick; + +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; + +@Mixin(LevelTicks.class) +public class MixinLevelTicks +{ + // TODO put in a common location + private static boolean isWorldGenThread() + { return DependencySetupDoneCheck.isDone && DependencySetupDoneCheck.getIsCurrentThreadDistantGeneratorThread.get(); } + + + + @Inject(method = "schedule", at = @At(value = "HEAD"), cancellable = true) + private void schedule(ScheduledTick tick, CallbackInfo ci) + { + // In MC 1.21.4 an error check was added to log attempting to schedule ticks for unloaded chunks + // this caused a lot of unnecessary errors when generating sand (FallingBlock.class). + if (isWorldGenThread()) + { + ci.cancel(); + } + } + +} +#endif diff --git a/neoforge/src/main/resources/DistantHorizons.neoforge.mixins.json b/neoforge/src/main/resources/DistantHorizons.neoforge.mixins.json index 3323c8817..e0f886569 100644 --- a/neoforge/src/main/resources/DistantHorizons.neoforge.mixins.json +++ b/neoforge/src/main/resources/DistantHorizons.neoforge.mixins.json @@ -8,7 +8,8 @@ "server.MixinServerPlayer", "server.MixinTFChunkGenerator", "server.MixinTracingExecutor", - "server.MixinUtilBackgroundThread" + "server.MixinUtilBackgroundThread", + "server.MixinLevelTicks" ], "client": [ "client.MixinClientPacketListener",