diff --git a/gradle.properties b/gradle.properties index 823c97f..d6752c7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -48,7 +48,7 @@ mod_name=Fretux's Skill Engine # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=All Rights Reserved # The mod version. See https://semver.org/ -mod_version=1.1.1 +mod_version=1.1.2 # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources. # See https://maven.apache.org/guides/mini/guide-naming-conventions.html diff --git a/src/main/java/net/fretux/skillengine/network/ClientboundNodeUnlockedPacket.java b/src/main/java/net/fretux/skillengine/network/ClientboundNodeUnlockedPacket.java index 2156580..f9d5ce8 100644 --- a/src/main/java/net/fretux/skillengine/network/ClientboundNodeUnlockedPacket.java +++ b/src/main/java/net/fretux/skillengine/network/ClientboundNodeUnlockedPacket.java @@ -10,22 +10,29 @@ import java.util.function.Supplier; public class ClientboundNodeUnlockedPacket { private final ResourceLocation id; + private final int newSkillPoints; - public ClientboundNodeUnlockedPacket(ResourceLocation id) { + public ClientboundNodeUnlockedPacket(ResourceLocation id, int newSkillPoints) { this.id = id; + this.newSkillPoints = newSkillPoints; } public static void encode(ClientboundNodeUnlockedPacket msg, FriendlyByteBuf buf) { buf.writeResourceLocation(msg.id); + buf.writeInt(msg.newSkillPoints); } public static ClientboundNodeUnlockedPacket decode(FriendlyByteBuf buf) { - return new ClientboundNodeUnlockedPacket(buf.readResourceLocation()); + ResourceLocation id = buf.readResourceLocation(); + int points = buf.readInt(); + return new ClientboundNodeUnlockedPacket(id, points); } public static void handle(ClientboundNodeUnlockedPacket msg, Supplier ctx) { ctx.get().enqueueWork(() -> { + // Update client-side unlocked set and points immediately so UI can reflect changes this frame SkilltreeClientState.unlockNode(msg.id); + SkilltreeClientState.setCurrentSkillPoints(msg.newSkillPoints); }); ctx.get().setPacketHandled(true); } diff --git a/src/main/java/net/fretux/skillengine/network/ServerboundUnlockNodePacket.java b/src/main/java/net/fretux/skillengine/network/ServerboundUnlockNodePacket.java index a358bd6..ff08e2d 100644 --- a/src/main/java/net/fretux/skillengine/network/ServerboundUnlockNodePacket.java +++ b/src/main/java/net/fretux/skillengine/network/ServerboundUnlockNodePacket.java @@ -49,9 +49,10 @@ public class ServerboundUnlockNodePacket { data.unlockNode(node); SkillEngine.LOGGER.info("Node {} unlocked for {}", msg.nodeId, player.getGameProfile().getName()); + // Send client an immediate update about the unlocked node and the new remaining points PacketHandler.CHANNEL.send( PacketDistributor.PLAYER.with(() -> player), - new ClientboundNodeUnlockedPacket(node.getId()) + new ClientboundNodeUnlockedPacket(node.getId(), data.getSkillPoints()) ); } else { SkillEngine.LOGGER.info("Cannot unlock node {} for {} (canUnlock=false)", diff --git a/src/main/java/net/fretux/skillengine/skilltree/SkillNodeLoader.java b/src/main/java/net/fretux/skillengine/skilltree/SkillNodeLoader.java index 55236bb..43ea4fd 100644 --- a/src/main/java/net/fretux/skillengine/skilltree/SkillNodeLoader.java +++ b/src/main/java/net/fretux/skillengine/skilltree/SkillNodeLoader.java @@ -38,6 +38,9 @@ public class SkillNodeLoader extends SimpleJsonResourceReloadListener { SkillNodeRegistry.clear(); jsons.forEach((id, element) -> { JsonObject obj = element.getAsJsonObject(); + ResourceLocation nodeId = obj.has("id") + ? new ResourceLocation(obj.get("id").getAsString()) + : id; String title = obj.get("title").getAsString(); String description = obj.get("description").getAsString(); int cost = obj.get("cost").getAsInt(); @@ -59,7 +62,7 @@ public class SkillNodeLoader extends SimpleJsonResourceReloadListener { } } SkillNode node = new SkillNode( - id, + nodeId, Component.literal(title), Component.literal(description), cost, diff --git a/src/main/resources/data/skillengine/skillnodes/welcome.json b/src/main/resources/data/skillengine/skillnodes/welcome.json index 8a17e46..946ca90 100644 --- a/src/main/resources/data/skillengine/skillnodes/welcome.json +++ b/src/main/resources/data/skillengine/skillnodes/welcome.json @@ -1,4 +1,5 @@ { + "id": "skillengine:welcome", "title": "Welcome to Ascend", "description": "This is your first skill node.\nClick Unlock to test the system.", "cost": 0,