Weaknesses and Rewards

Last updated Sep 18, 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

  1. Waiting timer ends and room locks.
  2. Random weaknesses are offered in chat (clickable).
  3. Players vote with clicks or /sf vote <number>.
  4. Winner applies for the whole run.
  5. 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% reward-roll chance via fractional extras). Stacks with party scaling rewards.roll-multiplier-per-player.

Built-in weaknesses

ID Effect Multiplier
no-sprint Cannot sprint 1.3
exposed Cannot sneak 1.25
half-hearts 50% max health 1.5
soft-spot Take 25% more damage 1.35
no-healing No natural / regen healing 1.5
no-shield No shields + take 20% more damage (Open Guard) 1.4
no-crits Crits deal normal damage 1.3
slow-hands −40% attack speed 1.3
short-reach 50% melee reach 1.3
weakness-effect Reduced melee damage 1.35
mining-fatigue Mining fatigue (slow swings) 1.25
fragile-armor Double durability loss 1.2
no-jumping Cannot jump 1.35
heavy-gravity Higher gravity 1.4
slowness Reduced speed 1.25
hunger-drain Continuous hunger loss 1.3
blindness Limited vision 1.4
darkness Short visibility 1.45
poison Constant poison 1.5
no-food Cannot eat food 1.35
no-potions Cannot drink or throw potions 1.4
no-ranged Bows / crossbows / tridents blocked 1.25
no-totems Totems of Undying do not activate 1.3
heavy-hit Stronger knockback taken 1.35
bleeding Hits apply brief wither 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:
  - "broadcast:&e{players} &7cleared &6{room} &7in &a{time}"
  - "message:&7Your kills: &a{kills}"
  - "eco give {player} 100"

Placeholders: {player}, {players}, {room}, {time}, {kills}, {total_kills}, {floors}.

Commands run as console for each player on victory. Both victory.reward-commands and table commands support message: and broadcast: prefixes.

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 Weighted picks per player
tables.<name>.unique-rolls No duplicate weighted entry on one completion
tables.<name>.entries Guaranteed and/or weighted reward entries

Each entry:

Field Description
weight Relative chance (ignored when guaranteed: true)
guaranteed Always granted once before weighted rolls
commands Console commands; supports message: / broadcast: prefixes
message Optional MiniMessage to the player

Placeholders: {player}, {room}, {time}, {kills}, {total_kills}, {floors}.

Weakness × party multipliers apply fractional extras (e.g. rolls 1 × 1.3 → one roll plus a 30% chance of a second), not a hard ceil.

Example table

tables:
  basic:
    rolls: 1
    entries:
      - weight: 50
        message: "<green>+50 Coins!</green>"
        commands:
          - "eco give {player} 50"
  hard:
    rolls: 2
    unique-rolls: true
    entries:
      - guaranteed: true
        commands:
          - "eco give {player} 75"
      - weight: 40
        commands:
          - "eco give {player} 200"

Shipped examples: basic, hard.

Multiplier stacking

Final reward rolls consider:

  1. Weakness multiplier (if any)
  2. Party scaling rewards.roll-multiplier-per-player

Higher risk runs with more players earn more reward chances.