Skip to content

feat: Additive skill list pages on subclass progression#1594

Draft
Copilot wants to merge 2 commits intodevfrom
copilot/enhancement-additive-skill-lists
Draft

feat: Additive skill list pages on subclass progression#1594
Copilot wants to merge 2 commits intodevfrom
copilot/enhancement-additive-skill-lists

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Mar 13, 2026

Currently, professing into a subclass merges parent and subclass skills into a single skill tree. This adds a per-class replace-parent-skill-list flag (default true) that, when set to false, shows parent skills on preceding pages and the subclass's own skills on additional pages.

Changes

FabledClass

  • New replaceParentSkillList field (boolean, default true) with getter/setter
  • Serialized as replace-parent-skill-list in class YAML — backward compatible (missing key defaults to true)

SkillTree.arrange()

  • Uses tree.getSkills(replaceParentSkillList) instead of tree.getSkills(); in additive mode only own skills are placed into the InventoryTree, leaving parent skills for their own separate pages

GUIPage / GUIData

  • GUIPage.copy(GUIData newParent) — clones a page's slot layout bound to a new parent
  • GUIData.combined(List<GUIData>) — merges multiple GUIData objects into a single non-editable one, concatenating pages in order at the maximum row count of any part

GUITool

  • getDisplaySkillTree(FabledClass) — returns a combined multi-page GUIData for additive-mode classes, cached under a DISPLAY_-prefixed key; falls back to the existing getSkillTree() for the default case
  • cleanUp() now skips saving DISPLAY_ entries (computed, not user-configured)
  • Invalidates the cached display tree when a class is edited via the customize tool

PlayerData.showSkills()

  • Delegates to GUITool.getDisplaySkillTree() instead of getSkillTree() so the correct paged view is shown

Example YAML

Berserker:
  parent: 'Warrior'
  replace-parent-skill-list: false  # page 1 = Warrior skills, page 2 = Berserker skills
  skills: [Bloodthirst, Rampage]

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • jitpack.io
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.12/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.12/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.12 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.12/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/fabled/fabled org.codehaus.plexus.classworlds.launcher.Launcher compile -q git conf�� unset --global (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.12/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.12/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.12 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.12/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/fabled/fabled org.codehaus.plexus.classworlds.launcher.Launcher -f pom.xml -B -V -e -Dfindbugs.skip -Dcheckstyle.skip -Dpmd.skip=true -Dspotbugs.skip -Denforcer.skip -Dmaven.javadoc.skip (dns block)
  • mvn.lib.co.nz
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.12/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.12/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.12 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.12/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/fabled/fabled org.codehaus.plexus.classworlds.launcher.Launcher compile -q git conf�� unset --global (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.12/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.12/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.12 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.12/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/fabled/fabled org.codehaus.plexus.classworlds.launcher.Launcher -f pom.xml -B -V -e -Dfindbugs.skip -Dcheckstyle.skip -Dpmd.skip=true -Dspotbugs.skip -Denforcer.skip -Dmaven.javadoc.skip (dns block)
  • repo.codemc.io
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.12/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.12/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.12 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.12/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/fabled/fabled org.codehaus.plexus.classworlds.launcher.Launcher compile -q git conf�� unset --global (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.12/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.12/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.12 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.12/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/fabled/fabled org.codehaus.plexus.classworlds.launcher.Launcher -f pom.xml -B -V -e -Dfindbugs.skip -Dcheckstyle.skip -Dpmd.skip=true -Dspotbugs.skip -Denforcer.skip -Dmaven.javadoc.skip (dns block)
  • repo.travja.dev
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.12/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.12/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.12 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.12/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/fabled/fabled org.codehaus.plexus.classworlds.launcher.Launcher compile -q git conf�� unset --global (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.12/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.12/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.12 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.12/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/fabled/fabled org.codehaus.plexus.classworlds.launcher.Launcher -f pom.xml -B -V -e -Dfindbugs.skip -Dcheckstyle.skip -Dpmd.skip=true -Dspotbugs.skip -Denforcer.skip -Dmaven.javadoc.skip (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Original prompt

This section details on the original issue you should resolve

<issue_title>[Enhancement] Additive Skill Lists on Subclass Progression</issue_title>
<issue_description>## Feature Request: Additive Skill Lists on Subclass

Problem
Currently, when a player takes a subclass, the subclass's skill list completely replaces the parent class's skill list. This makes it difficult to build more complex, layered class progressions.

Proposed Solution
Add a per-class option — "Replace parent skill list" (Yes/No) — that controls this behavior:

  • Yes (default): works exactly as it does today — the subclass skill list replaces the parent's.
  • No: the subclass skill list is appended as additional pages to the parent's skill list rather than replacing it.

Example:
When a player uses /class skill, they would see a paginated skill list where:

  • Page 1 shows the main class skills
  • Page 2 shows the subclass skills
  • Additional subclasses continue adding pages

This same paged structure would also be reflected in the /class customize arrangement UI.

Bonus (Optional)
Allow players to reorder pages within /class customize.</issue_description>

<agent_instructions>We'll need to create changes both in the dev branch as well as the editor branch</agent_instructions>

Comments on the Issue (you are @copilot in this section)


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Add a per-class `replace-parent-skill-list` option (boolean, default: true)
that controls how the skill tree UI handles subclass progression.

- When true (default): existing behavior - all parent + own skills in one tree
- When false: parent skills shown on separate preceding pages, own skills on
  additional pages after them

Changes:
- FabledClass: add replaceParentSkillList field, getter/setter, save/load
- SkillTree: use getSkills(replaceParentSkillList) so additive classes only
  arrange own skills in their InventoryTree
- GUIPage: add copy(GUIData) for page cloning with a new parent reference
- GUIData: add combined(List<GUIData>) to merge multiple GUIData into one
- GUITool: add getDisplaySkillTree() returning combined tree for additive mode;
  fix cleanUp() to skip saving computed DISPLAY_ entries
- PlayerData: use getDisplaySkillTree() in showSkills() for additive support

Co-authored-by: Travja <1574947+Travja@users.noreply.github.com>
Copilot AI changed the title [WIP] [Enhancement] Add per-class option for subclass skill lists feat: Additive skill list pages on subclass progression Mar 13, 2026
Copilot AI requested a review from Travja March 13, 2026 01:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Enhancement] Additive Skill Lists on Subclass Progression

2 participants