Skip to content

Commit

Permalink
Fix concurrency bugs in Mantle models
Browse files Browse the repository at this point in the history
  • Loading branch information
embeddedt committed Mar 31, 2024
1 parent 8873a05 commit ec189b5
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.embeddedt.modernfix.forge.mixin.bugfix.mantle_model_cme;

import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
import org.embeddedt.modernfix.annotation.RequiresMod;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.Shadow;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

@Pseudo
@Mixin(targets = { "slimeknights/mantle/client/model/connected/ConnectedModel$Baked" }, remap = false)
@RequiresMod("mantle")
@ClientOnlyMixin
public class ConnectedModelMixin {
@SuppressWarnings("unused")
@Shadow
@Final
@Mutable
private final Map<String, String> nameMappingCache = new ConcurrentHashMap<>();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.embeddedt.modernfix.forge.mixin.bugfix.mantle_model_cme;

import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
import org.embeddedt.modernfix.annotation.RequiresMod;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.Shadow;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

@Pseudo
@Mixin(targets = { "slimeknights/mantle/client/model/fluid/FluidTextureModel$Loader" }, remap = false)
@RequiresMod("mantle")
@ClientOnlyMixin
public class FluidTextureModelLoaderMixin {
@SuppressWarnings("unused")
@Shadow
@Final
@Mutable
private final Map<?, ?> modelCache = new ConcurrentHashMap<>();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.embeddedt.modernfix.forge.mixin.bugfix.mantle_model_cme;

import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.resources.ResourceLocation;
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
import org.embeddedt.modernfix.annotation.RequiresMod;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.Shadow;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
* Fix ConcurrentModificationException from Mantle models by making the cache thread-safe.
*/
@Pseudo
@Mixin(targets = { "slimeknights/mantle/client/model/RetexturedModel$BakedModel" }, remap = false)
@RequiresMod("mantle")
@ClientOnlyMixin
public class RetexturedModelBakedMixin {
@SuppressWarnings("unused")
@Shadow
@Final
@Mutable
private final Map<ResourceLocation, BakedModel> cache = new ConcurrentHashMap<>();
}

0 comments on commit ec189b5

Please sign in to comment.