Skip to content

Commit 3af6af1

Browse files
committed
Fix crash in scoreboard module, closes #199
1 parent c3bb744 commit 3af6af1

File tree

4 files changed

+19
-11
lines changed

4 files changed

+19
-11
lines changed

cardinal-components-scoreboard/src/main/java/org/ladysnake/cca/mixin/scoreboard/MixinPackedScoreboardState.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,32 +37,33 @@
3737
import org.spongepowered.asm.mixin.Unique;
3838
import org.spongepowered.asm.mixin.injection.At;
3939

40+
import java.util.Optional;
4041
import java.util.function.Function;
4142

4243
@Mixin(ScoreboardState.Packed.class)
4344
public abstract class MixinPackedScoreboardState implements CcaPackedState {
4445
@Unique
45-
private @Nullable NbtCompound cca$serializedComponents;
46+
private Optional<NbtCompound> cca$serializedComponents;
4647

4748
@Override
4849
public @Nullable NbtCompound cca$getSerializedComponents() {
49-
return this.cca$serializedComponents;
50+
return this.cca$serializedComponents.orElse(null);
5051
}
5152

5253
@Override
5354
public void cca$setSerializedComponents(@Nullable NbtCompound nbt) {
54-
this.cca$serializedComponents = nbt;
55+
this.cca$serializedComponents = Optional.ofNullable(nbt);
5556
}
5657

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))
5859
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) {
5960
Codec<ScoreboardState.Packed> baseCodec = original.call(builder);
6061
MapCodec<ScoreboardState.Packed> baseMapCodec = baseCodec instanceof MapCodec.MapCodecCodec<ScoreboardState.Packed>(
6162
MapCodec<ScoreboardState.Packed> codec
6263
) ? codec : MapCodec.assumeMapUnsafe(baseCodec);
6364
return RecordCodecBuilder.create(instance -> instance.group(
6465
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)
6667
).apply(instance, (packed, nbtCompound) -> {
6768
((MixinPackedScoreboardState) (Object) packed).cca$serializedComponents = nbtCompound;
6869
return packed;

cardinal-components-scoreboard/src/main/java/org/ladysnake/cca/mixin/scoreboard/MixinPackedTeam.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,32 +37,33 @@
3737
import org.spongepowered.asm.mixin.Unique;
3838
import org.spongepowered.asm.mixin.injection.At;
3939

40+
import java.util.Optional;
4041
import java.util.function.Function;
4142

4243
@Mixin(Team.Packed.class)
4344
public abstract class MixinPackedTeam implements CcaPackedState {
4445
@Unique
45-
private @Nullable NbtCompound cca$serializedComponents;
46+
private Optional<NbtCompound> cca$serializedComponents;
4647

4748
@Override
4849
public @Nullable NbtCompound cca$getSerializedComponents() {
49-
return this.cca$serializedComponents;
50+
return this.cca$serializedComponents.orElse(null);
5051
}
5152

5253
@Override
5354
public void cca$setSerializedComponents(@Nullable NbtCompound nbt) {
54-
this.cca$serializedComponents = nbt;
55+
this.cca$serializedComponents = Optional.ofNullable(nbt);
5556
}
5657

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))
5859
private static Codec<Team.Packed> wrapCodec(Function<RecordCodecBuilder.Instance<Team.Packed>, ? extends App<RecordCodecBuilder.Mu<Team.Packed>, Team.Packed>> builder, Operation<Codec<Team.Packed>> original) {
5960
Codec<Team.Packed> baseCodec = original.call(builder);
6061
MapCodec<Team.Packed> baseMapCodec = baseCodec instanceof MapCodec.MapCodecCodec<Team.Packed>(
6162
MapCodec<Team.Packed> codec
6263
) ? codec : MapCodec.assumeMapUnsafe(baseCodec);
6364
return RecordCodecBuilder.create(instance -> instance.group(
6465
baseMapCodec.forGetter(state -> state),
65-
NbtCompound.CODEC.fieldOf(AbstractComponentContainer.NBT_KEY).forGetter(state -> ((MixinPackedTeam) (Object) state).cca$serializedComponents)
66+
NbtCompound.CODEC.optionalFieldOf(AbstractComponentContainer.NBT_KEY).forGetter(state -> ((MixinPackedTeam) (Object) state).cca$serializedComponents)
6667
).apply(instance, (packed, nbtCompound) -> {
6768
((MixinPackedTeam) (Object) packed).cca$serializedComponents = nbtCompound;
6869
return packed;

changelog.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
------------------------------------------------------
2+
Version 6.3.1
3+
------------------------------------------------------
4+
**Fixes**
5+
- Fixed crash in scoreboard module when no mod saved any data using it
6+
17
------------------------------------------------------
28
Version 6.3.0
39
------------------------------------------------------

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ elmendorf_version=0.15.0
1515
immersive_portals_version=v6.0.3-mc1.21.1
1616

1717
#Publishing
18-
mod_version = 6.3.0
18+
mod_version = 6.3.1
1919
curseforge_id = 318449
2020
modrinth_id = K01OU20C
2121
curseforge_versions = 1.21.5

0 commit comments

Comments
 (0)