Replace default backing map of NBT tags in more compatible way

Related: #111
This commit is contained in:
embeddedt 2023-05-27 10:12:05 -04:00
parent b5d62b4bbb
commit c4a50bb6e2
No known key found for this signature in database
GPG Key ID: A69433EC199B5613

View File

@ -6,27 +6,24 @@ import org.embeddedt.modernfix.util.CanonizingStringMap;
import org.spongepowered.asm.mixin.*;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.ModifyArg;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.Map;
@Mixin(CompoundTag.class)
public class CompoundTagMixin {
@Shadow @Final @Mutable
@Shadow @Final
private Map<String, Tag> tags;
/**
* Ensure that the backing map is always a CanonizingStringMap.
* Ensure that the default backing map is a CanonizingStringMap.
*/
@Redirect(method = "<init>(Ljava/util/Map;)V", at = @At(value = "FIELD", target = "Lnet/minecraft/nbt/CompoundTag;tags:Ljava/util/Map;", ordinal = 0))
private void replaceTagMap(CompoundTag tag, Map<String, Tag> incomingMap) {
if(incomingMap instanceof CanonizingStringMap)
this.tags = incomingMap;
else {
this.tags = new CanonizingStringMap<>();
this.tags.putAll(incomingMap);
}
@ModifyArg(method = "<init>()V", at = @At(value = "INVOKE", target = "Lnet/minecraft/nbt/CompoundTag;<init>(Ljava/util/Map;)V"), index = 0)
private static Map<String, Tag> useCanonizingStringMap(Map<String, Tag> incoming) {
CanonizingStringMap<Tag> newMap = new CanonizingStringMap<>();
newMap.putAll(incoming);
return newMap;
}
/**