It skipped a bunch of version numbers so its consistent with my curseforge versions. (so I dont have to keep changing stuff)
## New basic config
* `initialMaxStamina` (Default: `100.0`): The starting maximum stamina value for all players. This sets the base attribute value that penalties and modifiers are calculated against.
## Weight System
The Weight System tracks the total weight of items in your inventory and applies penalties when you carry too much.
### How It Works
**Weight Calculation:**
- Every item has a weight value
- Weight is calculated from inventory, armor, offhand, and Curios slots (if installed)
- Containers (shulkers, backpacks, etc.) include the weight of their contents
- Weight accumulates recursively (should work with backpacks inside backpacks if thats possible)
**Weight Penalty:**
- When your total weight exceeds the threshold, a penalty begins to apply
- The penalty scales linearly from threshold to limit
- At maximum weight, you suffer the full configured penalty to Max Stamina
- Weight penalty is displayed as a gray striped section on the stamina bar
### Configuration
**General Settings:**
```toml
[Weight System]
# Enable the weight calculation system
enableWeightSystem = true
# Weight at which penalty begins (0% penalty)
weightPenaltyThreshold = 125.0
# Weight at which penalty reaches maximum (100% penalty)
weightPenaltyLimit = 400.0
# Maximum stamina penalty at full weight limit
maxWeightPenaltyAmount = 40.0
# Maximum depth for recursive container scanning (prevents lag)
maxWeightRecursionDepth = 3
```
**Auto-Weigher (Heuristic System):**
```toml
# Base weight for unlisted items
# Formula: Weight = (Base / MaxStackSize) * Count
# Result: 1 full stack of ANY item = Base weight
#
# Examples (if Base = 10):
# - 1 Sword (stack 1) = 10.0 weight
# - 16 Ender Pearls (stack 16) = 10.0 weight (0.625 per pearl)
# - 64 Dirt (stack 64) = 10.0 weight (0.156 per block)
autoWeightBase = 10.0
```
**Priority 1: Explicit Item Weights**
Items in this list bypass the auto-weigher entirely.
```toml
# Format: 'modid:item;weight'
# Each individual item has this weight (not per stack)
#
# Examples:
customItemWeights = [
"minecraft:netherite_chestplate;15.0",
"minecraft:diamond_sword;4.0",
"minecraft:obsidian;1.2" # Each obsidian block = 1.2 weight
]
```
**Priority 2: Tag/Category Weights**
Items matching these tags (but not in explicit list) use tag weight.
```toml
# Format: 'tag;weight'
# Each individual item in the tag has this weight
#
# Examples:
customTagWeights = [
"forge:ores;0.25", # Each ore = 0.25 weight
"forge:storage_blocks;0.15", # Each storage block = 0.15 weight
"forge:ingots;0.2" # Each ingot = 0.2 weight
]
```
**Priority 3: Auto-Weigher**
Any item not in the above lists uses the heuristic formula.
**Custom Container Paths:**
For backpack mods that store items in NBT:
```toml
# Format: 'modid:item;path.to.list'
# Use dots (.) for nested NBT tags
#
# Built-in support:
# - Vanilla Shulker Boxes (BlockEntityTag.Items)
# - Curios API
# - PackedUp (via reflection)
#
# Examples for other mods:
customContainerPaths = [
"somemod:satchel;Inventory",
"anothermod:backpack;StorageTag.Items"
]
```
### Weight Limit Attribute
Players can increase their weight capacity using the `weight_limit` attribute:
- Base value: 0.0
- Adds 0.5 weight capacity per point to both threshold and limit
- Example: +20 weight_limit = +10 threshold, +10 limit
**Command Example:**
```
/stamina attr weight_limit 40.0
```
### Client Configs
- **Color:** Gray (RGB: 5592405, configurable)
---
## Universal Penalties - Advanced Comparators
The Universal Penalties system now supports **Instant Application** and **Multiplier Mode** for more flexible mod integration.
### New Comparator Operators
**Instant Flag (`!`)**
- Prefix any comparator with `!` to apply penalties instantly
- Bypasses the gradual buildup/decay system
- Useful for sudden status changes
**Multiplier Mode (`*`)**
- Uses multiplication instead of linear scaling
- Penalty = (Difference × MaxPenalty)
- Can be combined with instant flag (`!*`)
- Two variants:
- `*` = Triggers when value is HIGHER than threshold
- `*<` = Triggers when value is LOWER than threshold
### Comparator Reference
| Operator | Mode | Behavior |
|----------|------|----------|
| `>` | Scale | Linear penalty from Threshold to WorstValue (increasing) |
| `<` | Scale | Linear penalty from Threshold to WorstValue (decreasing) |
| `*` | Multiply | Penalty per point above Threshold (capped at WorstValue) |
| `*<` | Multiply | Penalty per point below Threshold (capped at WorstValue) |
| `!>` | Instant Scale | Instant version of `>` |
| `!<` | Instant Scale | Instant version of `<` |
| `!*` | Instant Multiply | Instant version of `*` |
| `!*<` | Instant Multiply | Instant version of `*<` |
### Configuration Format
```toml
# Format: "Type;Key;Comparator;Threshold;WorstValue;MaxPenalty;ColorInt;IconText"
#
# Arguments:
# 1. Type: 'NBT' or 'EFFECT'
# 2. Key: NBT path (e.g. 'thirstLevel') or Effect ID
# 3. Comparator: >, <, *, *< (with optional ! prefix)
# 4. Threshold: Safe value where penalty starts (0%)
# 5. WorstValue: In SCALE: penalty = 100% | In MULTIPLY: hard cap
# 6. MaxPenalty: In SCALE: total penalty | In MULTIPLY: penalty per unit
# 7. ColorInt: Decimal color code (e.g. 16711680 = red)
# 8. IconText: Emoji/text for HUD (use 'none' to disable)
```
### Scale Mode Examples
**Default:**
```toml
# Thirst dropping from 6 to 0 gradually builds penalty 0→20
"NBT;thirstLevel;<;6;0;20.0;38143;💧"
# Temperature rising from 37 to 42 gradually builds penalty 0→25
"NBT;temperature;>;37;42;25.0;16724016;🔥"
# Wither I to IV gradually builds penalty 0→40
"EFFECT;minecraft:wither;>;-1;3;40.0;3355443;💀"
```
**Instant Application:**
```toml
# Thirst penalty applies immediately with no buildup
"NBT;thirstLevel;!<;6;0;20.0;38143;💧"
# Cold temperature penalty applies instantly
"NBT;targetTemperatureLevel;!<;2;0;15.0;65535;❄"
```
### Multiplier Mode Examples
**Gradual Buildup:**
```toml
# Below 6 thirst: each point lost adds 2.0 penalty (builds over time)
# Thirst 5 = 2.0, Thirst 4 = 4.0, Thirst 2 = 8.0 (capped at 30)
"NBT;thirstLevel;*<;6;30;2.0;38143;💧"
# Each poison level adds 5.0 penalty (builds over time)
# Poison I = 5.0, Poison II = 10.0, Poison III = 15.0 (capped at 50)
"EFFECT;minecraft:poison;*;0;50;5.0;4488448;☣"
# Above 10 radiation: each point adds 3.5 penalty (builds over time)
# Radiation 11 = 3.5, Radiation 15 = 17.5, Radiation 20 = 35.0 (capped at 100)
"NBT;radiation;*;10;100;3.5;65280;☢"
```
**Instant Application:**
```toml
# Below 6 thirst: each point instantly adds 2.0 penalty
"NBT;thirstLevel;!*<;6;30;2.0;38143;💧"
# Each poison level instantly adds 5.0 penalty
"EFFECT;minecraft:poison;!*;0;50;5.0;4488448;☣"
# Infection mod: each level instantly adds 10.0 penalty
"EFFECT;hordes:infected;!*;0;80;10.0;8388736;🦠"
```
### How It Works
**Scale Mode (`>` or `<`):**
1. Calculates ratio between current value and range
2. Applies MaxPenalty × ratio
3. Builds/decays gradually (or instantly with `!`)
**Multiplier Mode (`*` or `*<`):**
1. Calculates difference from threshold
2. Applies MaxPenalty × difference
3. WorstValue acts as hard cap instead of range endpoint
4. Builds/decays gradually (or instantly with `!`)
**Safe Room System:**
- All penalties compete for available stamina space
- Later penalties in the config list have lower priority
- Total penalties cannot reduce stamina below `minMaxStamina`
### Default Examples
```toml
universalPenalties = [
# Thirst (Tough As Nails) - Gradual scale from 6 to 0
"NBT;thirstLevel;*<;6;0;20.0;38143;💧",
# Heat (Tough As Nails) - Gradual scale from 2 to 4+
"NBT;targetTemperatureLevel;>;2;4;15.0;16724016;🔥",
# Cold (Tough As Nails) - Gradual scale from 2 to 0
"NBT;targetTemperatureLevel;<;2;0;15.0;65535;❄",
# Poison - Instant multiplier mode
"EFFECT;minecraft:poison;!*;0;50;15.0;4488448;☣"
]
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }