add skill definition sync mechanism and update protocol version

This commit is contained in:
2026-05-20 11:31:44 +02:00
parent f2aa1e82cc
commit 2f93b27e7e
3 changed files with 36 additions and 1 deletions
@@ -1,5 +1,9 @@
package net.fretux.skillengine.client; 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; import net.minecraft.resources.ResourceLocation;
public final class ClientSkillEngineBridge { public final class ClientSkillEngineBridge {
@@ -37,6 +41,19 @@ public final class ClientSkillEngineBridge {
SkilltreeClientState.setAbilitySlots(abilitySlots); SkilltreeClientState.setAbilitySlots(abilitySlots);
} }
public static void handleSkillDefinitionsSync(Iterable<SkillNode> skillNodes,
Iterable<AbilityNode> 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) { public static void handleCooldownSync(int slot, int cooldown) {
SkilltreeClientState.updateCooldown(slot, cooldown); SkilltreeClientState.updateCooldown(slot, cooldown);
} }
@@ -14,6 +14,7 @@ import net.minecraftforge.network.PacketDistributor;
public class SkillEnginePlayerEvents { public class SkillEnginePlayerEvents {
private static void sync(ServerPlayer player) { private static void sync(ServerPlayer player) {
PacketHandler.syncSkillDefinitionsTo(player);
player.getCapability(SkillEngineCapabilities.PLAYER_SKILLS).ifPresent(data -> PacketHandler.CHANNEL.send( player.getCapability(SkillEngineCapabilities.PLAYER_SKILLS).ifPresent(data -> PacketHandler.CHANNEL.send(
PacketDistributor.PLAYER.with(() -> player), PacketDistributor.PLAYER.with(() -> player),
new ClientboundSyncSkillsPacket( new ClientboundSyncSkillsPacket(
@@ -1,6 +1,8 @@
package net.fretux.skillengine.network; package net.fretux.skillengine.network;
import net.fretux.skillengine.capability.SkillEngineCapabilities; 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.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraftforge.network.NetworkDirection; import net.minecraftforge.network.NetworkDirection;
@@ -11,7 +13,7 @@ import net.minecraftforge.network.simple.SimpleChannel;
public class PacketHandler { public class PacketHandler {
private static final String PROTOCOL = "1"; private static final String PROTOCOL = "2";
public static final SimpleChannel CHANNEL = NetworkRegistry.ChannelBuilder public static final SimpleChannel CHANNEL = NetworkRegistry.ChannelBuilder
.named(ResourceLocation.fromNamespaceAndPath(SkillEngine.MODID, "network")) .named(ResourceLocation.fromNamespaceAndPath(SkillEngine.MODID, "network"))
.clientAcceptedVersions(PROTOCOL::equals) .clientAcceptedVersions(PROTOCOL::equals)
@@ -37,6 +39,11 @@ public class PacketHandler {
.decoder(ClientboundSyncSkillsPacket::decode) .decoder(ClientboundSyncSkillsPacket::decode)
.consumerMainThread(ClientboundSyncSkillsPacket::handle) .consumerMainThread(ClientboundSyncSkillsPacket::handle)
.add(); .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) CHANNEL.messageBuilder(ServerboundBindAbilityPacket.class, id++, NetworkDirection.PLAY_TO_SERVER)
.encoder(ServerboundBindAbilityPacket::encode) .encoder(ServerboundBindAbilityPacket::encode)
.decoder(ServerboundBindAbilityPacket::decode) .decoder(ServerboundBindAbilityPacket::decode)
@@ -66,4 +73,14 @@ public class PacketHandler {
CHANNEL.send(PacketDistributor.PLAYER.with(() -> player), packet); 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()
)
);
}
} }