From 2f93b27e7efa792c593d434158281055d4bbb78f Mon Sep 17 00:00:00 2001 From: fretuks Date: Wed, 20 May 2026 11:31:44 +0200 Subject: [PATCH] add skill definition sync mechanism and update protocol version --- .../client/ClientSkillEngineBridge.java | 17 +++++++++++++++++ .../events/SkillEnginePlayerEvents.java | 1 + .../skillengine/network/PacketHandler.java | 19 ++++++++++++++++++- 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/fretux/skillengine/client/ClientSkillEngineBridge.java b/src/main/java/net/fretux/skillengine/client/ClientSkillEngineBridge.java index d43dd77..ab636a9 100644 --- a/src/main/java/net/fretux/skillengine/client/ClientSkillEngineBridge.java +++ b/src/main/java/net/fretux/skillengine/client/ClientSkillEngineBridge.java @@ -1,5 +1,9 @@ package net.fretux.skillengine.client; +import net.fretux.skillengine.skilltree.AbilityNode; +import net.fretux.skillengine.skilltree.AbilityNodeRegistry; +import net.fretux.skillengine.skilltree.SkillNode; +import net.fretux.skillengine.skilltree.SkillNodeRegistry; import net.minecraft.resources.ResourceLocation; public final class ClientSkillEngineBridge { @@ -37,6 +41,19 @@ public final class ClientSkillEngineBridge { SkilltreeClientState.setAbilitySlots(abilitySlots); } + public static void handleSkillDefinitionsSync(Iterable skillNodes, + Iterable abilityNodes) { + SkillNodeRegistry.clear(); + for (SkillNode node : skillNodes) { + SkillNodeRegistry.put(node); + } + + AbilityNodeRegistry.clear(); + for (AbilityNode node : abilityNodes) { + AbilityNodeRegistry.put(node); + } + } + public static void handleCooldownSync(int slot, int cooldown) { SkilltreeClientState.updateCooldown(slot, cooldown); } diff --git a/src/main/java/net/fretux/skillengine/events/SkillEnginePlayerEvents.java b/src/main/java/net/fretux/skillengine/events/SkillEnginePlayerEvents.java index 2cb12b4..2f3da46 100644 --- a/src/main/java/net/fretux/skillengine/events/SkillEnginePlayerEvents.java +++ b/src/main/java/net/fretux/skillengine/events/SkillEnginePlayerEvents.java @@ -14,6 +14,7 @@ import net.minecraftforge.network.PacketDistributor; public class SkillEnginePlayerEvents { private static void sync(ServerPlayer player) { + PacketHandler.syncSkillDefinitionsTo(player); player.getCapability(SkillEngineCapabilities.PLAYER_SKILLS).ifPresent(data -> PacketHandler.CHANNEL.send( PacketDistributor.PLAYER.with(() -> player), new ClientboundSyncSkillsPacket( diff --git a/src/main/java/net/fretux/skillengine/network/PacketHandler.java b/src/main/java/net/fretux/skillengine/network/PacketHandler.java index 4fe9b7c..1d93824 100644 --- a/src/main/java/net/fretux/skillengine/network/PacketHandler.java +++ b/src/main/java/net/fretux/skillengine/network/PacketHandler.java @@ -1,6 +1,8 @@ package net.fretux.skillengine.network; import net.fretux.skillengine.capability.SkillEngineCapabilities; +import net.fretux.skillengine.skilltree.AbilityNodeRegistry; +import net.fretux.skillengine.skilltree.SkillNodeRegistry; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraftforge.network.NetworkDirection; @@ -11,7 +13,7 @@ import net.minecraftforge.network.simple.SimpleChannel; public class PacketHandler { - private static final String PROTOCOL = "1"; + private static final String PROTOCOL = "2"; public static final SimpleChannel CHANNEL = NetworkRegistry.ChannelBuilder .named(ResourceLocation.fromNamespaceAndPath(SkillEngine.MODID, "network")) .clientAcceptedVersions(PROTOCOL::equals) @@ -37,6 +39,11 @@ public class PacketHandler { .decoder(ClientboundSyncSkillsPacket::decode) .consumerMainThread(ClientboundSyncSkillsPacket::handle) .add(); + CHANNEL.messageBuilder(ClientboundSyncSkillDefinitionsPacket.class, id++, NetworkDirection.PLAY_TO_CLIENT) + .encoder(ClientboundSyncSkillDefinitionsPacket::encode) + .decoder(ClientboundSyncSkillDefinitionsPacket::decode) + .consumerMainThread(ClientboundSyncSkillDefinitionsPacket::handle) + .add(); CHANNEL.messageBuilder(ServerboundBindAbilityPacket.class, id++, NetworkDirection.PLAY_TO_SERVER) .encoder(ServerboundBindAbilityPacket::encode) .decoder(ServerboundBindAbilityPacket::decode) @@ -66,4 +73,14 @@ public class PacketHandler { CHANNEL.send(PacketDistributor.PLAYER.with(() -> player), packet); }); } + + public static void syncSkillDefinitionsTo(ServerPlayer player) { + CHANNEL.send( + PacketDistributor.PLAYER.with(() -> player), + new ClientboundSyncSkillDefinitionsPacket( + SkillNodeRegistry.all(), + AbilityNodeRegistry.all() + ) + ); + } }