Problem
The methods in , , , and contain significant code duplication for displaying list sections and player choices.
Duplicated Patterns
- List display pattern (~10 occurrences):
lore.add(Component.text("Header:").color(color));
for (String item : items) {
lore.add(Component.text(" • " + item).color(color));
}
- Language choice display (duplicated in Race, SubRace, Background):
for (ChoiceEntry choice : playerChoices) {
if (choice.type() == PlayersChoice.ChoiceType.LANGUAGE) {
// ... 10+ lines of similar code
}
}
Proposed Solution
Create a LoreBuilder utility class in io.papermc.jkvttplugin.util with fluent API methods:
addListSection(header, items, color) - For displaying bulleted lists
addLanguageChoices(fixedLanguages, playerChoices) - For language display
blankLine() - For spacing
build() - Returns the final lore list
Benefits
- DRY principle - eliminate ~50+ lines of duplicated code
- Consistent formatting across all menus
- Easier to modify display format in one place
- More readable lore methods
Files to Update
src/main/java/io/papermc/jkvttplugin/data/model/DndRace.java
src/main/java/io/papermc/jkvttplugin/data/model/DndClass.java
src/main/java/io/papermc/jkvttplugin/data/model/DndBackground.java
src/main/java/io/papermc/jkvttplugin/data/model/DndSubRace.java
- (new)
src/main/java/io/papermc/jkvttplugin/util/LoreBuilder.java
Notes
This refactoring was identified after implementing Issue #33. The current implementation works correctly, but would benefit from this cleanup once the pattern is stable.
Problem
The methods in , , , and contain significant code duplication for displaying list sections and player choices.
Duplicated Patterns
Proposed Solution
Create a
LoreBuilderutility class inio.papermc.jkvttplugin.utilwith fluent API methods:addListSection(header, items, color)- For displaying bulleted listsaddLanguageChoices(fixedLanguages, playerChoices)- For language displayblankLine()- For spacingbuild()- Returns the final lore listBenefits
Files to Update
src/main/java/io/papermc/jkvttplugin/data/model/DndRace.javasrc/main/java/io/papermc/jkvttplugin/data/model/DndClass.javasrc/main/java/io/papermc/jkvttplugin/data/model/DndBackground.javasrc/main/java/io/papermc/jkvttplugin/data/model/DndSubRace.javasrc/main/java/io/papermc/jkvttplugin/util/LoreBuilder.javaNotes
This refactoring was identified after implementing Issue #33. The current implementation works correctly, but would benefit from this cleanup once the pattern is stable.