Weaknesses and Rewards
Last updated Jul 6, 2026
Weaknesses and Rewards
Optional challenge modifiers and completion rewards.
Weakness system
File: plugins/SoapsFloor/weaknesses.yml
| Key | Default | Description |
|---|---|---|
enabled |
true |
Master toggle |
voting.duration |
15 |
Vote time in seconds |
voting.options-count |
3 |
Random options shown |
voting.allow-no-weakness |
true |
Include "No Weakness" choice |
Vote flow
- Waiting timer ends and room locks.
- Random weaknesses are offered in chat (clickable).
- Players vote with clicks or
/sf vote <number>. - Winner applies for the whole run.
- Countdown starts after voting ends.
/sf vote has no separate permission. Players must be in an active vote.
Reward multiplier
Each weakness has a multiplier (e.g. 1.5 = 50% more reward rolls). Stacks with party scaling rewards.roll-multiplier-per-player.
Built-in weaknesses
| ID | Effect | Multiplier |
|---|---|---|
no-sprint |
Cannot sprint | 1.3 |
half-hearts |
50% max health | 1.5 |
blindness |
Limited vision | 1.4 |
slowness |
Reduced speed | 1.25 |
no-shield |
Shields blocked | 1.3 |
hunger-drain |
Continuous hunger loss | 1.2 |
glowing |
Visible through walls | 1.1 |
nausea |
Distorted vision | 1.3 |
no-healing |
No natural regen | 1.5 |
mining-fatigue |
Reduced attack speed | 1.2 |
weakness-effect |
Reduced melee damage | 1.35 |
fragile-armor |
Double armor durability loss | 1.25 |
no-jumping |
Cannot jump | 1.35 |
poison |
Constant poison | 1.5 |
darkness |
Small visibility radius | 1.45 |
short-reach |
50% attack reach | 1.3 |
heavy-gravity |
Higher gravity | 1.4 |
Set enabled: false on any entry to remove it from the vote pool.
Global victory rewards
In config.yml under victory.reward-commands:
reward-commands:
- "say {player} completed {room} in {time}!"
Placeholders: {player}, {room}, {time}, {kills}, {floors}.
Commands run as console for each player on victory.
Reward tables
File: plugins/SoapsFloor/rewards.yml
Weighted tables assigned per room with /sf setreward.
| Command | Permission | Description |
|---|---|---|
/sf setreward <room> <table> |
soapsfloor.admin.setreward |
Assign table |
/sf setreward <room> none |
soapsfloor.admin.setreward |
Clear table |
rewards.yml structure
| Key | Description |
|---|---|
append-to-global-rewards |
true = table rolls plus global commands |
tables.<name>.rolls |
Number of random picks per completion |
tables.<name>.entries |
Weighted reward entries |
Each entry:
| Field | Description |
|---|---|
weight |
Relative chance |
commands |
Console commands (same placeholders as victory) |
message |
Optional MiniMessage to the player |
Example table
tables:
basic:
rolls: 1
entries:
- weight: 50
message: "<green>+50 Coins!</green>"
commands:
- "eco give {player} 50"
Shipped examples: basic, hard.
Multiplier stacking
Final reward rolls consider:
- Weakness multiplier (if any)
- Party scaling
rewards.roll-multiplier-per-player
Higher risk runs with more players earn more reward chances.