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

  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% 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:

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

Higher risk runs with more players earn more reward chances.

Discord