add skill definition sync mechanism and update protocol version
This commit is contained in:
@@ -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<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) {
|
||||
SkilltreeClientState.updateCooldown(slot, cooldown);
|
||||
}
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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()
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user