Merge 1.19.2 into 1.19.4

This commit is contained in:
embeddedt 2023-07-26 22:03:10 -04:00
commit f1fa3a4c9c
No known key found for this signature in database
GPG Key ID: A69433EC199B5613

View File

@ -2,12 +2,15 @@ package org.embeddedt.modernfix.forge.mixin.bugfix.cofh_core_crash;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.annotation.RequiresMod;
import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Coerce; import org.spongepowered.asm.mixin.injection.Coerce;
import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.Redirect;
import java.util.function.BooleanSupplier; import java.util.function.Supplier;
/** /**
* Fix getOrCreateFlag accessing the FLAGS map without synchronization by wrapping all calls to it * Fix getOrCreateFlag accessing the FLAGS map without synchronization by wrapping all calls to it
@ -18,15 +21,15 @@ import java.util.function.BooleanSupplier;
@RequiresMod("cofh_core") @RequiresMod("cofh_core")
public class FlagManagerMixin { public class FlagManagerMixin {
@Shadow @Final @Shadow @Final
private static Object2ObjectOpenHashMap<String, BooleanSupplier> FLAGS; private static Object2ObjectOpenHashMap<String, Supplier<Boolean>> FLAGS;
@Shadow @Shadow
private BooleanSupplier getOrCreateFlag(String flag) { private Supplier<Boolean> getOrCreateFlag(String flag) {
throw new AssertionError(); throw new AssertionError();
} }
@Redirect(method = "*", at = @At(value = "INVOKE", target = "getOrCreateFlag"), require = 0) @Redirect(method = "*", at = @At(value = "INVOKE", target = "getOrCreateFlag"), require = 0)
private BooleanSupplier getFlag(@Coerce Object flagHandler, String flag) { private Supplier<Boolean> getFlag(@Coerce Object flagHandler, String flag) {
if(flagHandler != this) if(flagHandler != this)
throw new AssertionError("Redirect targeted bad getOrCreateFlag invocation"); throw new AssertionError("Redirect targeted bad getOrCreateFlag invocation");
synchronized (FLAGS) { synchronized (FLAGS) {