Rules Are Mandatory

Rules Are Mandatory

A highly customizable 1.20-26.2 Paper plugin that forces players to accept server rules before playing, using Java clickable chat/Bedrock Geyser API.

129 downloads 0 followers

RulesAreMandatory (RSAM)

A Paper 1.20+ plugin that forces players to accept server rules before they can move, break blocks, chat, or interact. Features a clickable chat UI for Java Edition and a native form for Bedrock Edition via Geyser API.

(Gallery showcase will be added later)

Features
  • Fully customizable: Edit any features to your liking, set custom messages and titles
  • Paginated rules (configurable items per page)
  • Java Edition: Clickable chat buttons via Adventure API (accept / decline / page navigation)
  • Bedrock Edition: Native GUI form via Geyser API + Cumulus
  • Freeze system — players are immobilized until they accept the rules
    • BlockMovement — teleports player back on movement
    • BlockCamera — locks yaw/pitch, prevents looking around
    • Blindness (optional) — applies blindness effect while frozen
    • Walk speed & fly speed forced to 0, flying enforced
    • Compatible with AuthMe / login plugins — periodic enforcement task overrides any external changes
  • Full interaction lockdown:
    • Chat blocked
    • Commands blocked (except for login/register and plugin commands, allow-list configurable)
    • Block breaking/placing blocked
    • Entity damage blocked
    • Force Adventure game mode
  • Rule versioning — bump Version in rules.yml to force all players to re-accept
  • Title system — on-screen title on join / show rules / accept / decline (configurable per section)
  • ForceOP — toggle whether operators must also accept rules
  • Re-accept timer — force players to re-accept after N days
  • Admin commands:
    • /rsam reload — hot-reload configs
    • /rsam reset <player> — reset a player's acceptance
    • /rsam approve <player> — force-accept rules for a player
    • /rsam player [player] — check player acceptance status
  • ↹ Tab completion for all subcommands
Commands
Command Description Permission
/rsam List subcommands rsam.user.rules
/rsam rules Show rules (paginated) rsam.user.rules
/rsam accept Accept the rules rsam.user.rules
/rsam decline Decline the rules rsam.user.rules
/rsam reload Reload config files rsam.admin.reload
/rsam reset <player> Reset player's acceptance rsam.admin.reset
/rsam approve <player> Force-accept for a player rsam.admin.approve
/rsam player [player] Check player info rsam.admin.info

All admin commands work from console / RCon.

Aliases: /rule shows rules directly. (/rules gets intercepted by vanilla rules command)

Config, examples and permissions

Config files (in plugins/RulesAreMandatory/)

File Purpose
settings.yml Main config — menus, freeze, blocks, titles, misc
messages.yml All chat messages (prefix: [RSAM])
rules.yml Rule list + version (bump Version to force re-accept)
players.yml Player data (auto-generated)

Freeze customization (settings.yml → Freeze:)

Freeze:
  Enabled: true
  BlockMovement: true    # teleport back when moving
  BlockCamera: true      # lock yaw/pitch (can't look around)
  AllowLook: true         # allow camera when BlockCamera is false
  Blindness: false       # apply blindness effect while frozen

Permissions

Permission Default Description
rsam.user.rules true Basic player commands
rsam.user.bypass false Skip rule acceptance entirely
rsam.admin.* op All admin permissions
rsam.admin.reload op Reload config
rsam.admin.reset op Reset a player
rsam.admin.approve op Force-accept for a player
rsam.admin.info op Check player info

Config example:

# ─────────────────────────────────────────────────────────────
#  RulesAreMandatory — Settings
# ─────────────────────────────────────────────────────────────
# ConfigVersion — increment to auto-reset config on next reload.
ConfigVersion: 3

# ── Debug ──────────────────────────────────────────────────
# Set true to see freeze state in server console
Debug: false

Menu:
  BackBtn: '&3<< &2Back'
  NextBtn: '&2Next &3>>'
  AcceptBtn: '&2>> Accept <<'
  DenyBtn: '&4>> Deny <<'
  Spacer: ' '

Page:
  ItemsPerPage: 4
  Cooldown: 3

Divider:
  Top: '&6------------------[ %page% / %maxpage% ]------------------'
  Bottom: '&6---------------------------------------------'
  AcceptTop: '&6---------------------------------------------'
  AcceptBottom: '&6---------------------------------------------'
  InfoTop: '&6---------------------------------------------'
  InfoBottom: '&6---------------------------------------------'
  Default: '&6---------------------------------------------'

Actions:
  OnAccept:
    - 'say Player &6%player% &faccepted the server rules!'
  OnDecline:
    - 'say Player &3%player% &fdeclined the rules!'
    - |-
      kick %player% Hello %player%,
      please accept our rules before playing on the server!
  AllowedBeforeAccept:
    - rsam
    - rule
    - register
    - login

Greeting:
  Enabled: true
  Delay: 0

Freeze:
  Enabled: true
  MessageCooldown: 3
  AllowLook: true          # false = camera locked, true = player can look around
  BlockCamera: true        # false = can look around, true = yaw/pitch fixed
  BlockMovement: true      # false = can move (still adventure mode), true = teleport back
  Blindness: false         # true = give Blindness while frozen

Misc:
  ForceOP: true
  ForceAdventure: true
  AcceptGameMode: SURVIVAL
  SkipWorlds: []

Block:
  Chat: true
  Commands: true
  Interact: true
  MsgCooldown: 3

Reaccept:
  Enabled: false
  Days: 90

# ─────────────────────────────────────────────────────────────
#  Title / on-screen display
#  Per-section Enabled toggle
# ─────────────────────────────────────────────────────────────
Title:
  OnJoin:
    Enabled: true
    Title: '&6&lRulesAreMandatory'
    Subtitle: '&eRead the rules below'
    FadeIn: 10
    Stay: 70
    FadeOut: 20

  OnShowRules:
    Enabled: true
    Title: '&6&lServer Rules'
    Subtitle: '&ePlease read carefully'
    FadeIn: 10
    Stay: 70
    FadeOut: 20

  OnAccept:
    Enabled: true
    Title: '&a&l✔ Rules Accepted!'
    Subtitle: '&eWelcome to the server!'
    FadeIn: 10
    Stay: 60
    FadeOut: 20

  OnDecline:
    Enabled: true
    Title: '&c&l✘ Rules Declined'
    Subtitle: '&eYou will be kicked'
    FadeIn: 10
    Stay: 60
    FadeOut: 20

Dependencies

  • Paper 1.20+ — required
  • Geyser-Spigot — optional (Bedrock forms)

Plugin inspired by AcceptTheRules

No gallery available for this project.

Version Minecraft Loader Download

Rules Are Mandatory 1.0.0

1.0.0

1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.10, 1.21.11, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 26.1, 26.1.1, 26.1.2, 26.2
folia, paper, purpur
Download