From c623b5421787fead6087310f248172c4c7a33e6a Mon Sep 17 00:00:00 2001 From: Pyrofab Date: Fri, 19 Apr 2024 23:16:15 +0200 Subject: [PATCH] Invert PlayerSyncPredicate#isSyncOptional --- .../cca/api/v3/component/ComponentContainer.java | 2 +- .../org/ladysnake/cca/api/v3/component/ComponentKey.java | 4 ++-- .../cca/api/v3/component/sync/PlayerSyncPredicate.java | 8 ++++---- .../ladysnake/cca/internal/base/ComponentsInternals.java | 2 +- .../java/org/ladysnake/cca/test/world/AmbientVita.java | 4 ++-- changelog.md | 1 + 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/cardinal-components-base/src/main/java/org/ladysnake/cca/api/v3/component/ComponentContainer.java b/cardinal-components-base/src/main/java/org/ladysnake/cca/api/v3/component/ComponentContainer.java index f7cbb4d9..cf27c068 100644 --- a/cardinal-components-base/src/main/java/org/ladysnake/cca/api/v3/component/ComponentContainer.java +++ b/cardinal-components-base/src/main/java/org/ladysnake/cca/api/v3/component/ComponentContainer.java @@ -94,7 +94,7 @@ public interface ComponentContainer extends NbtSerializable { * * @param component the component of which to look up the key * @return the found key, or {@code null} if the component is not part of this container - * @since 5.3.0 + * @since 6.0.0 */ @Nullable @ApiStatus.Experimental diff --git a/cardinal-components-base/src/main/java/org/ladysnake/cca/api/v3/component/ComponentKey.java b/cardinal-components-base/src/main/java/org/ladysnake/cca/api/v3/component/ComponentKey.java index 94a2efbe..b34f2918 100644 --- a/cardinal-components-base/src/main/java/org/ladysnake/cca/api/v3/component/ComponentKey.java +++ b/cardinal-components-base/src/main/java/org/ladysnake/cca/api/v3/component/ComponentKey.java @@ -201,13 +201,13 @@ public void syncWith(ServerPlayerEntity player, ComponentProvider provider, Comp if (predicate.shouldSyncWith(player)) { RegistryByteBuf buf = new RegistryByteBuf(Unpooled.buffer(), player.getServerWorld().getRegistryManager()); writer.writeSyncPacket(buf, player); - CustomPayload payload = provider.toComponentPacket(this, !predicate.isSyncOptional(), buf); + CustomPayload payload = provider.toComponentPacket(this, predicate.isRequiredOnClient(), buf); if (payload != null) { if (ServerPlayNetworking.canSend(player, payload.getId())) { ServerPlayNetworking.getSender(player).sendPacket(payload, PacketCallbacks.always(buf::release)); } else { - if (!predicate.isSyncOptional()) { + if (predicate.isRequiredOnClient()) { player.networkHandler.disconnect(Text.literal("This server requires Cardinal Components API (unhandled packet: " + payload.getId().id() + ")" + ComponentsInternals.getClientOptionalModAdvice())); } buf.release(); diff --git a/cardinal-components-base/src/main/java/org/ladysnake/cca/api/v3/component/sync/PlayerSyncPredicate.java b/cardinal-components-base/src/main/java/org/ladysnake/cca/api/v3/component/sync/PlayerSyncPredicate.java index e29e9d57..aced16e4 100644 --- a/cardinal-components-base/src/main/java/org/ladysnake/cca/api/v3/component/sync/PlayerSyncPredicate.java +++ b/cardinal-components-base/src/main/java/org/ladysnake/cca/api/v3/component/sync/PlayerSyncPredicate.java @@ -31,11 +31,11 @@ public interface PlayerSyncPredicate { boolean shouldSyncWith(ServerPlayerEntity player); /** - * If this method returns {@code true} and a client cannot handle a sync packet, the sync will be skipped. - * Otherwise, a sync update will disconnect the client. + * If this method returns {@code true} and a client cannot handle a sync packet, they will be disconnected. + * Otherwise, the sync will be skipped. */ - default boolean isSyncOptional() { - return false; + default boolean isRequiredOnClient() { + return true; } static PlayerSyncPredicate all() { diff --git a/cardinal-components-base/src/main/java/org/ladysnake/cca/internal/base/ComponentsInternals.java b/cardinal-components-base/src/main/java/org/ladysnake/cca/internal/base/ComponentsInternals.java index 31c42673..641beab1 100644 --- a/cardinal-components-base/src/main/java/org/ladysnake/cca/internal/base/ComponentsInternals.java +++ b/cardinal-components-base/src/main/java/org/ladysnake/cca/internal/base/ComponentsInternals.java @@ -96,6 +96,6 @@ public static void logDeserializationWarnings(Collection missedKeyIds) { } public static @NotNull String getClientOptionalModAdvice() { - return FabricLoader.getInstance().isDevelopmentEnvironment() ? "\n§eDEV ADVICE: If your mod is supposed to be client-optional, try overriding isSyncOptional() in your component." : ""; + return FabricLoader.getInstance().isDevelopmentEnvironment() ? "\n§eDEV ADVICE: If your mod is supposed to be client-optional, try overriding isRequiredOnClient() in your component." : ""; } } diff --git a/cardinal-components-world/src/testmod/java/org/ladysnake/cca/test/world/AmbientVita.java b/cardinal-components-world/src/testmod/java/org/ladysnake/cca/test/world/AmbientVita.java index a4176e31..9a7a5804 100644 --- a/cardinal-components-world/src/testmod/java/org/ladysnake/cca/test/world/AmbientVita.java +++ b/cardinal-components-world/src/testmod/java/org/ladysnake/cca/test/world/AmbientVita.java @@ -77,8 +77,8 @@ public WorldVita(World world) { } @Override - public boolean isSyncOptional() { - return true; + public boolean isRequiredOnClient() { + return false; } @Override diff --git a/changelog.md b/changelog.md index 481ebf80..598c42b8 100644 --- a/changelog.md +++ b/changelog.md @@ -7,6 +7,7 @@ Updated to 1.20.5 This update introduces multiple breaking changes - a migration guide is available on [the Ladysnake website](https://ladysnake.org/wiki/cardinal-components-api/upgrade-instructions/CCA-6-changes). **Additions** +- Added `C2SSelfMessagingComponent`, a new experimental utility interface to simplify client-to-server messaging on player components - Added `WorldComponentRegistry#registerFor` methods, allowing for dimension-specific world components - Scoreboard and team components now support client ticking