Use WrapOperation

This commit is contained in:
HaHaWTH 2024-10-22 02:14:35 +08:00
parent c7a2205cb2
commit 37b756c99e

View File

@ -1,6 +1,7 @@
package org.embeddedt.modernfix.common.mixin.perf.fix_loop_spin_waiting;
import com.llamalad7.mixinextras.injector.WrapWithCondition;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import net.minecraft.Util;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.thread.ReentrantBlockableEventLoop;
@ -20,14 +21,14 @@ public abstract class MinecraftServerMixin {
@Unique
private boolean mfix$isWaitingForNextTick = false;
@WrapWithCondition(
@WrapOperation(
method = "waitUntilNextTick",
at = @At(value = "INVOKE", target = "Lnet/minecraft/server/MinecraftServer;managedBlock(Ljava/util/function/BooleanSupplier;)V")
)
private boolean manageBlockWithCondition(MinecraftServer instance, BooleanSupplier booleanSupplier) {
private void managedBlock(MinecraftServer instance, BooleanSupplier isDone, Operation<Void> original) {
try {
this.mfix$isWaitingForNextTick = true;
return true;
original.call(instance, isDone);
} finally {
this.mfix$isWaitingForNextTick = false;
}