From fc9c6bc7e4443aead4524ea50864eb4aa659045f Mon Sep 17 00:00:00 2001
From: WinDanesz <31292708+WinDanesz@users.noreply.github.com>
Date: Sun, 31 Aug 2025 22:46:57 +0200
Subject: [PATCH] feat: Make tier values configurable through Settings, per
tier: - maxCharge (wand mana) - upgradeLimit (number of possible upgrade
scrolls applied to a specific tier, and weight
---
.../java/electroblob/wizardry/Settings.java | 80 ++++++++++++++++++-
.../electroblob/wizardry/constants/Tier.java | 8 +-
.../assets/ebwizardry/lang/en_us.lang | 30 +++++++
3 files changed, 113 insertions(+), 5 deletions(-)
diff --git a/src/main/java/electroblob/wizardry/Settings.java b/src/main/java/electroblob/wizardry/Settings.java
index 6f85bad5..8e78d0ee 100644
--- a/src/main/java/electroblob/wizardry/Settings.java
+++ b/src/main/java/electroblob/wizardry/Settings.java
@@ -359,6 +359,18 @@ public final class Settings {
public double forfeitChance = 0.2;
/** [Synchronised] Progression requirements for upgrading a wand to each tier. */
public int[] progressionRequirements = {1500, 3500, 6000};
+
+ // Integer wrappers for tier values
+ public Integer noviceMaxCharge = 700;
+ public Integer apprenticeMaxCharge = 1000;
+ public Integer advancedMaxCharge = 1500;
+ public Integer masterMaxCharge = 2500;
+
+ public Integer noviceUpgradeLimit = 3;
+ public Integer apprenticeUpgradeLimit = 5;
+ public Integer advancedUpgradeLimit = 7;
+ public Integer masterUpgradeLimit = 9;
+
/**
* [Synchronised] The maximum number of blocks a bookshelf can be from an arcane workbench or lectern to be
* able to link to it.
@@ -888,6 +900,72 @@ public final class Settings {
progressionRequirements = property.getIntList();
propOrder.add(property.getName());
+ property = config.get(DIFFICULTY_CATEGORY, "tierMaxCharges", new int[]{700, 1000, 1500, 2500},
+ "Maximum mana each tier can store (novice, apprentice, advanced, master respectively).");
+ property.setLanguageKey("config." + Wizardry.MODID + ".tier_max_charges");
+ property.setRequiresWorldRestart(true);
+ //tierMaxCharges = property.getIntList();
+ propOrder.add(property.getName());
+
+ // Individual tier configuration
+ property = config.get(DIFFICULTY_CATEGORY, "noviceMaxCharge", 700,
+ "Maximum mana a novice wand can store.");
+ property.setLanguageKey("config." + Wizardry.MODID + ".novice_max_charge");
+ property.setRequiresWorldRestart(true);
+ noviceMaxCharge = property.getInt();
+ propOrder.add(property.getName());
+
+ property = config.get(DIFFICULTY_CATEGORY, "apprenticeMaxCharge", 1000,
+ "Maximum mana an apprentice wand can store.");
+ property.setLanguageKey("config." + Wizardry.MODID + ".apprentice_max_charge");
+ property.setRequiresWorldRestart(true);
+ apprenticeMaxCharge = property.getInt();
+ propOrder.add(property.getName());
+
+ property = config.get(DIFFICULTY_CATEGORY, "advancedMaxCharge", 1500,
+ "Maximum mana an advanced wand can store.");
+ property.setLanguageKey("config." + Wizardry.MODID + ".advanced_max_charge");
+ property.setRequiresWorldRestart(true);
+ advancedMaxCharge = property.getInt();
+ propOrder.add(property.getName());
+
+ property = config.get(DIFFICULTY_CATEGORY, "masterMaxCharge", 2500,
+ "Maximum mana a master wand can store.");
+ property.setLanguageKey("config." + Wizardry.MODID + ".master_max_charge");
+ property.setRequiresWorldRestart(true);
+ masterMaxCharge = property.getInt();
+ propOrder.add(property.getName());
+
+ property = config.get(DIFFICULTY_CATEGORY, "noviceUpgradeLimit", 3,
+ "Maximum number of upgrades a novice wand can have.");
+ property.setLanguageKey("config." + Wizardry.MODID + ".novice_upgrade_limit");
+ property.setRequiresWorldRestart(true);
+ noviceUpgradeLimit = property.getInt();
+ propOrder.add(property.getName());
+
+ property = config.get(DIFFICULTY_CATEGORY, "apprenticeUpgradeLimit", 5,
+ "Maximum number of upgrades an apprentice wand can have.");
+ property.setLanguageKey("config." + Wizardry.MODID + ".apprentice_upgrade_limit");
+ property.setRequiresWorldRestart(true);
+ apprenticeUpgradeLimit = property.getInt();
+ propOrder.add(property.getName());
+
+ property = config.get(DIFFICULTY_CATEGORY, "advancedUpgradeLimit", 7,
+ "Maximum number of upgrades an advanced wand can have.");
+ property.setLanguageKey("config." + Wizardry.MODID + ".advanced_upgrade_limit");
+ property.setRequiresWorldRestart(true);
+ advancedUpgradeLimit = property.getInt();
+ propOrder.add(property.getName());
+
+ property = config.get(DIFFICULTY_CATEGORY, "masterUpgradeLimit", 9,
+ "Maximum number of upgrades a master wand can have.");
+ property.setLanguageKey("config." + Wizardry.MODID + ".master_upgrade_limit");
+ property.setRequiresWorldRestart(true);
+ masterUpgradeLimit = property.getInt();
+ propOrder.add(property.getName());
+
+
+
// These two aren't sliders because using a slider makes it difficult to fine-tune the numbers; the nature of a
// scaling factor means that 0.5 is as big a change as 2.0, so whilst a slider is fine for increasing the
// damage, it doesn't give fine enough control for values less than 1.
@@ -1241,7 +1319,7 @@ public final class Settings {
shrineRegenerationEnabled = property.getBoolean();
propOrder.add(property.getName());
- property = config.get(WORLDGEN_CATEGORY, "shrineRegenerationTime", 1, "Time in minutes for a conquered shrine to regenerate. Minimum 1 minute, maximum 1440 minutes (24 hours).", 1, 1440);
+ property = config.get(WORLDGEN_CATEGORY, "shrineRegenerationTime", 20, "Time in minutes for a conquered shrine to regenerate. Minimum 1 minute, maximum 1440 minutes (24 hours).", 1, 1440);
property.setLanguageKey("config." + Wizardry.MODID + ".shrine_regeneration_time");
Wizardry.proxy.setToNumberSliderEntry(property);
shrineRegenerationTime = property.getInt();
diff --git a/src/main/java/electroblob/wizardry/constants/Tier.java b/src/main/java/electroblob/wizardry/constants/Tier.java
index c0c9051e..336eb2dc 100644
--- a/src/main/java/electroblob/wizardry/constants/Tier.java
+++ b/src/main/java/electroblob/wizardry/constants/Tier.java
@@ -10,10 +10,10 @@ import java.util.Random;
public enum Tier {
- NOVICE(700, 3, 12, new Style().setColor(TextFormatting.WHITE), "novice"),
- APPRENTICE(1000, 5, 5, new Style().setColor(TextFormatting.AQUA), "apprentice"),
- ADVANCED(1500, 7, 2, new Style().setColor(TextFormatting.DARK_BLUE), "advanced"),
- MASTER(2500, 9, 1, new Style().setColor(TextFormatting.DARK_PURPLE), "master");
+ NOVICE(Wizardry.settings.noviceMaxCharge, Wizardry.settings.noviceUpgradeLimit, 12, new Style().setColor(TextFormatting.WHITE), "novice"),
+ APPRENTICE(Wizardry.settings.apprenticeMaxCharge, Wizardry.settings.apprenticeUpgradeLimit, 5, new Style().setColor(TextFormatting.AQUA), "apprentice"),
+ ADVANCED(Wizardry.settings.advancedMaxCharge, Wizardry.settings.advancedUpgradeLimit, 2, new Style().setColor(TextFormatting.DARK_BLUE), "advanced"),
+ MASTER(Wizardry.settings.masterMaxCharge, Wizardry.settings.masterUpgradeLimit, 1, new Style().setColor(TextFormatting.DARK_PURPLE), "master");
/** Maximum mana a wand of this tier can store. */
public final int maxCharge;
diff --git a/src/main/resources/assets/ebwizardry/lang/en_us.lang b/src/main/resources/assets/ebwizardry/lang/en_us.lang
index a359baad..b389cd77 100644
--- a/src/main/resources/assets/ebwizardry/lang/en_us.lang
+++ b/src/main/resources/assets/ebwizardry/lang/en_us.lang
@@ -1620,6 +1620,36 @@ config.ebwizardry.forfeit_chance=Forfeit Chance
config.ebwizardry.forfeit_chance.tooltip=The chance to 'misread' an undiscovered spell and trigger a forfeit instead. Setting this to 0 effectively disables the forfeit mechanic. Has no effect if discovery mode is disabled.
config.ebwizardry.progression_requirements=Progression Requirements
config.ebwizardry.progression_requirements.tooltip=The progression required to upgrade a wand to each tier (apprentice, advanced and master respectively).
+
+config.ebwizardry.tier_max_charges=Tier Maximum Charges
+config.ebwizardry.tier_max_charges.tooltip=Maximum mana each tier can store (novice, apprentice, advanced, master respectively).
+
+config.ebwizardry.tier_upgrade_limits=Tier Upgrade Limits
+config.ebwizardry.tier_upgrade_limits.tooltip=Maximum number of upgrades each tier can have (novice, apprentice, advanced, master respectively).
+
+config.ebwizardry.novice_max_charge=Novice Maximum Charge
+config.ebwizardry.novice_max_charge.tooltip=Maximum mana a novice wand can store.
+
+config.ebwizardry.apprentice_max_charge=Apprentice Maximum Charge
+config.ebwizardry.apprentice_max_charge.tooltip=Maximum mana an apprentice wand can store.
+
+config.ebwizardry.advanced_max_charge=Advanced Maximum Charge
+config.ebwizardry.advanced_max_charge.tooltip=Maximum mana an advanced wand can store.
+
+config.ebwizardry.master_max_charge=Master Maximum Charge
+config.ebwizardry.master_max_charge.tooltip=Maximum mana a master wand can store.
+
+config.ebwizardry.novice_upgrade_limit=Novice Upgrade Limit
+config.ebwizardry.novice_upgrade_limit.tooltip=Maximum number of upgrades a novice wand can have.
+
+config.ebwizardry.apprentice_upgrade_limit=Apprentice Upgrade Limit
+config.ebwizardry.apprentice_upgrade_limit.tooltip=Maximum number of upgrades an apprentice wand can have.
+
+config.ebwizardry.advanced_upgrade_limit=Advanced Upgrade Limit
+config.ebwizardry.advanced_upgrade_limit.tooltip=Maximum number of upgrades an advanced wand can have.
+
+config.ebwizardry.master_upgrade_limit=Master Upgrade Limit
+config.ebwizardry.master_upgrade_limit.tooltip=Maximum number of upgrades a master wand can have.
config.ebwizardry.player_damage_scaling=Player Damage Scaling Factor
config.ebwizardry.player_damage_scaling.tooltip=Global damage scaling factor for the damage dealt by players casting spells, relative to 1.
config.ebwizardry.npc_damage_scaling=NPC Damage Scaling Factor