Skip to content

Commit 6b2852f

Browse files
committed
Improve the error message for missing fields
1 parent edbc5c9 commit 6b2852f

2 files changed

Lines changed: 31 additions & 0 deletions

File tree

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package net.errorcraft.codecium.mixin.mojang.serialization.codecs;
2+
3+
import com.llamalad7.mixinextras.sugar.Local;
4+
import com.mojang.serialization.MapLike;
5+
import com.mojang.serialization.codecs.FieldDecoder;
6+
import org.spongepowered.asm.mixin.Final;
7+
import org.spongepowered.asm.mixin.Mixin;
8+
import org.spongepowered.asm.mixin.Shadow;
9+
import org.spongepowered.asm.mixin.injection.At;
10+
import org.spongepowered.asm.mixin.injection.ModifyArg;
11+
12+
import java.util.function.Supplier;
13+
14+
@Mixin(value = FieldDecoder.class, remap = false)
15+
public class FieldDecoderExtender {
16+
@Shadow
17+
@Final
18+
protected String name;
19+
20+
@ModifyArg(
21+
method = "decode",
22+
at = @At(
23+
value = "INVOKE",
24+
target = "Lcom/mojang/serialization/DataResult;error(Ljava/util/function/Supplier;)Lcom/mojang/serialization/DataResult;"
25+
)
26+
)
27+
private <T> Supplier<String> useBetterErrorMessage(Supplier<String> message, @Local(argsOnly = true) final MapLike<T> input) {
28+
return () -> "Key '" + this.name + "' must be present in map: " + input;
29+
}
30+
}

src/main/resources/codecium.mixins.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"mojang.serialization.JavaOpsExtender",
1111
"mojang.serialization.JsonOpsExtender",
1212
"mojang.serialization.codecs.EitherCodecExtender",
13+
"mojang.serialization.codecs.FieldDecoderExtender",
1314
"mojang.serialization.codecs.OptionalFieldCodecExtender",
1415
"mojang.serialization.codecs.RecordCodecBuilderExtender$RecordMapCodecExtender"
1516
],

0 commit comments

Comments
 (0)