Make BlockColors thread-safe

Workaround for issues like https://github.com/vadis365/Mob-Grinding-Utils/issues/240,
as too many mods do this
This commit is contained in:
embeddedt 2023-01-07 19:03:47 -05:00
parent 24990ba089
commit 572cbaf9bd
No known key found for this signature in database
GPG Key ID: A69433EC199B5613
3 changed files with 29 additions and 1 deletions

View File

@ -32,6 +32,7 @@ public class ModernFixEarlyConfig {
this.addMixinRule("perf.preload_block_classes", true);
this.addMixinRule("perf.parallel_potentially_unsafe", false);
this.addMixinRule("perf.parallel_blockstate_cache_rebuild", true);
this.addMixinRule("safety", true);
/* Mod compat */
if(FMLLoader.getLoadingModList().getModFileById("smoothboot") != null) {

View File

@ -0,0 +1,26 @@
package org.embeddedt.modernfix.mixin.safety;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.color.BlockColors;
import net.minecraft.client.renderer.color.IBlockColor;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
@Mixin(value = BlockColors.class, priority = 700)
public class BlockColorsMixin {
private Lock mapLock = new ReentrantLock();
@Inject(method = "register", at = @At("HEAD"))
private void lockMapBeforeAccess(IBlockColor pBlockColor, Block[] pBlocks, CallbackInfo ci) {
mapLock.lock();
}
@Inject(method = "register", at = @At("TAIL"))
private void unlockMap(IBlockColor pBlockColor, Block[] pBlocks, CallbackInfo ci) {
mapLock.unlock();
}
}

View File

@ -38,7 +38,8 @@
"perf.async_jei.JeiStarterMixin",
"perf.async_jei.PluginCallerMixin",
"perf.async_jei.RecipeManagerInternalMixin",
"perf.thread_priorities.IntegratedServerMixin"
"perf.thread_priorities.IntegratedServerMixin",
"safety.BlockColorsMixin"
],
"injectors": {
"defaultRequire": 1