Installation and Environment
Previous: Overview · Next: Quick Start
Environment requirements
| Item | Requirement | Note |
|---|---|---|
| Server | Paper / Purpur / Spigot 1.21.11+ | QR places structures using the Bukkit native structure API, which requires a newer core |
| Java | 25+ | Consistent with the rest of the Qinhuai suite |
| Hard dependency | QinhCoreLib | Must be installed first; without it, QR simply won't enable |
On startup QR self-checks: if QCL isn't loaded → it logs an error to the console and disables itself; if the server version doesn't match → it disables itself the same way. When you see that QinhRuins x.xx.x logo banner in the log, it means enabling succeeded.
Installation steps
- First put QinhCoreLib into
plugins/(it's the foundation of the whole suite). - Put the QinhRuins jar into
plugins/. - (Optional) Install any soft dependencies you need (see the table below).
- Start the server. On first launch, QR releases a full set of default resources into
plugins/QinhRuins/:config.yml— the main configurationtemplates/_example/— an annotated ruin template example (folders starting with_are ignored and not loaded as real ruins)generators/*.yml— 17 built-in placement profilesloottables/*.yml— three example loot tables:default/vault/realmaffixes.yml— the affix libraryscripts/affix_example.js— an affix script examplelang/<language>/*.yml— text in 7 languages
- In-game, run
/qr versionto confirm the version, and/qrfor help.
Caution
After first launch, don't rush to delete _example — it's the best template to copy and modify from.
Soft dependencies and the degradation table
QR's backends are all auto-detected, with no manual configuration required. Whichever soft dependency is missing, the corresponding capability degrades gracefully and the plugin starts as usual:
| Soft dependency | Capability provided | What happens without it (degradation) |
|---|---|---|
| MythicMobs | Spawning custom mobs (mm-mobname in blueprints) | Mobs with the mm- prefix won't spawn; vanilla entity names work as usual |
| QinhClass / MMOCore | Source of player growth and party | Growth scaling degrades to neutral; parties degrade to QR's built-in temporary party (/qr party) |
| QinhItems / NeigeItems / MMOItems | Custom item references for loot / keystones / guide items | item: resolution from these sources fails and is skipped; vanilla: vanilla items work as usual |
| ItemsAdder / CraftEngine / Nexo | Resource-pack textures for keystones / guide items | Same as above, falling back to vanilla textures |
| PlaceholderAPI | All %qinhruins_*% placeholders, loot table condition placeholders | Placeholders aren't resolved; a loot condition is treated as always true |
| Vault / ExcellentEconomy / PlayerPoints | Realm currency rewards, entry cost, keystone reforge cost | Currency-related features are silently skipped |
| Citizens | The mechanism NPC action spawning an NPC | The NPC action has no effect |
For choosing an economy backend, see
realm.reward.currency-providerin Configuration File; leave it blank = auto-detect.
Storage backend
QR uses YAML by default (zero-config, works out of the box for a single server). In config.yml:
storage:
type: yaml # yaml | databaseyaml— anchors, chest claims, slot machine, codex, etc. are all stored in local YAML files. Enough for a single / standalone server.database— reuses QinhCoreLib's database (whether SQLite or MySQL is configured in QCL'sconfig.yml; QR doesn't configure a database separately).
On a network (BungeeCord / Velocity), if you want player codex discoveries shared across servers → configure QinhCoreLib to point at the same MySQL, and the backends share it naturally.
Note: only the codex (per player) goes into the database; data tied to specific world coordinates — anchors / chest claims / slot machine, etc. — still stays in each server's local YAML (as it should be, locally). See Data Storage.
Upgrades and config migration
QR has a built-in config migrator: the top of config.yml carries a config-version baseline — do not edit it manually. When the config structure is upgraded in the future, the migrator automatically fills in new fields and preserves your old values on startup — old servers can just swap the jar without resetting their config.
Next step
- Build your first naturally-generating ruin → Quick Start
- Master what every term means → Core Concepts