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 new file mode 100644 index 000000000..68db84b96 --- /dev/null +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/server/MixinLevelTicks.java @@ -0,0 +1,48 @@ +package com.seibel.distanthorizons.fabric.mixins.server; + +#if MC_VER < MC_1_21_4 + +import net.minecraft.world.entity.Entity; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(Entity.class) +public class MixinLevelTicks +{ + // dummy mixin to make the loader happy +} + +#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) // available in 1.18.2+, but only needed in 1.21.4+ +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 onChunkSave(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/fabric/src/main/resources/DistantHorizons.fabric.mixins.json b/fabric/src/main/resources/DistantHorizons.fabric.mixins.json index 487bb1ee9..c4796b42d 100644 --- a/fabric/src/main/resources/DistantHorizons.fabric.mixins.json +++ b/fabric/src/main/resources/DistantHorizons.fabric.mixins.json @@ -8,7 +8,8 @@ "server.MixinEntity", "server.MixinServerPlayer", "server.MixinTracingExecutor", - "server.MixinUtilBackgroundThread" + "server.MixinUtilBackgroundThread", + "server.MixinLevelTicks" ], "client": [ "client.MixinClientLevel", 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..c01c8b503 --- /dev/null +++ b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/server/MixinLevelTicks.java @@ -0,0 +1,46 @@ +package com.seibel.distanthorizons.neoforge.mixins.server; + +#if MC_VER < MC_1_21_4 + +import net.minecraft.world.entity.Entity; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(Entity.class) +public class MixinLevelTicks +{ + // dummy mixin to make the loader happy +} + +#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) // available in 1.18.2+, but only needed in 1.21.4+ +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 onChunkSave(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",