Medieval Roleplay Engine
0
First released June 9, 2020 · Last updated October 7, 2026
Downloads from this site
180 total
11 latest (v1.16.1)
Facilitates roleplay between players.
Usage
9
Active servers (30 days)
Last reported in use 3 hours ago
301 server starts in the last 30 days
Server starts per day
Versions in use, by share of active servers
1.16.1
100% · 9 servers
Usage reported by trace — how it works. CI and test servers are excluded.
Verified before release
Version 1.16.1 was started on real servers running Minecraft 1.19.4, 1.21.11, 26.2 and 26.3 before it was published. The jar you download is the exact one that passed. How releases work
Versions
All releases on GitHubAutomated build of main at b4616b48a2bfe9ed50e73609d43bb9d5ce26b6d7.
This is not a release. It is unreleased, unreviewed code that has not been through any release check, and a broken build can stop a server from starting. Do not run it on a server you care about without a backup.
Install it with Dan's Plugin Manager:
/dpm get medievalroleplayengine --experimentalReturn to published releases with /dpm get medievalroleplayengine --stable.
1.16.1
A server running v1.16.0 can drop this release in with nothing else to do. Usage reporting works the same way as before. It sends the same data to the same endpoint, uses the same random server ID from plugins/trace/config.yml, and turns off the same ways. The only change you will see is the link to the usage-reporting details page.
Changes
Usage reporting
- The details link in the startup message and in the default
config.ymlcomment now points to https://danielstephenson.dev/usage-reporting. If this plugin is the first to createplugins/trace/config.yml, that file's header comment uses the new link too. Existing files are not changed. - Updated the bundled usage-reporting client to 0.6.1. This release does not change what is reported or how the server ID is chosen.
Version
v1.16.0 → 1.16.1 — PATCH. Mechanical floor from comparing the two jars: PATCH.
Judgment: The only API additions (installIdFromFile, Builder.installIdFile) are in the bundled trace usage-reporting client, which was updated from 0.5.0 to 0.6.1. The plugin never calls them, so nothing changes at runtime: it still takes its install ID from server-id in plugins/trace/config.yml. The only change an operator can see is the usage-reporting details link, which now points to https://danielstephenson.dev/usage-reporting in the config.yml comment, the startup log line and a newly created plugins/trace/config.yml. No data format, command, permission or config meaning changes, so patch stays.
- no interface or storage difference observed between the jars
<details><summary>Java API changes (informational — nothing depends on this plugin)</summary>
- dansplugins.rpsystem.trace.TraceClient: added public static java.lang.String installIdFromFile(java.io.File);
- dansplugins.rpsystem.trace.TraceClient$Builder: added public dansplugins.rpsystem.trace.TraceClient$Builder installIdFile(java.io.File);
</details>
Verification
Verified on a real Spigot server before publication; this release carries the exact jar that was verified.
- boot gate run: booted twice on a fresh Spigot server running Minecraft 1.19.4 (11 assertions passed).
- boot gate run: booted twice on a fresh Spigot server running Minecraft 1.21.11 (11 assertions passed).
- boot gate run: booted twice on a fresh Spigot server running Minecraft 26.2 (11 assertions passed).
- boot gate run: booted twice on a fresh Spigot server running Minecraft 26.3 (11 assertions passed).
- save-compatibility gate run: data written by
v1.16.0was loaded by this release across two restarts with nothing lost (16 assertions passed).
Install with Dan's Plugin Manager: /dpm get <plugin>. How stable releases are made: Release channels.
drafted by Claude on behalf of Daniel Stephenson
1.16.0
For a server running v1.15.1, this is a drop-in upgrade. Roleplay features, commands, permissions and stored data are unchanged. The change is in usage reporting. If reporting is enabled (the default), the first start after upgrading appends a randomly generated server-id line to plugins/trace/config.yml. From then on, every usage event carries that ID and the plugin version, so distinct servers can be counted. The ID is random and identifies no player, account or IP address. Servers that have turned reporting off, through usage-reporting.enabled: false, enabled: false in plugins/trace/config.yml, or the environment opt-out, never generate or write one.
Changes
Compatibility
- Minecraft 26.3 is now a declared supported version, alongside 1.19.4, 1.21.11 and 26.2. The plugin's Bukkit API use is checked against each of them (#359, #350).
Usage reporting
- Each usage event now carries a random per-server ID, stored as
server-idinplugins/trace/config.ymland created on first start when reporting is enabled. Delete the line to get a new ID (#356). - The startup log line and the
config.ymlcomment now mention the random server ID (#358, #356). - Every usage event, including command events and not just startup, is now tagged with the plugin version (#352).
plugins/trace/config.ymlsupports an optionaltags:block that adds tags to every event from every trace-reporting plugin on the server. For example,ci: "true"on a test server keeps its events out of real-installation figures. Newly created files include a commented-out example (#351).
Version
v1.15.1 → 1.16.0 — MINOR. Mechanical floor from comparing the two jars: PATCH.
Judgment: The mechanical check flagged only INFO-level changes to the vendored TraceClient. It cannot see that the plugin now writes new data to disk: on first start with reporting enabled, a random server-id line is appended to plugins/trace/config.yml, and every usage event now carries it as an install tag. The server-wide trace config also gains an optional tags: block. Together these are new behaviour and new persisted data, so the floor rises to minor. Nothing breaks for an existing server: no plugin data format, command, permission or config key changes meaning, and TraceClient is a vendored internal helper rather than a public API that other plugins consume.
- no interface or storage difference observed between the jars
<details><summary>Java API changes (informational — nothing depends on this plugin)</summary>
- dansplugins.rpsystem.trace.TraceClient: removed/changed public static dansplugins.rpsystem.trace.TraceClient$Builder builder(java.lang.String, java.lang.String);
- dansplugins.rpsystem.trace.TraceClient: added public java.lang.String installId();
- dansplugins.rpsystem.trace.TraceClient: added public static dansplugins.rpsystem.trace.TraceClient$Builder builder(java.lang.String, java.lang.String, java.lang.String);
- dansplugins.rpsystem.trace.TraceClient: added public static final java.lang.String VERSION;
- dansplugins.rpsystem.trace.TraceClient$Builder: added public dansplugins.rpsystem.trace.TraceClient$Builder installId(java.lang.String);
</details>
Verification
Verified on a real Spigot server before publication; this release carries the exact jar that was verified.
- boot gate run: booted twice on a fresh Spigot server running Minecraft 1.19.4 (11 assertions passed).
- boot gate run: booted twice on a fresh Spigot server running Minecraft 1.21.11 (11 assertions passed).
- boot gate run: booted twice on a fresh Spigot server running Minecraft 26.2 (11 assertions passed).
- boot gate run: booted twice on a fresh Spigot server running Minecraft 26.3 (11 assertions passed).
- save-compatibility gate run: data written by
v1.15.1was loaded by this release across two restarts with nothing lost (16 assertions passed).
Install with Dan's Plugin Manager: /dpm get <plugin>. How stable releases are made: Release channels.
drafted by Claude on behalf of Daniel Stephenson
1.15.1
For a server running v1.15.0, this release has no functional differences. Commands, permissions, configuration and stored data all work exactly as before, so upgrading is optional and safe.
Changes
- No operator-facing changes in this release.
Version
v1.15.0 → 1.15.1 — PATCH. Mechanical floor from comparing the two jars: PATCH.
Judgment: The only change since v1.15.0 is the version string in pom.xml moving to 1.15.1-SNAPSHOT (#344). This is release plumbing. It doesn't change commands, config, permissions, stored data or the API. Nothing justifies going above the mechanical floor, so the level stays at patch.
- no interface or storage difference observed between the jars
Verification
Verified on a real Spigot server before publication; this release carries the exact jar that was verified.
- boot gate run: booted twice on a fresh Spigot server (10 assertions passed).
- save-compatibility gate run: data written by
v1.15.0was loaded by this release across two restarts with nothing lost (16 assertions passed).
Install with Dan's Plugin Manager: /dpm get <plugin>. How stable releases are made: Release channels.
drafted by Claude on behalf of Daniel Stephenson
1.15.0
Upgrading from v1.14.0 is a drop-in replacement: character cards, commands and existing permission grants all keep working. The two things you will notice are that /roll now understands D&D-style dice notation with a new result message, and that the plugin now reports anonymous usage events (plugin name, version and command names — nothing about players or your server) to the author's trace server by default. The plugin says on every startup whether reporting is on and how to turn it off; the opt-out is a single config key, described under Upgrade notes.
Changes
Usage reporting
- The plugin sends a small usage event on startup and one per command, containing only the plugin name, version and command name. Sending happens off the main thread, is capped to a small queue and is dropped silently if the server is unreachable (#338)
- Reporting can be turned off per plugin with
usage-reporting.enabled: false, server-wide withenabled: falseinplugins/trace/config.yml(created on first start), or with theTRACE_USAGE_REPORTING=off/DO_NOT_TRACK=1environment variables. A startup log line states whether reporting is on and, if off, why (#338, #341) - Existing
config.ymlfiles gain a commentedusage-reportingblock automatically so the switch is visible where you would look for it;/rpconfig showlists it and/rpconfig set usage-reporting.enabledtoggles it (#341)
Dice
/rolland/diceaccept standard notation such as2d6,d20,1d20+5and3d8-1; a plain number is still treated as a die size. Individual rolls, the modifier and the total are shown, and the roller always sees their own result. Limits: 100 dice, d10000, modifier ±10000 (#317)
Permissions and commands
rp.card.*is now registered in plugin.yml as a parent of the nine card nodes (show, lookup, help, name, race, subculture, religion, age, gender), so permission plugins that expand wildcards grant it correctly (#335)/rphelpnow honoursrp.help, the node actually registered in plugin.yml;rp.rphelpcontinues to work for servers that already grant it (#328)- Right-clicking a player to view their card now honours
rp.card.lookup;rp.card.show.otherscontinues to work. Players without permission are no longer placed on the two-second cooldown (#328) /lo hideand/lo showonly act as sub-commands when typed alone; a message beginning with "hide" or "show" is sent as a message (#328)/cardtells a player when they have no character card instead of failing silently;/lonames the correct node (rp.localOOC) in its permission error (#316, #328)
Configuration
- A misspelled
neurtalAlertColorkey in an existing config is migrated toneutralAlertColor, preserving its value (#332) - Upgrade-path defaults now match a fresh install: a config missing
emoteColorgetsgrayand one missinglogChatgetstrue. Keys already present are left untouched (#332, #334)
Robustness
- PlaceholderAPI
card_*placeholders return empty for a player with no character card instead of throwing (#320) - Card entries with an unreadable UUID are skipped on load rather than aborting the load; card lookups tolerate a null UUID (#316)
- Chat radius checks no longer fail when a player's world is unavailable (#316)
Upgrade notes
- Usage reporting is on by default after this upgrade. To turn it off for this plugin, set
usage-reporting.enabled: falseinplugins/MedievalRoleplayEngine/config.yml; to turn it off for every trace-reporting plugin on the server, setenabled: falseinplugins/trace/config.yml. Check the startup log to confirm the state you want. - If your permission plugin grants
rp.card.*, it now also grants the nine child card nodes as intended.rp.card.forcesaveandrp.card.forceloadare deliberately not included.
Version
v1.14.0 → 1.15.0 — MINOR. Mechanical floor from comparing the two jars: MINOR.
Judgment: Nothing here breaks a server upgrading from v1.14.0: the card file format is unchanged, /roll still accepts its old plain-number argument, and every permission change is additive (rp.help and rp.card.lookup are now honoured while rp.rphelp and rp.card.show.others still work). The significant new behaviour is usage reporting, which is on by default, writes a new plugins/trace/config.yml and backfills a usage-reporting block into existing config.yml files; that is new behaviour and new data written, not an incompatible change, so it warrants minor rather than major. The pom was bumped to a 2.0.0 snapshot in a chore commit, but no change in the diff meets the bar for a major release.
- minor: permission added: rp.card.*
- minor: default config key added: usage-reporting.enabled
- minor: default config key added: usage-reporting.endpoint
- minor: default config key added: usage-reporting.key
- minor: storage path changed: src/main/java/dansplugins/rpsystem/cards/CardRepository.java
- minor: storage path changed: src/main/java/dansplugins/rpsystem/cards/CharacterCard.java
- minor: storage path changed: src/main/java/dansplugins/rpsystem/storage/StorageService.java
<details><summary>Java API changes (informational — nothing depends on this plugin)</summary>
- public class added: dansplugins.rpsystem.trace.TraceClient
- public class added: dansplugins.rpsystem.trace.TraceClient$Builder
- dansplugins.rpsystem.config.ConfigService: added public boolean isUsageReportingEnabled();
- dansplugins.rpsystem.config.ConfigService: added public java.lang.String getUsageReportingEndpoint();
- dansplugins.rpsystem.config.ConfigService: added public java.lang.String getUsageReportingKey();
- dansplugins.rpsystem.config.ConfigService: added public void ensureUsageReportingBlockOnDisk();
</details>
Verification
Booted twice on a real Spigot server before publication — boot gate run (10 assertions passed). This release carries the exact jar that was verified.
Install with Dan's Plugin Manager: /dpm get <plugin>. How stable releases are made: Release channels.
drafted by Claude on behalf of Daniel Stephenson
Snapshot release marking Medieval-Roleplay-Engine's move to an AI-first development approach.
Day-to-day feature work, grooming, review and maintenance now run through AI agents working directly against this repository, with the maintainers setting direction and approving what lands. The version bump marks that change in how the project is built — it is not a compatibility break. Behaviour, configuration and stored data are unchanged, and existing installations can upgrade in place.
This is a dated snapshot, not a finished release. It follows the precedent set by Medieval
Factions' 6.0.0-SNAPSHOT-7-25-2026: the AI-first line has not yet been verified in live operation,
and the snapshot designation stays until it has.
Version changes
pom.xml:1.14.0→2.0.0-SNAPSHOT-8-8-2026
Opened as https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/pull/326.
Drafted by Claude on behalf of Daniel Stephenson.
What's Changed
- Repository housekeeping: The codebase has been realigned to follow DPC conventions, keeping the project consistent with broader plugin ecosystem standards. (#312)
- Bug fix —
/rollcommand: The/rollcommand previously failed silently when called without arguments, giving players no feedback. This has been resolved so the command now responds appropriately. (#314)
Full Changelog
What's Changed
- Modified Messenger to log all chats to console
- Added dev container to ease development
- Added test container to ease testing
Full Changelog: https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/compare/v1.12.0...v1.13.0
What's Changed
- Feature - Configure bird speed by @dmccoystephenson in https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/pull/294
Full Changelog: https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/compare/v1.11.0...v1.12.0
What's Changed
- Update issue templates by @dmccoystephenson in https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/pull/277
- Refactoring - No More Singleton by @dmccoystephenson in https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/pull/284
- Refactoring - Revert to Legacy Chat by @dmccoystephenson in https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/pull/286
- Docker - Removing Dev Container Files by @dmccoystephenson in https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/pull/287
- Feature - Support Spaces by @dmccoystephenson in https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/pull/288
- Bug Fix - Validate Age Input by @dmccoystephenson in https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/pull/290
Full Changelog: https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/compare/1.10...v1.11.0
What's Changed
- Update issue templates by @dmccoystephenson in https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/pull/277
- Refactoring - No More Singleton by @dmccoystephenson in https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/pull/284
- Refactoring - Revert to Legacy Chat by @dmccoystephenson in https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/pull/286
- Docker - Removing Dev Container Files by @dmccoystephenson in https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/pull/287
- Feature - Support Spaces by @dmccoystephenson in https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/pull/288
- Bug Fix - Validate Age Input by @dmccoystephenson in https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/pull/290
Full Changelog: https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/compare/1.10...1.11.0-beta.1
What's Changed
- Integrated Mailboxes with the plugin.
- Fixed MF & Mailboxes integration errors. by @dmccoystephenson in https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/pull/266
Full Changelog: https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/compare/v1.9...1.10
What's Changed
- Revamp by @dmccoystephenson in https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/pull/256
- Updating Ponder to v0.13 by @dmccoystephenson in https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/pull/260
- Fixes Issue #206 NPE on Citizen NPC interaction by @Mr-Deej in https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/pull/261
- Updated Ponder to 1.0 by @dmccoystephenson in https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/pull/263
New Contributors
- @Mr-Deej made their first contribution in https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/pull/261
Full Changelog: https://github.com/Dans-Plugins/Medieval-Roleplay-Engine/compare/v1.10-beta-1...2.0-ALPHA-5-6-2022
Note
This version of the plugin is not compatible with 1.x saves and is not recommended for use in production.
Changes in Medieval Roleplay Engine v1.10-beta-1
- Integrated Mailboxes with the plugin.
- If a player is offline when they are sent a bird, the contents of the message will now be stored in the player's mailbox. (Requires Mailboxes)
Changes in Medieval Roleplay Engine v1.9
- Integrated Medieval Factions with the plugin.
- If a player is in a faction, their faction's name will be shown when their character card is displayed. (Requires Medieval Factions)
- A player's power will now be shown when their character card is displayed. (Requires Medieval Factions)
- Optimized the /card command.
- Added the /card lookup command, altering the functionality of character card lookups.
- Implemented a caching system for character card lookups.
Changes in Medieval Roleplay Engine v1.9-beta-2
- Added the /card lookup command.
- Implemented a caching system for character card lookups.
Changes in Medieval Roleplay Engine v1.9-beta-1
- Integrated Medieval Factions with the plugin.
- If a player is in a faction, their faction's name will be displayed when their character card is displayed.
- Optimized the /card command.
Optimization
Previously, if one of the sub-commands of the card command wasn't matched with what the player entered, it would search through every player that has ever logged in and then search through every card record, every time. Now, the player will be searched and if it isn't found, the card lookup won't occur. I'm hoping this makes card lookups run significantly faster.
Changes in Medieval Roleplay Engine v1.8
- Caibinus integrated PlaceholderAPI with the plugin.
- Integrated Medieval Factions with the plugin.
- If a player is in faction chat and RP chat, their chat event will be cancelled. (if MF is installed)
- Fixed an ArrayOutOfBoundsException error printing in the console when players typed /lo with no arguments.
- Fixed a NullPointerException error printing in the console.
- Added the "positiveAlertColor" config option.
- Added the "neutralAlertColor" config option.
- Added the "negativeAlertColor" config option.
- Added the "chatFeaturesEnabled" config option.
- Added the "debugMode" config option.
- Created a config option for legacy chat, then refactored the chat system to allow players to hide global.
- Made sure that the chat system worked with prefixes in Medieval Factions.
Note
This version of the plugin works with the Medieval Factions API in version 4.2.2-alpha-3 of Medieval Factions. You may run into problems when using an earlier version of Medieval Factions with this version of Medieval Roleplay Engine.
Changes in v1.8-alpha-1
- Caibinus integrated PlaceholderAPI with the plugin.
- Medieval Factions has been integrated with the plugin. If a player is in RP and faction chat, their message will not be sent in RP chat.
Changes in Medieval Roleplay Engine v1.7
- Only the /ooc and /rp commands are listed in the output of the help command now so players don't get confused with /local and /global.
- Changed the default emote color to yellow.
- Caibinus integrated Placeholder API into the plugin.
- Made it so that anything within astericks in local chat gets printed after as an emote.
- Made sure the plugin works on 1.17.
Changes in Medieval Roleplay Engine v1.6.1-beta-2
- Only the /ooc and /rp commands are listed in the output of the help command now so players don't get confused with /local and /global.
- Changed the default emote color to yellow
- Caibinus integrated Placeholder API into the plugin.
Related plugins
Lets a Medieval Factions faction hold elections: members stand as candidates, vote, and follow the count.
Allows server owners to add cooking recipes for an enhanced roleplay experience.
Renders Medieval Factions claims on BlueMap's web map. Originally written by Kilz.
An expansion for Medieval Factions that allows faction owners to create and mint local currencies.
Something wrong, or something missing?
Bugs go to the plugin's issue tracker, where they can actually be fixed and tracked. Ideas for new behaviour go to the Dev Portal, where the community can upvote them.
