|
37 | 37 | import org.spongepowered.asm.mixin.Unique; |
38 | 38 | import org.spongepowered.asm.mixin.injection.At; |
39 | 39 |
|
| 40 | +import java.util.Optional; |
40 | 41 | import java.util.function.Function; |
41 | 42 |
|
42 | 43 | @Mixin(ScoreboardState.Packed.class) |
43 | 44 | public abstract class MixinPackedScoreboardState implements CcaPackedState { |
44 | 45 | @Unique |
45 | | - private @Nullable NbtCompound cca$serializedComponents; |
| 46 | + private Optional<NbtCompound> cca$serializedComponents; |
46 | 47 |
|
47 | 48 | @Override |
48 | 49 | public @Nullable NbtCompound cca$getSerializedComponents() { |
49 | | - return this.cca$serializedComponents; |
| 50 | + return this.cca$serializedComponents.orElse(null); |
50 | 51 | } |
51 | 52 |
|
52 | 53 | @Override |
53 | 54 | public void cca$setSerializedComponents(@Nullable NbtCompound nbt) { |
54 | | - this.cca$serializedComponents = nbt; |
| 55 | + this.cca$serializedComponents = Optional.ofNullable(nbt); |
55 | 56 | } |
56 | 57 |
|
57 | | - @WrapOperation(method = "<clinit>", at = @At(value = "INVOKE", target = "Lcom/mojang/serialization/codecs/RecordCodecBuilder;create(Ljava/util/function/Function;)Lcom/mojang/serialization/Codec;")) |
| 58 | + @WrapOperation(method = "<clinit>", at = @At(value = "INVOKE", target = "Lcom/mojang/serialization/codecs/RecordCodecBuilder;create(Ljava/util/function/Function;)Lcom/mojang/serialization/Codec;", remap = false)) |
58 | 59 | private static Codec<ScoreboardState.Packed> wrapCodec(Function<RecordCodecBuilder.Instance<ScoreboardState.Packed>, ? extends App<RecordCodecBuilder.Mu<ScoreboardState.Packed>, ScoreboardState.Packed>> builder, Operation<Codec<ScoreboardState.Packed>> original) { |
59 | 60 | Codec<ScoreboardState.Packed> baseCodec = original.call(builder); |
60 | 61 | MapCodec<ScoreboardState.Packed> baseMapCodec = baseCodec instanceof MapCodec.MapCodecCodec<ScoreboardState.Packed>( |
61 | 62 | MapCodec<ScoreboardState.Packed> codec |
62 | 63 | ) ? codec : MapCodec.assumeMapUnsafe(baseCodec); |
63 | 64 | return RecordCodecBuilder.create(instance -> instance.group( |
64 | 65 | baseMapCodec.forGetter(state -> state), |
65 | | - NbtCompound.CODEC.fieldOf(AbstractComponentContainer.NBT_KEY).forGetter(state -> ((MixinPackedScoreboardState) (Object) state).cca$serializedComponents) |
| 66 | + NbtCompound.CODEC.optionalFieldOf(AbstractComponentContainer.NBT_KEY).forGetter(state -> ((MixinPackedScoreboardState) (Object) state).cca$serializedComponents) |
66 | 67 | ).apply(instance, (packed, nbtCompound) -> { |
67 | 68 | ((MixinPackedScoreboardState) (Object) packed).cca$serializedComponents = nbtCompound; |
68 | 69 | return packed; |
|
0 commit comments