diff --git a/src/main/java/net/fretux/skillengine/api/SkillEngineAPI.java b/src/main/java/net/fretux/skillengine/api/SkillEngineAPI.java index 519b553..6cd5094 100644 --- a/src/main/java/net/fretux/skillengine/api/SkillEngineAPI.java +++ b/src/main/java/net/fretux/skillengine/api/SkillEngineAPI.java @@ -3,7 +3,6 @@ package net.fretux.skillengine.api; import net.fretux.skillengine.SkillEngine; import net.fretux.skillengine.capability.PlayerSkillData; import net.fretux.skillengine.capability.SkillEngineCapabilities; -import net.fretux.skillengine.client.SkilltreeClientState; import net.fretux.skillengine.skilltree.AbilityNode; import net.fretux.skillengine.skilltree.AbilityNodeRegistry; import net.fretux.skillengine.skilltree.SkillLogic; @@ -11,6 +10,8 @@ import net.fretux.skillengine.skilltree.SkillNode; import net.fretux.skillengine.skilltree.SkillNodeRegistry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Player; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.loading.FMLEnvironment; import java.util.List; import java.util.Set; @@ -130,14 +131,28 @@ public final class SkillEngineAPI { } public static boolean clientHasSkill(ResourceLocation id) { - return SkilltreeClientState.isUnlocked(id); + return FMLEnvironment.dist == Dist.CLIENT && ClientAccess.clientHasSkill(id); } public static int clientGetAbilitySlot(ResourceLocation id) { - return SkilltreeClientState.getSlotOfAbility(id); + return FMLEnvironment.dist == Dist.CLIENT ? ClientAccess.clientGetAbilitySlot(id) : -1; } public static ResourceLocation[] clientGetAbilitySlots() { - return SkilltreeClientState.getAbilitySlots(); + return FMLEnvironment.dist == Dist.CLIENT ? ClientAccess.clientGetAbilitySlots() : new ResourceLocation[3]; } -} \ No newline at end of file + + private static final class ClientAccess { + private static boolean clientHasSkill(ResourceLocation id) { + return net.fretux.skillengine.client.SkilltreeClientState.isUnlocked(id); + } + + private static int clientGetAbilitySlot(ResourceLocation id) { + return net.fretux.skillengine.client.SkilltreeClientState.getSlotOfAbility(id); + } + + private static ResourceLocation[] clientGetAbilitySlots() { + return net.fretux.skillengine.client.SkilltreeClientState.getAbilitySlots(); + } + } +} diff --git a/src/main/java/net/fretux/skillengine/client/AbilityKeybindHandler.java b/src/main/java/net/fretux/skillengine/client/AbilityKeybindHandler.java index e349e94..ac77b1f 100644 --- a/src/main/java/net/fretux/skillengine/client/AbilityKeybindHandler.java +++ b/src/main/java/net/fretux/skillengine/client/AbilityKeybindHandler.java @@ -4,13 +4,14 @@ import com.mojang.blaze3d.platform.InputConstants; import net.fretux.skillengine.network.PacketHandler; import net.fretux.skillengine.network.ServerboundActivateAbilityPacket; import net.minecraft.client.KeyMapping; +import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.InputEvent; import net.minecraftforge.client.settings.KeyConflictContext; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import org.lwjgl.glfw.GLFW; -@Mod.EventBusSubscriber +@Mod.EventBusSubscriber(modid = net.fretux.skillengine.SkillEngine.MODID, value = Dist.CLIENT) public class AbilityKeybindHandler { public static final KeyMapping ABILITY_1 = new KeyMapping( diff --git a/src/main/java/net/fretux/skillengine/network/ClientboundNodeUnlockedPacket.java b/src/main/java/net/fretux/skillengine/network/ClientboundNodeUnlockedPacket.java index 8f3c5b5..ad006eb 100644 --- a/src/main/java/net/fretux/skillengine/network/ClientboundNodeUnlockedPacket.java +++ b/src/main/java/net/fretux/skillengine/network/ClientboundNodeUnlockedPacket.java @@ -3,8 +3,9 @@ package net.fretux.skillengine.network; import net.fretux.skillengine.skilltree.AbilityNodeRegistry; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.network.NetworkEvent; -import net.fretux.skillengine.client.SkilltreeClientState; import java.util.function.Supplier; @@ -30,13 +31,20 @@ public class ClientboundNodeUnlockedPacket { public static void handle(ClientboundNodeUnlockedPacket msg, Supplier ctx) { ctx.get().enqueueWork(() -> { - if (AbilityNodeRegistry.get(msg.id) != null) - SkilltreeClientState.unlockAbility(msg.id); - else - SkilltreeClientState.unlockNode(msg.id); - SkilltreeClientState.setCurrentSkillPoints(msg.newSkillPoints); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> ClientHandler.handle(msg)); }); ctx.get().setPacketHandled(true); } + + private static final class ClientHandler { + private static void handle(ClientboundNodeUnlockedPacket msg) { + if (AbilityNodeRegistry.get(msg.id) != null) { + net.fretux.skillengine.client.SkilltreeClientState.unlockAbility(msg.id); + } else { + net.fretux.skillengine.client.SkilltreeClientState.unlockNode(msg.id); + } + net.fretux.skillengine.client.SkilltreeClientState.setCurrentSkillPoints(msg.newSkillPoints); + } + } } diff --git a/src/main/java/net/fretux/skillengine/network/ClientboundSyncCooldownPacket.java b/src/main/java/net/fretux/skillengine/network/ClientboundSyncCooldownPacket.java index 8159cc7..f3a59cd 100644 --- a/src/main/java/net/fretux/skillengine/network/ClientboundSyncCooldownPacket.java +++ b/src/main/java/net/fretux/skillengine/network/ClientboundSyncCooldownPacket.java @@ -1,7 +1,8 @@ package net.fretux.skillengine.network; -import net.fretux.skillengine.client.SkilltreeClientState; import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.network.NetworkEvent; import java.util.function.Supplier; @@ -26,7 +27,13 @@ public class ClientboundSyncCooldownPacket { } public static void handle(ClientboundSyncCooldownPacket msg, Supplier ctx) { - ctx.get().enqueueWork(() -> SkilltreeClientState.updateCooldown(msg.slot, msg.cooldown)); + ctx.get().enqueueWork(() -> DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> ClientHandler.handle(msg))); ctx.get().setPacketHandled(true); } + + private static final class ClientHandler { + private static void handle(ClientboundSyncCooldownPacket msg) { + net.fretux.skillengine.client.SkilltreeClientState.updateCooldown(msg.slot, msg.cooldown); + } + } } diff --git a/src/main/java/net/fretux/skillengine/network/ClientboundSyncSkillsPacket.java b/src/main/java/net/fretux/skillengine/network/ClientboundSyncSkillsPacket.java index 10d0868..3819022 100644 --- a/src/main/java/net/fretux/skillengine/network/ClientboundSyncSkillsPacket.java +++ b/src/main/java/net/fretux/skillengine/network/ClientboundSyncSkillsPacket.java @@ -1,8 +1,9 @@ package net.fretux.skillengine.network; -import net.fretux.skillengine.client.SkilltreeClientState; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.network.NetworkEvent; import java.util.HashSet; @@ -63,11 +64,17 @@ public class ClientboundSyncSkillsPacket { public static void handle(ClientboundSyncSkillsPacket msg, Supplier ctx) { ctx.get().enqueueWork(() -> { - SkilltreeClientState.setUnlocked(msg.unlocked); - SkilltreeClientState.setUnlockedAbilities(msg.unlockedAbilities); - SkilltreeClientState.setCurrentSkillPoints(msg.skillPoints); - SkilltreeClientState.setAbilitySlots(msg.abilitySlots); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> ClientHandler.handle(msg)); }); ctx.get().setPacketHandled(true); } -} \ No newline at end of file + + private static final class ClientHandler { + private static void handle(ClientboundSyncSkillsPacket msg) { + net.fretux.skillengine.client.SkilltreeClientState.setUnlocked(msg.unlocked); + net.fretux.skillengine.client.SkilltreeClientState.setUnlockedAbilities(msg.unlockedAbilities); + net.fretux.skillengine.client.SkilltreeClientState.setCurrentSkillPoints(msg.skillPoints); + net.fretux.skillengine.client.SkilltreeClientState.setAbilitySlots(msg.abilitySlots); + } + } +}