From 21d559ab946920cc71ccf27c9a99b2e84d4bb684 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Thu, 5 Jan 2023 18:19:39 -0500 Subject: [PATCH] Add chunk saving fix --- build.gradle | 6 +++- .../core/config/ModernFixConfig.java | 1 + .../ChunkManagerMixin.java | 32 +++++++++++++++++++ src/main/resources/modernfix.mixins.json | 1 + 4 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/embeddedt/modernfix/mixin/bugfix/edge_chunk_not_saved/ChunkManagerMixin.java diff --git a/build.gradle b/build.gradle index 702602ef..62ca5595 100644 --- a/build.gradle +++ b/build.gradle @@ -60,7 +60,7 @@ minecraft { // Recommended logging level for the console // You can set various levels here. // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels - property 'forge.logging.console.level', 'debug' + property 'forge.logging.console.level', 'info' mods { @@ -140,6 +140,10 @@ dependencies { annotationProcessor 'org.spongepowered:mixin:0.8.5:processor' runtimeOnly fg.deobf("curse.maven:lazydfu-460819:${lazydfu_version}") + runtimeOnly fg.deobf("curse.maven:roadrunner-529754:3683120") + runtimeOnly fg.deobf("curse.maven:starlight-529754:3683120") + runtimeOnly fg.deobf("curse.maven:rubidium-574856:3949659") + runtimeOnly fg.deobf("curse.maven:noexperimental-407174:3188120") runtimeOnly fg.deobf("mekanism:Mekanism:${mekanism_version}")// core runtimeOnly fg.deobf("mekanism:Mekanism:${mekanism_version}:generators")// Mekanism: Generators diff --git a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixConfig.java b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixConfig.java index 16dc0ea5..792a2e49 100644 --- a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixConfig.java +++ b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixConfig.java @@ -27,6 +27,7 @@ public class ModernFixConfig { this.addMixinRule("perf.parallelize_model_loading", true); this.addMixinRule("perf.trim_model_caches", true); this.addMixinRule("bugfix.concurrency", true); + this.addMixinRule("bugfix.edge_chunk_not_saved", true); } /** diff --git a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/edge_chunk_not_saved/ChunkManagerMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/edge_chunk_not_saved/ChunkManagerMixin.java new file mode 100644 index 00000000..fdae3d0c --- /dev/null +++ b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/edge_chunk_not_saved/ChunkManagerMixin.java @@ -0,0 +1,32 @@ +package org.embeddedt.modernfix.mixin.bugfix.edge_chunk_not_saved; + +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.ChunkPrimer; +import net.minecraft.world.chunk.ChunkPrimerWrapper; +import net.minecraft.world.chunk.IChunk; +import net.minecraft.world.server.ChunkHolder; +import net.minecraft.world.server.ChunkManager; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; + +import java.util.function.Predicate; + +/* https://github.com/SuperCoder7979/chunksavingfix-fabric/blob/main/src/main/java/supercoder79/chunksavingfix/mixin/MixinThreadedAnvilChunkStorage.java */ +@Mixin(ChunkManager.class) +public class ChunkManagerMixin { + // TODO: hits both at the moment- check and re-evaluate + @ModifyArg(method = "saveAllChunks(Z)V", at = @At(value = "INVOKE", target = "Ljava/util/stream/Stream;filter(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;", ordinal = 0), require = 0) + private Predicate alwaysAccessibleFlush(Predicate chunkHolder) { + return c -> true; + } + @ModifyArg(method = "saveAllChunks(Z)V", at = @At(value = "INVOKE", target = "Ljava/util/stream/Stream;filter(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;", ordinal = 1), require = 0) + private Predicate allowProtoChunkFlush(Predicate chunk) { + return c -> c instanceof ChunkPrimer || c instanceof ChunkPrimerWrapper || c instanceof Chunk; + } + + @ModifyArg(method = "saveAllChunks(Z)V", at = @At(value = "INVOKE", target = "Ljava/util/stream/Stream;filter(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;", ordinal = 3), require = 0) + private Predicate alwaysAccessible(Predicate chunkHolder) { + return c -> true; + } +} diff --git a/src/main/resources/modernfix.mixins.json b/src/main/resources/modernfix.mixins.json index b1787807..8e3e41e8 100644 --- a/src/main/resources/modernfix.mixins.json +++ b/src/main/resources/modernfix.mixins.json @@ -6,6 +6,7 @@ "compatibilityLevel": "JAVA_8", "refmap": "modernfix.refmap.json", "mixins": [ + "bugfix.edge_chunk_not_saved.ChunkManagerMixin", "feature.measure_time.MinecraftMixin", "perf.remove_biome_temperature_cache.BiomeMixin", "perf.resourcepacks.ModFileResourcePackMixin",