Merge 1.19.2 into 1.19.4
This commit is contained in:
commit
f1fa3a4c9c
|
|
@ -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) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user