From a0ceaa4dacd0b35aa28c36b56963f26e04e209d1 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Thu, 27 Apr 2023 21:36:32 -0400 Subject: [PATCH] Fix patches being nonfunctional --- .../core/config/ModernFixEarlyConfig.java | 2 +- .../paper_chunk_patches/ChunkHolderMixin.java | 2 +- .../paper_chunk_patches/ChunkMapMixin.java | 16 ++++++++++++---- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java index 8ce7c38b..c954f1b5 100644 --- a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java +++ b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java @@ -70,7 +70,7 @@ public class ModernFixEarlyConfig { this.addMixinRule("perf.dynamic_structure_manager", true); this.addMixinRule("bugfix.mc218112", true); this.addMixinRule("bugfix.chunk_deadlock", true); - this.addMixinRule("bugfix.chunk_not_unloading", true); + this.addMixinRule("bugfix.paper_chunk_patches", true); this.addMixinRule("bugfix.chunk_deadlock.valhesia", modPresent("valhelsia_structures")); this.addMixinRule("bugfix.tf_cme_on_load", modPresent("twilightforest")); this.addMixinRule("bugfix.refinedstorage", modPresent("refinedstorage")); diff --git a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/paper_chunk_patches/ChunkHolderMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/paper_chunk_patches/ChunkHolderMixin.java index 796097d6..0a51f6d7 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/paper_chunk_patches/ChunkHolderMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/paper_chunk_patches/ChunkHolderMixin.java @@ -45,7 +45,7 @@ public abstract class ChunkHolderMixin implements IPaperChunkHolder { return null; } - public static ChunkStatus mfix$getNextStatus(ChunkStatus status) { + private static ChunkStatus mfix$getNextStatus(ChunkStatus status) { if (status == ChunkStatus.FULL) { return status; } diff --git a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/paper_chunk_patches/ChunkMapMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/paper_chunk_patches/ChunkMapMixin.java index aed16d3f..15f9dd38 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/paper_chunk_patches/ChunkMapMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/paper_chunk_patches/ChunkMapMixin.java @@ -1,9 +1,11 @@ package org.embeddedt.modernfix.mixin.bugfix.paper_chunk_patches; +import com.mojang.datafixers.util.Either; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ChunkHolder; import net.minecraft.server.level.ChunkMap; import net.minecraft.util.thread.BlockableEventLoop; +import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraftforge.fml.server.ServerLifecycleHooks; import org.embeddedt.modernfix.duck.IPaperChunkHolder; import org.spongepowered.asm.mixin.Final; @@ -12,9 +14,13 @@ 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.ModifyArg; +import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import java.util.List; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; +import java.util.function.Function; @Mixin(ChunkMap.class) @@ -46,14 +52,16 @@ public class ChunkMapMixin { return this.mainInvokingExecutor; } - @ModifyArg(method = "scheduleChunkGeneration", at = @At(value = "INVOKE", target = "Ljava/util/concurrent/CompletableFuture;thenComposeAsync(Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"), index = 1) - private Executor skipWorkerIfPossible(Executor executor, ChunkHolder chunkHolder) { - return (runnable) -> { - if(((IPaperChunkHolder)chunkHolder).mfix$canAdvanceStatus()) { + @SuppressWarnings({"rawtypes", "unchecked"}) + @Redirect(method = "scheduleChunkGeneration", at = @At(value = "INVOKE", target = "Ljava/util/concurrent/CompletableFuture;thenComposeAsync(Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;")) + private CompletableFuture skipWorkerIfPossible(CompletableFuture inputFuture, Function function, Executor executor, ChunkHolder holder) { + Executor targetExecutor = (runnable) -> { + if(((IPaperChunkHolder)holder).mfix$canAdvanceStatus()) { this.mainInvokingExecutor.execute(runnable); return; } executor.execute(runnable); }; + return inputFuture.thenComposeAsync(function, targetExecutor); } }