Description
โ๏ธ EcoTaleReforging
Progressive weapon & armor upgrading system for Hytale servers
Place a Reforge Station block, press F โ and upgrade your gear through 10 enhancement levels with rising risk, material costs, and powerful stat bonuses.
๐ EcoTale Ecosystem
EcoTaleReforging is part of the EcoTale plugin suite โ interconnected mods that together build a rich player-driven economy:
| Plugin | Description | Synergy with Reforging |
|---|---|---|
| Ecotale | Core economy โ wallets, currency, transfers | ๐ฐ Coin cost for each upgrade level |
| EcoTaleIncome | Earn money from mobs, mining, woodcutting, farming | ๐ต Players earn โ spend on reforging |
| EcoTaleBanking | Deposits, loans, credit rating | ๐ฆ Save up for expensive high-level reforges |
| EcoTaleQuests | Daily & weekly quests | ๐ฏ Quest rewards fund reforging materials |
| EcoTaleRewards | Login calendar & streak bonuses | ๐ Daily rewards include reforging materials |
Tip: With all EcoTale plugins installed, players follow a natural loop: earn (Income) โ save (Banking) โ upgrade gear (Reforging) โ complete harder quests (Quests).
โจ Features
| Feature | Description |
|---|---|
| โ๏ธ Progressive Reforging | 10 enhancement levels with configurable success chances (90% โ 5%) |
| โ๏ธ Damage & Defense Bonuses | Weapons gain flat DMG bonus, armor gains flat DEF reduction โ applied in combat via ECS damage system |
| ๐ช Material & Coin Costs | Each level requires specific ingot types and coin amounts |
| ๐ฅ Failure Penalty | Item is destroyed on failure โ configurable % of crafting materials returned |
| ๐ก๏ธ Protection Mode | Pay extra coins to save your item on failure (level resets to 0 instead of destruction) |
| ๐ Reverse Recipes | 32 built-in item-to-material mappings for failure refunds |
| ๐ชจ Reforge Station Block | Placeable anvil-style block with custom 3D model โ press F to open the reforging GUI |
| ๐ฅ๏ธ Player GUI | Insert item โ see chance/cost โ reforge โ clean native Hytale UI |
| ๐ ๏ธ Admin Panel | Full settings editor โ levels, allowed items, recipes, general config |
| โ๏ธ Character-by-Character Editor | Edit item patterns directly in the admin panel using arrow keys |
| ๐ฏ Wildcard Patterns | Weapon_*, Armor_* โ supports custom mod items |
| ๏ฟฝ Exclusion List | Block specific item types from reforging via wildcard patterns (arrows, staffs, shields, etc.) |
| ๐งฉ Custom Items | Register any modded item with a display name โ works in GUI and admin material cycle |
| ๐ฆ Multiple Materials per Level | Each reforge level can require more than one material type |
| ๏ฟฝ๐ง Hot Reload | Save/Reload from admin panel โ no server restart needed |
| ๐ 6 Languages | Full localization: English, ะ ัััะบะธะน, Deutsch, Franรงais, Espaรฑol, Portuguรชs (BR) |
| ๐ LuckPerms | Permission-based access: ecotalereforging.use, ecotalereforging.admin |
| ๐ DynamicTooltipsLib | Reforge level and stat bonuses displayed in item tooltips |
| ๐ผ๏ธ Material Icons | Ingot icons shown in reforge GUI and admin panel |
Admin Panel Sections
| Section | Description |
|---|---|
| General Settings | Debug mode, language, max level, failure return rate, protection toggle |
| Level Editor | Success chance, coin cost, DMG/DEF bonus, material type & count โ with multi-material navigation |
| Allowed Items | Weapon & armor patterns with add/remove/character-level editing |
| Reverse Recipes | Browse, edit, add, remove crafting material return recipes |
| Plugin Stats | Plugin version, number of configured levels |
โ๏ธ How Bonuses Work
Damage Bonus (DMG) โ flat additive damage added to every weapon attack.
- Each reforge level adds its configured
weaponDamageBonusto the total - The bonus is cumulative across all levels: a +3 weapon adds levels 1 + 2 + 3
- Formula:
finalDamage = baseDamage + totalDmgBonus - Example: Iron Sword base 10 dmg, reforged to +3 (bonus +7.5) โ deals 17.5 per hit
Defense Bonus (DEF) โ flat damage reduction applied to every incoming hit.
- Each reforged armor piece contributes its cumulative
armorDefenseBonus - All equipped reforged armor pieces stack together
- Minimum damage after reduction is always 1 (can't reduce to zero)
- Formula:
finalDamage = max(1, incomingDamage - totalDefBonus) - Example: Player wearing +2 helmet (DEF +3.5) and +1 chestplate (DEF +1.5) โ total DEF reduction is 5.0. A hit of 20 dmg โ takes 15.0 damage
[!NOTE] Reforge bonuses are flat values, not percentages. The "Defense 10%" shown in the vanilla Hytale HUD comes from the base armor item stats, not from reforging. Reforge DEF is an additional flat reduction applied on top of the base armor defense.
๐ฆ Requirements
| Dependency | Version | Required | Description |
|---|---|---|---|
| Ecotale | โฅ 1.0.0 | โ | Economy โ coin costs for reforging |
| LuckPerms | any | โ | Permission-based access control |
| DynamicTooltipsLib | any | โ | Reforge stats in item tooltips |
All dependencies are mandatory!!!
Added support | EconomyAPI |โฅ 1.4.5 |โ |Economy โ coin costs for reforging |
๐ Getting Started
# 1. Download the latest release
# 2. Drop into your server's mods/ folder
cp EcoTaleReforging-1.0.2.jar /server/mods/
# 3. Start the server โ config and assets are extracted automatically
# 4. Place a Reforge Station block and press F to open the GUI
That's it. All 10 reforge levels are pre-configured with balanced costs and success rates.
๐ฎ Commands
| Command | Description | Permission |
|---|---|---|
/reforge info |
Show reforge info for the held item | ecotalereforging.use |
/reforge help |
Show available commands | ecotalereforging.use |
/reforgeadmin |
Open the admin settings panel | ecotalereforging.admin |
/reforgeadmin reload |
Reload configuration from file | ecotalereforging.admin |
Note: The reforge GUI opens exclusively by pressing F on the Reforge Station block โ there is no command to open it.
๐ Permissions
| Permission | Description | Default |
|---|---|---|
ecotalereforging.use |
Use the Reforge Station block and view item info | All players |
ecotalereforging.admin |
Admin panel and reload command | OP |
๐ Supported Languages
| Language | Code | File |
|---|---|---|
| ๐ฌ๐ง English | en |
lang/en.json |
| ๐ท๐บ ะ ัััะบะธะน | ru |
lang/ru.json |
| ๐ฉ๐ช Deutsch | de |
lang/de.json |
| ๐ซ๐ท Franรงais | fr |
lang/fr.json |
| ๐ช๐ธ Espaรฑol | es |
lang/es.json |
| ๐ง๐ท Portuguรชs (BR) | pt_br |
lang/pt_br.json |
Set the language in config: "language": "ru". Each file contains ~140 translation keys covering all GUI text, messages, and admin panel labels.
โ๏ธ Configuration
Config file: mods/com.crystalrealm_EcoTaleReforging/EcoTaleReforging.json
Each reforge level is defined as a key ("1" through "10") under the levels object. You can add, remove, or modify levels freely.
| Field | Type | Description |
|---|---|---|
successChance |
double | Probability of success (0.0โ1.0). 0.90 = 90% |
weaponDamageBonus |
double | Flat DMG bonus added at this level. Cumulative with all prior levels |
armorDefenseBonus |
double | Flat DEF bonus added at this level. Cumulative with all prior levels |
coinCost |
double | Ecotale currency cost. Set to 0.0 for free (or if Ecotale is not installed) |
materials |
array | One or more materials required. Each entry has itemId (string) and count (int) |
Default Level Table
| Level | Success | DMG (+this) | DMG (total) | DEF (+this) | DEF (total) | Coins | Materials |
|---|---|---|---|---|---|---|---|
| +1 | 90% | +2.0 | 2.0 | +1.5 | 1.5 | 100 | Iron ร2 |
| +2 | 85% | +2.5 | 4.5 | +2.0 | 3.5 | 200 | Iron ร4 |
| +3 | 75% | +3.0 | 7.5 | +2.5 | 6.0 | 350 | Iron ร6 |
| +4 | 65% | +3.5 | 11.0 | +3.0 | 9.0 | 500 | Cobalt ร4 |
| +5 | 55% | +4.0 | 15.0 | +3.5 | 12.5 | 750 | Cobalt ร6 |
| +6 | 45% | +5.0 | 20.0 | +4.0 | 16.5 | 1,000 | Cobalt ร8 |
| +7 | 35% | +6.0 | 26.0 | +5.0 | 21.5 | 1,500 | Mithril ร4 |
| +8 | 25% | +7.0 | 33.0 | +6.0 | 27.5 | 2,000 | Mithril ร6 |
| +9 | 15% | +9.0 | 42.0 | +7.5 | 35.0 | 3,000 | Adamantite ร4 |
| +10 | 5% | +12.0 | 54.0 | +10.0 | 45.0 | 5,000 | Onyxium ร4 |
Multiple Materials per Level
Each level supports multiple material requirements. The player must have all listed materials simultaneously. This allows for complex crafting demands at higher levels.
"7": {
"successChance": 0.35,
"weaponDamageBonus": 6.0,
"armorDefenseBonus": 5.0,
"coinCost": 1500.0,
"materials": [
{ "itemId": "Ingredient_Bar_Mithril", "count": 4 },
{ "itemId": "Skull_Skeleton_Epic_Bar", "count": 2 }
]
}
The admin panel provides full navigation for multi-material levels โ cycle through materials with < > arrows, add new materials with +, or remove with ร.
Adding More Levels
Simply add new keys beyond "10" and increase maxReforgeLevel:
"general": { "maxReforgeLevel": 12 },
"levels": {
"11": { "successChance": 0.03, "weaponDamageBonus": 15.0, "armorDefenseBonus": 12.0, "coinCost": 8000.0, "materials": [{ "itemId": "Ingredient_Bar_Onyxium", "count": 8 }] },
"12": { "successChance": 0.01, "weaponDamageBonus": 20.0, "armorDefenseBonus": 15.0, "coinCost": 15000.0, "materials": [{ "itemId": "Ingredient_Bar_Onyxium", "count": 12 }] }
}
Allowed Items
Controls which items can be placed into the reforge station. Uses wildcard pattern matching with prefix globs.
| Field | Type | Description |
|---|---|---|
weapons |
string[] | Patterns for items treated as weapons (receive DMG bonus) |
armor |
string[] | Patterns for items treated as armor (receive DEF bonus) |
excluded |
string[] | Patterns for items that should never be reforgeable, even if they match weapon/armor patterns |
Pattern syntax:
"Weapon_*"โ matches any item starting withWeapon_(prefix glob)"*"โ matches everything"Weapon_Sword_Iron"โ exact match only
Evaluation order: An item is reforgeable if it matches any weapons or armor pattern AND does not match any excluded pattern. Exclusion always wins.
"allowedItems": {
"weapons": [
"Weapon_*"
],
"armor": [
"Armor_*"
],
"excluded": [
"Weapon_Arrow_*",
"Weapon_Bolt_*",
"Weapon_Shield_*",
"Weapon_Staff_*",
"Weapon_Crossbow_*",
"Weapon_Shortbow_*"
]
}
Adding Custom Mod Items
To allow items from other mods:
"weapons": ["Weapon_*", "CoolMod_Blade_*", "ExoticWeapons_*"],
"armor": ["Armor_*", "CoolMod_Armor_*"]
Fine-Tuning Exclusions
The excluded list is evaluated after weapons/armor matching. This lets you use broad wildcards like Weapon_* while surgically blocking specific item types:
"excluded": [
"Weapon_Arrow_*",
"Weapon_Bolt_*",
"Weapon_Shield_*",
"Weapon_Staff_*",
"Weapon_Crossbow_*",
"Weapon_Shortbow_*",
"Weapon_Bomb_*",
"Weapon_Fishing_*",
"Armor_Cosmetic_*"
]
[!NOTE] Exclusions are configured only via the JSON config file. The admin panel does not expose an exclusion editor โ this is intentional to prevent accidental mass-exclusion of items during live gameplay.
Custom Items
The customItems section lets you register any item ID with a human-readable display name. This serves two purposes:
- Display Name Override โ the registered name is shown in the player reforge GUI, admin panel, and anywhere the item name appears (instead of the raw ID or auto-generated Title Case)
- Admin Material Cycle โ custom item IDs are automatically added to the material dropdown in the admin Level Editor, so you can select them with
<>arrows without losing them
| Key | Value | Description |
|---|---|---|
| Item ID (string) | Display name (string) | Maps the exact item ID to a human-readable name |
"customItems": {
"Skull_Skeleton_Epic_Bar": "Skeleton Skull Bar",
"MyMod_Crystal_Flame": "Flame Crystal",
"Rare_Essence_Shadow": "Shadow Essence"
}
How Item Name Resolution Works
When the plugin needs to display an item name (in GUI, chat, tooltips), it checks in this order:
- Lang key
item.name.<ItemId>โ checked first in the active language file (e.g.,item.name.Skull_Skeleton_Epic_Bar) customItemsmap โ checked second in the config file- Structured parsing โ
Weapon_<Type>_<Material>andArmor_<Material>_<Slot>are parsed and localized viaitem.type.*anditem.material.*lang keys - Ingredient parsing โ
Ingredient_Bar_<Material>โ localized material name + "Ingot" - Title Case fallback โ underscores replaced with spaces, each word capitalized:
Skull_Skeleton_Epicโ "Skull Skeleton Epic"
To add a translation for a custom item in a specific language, add the lang key to the appropriate language file:
// lang/es.json
"item.name.Skull_Skeleton_Epic_Bar": "Barra de Calavera Esqueleto"
If the lang key exists, it takes priority over customItems. This lets you provide per-language names while using customItems as the universal fallback.
Reverse Recipes
When reforging fails, the player's item is destroyed but a percentage of crafting materials is returned. The reverseRecipes map defines what materials each item type yields.
| Key | Value | Description |
|---|---|---|
| Item ID (string) | MaterialEntry[] | Array of { "itemId": string, "count": int } โ what gets returned |
The actual amount returned is count ร failureReturnRate (rounded down, minimum 1 if any materials are defined).
"reverseRecipes": {
"Weapon_Sword_Iron": [{ "itemId": "Ingredient_Bar_Iron", "count": 12 }],
"Weapon_Sword_Cobalt": [{ "itemId": "Ingredient_Bar_Cobalt", "count": 12 }],
"Armor_Iron_Chest": [{ "itemId": "Ingredient_Bar_Iron", "count": 28 }],
"Armor_Adamantite_Head": [{ "itemId": "Ingredient_Bar_Adamantite", "count": 14 }]
}
Example: A player reforges Weapon_Sword_Iron and fails with failureReturnRate: 0.30:
- Recipe defines 12 Iron Bars
- 12 ร 0.30 = 3.6 โ 3 Iron Bars returned to inventory
Auto-Generated Recipes
If an item has no explicit reverse recipe, the plugin attempts to auto-generate one based on its naming pattern:
Weapon_<Type>_<Material>โ looks upIngredient_Bar_<Material>, count varies by weapon type:- Battleaxe: 24, Longsword: 20, Daggers: 20, Mace: 18, Axe: 16, Spear: 14, Sword: 12
Armor_<Material>_<Slot>โ looks upIngredient_Bar_<Material>, count varies by slot:- Chest: 28, Legs: 20, Head: 14, Hands: 10, Feet: 10
Auto-generation only applies when no matching key exists in reverseRecipes. To disable material return for a specific item, add it with an empty array: "Weapon_Sword_Gold": [].
Adding Custom Reverse Recipes
For modded items or items with non-standard naming, add explicit entries:
"reverseRecipes": {
"MyMod_Blade_Phoenix": [
{ "itemId": "Rare_Essence_Shadow", "count": 5 },
{ "itemId": "Ingredient_Bar_Adamantite", "count": 8 }
]
}
Full Config Example
Click to expand complete default configuration
{
"general": {
"language": "en",
"messagePrefix": "<dark_gray>[<gold>Reforge<dark_gray>]",
"maxReforgeLevel": 10,
"debugMode": false,
"failureReturnRate": 0.30,
"protectionEnabled": true,
"protectionCostMultiplier": 2.0
},
"levels": {
"1": { "successChance": 0.90, "weaponDamageBonus": 2.0, "armorDefenseBonus": 1.5, "coinCost": 100.0, "materials": [{ "itemId": "Ingredient_Bar_Iron", "count": 2 }] },
"2": { "successChance": 0.85, "weaponDamageBonus": 2.5, "armorDefenseBonus": 2.0, "coinCost": 200.0, "materials": [{ "itemId": "Ingredient_Bar_Iron", "count": 4 }] },
"3": { "successChance": 0.75, "weaponDamageBonus": 3.0, "armorDefenseBonus": 2.5, "coinCost": 350.0, "materials": [{ "itemId": "Ingredient_Bar_Iron", "count": 6 }] },
"4": { "successChance": 0.65, "weaponDamageBonus": 3.5, "armorDefenseBonus": 3.0, "coinCost": 500.0, "materials": [{ "itemId": "Ingredient_Bar_Cobalt", "count": 4 }] },
"5": { "successChance": 0.55, "weaponDamageBonus": 4.0, "armorDefenseBonus": 3.5, "coinCost": 750.0, "materials": [{ "itemId": "Ingredient_Bar_Cobalt", "count": 6 }] },
"6": { "successChance": 0.45, "weaponDamageBonus": 5.0, "armorDefenseBonus": 4.0, "coinCost": 1000.0, "materials": [{ "itemId": "Ingredient_Bar_Cobalt", "count": 8 }] },
"7": { "successChance": 0.35, "weaponDamageBonus": 6.0, "armorDefenseBonus": 5.0, "coinCost": 1500.0, "materials": [{ "itemId": "Ingredient_Bar_Mithril", "count": 4 }] },
"8": { "successChance": 0.25, "weaponDamageBonus": 7.0, "armorDefenseBonus": 6.0, "coinCost": 2000.0, "materials": [{ "itemId": "Ingredient_Bar_Mithril", "count": 6 }] },
"9": { "successChance": 0.15, "weaponDamageBonus": 9.0, "armorDefenseBonus": 7.5, "coinCost": 3000.0, "materials": [{ "itemId": "Ingredient_Bar_Adamantite", "count": 4 }] },
"10": { "successChance": 0.05, "weaponDamageBonus": 12.0, "armorDefenseBonus": 10.0, "coinCost": 5000.0, "materials": [{ "itemId": "Ingredient_Bar_Onyxium", "count": 4 }] }
},
"allowedItems": {
"weapons": ["Weapon_*"],
"armor": ["Armor_*"],
"excluded": [
"Weapon_Arrow_*",
"Weapon_Bolt_*",
"Weapon_Shield_*",
"Weapon_Staff_*",
"Weapon_Crossbow_*",
"Weapon_Shortbow_*"
]
},
"reverseRecipes": {
"Weapon_Sword_Iron": [{ "itemId": "Ingredient_Bar_Iron", "count": 12 }],
"Weapon_Sword_Cobalt": [{ "itemId": "Ingredient_Bar_Cobalt", "count": 12 }],
"Weapon_Sword_Mithril": [{ "itemId": "Ingredient_Bar_Mithril", "count": 12 }],
"Weapon_Sword_Adamantite": [{ "itemId": "Ingredient_Bar_Adamantite", "count": 12 }],
"Weapon_Axe_Iron": [{ "itemId": "Ingredient_Bar_Iron", "count": 16 }],
"Weapon_Axe_Cobalt": [{ "itemId": "Ingredient_Bar_Cobalt", "count": 16 }],
"Weapon_Axe_Mithril": [{ "itemId": "Ingredient_Bar_Mithril", "count": 16 }],
"Weapon_Axe_Adamantite": [{ "itemId": "Ingredient_Bar_Adamantite", "count": 16 }],
"Weapon_Daggers_Iron": [{ "itemId": "Ingredient_Bar_Iron", "count": 20 }],
"Weapon_Daggers_Cobalt": [{ "itemId": "Ingredient_Bar_Cobalt", "count": 20 }],
"Weapon_Daggers_Mithril": [{ "itemId": "Ingredient_Bar_Mithril", "count": 20 }],
"Weapon_Daggers_Adamantite":[{ "itemId": "Ingredient_Bar_Adamantite", "count": 20 }],
"Armor_Iron_Head": [{ "itemId": "Ingredient_Bar_Iron", "count": 14 }],
"Armor_Iron_Chest": [{ "itemId": "Ingredient_Bar_Iron", "count": 28 }],
"Armor_Iron_Legs": [{ "itemId": "Ingredient_Bar_Iron", "count": 20 }],
"Armor_Iron_Hands": [{ "itemId": "Ingredient_Bar_Iron", "count": 10 }],
"Armor_Iron_Feet": [{ "itemId": "Ingredient_Bar_Iron", "count": 10 }],
"Armor_Cobalt_Head": [{ "itemId": "Ingredient_Bar_Cobalt", "count": 14 }],
"Armor_Cobalt_Chest": [{ "itemId": "Ingredient_Bar_Cobalt", "count": 28 }],
"Armor_Cobalt_Legs": [{ "itemId": "Ingredient_Bar_Cobalt", "count": 20 }],
"Armor_Cobalt_Hands": [{ "itemId": "Ingredient_Bar_Cobalt", "count": 10 }],
"Armor_Cobalt_Feet": [{ "itemId": "Ingredient_Bar_Cobalt", "count": 10 }],
"Armor_Mithril_Head": [{ "itemId": "Ingredient_Bar_Mithril", "count": 14 }],
"Armor_Mithril_Chest": [{ "itemId": "Ingredient_Bar_Mithril", "count": 28 }],
"Armor_Mithril_Legs": [{ "itemId": "Ingredient_Bar_Mithril", "count": 20 }],
"Armor_Mithril_Hands": [{ "itemId": "Ingredient_Bar_Mithril", "count": 10 }],
"Armor_Mithril_Feet": [{ "itemId": "Ingredient_Bar_Mithril", "count": 10 }],
"Armor_Adamantite_Head": [{ "itemId": "Ingredient_Bar_Adamantite", "count": 14 }],
"Armor_Adamantite_Chest": [{ "itemId": "Ingredient_Bar_Adamantite", "count": 28 }],
"Armor_Adamantite_Legs": [{ "itemId": "Ingredient_Bar_Adamantite", "count": 20 }],
"Armor_Adamantite_Hands": [{ "itemId": "Ingredient_Bar_Adamantite", "count": 10 }],
"Armor_Adamantite_Feet": [{ "itemId": "Ingredient_Bar_Adamantite", "count": 10 }]
},
"customItems": {}
}
๐งฉ Advanced Customization Recipes
Scenario: Custom Modded Materials for Reforging
You want reforging to consume a special drop item from a boss mob โ Skull_Skeleton_Epic_Bar โ alongside standard ingots.
1. Register the custom item for display naming and admin support:
"customItems": {
"Skull_Skeleton_Epic_Bar": "Skeleton Skull Bar"
}
2. Add it as a material requirement for high-level reforging:
"levels": {
"9": {
"successChance": 0.15,
"weaponDamageBonus": 9.0,
"armorDefenseBonus": 7.5,
"coinCost": 3000.0,
"materials": [
{ "itemId": "Ingredient_Bar_Adamantite", "count": 4 },
{ "itemId": "Skull_Skeleton_Epic_Bar", "count": 2 }
]
}
}
3. (Optional) Add a reverse recipe so materials are refunded on failure:
"reverseRecipes": {
"Weapon_Sword_Adamantite": [
{ "itemId": "Ingredient_Bar_Adamantite", "count": 12 },
{ "itemId": "Skull_Skeleton_Epic_Bar", "count": 1 }
]
}
Result: The player GUI shows "Skeleton Skull Bar ร2" with the item's icon, and the admin panel includes "Skeleton Skull Bar" in the material cycle dropdown.
Scenario: Restricting Reforging to Specific Tiers
Only allow Iron and Cobalt weapons/armor to be reforged โ block higher tiers:
"allowedItems": {
"weapons": ["Weapon_Sword_Iron", "Weapon_Sword_Cobalt", "Weapon_Axe_Iron", "Weapon_Axe_Cobalt"],
"armor": ["Armor_Iron_*", "Armor_Cobalt_*"],
"excluded": []
}
Scenario: Easy-Mode Server (No Failures)
"general": {
"failureReturnRate": 1.0,
"protectionEnabled": true,
"protectionCostMultiplier": 1.0
},
"levels": {
"1": { "successChance": 1.0, ... },
"2": { "successChance": 0.95, ... }
}
Scenario: Hardcore Server (Severe Penalties)
"general": {
"failureReturnRate": 0.0,
"protectionEnabled": false
},
"levels": {
"1": { "successChance": 0.50, ... }
}
