Skip to content

Commit 9b3bf90

Browse files
committed
Only use the element itself when stringifying a MapLike
1 parent 6b2852f commit 9b3bf90

File tree

5 files changed

+94
-8
lines changed

5 files changed

+94
-8
lines changed

src/main/java/net/errorcraft/codecium/mixin/minecraft/nbt/NbtOpsExtender.java

+20
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package net.errorcraft.codecium.mixin.minecraft.nbt;
22

33
import com.llamalad7.mixinextras.sugar.Local;
4+
import net.minecraft.nbt.NbtCompound;
45
import net.minecraft.nbt.NbtElement;
56
import net.minecraft.nbt.NbtOps;
7+
import org.spongepowered.asm.mixin.Final;
68
import org.spongepowered.asm.mixin.Mixin;
9+
import org.spongepowered.asm.mixin.Overwrite;
10+
import org.spongepowered.asm.mixin.Shadow;
711
import org.spongepowered.asm.mixin.injection.At;
812
import org.spongepowered.asm.mixin.injection.ModifyArg;
913

@@ -58,4 +62,20 @@ private Supplier<String> notAMapUseBetterErrorMessage(Supplier<String> message,
5862
private Supplier<String> notAListUseBetterErrorMessage(Supplier<String> message, @Local(argsOnly = true) final NbtElement input) {
5963
return () -> "Element is not a list: " + input;
6064
}
65+
66+
@Mixin(targets = "net/minecraft/nbt/NbtOps$1")
67+
public static class MapLikeExtender<T> {
68+
@Shadow
69+
@Final
70+
NbtCompound field_25129;
71+
72+
/**
73+
* @author ErrorCraft
74+
* @reason Uses the element itself instead of a wrapped element.
75+
*/
76+
@Overwrite
77+
public String toString() {
78+
return this.field_25129.toString();
79+
}
80+
}
6181
}

src/main/java/net/errorcraft/codecium/mixin/mojang/serialization/JavaOpsExtender.java

+24-8
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,14 @@
22

33
import com.llamalad7.mixinextras.sugar.Local;
44
import com.mojang.serialization.JavaOps;
5+
import org.spongepowered.asm.mixin.Final;
56
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.Overwrite;
8+
import org.spongepowered.asm.mixin.Shadow;
69
import org.spongepowered.asm.mixin.injection.At;
710
import org.spongepowered.asm.mixin.injection.ModifyArg;
811

12+
import java.util.Map;
913
import java.util.function.Supplier;
1014

1115
@Mixin(value = JavaOps.class, remap = false)
@@ -15,8 +19,7 @@ public class JavaOpsExtender {
1519
at = @At(
1620
value = "INVOKE",
1721
target = "Lcom/mojang/serialization/DataResult;error(Ljava/util/function/Supplier;)Lcom/mojang/serialization/DataResult;"
18-
),
19-
remap = false
22+
)
2023
)
2124
private Supplier<String> notANumberUseBetterErrorMessage(Supplier<String> message, @Local(argsOnly = true) final Object input) {
2225
return () -> "Element is not a number: " + input;
@@ -27,8 +30,7 @@ private Supplier<String> notANumberUseBetterErrorMessage(Supplier<String> messag
2730
at = @At(
2831
value = "INVOKE",
2932
target = "Lcom/mojang/serialization/DataResult;error(Ljava/util/function/Supplier;)Lcom/mojang/serialization/DataResult;"
30-
),
31-
remap = false
33+
)
3234
)
3335
private Supplier<String> notABooleanUseBetterErrorMessage(Supplier<String> message, @Local(argsOnly = true) final Object input) {
3436
return () -> "Element is not a boolean: " + input;
@@ -39,8 +41,7 @@ private Supplier<String> notABooleanUseBetterErrorMessage(Supplier<String> messa
3941
at = @At(
4042
value = "INVOKE",
4143
target = "Lcom/mojang/serialization/DataResult;error(Ljava/util/function/Supplier;)Lcom/mojang/serialization/DataResult;"
42-
),
43-
remap = false
44+
)
4445
)
4546
private Supplier<String> notAStringUseBetterErrorMessage(Supplier<String> message, @Local(argsOnly = true) final Object input) {
4647
return () -> "Element is not a string: " + input;
@@ -51,8 +52,7 @@ private Supplier<String> notAStringUseBetterErrorMessage(Supplier<String> messag
5152
at = @At(
5253
value = "INVOKE",
5354
target = "Lcom/mojang/serialization/DataResult;error(Ljava/util/function/Supplier;)Lcom/mojang/serialization/DataResult;"
54-
),
55-
remap = false
55+
)
5656
)
5757
private Supplier<String> notAMapUseBetterErrorMessage(Supplier<String> message, @Local(argsOnly = true, ordinal = 0) final Object input) {
5858
return () -> "Element is not a map: " + input;
@@ -68,4 +68,20 @@ private Supplier<String> notAMapUseBetterErrorMessage(Supplier<String> message,
6868
private Supplier<String> notAListUseBetterErrorMessage(Supplier<String> message, @Local(argsOnly = true, ordinal = 0) final Object input) {
6969
return () -> "Element is not a list: " + input;
7070
}
71+
72+
@Mixin(targets = "com/mojang/serialization/JavaOps$1")
73+
public static class MapLikeExtender<T> {
74+
@Shadow
75+
@Final
76+
Map<T, T> val$map;
77+
78+
/**
79+
* @author ErrorCraft
80+
* @reason Uses the element itself instead of a wrapped element.
81+
*/
82+
@Overwrite
83+
public String toString() {
84+
return this.val$map.toString();
85+
}
86+
}
7187
}

src/main/java/net/errorcraft/codecium/mixin/mojang/serialization/JsonOpsExtender.java

+20
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package net.errorcraft.codecium.mixin.mojang.serialization;
22

33
import com.google.gson.JsonElement;
4+
import com.google.gson.JsonObject;
45
import com.llamalad7.mixinextras.sugar.Local;
56
import com.mojang.serialization.JsonOps;
67
import net.errorcraft.codecium.util.codec.ExceptionUtil;
8+
import org.spongepowered.asm.mixin.Final;
79
import org.spongepowered.asm.mixin.Mixin;
10+
import org.spongepowered.asm.mixin.Overwrite;
11+
import org.spongepowered.asm.mixin.Shadow;
812
import org.spongepowered.asm.mixin.injection.At;
913
import org.spongepowered.asm.mixin.injection.ModifyArg;
1014

@@ -79,4 +83,20 @@ private Supplier<String> notAMapUseBetterErrorMessage(Supplier<String> message,
7983
private Supplier<String> notAListUseBetterErrorMessage(Supplier<String> message, @Local(argsOnly = true) final JsonElement input) {
8084
return () -> "Element is not a list: " + input;
8185
}
86+
87+
@Mixin(targets = "com/mojang/serialization/JsonOps$1")
88+
public static class MapLikeExtender<T> {
89+
@Shadow
90+
@Final
91+
JsonObject val$object;
92+
93+
/**
94+
* @author ErrorCraft
95+
* @reason Uses the element itself instead of a wrapped element.
96+
*/
97+
@Overwrite
98+
public String toString() {
99+
return this.val$object.toString();
100+
}
101+
}
82102
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package net.errorcraft.codecium.mixin.mojang.serialization;
2+
3+
import org.spongepowered.asm.mixin.Final;
4+
import org.spongepowered.asm.mixin.Mixin;
5+
import org.spongepowered.asm.mixin.Overwrite;
6+
import org.spongepowered.asm.mixin.Shadow;
7+
8+
import java.util.Map;
9+
10+
public interface MapLikeExtender {
11+
@Mixin(targets = "com/mojang/serialization/MapLike$1", remap = false)
12+
class ForMapExtender<T> {
13+
@Shadow
14+
@Final
15+
Map<T, T> val$map;
16+
17+
/**
18+
* @author ErrorCraft
19+
* @reason Uses the element itself instead of a wrapped element.
20+
*/
21+
@Overwrite
22+
public String toString() {
23+
return this.val$map.toString();
24+
}
25+
}
26+
}

src/main/resources/codecium.mixins.json

+4
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,15 @@
44
"compatibilityLevel": "JAVA_21",
55
"mixins": [
66
"minecraft.nbt.NbtOpsExtender",
7+
"minecraft.nbt.NbtOpsExtender$MapLikeExtender",
78
"minecraft.util.dynamic.CodecsExtender",
89
"mojang.serialization.CodecExtender",
910
"mojang.serialization.DataResultExtender",
1011
"mojang.serialization.JavaOpsExtender",
12+
"mojang.serialization.JavaOpsExtender$MapLikeExtender",
1113
"mojang.serialization.JsonOpsExtender",
14+
"mojang.serialization.JsonOpsExtender$MapLikeExtender",
15+
"mojang.serialization.MapLikeExtender$ForMapExtender",
1216
"mojang.serialization.codecs.EitherCodecExtender",
1317
"mojang.serialization.codecs.FieldDecoderExtender",
1418
"mojang.serialization.codecs.OptionalFieldCodecExtender",

0 commit comments

Comments
 (0)