Skip to content

Commit 7e699c2

Browse files
committed
update to 1.21.11
1 parent 121334a commit 7e699c2

14 files changed

Lines changed: 73 additions & 103 deletions

File tree

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import net.fabricmc.loom.task.RemapJarTask
44
import java.net.URI
55

66
plugins {
7-
id("fabric-loom") version "1.12.0-alpha.25"
7+
id("fabric-loom") version "1.13.3"
88
id("io.github.ladysnake.chenille") version "0.15.0"
99
id("org.cadixdev.licenser") version "0.6.1"
1010
}

cardinal-components-entity/src/main/java/org/ladysnake/cca/api/v3/entity/RespawnCopyStrategy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import net.minecraft.storage.NbtWriteView;
2929
import net.minecraft.util.ErrorReporter;
3030
import net.minecraft.util.Identifier;
31-
import net.minecraft.world.GameRules;
31+
import net.minecraft.world.rule.GameRules;
3232
import org.ladysnake.cca.api.v3.component.Component;
3333
import org.ladysnake.cca.api.v3.component.ComponentKey;
3434
import org.ladysnake.cca.api.v3.component.CopyableComponent;

cardinal-components-entity/src/main/java/org/ladysnake/cca/api/v3/entity/RespawnableComponent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import net.minecraft.storage.NbtReadView;
2727
import net.minecraft.storage.NbtWriteView;
2828
import net.minecraft.util.ErrorReporter;
29-
import net.minecraft.world.GameRules;
29+
import net.minecraft.world.rule.GameRules;
3030
import org.jetbrains.annotations.ApiStatus;
3131
import org.jetbrains.annotations.Contract;
3232
import org.ladysnake.cca.api.v3.component.Component;

cardinal-components-entity/src/main/java/org/ladysnake/cca/internal/entity/CardinalComponentsEntity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
import net.minecraft.registry.RegistryWrapper;
4040
import net.minecraft.server.network.ServerPlayerEntity;
4141
import net.minecraft.util.Identifier;
42-
import net.minecraft.world.GameRules;
42+
import net.minecraft.world.rule.GameRules;
4343
import org.ladysnake.cca.api.v3.component.Component;
4444
import org.ladysnake.cca.api.v3.component.ComponentKey;
4545
import org.ladysnake.cca.api.v3.component.ComponentProvider;
@@ -119,7 +119,7 @@ private static void copyData(LivingEntity original, LivingEntity clone, EntityCo
119119
}
120120

121121
private static void copyData(ServerPlayerEntity original, ServerPlayerEntity clone, boolean lossless) {
122-
boolean keepInventory = original.getEntityWorld().getGameRules().getBoolean(GameRules.KEEP_INVENTORY) || clone.isSpectator();
122+
boolean keepInventory = original.getEntityWorld().getGameRules().getValue(GameRules.KEEP_INVENTORY) || clone.isSpectator();
123123
Set<ComponentKey<?>> keys = ((ComponentProvider) original).getComponentContainer().keys();
124124

125125
for (ComponentKey<?> key : keys) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
@Mixin(ScoreboardState.Packed.class)
4444
public abstract class MixinPackedScoreboardState implements CcaPackedState {
4545
@Unique
46-
private Optional<NbtCompound> cca$serializedComponents;
46+
private Optional<NbtCompound> cca$serializedComponents = Optional.empty();
4747

4848
@Override
4949
public @Nullable NbtCompound cca$getSerializedComponents() {

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

Lines changed: 0 additions & 66 deletions
This file was deleted.

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

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import net.minecraft.nbt.NbtCompound;
2727
import net.minecraft.network.RegistryByteBuf;
2828
import net.minecraft.scoreboard.Scoreboard;
29+
import net.minecraft.scoreboard.ScoreboardState;
2930
import net.minecraft.scoreboard.ServerScoreboard;
3031
import net.minecraft.scoreboard.Team;
3132
import net.minecraft.server.MinecraftServer;
@@ -34,6 +35,7 @@
3435
import net.minecraft.util.ErrorReporter;
3536
import org.ladysnake.cca.api.v3.component.ComponentKey;
3637
import org.ladysnake.cca.api.v3.component.ComponentProvider;
38+
import org.ladysnake.cca.api.v3.component.TransientComponent;
3739
import org.ladysnake.cca.api.v3.component.sync.AutoSyncedComponent;
3840
import org.ladysnake.cca.api.v3.scoreboard.TeamAddCallback;
3941
import org.ladysnake.cca.internal.base.ComponentUpdatePayload;
@@ -48,6 +50,7 @@
4850
import org.spongepowered.asm.mixin.Unique;
4951
import org.spongepowered.asm.mixin.injection.At;
5052
import org.spongepowered.asm.mixin.injection.Inject;
53+
import org.spongepowered.asm.mixin.injection.ModifyArg;
5154
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
5255

5356
import java.util.List;
@@ -62,6 +65,9 @@ public abstract class MixinServerScoreboard extends MixinScoreboard {
6265
@Final
6366
private MinecraftServer server;
6467

68+
@Shadow
69+
private boolean dirty;
70+
6571
@Override
6672
protected Team unpackComponents(Team team, CcaPackedState packedTeam) {
6773
NbtCompound nbt = packedTeam.cca$getSerializedComponents();
@@ -103,4 +109,35 @@ private void initComponents(CallbackInfo ci) {
103109
private void syncTeamComponents(Team team, CallbackInfo ci) {
104110
TeamAddCallback.EVENT.invoker().onTeamAdded(team);
105111
}
112+
113+
@Inject(method = "writeTo", at = @At("HEAD"))
114+
private void setDirty(ScoreboardState state, CallbackInfo ci) {
115+
if (components.hasComponents()) {
116+
for (var component : components.keys()) {
117+
if (!(component instanceof TransientComponent)) {
118+
dirty = true;
119+
return;
120+
}
121+
}
122+
}
123+
}
124+
125+
@ModifyArg(method = "writeTo", at = @At(value = "INVOKE", target = "Lnet/minecraft/scoreboard/ScoreboardState;set(Lnet/minecraft/scoreboard/ScoreboardState$Packed;)V"))
126+
private ScoreboardState.Packed writeComponents(ScoreboardState.Packed packed) {
127+
((CcaPackedState) (Object) packed).cca$setSerializedComponents(
128+
components.toOrphanTag(server.getRegistryManager())
129+
);
130+
131+
return packed;
132+
}
133+
134+
@Inject(method = "read", at = @At("RETURN"))
135+
private void readComponents(ScoreboardState.Packed packed, CallbackInfo ci) {
136+
NbtCompound nbt = ((CcaPackedState) (Object) packed).cca$getSerializedComponents();
137+
if (nbt != null) {
138+
try (var errorReporter = new ErrorReporter.Logging(ComponentsInternals.LOGGER)) {
139+
components.readOrphanData(NbtReadView.create(errorReporter, server.getRegistryManager(), nbt));
140+
}
141+
}
142+
}
106143
}

cardinal-components-scoreboard/src/main/resources/mixins.cardinal_components_scoreboard.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
"MixinPersistentState",
1111
"MixinPlayerManager",
1212
"MixinScoreboard",
13-
"MixinScoreboardState",
1413
"MixinServerScoreboard",
1514
"MixinTeam",
1615
"ServerScoreboardAccessor",

cardinal-components-scoreboard/src/testmod/java/org/ladysnake/cca/test/scoreboard/CcaScoreboardTestSuite.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,12 @@
2222
*/
2323
package org.ladysnake.cca.test.scoreboard;
2424

25-
import com.mojang.serialization.Codec;
2625
import net.fabricmc.fabric.api.gametest.v1.GameTest;
27-
import net.minecraft.nbt.NbtOps;
2826
import net.minecraft.scoreboard.ScoreboardState;
2927
import net.minecraft.scoreboard.ServerScoreboard;
3028
import net.minecraft.scoreboard.Team;
3129
import net.minecraft.test.TestContext;
3230
import net.minecraft.text.Text;
33-
import net.minecraft.world.PersistentState;
3431
import org.ladysnake.cca.test.base.CardinalGameTest;
3532
import org.ladysnake.cca.test.base.LoadAwareTestComponent;
3633
import org.ladysnake.cca.test.base.Vita;
@@ -54,19 +51,16 @@ public void componentSerializesCorrectly(TestContext ctx) {
5451
scoreboard.getComponent(Vita.KEY).setVitality(42);
5552
Team testTeam = scoreboard.addTeam(TEST_TEAM_NAME);
5653
testTeam.getComponent(Vita.KEY).setVitality(420);
57-
PersistentState.Context persistentStateCtx = new PersistentState.Context(ctx.getWorld());
58-
Codec<ScoreboardState> codec = ServerScoreboard.STATE_TYPE.codec().apply(persistentStateCtx);
59-
var serializationResult = codec.encodeStart(NbtOps.INSTANCE, ServerScoreboard.STATE_TYPE.constructor().apply(persistentStateCtx));
60-
ctx.assertTrue("Serialization should succeed", serializationResult.isSuccess());
54+
ScoreboardState state = ScoreboardState.TYPE.constructor().get();
55+
scoreboard.writeTo(state);
6156
scoreboard.getComponent(Vita.KEY).setVitality(0);
6257
scoreboard.removeTeam(testTeam);
6358
ctx.assertEquals(
6459
0, scoreboard.getComponent(Vita.KEY).getVitality(),
6560
Text.literal("reset vita")
6661
);
6762
ctx.assertTrue("Reset team should be null", scoreboard.getTeam(TEST_TEAM_NAME) == null);
68-
var deserializationResult = codec.decode(NbtOps.INSTANCE, serializationResult.getOrThrow());
69-
ctx.assertTrue("Deserialization should succeed", deserializationResult.isSuccess());
63+
scoreboard.read(state.getPackedState());
7064
ctx.assertEquals(
7165
42, scoreboard.getComponent(Vita.KEY).getVitality(),
7266
Text.literal("deserialized vita")

cardinal-components-world/src/main/java/org/ladysnake/cca/internal/world/ComponentPersistentState.java

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,31 +25,28 @@
2525
import net.minecraft.datafixer.DataFixTypes;
2626
import net.minecraft.nbt.NbtCompound;
2727
import net.minecraft.registry.RegistryWrapper;
28-
import net.minecraft.server.world.ServerWorld;
2928
import net.minecraft.storage.NbtReadView;
3029
import net.minecraft.util.ErrorReporter;
3130
import net.minecraft.world.PersistentState;
3231
import net.minecraft.world.PersistentStateType;
3332
import org.ladysnake.cca.api.v3.component.ComponentContainer;
34-
import org.ladysnake.cca.api.v3.component.ComponentProvider;
3533
import org.ladysnake.cca.internal.base.AbstractComponentContainer;
3634
import org.ladysnake.cca.internal.base.ComponentsInternals;
3735

3836
public class ComponentPersistentState extends PersistentState {
3937
public static final ThreadLocal<Boolean> LOADING = ThreadLocal.withInitial(() -> false);
4038
private static final String PERSISTENT_STATE_KEY = "cardinal_world_components";
41-
public static final PersistentStateType<ComponentPersistentState> STATE_TYPE = new PersistentStateType<>(
42-
PERSISTENT_STATE_KEY,
43-
(ctx) -> new ComponentPersistentState(((ComponentProvider) ctx.getWorldOrThrow()).getComponentContainer()),
44-
(ctx) -> {
45-
ServerWorld world = ctx.getWorldOrThrow();
46-
return NbtCompound.CODEC.xmap(
47-
nbt -> fromNbt(((ComponentProvider) world).getComponentContainer(), nbt, world.getRegistryManager()),
48-
state -> state.writeNbt(new NbtCompound(), world.getRegistryManager())
49-
);
50-
},
51-
DataFixTypes.LEVEL
52-
);
39+
public static PersistentStateType<ComponentPersistentState> stateType(ComponentContainer components, RegistryWrapper.WrapperLookup registries) {
40+
return new PersistentStateType<>(
41+
PERSISTENT_STATE_KEY,
42+
() -> new ComponentPersistentState(components),
43+
NbtCompound.CODEC.xmap(
44+
nbt -> fromNbt(components, nbt, registries),
45+
state -> state.writeNbt(new NbtCompound(), registries)
46+
),
47+
DataFixTypes.LEVEL
48+
);
49+
}
5350

5451
private final ComponentContainer components;
5552

0 commit comments

Comments
 (0)