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.*;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; 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 org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.Map; import java.util.Map;
@Mixin(CompoundTag.class) @Mixin(CompoundTag.class)
public class CompoundTagMixin { public class CompoundTagMixin {
@Shadow @Final @Mutable @Shadow @Final
private Map<String, Tag> tags; 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)) @ModifyArg(method = "<init>()V", at = @At(value = "INVOKE", target = "Lnet/minecraft/nbt/CompoundTag;<init>(Ljava/util/Map;)V"), index = 0)
private void replaceTagMap(CompoundTag tag, Map<String, Tag> incomingMap) { private static Map<String, Tag> useCanonizingStringMap(Map<String, Tag> incoming) {
if(incomingMap instanceof CanonizingStringMap) CanonizingStringMap<Tag> newMap = new CanonizingStringMap<>();
this.tags = incomingMap; newMap.putAll(incoming);
else { return newMap;
this.tags = new CanonizingStringMap<>();
this.tags.putAll(incomingMap);
}
} }
/** /**