Initial commit: racked.ru Minecraft server config snapshot
Captures live config state of nullstone Purpur 1.21.11 server: - docker-compose.yml (itzg/minecraft-server image, MODRINTH_PROJECTS + PLUGINS lists) - All plugin configs under live-server/plugins/ (no DBs, no jars, no world data) - Server core: bukkit.yml, spigot.yml, purpur.yml, paper-global.yml, paper-world-defaults.yml, server.properties Excluded via .gitignore: - World data (world/, world_nether/, world_the_end/, auth_limbo/) - Sensitive: AuthMe DB (password hashes), Lands DB, CoreProtect DB, Essentials userdata - Jars (auto-fetched), logs, caches, .paper-remapped
This commit is contained in:
commit
0dad38e02e
173 changed files with 23067 additions and 0 deletions
40
.gitignore
vendored
Normal file
40
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
# World data — too big, not source
|
||||
world/
|
||||
world_nether/
|
||||
world_the_end/
|
||||
auth_limbo/
|
||||
|
||||
# Sensitive — password hashes, player PII
|
||||
plugins/AuthMe/authme.db
|
||||
plugins/AuthMe/authme.db.bak-*
|
||||
plugins/AuthMe/playerdata/
|
||||
plugins/Lands/Data/database*.db
|
||||
plugins/Lands/Data/playercache.json
|
||||
plugins/Homestead/storages.yml
|
||||
plugins/CoreProtect-CE/database.db
|
||||
plugins/Essentials/userdata/
|
||||
plugins/MarriageMaster/database.db
|
||||
|
||||
# Logs / caches
|
||||
logs/
|
||||
*.log
|
||||
*.log.gz
|
||||
plugins/.paper-remapped/
|
||||
plugins/spark/
|
||||
plugins/faststats/
|
||||
crash-reports/
|
||||
cache/
|
||||
versions/
|
||||
|
||||
# Per-session state
|
||||
session.lock
|
||||
banned-*.json.bak
|
||||
ops.json.bak
|
||||
*.dat
|
||||
*.dat_old
|
||||
*.bak
|
||||
*.bak-*
|
||||
|
||||
# itzg image dumps
|
||||
mods/
|
||||
config/
|
||||
78
MISSION.md
Normal file
78
MISSION.md
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
# Mission
|
||||
|
||||
> *all software should be free and open-source* — racked.ru
|
||||
|
||||
Human-centric, fully open source, free for everyone. Microsoft-free, privacy-first, no telemetry, no mandatory accounts.
|
||||
|
||||
Tagline: *experience the game the way it should have always been*.
|
||||
|
||||
## What that means in practice
|
||||
|
||||
- **No paywalls.** No premium plugins, no donor perks that change gameplay, no pay-to-win.
|
||||
- **No closed-source plugins.** If a plugin can't be replaced by a FOSS equivalent, it doesn't ship.
|
||||
- **No telemetry, no analytics, no data harvesting.** Players are not the product.
|
||||
- **Credit where it's due.** Free to use ≠ free to plagiarize. Every plugin author, every dependency, every config we adapt: attributed by name and link. Attribution is not a tax on freedom — it's the bare minimum of respect.
|
||||
- **Everything reproducible.** Anyone can clone this repo, follow the deploy doc, and stand up an identical server.
|
||||
- **Companion launcher is FOSS too.** `server-client-launcher` ships alongside this repo — one-click connect, no manual modpack juggling, no proprietary client mods.
|
||||
- **Configs are public.** Every gameplay knob, every plugin setting is in `config/`, diffable, forkable, criticizable.
|
||||
- **Migration history is public.** Why we left Lands. Why we replaced LitePlaytimeRewards. Why we don't run CosmicGuard. All in `docs/migrations/`.
|
||||
|
||||
## Acknowledged exceptions
|
||||
|
||||
Honesty matters more than purity-signaling. There is currently **one** plugin that is not OSI-FOSS but is kept for operational reasons:
|
||||
|
||||
- **CoreProtect-CE** — source-available (`all rights reserved`), not MIT/GPL. Kept because: (a) per-player rollback reliability is mission-critical for player protection, (b) Prism (the MIT alternative) has documented edge-case bugs in sign/container/entity restoration, (c) source is still readable + auditable. Revisit when Prism reaches feature parity at scale.
|
||||
|
||||
This is the one. Adding more "operational exceptions" would defeat the mission. New plugins must be FOSS unless they replace a FOSS plugin that's worse on a *gameplay* axis (per policy below).
|
||||
|
||||
## Plugin policy
|
||||
|
||||
| Tier | Action |
|
||||
|------|--------|
|
||||
| FOSS, GH source, active maintainer | **First choice** — adopt freely |
|
||||
| FOSS but unmaintained / archived | Use cautiously, prefer fork |
|
||||
| Proprietary but free | Avoid — find FOSS replacement |
|
||||
| Proprietary paid | **Never ship** — replace even if already paid for |
|
||||
| Custom dev agreement | Only if FOSS replacement genuinely doesn't exist; document fully |
|
||||
|
||||
**Precedent:** Lands plugin was paid for, deployed, working — and still removed in favor of LandClaimPlugin (FOSS) because owning a license isn't the same as owning the code. Open source wins even after sunk cost. See [`docs/migrations/lands-to-landclaim.md`](docs/migrations/lands-to-landclaim.md).
|
||||
|
||||
## Companion projects
|
||||
|
||||
**`server-client-launcher`** — separate repo. Players install once, get:
|
||||
- Pre-configured `mc.racked.ru` entry (no IP-typing)
|
||||
- Performance-optimized client
|
||||
- Automatic mod/resource-pack delivery
|
||||
- Voice chat, realistic sounds, immersive mods (planned)
|
||||
- No Microsoft account, no Mojang account — pick a username, play
|
||||
|
||||
**`client`** — separate repo. The optimized client itself.
|
||||
|
||||
All three (server / client / launcher) are open source and forkable. Run your own copy — branding, scope, plugin set, all yours.
|
||||
|
||||
Site: https://racked.ru
|
||||
|
||||
## On freedom and credit
|
||||
|
||||
Open source isn't anti-author. The whole point is that code belongs to everyone — author included. We will:
|
||||
|
||||
- Attribute every plugin, mod, config snippet, and design decision to its source.
|
||||
- Link upstream repos prominently, never hide them.
|
||||
- Surface dev names in `docs/plugins/<name>.md` AND in the README plugin index.
|
||||
- Keep `THANKS.md` (or equivalent) listing humans whose work this server runs on.
|
||||
- If we fork or modify a plugin, retain the original LICENSE + attribution headers, mark our changes clearly, and link back to upstream.
|
||||
|
||||
You can fork this repo, run your own copy, sell hosting on top of it (where licenses allow), strip the branding — that's freedom. What you can't do without acknowledging the work is take credit for someone else's code. The two principles aren't in tension; they're the same principle.
|
||||
|
||||
## Why this matters
|
||||
|
||||
Minecraft's plugin ecosystem has drifted toward paid resource sites and closed-source anti-cheats. That's a tax on everyone who wants to host a community server. This project is a counter-statement: a complete, audit-able, free-to-run server stack that nobody owes anyone money to operate.
|
||||
|
||||
Fork it. Run it. Share it. Improve it. Own your server.
|
||||
|
||||
## Contributing
|
||||
|
||||
- PRs welcome on configs, plugin selections, docs, scripts.
|
||||
- Plugin additions must declare license + acquisition source per [docs/PLUGINS.md schema](docs/PLUGINS.md).
|
||||
- Proprietary additions will be rejected unless they replace a FOSS plugin that's worse on a *gameplay* axis (not a paywalled-feature axis).
|
||||
- Telemetry, analytics, or call-home code in any form: rejected.
|
||||
183
README.md
Normal file
183
README.md
Normal file
|
|
@ -0,0 +1,183 @@
|
|||
# racked.ru — Minecraft server
|
||||
|
||||
> *experience the game the way it should have always been*
|
||||
|
||||
Self-hosted Purpur Minecraft server powering [racked.ru](https://racked.ru). Microsoft-free, privacy-first, fully open source. Deployed via Docker on Debian (`nullstone`, 192.168.0.100), public at `mc.racked.ru:25565`.
|
||||
|
||||
Companion projects:
|
||||
- **server-client-launcher** — one-click connect, no manual modpack juggling. (Separate repo.)
|
||||
- **client** — performance-optimized client (separate repo).
|
||||
|
||||
This repo is the **server** half. Configs, plugin manifest, deploy scripts. No plugin jars committed — acquired at boot from FOSS sources (see [PLUGINS.md](docs/PLUGINS.md)).
|
||||
|
||||
> *all software should be free and open-source* — see [MISSION.md](MISSION.md), [THANKS.md](THANKS.md)
|
||||
|
||||
## Stack
|
||||
|
||||
| Layer | Choice | Why |
|
||||
|-------|--------|-----|
|
||||
| Server jar | Purpur (latest stable build) | Paper fork w/ extra config knobs |
|
||||
| Container | `itzg/minecraft-server:latest` | Auto-DL of jar + plugins via env |
|
||||
| Host OS | Debian 13 | nullstone server |
|
||||
| Network | Docker `proxy` external network | Shared w/ Traefik for future TLS reverse-proxy |
|
||||
| Backup | tar.gz daily 02:00 via host cron | 7-day retention to `/opt/backups/` |
|
||||
|
||||
## Quick start
|
||||
|
||||
```bash
|
||||
git clone <this-repo> minecraft-server
|
||||
cd minecraft-server
|
||||
mkdir -p /opt/docker/minecraft
|
||||
cp -r config/* /opt/docker/minecraft/ # seed configs
|
||||
cp docker-compose.yml /opt/docker/minecraft/
|
||||
chmod -R 777 /opt/docker/minecraft # see docs/PERMISSIONS.md (userns-remap quirk)
|
||||
cd /opt/docker/minecraft && docker compose up -d
|
||||
docker logs -f minecraft-mc # watch jar+plugin DL, world gen
|
||||
```
|
||||
|
||||
First boot: ~3-5 min (Purpur jar DL, ~14 plugin DL, world gen).
|
||||
|
||||
## Docs
|
||||
|
||||
- [DEPLOY.md](docs/DEPLOY.md) — fresh deploy + migration from existing server
|
||||
- [PLUGINS.md](docs/PLUGINS.md) — full plugin list, sources, slugs/IDs
|
||||
- [PERMISSIONS.md](docs/PERMISSIONS.md) — userns-remap + chmod quirk
|
||||
- [BACKUP.md](docs/BACKUP.md) — backup script + restore procedure
|
||||
- [ROADMAP.md](docs/ROADMAP.md) — plugin acquisition overhaul: GH-first, lockfile, CI auto-update
|
||||
- [TELEMETRY_AUDIT.md](TELEMETRY_AUDIT.md) — privacy audit: phoning-home disabled (bStats, update checks)
|
||||
- [migrations/lands-to-landclaim.md](docs/migrations/lands-to-landclaim.md) — Lands (paid) → LandClaimPlugin (FOSS) migration
|
||||
|
||||
## Server config highlights
|
||||
|
||||
| Setting | Value |
|
||||
|---------|-------|
|
||||
| Difficulty | hard |
|
||||
| Gamemode | survival |
|
||||
| Max players | 69 |
|
||||
| View distance | 20 chunks |
|
||||
| Simulation distance | 10 chunks |
|
||||
| Online mode | false (cracked clients allowed) |
|
||||
| Spawn protection | 0 |
|
||||
| RAM | 8G min, 16G max (18G hard cap) |
|
||||
| RCON | enabled, port 25575, password `*redacted*` |
|
||||
|
||||
Full settings in [`config/server.properties`](config/server.properties).
|
||||
|
||||
## Network
|
||||
|
||||
| Port | Proto | Use |
|
||||
|------|-------|-----|
|
||||
| 25565 | TCP | Minecraft client |
|
||||
| 25575 | TCP | RCON (LAN-trusted only) |
|
||||
|
||||
LAN: `192.168.0.100:25565`. Tailscale: `100.64.0.2:25565`. Future public: `mc.s8n.ru` via Traefik (label commented out).
|
||||
|
||||
## Plugins (15 active)
|
||||
|
||||
Auto-pulled from Modrinth at boot:
|
||||
LuckPerms, PlaceholderAPI, EssentialsX, WorldEdit, Simple Voice Chat, MiniMOTD, SkinsRestorer, CoreProtect, GrimAC, spark, DiscordSRV, **LandClaimPlugin** (replaces paid Lands), TAB.
|
||||
|
||||
Auto-pulled from Spigot:
|
||||
ProtocolLib (ID 1997), Vault (ID 34315).
|
||||
|
||||
Manual install (no Modrinth/Spigot auto-source):
|
||||
LoginSecurity, ComfyWhitelist, MarriageMaster, PhantomSMP, HelpCommand, ProAntiTab.
|
||||
|
||||
Premium (skipped, FOSS replacement preferred):
|
||||
~~Lands~~ (replaced by LandClaimPlugin), CosmicGuard.
|
||||
|
||||
See [docs/PLUGINS.md](docs/PLUGINS.md) for source URLs.
|
||||
|
||||
## Roadmap / TODO
|
||||
|
||||
Living checklist. Priority tags: **[P0]** blocker / security, **[P1]** vision-aligned swap, **[P2]** improvement, **[P3]** nice-to-have.
|
||||
|
||||
### Infrastructure
|
||||
|
||||
- [x] Fix `loader=purpur` boot loop — workaround: `TYPE=CUSTOM` + direct Purpur jar URL + `MODRINTH_LOADER=paper`. Permanent fix still pending Phase 2.
|
||||
- [x] Pin Purpur version (1.21.10) — no `LATEST` drift
|
||||
- [x] Set MOTD to racked.ru tagline
|
||||
- [ ] **[P1]** Public DNS: `mc.racked.ru` → TCPShield proxy (DDoS protection; do NOT point A record directly to home IP)
|
||||
- [ ] **[P1]** Traefik TLS termination for RCON web UI (LAN-only first)
|
||||
- [ ] **[P2]** Switch bind mount → named volume to kill `chmod 777` userns workaround
|
||||
- [ ] **[P2]** `dns:` block in compose pointing 1.1.1.1 + LAN router (Tailscale ate `/etc/resolv.conf` precedent)
|
||||
- [ ] **[P2]** Bluemap or Squaremap on `map.racked.ru` (browser map via Traefik)
|
||||
- [ ] **[P2]** Prometheus exporter + Grafana dashboard (TPS, MSPT, RAM)
|
||||
- [ ] **[P3]** Test instance on port 25566 sharing world snapshot — try plugin upgrades safely
|
||||
|
||||
### Plugin acquisition (per [ROADMAP.md](docs/ROADMAP.md))
|
||||
|
||||
- [ ] **[P0]** Phase 1: pin every plugin to specific version-id (no `latest` in env)
|
||||
- [ ] **[P1]** Phase 2: `plugins.yml` manifest + `fetch-plugins.sh` (GH-first, Hangar/Modrinth/Spiget fallback)
|
||||
- [ ] **[P1]** Phase 2: `plugins.lock` w/ sha256 per jar, committed
|
||||
- [ ] **[P2]** Phase 3: GH Action — daily upstream check, auto-PR per update, license audit → `LICENSES.md`
|
||||
|
||||
### Plugin swaps (per [PLUGIN_ALTERNATIVES.md](docs/PLUGIN_ALTERNATIVES.md))
|
||||
|
||||
High priority — security, FOSS alignment, license clarity:
|
||||
- [x] LoginSecurity → **AuthMe Reloaded** — done. Void `auth_limbo` END dimension, sealed barrier cell at spawn, `teleportUnAuthedToSpawn: true`, `hideInventory: true`, post-login `mvtp %p world` hook. Base-coord leak fixed.
|
||||
- [x] ProAntiTab — **Keep** (verified: RayzsYT, GPL-2.0-or-later, FOSS, free, GH). Earlier "likely premium" guess was wrong.
|
||||
- [x] Claim plugin → **Homestead** (Apache-2.0, FOSS, 75+ flags, sub-areas, BlueMap integration, free claiming)
|
||||
- [x] WorldEdit → **FastAsyncWorldEdit (FAWE)** — done. v2.15.0, GPL-3.0, drop-in swap, CoreProtect integration auto-detected.
|
||||
- [x] Vault → **VaultUnlocked** — done. TheNewEconomy fork, GH source, modrinth slug `vaultunlocked`, drop-in Vault API replacement.
|
||||
- [ ] **[P3]** (deferred — later project) Add Matrix bridge alongside DiscordSRV — use existing Tuwunel homeserver (txt.s8n.ru) as FOSS comm channel
|
||||
|
||||
Medium priority — license/dependency cleanup:
|
||||
- [x] CoreProtect-CE — **Keep** (acknowledged license exception; reliability > purity per operator). Revisit if/when Prism reaches feature parity on sign/container/entity rollback at scale.
|
||||
- [ ] **[P2]** Verify license: TAB
|
||||
|
||||
Low priority — consolidation to native:
|
||||
- [ ] **[P2]** Verify ComfyWhitelist license — keep if FOSS (provides name-based hot-reload whitelist w/o Mojang API; native `/whitelist` is UUID-based and unsafe on offline-mode). Swap to FOSS name-based alt if license unclear.
|
||||
- [ ] **[P3]** Drop HelpCommand → native `/help` + `commands.yml`
|
||||
- [ ] **[P3]** Drop PhantomSMP → native paper config + vanilla datapack
|
||||
- [ ] **[P3]** Audit MarriageMaster usage — drop or fork under FOSS license
|
||||
|
||||
Phase 4 — long-term refactor:
|
||||
- [ ] **[P3]** EssentialsX split into modular FOSS plugins (HuskHomes for teleport, etc)
|
||||
- [ ] **[P3]** Evaluate dropping ProtocolLib in favor of PacketEvents-only stack
|
||||
- [ ] **[P3]** PlaceholderAPI → MiniPlaceholders (Adventure-native) when ecosystem catches up
|
||||
- [ ] **[P3]** Self-hosted skin server (replace Mojang/MineSkin dependency)
|
||||
|
||||
### Documentation
|
||||
|
||||
- [x] Per-plugin doc files under `docs/plugins/<name>.md` — all 18 active plugins documented (license, source, version, notes)
|
||||
- [ ] **[P1]** `AGREEMENTS.md` — high-level overview of any custom dev-rights deals (no NDAs broken)
|
||||
- [ ] **[P1]** Cross-link launcher repo in README + MISSION when public
|
||||
- [ ] **[P2]** Cross-link client repo in README + MISSION when public
|
||||
- [ ] **[P2]** `docs/SKIN_HOSTING.md` — once skin server self-hosted
|
||||
- [ ] **[P3]** mkdocs site auto-built from `docs/` for racked.ru
|
||||
|
||||
### Community / process
|
||||
|
||||
- [ ] **[P1]** Publish to GitHub under racked-rust org (or chosen org name)
|
||||
- [ ] **[P1]** CONTRIBUTING.md — describe FOSS-only plugin policy (per MISSION.md)
|
||||
- [ ] **[P2]** Issue templates: plugin-suggestion, license-concern, bug, feature
|
||||
- [ ] **[P2]** PR template — license check checkbox, vision-alignment checkbox
|
||||
- [ ] **[P3]** Discussion category for plugin proposals
|
||||
|
||||
### Backlog (deferred, low priority)
|
||||
|
||||
- [ ] **[P3-deferred]** Self-host LuckPerms web editor + bytebin on `perms.racked.ru` — eliminates Cloudflare dep that bit us during a CF outage (web editor failed; in-game `/lp` commands still worked). Both components are MIT FOSS (`github.com/LuckPerms/web`, `github.com/lucko/bytebin`). Workaround for now: use `/lp` commands only, skip GUI entirely. Revisit when other Phase 4 work is done — small QoL win, big setup cost.
|
||||
|
||||
### Done
|
||||
|
||||
- [x] Backup old server → `_archive/minecraft-old-2026-04-27.tar.gz`
|
||||
- [x] Migrate Lands (paid) → LandClaimPlugin (FOSS) — see [migrations/lands-to-landclaim.md](docs/migrations/lands-to-landclaim.md)
|
||||
- [x] Drop LitePlaytimeRewards (upstream dead since 2021)
|
||||
- [x] Drop CosmicGuard (premium, can't audit) — GrimAC covers anti-cheat
|
||||
- [x] Document MISSION + THANKS + plugin policy
|
||||
- [x] Plugin alternatives audit — see [PLUGIN_ALTERNATIVES.md](docs/PLUGIN_ALTERNATIVES.md)
|
||||
- [x] Drop DiscordSRV (Discord = mission-misaligned proprietary platform)
|
||||
- [x] Migrate old world (4.2G overworld + nether + end) from archive to new server
|
||||
- [x] Restore selective plugin configs from old (LuckPerms perms+groups, CoreProtect history, EssentialsX userdata, MiniMOTD, voicechat, SkinsRestorer, GrimAC, ProAntiTab, WorldEdit, PlaceholderAPI, spark)
|
||||
- [x] Restore player state files (ops.json, banned-players, banned-ips, whitelist, usercache)
|
||||
- [x] TAB v5 → v6 schema migration (visuals preserved, 0 warnings on reload)
|
||||
- [x] Document `racked.ru` as the project (MISSION.md, THANKS.md w/ author attributions, README rebrand)
|
||||
- [x] AuthMe void limbo dimension (`auth_limbo`) — sealed barrier cell, no coord leaks, post-login TP to overworld
|
||||
- [x] Public access confirmed — port forward 25565 → 82.31.156.86 working
|
||||
- [x] LandClaimPlugin Wilderness actionbar silenced
|
||||
- [x] Disk cleanup — freed 11G+ (old backups, Docker build cache, staging dirs)
|
||||
|
||||
## License
|
||||
|
||||
Configs + scripts in this repo: MIT. Plugin jars are not redistributed here — they're acquired at deploy time from upstream sources, each under its own license. See [THANKS.md](THANKS.md) for per-plugin license attribution.
|
||||
54
TELEMETRY_AUDIT.md
Normal file
54
TELEMETRY_AUDIT.md
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
# Telemetry Audit & Removal — 2026-04-29
|
||||
|
||||
**Date:** 2026-04-29
|
||||
**Reason:** Privacy-first FOSS mission. Disabled default telemetry that serves no server function.
|
||||
|
||||
## Changes Made
|
||||
|
||||
All update checks and telemetry disabled. Server remains fully functional.
|
||||
|
||||
### Disabled Settings
|
||||
|
||||
| Plugin | Setting | Old | New |
|
||||
|--------|---------|-----|-----|
|
||||
| **bStats** | `enabled` | `true` | `false` |
|
||||
| **PlaceholderAPI** | `check_updates` | `true` | `false` |
|
||||
| **CoreProtect** | `check-updates` | `true` | `false` |
|
||||
| **GrimAC** | `check-for-updates` | `true` | `false` |
|
||||
| **FAWE** | `snapshot-update-notifications` | `true` | `false` |
|
||||
| **FAWE** | `release-update-notifications` | `true` | `false` |
|
||||
| **FAWE** | `notify-update-ingame` | `true` | `false` |
|
||||
|
||||
## What Was Phoning Home
|
||||
|
||||
1. **bStats** → `bStats.org` — server usage analytics for plugin authors
|
||||
2. **PlaceholderAPI** → `bstats.org` + registry — update notifications
|
||||
3. **CoreProtect** → GitHub releases API — update check
|
||||
4. **GrimAC** → upstream — update check
|
||||
5. **FAWE** → release servers — update snapshots/releases/in-game notifications
|
||||
|
||||
## What We Kept (Required for Function)
|
||||
|
||||
- **SkinsRestorer** — Mojang API (player skins). No alternative.
|
||||
- **LuckPerms Web** — Cloudflare-hosted. Self-hosting deferred (P3 task).
|
||||
|
||||
## Impact
|
||||
|
||||
- **Zero loss of functionality.** Update checks were cosmetic (console/in-game notifications only).
|
||||
- **Manual updates.** Check Modrinth/GitHub for plugin updates yourself.
|
||||
- **Bandwidth:** Minimal savings (~KBs per startup + periodic pings).
|
||||
- **Privacy:** Server no longer contributes usage data to third-party analytics.
|
||||
|
||||
## Rationale
|
||||
|
||||
Default telemetry violates racked.ru mission: *"all software should be free and open-source"* + privacy-first design. Plugin authors don't need bStats to function; FOSS plugins should respect user privacy by default.
|
||||
|
||||
## Server Configs Updated
|
||||
|
||||
- `/opt/docker/minecraft/plugins/bStats/config.yml`
|
||||
- `/opt/docker/minecraft/plugins/PlaceholderAPI/config.yml`
|
||||
- `/opt/docker/minecraft/plugins/CoreProtect/config.yml`
|
||||
- `/opt/docker/minecraft/plugins/GrimAC/config.yml`
|
||||
- `/opt/docker/minecraft/plugins/FastAsyncWorldEdit/config.yml`
|
||||
|
||||
Server restarted 2026-04-29 15:43 UTC. All settings live.
|
||||
69
THANKS.md
Normal file
69
THANKS.md
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
# Thanks
|
||||
|
||||
The racked.ru server runs on the work of many people. None of it would exist without them.
|
||||
|
||||
## Server core
|
||||
|
||||
| Project | Author(s) | License | Why |
|
||||
|---------|-----------|---------|-----|
|
||||
| Minecraft | Mojang Studios | EULA | Game itself |
|
||||
| Paper | PaperMC team | MIT | High-perf MC server fork |
|
||||
| Purpur | PurpurMC team | MIT | Paper fork w/ extra config |
|
||||
| `itzg/minecraft-server` Docker image | Geoff Bourne (itzg) | MIT | Container that runs all of this |
|
||||
|
||||
## Plugins (active)
|
||||
|
||||
To be filled in per-plugin. See `docs/plugins/<plugin>.md` for full attribution per plugin including author, license, source URL, and contribution context.
|
||||
|
||||
| Plugin | Author / Org | License | Source |
|
||||
|--------|--------------|---------|--------|
|
||||
| LuckPerms | Luck (lucko) | MIT | https://github.com/LuckPerms/LuckPerms |
|
||||
| PlaceholderAPI | HelpChat | GPL-3.0 | https://github.com/PlaceholderAPI/PlaceholderAPI |
|
||||
| EssentialsX | EssentialsX team | GPL-3.0 | https://github.com/EssentialsX/Essentials |
|
||||
| WorldEdit | EngineHub | GPL-3.0 | https://github.com/EngineHub/WorldEdit |
|
||||
| Simple Voice Chat | henkelmax | LGPL-3.0 | https://github.com/henkelmax/simple-voice-chat |
|
||||
| MiniMOTD | jmpms | MIT | https://github.com/jpenilla/MiniMOTD |
|
||||
| SkinsRestorer | SkinsRestorer team | GPL-3.0 | https://github.com/SkinsRestorer/SkinsRestorer |
|
||||
| CoreProtect (CE) | PlayPro / Intelli (CE fork) | MIT | https://github.com/PlayPro/CoreProtect / CE fork |
|
||||
| GrimAC | MWHunter | GPL-3.0 | https://github.com/GrimAnticheat/Grim |
|
||||
| spark | Luck (lucko) | GPL-3.0 | https://github.com/lucko/spark |
|
||||
| DiscordSRV | Scarsz | GPL-3.0 | https://github.com/DiscordSRV/DiscordSRV |
|
||||
| LandClaimPlugin | _author TBD_ | _license TBD_ | https://modrinth.com/plugin/landclaimplugin |
|
||||
| TAB | NEZNAMY | _license TBD_ | https://github.com/NEZNAMY/TAB |
|
||||
| ProtocolLib | dmulloy2 + contributors | GPL-2.0 | https://github.com/dmulloy2/ProtocolLib |
|
||||
| Vault | MilkBowl | LGPL-3.0 | https://github.com/MilkBowl/Vault |
|
||||
|
||||
## Plugins (manual / agreement-based)
|
||||
|
||||
| Plugin | Author | License/Agreement | Source |
|
||||
|--------|--------|-------------------|--------|
|
||||
| LoginSecurity | lenis0012 (orig), Sytm (fork) | GPL-3.0 | https://www.spigotmc.org/resources/loginsecurity.19362/ |
|
||||
| MarriageMaster | DerFlash | _TBD_ | _TBD_ |
|
||||
| ProAntiTab | BoomEaro | _TBD_ | _TBD_ |
|
||||
| ComfyWhitelist | etil2jz | _TBD_ | _TBD_ |
|
||||
| HelpCommand | Slimerblue22 | _TBD_ | _TBD_ |
|
||||
| PhantomSMP | Lielay9 | _TBD_ | _TBD_ |
|
||||
|
||||
## Tooling
|
||||
|
||||
| Tool | Author / Org | Why |
|
||||
|------|--------------|-----|
|
||||
| Docker | Docker Inc + community | Containerization |
|
||||
| Tailscale | Tailscale Inc | VPN mesh for remote admin |
|
||||
| Traefik | Traefik Labs | Reverse proxy (future TLS) |
|
||||
|
||||
## Removed / replaced (still owe thanks)
|
||||
|
||||
| Project | Why replaced | Where it went |
|
||||
|---------|--------------|---------------|
|
||||
| Lands | Paid, closed source — incompatible w/ FOSS mission. Author Angeschossen still produced excellent work; our switch is principle, not criticism. | Replaced by LandClaimPlugin |
|
||||
| LitePlaytimeRewards | Upstream dead since 2021 | Awaiting FOSS replacement |
|
||||
| CosmicGuard | Premium continuous build, can't audit | GrimAC covers anti-cheat |
|
||||
|
||||
## Special
|
||||
|
||||
This server was scaffolded with help from Claude Code (Anthropic). Documentation written collaboratively. Bugs, design choices, and any opinions in this repo are the operator's, not the AI's.
|
||||
|
||||
---
|
||||
|
||||
If your name should be on this list and isn't, open a PR or an issue. If you'd prefer to be removed, same — we'll respect it.
|
||||
91
docker-compose.yml
Normal file
91
docker-compose.yml
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
services:
|
||||
mc:
|
||||
image: itzg/minecraft-server:latest
|
||||
container_name: minecraft-mc
|
||||
environment:
|
||||
EULA: "TRUE"
|
||||
# TYPE=CUSTOM bypasses itzg's auto-loader detection; honors MODRINTH_LOADER override
|
||||
TYPE: CUSTOM
|
||||
CUSTOM_SERVER: "https://api.purpurmc.org/v2/purpur/1.21.11/latest/download"
|
||||
VERSION: "1.21.11"
|
||||
|
||||
MEMORY_SIZE: "16G"
|
||||
JVM_OPTS: "-Xms8192M -Xmx16384M"
|
||||
|
||||
DIFFICULTY: hard
|
||||
GAMEMODE: survival
|
||||
HARDCORE: "false"
|
||||
MAX_PLAYERS: "69"
|
||||
VIEW_DISTANCE: 20
|
||||
SIMULATION_DISTANCE: 10
|
||||
ONLINE_MODE: "false"
|
||||
SPAWN_PROTECTION: 0
|
||||
MOTD: "racked.ru — experience the game the way it should have always been"
|
||||
|
||||
USE_AIKAR_FLAGS: "true"
|
||||
MAX_TICK_TIME: "-1"
|
||||
|
||||
ENABLE_RCON: "true"
|
||||
RCON_PASSWORD: "*redacted*"
|
||||
|
||||
TZ: "Europe/London"
|
||||
ENABLE_ROLLING_LOGS: "true"
|
||||
|
||||
UID: "1000"
|
||||
GID: "1000"
|
||||
|
||||
# Modrinth auto-DL — TYPE=CUSTOM lets MODRINTH_LOADER=paper actually work
|
||||
MODRINTH_PROJECTS: |
|
||||
luckperms
|
||||
placeholderapi
|
||||
fastasyncworldedit
|
||||
simple-voice-chat
|
||||
minimotd
|
||||
skinsrestorer
|
||||
vaultunlocked
|
||||
proantitab
|
||||
voidworldgenerator
|
||||
homestead-plugin
|
||||
# EssentialsX + spark not on Modrinth as paper jars — direct GH/CI URLs
|
||||
PLUGINS: |
|
||||
https://github.com/EssentialsX/Essentials/releases/download/2.21.2/EssentialsX-2.21.2.jar
|
||||
https://ci.lucko.me/job/spark/lastSuccessfulBuild/artifact/spark-bukkit/build/libs/spark-1.10.172-bukkit.jar
|
||||
https://github.com/HaHaWTH/AuthMeReReloaded/releases/download/b49/AuthMe-5.6.0-FORK-Universal.jar
|
||||
https://github.com/dmulloy2/ProtocolLib/releases/download/dev-build/ProtocolLib.jar
|
||||
https://github.com/VoidemLIVE/Help-Command-Plugin/releases/download/v2.9.2/HelpCommand-2.9.2.jar
|
||||
https://cdn.modrinth.com/data/Lu3KuzdV/versions/HD2IvrxS/CoreProtect-CE-23.1.jar
|
||||
https://cdn.modrinth.com/data/gG7VFbG0/versions/uWACk3HR/TAB%20v6.0.1.jar
|
||||
MODRINTH_DOWNLOAD_DEPENDENCIES: none
|
||||
MODRINTH_PROJECTS_DEFAULT_VERSION_TYPE: release
|
||||
MODRINTH_LOADER: paper
|
||||
SPIGET_RESOURCES: ""
|
||||
REMOVE_OLD_MODS: "true"
|
||||
REMOVE_OLD_MODS_INCLUDE: "*.jar"
|
||||
REMOVE_OLD_MODS_EXCLUDE: "RackedLimbo*.jar"
|
||||
volumes:
|
||||
- /opt/docker/minecraft:/data
|
||||
ports:
|
||||
- "25565:25565/tcp"
|
||||
- "25575:25575/tcp"
|
||||
networks:
|
||||
- proxy
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "mc-health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 240s
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 18G
|
||||
cpus: '6'
|
||||
reservations:
|
||||
memory: 8G
|
||||
labels:
|
||||
- "traefik.enable=false"
|
||||
|
||||
networks:
|
||||
proxy:
|
||||
external: true
|
||||
54
docs/BACKUP.md
Normal file
54
docs/BACKUP.md
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
# Backup & restore
|
||||
|
||||
## Schedule
|
||||
|
||||
Host cron, daily 02:00, 7-day retention. Script: [`scripts/backup.sh`](../scripts/backup.sh) (deployed to `/opt/docker/backup.sh` on host). Output: `/opt/backups/YYYYMMDD_HHMMSS/`.
|
||||
|
||||
Backs up the whole nullstone Docker stack; the Minecraft block (lines 80-117 of backup.sh) handles MC.
|
||||
|
||||
## Strategy
|
||||
|
||||
| Server state | Backup type | Method |
|
||||
|--------------|-------------|--------|
|
||||
| Running | World snapshot + configs | `docker exec` tars worlds inside container (consistent), then `docker cp` out. Configs tarred from host. |
|
||||
| Stopped | Full archive | Single tar of `/opt/docker/minecraft/` (worlds + plugins + configs). |
|
||||
|
||||
## Manual backup
|
||||
|
||||
```bash
|
||||
ssh user@192.168.0.100 /opt/docker/backup.sh
|
||||
```
|
||||
|
||||
## Manual archive (full server, while stopped)
|
||||
|
||||
```bash
|
||||
ssh user@192.168.0.100 'cd /opt/docker/minecraft && docker compose down'
|
||||
ssh user@192.168.0.100 'tar czf - -C /opt/docker minecraft' > minecraft-backup-$(date +%F).tar.gz
|
||||
ssh user@192.168.0.100 'cd /opt/docker/minecraft && docker compose up -d'
|
||||
```
|
||||
|
||||
## Restore
|
||||
|
||||
```bash
|
||||
# Stop running server
|
||||
ssh user@192.168.0.100 'cd /opt/docker/minecraft && docker compose down'
|
||||
|
||||
# Move current dir aside
|
||||
ssh user@192.168.0.100 'mv /opt/docker/minecraft /opt/docker/minecraft.broken'
|
||||
|
||||
# Extract backup
|
||||
scp minecraft-backup-YYYY-MM-DD.tar.gz user@192.168.0.100:/tmp/
|
||||
ssh user@192.168.0.100 'cd /opt/docker && tar xzf /tmp/minecraft-backup-YYYY-MM-DD.tar.gz'
|
||||
|
||||
# Re-apply perms (userns-remap)
|
||||
ssh user@192.168.0.100 'chmod -R 777 /opt/docker/minecraft'
|
||||
|
||||
# Boot
|
||||
ssh user@192.168.0.100 'cd /opt/docker/minecraft && docker compose up -d'
|
||||
```
|
||||
|
||||
## What's NOT in repo backups
|
||||
|
||||
- Plugin jars: re-downloaded fresh on each boot via `MODRINTH_PROJECTS` / `SPIGET_RESOURCES`.
|
||||
- World data: only in `/opt/backups/` archives, never committed to git (binary, large, frequently changing).
|
||||
- Player data (`usercache.json`, `ops.json`, `whitelist.json`): committed to repo *as snapshots only*; live state lives on host.
|
||||
87
docs/DEPLOY.md
Normal file
87
docs/DEPLOY.md
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
# Deploy
|
||||
|
||||
## Fresh install
|
||||
|
||||
Target host: Debian 13 w/ Docker + Compose v2. Userns-remap optional (see PERMISSIONS.md).
|
||||
|
||||
```bash
|
||||
# 1. Prep host dir
|
||||
sudo mkdir -p /opt/docker/minecraft
|
||||
sudo chown $(id -u):$(id -g) /opt/docker/minecraft
|
||||
|
||||
# 2. Seed configs from this repo
|
||||
git clone https://github.com/<you>/minecraft-server.git /tmp/mc-repo
|
||||
cp -r /tmp/mc-repo/config/* /opt/docker/minecraft/
|
||||
mv /opt/docker/minecraft/paper /opt/docker/minecraft/config # paper-global.yml etc live in ./config/
|
||||
cp /tmp/mc-repo/docker-compose.yml /opt/docker/minecraft/
|
||||
|
||||
# 3. Apply 777 (only if userns-remap in /etc/docker/daemon.json — see PERMISSIONS.md)
|
||||
chmod -R 777 /opt/docker/minecraft
|
||||
|
||||
# 4. Ensure proxy network exists (for Traefik integration)
|
||||
docker network create proxy 2>/dev/null || true
|
||||
|
||||
# 5. Boot
|
||||
cd /opt/docker/minecraft
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
docker logs -f minecraft-mc
|
||||
```
|
||||
|
||||
Watch for `[Server thread/INFO]: Done (XX.XXXs)!` — server is live.
|
||||
|
||||
## Migrating from existing server
|
||||
|
||||
If you have an existing Bukkit-family server (Paper/Spigot/Purpur):
|
||||
|
||||
```bash
|
||||
# On old host
|
||||
cd /path/to/old-server
|
||||
docker compose down 2>/dev/null || systemctl stop minecraft 2>/dev/null
|
||||
tar czf /tmp/mc-old.tar.gz .
|
||||
|
||||
# Transfer
|
||||
scp /tmp/mc-old.tar.gz user@new-host:/tmp/
|
||||
|
||||
# On new host
|
||||
mkdir -p /opt/docker/minecraft
|
||||
cd /opt/docker/minecraft
|
||||
tar xzf /tmp/mc-old.tar.gz
|
||||
|
||||
# Drop in this repo's compose
|
||||
cp /tmp/mc-repo/docker-compose.yml ./
|
||||
chmod -R 777 .
|
||||
|
||||
# Optional: clear plugins/ to let MODRINTH_PROJECTS pull fresh latest
|
||||
rm -rf plugins/*.jar
|
||||
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
`REMOVE_OLD_MODS=true` + `REMOVE_OLD_MODS_INCLUDE=*.jar` in compose deletes manually-placed jars on every boot. Disable if you want manual jars to persist.
|
||||
|
||||
## Updating
|
||||
|
||||
```bash
|
||||
cd /opt/docker/minecraft
|
||||
docker compose pull # latest itzg image
|
||||
docker compose down
|
||||
docker compose up -d # auto-DLs latest Purpur build + latest plugins
|
||||
```
|
||||
|
||||
Purpur version: set `VERSION: LATEST` in compose (default in this repo) to track newest stable. Pin to e.g. `VERSION: "1.21.10"` for reproducibility.
|
||||
|
||||
## Stopping / removing
|
||||
|
||||
```bash
|
||||
docker compose down # stop, keep data
|
||||
docker compose down -v # stop, remove anonymous volumes (worlds are bind-mounted, safe)
|
||||
sudo rm -rf /opt/docker/minecraft # nuke everything
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
- **Restart loop, "Operation not permitted" on chown** → see PERMISSIONS.md, run `chmod -R 777 /opt/docker/minecraft`.
|
||||
- **`Project(s) could not be located: [foo]`** → Modrinth slug wrong. Check the project page URL on modrinth.com — slug is the last path segment.
|
||||
- **`UnknownHostException: api.purpurmc.org`** → host DNS broken. On nullstone, Tailscale ate `/etc/resolv.conf`; fix: `sudo tailscale set --accept-dns=false`.
|
||||
- **Server starts but plugins missing** → check `docker logs minecraft-mc` for `[mc-image-helper]` lines; download errors print there.
|
||||
51
docs/PERMISSIONS.md
Normal file
51
docs/PERMISSIONS.md
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
# Permissions / userns-remap quirk
|
||||
|
||||
## Symptom
|
||||
|
||||
Container restart-loops on first boot. Logs show:
|
||||
|
||||
```
|
||||
[init] Changing ownership of /data to 1000 ...
|
||||
chown: changing ownership of '/data/server.properties': Operation not permitted
|
||||
[init] Running as uid=1000 gid=1000 with /data as 'drwxrwxr-x 4 65534 65534 4096 /data'
|
||||
/image/scripts/start-configuration: line 87: /data/.rcon-cli.env: Permission denied
|
||||
```
|
||||
|
||||
Files appear inside container as `65534:65534` (nobody:nogroup) even though host shows them as `1000:1000`.
|
||||
|
||||
## Cause
|
||||
|
||||
Docker daemon on this host runs with **userns-remap** enabled (`/etc/docker/daemon.json` has `"userns-remap": "default"`). This maps container UID 1000 → some host UID like 100000+1000=`101000`. Files owned by host UID 1000 (`user:user`) are *not* owned by the remapped container UID, so:
|
||||
|
||||
- They show up as `nobody:nogroup` (65534) inside the container.
|
||||
- Container can read world-readable files but can't write unless dir is `o+w`.
|
||||
- Init script can't `chown` (host kernel blocks it — bind mount, foreign UID).
|
||||
|
||||
## Fix
|
||||
|
||||
```bash
|
||||
chmod -R 777 /opt/docker/minecraft
|
||||
```
|
||||
|
||||
This is what the original deployment used (verified: old dir was `drwxrwxrwx 12 user user`). Container can now write logs, world data, plugin configs, RCON env file.
|
||||
|
||||
## Why not disable userns-remap?
|
||||
|
||||
It's a host-wide hardening setting, kept for the rest of the Docker stack on nullstone. Per-container userns override (`userns_mode: "host"` in compose) is possible but defeats the security benefit for this container.
|
||||
|
||||
## Alternative: named volume
|
||||
|
||||
```yaml
|
||||
volumes:
|
||||
- mc-data:/data
|
||||
volumes:
|
||||
mc-data:
|
||||
```
|
||||
|
||||
Docker creates the volume owned by the remapped UID directly, no chmod needed. Trade-off: harder to inspect/edit configs from host (must `docker cp` or bind-mount inspect).
|
||||
|
||||
This repo sticks with bind mount + `chmod 777` for operator ergonomics.
|
||||
|
||||
## Cosmetic chown spam (non-blocking)
|
||||
|
||||
Even with `chmod 777`, init still logs `chown: ... Operation not permitted` for every file. Server starts and runs fine — kernel just won't let init re-claim ownership across the userns boundary. Ignore.
|
||||
63
docs/PLUGINS.md
Normal file
63
docs/PLUGINS.md
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
# Plugins
|
||||
|
||||
All plugins are auto-downloaded at container boot via env vars in `docker-compose.yml`. No jars committed to repo.
|
||||
|
||||
## Modrinth (auto-DL via `MODRINTH_PROJECTS`)
|
||||
|
||||
| Plugin | Modrinth slug | Purpose |
|
||||
|--------|---------------|---------|
|
||||
| LuckPerms | `luckperms` | Permissions / groups |
|
||||
| PlaceholderAPI | `placeholderapi` | Placeholder framework |
|
||||
| EssentialsX | `essentialsx` | /home, /tpa, /spawn, kits, economy |
|
||||
| WorldEdit | `worldedit` | In-game terrain editing |
|
||||
| Simple Voice Chat | `simple-voice-chat` | In-game proximity voice |
|
||||
| MiniMOTD | `minimotd` | Custom server list MOTD |
|
||||
| SkinsRestorer | `skinsrestorer` | Custom skins on offline-mode |
|
||||
| CoreProtect | `coreprotect` | Block/inventory rollback |
|
||||
| GrimAC | `grimac` | Anti-cheat |
|
||||
| spark | `spark` | Profiler / TPS / memory |
|
||||
| DiscordSRV | `discordsrv` | Two-way Discord ↔ chat bridge |
|
||||
| LandClaimPlugin | `landclaimplugin` | FOSS land claim (replaces paid Lands) |
|
||||
| TAB | `tab-was-taken` | Tablist / scoreboard / nametags |
|
||||
|
||||
`MODRINTH_DOWNLOAD_DEPENDENCIES: required` — also pulls hard deps (e.g. ProtocolLib if a plugin requires it).
|
||||
|
||||
## Spigot (auto-DL via `SPIGET_RESOURCES`)
|
||||
|
||||
| Plugin | Spigot ID | URL |
|
||||
|--------|-----------|-----|
|
||||
| ProtocolLib | 1997 | https://www.spigotmc.org/resources/protocollib.1997/ |
|
||||
| Vault | 34315 | https://www.spigotmc.org/resources/vault.34315/ |
|
||||
|
||||
## Manual install (drop jar in `/opt/docker/minecraft/plugins/`)
|
||||
|
||||
These are not on Modrinth/Spiget under stable slugs; download manually and drop the jar in `plugins/`. Set `REMOVE_OLD_MODS: "false"` in compose if you want them to survive restarts (current default removes all jars on boot).
|
||||
|
||||
| Plugin | Source | Notes |
|
||||
|--------|--------|-------|
|
||||
| LoginSecurity | https://www.spigotmc.org/resources/loginsecurity.19362/ | Required for cracked servers (offline mode) |
|
||||
| ComfyWhitelist | Hangar / GH (search "ComfyWhitelist") | Whitelist UX |
|
||||
| MarriageMaster | https://www.spigotmc.org/resources/marriagemaster.19273/ | Player marriage system |
|
||||
| PhantomSMP | https://www.spigotmc.org/resources/phantomsmp.59996/ | Phantom spawn rebalance |
|
||||
| HelpCommand | Spigot resource | Custom /help |
|
||||
| ProAntiTab | https://www.spigotmc.org/resources/proantitab.59141/ | Tab-completion filter |
|
||||
|
||||
## Removed / replaced
|
||||
|
||||
| Plugin | Status | Reason |
|
||||
|--------|--------|--------|
|
||||
| Lands | **Removed** | Paid (BuiltByBit). Replaced by LandClaimPlugin. See [migrations/lands-to-landclaim.md](migrations/lands-to-landclaim.md). |
|
||||
| LitePlaytimeRewards | **Removed** | Dead upstream (last release 2021), no maintained source. |
|
||||
| CosmicGuard | **Removed** | Premium continuous build, can't auto-fetch. GrimAC covers anti-cheat. |
|
||||
|
||||
## Adding a plugin
|
||||
|
||||
1. Find Modrinth slug (URL `modrinth.com/plugin/<slug>`).
|
||||
2. Append to `MODRINTH_PROJECTS` block in `docker-compose.yml`.
|
||||
3. `docker compose down && docker compose up -d`.
|
||||
|
||||
Or for Spigot: add ID to `SPIGET_RESOURCES: "1997,34315,<NEW_ID>"`.
|
||||
|
||||
## Pinning versions
|
||||
|
||||
Defaults pull *latest*. To pin, use slug form `<slug>:<version-id>` for Modrinth or `<id>:<version>` for Spiget. See https://docker-minecraft-server.readthedocs.io/en/latest/mods-and-plugins/.
|
||||
519
docs/PLUGIN_ALTERNATIVES.md
Normal file
519
docs/PLUGIN_ALTERNATIVES.md
Normal file
|
|
@ -0,0 +1,519 @@
|
|||
# Plugin alternatives — FOSS-alignment audit
|
||||
|
||||
Goal: for every plugin, evaluate against the vision (FOSS, privacy-first, no telemetry, no Microsoft-account dependency, active maintenance, GH-source-of-truth, attribution-respecting). Identify swaps where a more aligned alternative exists.
|
||||
|
||||
Scoring axes:
|
||||
- **L** — License (GPL/MIT/Apache > LGPL > custom-FOSS > closed)
|
||||
- **S** — Source visibility (GH > Hangar > Modrinth-only > Spigot-only > closed)
|
||||
- **T** — Telemetry (none > opt-in > opt-out > forced)
|
||||
- **M** — Maintenance (active commits in last 90 days > stale > archived > dead)
|
||||
- **D** — Dependency footprint (no native, no proprietary deps > requires ProtocolLib/Vault > requires premium)
|
||||
|
||||
## 1. LuckPerms (perms)
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Current | LuckPerms by Luck (lucko) |
|
||||
| License | MIT |
|
||||
| Source | https://github.com/LuckPerms/LuckPerms |
|
||||
| Vision fit | **Excellent** — author is FOSS-native, MIT, GH-primary, no telemetry |
|
||||
|
||||
**Alternatives:**
|
||||
- *PermissionsEx* — abandoned, security holes
|
||||
- *GroupManager* (Essentials) — bundled, weaker
|
||||
- *GoPerms* — newer, less battle-tested
|
||||
|
||||
**Verdict:** **Keep.** Industry standard, perfect alignment.
|
||||
|
||||
---
|
||||
|
||||
## 2. PlaceholderAPI (placeholder framework)
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Current | PlaceholderAPI by HelpChat / extended-clip |
|
||||
| License | GPL-3.0 |
|
||||
| Source | https://github.com/PlaceholderAPI/PlaceholderAPI |
|
||||
| Vision fit | **Excellent** — GPL, GH, ubiquitous |
|
||||
|
||||
**Alternatives:**
|
||||
- *MVdWPlaceholderAPI* — defunct, premium
|
||||
- *MiniPlaceholders* — Adventure-native, modern, MIT, https://github.com/MiniPlaceholders/MiniPlaceholders
|
||||
|
||||
**Verdict:** **Keep PlaceholderAPI for now**, **evaluate MiniPlaceholders** as a future swap if our other plugins start using Adventure components — it's lighter and avoids legacy color codes.
|
||||
|
||||
---
|
||||
|
||||
## 3. EssentialsX (utility kitchen sink)
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Current | EssentialsX |
|
||||
| License | GPL-3.0 |
|
||||
| Source | https://github.com/EssentialsX/Essentials |
|
||||
| Vision fit | **Strong** — GPL, GH, but huge surface area, slow to adopt new APIs |
|
||||
|
||||
**Alternatives:**
|
||||
- *CMI* — paid, closed → reject
|
||||
- *Nova Essentials* — newer, modular, MIT-ish, https://github.com/NovaEssentials
|
||||
- *EssentialsK* — fork w/ Kotlin/modern paper API, https://github.com/Essentials-K/EssentialsK
|
||||
- Modular replacements (one plugin per feature):
|
||||
- **Homes/teleport**: HuskHomes (https://github.com/WiIIiam278/HuskHomes) — MIT, modern, cross-server
|
||||
- **Warps**: HuskHomes covers it
|
||||
- **Kits**: dedicated KitMaster, or stay with EssentialsX
|
||||
- **Economy**: TNE, ElementalEcon (FOSS)
|
||||
- **Chat**: VentureChat (https://github.com/VentureCommunications/VentureChat) — GPL
|
||||
|
||||
**Verdict:** **Keep EssentialsX short-term. Long-term: split by domain** — HuskHomes for teleport (better UX), keep EssentialsX for the rest until evaluated. Document as Phase 4 in ROADMAP.
|
||||
|
||||
---
|
||||
|
||||
## 4. WorldEdit (world editing)
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Current | WorldEdit by EngineHub |
|
||||
| License | GPL-3.0 |
|
||||
| Source | https://github.com/EngineHub/WorldEdit |
|
||||
| Vision fit | **Excellent** — GPL, GH, gold standard |
|
||||
|
||||
**Alternatives:**
|
||||
- *FastAsyncWorldEdit (FAWE)* — fork w/ async perf, LGPL, https://github.com/IntellectualSites/FastAsyncWorldEdit — **drop-in replacement, faster**
|
||||
- *VoxelSniper* — different use case (terrain sculpting)
|
||||
|
||||
**Verdict:** **Swap to FAWE.** Same API, much faster, FOSS, actively maintained. Bonus: handles big edits without freezing the server.
|
||||
|
||||
---
|
||||
|
||||
## 5. Simple Voice Chat (voice)
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Current | Simple Voice Chat by henkelmax |
|
||||
| License | LGPL-3.0 |
|
||||
| Source | https://github.com/henkelmax/simple-voice-chat |
|
||||
| Vision fit | **Excellent** — LGPL, GH, no telemetry, self-hosted |
|
||||
|
||||
**Alternatives:**
|
||||
- *Plasmo Voice* — separate ecosystem, mod-side requirement, less plugin-friendly
|
||||
- *Mumble integration* — heavy, breaks one-click goal
|
||||
|
||||
**Verdict:** **Keep.** Best-in-class for our use case.
|
||||
|
||||
---
|
||||
|
||||
## 6. MiniMOTD (server-list MOTD)
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Current | MiniMOTD by jpenilla |
|
||||
| License | MIT |
|
||||
| Source | https://github.com/jpenilla/MiniMOTD |
|
||||
| Vision fit | **Excellent** — MIT, GH |
|
||||
|
||||
**Alternatives:**
|
||||
- *ServerListPlus* — older, more features, GPL
|
||||
- *Native paper-api MOTD* — code yourself, no plugin
|
||||
|
||||
**Verdict:** **Keep.** Lightweight, modern, no reason to swap.
|
||||
|
||||
---
|
||||
|
||||
## 7. SkinsRestorer (offline-mode skins)
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Current | SkinsRestorer |
|
||||
| License | GPL-3.0 |
|
||||
| Source | https://github.com/SkinsRestorer/SkinsRestorer |
|
||||
| Vision fit | **Strong** — GPL, GH, but proxies skin lookup through Mojang API by default |
|
||||
|
||||
**Concern:** "Microsoft-free" goal vs. Mojang skin API. Workaround: SkinsRestorer supports custom skin URLs / MineSkin alternative.
|
||||
|
||||
**Alternatives:**
|
||||
- *MineSkin* (https://api.mineskin.org) — community skin server, can be self-hosted
|
||||
- *NameMC mirror APIs* — third-party
|
||||
- *Self-hosted skin server* — most aligned, requires setup
|
||||
|
||||
**Verdict:** **Keep SkinsRestorer**. Phase 2 follow-up: configure to point at self-hosted skin server (or MineSkin) to fully cut Mojang dependency. Document in `docs/SKIN_HOSTING.md` (TBD).
|
||||
|
||||
---
|
||||
|
||||
## 8. CoreProtect / CoreProtect-CE (logging / rollback)
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Current | CoreProtect-CE 23.1 (community fork) |
|
||||
| License | Source-available, "all rights reserved" — readable but not OSI-FOSS |
|
||||
| Source | https://github.com/PlayPro/CoreProtect (orig), https://github.com/Intelli/CoreProtect (CE fork) |
|
||||
| Vision fit | **Mixed** — license isn't OSI-FOSS, but operationally is the most reliable rollback plugin in the ecosystem |
|
||||
|
||||
**Operator priority (explicit):** solid logs from day one, **easy per-player rollback** matters more than license purity for this specific plugin.
|
||||
|
||||
**Comparison vs Prism (the FOSS alternative):**
|
||||
|
||||
| Feature | CoreProtect-CE | Prism |
|
||||
|---------|----------------|-------|
|
||||
| Per-player rollback (`/co rollback u:Foo t:7d r:50`) | rock solid, 13+ years tuned | supported, less battle-tested |
|
||||
| Inspector tool (`/co i` → click block) | gold standard UX | works, less polished |
|
||||
| Sign/container/entity restoration | clean, robust | edge-case bugs reported |
|
||||
| At-scale performance (100+ players) | proven | less proven |
|
||||
| Rollback safety on huge edits | proven | newer codebase |
|
||||
| API surface for other plugins | wide ecosystem support | smaller ecosystem |
|
||||
| License | source-available, "all rights reserved" | MIT |
|
||||
| Source readable | yes (GH public) | yes (GH public) |
|
||||
| Active dev | yes (CE fork: Intelli) | yes (Prism v3+) |
|
||||
|
||||
**Why this is the principled exception:**
|
||||
- License is *source-available* (readable + auditable + forkable in practice), not OSI-FOSS (no explicit redistribution grant).
|
||||
- Operational reliability for **player protection** outweighs license purity for *this one plugin*.
|
||||
- Server's trust model depends on rollback being airtight; Prism's gotchas (sign/container restoration edge cases) would mean failed grief reports.
|
||||
- CoreProtect's inspector tool UX is so dominant that swapping costs admin productivity.
|
||||
|
||||
**Verdict:** **Keep CoreProtect-CE.** Document this as the one acknowledged license exception in MISSION.md. Revisit when Prism reaches feature parity on signs/containers/entity rollback at scale.
|
||||
|
||||
**Alternatives evaluated:**
|
||||
- *Prism v3+* — MIT, modern, active. Strong on paper, gaps in field-tested rollback edge cases. Reconsider in 12-18 months.
|
||||
- *LogBlock* — abandoned, drop.
|
||||
- *CoreProtect 22.x* — earlier Apache-2.0 version; outdated, missing features.
|
||||
|
||||
---
|
||||
|
||||
## 9. GrimAC (anti-cheat)
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Current | GrimAC by MWHunter |
|
||||
| License | GPL-3.0 |
|
||||
| Source | https://github.com/GrimAnticheat/Grim |
|
||||
| Vision fit | **Excellent** — GPL, GH, no telemetry, transparent detection logic |
|
||||
|
||||
**Alternatives:**
|
||||
- *Vulcan* — paid, closed → reject
|
||||
- *Matrix* — paid → reject
|
||||
- *NoCheatPlus* — abandoned upstream, reincarnated as CMI-NCP, free but old
|
||||
- *Spartan AC* — paid, closed → reject
|
||||
|
||||
**Verdict:** **Keep.** GrimAC is the only FOSS anti-cheat that matters in 2026.
|
||||
|
||||
---
|
||||
|
||||
## 10. spark (profiler)
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Current | spark by Luck (lucko) |
|
||||
| License | GPL-3.0 |
|
||||
| Source | https://github.com/lucko/spark |
|
||||
| Vision fit | **Excellent** — GPL, GH, no telemetry beyond opt-in heap-share |
|
||||
|
||||
**Alternatives:**
|
||||
- *Timings* — Paper built-in, deprecated upstream
|
||||
- *Pufferfish profiler* — server-fork-specific
|
||||
|
||||
**Verdict:** **Keep.** Only credible profiler.
|
||||
|
||||
---
|
||||
|
||||
## 11. DiscordSRV (Discord bridge)
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Current | DiscordSRV by Scarsz |
|
||||
| License | GPL-3.0 |
|
||||
| Source | https://github.com/DiscordSRV/DiscordSRV |
|
||||
| Vision fit | **Mixed** — DiscordSRV itself is GPL/FOSS, but Discord is *the* opposite of our values (proprietary, closed, telemetry-heavy, Microsoft-adjacent via MS GitHub stack). Bridges player chat to a closed platform. |
|
||||
|
||||
**Alternatives:**
|
||||
- *MatrixSRV / matrix-bridge* — bridge to Matrix instead of/alongside Discord
|
||||
- *Telegraph* — Telegram bridge
|
||||
- *RevoltSRV* — bridge to Revolt (FOSS Discord-alike), https://github.com/Frosty-The-Dev/RevoltSRV
|
||||
- *Custom Matrix bridge* — write your own to existing Tuwunel homeserver (memory: txt.s8n.ru is yours)
|
||||
|
||||
**Verdict:** **Keep DiscordSRV for player reach, but add a Matrix bridge as the primary FOSS-aligned channel.** Discord is where players are; Matrix is where principles are. Operate both. You already run a Tuwunel homeserver (txt.s8n.ru) — natural home for the FOSS-aligned bridge. **Action: deploy mc-matrix-bridge alongside.**
|
||||
|
||||
---
|
||||
|
||||
## 12. LandClaimPlugin (claims) — recently swapped from Lands
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Current | LandClaimPlugin (Modrinth) |
|
||||
| License | TBD (verify on Modrinth + GH) |
|
||||
| Source | https://modrinth.com/plugin/landclaimplugin |
|
||||
| Vision fit | **Strong if FOSS confirmed, Verify before celebrating** |
|
||||
|
||||
**Alternatives:**
|
||||
- *GriefPrevention* (https://github.com/GriefPrevention/GriefPrevention) — MIT, GH, oldest + most battle-tested FOSS claim plugin
|
||||
- *GriefDefender* — fork, GPL, modern
|
||||
- *RedProtect* — GPL, mature, https://github.com/FabioZumbi12/RedProtect
|
||||
- *PlotSquared* — for plot-style worlds, different use case
|
||||
|
||||
**Operator decision (confirmed):** **Keep LandClaimPlugin.** Rationale:
|
||||
- Chunk-based claims = vanilla-feel. Players see chunk borders via `F3+G` (built-in vanilla) — no client mod, no resource pack, no extra UI required to know where claims are.
|
||||
- GriefPrevention's free-form rectangle claims feel less native and require a separate visualization tool/plugin for boundary display.
|
||||
- Keeping vanilla-aligned mechanics is mission-aligned: minimum surface area, maximum native feel.
|
||||
|
||||
**Outstanding TODO:** verify LandClaimPlugin's license. If proprietary, fork or replace with another chunk-based FOSS claim plugin (chunk-claim plugins exist on Modrinth, e.g. `chunkclaim`, `simplechunkclaim`).
|
||||
|
||||
**Alternatives kept on file as fallback:**
|
||||
- *GriefPrevention* — free-form, FOSS, but loses the chunk-feel.
|
||||
- *ChunkClaim* — chunk-based, FOSS-likely; fallback if LCP license fails.
|
||||
|
||||
---
|
||||
|
||||
## 13. TAB (tablist / scoreboard / nametags)
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Current | TAB by NEZNAMY |
|
||||
| License | _verify — listed on GH but check_ |
|
||||
| Source | https://github.com/NEZNAMY/TAB |
|
||||
| Vision fit | **Strong** — GH-primary, no telemetry, free |
|
||||
|
||||
**Alternatives:**
|
||||
- *FeatherBoard* — paid, closed → reject
|
||||
- *AnimatedTabs / TabPrefix* — feature subset only
|
||||
- *MyScoreboard* — scoreboard only
|
||||
|
||||
**Verdict:** **Keep.** Best feature/license tradeoff.
|
||||
|
||||
---
|
||||
|
||||
## 14. ProtocolLib (protocol library)
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Current | ProtocolLib by dmulloy2 + contributors |
|
||||
| License | GPL-2.0 |
|
||||
| Source | https://github.com/dmulloy2/ProtocolLib |
|
||||
| Vision fit | **Strong** — GPL, GH, but heavy; many plugins demand it |
|
||||
|
||||
**Alternatives:**
|
||||
- *PacketEvents* (https://github.com/retrooper/packetevents) — GPL-3.0, more modern, faster, used by GrimAC
|
||||
- *Native Paper packet API* — limited but growing
|
||||
|
||||
**Verdict:** **Evaluate dropping ProtocolLib in favor of PacketEvents.** GrimAC already uses PacketEvents. If we can find PacketEvents-based forks of plugins currently demanding ProtocolLib, we shrink the dep tree. Phase 4 task.
|
||||
|
||||
---
|
||||
|
||||
## 15. Vault (economy/perms abstraction)
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Current | Vault by MilkBowl |
|
||||
| License | LGPL-3.0 |
|
||||
| Source | https://github.com/MilkBowl/Vault |
|
||||
| Vision fit | **Strong** — LGPL, GH, but old (2016 era API) |
|
||||
|
||||
**Alternatives:**
|
||||
- *VaultUnlocked* (https://github.com/CraftYourMind/VaultUnlocked) — modern fork, more features
|
||||
- *Treasury* — GPL-3.0, modern econ-only API, https://github.com/lokka30/Treasury
|
||||
|
||||
**Verdict:** **Swap to VaultUnlocked.** Fork with same API surface but modernized. Treasury alone won't cover non-econ plugins demanding Vault.
|
||||
|
||||
---
|
||||
|
||||
## 16. LoginSecurity (offline-mode auth)
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Current | LoginSecurity 3.3.1 (lenis0012 archived; Sytm fork) |
|
||||
| License | GPL-3.0 |
|
||||
| Source | original archived; forks unclear |
|
||||
| Vision fit | **Weak** — upstream dead, fork unclear, security-critical |
|
||||
|
||||
**Critical feature requirement (from operator):** plugin must **teleport unauthenticated players to spawn** during login. Reason: prevents base-coord leaks via screenshot/glance/screen-share by anyone who joins w/ a stolen username before typing /login. This is non-negotiable for cracked-server gameplay safety.
|
||||
|
||||
**Alternatives evaluated against this requirement:**
|
||||
|
||||
| Plugin | Teleports unauth → spawn? | License | Active | Notes |
|
||||
|--------|----------------------------|---------|--------|-------|
|
||||
| **AuthMe Reloaded** | **Yes** — `teleportUnAuthedToSpawn: true` config option | GPL-3.0 | active | https://github.com/AuthMe/AuthMeReloaded |
|
||||
| FastLogin | No (premium-passthrough flow) | LGPL-3.0 | active | Different use case |
|
||||
| xAuth | Yes (old impl) | abandoned | dead | reject |
|
||||
| nLogin | Yes | closed | n/a | reject |
|
||||
| LibreLogin | **Yes** (proxy-side) | GPL-3.0 | active | https://github.com/kyngs/LibreLogin — Velocity/BungeeCord focused; may be overkill for single-server but FOSS-aligned |
|
||||
|
||||
**AuthMe-specific config to match LoginSecurity behavior:**
|
||||
```yaml
|
||||
# config.yml
|
||||
restrictions:
|
||||
teleportUnAuthedToSpawn: true # the critical feature
|
||||
ProtectInventoryBeforeLogIn: true # extra safety
|
||||
allowMovement: false # block all movement until /login
|
||||
noTeleport: true # block /tp until authed
|
||||
timeout: 60 # kick after 60s of no /login
|
||||
```
|
||||
|
||||
**Verdict:** **Swap to AuthMe Reloaded.** Same critical feature, active maintenance, FOSS, security-audited. LoginSecurity is end-of-life and forks are murky. **High priority** because this is auth + base-coord protection.
|
||||
|
||||
---
|
||||
|
||||
## 17. ComfyWhitelist (whitelist)
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Current | ComfyWhitelist by etil2jz |
|
||||
| License | TBD — verify |
|
||||
| Source | TBD — likely Hangar/GH |
|
||||
| Vision fit | **Conditional Keep** if license verifies as FOSS |
|
||||
|
||||
**Critical feature requirement (from operator):** plugin must apply whitelist changes **without server restart or `/reload`**, and must work on **cracked/offline-mode servers without Mojang API lookups**.
|
||||
|
||||
**Why native `/whitelist` is insufficient on this server:**
|
||||
|
||||
Vanilla `/whitelist add <name>` on an offline-mode server:
|
||||
1. Tries to look up the player's UUID via Mojang API.
|
||||
2. If Mojang lookup fails (network blip, Mojang down, player has no premium account): server may store wrong UUID, no UUID, or refuse to add.
|
||||
3. Cracked players have offline-derived UUIDs (`OfflinePlayer:<name>` hash), which don't match Mojang's online UUID. Whitelist comparison fails on join.
|
||||
4. Some Paper/Purpur configs require restart to fully apply whitelist changes when UUID lookup is involved.
|
||||
|
||||
ComfyWhitelist (and similar name-based whitelist plugins) sidestep all of the above:
|
||||
- Whitelist by **name string**, not UUID.
|
||||
- No Mojang API calls — fully local, fully offline-safe.
|
||||
- Changes apply instantly, no restart, no `/reload`.
|
||||
- Aligns w/ "Microsoft-free" mission (no Mojang dependency for whitelist auth).
|
||||
|
||||
**Alternatives that also satisfy these constraints:**
|
||||
|
||||
| Plugin | Name-based? | No Mojang call? | Hot-reload? | License | Source |
|
||||
|--------|-------------|-----------------|-------------|---------|--------|
|
||||
| **ComfyWhitelist** | yes | yes | yes | TBD | TBD |
|
||||
| Native `/whitelist` | no (UUID) | no | partial | n/a | n/a |
|
||||
| AdvancedWhitelist | varies | varies | yes | GPL | Hangar |
|
||||
| Whitelist (by mxstr) | yes | yes | yes | MIT | https://github.com/mxstr/Whitelist |
|
||||
| Custom 50-line plugin | yes | yes | yes | MIT | self-host |
|
||||
|
||||
**Verdict:** **Keep ComfyWhitelist** — features (name-based + hot-reload + offline-safe) are mission-critical. **TODO:** verify ComfyWhitelist license is FOSS. If proprietary or unclear → swap to a confirmed-FOSS name-based whitelist plugin (like the mxstr one) preserving all three features.
|
||||
|
||||
**Note for documentation:** add to `docs/plugins/comfywhitelist.md` an explicit "why we use this over native" rationale so future maintainers don't drop it.
|
||||
|
||||
---
|
||||
|
||||
## 18. MarriageMaster (social)
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Current | MarriageMaster by DerFlash |
|
||||
| License | TBD (likely Spigot resource license) |
|
||||
| Source | https://www.spigotmc.org/resources/marriagemaster.19273/ — Spigot only |
|
||||
| Vision fit | **Weak** — Spigot-only acquisition, no GH presence found, license unclear |
|
||||
|
||||
**Alternatives:**
|
||||
- *SimpleMarriage* (FOSS, less feature) — find GPL alternative
|
||||
- Ditch entirely — niche feature, low priority
|
||||
|
||||
**Verdict:** **Audit:** is this feature widely used by your players? If yes, find a GPL alternative or fork DerFlash's plugin under FOSS license (if license permits). If no, **drop**.
|
||||
|
||||
---
|
||||
|
||||
## 19. PhantomSMP (phantom rebalance)
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Current | PhantomSMP by Lielay9 |
|
||||
| License | TBD (Spigot resource) |
|
||||
| Source | Spigot only |
|
||||
| Vision fit | **Weak** |
|
||||
|
||||
**Alternatives:**
|
||||
- *PhantomLight* — alternative Spigot resource, license TBD
|
||||
- *Native Paper config* — paper-world-defaults.yml has phantom-spawn knobs
|
||||
- *DataPack* — vanilla solution, no plugin needed
|
||||
|
||||
**Verdict:** **Replace with native Paper config + datapack.** Removes plugin dep entirely. Your players won't notice the difference if tuned well.
|
||||
|
||||
---
|
||||
|
||||
## 20. HelpCommand (custom /help)
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Current | HelpCommand by Slimerblue22 |
|
||||
| License | TBD |
|
||||
| Source | Spigot only |
|
||||
| Vision fit | **Weak — easy to drop** |
|
||||
|
||||
**Alternatives:**
|
||||
- *Native Bukkit `/help`* — built-in
|
||||
- *HelpCMD* — alternative
|
||||
- *commands.yml* — Bukkit's built-in alias system covers most use cases
|
||||
|
||||
**Verdict:** **Drop.** Use native `/help` + customize via `commands.yml` (already in repo).
|
||||
|
||||
---
|
||||
|
||||
## 21. ProAntiTab (tab-completion filter)
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Current | ProAntiTab by RayzsYT |
|
||||
| License | **GPL-2.0-or-later** (verified via Modrinth 2026-04-27) |
|
||||
| Source | https://github.com/RayzsYT/ProAntiTab |
|
||||
| Modrinth | https://modrinth.com/plugin/proantitab |
|
||||
| Vision fit | **Excellent** — GPL, GH-primary, free, supports Paper/Purpur/Velocity/Folia |
|
||||
|
||||
**Earlier note corrected:** Initially flagged as "likely premium BoomEaro" — that was wrong. Real author is RayzsYT, plugin is FOSS, free, well-maintained.
|
||||
|
||||
**Features that justify keeping:**
|
||||
- Hide commands from tab-complete based on permission
|
||||
- Block plugin-detection hacks (spoofing, namespace probing)
|
||||
- Custom F3 server brand (cosmetic, no info leak)
|
||||
- Whitelist/blacklist command modes
|
||||
- Sub-argument blocking (granular command visibility)
|
||||
- PlaceholderAPI integration, MiniMessage formatting
|
||||
- Group-based permission system
|
||||
|
||||
**Verdict:** **Keep ProAntiTab.** No swap needed. Aligned with mission, GPL FOSS, GH source-of-truth, free.
|
||||
|
||||
---
|
||||
|
||||
## Already removed (vision-aligned)
|
||||
|
||||
| Plugin | Reason | Replacement |
|
||||
|--------|--------|-------------|
|
||||
| Lands | Paid, closed-ish | LandClaimPlugin (verify FOSS) |
|
||||
| LitePlaytimeRewards | Dead upstream | TBD or drop |
|
||||
| CosmicGuard | Premium continuous | GrimAC covers anti-cheat |
|
||||
|
||||
---
|
||||
|
||||
## Summary table
|
||||
|
||||
| # | Plugin | Status | Action |
|
||||
|---|--------|--------|--------|
|
||||
| 1 | LuckPerms | Keep | — |
|
||||
| 2 | PlaceholderAPI | Keep | Evaluate MiniPlaceholders Phase 4 |
|
||||
| 3 | EssentialsX | Keep | Long-term: split into modular FOSS (HuskHomes etc) |
|
||||
| 4 | WorldEdit | **Swap → FAWE** | High pri (perf + still GPL) |
|
||||
| 5 | Simple Voice Chat | Keep | — |
|
||||
| 6 | MiniMOTD | Keep | — |
|
||||
| 7 | SkinsRestorer | Keep | Phase 2: self-hosted skin server |
|
||||
| 8 | CoreProtect-CE | **Keep** (acknowledged license exception) | Reliability > purity per operator decision |
|
||||
| 9 | GrimAC | Keep | — |
|
||||
| 10 | spark | Keep | — |
|
||||
| 11 | DiscordSRV | Keep + add Matrix bridge | High pri (FOSS comm channel) |
|
||||
| 12 | LandClaimPlugin | **Verify license, possibly swap → GriefPrevention** | High pri |
|
||||
| 13 | TAB | Keep (verify license) | Med pri verify |
|
||||
| 14 | ProtocolLib | Keep, evaluate PacketEvents-only future | Phase 4 |
|
||||
| 15 | Vault | **Swap → VaultUnlocked** | Med pri |
|
||||
| 16 | LoginSecurity | **Swap → AuthMe Reloaded** | **High pri (auth)** |
|
||||
| 17 | ComfyWhitelist | **Drop → native /whitelist** | Low pri |
|
||||
| 18 | MarriageMaster | Audit usage, drop or replace | Low pri |
|
||||
| 19 | PhantomSMP | **Drop → native config + datapack** | Low pri |
|
||||
| 20 | HelpCommand | **Drop → native /help** | Low pri |
|
||||
| 21 | ProAntiTab | **Keep** (GPL-2.0-or-later, FOSS, free, GH) | — |
|
||||
|
||||
## High-priority swap order (proposed)
|
||||
|
||||
1. **LoginSecurity → AuthMe Reloaded** — security-critical, dead upstream
|
||||
2. **Verify ProAntiTab + LandClaimPlugin licenses** — drop/swap if non-FOSS
|
||||
3. **WorldEdit → FAWE** — perf win, drop-in
|
||||
4. **Vault → VaultUnlocked** — modernization
|
||||
5. **Add Matrix bridge for chat** — uses existing Tuwunel homeserver
|
||||
6. **CoreProtect-CE → Prism** — license cleanup (do after world stable, harder migration)
|
||||
7. **Drop ComfyWhitelist, HelpCommand, PhantomSMP** — consolidate to native
|
||||
8. **Phase 4 deep refactor**: EssentialsX split, ProtocolLib evaluation, MiniPlaceholders eval
|
||||
|
||||
Each swap = a PR + a `docs/migrations/<from>-to-<to>.md` doc.
|
||||
171
docs/ROADMAP.md
Normal file
171
docs/ROADMAP.md
Normal file
|
|
@ -0,0 +1,171 @@
|
|||
# Roadmap — plugin acquisition overhaul
|
||||
|
||||
Goal: replace runtime env-driven plugin downloads with a reproducible, source-of-truth-first acquisition pipeline. Make the server fully open source, fully auditable, fully reproducible.
|
||||
|
||||
## Problem (current state)
|
||||
|
||||
Plugins are pulled at every container boot via `MODRINTH_PROJECTS` + `SPIGET_RESOURCES` env vars in `docker-compose.yml`. Pain points hit during 2026-04-27 deploy:
|
||||
|
||||
- **Slug ≠ name** — `vault`, `protocollib` not on Modrinth at expected slug. Three boot loops to discover.
|
||||
- **Channel mismatch** — GrimAC alpha-only, WorldEdit beta-only on bleeding-edge MC versions. Default `release` filter silently rejected. Two more boot loops.
|
||||
- **Wrong env var** — `MODRINTH_DEFAULT_VERSION_TYPE` is for modpack flow; `MODRINTH_PROJECTS` flow needs `MODRINTH_PROJECTS_DEFAULT_VERSION_TYPE`. One more boot loop.
|
||||
- **VERSION=LATEST + Purpur** — Purpur 26.x versioning scheme confused itzg, sent "26.1.2" as MC version to Modrinth API; EssentialsX query returned no files.
|
||||
- **No lockfile** — `latest` drifts daily. No checksum, no audit trail.
|
||||
- **No pre-flight** — every typo is a 30s container restart cycle.
|
||||
- **License opacity** — no automated check that plugins are FOSS-compatible before adding.
|
||||
- **`REMOVE_OLD_MODS=*.jar`** wipes manually-placed jars on every boot, hostile to manual-only plugins (LoginSecurity, MarriageMaster, etc).
|
||||
|
||||
## Acquisition order — proposed
|
||||
|
||||
1. **GitHub Releases** (primary)
|
||||
2. **Hangar** (PaperMC official)
|
||||
3. **Modrinth**
|
||||
4. **Spiget / SpigotMC**
|
||||
5. **Manual jar** (last resort, premium/dead)
|
||||
|
||||
### Why GitHub first
|
||||
|
||||
- Source-truth: jar built from tag, signed commit, reproducible.
|
||||
- License visible — repo `LICENSE` file. FOSS audit trivial.
|
||||
- Stable URL pattern: `github.com/<owner>/<repo>/releases/download/<tag>/<asset>.jar`.
|
||||
- API: `api.github.com/repos/<owner>/<repo>/releases/latest` — JSON, version + asset URLs + checksums.
|
||||
- No platform lock-in (Modrinth/Hangar can delist; GH source survives).
|
||||
- Most Bukkit plugins ARE on GitHub — Modrinth/Hangar often just mirror.
|
||||
|
||||
## Design
|
||||
|
||||
### `plugins.yml` (manifest, committed)
|
||||
|
||||
```yaml
|
||||
plugins:
|
||||
- name: LuckPerms
|
||||
sources:
|
||||
- github: { owner: LuckPerms, repo: LuckPerms, asset_pattern: "LuckPerms-Bukkit-*.jar" }
|
||||
- modrinth: luckperms
|
||||
pin: latest # or "5.5.20" or sha256:abc...
|
||||
|
||||
- name: ProtocolLib
|
||||
sources:
|
||||
- github: { owner: dmulloy2, repo: ProtocolLib, asset_pattern: "ProtocolLib.jar" }
|
||||
- spiget: 1997
|
||||
|
||||
- name: Vault
|
||||
sources:
|
||||
- github: { owner: MilkBowl, repo: Vault, asset_pattern: "Vault.jar" }
|
||||
|
||||
- name: WorldEdit
|
||||
sources:
|
||||
- github: { owner: EngineHub, repo: WorldEdit, asset_pattern: "worldedit-bukkit-*.jar" }
|
||||
- hangar: { author: EngineHub, project: WorldEdit }
|
||||
- modrinth: worldedit
|
||||
channel: beta
|
||||
|
||||
- name: LandClaimPlugin
|
||||
sources:
|
||||
- modrinth: landclaimplugin
|
||||
|
||||
- name: LoginSecurity
|
||||
sources:
|
||||
- manual: ./manual-jars/LoginSecurity-3.3.1.jar
|
||||
license: GPL-3.0
|
||||
upstream_url: https://www.spigotmc.org/resources/loginsecurity.19362/
|
||||
```
|
||||
|
||||
### `plugins.lock` (generated, committed)
|
||||
|
||||
```
|
||||
LuckPerms-Bukkit-5.5.20.jar sha256:abc... github:LuckPerms/LuckPerms@v5.5.20
|
||||
ProtocolLib.jar sha256:def... github:dmulloy2/ProtocolLib@5.4.0
|
||||
...
|
||||
```
|
||||
|
||||
### `scripts/fetch-plugins.sh` (resolver)
|
||||
|
||||
Runs **before** `docker compose up`. Pseudo:
|
||||
|
||||
```bash
|
||||
for plugin in plugins.yml; do
|
||||
for src in plugin.sources; do # fallback chain — first hit wins
|
||||
case src.type in
|
||||
github) asset=$(gh-api releases/latest); curl -L -o $asset ;;
|
||||
hangar) curl hangar.papermc.io/api/v1/projects/... ;;
|
||||
modrinth) curl api.modrinth.com/v2/project/$slug/version ;;
|
||||
spiget) curl api.spiget.org/v2/resources/$id/download ;;
|
||||
manual) cp $path ;;
|
||||
esac
|
||||
[ $? -eq 0 ] && break
|
||||
done
|
||||
sha256sum $jar >> plugins.lock
|
||||
done
|
||||
```
|
||||
|
||||
Output: `plugins/*.jar` directory ready to bind-mount, plus `plugins.lock` for diff/audit.
|
||||
|
||||
### Compose changes
|
||||
|
||||
```yaml
|
||||
volumes:
|
||||
- /opt/docker/minecraft:/data
|
||||
environment:
|
||||
REMOVE_OLD_MODS: "false" # plugins/ pre-populated, don't wipe
|
||||
# delete: MODRINTH_PROJECTS, SPIGET_RESOURCES, MODRINTH_PROJECTS_DEFAULT_VERSION_TYPE
|
||||
```
|
||||
|
||||
itzg image becomes pure runtime. Plugin acquisition is a separate, testable, reproducible build step.
|
||||
|
||||
## Phased rollout
|
||||
|
||||
### Phase 1 — pin everything (1 hour)
|
||||
|
||||
Keep itzg env-driven. Replace `slug` with `slug:VERSION_ID` in `MODRINTH_PROJECTS`. Use `id:VERSION` in `SPIGET_RESOURCES`. No more `latest` drift.
|
||||
|
||||
**Acceptance:** `docker compose up -d` produces identical plugin set on any host, any day.
|
||||
|
||||
### Phase 2 — fetch script + manifest (1 day)
|
||||
|
||||
- Write `plugins.yml` w/ all current plugins + sources.
|
||||
- Write `scripts/fetch-plugins.sh` (bash, jq, curl, gh CLI).
|
||||
- Write `plugins.lock` first run, commit it.
|
||||
- Strip `MODRINTH_PROJECTS`/`SPIGET_RESOURCES` from compose; `REMOVE_OLD_MODS: false`.
|
||||
- Document new deploy: `./scripts/fetch-plugins.sh && docker compose up -d`.
|
||||
|
||||
**Acceptance:** plugins/ populated from GH-first, lock committed, deploy reproducible.
|
||||
|
||||
### Phase 3 — CI automation (1 day)
|
||||
|
||||
- GH Action daily: `fetch-plugins.sh --check-updates` → open PR per update, body has changelog link.
|
||||
- GH Action per-PR: license audit (`/repos/{owner}/{repo}/license` → SPDX id → `LICENSES.md`).
|
||||
- Renovate-style auto-merge for patch updates (config-gated).
|
||||
|
||||
**Acceptance:** plugin updates land via PR, license audit in CI, no manual fetches.
|
||||
|
||||
## Tooling to evaluate first
|
||||
|
||||
| Tool | Status | Verdict |
|
||||
|------|--------|---------|
|
||||
| `mcpkg` | exists, immature | reuse if active |
|
||||
| `packwiz` | mod-focused, Modrinth/Curse | adapt? |
|
||||
| `paper-plugin-manager` | Hangar client | use as Hangar source |
|
||||
| Custom bash + jq + gh + curl | trivial to build | likely fastest |
|
||||
|
||||
Probably 200 lines of bash beats adopting an unmaintained tool.
|
||||
|
||||
## Side benefits
|
||||
|
||||
- **License audit** — generated `LICENSES.md` proves the stack is FOSS.
|
||||
- **Pre-flight** — `fetch-plugins.sh --check` validates manifest in CI before merge, no boot-time surprise.
|
||||
- **Offline deploy** — pre-baked `plugins/` dir + tarball = air-gap deploy possible.
|
||||
- **Forks** — easy to swap `LandClaimPlugin` upstream → your own fork by changing one line in `plugins.yml`.
|
||||
|
||||
## Open questions
|
||||
|
||||
- License whitelist policy: GPL-3, MIT, Apache-2 OK? AGPL? Proprietary?
|
||||
- Update cadence: daily auto-PR, weekly, manual?
|
||||
- Pin granularity: per-plugin tag, sha256 hash, or commit SHA?
|
||||
- Failure mode if a source delists a pinned version: pin migration script?
|
||||
- Manual-jar storage: in-repo `manual-jars/` (license risk) or separate private repo?
|
||||
|
||||
## Status
|
||||
|
||||
- 2026-04-27 — roadmap drafted post-deploy painshare. Not started.
|
||||
- 2026-04-28 — Phase 1 (pin versions) still pending. `REMOVE_OLD_MODS` bug discovered: itzg disables it when `PLUGINS` env set, so manual jars are safe. Phase 2 design finalized here. No code yet.
|
||||
544
docs/migrations/lands-to-landclaim.md
Normal file
544
docs/migrations/lands-to-landclaim.md
Normal file
|
|
@ -0,0 +1,544 @@
|
|||
# Migration Plan: Lands v7.21.3 → LandClaimPlugin
|
||||
|
||||
**Target:** LandClaimPlugin (Modrinth, MIT, by AyoSynk)
|
||||
**Date Planned:** [TBD - Player Agreement]
|
||||
**Server:** Purpur 1.21.10 on nullstone (Debian 13)
|
||||
**World:** Preserved intact. Only plugin data wiped.
|
||||
**Grace Period:** 48 hours after migration
|
||||
**Rollback Window:** 7 days (Lands DB archived)
|
||||
|
||||
---
|
||||
|
||||
## 0. Current State
|
||||
|
||||
### Lands v7.21.3 on Nullstone
|
||||
- **JAR:** `Lands-7.21.3.jar` (2.9MB, paid plugin from IncrediblePlugins)
|
||||
- **Database:** SQLite `database_v2.db` (168KB)
|
||||
- **Cached players:** 43
|
||||
- **Active lands (from event log):**
|
||||
- `K'land` / `JellyLand` — block placements, deleted 2025-05-30 for INACTIVITY
|
||||
- `Portal` — bank deposits (500 → 1000 → 2000), deleted 2025-09-11 for INACTIVITY
|
||||
- `HighCaillou` — deposit 10
|
||||
- `HIVE` — deposit 10,000
|
||||
- `Headquarters` — recurring deposits (20 → 40 per cycle)
|
||||
- `batcave` / `batcave1` — recurring deposits (10 per cycle)
|
||||
- `MyLawn` — deposits
|
||||
- `Jessie` — deleted 2025-12-09
|
||||
- `TheArchitect` — deposits
|
||||
|
||||
- **Economy:** Lands Bank is active — players deposit money into land banks. Economy integration via Vault/EssentialsX.
|
||||
- **Nations:** Config present but `enabled: false` — never used.
|
||||
- **Features in use:** Basic land claiming, bank deposits, roles, events logging. No nations, no wars.
|
||||
- **Dependencies:** Vault (economy bridge), EssentialsX (economy backend)
|
||||
- **Data to lose:** All claim boundaries, land bank balances, member lists, role assignments for each land.
|
||||
|
||||
### Target: LandClaimPlugin
|
||||
- **License:** MIT (free, open-source)
|
||||
- **Compatibility:** 1.21.x — Paper, Purpur, Spigot confirmed
|
||||
- **Claim Model:** Chunk-based (16x16), single claim profile per player
|
||||
- **Permissions:** Tiered flag system (Owner → Member → Public)
|
||||
- **Features:** In-game map, warps, alliances, auto-claim while walking, PvP blocking
|
||||
- **No:** Nations, wars, web portal, land bank — these are Lands-specific features we don't use anyway.
|
||||
|
||||
---
|
||||
|
||||
## 1. Pre-Migration (Phase 0 — 48h before)
|
||||
|
||||
### 1.1 Backup Everything
|
||||
```bash
|
||||
ssh user@192.168.0.100
|
||||
|
||||
# Create backup directory
|
||||
mkdir -p /opt/backups/lands-migration-$(date +%Y%m%d)
|
||||
|
||||
# Full server backup (running state — consistent snapshot via docker exec for world)
|
||||
tar czf /opt/backups/lands-migration-$(date +%Y%m%d)/minecraft-plugins.tar.gz \
|
||||
-C /opt/docker/minecraft plugins/
|
||||
|
||||
# Lands-specific backup (the important part for rollback)
|
||||
tar czf /opt/backups/lands-migration-$(date +%Y%m%d)/lands-complete.tar.gz \
|
||||
-C /opt/docker/minecraft/plugins \
|
||||
Lands Lands-7.21.3.jar
|
||||
|
||||
# Also grab the SQLite DB separately (small, critical)
|
||||
cp /opt/docker/minecraft/plugins/Lands/Data/database_v2.db \
|
||||
/opt/backups/lands-migration-$(date +%Y%m%d)/
|
||||
|
||||
# Verify
|
||||
ls -lh /opt/backups/lands-migration-$(date +%Y%m%d)/
|
||||
```
|
||||
|
||||
### 1.2 Player Communication
|
||||
**Discord announcement:**
|
||||
```
|
||||
📢 LAND SYSTEM CHANGE — Vote Required
|
||||
|
||||
We're replacing Lands (paid, complex, heavy) with LandClaimPlugin (free, simple, chunk-based).
|
||||
|
||||
What changes:
|
||||
✅ New claiming system (/claim instead of /lands GUI)
|
||||
✅ Chunk-based (16x16 blocks) — easier to see your borders
|
||||
✅ Free claims, no economy cost during grace period
|
||||
✅ Same world, same builds — only plugin data wiped
|
||||
⚠️ ALL EXISTING CLAIMS WILL BE RESET
|
||||
⚠️ Land bank balances will NOT carry over
|
||||
🎁 48-hour grace period — free unlimited re-claiming
|
||||
|
||||
Timeline:
|
||||
- Vote opens now (48h to respond)
|
||||
- If approved, migration happens on [DATE]
|
||||
- ~5 min downtime during swap
|
||||
- 48h grace period to rebuild your claims
|
||||
|
||||
Land bank balances note: Current Lands bank deposits will NOT transfer.
|
||||
The new system doesn't use land banks. This economy cost is going away.
|
||||
|
||||
Reply with 👍 to approve or 👎 to reject. Questions below.
|
||||
```
|
||||
|
||||
**In-game MOTD (during announcement):**
|
||||
```
|
||||
§6⚠ Land system upgrade vote in Discord! §fReply in #announcements.
|
||||
§7Migration may reset all claims. 48h grace period to re-claim.
|
||||
```
|
||||
|
||||
### 1.3 Download New Plugin
|
||||
```bash
|
||||
# Get the compatible version for 1.21.10 / Purpur
|
||||
# Check: https://modrinth.com/plugin/landclaimplugin/versions
|
||||
# Need a build that supports 1.21.10 (currently latest covers 1.21.x)
|
||||
|
||||
# Download (replace with actual URL when ready)
|
||||
wget -O /tmp/LandClaimPlugin.jar "https://cdn.modrinth.com/data/[...]/LandClaimPlugin-[version].jar"
|
||||
|
||||
# Quick validation
|
||||
file /tmp/LandClaimPlugin.jar
|
||||
# Should report: Java archive data (JAR)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. Migration Execution (Phase 1 — Server Downtime)
|
||||
|
||||
### 2.1 Stop Server
|
||||
```bash
|
||||
ssh user@192.168.0.100
|
||||
cd /opt/docker/minecraft
|
||||
|
||||
# Stop the container
|
||||
docker compose down
|
||||
# Wait for clean shutdown (saves world, closes DBs)
|
||||
# Verify: docker ps | grep minecraft-mc (should be empty)
|
||||
```
|
||||
|
||||
### 2.2 Remove Lands Completely
|
||||
```bash
|
||||
cd /opt/docker/minecraft/plugins
|
||||
|
||||
# Remove JAR
|
||||
rm -f Lands-7.21.3.jar
|
||||
|
||||
# Remove entire data directory (claims, bank, roles, language, configs, logs)
|
||||
rm -rf Lands/
|
||||
|
||||
# Verify it's gone
|
||||
ls -la Lands* Lands/
|
||||
# Should return: No such file or directory
|
||||
```
|
||||
|
||||
### 2.3 Install LandClaimPlugin
|
||||
```bash
|
||||
# Move downloaded JAR to plugins
|
||||
mv /tmp/LandClaimPlugin.jar /opt/docker/minecraft/plugins/LandClaimPlugin.jar
|
||||
chown user:user /opt/docker/minecraft/plugins/LandClaimPlugin.jar
|
||||
chmod 644 /opt/docker/minecraft/plugins/LandClaimPlugin.jar
|
||||
|
||||
# Verify
|
||||
ls -la /opt/docker/minecraft/plugins/LandClaimPlugin.jar
|
||||
```
|
||||
|
||||
### 2.4 Start Server (Config Generation Boot)
|
||||
```bash
|
||||
cd /opt/docker/minecraft
|
||||
docker compose up -d
|
||||
|
||||
# Watch for plugin load
|
||||
docker logs -f minecraft-mc
|
||||
|
||||
# Look for LandClaimPlugin startup messages
|
||||
# Let it run for 2-3 minutes to generate default config
|
||||
# It will create /opt/docker/minecraft/plugins/LandClaimPlugin/ with config.yml + data/
|
||||
# Wait until you see: "Server running. /help for help. /stop to quit." or similar
|
||||
|
||||
# Stop again for config editing
|
||||
docker compose down
|
||||
```
|
||||
|
||||
### 2.5 Configure LandClaimPlugin
|
||||
```bash
|
||||
# Edit the generated config
|
||||
nano /opt/docker/minecraft/plugins/LandClaimPlugin/config.yml
|
||||
```
|
||||
|
||||
**Critical config changes recommended:**
|
||||
```yaml
|
||||
# --- CLAIM SETTINGS ---
|
||||
# Start generous to reduce player friction
|
||||
claims:
|
||||
max-per-player: 50 # High limit — reduce later (default might be 5-10)
|
||||
max-size-chunks: 125 # Per-claim size cap (reasonable = ~2000x2000 area)
|
||||
auto-claim-enabled: true # Claim chunks as you walk through them
|
||||
require-adjacent: false # Allow scattered claims (like Lands did)
|
||||
diagonal-enabled: true
|
||||
|
||||
# --- ECONOMY ---
|
||||
# DISABLE during grace period
|
||||
economy:
|
||||
enabled: false # Free claims for now
|
||||
cost-per-chunk: 0 # 0 = no charge
|
||||
|
||||
# --- PROTECTION FLAGS ---
|
||||
protection:
|
||||
block-break: OWNER # Only claim owner can break
|
||||
block-place: OWNER
|
||||
entity-damage: OWNER
|
||||
animal-kill: MEMBER # Allow members to hunt/kill
|
||||
item-pickup: OWNER
|
||||
item-drop: OWNER
|
||||
door-toggle: PUBLIC # Friendly to visitors
|
||||
container-access: MEMBER # Chests restricted to members
|
||||
redstone-use: PUBLIC # Allow public redstone (doors, farms)
|
||||
vehicle-use: MEMBER
|
||||
pvp-inside-claim: false # No PvP inside claimed land (safe zones)
|
||||
tnt: false # Block TNT
|
||||
creeper-explosion: true # Keep creeper grief (it's survival, part of the game)
|
||||
piston-cross-boundary: false # Prevent pistons pushing across claim edges
|
||||
|
||||
# --- VISUAL HELPERS ---
|
||||
visuals:
|
||||
claim-borders: true # Particle borders on join/claim
|
||||
border-particle: flame # Or barrier, end_rod
|
||||
in-game-map: true # Show claim overlay
|
||||
|
||||
# --- WARPS ---
|
||||
warps:
|
||||
enabled: true
|
||||
per-claim-max: 5 # Reasonable limit per claim
|
||||
```
|
||||
|
||||
### 2.6 Clean Up Plugin Dependencies
|
||||
```bash
|
||||
# LuckPerms — remove old Lands permissions
|
||||
# Open LuckPerms web editor or use RCON
|
||||
# Remove all perms matching: lands.*
|
||||
docker exec minecraft-mc luckperms editor
|
||||
# In the web editor, search "lands" and delete matching nodes
|
||||
# Then add new perms if needed:
|
||||
# /lp group default permission set "landclaim.claim.max.<number>" 50
|
||||
|
||||
# TAB plugin — check for Lands placeholders
|
||||
grep -r "lands" /opt/docker/minecraft/plugins/TAB/ 2>/dev/null
|
||||
# If found, remove/replace with LandClaim equivalents
|
||||
|
||||
# DiscordSRV — no direct LandClaim integration exists
|
||||
# Console channel will still log /claim commands via the console
|
||||
# Later: set up n8n webhook for automated claim notifications
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Go Live (Phase 2 — Grace Period Begins)
|
||||
|
||||
### 3.1 Start Server
|
||||
```bash
|
||||
ssh user@192.168.0.100
|
||||
cd /opt/docker/minecraft
|
||||
docker compose up -d
|
||||
|
||||
# Verify
|
||||
docker logs minecraft-mc | tail -30
|
||||
# Confirm:
|
||||
# - World loads (all 3 dimensions)
|
||||
# - LandClaimPlugin enabled without errors
|
||||
# - EssentialsX, DiscordSRV, all plugins load cleanly
|
||||
# - RCON on port 25575
|
||||
# - Port 25565 accepting connections
|
||||
```
|
||||
|
||||
### 3.2 Update MOTD
|
||||
```bash
|
||||
# In docker-compose.yml, update the MOTD line:
|
||||
# MOTD: "§a✓ New land system live! §e/claim§f to protect. 48h grace period."
|
||||
docker compose restart
|
||||
```
|
||||
|
||||
### 3.3 Discord & In-Game Announcement
|
||||
```
|
||||
DISCORD:
|
||||
🟢 Land system is LIVE! Use /claim to protect your builds.
|
||||
📍 Your old Lands claims are gone — time to rebuild!
|
||||
⏰ 48-hour grace period: free, unlimited claiming.
|
||||
📖 How to claim:
|
||||
1. Stand in the chunk you want to claim
|
||||
2. Run /claim add
|
||||
3. Walk and auto-claim is enabled
|
||||
4. View your claims: /claim map
|
||||
Questions? Ask in #support.
|
||||
```
|
||||
|
||||
```bash
|
||||
# In-game broadcast
|
||||
ssh user@192.168.0.100 "docker exec minecraft-mc rcon-cli say '§a✓ New land system live! Use /claim to protect. 48h free claiming!'"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. Post-Migration Monitoring (Phase 3)
|
||||
|
||||
| Time | Action |
|
||||
|------|--------|
|
||||
| T+1h | Check logs for LandClaimPlugin errors. Verify claim borders work. Test /claim add in-game. |
|
||||
| T+6h | Monitor Discord for player issues. Check if any players report missing builds (grief while unclaimed). |
|
||||
| T+12h | Verify claim data directory is growing (new claims being made). Run `/claim list` to see top claimers. |
|
||||
| T+24h | Backup new LandClaimPlugin data directory. Check for any claim conflicts between players. |
|
||||
| T+48h | Grace period ends. Optionally enable economy (`economy.enabled: true`, `cost-per-chunk: 10`). Announce enforcement start. |
|
||||
| T+7d | If no issues, consider deleting the Lands backup or moving to cold storage. |
|
||||
|
||||
---
|
||||
|
||||
## 5. Risk Matrix
|
||||
|
||||
| Risk | Likelihood | Impact | Mitigation |
|
||||
|------|-----------|--------|------------|
|
||||
| LandClaimPlugin incompatible with Purpur 1.21.10 | Low | High | Test on dev clone first. Modrinth shows Purpur 1.21.x supported. |
|
||||
| Players lose critical builds during grace period | Medium | High | Admins patrol during first 6h. /claim add for abandoned bases. Consider temporary WorldGuard protection on major builds. |
|
||||
| Land bank money loss causes player anger | Medium | Medium | Document clearly that bank balances don't carry over. This is a one-time wipe. Future economy-free system means no more deposits. |
|
||||
| Auto-claim causes accidental claims | Low | Low | Players can `/claim remove` instantly. Admin can fix abuse. |
|
||||
| Claim boundary disputes | Medium | Low | Admin tool `/claim admin unclaim <player>`, `/claim admin transfer` for dispute resolution. |
|
||||
| TAB/LuckPerms broken by old Lands hooks | Low | Low | These just display empty placeholders. Not server-breaking. Fix in TAB config + LuckPerms web editor. |
|
||||
|
||||
---
|
||||
|
||||
## 6. Rollback Plan
|
||||
|
||||
If LandClaimPlugin causes critical issues or players revolt:
|
||||
|
||||
```bash
|
||||
# 1. Stop server
|
||||
docker compose -f /opt/docker/minecraft/docker-compose.yml down
|
||||
|
||||
# 2. Remove new plugin
|
||||
rm -f /opt/docker/minecraft/plugins/LandClaimPlugin.jar
|
||||
rm -rf /opt/docker/minecraft/plugins/LandClaimPlugin/
|
||||
|
||||
# 3. Restore Lands from backup
|
||||
cd /opt/docker/minecraft/plugins
|
||||
tar xzf /opt/backups/lands-migration-*/lands-complete.tar.gz
|
||||
|
||||
# 4. Verify Lands files restored
|
||||
ls -la Lands-7.21.3.jar Lands/
|
||||
|
||||
# 5. Start server
|
||||
docker compose -f /opt/docker/minecraft/docker-compose.yml up -d
|
||||
|
||||
# 6. Verify
|
||||
rcon-cli say "§cLand system reverted to Lands. Claims restored."
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. Suggestions / Future Improvements
|
||||
|
||||
1. **Claim decay for inactive players:** If someone hasn't logged on in 60+ days, auto-unclaim their land. Prevents dead claims on buildable land. Can be automated with a cron + RCON script.
|
||||
|
||||
2. **Claim dashboard:** Bash script that RCONs `/claim list`, formats it, and posts to admin Discord channel weekly.
|
||||
|
||||
3. **Bluemap/Dynmap integration:** If LandClaimPlugin supports layer overlays on a web map, players can see claims from a browser, not just in-game.
|
||||
|
||||
4. **Economy-free by design:** LandClaimPlugin keeps claiming free and simple. Consider keeping it that way. The economy cost was a friction point for new players who wanted to build but had no money yet.
|
||||
|
||||
5. **Admin mediation tools:** The plugin has admin commands (`/claim admin`). Make sure moderators know:
|
||||
- `/claim list` — view all claims
|
||||
- `/claim admin unclaim <player>` — remove a player's claims
|
||||
- `/claim admin transfer <from> <to>` — move a claim between players
|
||||
|
||||
6. **Backup script update:** Edit `/opt/docker/backup.sh` to include LandClaimPlugin in the daily backup (currently only backs up Minecraft world + configs, not plugin-specific data).
|
||||
|
||||
---
|
||||
|
||||
## 8. Files in This Repo
|
||||
|
||||
| Path | Description |
|
||||
|------|-------------|
|
||||
| `config/` | All server config files (pulled live from nullstone) |
|
||||
| `config/plugins/Lands-config.yml` | Current Lands config — reference before removal |
|
||||
| `config/plugins/Lands-*.yml` | All Lands sub-configs — roles, nations, wars, events, levels |
|
||||
| `docker-compose.yml` | Live container definition from nullstone |
|
||||
| `README.md` | Server documentation, plugin inventory, ops |
|
||||
| `docs/migrations/lands-to-landclaim.md` | This migration plan |
|
||||
| `scripts/` | Migration + operational scripts (below) |
|
||||
|
||||
---
|
||||
|
||||
## 9. Migration Helper Script
|
||||
|
||||
Place in `scripts/migrate-lands-to-landclaim.sh`:
|
||||
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
# migrate-lands-to-landclaim.sh
|
||||
# Run on nullstone as root. Performs the full Lands → LandClaimPlugin migration.
|
||||
set -euo pipefail
|
||||
|
||||
BACKUP_DIR="/opt/backups/lands-migration-$(date +%Y%m%d_%H%M%S)"
|
||||
MC_DIR="/opt/docker/minecraft"
|
||||
PLUGIN_DIR="$MC_DIR/plugins"
|
||||
|
||||
log() { echo "[$(date '+%H:%M:%S')] $*"; }
|
||||
|
||||
# --- Pre-checks ---
|
||||
log "Checking prerequisites..."
|
||||
|
||||
# Is server running?
|
||||
if docker ps --format '{{.Names}}' | grep -q '^minecraft-mc$'; then
|
||||
log "Server is running. Stop it first: cd $MC_DIR && docker compose down"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Backup directory
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
log "Backup directory: $BACKUP_DIR"
|
||||
|
||||
# --- Step 1: Backup Lands ---
|
||||
log "Backing up Lands plugin..."
|
||||
if [ -f "$PLUGIN_DIR/Lands-7.21.3.jar" ]; then
|
||||
cp "$PLUGIN_DIR/Lands-7.21.3.jar" "$BACKUP_DIR/"
|
||||
cp -r "$PLUGIN_DIR/Lands" "$BACKUP_DIR/"
|
||||
log "Lands JAR + data backed up"
|
||||
else
|
||||
log "WARNING: Lands-7.21.3.jar not found at $PLUGIN_DIR"
|
||||
log "Plugin may already be removed or installed at different version"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# --- Step 2: Remove Lands ---
|
||||
log "Removing Lands plugin..."
|
||||
rm -f "$PLUGIN_DIR/Lands-7.21.3.jar"
|
||||
rm -rf "$PLUGIN_DIR/Lands/"
|
||||
log "Lands removed"
|
||||
|
||||
# --- Step 3: Install LandClaimPlugin ---
|
||||
log "Installing LandClaimPlugin..."
|
||||
LCP_JAR="$PLUGIN_DIR/LandClaimPlugin.jar"
|
||||
|
||||
# Check if JAR already exists
|
||||
if [ -f "$LCP_JAR" ]; then
|
||||
log "LandClaimPlugin.jar already exists at $LCP_JAR"
|
||||
else
|
||||
log "ERROR: LandClaimPlugin.jar not found at $LCP_JAR"
|
||||
log "Download it first: wget -O $LCP_JAR <modrinth-url>"
|
||||
log "Rolling back..."
|
||||
cp "$BACKUP_DIR/Lands-7.21.3.jar" "$PLUGIN_DIR/"
|
||||
cp -r "$BACKUP_DIR/Lands" "$PLUGIN_DIR/"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
chown user:user "$LCP_JAR"
|
||||
log "LandClaimPlugin installed"
|
||||
|
||||
# --- Step 4: Start server for config generation ---
|
||||
log "Starting server to generate config..."
|
||||
cd "$MC_DIR"
|
||||
docker compose up -d
|
||||
|
||||
log "Waiting 90 seconds for config generation..."
|
||||
sleep 90
|
||||
|
||||
# Check if the plugin loaded
|
||||
if docker logs minecraft-mc 2>&1 | grep -qi "landclaim"; then
|
||||
log "LandClaimPlugin loaded successfully"
|
||||
else
|
||||
log "WARNING: No LandClaimPlugin messages in logs"
|
||||
docker logs minecraft-mc | tail -20
|
||||
fi
|
||||
|
||||
# --- Step 5: Stop for config edit ---
|
||||
log "Stopping server..."
|
||||
docker compose down
|
||||
log "Server stopped. Now edit:"
|
||||
log " $PLUGIN_DIR/LandClaimPlugin/config.yml"
|
||||
log ""
|
||||
log "Recommended changes:"
|
||||
log " - claims.max-per-player: 50"
|
||||
log " - claims.auto-claim-enabled: true"
|
||||
log " - economy.enabled: false (for grace period)"
|
||||
log " - visuals.claim-borders: true"
|
||||
log ""
|
||||
log "When done, start: cd $MC_DIR && docker compose up -d"
|
||||
log "Grace period begins. Announce to players."
|
||||
log ""
|
||||
log "=== Migration complete ==="
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*Version: 1.0*
|
||||
*Author: veilor.uk Infrastructure*
|
||||
*Created: 2026-04-24*
|
||||
|
||||
---
|
||||
|
||||
## 10. Execution Log — Completed 2026-04-24 01:21 BST
|
||||
|
||||
### What Actually Happened
|
||||
|
||||
| Step | Result | Details |
|
||||
|------|--------|---------|
|
||||
| Backup | ✅ PASSED | Full plugins backup: 446MB. Lands-specific: 2.6MB. SQLite DB: 168KB |
|
||||
| Server stop | ✅ PASSED | Clean shutdown via `docker compose down`. World saved. |
|
||||
| Remove Lands | ✅ PASSED | `Lands-7.21.3.jar` deleted. `plugins/Lands/` directory removed entirely. SQLite DB backed up before removal. |
|
||||
| Download LandClaimPlugin | ✅ PASSED | v2.0.4 from Modrinth (supports Paper/Purpur 1.21.4–1.21.11). SHA256: `48562c17ec59c35eb7c3529b84763d026679d0782ffd2dc7dc53169af41be688` |
|
||||
| Install plugin | ✅ PASSED | JAR placed at `plugins/LandClaimPlugin.jar` (4.2MB). Ownership: `user:user`. |
|
||||
| First boot (config gen) | ✅ PASSED | Plugin loaded cleanly. Remapper took 1,459ms. SQLite DB created at `plugins/LandClaimPlugin/PlayerData/database.db` (77KB). Config + locales + menus generated. |
|
||||
| Custom config applied | ✅ PASSED | Config replaced via `docker cp`. Key changes verified: `chunkClaimLimit: 50`, `autoClaimDefault: true`, `blockWorld: []`, `autoUnclaimDefault: true`. All map integrations disabled. |
|
||||
| Restart | ✅ PASSED | Server restarted. LandClaimPlugin 2.0.4 loaded. 0 claims (expected). Status: healthy. |
|
||||
| Lands verification | ✅ PASSED | Zero `Lands*` files remain in `/data/plugins/`. No stale data anywhere. |
|
||||
| Lands event log captured | ✅ | From backup: 43 cached players. Active land names before wipe: K'land, JellyLand (deleted), Portal (deleted), HighCaillou, HIVE, Headquarters, batcave, MyLawn, TheArchitect. Nations: disabled. Wars: none. |
|
||||
|
||||
### Server State Post-Migration
|
||||
|
||||
- **Running:** ✅ Health check passing
|
||||
- **Plugins loaded:** 24 (Lands removed, LandClaimPlugin 2.0.4 added — net 1 swap)
|
||||
- **Claims:** 0 (clean slate)
|
||||
- **World:** ✅ Preserved intact (all 3 dimensions)
|
||||
- **Land bank balances:** WIPE COMPLETE — not transferable to new system
|
||||
- **Backup location:** `/opt/backups/lands-migration-20260424/`
|
||||
- `all-plugins.tar.gz` (446MB) — full plugin archive
|
||||
- `lands-complete.tar.gz` (2.6MB) — Lands JAR + all data
|
||||
- `database_v2.db` (168KB) — raw SQLite for emergency restore
|
||||
- `config.yml` — pre-migration Lands config
|
||||
|
||||
### Post-Migration TODO
|
||||
|
||||
1. [ ] Announce migration complete in Discord + in-game MOTD
|
||||
2. [ ] Monitor logs for first 2h — watch for claim-related errors
|
||||
3. [ ] At 48h: announce grace period ending, optionally enable economy
|
||||
4. [ ] At 7d: delete Lands backup or move to cold storage
|
||||
5. [ ] Update `/opt/docker/backup.sh` to include LandClaimPlugin data in daily backups
|
||||
|
||||
### Notes During Execution
|
||||
|
||||
- Lands had accumulated ~43 players in cache across 9 named lands
|
||||
- Two lands were deleted for INACTIVITY (JellyLand 2025-05-30, Portal 2025-09-11) — confirms the cleanup system was working
|
||||
- Land bank deposits ranged from $10 to $10,000 (HIVE). These balances are NOT recoverable in the new system — it doesn't use land banks at all. This is a feature, not a loss: the new system is simpler and economy-free by default.
|
||||
- LandClaimPlugin had two startup warnings:
|
||||
1. `NullPointerException: serverConnectionMethod is null` — minor, plugin continues loading
|
||||
2. `You are running an unsupported server version!` — cosmetic, plugin works fine on Purpur 1.21.10
|
||||
- Both warnings are non-fatal and don't affect functionality.
|
||||
|
||||
---
|
||||
|
||||
*Migration executed: 2026-04-24 01:21 BST*
|
||||
*Migration duration: ~10 minutes (stop → swap → restart)*
|
||||
*Server: nullstone (192.168.0.100)*
|
||||
*Operator: veilor.uk*
|
||||
182
docs/plugins/README.md
Normal file
182
docs/plugins/README.md
Normal file
|
|
@ -0,0 +1,182 @@
|
|||
# racked.ru — Minecraft server
|
||||
|
||||
> *experience the game the way it should have always been*
|
||||
|
||||
Self-hosted Purpur Minecraft server powering [racked.ru](https://racked.ru). Microsoft-free, privacy-first, fully open source. Deployed via Docker on Debian (`nullstone`, 192.168.0.100), public at `mc.racked.ru:25565`.
|
||||
|
||||
Companion projects:
|
||||
- **server-client-launcher** — one-click connect, no manual modpack juggling. (Separate repo.)
|
||||
- **client** — performance-optimized client (separate repo).
|
||||
|
||||
This repo is the **server** half. Configs, plugin manifest, deploy scripts. No plugin jars committed — acquired at boot from FOSS sources (see [PLUGINS.md](docs/PLUGINS.md)).
|
||||
|
||||
> *all software should be free and open-source* — see [MISSION.md](MISSION.md), [THANKS.md](THANKS.md)
|
||||
|
||||
## Stack
|
||||
|
||||
| Layer | Choice | Why |
|
||||
|-------|--------|-----|
|
||||
| Server jar | Purpur (latest stable build) | Paper fork w/ extra config knobs |
|
||||
| Container | `itzg/minecraft-server:latest` | Auto-DL of jar + plugins via env |
|
||||
| Host OS | Debian 13 | nullstone server |
|
||||
| Network | Docker `proxy` external network | Shared w/ Traefik for future TLS reverse-proxy |
|
||||
| Backup | tar.gz daily 02:00 via host cron | 7-day retention to `/opt/backups/` |
|
||||
|
||||
## Quick start
|
||||
|
||||
```bash
|
||||
git clone <this-repo> minecraft-server
|
||||
cd minecraft-server
|
||||
mkdir -p /opt/docker/minecraft
|
||||
cp -r config/* /opt/docker/minecraft/ # seed configs
|
||||
cp docker-compose.yml /opt/docker/minecraft/
|
||||
chmod -R 777 /opt/docker/minecraft # see docs/PERMISSIONS.md (userns-remap quirk)
|
||||
cd /opt/docker/minecraft && docker compose up -d
|
||||
docker logs -f minecraft-mc # watch jar+plugin DL, world gen
|
||||
```
|
||||
|
||||
First boot: ~3-5 min (Purpur jar DL, ~14 plugin DL, world gen).
|
||||
|
||||
## Docs
|
||||
|
||||
- [DEPLOY.md](docs/DEPLOY.md) — fresh deploy + migration from existing server
|
||||
- [PLUGINS.md](docs/PLUGINS.md) — full plugin list, sources, slugs/IDs
|
||||
- [PERMISSIONS.md](docs/PERMISSIONS.md) — userns-remap + chmod quirk
|
||||
- [BACKUP.md](docs/BACKUP.md) — backup script + restore procedure
|
||||
- [ROADMAP.md](docs/ROADMAP.md) — plugin acquisition overhaul: GH-first, lockfile, CI auto-update
|
||||
- [migrations/lands-to-landclaim.md](docs/migrations/lands-to-landclaim.md) — Lands (paid) → LandClaimPlugin (FOSS) migration
|
||||
|
||||
## Server config highlights
|
||||
|
||||
| Setting | Value |
|
||||
|---------|-------|
|
||||
| Difficulty | hard |
|
||||
| Gamemode | survival |
|
||||
| Max players | 69 |
|
||||
| View distance | 20 chunks |
|
||||
| Simulation distance | 10 chunks |
|
||||
| Online mode | false (cracked clients allowed) |
|
||||
| Spawn protection | 0 |
|
||||
| RAM | 8G min, 16G max (18G hard cap) |
|
||||
| RCON | enabled, port 25575, password `*redacted*` |
|
||||
|
||||
Full settings in [`config/server.properties`](config/server.properties).
|
||||
|
||||
## Network
|
||||
|
||||
| Port | Proto | Use |
|
||||
|------|-------|-----|
|
||||
| 25565 | TCP | Minecraft client |
|
||||
| 25575 | TCP | RCON (LAN-trusted only) |
|
||||
|
||||
LAN: `192.168.0.100:25565`. Tailscale: `100.64.0.2:25565`. Future public: `mc.s8n.ru` via Traefik (label commented out).
|
||||
|
||||
## Plugins (15 active)
|
||||
|
||||
Auto-pulled from Modrinth at boot:
|
||||
LuckPerms, PlaceholderAPI, EssentialsX, WorldEdit, Simple Voice Chat, MiniMOTD, SkinsRestorer, CoreProtect, GrimAC, spark, DiscordSRV, **LandClaimPlugin** (replaces paid Lands), TAB.
|
||||
|
||||
Auto-pulled from Spigot:
|
||||
ProtocolLib (ID 1997), Vault (ID 34315).
|
||||
|
||||
Manual install (no Modrinth/Spigot auto-source):
|
||||
LoginSecurity, ComfyWhitelist, MarriageMaster, PhantomSMP, HelpCommand, ProAntiTab.
|
||||
|
||||
Premium (skipped, FOSS replacement preferred):
|
||||
~~Lands~~ (replaced by LandClaimPlugin), CosmicGuard.
|
||||
|
||||
See [docs/PLUGINS.md](docs/PLUGINS.md) for source URLs.
|
||||
|
||||
## Roadmap / TODO
|
||||
|
||||
Living checklist. Priority tags: **[P0]** blocker / security, **[P1]** vision-aligned swap, **[P2]** improvement, **[P3]** nice-to-have.
|
||||
|
||||
### Infrastructure
|
||||
|
||||
- [x] Fix `loader=purpur` boot loop — workaround: `TYPE=CUSTOM` + direct Purpur jar URL + `MODRINTH_LOADER=paper`. Permanent fix still pending Phase 2.
|
||||
- [x] Pin Purpur version (1.21.10) — no `LATEST` drift
|
||||
- [x] Set MOTD to racked.ru tagline
|
||||
- [ ] **[P1]** Public DNS: `mc.racked.ru` → TCPShield proxy (DDoS protection; do NOT point A record directly to home IP)
|
||||
- [ ] **[P1]** Traefik TLS termination for RCON web UI (LAN-only first)
|
||||
- [ ] **[P2]** Switch bind mount → named volume to kill `chmod 777` userns workaround
|
||||
- [ ] **[P2]** `dns:` block in compose pointing 1.1.1.1 + LAN router (Tailscale ate `/etc/resolv.conf` precedent)
|
||||
- [ ] **[P2]** Bluemap or Squaremap on `map.racked.ru` (browser map via Traefik)
|
||||
- [ ] **[P2]** Prometheus exporter + Grafana dashboard (TPS, MSPT, RAM)
|
||||
- [ ] **[P3]** Test instance on port 25566 sharing world snapshot — try plugin upgrades safely
|
||||
|
||||
### Plugin acquisition (per [ROADMAP.md](docs/ROADMAP.md))
|
||||
|
||||
- [ ] **[P0]** Phase 1: pin every plugin to specific version-id (no `latest` in env)
|
||||
- [ ] **[P1]** Phase 2: `plugins.yml` manifest + `fetch-plugins.sh` (GH-first, Hangar/Modrinth/Spiget fallback)
|
||||
- [ ] **[P1]** Phase 2: `plugins.lock` w/ sha256 per jar, committed
|
||||
- [ ] **[P2]** Phase 3: GH Action — daily upstream check, auto-PR per update, license audit → `LICENSES.md`
|
||||
|
||||
### Plugin swaps (per [PLUGIN_ALTERNATIVES.md](docs/PLUGIN_ALTERNATIVES.md))
|
||||
|
||||
High priority — security, FOSS alignment, license clarity:
|
||||
- [x] LoginSecurity → **AuthMe Reloaded** — done. Void `auth_limbo` END dimension, sealed barrier cell at spawn, `teleportUnAuthedToSpawn: true`, `hideInventory: true`, post-login `mvtp %p world` hook. Base-coord leak fixed.
|
||||
- [x] ProAntiTab — **Keep** (verified: RayzsYT, GPL-2.0-or-later, FOSS, free, GH). Earlier "likely premium" guess was wrong.
|
||||
- [x] Claim plugin → **Homestead** (Apache-2.0, FOSS, 75+ flags, sub-areas, BlueMap integration, free claiming)
|
||||
- [x] WorldEdit → **FastAsyncWorldEdit (FAWE)** — done. v2.15.0, GPL-3.0, drop-in swap, CoreProtect integration auto-detected.
|
||||
- [x] Vault → **VaultUnlocked** — done. TheNewEconomy fork, GH source, modrinth slug `vaultunlocked`, drop-in Vault API replacement.
|
||||
- [ ] **[P3]** (deferred — later project) Add Matrix bridge alongside DiscordSRV — use existing Tuwunel homeserver (txt.s8n.ru) as FOSS comm channel
|
||||
|
||||
Medium priority — license/dependency cleanup:
|
||||
- [x] CoreProtect-CE — **Keep** (acknowledged license exception; reliability > purity per operator). Revisit if/when Prism reaches feature parity on sign/container/entity rollback at scale.
|
||||
- [ ] **[P2]** Verify license: TAB
|
||||
|
||||
Low priority — consolidation to native:
|
||||
- [ ] **[P2]** Verify ComfyWhitelist license — keep if FOSS (provides name-based hot-reload whitelist w/o Mojang API; native `/whitelist` is UUID-based and unsafe on offline-mode). Swap to FOSS name-based alt if license unclear.
|
||||
- [ ] **[P3]** Drop HelpCommand → native `/help` + `commands.yml`
|
||||
- [ ] **[P3]** Drop PhantomSMP → native paper config + vanilla datapack
|
||||
- [ ] **[P3]** Audit MarriageMaster usage — drop or fork under FOSS license
|
||||
|
||||
Phase 4 — long-term refactor:
|
||||
- [ ] **[P3]** EssentialsX split into modular FOSS plugins (HuskHomes for teleport, etc)
|
||||
- [ ] **[P3]** Evaluate dropping ProtocolLib in favor of PacketEvents-only stack
|
||||
- [ ] **[P3]** PlaceholderAPI → MiniPlaceholders (Adventure-native) when ecosystem catches up
|
||||
- [ ] **[P3]** Self-hosted skin server (replace Mojang/MineSkin dependency)
|
||||
|
||||
### Documentation
|
||||
|
||||
- [x] Per-plugin doc files under `docs/plugins/<name>.md` — all 18 active plugins documented (license, source, version, notes)
|
||||
- [ ] **[P1]** `AGREEMENTS.md` — high-level overview of any custom dev-rights deals (no NDAs broken)
|
||||
- [ ] **[P1]** Cross-link launcher repo in README + MISSION when public
|
||||
- [ ] **[P2]** Cross-link client repo in README + MISSION when public
|
||||
- [ ] **[P2]** `docs/SKIN_HOSTING.md` — once skin server self-hosted
|
||||
- [ ] **[P3]** mkdocs site auto-built from `docs/` for racked.ru
|
||||
|
||||
### Community / process
|
||||
|
||||
- [ ] **[P1]** Publish to GitHub under racked-rust org (or chosen org name)
|
||||
- [ ] **[P1]** CONTRIBUTING.md — describe FOSS-only plugin policy (per MISSION.md)
|
||||
- [ ] **[P2]** Issue templates: plugin-suggestion, license-concern, bug, feature
|
||||
- [ ] **[P2]** PR template — license check checkbox, vision-alignment checkbox
|
||||
- [ ] **[P3]** Discussion category for plugin proposals
|
||||
|
||||
### Backlog (deferred, low priority)
|
||||
|
||||
- [ ] **[P3-deferred]** Self-host LuckPerms web editor + bytebin on `perms.racked.ru` — eliminates Cloudflare dep that bit us during a CF outage (web editor failed; in-game `/lp` commands still worked). Both components are MIT FOSS (`github.com/LuckPerms/web`, `github.com/lucko/bytebin`). Workaround for now: use `/lp` commands only, skip GUI entirely. Revisit when other Phase 4 work is done — small QoL win, big setup cost.
|
||||
|
||||
### Done
|
||||
|
||||
- [x] Backup old server → `_archive/minecraft-old-2026-04-27.tar.gz`
|
||||
- [x] Migrate Lands (paid) → LandClaimPlugin (FOSS) — see [migrations/lands-to-landclaim.md](docs/migrations/lands-to-landclaim.md)
|
||||
- [x] Drop LitePlaytimeRewards (upstream dead since 2021)
|
||||
- [x] Drop CosmicGuard (premium, can't audit) — GrimAC covers anti-cheat
|
||||
- [x] Document MISSION + THANKS + plugin policy
|
||||
- [x] Plugin alternatives audit — see [PLUGIN_ALTERNATIVES.md](docs/PLUGIN_ALTERNATIVES.md)
|
||||
- [x] Drop DiscordSRV (Discord = mission-misaligned proprietary platform)
|
||||
- [x] Migrate old world (4.2G overworld + nether + end) from archive to new server
|
||||
- [x] Restore selective plugin configs from old (LuckPerms perms+groups, CoreProtect history, EssentialsX userdata, MiniMOTD, voicechat, SkinsRestorer, GrimAC, ProAntiTab, WorldEdit, PlaceholderAPI, spark)
|
||||
- [x] Restore player state files (ops.json, banned-players, banned-ips, whitelist, usercache)
|
||||
- [x] TAB v5 → v6 schema migration (visuals preserved, 0 warnings on reload)
|
||||
- [x] Document `racked.ru` as the project (MISSION.md, THANKS.md w/ author attributions, README rebrand)
|
||||
- [x] AuthMe void limbo dimension (`auth_limbo`) — sealed barrier cell, no coord leaks, post-login TP to overworld
|
||||
- [x] Public access confirmed — port forward 25565 → 82.31.156.86 working
|
||||
- [x] LandClaimPlugin Wilderness actionbar silenced
|
||||
- [x] Disk cleanup — freed 11G+ (old backups, Docker build cache, staging dirs)
|
||||
|
||||
## License
|
||||
|
||||
Configs + scripts in this repo: MIT. Plugin jars are not redistributed here — they're acquired at deploy time from upstream sources, each under its own license. See [THANKS.md](THANKS.md) for per-plugin license attribution.
|
||||
32
docs/plugins/authme.md
Normal file
32
docs/plugins/authme.md
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
---
|
||||
name: AuthMe Reloaded
|
||||
version: "5.7.0-b2660"
|
||||
license: GPL-3.0
|
||||
source: github
|
||||
source_url: https://github.com/AuthMe/AuthMeReloaded/releases/download/5.7.0/AuthMe-5.7.0.jar
|
||||
acquisition: PLUGINS (direct GH URL)
|
||||
purpose: Auth on cracked server — prevent coord leaks before login
|
||||
---
|
||||
|
||||
Replaced LoginSecurity (upstream archived, unmaintained). Cracked server requirement — players must register/login before interacting with world.
|
||||
|
||||
## Security config
|
||||
|
||||
- `teleportUnAuthedToSpawn: true` — TP to auth_limbo on join, not actual location
|
||||
- `SaveQuitLocation: true` — restore position post-login
|
||||
- `hideInventory: true` — hides inv from other players until logged in (requires ProtocolLib)
|
||||
- `allowMovement: false`, `allowedMovementRadius: 0` — locked in place
|
||||
- `timeout: 60` — kick if no login within 60s
|
||||
- Spawn world: `auth_limbo` (void END-type dimension, sealed 3×3×4 barrier cube at 0,128,0)
|
||||
|
||||
## Post-login hook
|
||||
|
||||
`commands.yml` — onLogin/onFirstLogin/onSessionLogin all run:
|
||||
```
|
||||
mvtp %p world (CONSOLE, delay: 5 ticks)
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- `auth_limbo`: END dimension, no structures, no ender dragon, void floor — players see black void, cannot move
|
||||
- ProtocolLib required for inventory hide feature
|
||||
18
docs/plugins/coreprotect.md
Normal file
18
docs/plugins/coreprotect.md
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
---
|
||||
name: CoreProtect
|
||||
version: "23.1"
|
||||
license: Proprietary (free, source-available)
|
||||
license_note: Not FOSS — operator acknowledged, reliability prioritised over license purity
|
||||
source: modrinth
|
||||
modrinth_slug: coreprotect
|
||||
acquisition: MODRINTH_PROJECTS
|
||||
purpose: Block/interaction logging, rollback, lookup
|
||||
---
|
||||
|
||||
Best-in-class block audit log. Not fully open source — license is proprietary but free to use. Kept over Prism (FOSS alt) because CoreProtect has superior sign/container/entity rollback and scale-tested reliability.
|
||||
|
||||
## Notes
|
||||
|
||||
- Revisit if Prism reaches feature parity on sign/container/entity rollback at scale
|
||||
- FAWE integration: CoreProtect auto-detects FAWE on load, logs FAWE edits correctly
|
||||
- Block history migrated from old server (SQLite DB restored)
|
||||
15
docs/plugins/essentialsx.md
Normal file
15
docs/plugins/essentialsx.md
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
name: EssentialsX
|
||||
version: "2.21.2"
|
||||
license: GPL-3.0
|
||||
source: github
|
||||
source_url: https://github.com/EssentialsX/Essentials/releases/download/2.21.2/EssentialsX-2.21.2.jar
|
||||
acquisition: PLUGINS (direct GH URL)
|
||||
purpose: Core utility commands — /home, /spawn, /tpa, /kit, /warp, economy, chat
|
||||
---
|
||||
|
||||
Not on Modrinth as a Paper jar — direct GitHub release URL. Config + userdata migrated from old server. Kits, homes, player economy data all restored.
|
||||
|
||||
## Notes
|
||||
|
||||
- Long-term: evaluate splitting into modular FOSS plugins (HuskHomes for teleport etc) — P3 deferred
|
||||
18
docs/plugins/fastasyncworldedit.md
Normal file
18
docs/plugins/fastasyncworldedit.md
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
---
|
||||
name: FastAsyncWorldEdit (FAWE)
|
||||
version: "2.15.0+59372c5"
|
||||
license: GPL-3.0
|
||||
source: github
|
||||
source_url: https://github.com/IntellectualSites/FastAsyncWorldEdit
|
||||
modrinth_slug: fastasyncworldedit
|
||||
acquisition: MODRINTH_PROJECTS
|
||||
purpose: World editing — //set, //copy, brushes, schematics
|
||||
---
|
||||
|
||||
Drop-in replacement for WorldEdit by IntellectualSites. Async edits don't lag server during large operations. Disk-backed edit history. Per-permission limits. CoreProtect integration auto-detected on load.
|
||||
|
||||
## Notes
|
||||
|
||||
- Replaced WorldEdit (EngineHub) on 2026-04-28
|
||||
- Same commands, same API — no player/config migration needed
|
||||
- CoreProtect logs FAWE edits correctly
|
||||
16
docs/plugins/grimac.md
Normal file
16
docs/plugins/grimac.md
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
---
|
||||
name: GrimAC
|
||||
version: "2.3.74-8861589"
|
||||
license: GPL-3.0
|
||||
source: modrinth
|
||||
modrinth_slug: grimac
|
||||
acquisition: MODRINTH_PROJECTS (alpha channel required)
|
||||
purpose: Anticheat — movement, combat, interaction checks
|
||||
---
|
||||
|
||||
Alpha channel required (`MODRINTH_PROJECTS_DEFAULT_VERSION_TYPE: alpha`) — GrimAC only publishes alpha builds on Modrinth for bleeding-edge MC versions.
|
||||
|
||||
## Notes
|
||||
|
||||
- Replaced CosmicGuard (premium, unauditable)
|
||||
- Config + punishments migrated from old server
|
||||
33
docs/plugins/homestead.md
Normal file
33
docs/plugins/homestead.md
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
---
|
||||
name: Homestead
|
||||
version: "5.1.0.1"
|
||||
license: Apache-2.0
|
||||
source: modrinth
|
||||
modrinth_slug: homestead-plugin
|
||||
source_url: https://github.com/TayebYassine/Homestead
|
||||
acquisition: MODRINTH_PROJECTS
|
||||
purpose: Land claiming — chunk-based region protection, flags, sub-areas, economy
|
||||
---
|
||||
|
||||
Replaced LandClaimPlugin (and attempted Lands 7.21.3 which failed on 1.21.10). Apache-2.0, fully FOSS.
|
||||
|
||||
## Config
|
||||
|
||||
- Claimable worlds: `world` only (end/nether/auth_limbo disabled)
|
||||
- Chunk price: 0 (free)
|
||||
- Upkeep: disabled
|
||||
- Taxes: disabled
|
||||
- Sub-areas: enabled
|
||||
- FAWE integration: available (regenerate-chunks: false — enable if needed)
|
||||
- Dynamic map support: BlueMap/Squaremap auto-detected (P2 roadmap)
|
||||
- Adjacent chunks required: true (matches old Lands force-near)
|
||||
|
||||
## Migration
|
||||
|
||||
Fresh start — no claim data from Lands (old server) or LandClaimPlugin carried over.
|
||||
If future migration from Lands needed: `/hsadmin import lands` (requires Lands jar running simultaneously).
|
||||
|
||||
## Notes
|
||||
|
||||
- `regions.yml` must be chmod 777 due to userns-remap; write via `--userns=host` alpine container
|
||||
- Homestead logs "unsupported server version" warning — cosmetic, plugin fully functional on 1.21.10
|
||||
19
docs/plugins/landclaimplugin.md
Normal file
19
docs/plugins/landclaimplugin.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
---
|
||||
name: LandClaimPlugin
|
||||
version: "2.0.4"
|
||||
license: TBD — needs verification (P2)
|
||||
source: modrinth
|
||||
modrinth_slug: landclaimplugin
|
||||
acquisition: MODRINTH_PROJECTS
|
||||
purpose: Chunk-based land claims — grief protection
|
||||
---
|
||||
|
||||
Chunk-based claims. Chosen over GriefPrevention (free-form, FOSS) because chunk boundaries are vanilla-visible via F3+G — no client mod needed.
|
||||
|
||||
## Notes
|
||||
|
||||
- Replaced Lands (paid, proprietary) on 2026-04-27
|
||||
- License not yet confirmed — verify before publishing server repo publicly (P2)
|
||||
- Fallback if license fails: ChunkClaim (chunk-based, FOSS) or GriefPrevention
|
||||
- Wilderness actionbar message blanked in `locales/messages_en-US.yml`
|
||||
- Player claim data in `PlayerData/database.db`
|
||||
18
docs/plugins/luckperms.md
Normal file
18
docs/plugins/luckperms.md
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
---
|
||||
name: LuckPerms
|
||||
version: "5.5.17"
|
||||
license: MIT
|
||||
source: github
|
||||
source_url: https://github.com/LuckPerms/LuckPerms
|
||||
modrinth_slug: luckperms
|
||||
acquisition: MODRINTH_PROJECTS
|
||||
purpose: Permission management — groups, ranks, inheritance
|
||||
storage: H2 (local, /plugins/LuckPerms/luckperms-h2.mv.db)
|
||||
---
|
||||
|
||||
Rank and permission system. Groups defined in H2 DB, migrated from old server. Web editor at luckperms.net (requires Cloudflare bytebin — use in-game `/lp` commands if web editor unavailable).
|
||||
|
||||
## Notes
|
||||
|
||||
- Web editor dep on Cloudflare bytebin — fallback is `/lp` CLI commands only
|
||||
- Self-hosted option deferred (P3): github.com/LuckPerms/web + github.com/lucko/bytebin on perms.racked.ru
|
||||
11
docs/plugins/minimotd.md
Normal file
11
docs/plugins/minimotd.md
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
name: MiniMOTD
|
||||
version: "2.2.3"
|
||||
license: MIT
|
||||
source: modrinth
|
||||
modrinth_slug: minimotd
|
||||
acquisition: MODRINTH_PROJECTS
|
||||
purpose: Server list MOTD with MiniMessage formatting, player count customisation
|
||||
---
|
||||
|
||||
Config migrated from old server. Supports gradient text, hover events, custom player count display.
|
||||
17
docs/plugins/multiverse-core.md
Normal file
17
docs/plugins/multiverse-core.md
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
---
|
||||
name: Multiverse-Core
|
||||
version: "5.6.2-pre"
|
||||
license: BSD-3-Clause
|
||||
source: modrinth
|
||||
modrinth_slug: multiverse-core
|
||||
acquisition: MODRINTH_PROJECTS (alpha channel)
|
||||
purpose: Multi-world management — world creation, TP, spawn, respawn-world config
|
||||
---
|
||||
|
||||
Alpha channel required for 1.21.x compatibility. Used to manage `world`, `world_nether`, `world_the_end`, `auth_limbo`.
|
||||
|
||||
## Key config
|
||||
|
||||
- `auth_limbo`: respawn-world not set (AuthMe handles post-login TP via commands.yml hook)
|
||||
- `mv setspawn --unsafe` required for void dimension spawn points
|
||||
- `mvtp <player> <world>` used in AuthMe post-login hook
|
||||
15
docs/plugins/placeholderapi.md
Normal file
15
docs/plugins/placeholderapi.md
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
name: PlaceholderAPI
|
||||
version: "2.12.2"
|
||||
license: GPL-3.0
|
||||
source: modrinth
|
||||
modrinth_slug: placeholderapi
|
||||
acquisition: MODRINTH_PROJECTS
|
||||
purpose: Placeholder expansion API — %player_name%, %luckperms_*, %essentials_* etc
|
||||
---
|
||||
|
||||
Required by TAB, EssentialsX, MiniMOTD for dynamic text. Extensions auto-downloaded in-game via `/papi ecloud download <name>`.
|
||||
|
||||
## Notes
|
||||
|
||||
- Long-term: evaluate MiniPlaceholders (Adventure-native) when ecosystem catches up — P3 deferred
|
||||
12
docs/plugins/proantitab.md
Normal file
12
docs/plugins/proantitab.md
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
name: ProAntiTab
|
||||
version: "2.3.0"
|
||||
license: GPL-2.0-or-later
|
||||
source: modrinth
|
||||
modrinth_slug: proantitab
|
||||
source_url: https://github.com/RayzsYT/ProAntiTab
|
||||
acquisition: MODRINTH_PROJECTS
|
||||
purpose: Prevent tab-completion of player names and commands for unauthorised players
|
||||
---
|
||||
|
||||
Verified FOSS (RayzsYT, GPL-2.0-or-later, active GH repo). Earlier audit flagged as "likely premium" — confirmed free. Config migrated from old server.
|
||||
16
docs/plugins/protocollib.md
Normal file
16
docs/plugins/protocollib.md
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
---
|
||||
name: ProtocolLib
|
||||
version: "5.4.0"
|
||||
license: GPL-2.0
|
||||
source: github
|
||||
source_url: https://github.com/dmulloy2/ProtocolLib/releases/download/5.4.0/ProtocolLib.jar
|
||||
acquisition: PLUGINS (direct GH URL)
|
||||
purpose: Packet interception API — required by AuthMe (inventory hide) and GrimAC
|
||||
---
|
||||
|
||||
Low-level packet API. Not on Modrinth — acquired via direct GitHub release URL. Required by AuthMe for `hideInventory` feature (hides inv from other players until logged in) and GrimAC for anticheat packet inspection.
|
||||
|
||||
## Notes
|
||||
|
||||
- Spiget source broken (reports "up to date" but jar absent) — direct GH URL is canonical
|
||||
- Evaluate dropping in favour of PacketEvents-only stack (P3 deferred)
|
||||
16
docs/plugins/simple-voice-chat.md
Normal file
16
docs/plugins/simple-voice-chat.md
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
---
|
||||
name: Simple Voice Chat
|
||||
version: "2.6.16"
|
||||
license: GPL-3.0
|
||||
source: modrinth
|
||||
modrinth_slug: simple-voice-chat
|
||||
acquisition: MODRINTH_PROJECTS
|
||||
purpose: Proximity voice chat — requires matching client mod
|
||||
---
|
||||
|
||||
Server-side plugin. Players need the matching client mod installed. Config (`voicechat-server.properties`) migrated from old server.
|
||||
|
||||
## Notes
|
||||
|
||||
- Client mod required: modrinth.com/mod/simple-voice-chat
|
||||
- UDP port may need forwarding separately (default 24454)
|
||||
16
docs/plugins/skinsrestorer.md
Normal file
16
docs/plugins/skinsrestorer.md
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
---
|
||||
name: SkinsRestorer
|
||||
version: "15.12.0"
|
||||
license: GPL-3.0
|
||||
source: modrinth
|
||||
modrinth_slug: skinsrestorer
|
||||
acquisition: MODRINTH_PROJECTS
|
||||
purpose: Skin assignment for offline-mode (cracked) players
|
||||
---
|
||||
|
||||
Restores Mojang skin API functionality for cracked clients. Skin assignments migrated from old server.
|
||||
|
||||
## Notes
|
||||
|
||||
- Required because `ONLINE_MODE: false` disables vanilla skin fetching
|
||||
- Long-term: self-hosted skin server to eliminate Mojang/MineSkin dependency — P3 deferred
|
||||
11
docs/plugins/spark.md
Normal file
11
docs/plugins/spark.md
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
name: spark
|
||||
version: "1.10.172"
|
||||
license: GPL-3.0
|
||||
source: ci
|
||||
source_url: https://ci.lucko.me/job/spark/lastSuccessfulBuild/artifact/spark-bukkit/build/libs/spark-1.10.172-bukkit.jar
|
||||
acquisition: PLUGINS (direct CI URL)
|
||||
purpose: Performance profiler — TPS, MSPT, CPU flame graphs
|
||||
---
|
||||
|
||||
Not on Modrinth as Paper jar — Lucko CI direct URL. Use `/spark tps` for server health check, `/spark profiler` for lag investigation.
|
||||
15
docs/plugins/tab.md
Normal file
15
docs/plugins/tab.md
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
name: TAB
|
||||
version: "6.0.2"
|
||||
license: TBD — needs verification (P2)
|
||||
source: modrinth
|
||||
modrinth_slug: tab-was-taken
|
||||
acquisition: MODRINTH_PROJECTS
|
||||
purpose: Tablist, nametags, header/footer, scoreboard
|
||||
---
|
||||
|
||||
## Notes
|
||||
|
||||
- Migrated from v5 → v6 on 2026-04-27: `yes/no` → `true/false` in conditions; `afk-yes/afk-no` moved to `placeholder-output-replacements`; proxy-support redis/rabbitmq stubs added
|
||||
- Config visual layout preserved through migration (header, footer, nametag format)
|
||||
- License not yet confirmed — verify (P2)
|
||||
12
docs/plugins/vaultunlocked.md
Normal file
12
docs/plugins/vaultunlocked.md
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
name: VaultUnlocked
|
||||
version: "2.19.1"
|
||||
license: LGPL-3.0
|
||||
source: github
|
||||
source_url: https://github.com/TheNewEconomy/VaultUnlocked
|
||||
modrinth_slug: vaultunlocked
|
||||
acquisition: MODRINTH_PROJECTS
|
||||
purpose: Economy/permission API bridge — drop-in Vault replacement
|
||||
---
|
||||
|
||||
Fork of the original Vault by TheNewEconomy. Drop-in API replacement — all plugins depending on Vault work unchanged. Replaced original Vault (MilkBowl, largely unmaintained).
|
||||
11
docs/plugins/voidworldgenerator.md
Normal file
11
docs/plugins/voidworldgenerator.md
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
name: VoidWorldGenerator
|
||||
version: "1.3.11"
|
||||
license: MIT
|
||||
source: modrinth
|
||||
modrinth_slug: voidworldgenerator
|
||||
acquisition: MODRINTH_PROJECTS
|
||||
purpose: Generates void worlds — used for auth_limbo creation
|
||||
---
|
||||
|
||||
Required to create `auth_limbo` as a true void END-type world with no structures, no terrain, no ender dragon spawn.
|
||||
1
live-server/.modrinth-manifest.json
Executable file
1
live-server/.modrinth-manifest.json
Executable file
|
|
@ -0,0 +1 @@
|
|||
{"@type":"me.itzg.helpers.modrinth.ModrinthManifest","timestamp":"2026-04-30T17:15:09.796677204Z","files":["plugins/LuckPerms-Bukkit-5.5.17.jar","plugins/VoidWorldGenerator-1.3.11.jar","plugins/minimotd-paper-2.2.3.jar","plugins/FastAsyncWorldEdit-Paper-2.15.0.jar","plugins/PlaceholderAPI-2.12.2.jar","plugins/voicechat-bukkit-2.6.16.jar","plugins/VaultUnlocked-2.19.1.jar","plugins/homestead.jar","plugins/SkinsRestorer.jar","plugins/ProAntiTab-2.3.0.jar"],"projects":["luckperms","placeholderapi","fastasyncworldedit","simple-voice-chat","minimotd","skinsrestorer","vaultunlocked","proantitab","voidworldgenerator","homestead-plugin"]}
|
||||
1
live-server/.rcon-cli.env
Executable file
1
live-server/.rcon-cli.env
Executable file
|
|
@ -0,0 +1 @@
|
|||
password=*redacted*
|
||||
1
live-server/.rcon-cli.yaml
Executable file
1
live-server/.rcon-cli.yaml
Executable file
|
|
@ -0,0 +1 @@
|
|||
password: "*redacted*"
|
||||
47
live-server/bukkit.yml
Executable file
47
live-server/bukkit.yml
Executable file
|
|
@ -0,0 +1,47 @@
|
|||
# This is the Bukkit configuration file in Paper.
|
||||
# As you can see, there's actually not that much to configure without any plugins.
|
||||
#
|
||||
# If you need help with the configuration or have any questions related to Paper,
|
||||
# join us in our Discord or check the docs page.
|
||||
#
|
||||
# File Reference: https://docs.papermc.io/paper/reference/bukkit-configuration/
|
||||
# Docs: https://docs.papermc.io/
|
||||
# Discord: https://discord.gg/papermc
|
||||
# Website: https://papermc.io/
|
||||
|
||||
settings:
|
||||
allow-end: true
|
||||
warn-on-overload: true
|
||||
permissions-file: permissions.yml
|
||||
update-folder: update
|
||||
plugin-profiling: false
|
||||
connection-throttle: 4000
|
||||
query-plugins: true
|
||||
deprecated-verbose: default
|
||||
shutdown-message: Server closed
|
||||
minimum-api: none
|
||||
use-map-color-cache: true
|
||||
spawn-limits:
|
||||
monsters: 70
|
||||
animals: 10
|
||||
water-animals: 5
|
||||
water-ambient: 20
|
||||
water-underground-creature: 5
|
||||
axolotls: 5
|
||||
ambient: 15
|
||||
chunk-gc:
|
||||
period-in-ticks: 600
|
||||
ticks-per:
|
||||
animal-spawns: 400
|
||||
monster-spawns: 1
|
||||
water-spawns: 1
|
||||
water-ambient-spawns: 1
|
||||
water-underground-creature-spawns: 1
|
||||
axolotl-spawns: 1
|
||||
ambient-spawns: 1
|
||||
autosave: 6000
|
||||
aliases: now-in-commands.yml
|
||||
worlds:
|
||||
auth_limbo:
|
||||
generator: VoidWorldGenerator
|
||||
environment: normal
|
||||
32
live-server/commands.yml
Executable file
32
live-server/commands.yml
Executable file
|
|
@ -0,0 +1,32 @@
|
|||
# This is the Bukkit commands configuration file for Paper.
|
||||
#
|
||||
# If you need help with the configuration or have any questions related to Paper,
|
||||
# join us in our Discord or check the docs page.
|
||||
#
|
||||
# File Reference: https://docs.papermc.io/paper/reference/bukkit-commands-configuration/
|
||||
# Docs: https://docs.papermc.io/
|
||||
# Discord: https://discord.gg/papermc
|
||||
# Website: https://papermc.io/
|
||||
|
||||
command-block-overrides: []
|
||||
ignore-vanilla-permissions: false
|
||||
|
||||
aliases:
|
||||
tp:
|
||||
- essentials:tpa $1-
|
||||
|
||||
# Allow ONLY /deletehome (maps to essentials:delhome)
|
||||
deletehome:
|
||||
- essentials:delhome $1-
|
||||
|
||||
# Disable /delhome by NOT defining it here
|
||||
|
||||
tpa: []
|
||||
tpahere: []
|
||||
tphere: []
|
||||
teleport: []
|
||||
|
||||
skin clear: []
|
||||
skin update: []
|
||||
skin search: []
|
||||
skin random: []
|
||||
91
live-server/docker-compose.yml
Normal file
91
live-server/docker-compose.yml
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
services:
|
||||
mc:
|
||||
image: itzg/minecraft-server:latest
|
||||
container_name: minecraft-mc
|
||||
environment:
|
||||
EULA: "TRUE"
|
||||
# TYPE=CUSTOM bypasses itzg's auto-loader detection; honors MODRINTH_LOADER override
|
||||
TYPE: CUSTOM
|
||||
CUSTOM_SERVER: "https://api.purpurmc.org/v2/purpur/1.21.11/latest/download"
|
||||
VERSION: "1.21.11"
|
||||
|
||||
MEMORY_SIZE: "16G"
|
||||
JVM_OPTS: "-Xms8192M -Xmx16384M"
|
||||
|
||||
DIFFICULTY: hard
|
||||
GAMEMODE: survival
|
||||
HARDCORE: "false"
|
||||
MAX_PLAYERS: "69"
|
||||
VIEW_DISTANCE: 20
|
||||
SIMULATION_DISTANCE: 10
|
||||
ONLINE_MODE: "false"
|
||||
SPAWN_PROTECTION: 0
|
||||
MOTD: "racked.ru — experience the game the way it should have always been"
|
||||
|
||||
USE_AIKAR_FLAGS: "true"
|
||||
MAX_TICK_TIME: "-1"
|
||||
|
||||
ENABLE_RCON: "true"
|
||||
RCON_PASSWORD: "*redacted*"
|
||||
|
||||
TZ: "Europe/London"
|
||||
ENABLE_ROLLING_LOGS: "true"
|
||||
|
||||
UID: "1000"
|
||||
GID: "1000"
|
||||
|
||||
# Modrinth auto-DL — TYPE=CUSTOM lets MODRINTH_LOADER=paper actually work
|
||||
MODRINTH_PROJECTS: |
|
||||
luckperms
|
||||
placeholderapi
|
||||
fastasyncworldedit
|
||||
simple-voice-chat
|
||||
minimotd
|
||||
skinsrestorer
|
||||
vaultunlocked
|
||||
proantitab
|
||||
voidworldgenerator
|
||||
homestead-plugin
|
||||
# EssentialsX + spark not on Modrinth as paper jars — direct GH/CI URLs
|
||||
PLUGINS: |
|
||||
https://github.com/EssentialsX/Essentials/releases/download/2.21.2/EssentialsX-2.21.2.jar
|
||||
https://ci.lucko.me/job/spark/lastSuccessfulBuild/artifact/spark-bukkit/build/libs/spark-1.10.172-bukkit.jar
|
||||
https://github.com/HaHaWTH/AuthMeReReloaded/releases/download/b49/AuthMe-5.6.0-FORK-Universal.jar
|
||||
https://github.com/dmulloy2/ProtocolLib/releases/download/dev-build/ProtocolLib.jar
|
||||
https://github.com/VoidemLIVE/Help-Command-Plugin/releases/download/v2.9.2/HelpCommand-2.9.2.jar
|
||||
https://cdn.modrinth.com/data/Lu3KuzdV/versions/HD2IvrxS/CoreProtect-CE-23.1.jar
|
||||
https://cdn.modrinth.com/data/gG7VFbG0/versions/uWACk3HR/TAB%20v6.0.1.jar
|
||||
MODRINTH_DOWNLOAD_DEPENDENCIES: none
|
||||
MODRINTH_PROJECTS_DEFAULT_VERSION_TYPE: release
|
||||
MODRINTH_LOADER: paper
|
||||
SPIGET_RESOURCES: ""
|
||||
REMOVE_OLD_MODS: "true"
|
||||
REMOVE_OLD_MODS_INCLUDE: "*.jar"
|
||||
REMOVE_OLD_MODS_EXCLUDE: "RackedLimbo*.jar"
|
||||
volumes:
|
||||
- /opt/docker/minecraft:/data
|
||||
ports:
|
||||
- "25565:25565/tcp"
|
||||
- "25575:25575/tcp"
|
||||
networks:
|
||||
- proxy
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "mc-health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 240s
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 18G
|
||||
cpus: '6'
|
||||
reservations:
|
||||
memory: 8G
|
||||
labels:
|
||||
- "traefik.enable=false"
|
||||
|
||||
networks:
|
||||
proxy:
|
||||
external: true
|
||||
3
live-server/eula.txt
Executable file
3
live-server/eula.txt
Executable file
|
|
@ -0,0 +1,3 @@
|
|||
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://aka.ms/MinecraftEULA).
|
||||
#Tue Apr 08 20:41:28 BST 2025
|
||||
eula=true
|
||||
64
live-server/help.yml
Executable file
64
live-server/help.yml
Executable file
|
|
@ -0,0 +1,64 @@
|
|||
# This is the Bukkit help configuration file for Paper.
|
||||
#
|
||||
# By default you do not need to modify this file. Help topics for all plugin commands are automatically provided by
|
||||
# or extracted from your installed plugins. You only need to modify this file if you wish to add new help pages to
|
||||
# your server or override the help pages of existing plugin commands.
|
||||
#
|
||||
# This file is divided up into the following parts:
|
||||
# -- general-topics: lists admin defined help topics
|
||||
# -- index-topics: lists admin defined index topics
|
||||
# -- amended-topics: lists topic amendments to apply to existing help topics
|
||||
# -- ignore-plugins: lists any plugins that should be excluded from help
|
||||
#
|
||||
# Examples are given below. When amending command topic, the string <text> will be replaced with the existing value
|
||||
# in the help topic. Color codes can be used in topic text. The color code character is & followed by 0-F.
|
||||
# ================================================================
|
||||
#
|
||||
# Set this to true to list the individual command help topics in the master help.
|
||||
# command-topics-in-master-index: true
|
||||
#
|
||||
# Each general topic will show up as a separate topic in the help index along with all the plugin command topics.
|
||||
# general-topics:
|
||||
# Rules:
|
||||
# shortText: Rules of the server
|
||||
# fullText: |
|
||||
# &61. Be kind to your fellow players.
|
||||
# &B2. No griefing.
|
||||
# &D3. No swearing.
|
||||
# permission: topics.rules
|
||||
#
|
||||
# Each index topic will show up as a separate sub-index in the help index along with all the plugin command topics.
|
||||
# To override the default help index (displayed when the user executes /help), name the index topic "Default".
|
||||
# index-topics:
|
||||
# Ban Commands:
|
||||
# shortText: Player banning commands
|
||||
# preamble: Moderator - do not abuse these commands
|
||||
# permission: op
|
||||
# commands:
|
||||
# - /ban
|
||||
# - /ban-ip
|
||||
# - /banlist
|
||||
#
|
||||
# Topic amendments are used to change the content of automatically generated plugin command topics.
|
||||
# amended-topics:
|
||||
# /stop:
|
||||
# shortText: Stops the server cold....in its tracks!
|
||||
# fullText: <text> - This kills the server.
|
||||
# permission: you.dont.have
|
||||
#
|
||||
# Any plugin in the ignored plugins list will be excluded from help. The name must match the name displayed by
|
||||
# the /plugins command. Ignore "Bukkit" to remove the standard bukkit commands from the index. Ignore "All"
|
||||
# to completely disable automatic help topic generation.
|
||||
# ignore-plugins:
|
||||
# - PluginNameOne
|
||||
# - PluginNameTwo
|
||||
# - PluginNameThree
|
||||
#
|
||||
# If you need help with the configuration or have any questions related to Paper,
|
||||
# join us in our Discord or check the docs page.
|
||||
#
|
||||
# File Reference: https://docs.papermc.io/paper/reference/bukkit-help-configuration/
|
||||
# Docs: https://docs.papermc.io/
|
||||
# Discord: https://discord.gg/papermc
|
||||
|
||||
{}
|
||||
29
live-server/log4j2.xml
Executable file
29
live-server/log4j2.xml
Executable file
|
|
@ -0,0 +1,29 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Configuration status="WARN">
|
||||
<Appenders>
|
||||
<Console name="SysOut" target="SYSTEM_OUT">
|
||||
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level]: %msg%n" />
|
||||
</Console>
|
||||
<Queue name="TerminalConsole">
|
||||
<PatternLayout pattern="[%d{HH:mm:ss} %level]: %msg%n" />
|
||||
</Queue>
|
||||
<RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/%d{yyyy-MM-dd}-%i.log.gz">
|
||||
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level]: %msg%n" />
|
||||
<Policies>
|
||||
<TimeBasedTriggeringPolicy />
|
||||
<OnStartupTriggeringPolicy />
|
||||
</Policies>
|
||||
<DefaultRolloverStrategy max="1000"/>
|
||||
</RollingRandomAccessFile>
|
||||
</Appenders>
|
||||
<Loggers>
|
||||
<Root level="info">
|
||||
<filters>
|
||||
<MarkerFilter marker="NETWORK_PACKETS" onMatch="DENY" onMismatch="NEUTRAL" />
|
||||
</filters>
|
||||
<AppenderRef ref="SysOut"/>
|
||||
<AppenderRef ref="File"/>
|
||||
<AppenderRef ref="TerminalConsole"/>
|
||||
</Root>
|
||||
</Loggers>
|
||||
</Configuration>
|
||||
8
live-server/ops.json
Executable file
8
live-server/ops.json
Executable file
|
|
@ -0,0 +1,8 @@
|
|||
[
|
||||
{
|
||||
"uuid": "cf3c7edb-c699-3d96-a6f1-15c805403f14",
|
||||
"name": "s8n",
|
||||
"level": 4,
|
||||
"bypassesPlayerLimit": false
|
||||
}
|
||||
]
|
||||
0
live-server/permissions.yml
Executable file
0
live-server/permissions.yml
Executable file
12
live-server/plugins/.1997-version.json
Normal file
12
live-server/plugins/.1997-version.json
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"downloads": 125193,
|
||||
"name": "5.4.0",
|
||||
"rating": {
|
||||
"count": 8,
|
||||
"average": 3.4
|
||||
},
|
||||
"releaseDate": 1754699400,
|
||||
"resource": 1997,
|
||||
"uuid": "00000f1d-39e3-d43c-0005-c15b2119dc5b",
|
||||
"id": 602511
|
||||
}
|
||||
12
live-server/plugins/.34315-version.json
Executable file
12
live-server/plugins/.34315-version.json
Executable file
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"downloads": 2681598,
|
||||
"rating": {
|
||||
"count": 164,
|
||||
"average": 4.7
|
||||
},
|
||||
"name": "1.7.3",
|
||||
"releaseDate": 1595004900,
|
||||
"resource": 34315,
|
||||
"uuid": "00060038-b5fa-1d8d-003a-10029aaaa51a",
|
||||
"id": 344916
|
||||
}
|
||||
1
live-server/plugins/.var-list-manifest.json
Executable file
1
live-server/plugins/.var-list-manifest.json
Executable file
|
|
@ -0,0 +1 @@
|
|||
{"@type":"me.itzg.helpers.sync.MultiCopyManifest","timestamp":"2026-04-30T17:15:04.262167023Z","files":["HelpCommand-2.9.2.jar","spark-1.10.172-bukkit.jar","EssentialsX-2.21.2.jar","CoreProtect-CE-23.1.jar","TAB v6.0.1.jar","AuthMe-5.6.0-FORK-Universal.jar","ProtocolLib.jar"]}
|
||||
68
live-server/plugins/AuthMe/commands.yml
Executable file
68
live-server/plugins/AuthMe/commands.yml
Executable file
|
|
@ -0,0 +1,68 @@
|
|||
|
||||
# This configuration file allows you to execute commands on various events.
|
||||
# Supported placeholders in commands:
|
||||
# %p is replaced with the player name.
|
||||
# %nick is replaced with the player's nick name
|
||||
# %ip is replaced with the player's IP address
|
||||
# %country is replaced with the player's country
|
||||
#
|
||||
# For example, if you want to send a welcome message to a player who just registered:
|
||||
# onRegister:
|
||||
# welcome:
|
||||
# command: 'msg %p Welcome to the server!'
|
||||
# executor: CONSOLE
|
||||
#
|
||||
# This will make the console execute the msg command to the player.
|
||||
# Each command under an event has a name you can choose freely (e.g. 'welcome' as above),
|
||||
# after which a mandatory 'command' field defines the command to run,
|
||||
# and 'executor' defines who will run the command (either PLAYER or CONSOLE). Longer example:
|
||||
# onLogin:
|
||||
# welcome:
|
||||
# command: 'msg %p Welcome back!'
|
||||
# executor: PLAYER
|
||||
# broadcast:
|
||||
# command: 'broadcast %p has joined, welcome back!'
|
||||
# executor: CONSOLE
|
||||
#
|
||||
# You can also add delay to command. It will run after the specified ticks. Example:
|
||||
# onLogin:
|
||||
# rules:
|
||||
# command: 'rules'
|
||||
# executor: PLAYER
|
||||
# delay: 200
|
||||
#
|
||||
# Supported command events: onLogin, onSessionLogin, onFirstLogin, onJoin, onLogout, onRegister, onUnregister
|
||||
#
|
||||
# For onLogin and onFirstLogin, you can use 'ifNumberOfAccountsLessThan' and 'ifNumberOfAccountsAtLeast'
|
||||
# to specify limits to how many accounts a player can have (matched by IP) for a command to be run:
|
||||
# onLogin:
|
||||
# warnOnManyAccounts:
|
||||
# command: 'say Uh oh! %p has many alt accounts!'
|
||||
# executor: CONSOLE
|
||||
# ifNumberOfAccountsAtLeast: 5
|
||||
# Commands to run for players logging in whose 'last login date' was empty
|
||||
onFirstLogin:
|
||||
tpToOverworld:
|
||||
command: 'mvtp %p world'
|
||||
executor: CONSOLE
|
||||
delay: 5
|
||||
onJoin: {}
|
||||
onLogin:
|
||||
tpFromLimbo:
|
||||
command: 'mvtp %p world'
|
||||
executor: CONSOLE
|
||||
delay: 5
|
||||
onSessionLogin:
|
||||
tpFromLimbo:
|
||||
command: 'mvtp %p world'
|
||||
executor: CONSOLE
|
||||
delay: 5
|
||||
# These commands are called whenever a logged in player uses /logout or quits.
|
||||
# The commands are not run if a player that was not logged in quits the server.
|
||||
# Note: if your server crashes, these commands won't be run, so don't rely on them to undo
|
||||
# 'onLogin' commands that would be dangerous for non-logged in players to have!
|
||||
onLogout: {}
|
||||
onRegister: {}
|
||||
onSessionLogin: {}
|
||||
# Commands to run whenever a player is unregistered (by himself, or by an admin)
|
||||
onUnregister: {}
|
||||
637
live-server/plugins/AuthMe/config.yml
Executable file
637
live-server/plugins/AuthMe/config.yml
Executable file
|
|
@ -0,0 +1,637 @@
|
|||
DataSource:
|
||||
# What type of database do you want to use?
|
||||
# Valid values: H2, SQLITE, MARIADB, MYSQL, POSTGRESQL
|
||||
backend: SQLITE
|
||||
# Enable the database caching system, should be disabled on bungeecord environments
|
||||
# or when a website integration is being used.
|
||||
caching: true
|
||||
# Should we try to use VirtualThreads(Java 21+) for database cache loader?
|
||||
useVirtualThreadsCache: false
|
||||
# Database host address
|
||||
mySQLHost: 127.0.0.1
|
||||
# Database port
|
||||
mySQLPort: '3306'
|
||||
# Replacement of Mysql's useSsl (for MariaDB only).
|
||||
# - disable: No SSL
|
||||
# - trust: Trust blindly (no validation)
|
||||
# - verify_ca: Encryption, certificates validation, BUT no hostname verification
|
||||
# - verify_full: Encryption, certificate validation and hostname validation
|
||||
# Read more: https://bit.ly/mariadb-sslmode
|
||||
MariaDbSslMode: disabled
|
||||
# Connect to MySQL database over SSL
|
||||
# If you're using MariaDB, use sslMode instead
|
||||
mySQLUseSSL: true
|
||||
# Verification of server's certificate.
|
||||
# We would not recommend to set this option to false.
|
||||
# Set this option to false at your own risk if and only if you know what you're doing
|
||||
mySQLCheckServerCertificate: true
|
||||
# Authorize client to retrieve RSA server public key.
|
||||
# Advanced option, ignore if you don't know what it means.
|
||||
# If you are using MariaDB, use MariaDbSslMode instead.
|
||||
mySQLAllowPublicKeyRetrieval: true
|
||||
# Username to connect to the MySQL database
|
||||
mySQLUsername: authme
|
||||
# Password to connect to the MySQL database
|
||||
mySQLPassword: '12345'
|
||||
# Database Name, use with converters or as SQLITE database name
|
||||
mySQLDatabase: authme
|
||||
# Table of the database
|
||||
mySQLTablename: authme
|
||||
# Column of IDs to sort data
|
||||
mySQLColumnId: id
|
||||
# Column for storing or checking players nickname
|
||||
mySQLColumnName: username
|
||||
# Column for storing or checking players RealName
|
||||
mySQLRealName: realname
|
||||
# Column for storing players passwords
|
||||
mySQLColumnPassword: password
|
||||
# Column for storing players passwords salts
|
||||
mySQLColumnSalt: ''
|
||||
# Column for storing players emails
|
||||
mySQLColumnEmail: email
|
||||
# Column for storing if a player is logged in or not
|
||||
mySQLColumnLogged: isLogged
|
||||
# Column for storing if a player has a valid session or not
|
||||
mySQLColumnHasSession: hasSession
|
||||
# Column for storing a player's TOTP key (for two-factor authentication)
|
||||
mySQLtotpKey: totp
|
||||
# Column for storing the player's last IP
|
||||
mySQLColumnIp: ip
|
||||
# Column for storing players lastlogins
|
||||
mySQLColumnLastLogin: lastlogin
|
||||
# Column storing the registration date
|
||||
mySQLColumnRegisterDate: regdate
|
||||
# Column for storing the IP address at the time of registration
|
||||
mySQLColumnRegisterIp: regip
|
||||
# Column for storing player LastLocation - X
|
||||
mySQLlastlocX: x
|
||||
# Column for storing player LastLocation - Y
|
||||
mySQLlastlocY: y
|
||||
# Column for storing player LastLocation - Z
|
||||
mySQLlastlocZ: z
|
||||
# Column for storing player LastLocation - World Name
|
||||
mySQLlastlocWorld: world
|
||||
# Column for storing player LastLocation - Yaw
|
||||
mySQLlastlocYaw: yaw
|
||||
# Column for storing player LastLocation - Pitch
|
||||
mySQLlastlocPitch: pitch
|
||||
# Column for storing players uuids (optional)
|
||||
mySQLPlayerUUID: ''
|
||||
# Overrides the size of the DB Connection Pool, default = 10
|
||||
poolSize: 10
|
||||
# The maximum lifetime of a connection in the pool, default = 1800 seconds
|
||||
# You should set this at least 30 seconds less than mysql server wait_timeout
|
||||
maxLifetime: 1800
|
||||
ExternalBoardOptions:
|
||||
# Column for storing players groups
|
||||
mySQLColumnGroup: ''
|
||||
# -1 means disabled. If you want that only activated players
|
||||
# can log into your server, you can set here the group number
|
||||
# of unactivated users, needed for some forum/CMS support
|
||||
nonActivedUserGroup: -1
|
||||
# Other MySQL columns where we need to put the username (case-sensitive)
|
||||
mySQLOtherUsernameColumns: []
|
||||
# How much log2 rounds needed in BCrypt (do not change if you do not know what it does)
|
||||
bCryptLog2Round: 12
|
||||
# phpBB table prefix defined during the phpBB installation process
|
||||
phpbbTablePrefix: phpbb_
|
||||
# phpBB activated group ID; 2 is the default registered group defined by phpBB
|
||||
phpbbActivatedGroupId: 2
|
||||
# IP Board table prefix defined during the IP Board installation process
|
||||
IPBTablePrefix: ipb_
|
||||
# IP Board default group ID; 3 is the default registered group defined by IP Board
|
||||
IPBActivatedGroupId: 3
|
||||
# Xenforo table prefix defined during the Xenforo installation process
|
||||
XFTablePrefix: xf_
|
||||
# XenForo default group ID; 2 is the default registered group defined by Xenforo
|
||||
XFActivatedGroupId: 2
|
||||
# Wordpress prefix defined during WordPress installation
|
||||
wordpressTablePrefix: wp_
|
||||
3rdPartyFeature:
|
||||
compatibility:
|
||||
# Should we execute /help command when unregistered players press Shift+F?
|
||||
# This keeps compatibility with some menu plugins
|
||||
# If you are using TrMenu, don't enable this because TrMenu already implemented this.
|
||||
menuPlugins: false
|
||||
features:
|
||||
captcha:
|
||||
# Should send GUI captcha by country code whitelist?
|
||||
# If the country of the player is in this list, the captcha won't be sent.
|
||||
whiteList: []
|
||||
# Send a GUI captcha to unregistered players?(Requires ProtocolLib)
|
||||
guiCaptcha: false
|
||||
# Should we kick the players when they don't finish the GUI captcha in seconds?
|
||||
# (less than or equals 0 is disabled)
|
||||
timeOut: 0
|
||||
# Should we ignore floodgate players when sending GUI captcha?
|
||||
# (Requires floodgate and hookFloodgate: true)
|
||||
ignoreBedrock: false
|
||||
# Should we let Bedrock players login automatically?
|
||||
# (Requires hookFloodgate to be true & floodgate loaded)
|
||||
# (**THIS IS SAFE DO NOT WORRY**)
|
||||
bedrockAutoLogin: false
|
||||
purgeData:
|
||||
# Should we purge data on non-registered players quit?
|
||||
purgeOnQuit: false
|
||||
# Which world's player data should be deleted?(Enter the world *FOLDER* name where your players first logged in)
|
||||
purgeWorldFolderName: world
|
||||
fixes:
|
||||
# Enable the new feature to prevent ghost players?
|
||||
antiGhostPlayer: false
|
||||
# (MC1.13- only)
|
||||
# Should we fix the shulker crash bug with advanced method?
|
||||
advancedShulkerFix: false
|
||||
loginLocationFix:
|
||||
# Should we fix the location when players logged in the portal?
|
||||
fixPortalStuck: false
|
||||
# Should we fix the location when players logged underground?
|
||||
fixGroundStuck: false
|
||||
optimizes:
|
||||
# Choose the best teleport method by server brand?
|
||||
# (Enable this if you are using Paper/Folia)
|
||||
smartAsyncTeleport: true
|
||||
settings:
|
||||
sessions:
|
||||
# Do you want to enable the session feature?
|
||||
# If enabled, when a player authenticates successfully,
|
||||
# his IP and his nickname is saved.
|
||||
# The next time the player joins the server, if his IP
|
||||
# is the same as last time and the timeout hasn't
|
||||
# expired, he will not need to authenticate.
|
||||
enabled: false
|
||||
# After how many minutes should a session expire?
|
||||
# A player's session ends after the timeout or if his IP has changed
|
||||
timeout: 10
|
||||
# Message language, available languages:
|
||||
# https://github.com/AuthMe/AuthMeReloaded/blob/master/docs/translations.md
|
||||
# Example: zhcn, en
|
||||
messagesLanguage: en
|
||||
# Forces authme to hook into Vault instead of a specific permission handler system.
|
||||
forceVaultHook: false
|
||||
# Log level: INFO, FINE, DEBUG. Use INFO for general messages,
|
||||
# FINE for some additional detailed ones (like password failed),
|
||||
# and DEBUG for debugging
|
||||
logLevel: DEBUG
|
||||
# By default we schedule async tasks when talking to the database. If you want
|
||||
# typical communication with the database to happen synchronously, set this to false
|
||||
useAsyncTasks: true
|
||||
# The name of the server, used in some placeholders.
|
||||
serverName: Your Minecraft Server
|
||||
restrictions:
|
||||
# Can not authenticated players chat?
|
||||
# Keep in mind that this feature also blocks all commands not
|
||||
# listed in the list below.
|
||||
allowChat: false
|
||||
# Hide the chat log from players who are not authenticated?
|
||||
hideChat: true
|
||||
# Allowed commands for unauthenticated players
|
||||
allowCommands:
|
||||
- /login
|
||||
- /log
|
||||
- /l
|
||||
- /register
|
||||
- /reg
|
||||
- /email
|
||||
- /captcha
|
||||
- /2fa
|
||||
- /totp
|
||||
# Max number of allowed registrations per IP
|
||||
# The value 0 means an unlimited number of registrations!
|
||||
maxRegPerIp: 1
|
||||
# Minimum allowed username length
|
||||
minNicknameLength: 3
|
||||
# Maximum allowed username length
|
||||
maxNicknameLength: 16
|
||||
# When this setting is enabled, online players can't be kicked out
|
||||
# due to "Logged in from another Location"
|
||||
# This setting will prevent potential security exploits.
|
||||
ForceSingleSession: true
|
||||
ForceSpawnLocOnJoin:
|
||||
# If enabled, every player that spawn in one of the world listed in
|
||||
# "ForceSpawnLocOnJoin.worlds" will be teleported to the spawnpoint after successful
|
||||
# authentication. The quit location of the player will be overwritten.
|
||||
# This is different from "teleportUnAuthedToSpawn" that teleport player
|
||||
# to the spawnpoint on join.
|
||||
enabled: false
|
||||
# WorldNames where we need to force the spawn location
|
||||
# Case-sensitive!
|
||||
worlds:
|
||||
- world
|
||||
- world_nether
|
||||
- world_the_end
|
||||
# This option will save the quit location of the players.
|
||||
SaveQuitLocation: true
|
||||
# To activate the restricted user feature you need
|
||||
# to enable this option and configure the AllowedRestrictedUser field.
|
||||
AllowRestrictedUser: false
|
||||
# The restricted user feature will kick players listed below
|
||||
# if they don't match the defined IP address. Names are case-insensitive.
|
||||
# You can use * as wildcard (127.0.0.*), or regex with a "regex:" prefix regex:127\.0\.0\..*
|
||||
# Example:
|
||||
# AllowedRestrictedUser:
|
||||
# - playername;127.0.0.1
|
||||
# - playername;regex:127\.0\.0\..*
|
||||
AllowedRestrictedUser: []
|
||||
# Ban unknown IPs trying to log in with a restricted username?
|
||||
banUnsafedIP: false
|
||||
# Should unregistered players be kicked immediately?
|
||||
kickNonRegistered: false
|
||||
# Should players be kicked on wrong password?
|
||||
kickOnWrongPassword: true
|
||||
# Should not logged in players be teleported to the spawn?
|
||||
# After the authentication they will be teleported back to
|
||||
# their normal position.
|
||||
teleportUnAuthedToSpawn: true
|
||||
# Can unregistered players walk around?
|
||||
allowMovement: false
|
||||
# After how many seconds should players who fail to login or register
|
||||
# be kicked? Set to 0 to disable.
|
||||
timeout: 120
|
||||
# Regex pattern of allowed characters in the player name.
|
||||
allowedNicknameCharacters: '[a-zA-Z0-9_]*'
|
||||
# How far can unregistered players walk?
|
||||
# Set to 0 for unlimited radius
|
||||
allowedMovementRadius: 0
|
||||
# Should we protect the player inventory before logging in? Requires ProtocolLib.
|
||||
ProtectInventoryBeforeLogIn: true
|
||||
# Should we deny the tabcomplete feature before logging in? Requires ProtocolLib.
|
||||
DenyTabCompleteBeforeLogin: false
|
||||
# Should we display all other accounts from a player when he joins?
|
||||
# permission: /authme.admin.accounts
|
||||
displayOtherAccounts: true
|
||||
# Spawn priority; values: authme, essentials, cmi, multiverse, default
|
||||
spawnPriority: authme,essentials,cmi,multiverse,default
|
||||
# Maximum Login authorized by IP
|
||||
maxLoginPerIp: 0
|
||||
# Maximum Join authorized by IP
|
||||
maxJoinPerIp: 0
|
||||
# AuthMe will NEVER teleport players if set to true!
|
||||
noTeleport: false
|
||||
# Regex syntax for allowed chars in passwords. The default [!-~] allows all visible ASCII
|
||||
# characters, which is what we recommend. See also http://asciitable.com
|
||||
# You can test your regex with https://regex101.com
|
||||
allowedPasswordCharacters: '[!-~]*'
|
||||
# Regex syntax for allowed chars in email.
|
||||
allowedEmailCharacters: ^[A-Za-z0-9_]{4,15}@(qq|outlook|163|gmail|icloud)\.com$
|
||||
GameMode:
|
||||
# Force survival gamemode when player joins?
|
||||
ForceSurvivalMode: false
|
||||
unrestrictions:
|
||||
# Below you can list all account names that AuthMe will ignore
|
||||
# for registration or login. Configure it at your own risk!!
|
||||
# This option adds compatibility with BuildCraft and some other mods.
|
||||
# It is case-insensitive! Example:
|
||||
# UnrestrictedName:
|
||||
# - 'npcPlayer'
|
||||
# - 'npcPlayer2'
|
||||
UnrestrictedName: []
|
||||
# Below you can list all inventories names that AuthMe will ignore
|
||||
# for registration or login. Configure it at your own risk!!
|
||||
# This option adds compatibility with some mods.
|
||||
# It is case-insensitive! Example:
|
||||
# UnrestrictedInventories:
|
||||
# - 'myCustomInventory1'
|
||||
# - 'myCustomInventory2'
|
||||
UnrestrictedInventories: []
|
||||
security:
|
||||
# Minimum length of password
|
||||
minPasswordLength: 5
|
||||
# Maximum length of password
|
||||
passwordMaxLength: 30
|
||||
# Possible values: SHA256, BCRYPT, BCRYPT2Y, PBKDF2, SALTEDSHA512,
|
||||
# MYBB, IPB3, PHPBB, PHPFUSION, SMF, XENFORO, XAUTH, JOOMLA, WBB3, WBB4, MD5VB,
|
||||
# PBKDF2DJANGO, WORDPRESS, ROYALAUTH, ARGON2, CUSTOM (for developers only). See full list at
|
||||
# https://github.com/AuthMe/AuthMeReloaded/blob/master/docs/hash_algorithms.md
|
||||
# If you use ARGON2, check that you have the argon2 c library on your system
|
||||
passwordHash: SHA256
|
||||
# If a password check fails, AuthMe will also try to check with the following hash methods.
|
||||
# Use this setting when you change from one hash method to another.
|
||||
# AuthMe will update the password to the new hash. Example:
|
||||
# legacyHashes:
|
||||
# - 'SHA1'
|
||||
legacyHashes: []
|
||||
# Salt length for the SALTED2MD5 MD5(MD5(password)+salt)
|
||||
doubleMD5SaltLength: 8
|
||||
# Number of rounds to use if passwordHash is set to PBKDF2. Default is 10000
|
||||
pbkdf2Rounds: 10000
|
||||
# Prevent unsafe passwords from being used; put them in lowercase!
|
||||
# You should always set 'help' as unsafePassword due to possible conflicts.
|
||||
# unsafePasswords:
|
||||
# - '123456'
|
||||
# - 'password'
|
||||
# - 'help'
|
||||
unsafePasswords:
|
||||
- '123456'
|
||||
- password
|
||||
- qwerty
|
||||
- '12345'
|
||||
- '54321'
|
||||
- '123456789'
|
||||
- help
|
||||
registration:
|
||||
# Enable registration on the server?
|
||||
enabled: true
|
||||
# Send every X seconds a message to a player to
|
||||
# remind him that he has to login/register
|
||||
messageInterval: 5
|
||||
# Only registered and logged in players can play.
|
||||
# See restrictions for exceptions
|
||||
force: true
|
||||
# Type of registration: PASSWORD or EMAIL
|
||||
# PASSWORD = account is registered with a password supplied by the user;
|
||||
# EMAIL = password is generated and sent to the email provided by the user.
|
||||
# More info at https://github.com/AuthMe/AuthMeReloaded/wiki/Registration
|
||||
type: PASSWORD
|
||||
# Second argument the /register command should take:
|
||||
# NONE = no 2nd argument
|
||||
# CONFIRMATION = must repeat first argument (pass or email)
|
||||
# EMAIL_OPTIONAL = for password register: 2nd argument can be empty or have email address
|
||||
# EMAIL_MANDATORY = for password register: 2nd argument MUST be an email address
|
||||
secondArg: CONFIRMATION
|
||||
email:
|
||||
# Should we unregister the player when he didn't verify the email?
|
||||
# This only works if you enabled email registration.
|
||||
unregisterOnEmailVerificationFailure: false
|
||||
# How many minutes should we wait before unregister the player
|
||||
# when he didn't verify the email?
|
||||
unregisterAfterMinutes: 10
|
||||
# Do we force kick a player after a successful registration?
|
||||
# Do not use with login feature below
|
||||
forceKickAfterRegister: false
|
||||
# Does AuthMe need to enforce a /login after a successful registration?
|
||||
forceLoginAfterRegister: false
|
||||
# Should we delay the join message and display it once the player has logged in?
|
||||
delayJoinMessage: false
|
||||
# The custom join message that will be sent after a successful login,
|
||||
# keep empty to use the original one.
|
||||
# Available variables:
|
||||
# {PLAYERNAME}: the player name (no colors)
|
||||
# {DISPLAYNAME}: the player display name (with colors)
|
||||
# {DISPLAYNAMENOCOLOR}: the player display name (without colors)
|
||||
customJoinMessage: ''
|
||||
# Should we remove the leave messages of unlogged users?
|
||||
removeUnloggedLeaveMessage: false
|
||||
# Should we remove join messages altogether?
|
||||
removeJoinMessage: false
|
||||
# Should we remove leave messages altogether?
|
||||
removeLeaveMessage: false
|
||||
# Do we need to add potion effect Blinding before login/register?
|
||||
applyBlindEffect: false
|
||||
# Do we need to prevent people to login with another case?
|
||||
# If Xephi is registered, then Xephi can login, but not XEPHI/xephi/XePhI
|
||||
preventOtherCase: true
|
||||
GroupOptions:
|
||||
# Enables switching a player to defined permission groups before they log in.
|
||||
# See below for a detailed explanation.
|
||||
enablePermissionCheck: false
|
||||
# This is a very important option: if a registered player joins the server
|
||||
# AuthMe will switch him to unLoggedInGroup. This should prevent all major exploits.
|
||||
# You can set up your permission plugin with this special group to have no permissions,
|
||||
# or only permission to chat (or permission to send private messages etc.).
|
||||
# The better way is to set up this group with few permissions, so if a player
|
||||
# tries to exploit an account they can do only what you've defined for the group.
|
||||
# After login, the player will be moved to his correct permissions group!
|
||||
# Please note that the group name is case-sensitive, so 'admin' is different from 'Admin'
|
||||
# Otherwise your group will be wiped and the player will join in the default group []!
|
||||
# Example: registeredPlayerGroup: 'NotLogged'
|
||||
registeredPlayerGroup: ''
|
||||
# Similar to above, unregistered players can be set to the following
|
||||
# permissions group
|
||||
unregisteredPlayerGroup: ''
|
||||
Email:
|
||||
# Email SMTP server host
|
||||
mailSMTP: smtp.gmail.com
|
||||
# Email SMTP server port
|
||||
mailPort: 465
|
||||
# Only affects port 25: enable TLS/STARTTLS?
|
||||
useTls: true
|
||||
# Email account which sends the mails
|
||||
mailAccount: ''
|
||||
# Email account password
|
||||
mailPassword: ''
|
||||
# Email address, fill when mailAccount is not the email address of the account
|
||||
mailAddress: ''
|
||||
# Custom sender name, replacing the mailAccount name in the email
|
||||
mailSenderName: ''
|
||||
# Recovery password length
|
||||
RecoveryPasswordLength: 8
|
||||
# Mail Subject
|
||||
mailSubject: Your new AuthMe password
|
||||
# Like maxRegPerIP but with email
|
||||
maxRegPerEmail: 1
|
||||
# Recall players to add an email?
|
||||
recallPlayers: false
|
||||
# Delay in minute for the recall scheduler
|
||||
delayRecall: 5
|
||||
# Send the new password drawn in an image?
|
||||
generateImage: false
|
||||
# The OAuth2 token
|
||||
emailOauth2Token: ''
|
||||
# Email notifications when the server shuts down
|
||||
shutDownEmail: false
|
||||
# Email notification address when the server is shut down
|
||||
shutDownEmailAddress: your@mail.com
|
||||
Hooks:
|
||||
# Do we need to hook with multiverse for spawn checking?
|
||||
multiverse: true
|
||||
# Do we need to hook with BungeeCord?
|
||||
bungeecord: false
|
||||
# Do we need to hook with Velocity?
|
||||
velocity: false
|
||||
# How many ticks should we wait before sending login info to proxy?
|
||||
# Change this to higher if your player has high ping.
|
||||
# See: https://www.spigotmc.org/wiki/bukkit-bungee-plugin-messaging-channel/
|
||||
proxySendDelay: 10
|
||||
# Hook into floodgate.
|
||||
# This must be true if you want to use other bedrock features.
|
||||
floodgate: false
|
||||
# Allow bedrock players join without check isValidName?
|
||||
ignoreBedrockNameCheck: true
|
||||
# Send player to this BungeeCord server after register/login
|
||||
sendPlayerTo: ''
|
||||
# Do we need to disable Essentials SocialSpy on join?
|
||||
disableSocialSpy: false
|
||||
# Do we need to force /motd Essentials command on join?
|
||||
useEssentialsMotd: false
|
||||
Protection:
|
||||
# Enable some servers protection (country based login, antibot)
|
||||
enableProtection: false
|
||||
# Apply the protection also to registered usernames
|
||||
enableProtectionRegistered: true
|
||||
# Countries allowed to join the server and register. For country codes, see
|
||||
# https://dev.maxmind.com/geoip/legacy/codes/iso3166/
|
||||
# Use "LOCALHOST" for local addresses.
|
||||
# PLEASE USE QUOTES!
|
||||
countries:
|
||||
- US
|
||||
- GB
|
||||
- LOCALHOST
|
||||
# Countries not allowed to join the server and register
|
||||
# PLEASE USE QUOTES!
|
||||
countriesBlacklist:
|
||||
- A1
|
||||
# Do we need to enable automatic antibot system?
|
||||
enableAntiBot: true
|
||||
# The interval in seconds
|
||||
antiBotInterval: 5
|
||||
# Max number of players allowed to login in the interval
|
||||
# before the AntiBot system is enabled automatically
|
||||
antiBotSensibility: 10
|
||||
# Duration in minutes of the antibot automatic system
|
||||
antiBotDuration: 10
|
||||
# Delay in seconds before the antibot activation
|
||||
antiBotDelay: 60
|
||||
quickCommands:
|
||||
# Kicks the player that issued a command before the defined time after the join process
|
||||
denyCommandsBeforeMilliseconds: 1000
|
||||
Purge:
|
||||
# If enabled, AuthMe automatically purges old, unused accounts
|
||||
useAutoPurge: false
|
||||
# Number of days after which an account should be purged
|
||||
daysBeforeRemovePlayer: 60
|
||||
# Do we need to remove the player.dat file during purge process?
|
||||
removePlayerDat: false
|
||||
# Do we need to remove the Essentials/userdata/player.yml file during purge process?
|
||||
removeEssentialsFile: false
|
||||
# World in which the players.dat are stored
|
||||
defaultWorld: world
|
||||
# Remove LimitedCreative/inventories/player.yml, player_creative.yml files during purge?
|
||||
removeLimitedCreativesInventories: false
|
||||
# Do we need to remove the AntiXRayData/PlayerData/player file during purge process?
|
||||
removeAntiXRayFile: false
|
||||
# Do we need to remove permissions?
|
||||
removePermissions: false
|
||||
Security:
|
||||
SQLProblem:
|
||||
# Stop the server if we can't contact the sql database
|
||||
# Take care with this, if you set this to false,
|
||||
# AuthMe will automatically disable and the server won't be protected!
|
||||
stopServer: true
|
||||
console:
|
||||
# Copy AuthMe log output in a separate file as well?
|
||||
logConsole: true
|
||||
account:
|
||||
haveIBeenPwned:
|
||||
# Query haveibeenpwned.com with a hashed version of the password.
|
||||
# This is used to check whether it is safe.
|
||||
check: false
|
||||
# If the password is used more than this number of times, it is considered unsafe.
|
||||
limit: 0
|
||||
captcha:
|
||||
# Enable captcha when a player uses wrong password too many times
|
||||
useCaptcha: false
|
||||
# Max allowed tries before a captcha is required
|
||||
maxLoginTry: 5
|
||||
# Captcha length
|
||||
captchaLength: 5
|
||||
# Minutes after which login attempts count is reset for a player
|
||||
captchaCountReset: 60
|
||||
# Require captcha before a player may register?
|
||||
requireForRegistration: false
|
||||
tempban:
|
||||
# Tempban a user's IP address if they enter the wrong password too many times
|
||||
enableTempban: false
|
||||
# How many times a user can attempt to login before their IP being tempbanned
|
||||
maxLoginTries: 10
|
||||
# The length of time a IP address will be tempbanned in minutes
|
||||
# Default: 480 minutes, or 8 hours
|
||||
tempbanLength: 480
|
||||
# How many minutes before resetting the count for failed logins by IP and username
|
||||
# Default: 480 minutes (8 hours)
|
||||
minutesBeforeCounterReset: 480
|
||||
# The command to execute instead of using the internal ban system, empty if disabled.
|
||||
# Available placeholders: %player%, %ip%
|
||||
customCommand: ''
|
||||
recoveryCode:
|
||||
# Number of characters a recovery code should have (0 to disable)
|
||||
length: 8
|
||||
# How many hours is a recovery code valid for?
|
||||
validForHours: 4
|
||||
# Max number of tries to enter recovery code
|
||||
maxTries: 3
|
||||
# How long a player has after password recovery to change their password
|
||||
# without logging in. This is in minutes.
|
||||
# Default: 2 minutes
|
||||
passwordChangeTimeout: 2
|
||||
emailRecovery:
|
||||
# Seconds a user has to wait for before a password recovery mail may be sent again
|
||||
# This prevents an attacker from abusing AuthMe's email feature.
|
||||
cooldown: 60
|
||||
privacy:
|
||||
# The mail shown using /email show will be partially hidden
|
||||
# E.g. (if enabled)
|
||||
# original email: my.email@example.com
|
||||
# hidden email: my.***@***mple.com
|
||||
enableEmailMasking: false
|
||||
# Minutes after which a verification code will expire
|
||||
verificationCodeExpiration: 10
|
||||
Plugin:
|
||||
updates:
|
||||
# Check for updates on enabled from GitHub?
|
||||
checkForUpdates: true
|
||||
banners:
|
||||
# Should we show the AuthMe banner on startup?
|
||||
showBanners: true
|
||||
# Before a user logs in, various properties are temporarily removed from the player,
|
||||
# such as OP status, ability to fly, and walk/fly speed.
|
||||
# Once the user is logged in, we add back the properties we previously saved.
|
||||
# In this section, you may define how these properties should be handled.
|
||||
# Read more at https://github.com/AuthMe/AuthMeReloaded/wiki/Limbo-players
|
||||
limbo:
|
||||
persistence:
|
||||
# Besides storing the data in memory, you can define if/how the data should be persisted
|
||||
# on disk. This is useful in case of a server crash, so next time the server starts we can
|
||||
# properly restore things like OP status, ability to fly, and walk/fly speed.
|
||||
# DISABLED: no disk storage,
|
||||
# INDIVIDUAL_FILES: each player data in its own file,
|
||||
# DISTRIBUTED_FILES: distributes players into different files based on their UUID, see below
|
||||
type: INDIVIDUAL_FILES
|
||||
# This setting only affects DISTRIBUTED_FILES persistence. The distributed file
|
||||
# persistence attempts to reduce the number of files by distributing players into various
|
||||
# buckets based on their UUID. This setting defines into how many files the players should
|
||||
# be distributed. Possible values: ONE, FOUR, EIGHT, SIXTEEN, THIRTY_TWO, SIXTY_FOUR,
|
||||
# ONE_TWENTY for 128, TWO_FIFTY for 256.
|
||||
# For example, if you expect 100 non-logged in players, setting to SIXTEEN will average
|
||||
# 6.25 players per file (100 / 16).
|
||||
# Note: if you change this setting all data will be migrated. If you have a lot of data,
|
||||
# change this setting only on server restart, not with /authme reload.
|
||||
distributionSize: SIXTEEN
|
||||
# Whether the player is allowed to fly: RESTORE, ENABLE, DISABLE, NOTHING.
|
||||
# RESTORE sets back the old property from the player. NOTHING will prevent AuthMe
|
||||
# from modifying the 'allow flight' property on the player.
|
||||
restoreAllowFlight: RESTORE
|
||||
# Restore fly speed: RESTORE, DEFAULT, MAX_RESTORE, RESTORE_NO_ZERO.
|
||||
# RESTORE: restore the speed the player had;
|
||||
# DEFAULT: always set to default speed;
|
||||
# MAX_RESTORE: take the maximum of the player's current speed and the previous one
|
||||
# RESTORE_NO_ZERO: Like 'restore' but sets speed to default if the player's speed was 0
|
||||
restoreFlySpeed: RESTORE_NO_ZERO
|
||||
# Restore walk speed: RESTORE, DEFAULT, MAX_RESTORE, RESTORE_NO_ZERO.
|
||||
# See above for a description of the values.
|
||||
restoreWalkSpeed: RESTORE_NO_ZERO
|
||||
BackupSystem:
|
||||
# General configuration for backups: if false, no backups are possible
|
||||
ActivateBackup: false
|
||||
# Create backup at every start of server
|
||||
OnServerStart: false
|
||||
# Create backup at every stop of server
|
||||
OnServerStop: true
|
||||
# Windows only: MySQL installation path
|
||||
MysqlWindowsPath: C:\Program Files\MySQL\MySQL Server 5.1\
|
||||
# Converter settings: see https://github.com/AuthMe/AuthMeReloaded/wiki/Converters
|
||||
Converter:
|
||||
CrazyLogin:
|
||||
# CrazyLogin database file name
|
||||
fileName: accounts.db
|
||||
loginSecurity:
|
||||
# LoginSecurity: convert from SQLite; if false we use MySQL
|
||||
useSqlite: true
|
||||
mySql:
|
||||
# LoginSecurity MySQL: database host
|
||||
host: ''
|
||||
# LoginSecurity MySQL: database name
|
||||
database: ''
|
||||
# LoginSecurity MySQL: database user
|
||||
user: ''
|
||||
# LoginSecurity MySQL: password for database user
|
||||
password: ''
|
||||
18
live-server/plugins/AuthMe/email.html
Normal file
18
live-server/plugins/AuthMe/email.html
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<h1>
|
||||
Dear <playername />,
|
||||
</h1>
|
||||
|
||||
<p>
|
||||
This is your new AuthMe password for the server <servername />:
|
||||
</p>
|
||||
<p>
|
||||
<generatedpass />
|
||||
</p>
|
||||
<image />
|
||||
<p>
|
||||
Do not forget to change password after login!<br />
|
||||
/changepassword <generatedpass /> newPassword'
|
||||
</p>
|
||||
<p>
|
||||
See you on <servername />!
|
||||
</p>
|
||||
|
|
@ -0,0 +1,194 @@
|
|||
# List of global tags:
|
||||
# %nl% - Goes to new line.
|
||||
# %username% - Replaces the username of the player receiving the message.
|
||||
# %displayname% - Replaces the nickname (and colors) of the player receiving the message.
|
||||
|
||||
# Registration
|
||||
registration:
|
||||
register_request: '&3Please, register to the server with the command: /register <password> <ConfirmPassword>'
|
||||
command_usage: '&cUsage: /register <password> <ConfirmPassword>'
|
||||
reg_only: '&4Only registered users can join the server! Please visit http://example.com to register yourself!'
|
||||
kicked_admin_registered: 'An admin just registered you; please log in again.'
|
||||
success: '&2Successfully registered!'
|
||||
disabled: '&cIn-game registration is disabled!'
|
||||
name_taken: '&cYou already have registered this username!'
|
||||
|
||||
# Password errors on registration
|
||||
password:
|
||||
match_error: '&cPasswords didn''t match, check them again!'
|
||||
name_in_password: '&cYou can''t use your name as password, please choose another one...'
|
||||
unsafe_password: '&cThe chosen password isn''t safe, please choose another one...'
|
||||
forbidden_characters: '&4Your password contains illegal characters. Allowed chars: %valid_chars'
|
||||
wrong_length: '&cYour password is too short or too long! Please try with another one!'
|
||||
|
||||
# Login
|
||||
login:
|
||||
command_usage: '&cUsage: /login <password>'
|
||||
wrong_password: '&cWrong password!'
|
||||
success: '&2Successful login!'
|
||||
login_request: '&cPlease, login with the command: /login <password>'
|
||||
timeout_error: '&4Login timeout exceeded, you have been kicked from the server, please try again!'
|
||||
|
||||
# Errors
|
||||
error:
|
||||
unregistered_user: '&cThis user isn''t registered!'
|
||||
denied_command: '&cIn order to use this command you must be authenticated!'
|
||||
denied_chat: '&cIn order to chat you must be authenticated!'
|
||||
not_logged_in: '&cYou''re not logged in!'
|
||||
tempban_max_logins: '&cYou have been temporarily banned for failing to log in too many times.'
|
||||
max_registration: '&cYou have exceeded the maximum number of registrations (%reg_count/%max_acc %reg_names) for your connection!'
|
||||
no_permission: '&4You don''t have the permission to perform this action!'
|
||||
unexpected_error: '&4An unexpected error occurred, please contact an administrator!'
|
||||
kick_for_vip: '&3A VIP player has joined the server when it was full!'
|
||||
logged_in: '&cYou''re already logged in!'
|
||||
kick_unresolved_hostname: '&cAn error occurred: unresolved player hostname!'
|
||||
|
||||
# AntiBot
|
||||
antibot:
|
||||
kick_antibot: 'AntiBot protection mode is enabled! You have to wait some minutes before joining the server.'
|
||||
auto_enabled: '&4[AntiBotService] AntiBot enabled due to the huge number of connections!'
|
||||
auto_disabled: '&2[AntiBotService] AntiBot disabled after %m minutes!'
|
||||
|
||||
unregister:
|
||||
success: '&cSuccessfully unregistered!'
|
||||
command_usage: '&cUsage: /unregister <password>'
|
||||
|
||||
# Other messages
|
||||
misc:
|
||||
accounts_owned_self: 'You own %count accounts:'
|
||||
accounts_owned_other: 'The player %name has %count accounts:'
|
||||
account_not_activated: '&cYour account isn''t activated yet, please check your emails!'
|
||||
password_changed: '&2Password changed successfully!'
|
||||
logout: '&2Logged out successfully!'
|
||||
reload: '&2Configuration and database have been reloaded correctly!'
|
||||
usage_change_password: '&cUsage: /changepassword <oldPassword> <newPassword>'
|
||||
|
||||
# Session messages
|
||||
session:
|
||||
invalid_session: '&cYour IP has been changed and your session data has expired!'
|
||||
valid_session: '&2Logged-in due to Session Reconnection.'
|
||||
|
||||
# Error messages when joining
|
||||
on_join_validation:
|
||||
name_length: '&4Your username is either too short or too long!'
|
||||
characters_in_name: '&4Your username contains illegal characters. Allowed chars: %valid_chars'
|
||||
country_banned: '&4Your country is banned from this server!'
|
||||
not_owner_error: 'You are not the owner of this account. Please choose another name!'
|
||||
kick_full_server: '&4The server is full, try again later!'
|
||||
same_nick_online: '&4The same username is already playing on the server!'
|
||||
invalid_name_case: 'You should join using username %valid, not %invalid.'
|
||||
same_ip_online: 'A player with the same IP is already in game!'
|
||||
quick_command: 'You used a command too fast! Please, join the server again and wait more before using any command.'
|
||||
|
||||
# Email
|
||||
email:
|
||||
usage_email_add: '&cUsage: /email add <email> <confirmEmail>'
|
||||
usage_email_change: '&cUsage: /email change <oldEmail> <newEmail>'
|
||||
new_email_invalid: '&cInvalid new email, try again!'
|
||||
old_email_invalid: '&cInvalid old email, try again!'
|
||||
invalid: '&cInvalid email address, try again!'
|
||||
added: '&2Email address successfully added to your account!'
|
||||
request_confirmation: '&cPlease confirm your email address!'
|
||||
changed: '&2Email address changed correctly!'
|
||||
email_show: '&2Your current email address is: &f%email'
|
||||
incomplete_settings: 'Error: not all required settings are set for sending emails. Please contact an admin.'
|
||||
already_used: '&4The email address is already being used'
|
||||
send_failure: 'The email could not be sent. Please contact an administrator.'
|
||||
no_email_for_account: '&2You currently don''t have email address associated with this account.'
|
||||
add_email_request: '&3Please add your email to your account with the command: /email add <yourEmail> <confirmEmail>'
|
||||
change_password_expired: 'You cannot change your password using this command anymore.'
|
||||
email_cooldown_error: '&cAn email was already sent recently. You must wait %time before you can send a new one.'
|
||||
add_not_allowed: '&cAdding email was not allowed.'
|
||||
change_not_allowed: '&cChanging email was not allowed.'
|
||||
|
||||
# Password recovery by email
|
||||
recovery:
|
||||
forgot_password_hint: '&3Forgot your password? Please use the command: /email recovery <yourEmail>'
|
||||
command_usage: '&cUsage: /email recovery <Email>'
|
||||
email_sent: '&2Recovery email sent successfully! Please check your email inbox!'
|
||||
code:
|
||||
code_sent: 'A recovery code to reset your password has been sent to your email.'
|
||||
incorrect: 'The recovery code is not correct! You have %count tries remaining.'
|
||||
tries_exceeded: 'You have exceeded the maximum number attempts to enter the recovery code. Use "/email recovery [email]" to generate a new one.'
|
||||
correct: 'Recovery code entered correctly!'
|
||||
change_password: 'Please use the command /email setpassword <new password> to change your password immediately.'
|
||||
|
||||
# Captcha
|
||||
captcha:
|
||||
usage_captcha: '&3To log in you have to solve a captcha code, please use the command: /captcha %captcha_code'
|
||||
wrong_captcha: '&cWrong captcha, please type "/captcha %captcha_code" into the chat!'
|
||||
valid_captcha: '&2Captcha code solved correctly!'
|
||||
captcha_for_registration: 'To register you have to solve a captcha first, please use the command: /captcha %captcha_code'
|
||||
register_captcha_valid: '&2Valid captcha! You may now register with /register'
|
||||
|
||||
# Verification code
|
||||
verification:
|
||||
code_required: '&3This command is sensitive and requires an email verification! Check your inbox and follow the email''s instructions.'
|
||||
command_usage: '&cUsage: /verification <code>'
|
||||
incorrect_code: '&cIncorrect code, please type "/verification <code>" into the chat, using the code you received by email'
|
||||
success: '&2Your identity has been verified! You can now execute all commands within the current session!'
|
||||
already_verified: '&2You can already execute every sensitive command within the current session!'
|
||||
code_expired: '&3Your code has expired! Execute another sensitive command to get a new code!'
|
||||
email_needed: '&3To verify your identity you need to link an email address with your account!!'
|
||||
|
||||
# Two-factor authentication
|
||||
two_factor:
|
||||
code_created: '&2Your secret code is %code. You can scan it from here %url'
|
||||
confirmation_required: 'Please confirm your code with /2fa confirm <code>'
|
||||
code_required: 'Please submit your two-factor authentication code with /2fa code <code>'
|
||||
already_enabled: 'Two-factor authentication is already enabled for your account!'
|
||||
enable_error_no_code: 'No 2fa key has been generated for you or it has expired. Please run /2fa add'
|
||||
enable_success: 'Successfully enabled two-factor authentication for your account'
|
||||
enable_error_wrong_code: 'Wrong code or code has expired. Please run /2fa add'
|
||||
not_enabled_error: 'Two-factor authentication is not enabled for your account. Run /2fa add'
|
||||
removed_success: 'Successfully removed two-factor auth from your account'
|
||||
invalid_code: 'Invalid code!'
|
||||
|
||||
# Time units
|
||||
time:
|
||||
second: 'second'
|
||||
seconds: 'seconds'
|
||||
minute: 'minute'
|
||||
minutes: 'minutes'
|
||||
hour: 'hour'
|
||||
hours: 'hours'
|
||||
day: 'day'
|
||||
days: 'days'
|
||||
|
||||
# Command validation messages
|
||||
command:
|
||||
player_only: '&cThis command is only for players.'
|
||||
player_only_alternative: '&cPlayer only! Please use %alternative instead.'
|
||||
failed_to_parse: '&4Failed to parse AuthMe command!'
|
||||
unknown: '&4Unknown command!'
|
||||
incorrect_arguments: '&4Incorrect command arguments!'
|
||||
did_you_mean: '&eDid you mean &6%cmd&e?'
|
||||
see_help: '&eUse the command &6/%cmd&e to view help.'
|
||||
detailed_help: '&6Detailed help: &f/%cmd'
|
||||
|
||||
# Admin command messages
|
||||
admin:
|
||||
force_login:
|
||||
player_offline: '&cPlayer needs to be online!'
|
||||
forbidden: '&cYou cannot force login the player %name!'
|
||||
success: '&2Force login for %name performed!'
|
||||
accounts:
|
||||
ip_not_found: '&cThis IP does not exist in the database.'
|
||||
single_account: '&2%name is a single account player.'
|
||||
no_last_ip: '&cNo known last IP address for player.'
|
||||
email_show: '&2%name''s email: %email'
|
||||
antibot:
|
||||
status: '&2AntiBot status: %status'
|
||||
override_enabled: '&2AntiBot Manual Override: enabled!'
|
||||
override_disabled: '&2AntiBot Manual Override: disabled!'
|
||||
invalid_mode: '&cInvalid AntiBot mode!'
|
||||
reload:
|
||||
db_type_change: '&eNote: cannot change database type during /authme reload.'
|
||||
error: '&cError occurred during reload of AuthMe.'
|
||||
spawn:
|
||||
set_success: '&2Correctly defined new spawn point.'
|
||||
set_fail: '&cSetSpawn has failed, please retry.'
|
||||
first_set_success: '&2Correctly defined new first spawn point.'
|
||||
first_set_fail: '&cSetFirstSpawn has failed, please retry.'
|
||||
not_defined: '&cSpawn has failed, please try to define the spawn.'
|
||||
first_not_defined: '&cFirst spawn has failed, please try to define the first spawn.'
|
||||
|
|
@ -0,0 +1,193 @@
|
|||
# Registration
|
||||
registration:
|
||||
disabled: '&cIn-game registration is disabled!'
|
||||
name_taken: '&cYou already have registered this username!'
|
||||
register_request: '&3Please, register to the server with the command: /register <password> <ConfirmPassword>'
|
||||
command_usage: '&cUsage: /register <password> <ConfirmPassword>'
|
||||
reg_only: '&4Only registered users can join the server! Please visit http://example.com to register yourself!'
|
||||
success: '&2Successfully registered!'
|
||||
kicked_admin_registered: 'An admin just registered you; please log in again.'
|
||||
# Password errors on registration
|
||||
password:
|
||||
match_error: '&cPasswords didn''t match, check them again!'
|
||||
name_in_password: '&cYou can''t use your name as password, please choose another one...'
|
||||
unsafe_password: '&cThe chosen password isn''t safe, please choose another one...'
|
||||
forbidden_characters: '&4Your password contains illegal characters. Allowed chars: %valid_chars'
|
||||
wrong_length: '&cYour password is too short or too long! Please try with another one!'
|
||||
# Login
|
||||
login:
|
||||
command_usage: '&cUsage: /login <password>'
|
||||
wrong_password: '&cWrong password!'
|
||||
success: '&2Successful login!'
|
||||
login_request: '&cPlease, login with the command: /login <password>'
|
||||
timeout_error: '&4Login timeout exceeded, you have been kicked from the server, please try again!'
|
||||
# Errors
|
||||
error:
|
||||
denied_command: '&cIn order to use this command you must be authenticated!'
|
||||
denied_chat: '&cIn order to chat you must be authenticated!'
|
||||
unregistered_user: '&cThis user isn''t registered!'
|
||||
not_logged_in: '&cYou''re not logged in!'
|
||||
no_permission: '&4You don''t have the permission to perform this action!'
|
||||
unexpected_error: '&4An unexpected error occurred, please contact an administrator!'
|
||||
max_registration: '&cYou have exceeded the maximum number of registrations (%reg_count/%max_acc %reg_names) for your connection!'
|
||||
logged_in: '&cYou''re already logged in!'
|
||||
kick_for_vip: '&3A VIP player has joined the server when it was full!'
|
||||
kick_unresolved_hostname: '&cAn error occurred: unresolved player hostname!'
|
||||
tempban_max_logins: '&cYou have been temporarily banned for failing to log in too many times.'
|
||||
# AntiBot
|
||||
antibot:
|
||||
kick_antibot: 'AntiBot protection mode is enabled! You have to wait some minutes before joining the server.'
|
||||
auto_enabled: '&4[AntiBotService] AntiBot enabled due to the huge number of connections!'
|
||||
auto_disabled: '&2[AntiBotService] AntiBot disabled after %m minutes!'
|
||||
# Unregister
|
||||
unregister:
|
||||
success: '&cSuccessfully unregistered!'
|
||||
command_usage: '&cUsage: /unregister <password>'
|
||||
# Other messages
|
||||
misc:
|
||||
account_not_activated: '&cYour account isn''t activated yet, please check your emails!'
|
||||
password_changed: '&2Password changed successfully!'
|
||||
logout: '&2Logged out successfully!'
|
||||
reload: '&2Configuration and database have been reloaded correctly!'
|
||||
usage_change_password: '&cUsage: /changepassword <oldPassword> <newPassword>'
|
||||
accounts_owned_self: 'You own %count accounts:'
|
||||
accounts_owned_other: 'The player %name has %count accounts:'
|
||||
# Session messages
|
||||
session:
|
||||
valid_session: '&2Logged-in due to Session Reconnection.'
|
||||
invalid_session: '&cYour IP has been changed and your session data has expired!'
|
||||
# Error messages when joining
|
||||
on_join_validation:
|
||||
same_ip_online: 'A player with the same IP is already in game!'
|
||||
same_nick_online: '&4The same username is already playing on the server!'
|
||||
name_length: '&4Your username is either too short or too long!'
|
||||
characters_in_name: '&4Your username contains illegal characters. Allowed chars: %valid_chars'
|
||||
kick_full_server: '&4The server is full, try again later!'
|
||||
country_banned: '&4Your country is banned from this server!'
|
||||
not_owner_error: 'You are not the owner of this account. Please choose another name!'
|
||||
invalid_name_case: 'You should join using username %valid, not %invalid.'
|
||||
quick_command: 'You used a command too fast! Please, join the server again and wait more before using any command.'
|
||||
# Email
|
||||
email:
|
||||
add_email_request: '&3Please add your email to your account with the command: /email add <yourEmail> <confirmEmail>'
|
||||
usage_email_add: '&cUsage: /email add <email> <confirmEmail>'
|
||||
usage_email_change: '&cUsage: /email change <oldEmail> <newEmail>'
|
||||
new_email_invalid: '&cInvalid new email, try again!'
|
||||
old_email_invalid: '&cInvalid old email, try again!'
|
||||
invalid: '&cInvalid email address, try again!'
|
||||
added: '&2Email address successfully added to your account!'
|
||||
add_not_allowed: '&cAdding email was not allowed.'
|
||||
request_confirmation: '&cPlease confirm your email address!'
|
||||
changed: '&2Email address changed correctly!'
|
||||
change_not_allowed: '&cChanging email was not allowed.'
|
||||
email_show: '&2Your current email address is: &f%email'
|
||||
no_email_for_account: '&2You currently don''t have email address associated with this account.'
|
||||
already_used: '&4The email address is already being used'
|
||||
incomplete_settings: 'Error: not all required settings are set for sending emails. Please contact an admin.'
|
||||
send_failure: 'The email could not be sent. Please contact an administrator.'
|
||||
change_password_expired: 'You cannot change your password using this command anymore.'
|
||||
email_cooldown_error: '&cAn email was already sent recently. You must wait %time before you can send a new one.'
|
||||
# Password recovery by email
|
||||
recovery:
|
||||
forgot_password_hint: '&3Forgot your password? Please use the command: /email recovery <yourEmail>'
|
||||
command_usage: '&cUsage: /email recovery <Email>'
|
||||
email_sent: '&2Recovery email sent successfully! Please check your email inbox!'
|
||||
code:
|
||||
code_sent: 'A recovery code to reset your password has been sent to your email.'
|
||||
incorrect: 'The recovery code is not correct! You have %count tries remaining.'
|
||||
tries_exceeded: 'You have exceeded the maximum number attempts to enter the recovery code. Use "/email recovery [email]" to generate a new one.'
|
||||
correct: 'Recovery code entered correctly!'
|
||||
change_password: 'Please use the command /email setpassword <new password> to change your password immediately.'
|
||||
# Captcha
|
||||
captcha:
|
||||
usage_captcha: '&3To log in you have to solve a captcha code, please use the command: /captcha %captcha_code'
|
||||
wrong_captcha: '&cWrong captcha, please type "/captcha %captcha_code" into the chat!'
|
||||
valid_captcha: '&2Captcha code solved correctly!'
|
||||
captcha_for_registration: 'To register you have to solve a captcha first, please use the command: /captcha %captcha_code'
|
||||
register_captcha_valid: '&2Valid captcha! You may now register with /register'
|
||||
# Verification code
|
||||
verification:
|
||||
code_required: '&3This command is sensitive and requires an email verification! Check your inbox and follow the email''s instructions.'
|
||||
command_usage: '&cUsage: /verification <code>'
|
||||
incorrect_code: '&cIncorrect code, please type "/verification <code>" into the chat, using the code you received by email'
|
||||
success: '&2Your identity has been verified! You can now execute all commands within the current session!'
|
||||
already_verified: '&2You can already execute every sensitive command within the current session!'
|
||||
code_expired: '&3Your code has expired! Execute another sensitive command to get a new code!'
|
||||
email_needed: '&3To verify your identity you need to link an email address with your account!!'
|
||||
# Time units
|
||||
time:
|
||||
second: 'second'
|
||||
seconds: 'seconds'
|
||||
minute: 'minute'
|
||||
minutes: 'minutes'
|
||||
hour: 'hour'
|
||||
hours: 'hours'
|
||||
day: 'day'
|
||||
days: 'days'
|
||||
# Two-factor authentication
|
||||
two_factor:
|
||||
code_created: '&2Your secret code is %code. You can scan it from here %url'
|
||||
confirmation_required: 'Please confirm your code with /2fa confirm <code>'
|
||||
code_required: 'Please submit your two-factor authentication code with /2fa code <code>'
|
||||
already_enabled: 'Two-factor authentication is already enabled for your account!'
|
||||
enable_error_no_code: 'No 2fa key has been generated for you or it has expired. Please run /2fa add'
|
||||
enable_success: 'Successfully enabled two-factor authentication for your account'
|
||||
enable_error_wrong_code: 'Wrong code or code has expired. Please run /2fa add'
|
||||
not_enabled_error: 'Two-factor authentication is not enabled for your account. Run /2fa add'
|
||||
removed_success: 'Successfully removed two-factor auth from your account'
|
||||
invalid_code: 'Invalid code!'
|
||||
# Dialog UI
|
||||
dialog:
|
||||
login:
|
||||
title: '&6Login'
|
||||
password: '&fPassword'
|
||||
button: '&aLogin'
|
||||
register:
|
||||
title: '&6Register'
|
||||
password: '&fPassword'
|
||||
confirm_password: '&fConfirm Password'
|
||||
email: '&fEmail'
|
||||
confirm_email: '&fConfirm Email'
|
||||
button: '&aRegister'
|
||||
two_factor:
|
||||
title: '&6Two-Factor Authentication'
|
||||
code: '&f2FA Code'
|
||||
button: '&aVerify'
|
||||
button:
|
||||
cancel: '&cCancel'
|
||||
# Command validation messages
|
||||
command:
|
||||
player_only: '&cThis command is only for players.'
|
||||
player_only_alternative: '&cPlayer only! Please use %alternative instead.'
|
||||
failed_to_parse: '&4Failed to parse AuthMe command!'
|
||||
unknown: '&4Unknown command!'
|
||||
incorrect_arguments: '&4Incorrect command arguments!'
|
||||
did_you_mean: '&eDid you mean &6%cmd&e?'
|
||||
see_help: '&eUse the command &6/%cmd&e to view help.'
|
||||
detailed_help: '&6Detailed help: &f/%cmd'
|
||||
# Admin command messages
|
||||
admin:
|
||||
force_login:
|
||||
player_offline: '&cPlayer needs to be online!'
|
||||
forbidden: '&cYou cannot force login the player %name!'
|
||||
success: '&2Force login for %name performed!'
|
||||
accounts:
|
||||
ip_not_found: '&cThis IP does not exist in the database.'
|
||||
single_account: '&2%name is a single account player.'
|
||||
no_last_ip: '&cNo known last IP address for player.'
|
||||
email_show: '&2%name''s email: %email'
|
||||
antibot:
|
||||
status: '&2AntiBot status: %status'
|
||||
override_enabled: '&2AntiBot Manual Override: enabled!'
|
||||
override_disabled: '&2AntiBot Manual Override: disabled!'
|
||||
invalid_mode: '&cInvalid AntiBot mode!'
|
||||
reload:
|
||||
db_type_change: '&eNote: cannot change database type during /authme reload.'
|
||||
error: '&cError occurred during reload of AuthMe.'
|
||||
spawn:
|
||||
set_success: '&2Correctly defined new spawn point.'
|
||||
set_fail: '&cSetSpawn has failed, please retry.'
|
||||
first_set_success: '&2Correctly defined new first spawn point.'
|
||||
first_set_fail: '&cSetFirstSpawn has failed, please retry.'
|
||||
not_defined: '&cSpawn has failed, please try to define the spawn.'
|
||||
first_not_defined: '&cFirst spawn has failed, please try to define the first spawn.'
|
||||
45
live-server/plugins/AuthMe/messages/help_en.yml
Normal file
45
live-server/plugins/AuthMe/messages/help_en.yml
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
# Translation config for the AuthMe help, e.g. when /authme help or /authme help register is called
|
||||
|
||||
# -------------------------------------------------------
|
||||
# List of texts used in the help section
|
||||
common:
|
||||
header: '==========[ AuthMeReloaded HELP ]=========='
|
||||
optional: 'Optional'
|
||||
hasPermission: 'You have permission'
|
||||
noPermission: 'No permission'
|
||||
default: 'Default'
|
||||
result: 'Result'
|
||||
defaultPermissions:
|
||||
notAllowed: 'No permission'
|
||||
opOnly: 'OP''s only'
|
||||
allowed: 'Everyone allowed'
|
||||
|
||||
# -------------------------------------------------------
|
||||
# Titles of the individual help sections
|
||||
# Set the translation text to empty text to disable the section, e.g. to hide alternatives:
|
||||
# alternatives: ''
|
||||
section:
|
||||
command: 'Command'
|
||||
description: 'Short description'
|
||||
detailedDescription: 'Detailed description'
|
||||
arguments: 'Arguments'
|
||||
permissions: 'Permissions'
|
||||
alternatives: 'Alternatives'
|
||||
children: 'Commands'
|
||||
|
||||
# -------------------------------------------------------
|
||||
# You can translate the data for all commands using the below pattern.
|
||||
# For example to translate /authme reload, create a section "authme.reload", or "login" for /login
|
||||
# If the command has arguments, you can use arg1 as below to translate the first argument, and so forth
|
||||
# Translations don't need to be complete; any missing section will be taken from the default silently
|
||||
# Important: Put main commands like "authme" before their children (e.g. "authme.reload")
|
||||
commands:
|
||||
authme.register:
|
||||
description: 'Register a player'
|
||||
detailedDescription: 'Register the specified player with the specified password.'
|
||||
arg1:
|
||||
label: 'player'
|
||||
description: 'Player name'
|
||||
arg2:
|
||||
label: 'password'
|
||||
description: 'Password'
|
||||
160
live-server/plugins/AuthMe/messages/messages_en.yml
Normal file
160
live-server/plugins/AuthMe/messages/messages_en.yml
Normal file
|
|
@ -0,0 +1,160 @@
|
|||
# Registration
|
||||
registration:
|
||||
disabled: '&cIn-game registration is disabled!'
|
||||
name_taken: '&cYou already have registered this username!'
|
||||
register_request: '&3Please, register to the server with the command: /register <password> <ConfirmPassword>'
|
||||
command_usage: '&cUsage: /register <password> <ConfirmPassword>'
|
||||
reg_only: '&4Only registered users can join the server! Please visit http://example.com to register yourself!'
|
||||
success: '&2Successfully registered!'
|
||||
kicked_admin_registered: 'An admin just registered you; please log in again.'
|
||||
# Password errors on registration
|
||||
password:
|
||||
match_error: '&cPasswords didn''t match, check them again!'
|
||||
name_in_password: '&cYou can''t use your name as password, please choose another one...'
|
||||
unsafe_password: '&cThe chosen password isn''t safe, please choose another one...'
|
||||
pwned_password: '&cYour chosen password is not secure. It was used %pwned_count times already! Please use a strong password...'
|
||||
forbidden_characters: '&4Your password contains illegal characters. Allowed chars: %valid_chars'
|
||||
wrong_length: '&cYour password is too short or too long! Please try with another one!'
|
||||
# Login
|
||||
login:
|
||||
command_usage: '&cUsage: /login <password>'
|
||||
wrong_password: '&cWrong password!'
|
||||
success: '&2Successful login!'
|
||||
login_request: '&cPlease, login with the command: /login <password>'
|
||||
timeout_error: '&4Login timeout exceeded, you have been kicked from the server, please try again!'
|
||||
# Errors
|
||||
error:
|
||||
denied_command: '&cIn order to use this command you must be authenticated!'
|
||||
denied_chat: '&cIn order to chat you must be authenticated!'
|
||||
unregistered_user: '&cThis user isn''t registered!'
|
||||
not_logged_in: '&cYou''re not logged in!'
|
||||
no_permission: '&4You don''t have the permission to perform this action!'
|
||||
unexpected_error: '&4An unexpected error occurred, please contact an administrator!'
|
||||
max_registration: '&cYou have exceeded the maximum number of registrations (%reg_count/%max_acc %reg_names) for your connection!'
|
||||
logged_in: '&cYou''re already logged in!'
|
||||
kick_for_vip: '&3A VIP player has joined the server when it was full!'
|
||||
kick_unresolved_hostname: '&cAn error occurred: unresolved player hostname!'
|
||||
tempban_max_logins: '&cYou have been temporarily banned for failing to log in too many times.'
|
||||
# AntiBot
|
||||
antibot:
|
||||
kick_antibot: 'AntiBot protection mode is enabled! You have to wait some minutes before joining the server.'
|
||||
auto_enabled: '&4[AntiBotService] AntiBot enabled due to the huge number of connections!'
|
||||
auto_disabled: '&2[AntiBotService] AntiBot disabled after %m minutes!'
|
||||
# Unregister
|
||||
unregister:
|
||||
success: '&cSuccessfully unregistered!'
|
||||
command_usage: '&cUsage: /unregister <password>'
|
||||
# Other messages
|
||||
misc:
|
||||
account_not_activated: '&cYour account isn''t activated yet, please check your emails!'
|
||||
password_changed: '&2Password changed successfully!'
|
||||
logout: '&2Logged out successfully!'
|
||||
reload: '&2Configuration and database have been reloaded correctly!'
|
||||
usage_change_password: '&cUsage: /changepassword <oldPassword> <newPassword>'
|
||||
accounts_owned_self: 'You own %count accounts:'
|
||||
accounts_owned_other: 'The player %name has %count accounts:'
|
||||
# Session messages
|
||||
session:
|
||||
valid_session: '&2Logged-in due to Session Reconnection.'
|
||||
invalid_session: '&cYour IP has been changed and your session data has expired!'
|
||||
# Error messages when joining
|
||||
on_join_validation:
|
||||
same_ip_online: 'A player with the same IP is already in game!'
|
||||
same_nick_online: '&4The same username is already playing on the server!'
|
||||
name_length: '&4Your username is either too short or too long!'
|
||||
characters_in_name: '&4Your username contains illegal characters. Allowed chars: %valid_chars'
|
||||
kick_full_server: '&4The server is full, try again later!'
|
||||
country_banned: '&4Your country is banned from this server!'
|
||||
not_owner_error: 'You are not the owner of this account. Please choose another name!'
|
||||
invalid_name_case: 'You should join using username %valid, not %invalid.'
|
||||
quick_command: 'You used a command too fast! Please, join the server again and wait more before using any command.'
|
||||
# Email
|
||||
email:
|
||||
add_email_request: '&3Please add your email to your account with the command: /email add <yourEmail> <confirmEmail>'
|
||||
usage_email_add: '&cUsage: /email add <email> <confirmEmail>'
|
||||
usage_email_change: '&cUsage: /email change <oldEmail> <newEmail>'
|
||||
new_email_invalid: '&cInvalid new email, try again!'
|
||||
old_email_invalid: '&cInvalid old email, try again!'
|
||||
invalid: '&cInvalid email address, try again!'
|
||||
added: '&2Email address successfully added to your account!'
|
||||
add_not_allowed: '&cAdding email was not allowed.'
|
||||
request_confirmation: '&cPlease confirm your email address!'
|
||||
changed: '&2Email address changed correctly!'
|
||||
change_not_allowed: '&cChanging email was not allowed.'
|
||||
email_show: '&2Your current email address is: &f%email'
|
||||
no_email_for_account: '&2You currently don''t have email address associated with this account.'
|
||||
already_used: '&4The email address is already being used'
|
||||
incomplete_settings: 'Error: not all required settings are set for sending emails. Please contact an admin.'
|
||||
send_failure: 'The email could not be sent. Please contact an administrator.'
|
||||
change_password_expired: 'You cannot change your password using this command anymore.'
|
||||
email_cooldown_error: '&cAn email was already sent recently. You must wait %time before you can send a new one.'
|
||||
# Password recovery by email
|
||||
recovery:
|
||||
forgot_password_hint: '&3Forgot your password? Please use the command: /email recovery <yourEmail>'
|
||||
command_usage: '&cUsage: /email recovery <Email>'
|
||||
email_sent: '&2Recovery email sent successfully! Please check your email inbox!'
|
||||
code:
|
||||
code_sent: 'A recovery code to reset your password has been sent to your email.'
|
||||
incorrect: 'The recovery code is not correct! You have %count tries remaining.'
|
||||
tries_exceeded: 'You have exceeded the maximum number attempts to enter the recovery code. Use "/email recovery [email]" to generate a new one.'
|
||||
correct: 'Recovery code entered correctly!'
|
||||
change_password: 'Please use the command /email setpassword <new password> to change your password immediately.'
|
||||
# Captcha
|
||||
captcha:
|
||||
usage_captcha: '&3To log in you have to solve a captcha code, please use the command: /captcha %captcha_code'
|
||||
wrong_captcha: '&cWrong captcha, please type "/captcha %captcha_code" into the chat!'
|
||||
valid_captcha: '&2Captcha code solved correctly!'
|
||||
captcha_for_registration: 'To register you have to solve a captcha first, please use the command: /captcha %captcha_code'
|
||||
register_captcha_valid: '&2Valid captcha! You may now register with /register'
|
||||
# Verification code
|
||||
verification:
|
||||
code_required: '&3This command is sensitive and requires an email verification! Check your inbox and follow the email''s instructions.'
|
||||
command_usage: '&cUsage: /verification <code>'
|
||||
incorrect_code: '&cIncorrect code, please type "/verification <code>" into the chat, using the code you received by email'
|
||||
success: '&2Your identity has been verified! You can now execute all commands within the current session!'
|
||||
already_verified: '&2You can already execute every sensitive command within the current session!'
|
||||
code_expired: '&3Your code has expired! Execute another sensitive command to get a new code!'
|
||||
email_needed: '&3To verify your identity you need to link an email address with your account!!'
|
||||
# Time units
|
||||
time:
|
||||
second: 'second'
|
||||
seconds: 'seconds'
|
||||
minute: 'minute'
|
||||
minutes: 'minutes'
|
||||
hour: 'hour'
|
||||
hours: 'hours'
|
||||
day: 'day'
|
||||
days: 'days'
|
||||
# Two-factor authentication
|
||||
two_factor:
|
||||
code_created: '&2Your secret code is %code. You can scan it from here %url'
|
||||
confirmation_required: 'Please confirm your code with /2fa confirm <code>'
|
||||
code_required: 'Please submit your two-factor authentication code with /2fa code <code>'
|
||||
already_enabled: 'Two-factor authentication is already enabled for your account!'
|
||||
enable_error_no_code: 'No 2fa key has been generated for you or it has expired. Please run /2fa add'
|
||||
enable_success: 'Successfully enabled two-factor authentication for your account'
|
||||
enable_error_wrong_code: 'Wrong code or code has expired. Please run /2fa add'
|
||||
not_enabled_error: 'Two-factor authentication is not enabled for your account. Run /2fa add'
|
||||
removed_success: 'Successfully removed two-factor auth from your account'
|
||||
invalid_code: 'Invalid code!'
|
||||
# 3rd party features: GUI Captcha
|
||||
gui_captcha:
|
||||
captcha_window_name: '%random Verification'
|
||||
captcha_clickable_name: '%random I am human'
|
||||
message_on_retry: '&cVerification failed, you have %times retries left'
|
||||
bedrock_auto_verify_success: '&aBedrock verification success!'
|
||||
denied_message_sending: '&cPlease be verified before chatting!'
|
||||
kick_on_timeout: '&cVerification timed out!'
|
||||
kick_on_failed: '&cPlease complete the verification!'
|
||||
success: '&aVerification success!'
|
||||
# 3rd party features: Bedrock Auto Login
|
||||
bedrock_auto_login:
|
||||
success: '&aBedrock auto login success!'
|
||||
# 3rd party features: Login Location Fix
|
||||
login_location_fix:
|
||||
fix_portal: '&aYou are stuck in portal during Login.'
|
||||
fix_underground: '&aYou are stuck underground during Login.'
|
||||
cannot_fix_underground: '&aYou are stuck underground during Login, but we cant fix it.'
|
||||
# 3rd party features: Double Login Fix
|
||||
double_login_fix:
|
||||
fix_message: '&cYou have been disconnected due to doubled login.'
|
||||
127
live-server/plugins/AuthMe/new_email.html
Normal file
127
live-server/plugins/AuthMe/new_email.html
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
<div class="mail">
|
||||
<style>
|
||||
.mail td{
|
||||
font-family: "Segoe UI", sans-serif;
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
color: #718096;
|
||||
}
|
||||
.mail th, div, p, a, h1, h2, h3, h4, h5, h6{
|
||||
font-family: "Segoe UI", sans-serif;
|
||||
text-align: center;
|
||||
color: #3d4852;
|
||||
}
|
||||
.mail .mail-content {
|
||||
max-width: 100vw;
|
||||
padding: 32px;
|
||||
box-shadow: 0 15px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
.mail div{
|
||||
background-color: #ffffff;color: #718096;height: 100%;line-height: 1.4;width: 100%;
|
||||
}
|
||||
.mail .x_wrapper{
|
||||
background-color: #edf2f7;
|
||||
width:100%;
|
||||
}
|
||||
.mail .x_content{
|
||||
width: 100%;
|
||||
}
|
||||
.mail .x_inner-body{
|
||||
background-color: #ffffff;border-color: #e8e5ef;border-radius: 2px;border-width: 1px;margin: 0 auto;padding:0;width: 570px;
|
||||
}
|
||||
.mail .x_content-cell{
|
||||
margin: 0 auto;padding: 0;width: 570px;line-height: 1.5em;
|
||||
color: #b0adc5;font-size: 12px;
|
||||
}
|
||||
.mail .x_content-cell td{
|
||||
max-width: 100vw;padding: 32px;
|
||||
}
|
||||
</style>
|
||||
<div>
|
||||
<table class="x_wrapper">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<table class="x_content">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="padding: 25px 0;">
|
||||
<h1 style="font-size: 20px;">账户激活邮件</h1>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table class="x_inner-body">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="mail-content">
|
||||
<h1 style="font-size: 18px;margin-bottom: 25px;">Minecraft · <servername /><br/><playername /></h1>
|
||||
<hr>
|
||||
<table style="width: 100%;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
您的账户初始密码为
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="font-weight: bold;">
|
||||
<br/><generatedpass /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<br/>已将地址(<playerip />)进行记录.
|
||||
<br/>
|
||||
<br/>请妥善保存,在新地址上进行登录时,需提供该密码.
|
||||
<br/>若非必要,请勿更换密码,否则将对您的账户安全构成威胁.
|
||||
<br/>账户所绑定的邮箱地址已被永久存储,需要更换请联系管理员.
|
||||
<br/>
|
||||
<br/>更换密码: /changepassword <generatedpass /> [新密码]
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align:right;">
|
||||
<br/>
|
||||
<br/>账户将在激活后生效
|
||||
<br/>欢迎您的加入~!
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<small>
|
||||
<br/><time />
|
||||
<br/>请勿回复
|
||||
</small>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table class="x_content-cell">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<p style="color:#b0adc5;">© 2024 HomoCraft. All rights reserved.</p>
|
||||
<a href="1919810.com" target="_blank"
|
||||
style="text-decoration: none; font-size: 16px">wdsj.in</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
9
live-server/plugins/AuthMe/recovery_code_email.html
Normal file
9
live-server/plugins/AuthMe/recovery_code_email.html
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<h1>Dear <playername />,</h1>
|
||||
|
||||
<p>
|
||||
You have requested to reset your password on <servername />. To reset it,
|
||||
please use the recovery code <recoverycode />: /email code <recoverycode />.
|
||||
</p>
|
||||
<p>
|
||||
The code expires in <hoursvalid /> hours.
|
||||
</p>
|
||||
118
live-server/plugins/AuthMe/shutdown.html
Normal file
118
live-server/plugins/AuthMe/shutdown.html
Normal file
|
|
@ -0,0 +1,118 @@
|
|||
<div class="mail">
|
||||
<style>
|
||||
.mail td{
|
||||
font-family: "Segoe UI", sans-serif;
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
color: #718096;
|
||||
}
|
||||
.mail th, div, p, a, h1, h2, h3, h4, h5, h6{
|
||||
font-family: "Segoe UI", sans-serif;
|
||||
text-align: center;
|
||||
color: #3d4852;
|
||||
}
|
||||
.mail .mail-content {
|
||||
max-width: 100vw;
|
||||
padding: 32px;
|
||||
box-shadow: 0 15px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
.mail div{
|
||||
background-color: #ffffff;color: #718096;height: 100%;line-height: 1.4;width: 100%;
|
||||
}
|
||||
.mail .x_wrapper{
|
||||
background-color: #edf2f7;
|
||||
width:100%;
|
||||
}
|
||||
.mail .x_content{
|
||||
width: 100%;
|
||||
}
|
||||
.mail .x_inner-body{
|
||||
background-color: #ffffff;border-color: #e8e5ef;border-radius: 2px;border-width: 1px;margin: 0 auto;padding:0;width: 570px;
|
||||
}
|
||||
.mail .x_content-cell{
|
||||
margin: 0 auto;padding: 0;width: 570px;line-height: 1.5em;
|
||||
color: #b0adc5;font-size: 12px;
|
||||
}
|
||||
.mail .x_content-cell td{
|
||||
max-width: 100vw;padding: 32px;
|
||||
}
|
||||
</style>
|
||||
<div>
|
||||
<table class="x_wrapper">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<table class="x_content">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="padding: 25px 0;">
|
||||
<h1 style="font-size: 20px;">服务器关闭通知</h1>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table class="x_inner-body">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="mail-content">
|
||||
<h1 style="font-size: 18px;margin-bottom: 25px;">Minecraft · <servername /></h1>
|
||||
<hr>
|
||||
<table style="width: 100%;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="font-weight: bold;color: #da1515;">
|
||||
<br/>紧急通知</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<br/>服务器当前已被关闭
|
||||
<br/>
|
||||
<br/>请及时检查服务器运行状态.
|
||||
<br/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align:right;">
|
||||
<br/>
|
||||
<br/>IrisCraft Team
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<small>
|
||||
<br/><time />
|
||||
<br/>请勿回复
|
||||
</small>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table class="x_content-cell">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<p style="color:#b0adc5;">© 2024 HomoCraft. All rights reserved.</p>
|
||||
<a href="1919810.com" target="_blank"
|
||||
style="text-decoration: none; font-size: 16px">wdsj.in</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
14
live-server/plugins/AuthMe/spawn.yml
Executable file
14
live-server/plugins/AuthMe/spawn.yml
Executable file
|
|
@ -0,0 +1,14 @@
|
|||
spawn:
|
||||
world: auth_limbo
|
||||
x: 0.5
|
||||
y: 128.0
|
||||
z: 0.5
|
||||
yaw: 0.0
|
||||
pitch: 0.0
|
||||
firstspawn:
|
||||
world: auth_limbo
|
||||
x: 0.5
|
||||
y: 128.0
|
||||
z: 0.5
|
||||
yaw: 0.0
|
||||
pitch: 0.0
|
||||
20
live-server/plugins/AuthMe/verification_code_email.html
Normal file
20
live-server/plugins/AuthMe/verification_code_email.html
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<h1>
|
||||
Dear <playername />,
|
||||
</h1>
|
||||
|
||||
<p>
|
||||
This is your temporary verification code for the server <servername />:
|
||||
</p>
|
||||
<p>
|
||||
<generatedcode />
|
||||
</p>
|
||||
|
||||
<p>
|
||||
This code will be valid for the next <minutesvalid /> mins!<br />
|
||||
Use the command
|
||||
/verification <generatedcode />
|
||||
to complete the verification process.
|
||||
</p>
|
||||
<p>
|
||||
See you on <servername />!
|
||||
</p>
|
||||
3
live-server/plugins/AuthMe/welcome.txt
Normal file
3
live-server/plugins/AuthMe/welcome.txt
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
Welcome {PLAYER} on {SERVER} server
|
||||
|
||||
This server uses AuthMeReloaded protection!
|
||||
11
live-server/plugins/ComfyWhitelist/config.yml
Executable file
11
live-server/plugins/ComfyWhitelist/config.yml
Executable file
|
|
@ -0,0 +1,11 @@
|
|||
# Enabling or disabling ComfyWhitelist. (true / false)
|
||||
enabled: false
|
||||
|
||||
# Plugin's interface locales.
|
||||
# (en, ru, uk, be, de, es, fr, it, ja, ko, nl, pt, sv, tr, zh, komi, lolcat).
|
||||
locale: en
|
||||
|
||||
# Enabling or disabling clear command. (true / false)
|
||||
# HIGH RISK COMMAND - DATA FROM THE WHITELIST WILL NOT BE RETURNED!!!
|
||||
# enable this command ONLY if you really need it and trust your administrators
|
||||
clear-command: false
|
||||
24
live-server/plugins/ComfyWhitelist/locales/messages_be.yml
Executable file
24
live-server/plugins/ComfyWhitelist/locales/messages_be.yml
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
# Агульныя паведамленні
|
||||
no-permission: "<comfy><warning>У вас няма дазволу карыстацца гэтай камандай.</warning>"
|
||||
inactive-command: "<comfy>Гэтая каманда <off>адключана</off> праз канфігурацыю."
|
||||
invalid-usage: "<comfy><warning>Няправільнае выкарыстанне каманды.</warning>\nВыкарыстоўвайце: <usage>"
|
||||
unknown-subcommand: "<comfy><warning>Невядомая падкаманда.</warning> Напішыце /comfywl help для атрымання спісу каманд."
|
||||
invalid-player-name: "<comfy><warning>Няправільнае імя гульца.</warning>"
|
||||
plugin-reloaded: "<comfy>ComfyWhitelist <success>паспяхова перазагружана.</success>"
|
||||
|
||||
# Паведамленні пра статус белага спісу
|
||||
whitelist-enabled: "<comfy>ComfyWhitelist <success>уключана.</success>"
|
||||
whitelist-disabled: "<comfy>ComfyWhitelist <off>адключана.</off>"
|
||||
whitelist-already-enabled: "<comfy>ComfyWhitelist <success>ужо уключана.</success>"
|
||||
whitelist-already-disabled: "<comfy>ComfyWhitelist <off>ужо адключана.</off>"
|
||||
|
||||
# Паведамленні пра кіраванне гульцамі
|
||||
not-whitelisted: "<warning>Вы не ў белым спісе.</warning>"
|
||||
player-added: "<comfy>Гулец <success><name></success> <success>дададзены</success> да белага спісу."
|
||||
player-removed: "<comfy>Гулец <remove><name></remove> <remove>выдалены</remove> з белага спісу."
|
||||
non-existent-player-name: "<comfy>У белым спісе <warning>немае</warning> гульца з імем <warning><name></warning>."
|
||||
|
||||
# Паведамленні пра адлюстраванне белага спісу
|
||||
whitelisted-players-list: "<comfy>Гульцы ў белым спісе: <success><players></success>"
|
||||
empty-whitelisted-players-list: "<comfy>Белы спіс <off>пусты.</off>"
|
||||
whitelist-cleared: "<comfy>Усе гульцы <remove>выдаленыя</remove> з белага спісу."
|
||||
24
live-server/plugins/ComfyWhitelist/locales/messages_de.yml
Executable file
24
live-server/plugins/ComfyWhitelist/locales/messages_de.yml
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
# Allgemeine Nachrichten
|
||||
no-permission: "<comfy><warning>Du hast keine Berechtigung, diesen Befehl zu verwenden.</warning>"
|
||||
inactive-command: "<comfy>Dieser Befehl ist <off>deaktiviert</off> via Konfiguration."
|
||||
invalid-usage: "<comfy><warning>Ungültige Befehlsverwendung.</warning>\nVerwende: <usage>"
|
||||
unknown-subcommand: "<comfy><warning>Unbekanntes Unterbefehl.</warning> Gib /comfywl help für eine Liste der Befehle ein."
|
||||
invalid-player-name: "<comfy><warning>Ungültiger Spielername.</warning>"
|
||||
plugin-reloaded: "<comfy>ComfyWhitelist <success>wurde erfolgreich neu geladen.</success>"
|
||||
|
||||
# Whitelist Statusnachrichten
|
||||
whitelist-enabled: "<comfy>ComfyWhitelist <success>aktiviert.</success>"
|
||||
whitelist-disabled: "<comfy>ComfyWhitelist <off>deaktiviert.</off>"
|
||||
whitelist-already-enabled: "<comfy>ComfyWhitelist <success>bereits aktiviert.</success>"
|
||||
whitelist-already-disabled: "<comfy>ComfyWhitelist <off>bereits deaktiviert.</off>"
|
||||
|
||||
# Spielermanagement-Nachrichten
|
||||
not-whitelisted: "<warning>Du bist nicht auf der Whitelist.</warning>"
|
||||
player-added: "<comfy>Spieler <success><name></success> wurde <success>hinzugefügt</success> zur Whitelist."
|
||||
player-removed: "<comfy>Spieler <remove><name></remove> wurde <remove>entfernt</remove> von der Whitelist."
|
||||
non-existent-player-name: "<comfy>Es gibt <warning>keinen</warning> Spieler namens <warning><name></warning> in der Whitelist."
|
||||
|
||||
# Whitelist Anzeige Nachrichten
|
||||
whitelisted-players-list: "<comfy>Spieler auf der Whitelist: <success><players></success>"
|
||||
empty-whitelisted-players-list: "<comfy>Whitelist ist <off>leer.</off>"
|
||||
whitelist-cleared: "<comfy>Alle Spieler wurden <remove>entfernt</remove> von der Whitelist."
|
||||
24
live-server/plugins/ComfyWhitelist/locales/messages_en.yml
Executable file
24
live-server/plugins/ComfyWhitelist/locales/messages_en.yml
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
# General messages
|
||||
no-permission: "<comfy><warning>You do not have permission to use this command.</warning>"
|
||||
inactive-command: "<comfy>This command is <off>disabled</off> via config."
|
||||
invalid-usage: "<comfy><warning>Invalid command usage.</warning>\nUse: <usage>"
|
||||
unknown-subcommand: "<comfy><warning>Unknown subcommand.</warning> Type /comfywl help for a list of commands."
|
||||
invalid-player-name: "<comfy><warning>Invalid player name.</warning>"
|
||||
plugin-reloaded: "<comfy>ComfyWhitelist <success>has been successfully reloaded.</success>"
|
||||
|
||||
# Whitelist status messages
|
||||
whitelist-enabled: "<comfy>ComfyWhitelist <success>enabled.</success>"
|
||||
whitelist-disabled: "<comfy>ComfyWhitelist <off>disabled.</off>"
|
||||
whitelist-already-enabled: "<comfy>ComfyWhitelist <success>already enabled.</success>"
|
||||
whitelist-already-disabled: "<comfy>ComfyWhitelist <off>already disabled.</off>"
|
||||
|
||||
# Player management messages
|
||||
not-whitelisted: "<warning>You are not whitelisted.</warning>"
|
||||
player-added: "<comfy>Player <success><name></success> has been <success>added</success> to the whitelist."
|
||||
player-removed: "<comfy>Player <remove><name></remove> has been <remove>removed</remove> from the whitelist."
|
||||
non-existent-player-name: "<comfy>There is <warning>no</warning> player named <warning><name></warning> in the whitelist."
|
||||
|
||||
# Whitelist display messages
|
||||
whitelisted-players-list: "<comfy>Whitelisted players: <success><players></success>"
|
||||
empty-whitelisted-players-list: "<comfy>Whitelist is <off>empty.</off>"
|
||||
whitelist-cleared: "<comfy>All players have been <remove>removed</remove> from the whitelist."
|
||||
24
live-server/plugins/ComfyWhitelist/locales/messages_es.yml
Executable file
24
live-server/plugins/ComfyWhitelist/locales/messages_es.yml
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
# Mensajes generales
|
||||
no-permission: "<comfy><warning>No tienes permiso para usar este comando.</warning>"
|
||||
inactive-command: "<comfy>Este comando está <off>deshabilitado</off> via config."
|
||||
invalid-usage: "<comfy><warning>Uso del comando inválido.</warning>\nUsa: <usage>"
|
||||
unknown-subcommand: "<comfy><warning>Subcomando desconocido.</warning> Escribe /comfywl help para una lista de comandos."
|
||||
invalid-player-name: "<comfy><warning>Nombre de jugador inválido.</warning>"
|
||||
plugin-reloaded: "<comfy>ComfyWhitelist <success>se ha recargado con éxito.</success>"
|
||||
|
||||
# Mensajes de estado de la lista blanca
|
||||
whitelist-enabled: "<comfy>ComfyWhitelist <success>activada.</success>"
|
||||
whitelist-disabled: "<comfy>ComfyWhitelist <off>deshabilitada.</off>"
|
||||
whitelist-already-enabled: "<comfy>ComfyWhitelist <success>ya está activada.</success>"
|
||||
whitelist-already-disabled: "<comfy>ComfyWhitelist <off>ya está deshabilitada.</off>"
|
||||
|
||||
# Mensajes de gestión de jugadores
|
||||
not-whitelisted: "<warning>No estás en la lista blanca.</warning>"
|
||||
player-added: "<comfy>Jugador <success><name></success> ha sido <success>agregado</success> a la lista blanca."
|
||||
player-removed: "<comfy>Jugador <remove><name></remove> ha sido <remove>eliminado</remove> de la lista blanca."
|
||||
non-existent-player-name: "<comfy>No hay ningún jugador llamado <warning><name></warning> en la lista blanca."
|
||||
|
||||
# Mensajes de visualización de la lista blanca
|
||||
whitelisted-players-list: "<comfy>Jugadores en la lista blanca: <success><players></success>"
|
||||
empty-whitelisted-players-list: "<comfy>La lista blanca está <off>vacía.</off>"
|
||||
whitelist-cleared: "<comfy>Todos los jugadores han sido <remove>eliminados</remove> de la lista blanca."
|
||||
24
live-server/plugins/ComfyWhitelist/locales/messages_fr.yml
Executable file
24
live-server/plugins/ComfyWhitelist/locales/messages_fr.yml
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
# Messages généraux
|
||||
no-permission: "<comfy><warning>Vous n'avez pas la permission d'utiliser cette commande.</warning>"
|
||||
inactive-command: "<comfy>Cette commande est <off>désactivée</off> via la configuration."
|
||||
invalid-usage: "<comfy><warning>Utilisation de la commande invalide.</warning>\nUtilisez : <usage>"
|
||||
unknown-subcommand: "<comfy><warning>Sous-commande inconnue.</warning> Tapez /comfywl help pour une liste de commandes."
|
||||
invalid-player-name: "<comfy><warning>Nom de joueur invalide.</warning>"
|
||||
plugin-reloaded: "<comfy>ComfyWhitelist <success>a été rechargé avec succès.</success>"
|
||||
|
||||
# Messages de statut de la liste blanche
|
||||
whitelist-enabled: "<comfy>ComfyWhitelist <success>activé.</success>"
|
||||
whitelist-disabled: "<comfy>ComfyWhitelist <off>désactivé.</off>"
|
||||
whitelist-already-enabled: "<comfy>ComfyWhitelist <success>déjà activé.</success>"
|
||||
whitelist-already-disabled: "<comfy>ComfyWhitelist <off>déjà désactivé.</off>"
|
||||
|
||||
# Messages de gestion des joueurs
|
||||
not-whitelisted: "<warning>Vous n'êtes pas sur la liste blanche.</warning>"
|
||||
player-added: "<comfy>Joueur <success><name></success> a été <success>ajouté</success> à la liste blanche."
|
||||
player-removed: "<comfy>Joueur <remove><name></remove> a été <remove>supprimé</remove> de la liste blanche."
|
||||
non-existent-player-name: "<comfy>Il n'y a <warning>pas</warning> de joueur nommé <warning><name></warning> dans la liste blanche."
|
||||
|
||||
# Messages d'affichage de la liste blanche
|
||||
whitelisted-players-list: "<comfy>Joueurs sur liste blanche : <success><players></success>"
|
||||
empty-whitelisted-players-list: "<comfy>La liste blanche est <off>vide.</off>"
|
||||
whitelist-cleared: "<comfy>Tous les joueurs ont été <remove>supprimés</remove> de la liste blanche."
|
||||
24
live-server/plugins/ComfyWhitelist/locales/messages_it.yml
Executable file
24
live-server/plugins/ComfyWhitelist/locales/messages_it.yml
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
# Messaggi generali
|
||||
no-permission: "<comfy><warning>Non hai il permesso di usare questo comando.</warning>"
|
||||
inactive-command: "<comfy>Questo comando è <off>disabilitato</off> tramite config."
|
||||
invalid-usage: "<comfy><warning>Utilizzo del comando non valido.</warning>\nUsa: <usage>"
|
||||
unknown-subcommand: "<comfy><warning>Sottocomando sconosciuto.</warning> Digita /comfywl help per un elenco di comandi."
|
||||
invalid-player-name: "<comfy><warning>Nome giocatore non valido.</warning>"
|
||||
plugin-reloaded: "<comfy>ComfyWhitelist <success>è stato ricaricato con successo.</success>"
|
||||
|
||||
# Messaggi di stato della whitelist
|
||||
whitelist-enabled: "<comfy>ComfyWhitelist <success>abilitato.</success>"
|
||||
whitelist-disabled: "<comfy>ComfyWhitelist <off>disabilitato.</off>"
|
||||
whitelist-already-enabled: "<comfy>ComfyWhitelist <success>già abilitato.</success>"
|
||||
whitelist-already-disabled: "<comfy>ComfyWhitelist <off>già disabilitato.</off>"
|
||||
|
||||
# Messaggi di gestione dei giocatori
|
||||
not-whitelisted: "<warning>Non sei sulla whitelist.</warning>"
|
||||
player-added: "<comfy>Giocatore <success><name></success> è stato <success>aggiunto</success> alla whitelist."
|
||||
player-removed: "<comfy>Giocatore <remove><name></remove> è stato <remove>rimosso</remove> dalla whitelist."
|
||||
non-existent-player-name: "<comfy>Non c'è <warning>nessun</warning> giocatore chiamato <warning><name></warning> nella whitelist."
|
||||
|
||||
# Messaggi di visualizzazione della whitelist
|
||||
whitelisted-players-list: "<comfy>Giocatori in whitelist: <success><players></success>"
|
||||
empty-whitelisted-players-list: "<comfy>La whitelist è <off>vuota.</off>"
|
||||
whitelist-cleared: "<comfy>Tutti i giocatori sono stati <remove>rimossi</remove> dalla whitelist."
|
||||
24
live-server/plugins/ComfyWhitelist/locales/messages_ja.yml
Executable file
24
live-server/plugins/ComfyWhitelist/locales/messages_ja.yml
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
# 一般的なメッセージ
|
||||
no-permission: "<comfy><warning>このコマンドを使用する権限がありません。</warning>"
|
||||
inactive-command: "<comfy>このコマンドは設定で<off>無効化</off>されています。"
|
||||
invalid-usage: "<comfy><warning>コマンドの使用が無効です。</warning>\n使い方: <usage>"
|
||||
unknown-subcommand: "<comfy><warning>未知のサブコマンド。</warning> コマンドリストを表示するには /comfywl help を入力します。"
|
||||
invalid-player-name: "<comfy><warning>プレイヤー名が無効です。</warning>"
|
||||
plugin-reloaded: "<comfy>ComfyWhitelist が<success>成功裏にリロードされました。</success>"
|
||||
|
||||
# ホワイトリストステータスメッセージ
|
||||
whitelist-enabled: "<comfy>ComfyWhitelist が<success>有効になりました。</success>"
|
||||
whitelist-disabled: "<comfy>ComfyWhitelist が<off>無効化</off>されました。"
|
||||
whitelist-already-enabled: "<comfy>ComfyWhitelist は既に<success>有効化</success>されています。"
|
||||
whitelist-already-disabled: "<comfy>ComfyWhitelist は既に<off>無効化</off>されています。"
|
||||
|
||||
# プレイヤー管理メッセージ
|
||||
not-whitelisted: "<warning>あなたはホワイトリストに登録されていません。</warning>"
|
||||
player-added: "<comfy>プレイヤー <success><name></success> がホワイトリストに<success>追加</success>されました。"
|
||||
player-removed: "<comfy>プレイヤー <remove><name></remove> がホワイトリストから<remove>削除</remove>されました。"
|
||||
non-existent-player-name: "<comfy>ホワイトリストには <warning><name></warning> という名前のプレイヤーは<warning>存在しません</warning>。"
|
||||
|
||||
# ホワイトリスト表示メッセージ
|
||||
whitelisted-players-list: "<comfy>ホワイトリストのプレイヤー: <success><players></success>"
|
||||
empty-whitelisted-players-list: "<comfy>ホワイトリストは<off>空</off>です。"
|
||||
whitelist-cleared: "<comfy>全プレイヤーがホワイトリストから<remove>削除</remove>されました。"
|
||||
24
live-server/plugins/ComfyWhitelist/locales/messages_ko.yml
Executable file
24
live-server/plugins/ComfyWhitelist/locales/messages_ko.yml
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
# 일반 메시지
|
||||
no-permission: "<comfy><warning>이 명령어를 사용할 권한이 없습니다.</warning>"
|
||||
inactive-command: "<comfy>이 명령어는 설정을 통해 <off>비활성화</off>되었습니다."
|
||||
invalid-usage: "<comfy><warning>잘못된 명령어 사용입니다.</warning>\n사용법: <usage>"
|
||||
unknown-subcommand: "<comfy><warning>알 수 없는 하위 명령어입니다.</warning> 명령어 목록을 보려면 /comfywl help를 입력하세요."
|
||||
invalid-player-name: "<comfy><warning>잘못된 플레이어 이름입니다.</warning>"
|
||||
plugin-reloaded: "<comfy>ComfyWhitelist가 <success>성공적으로 리로드되었습니다.</success>"
|
||||
|
||||
# 화이트리스트 상태 메시지
|
||||
whitelist-enabled: "<comfy>ComfyWhitelist가 <success>활성화되었습니다.</success>"
|
||||
whitelist-disabled: "<comfy>ComfyWhitelist가 <off>비활성화</off>되었습니다."
|
||||
whitelist-already-enabled: "<comfy>ComfyWhitelist는 이미 <success>활성화</success>된 상태입니다."
|
||||
whitelist-already-disabled: "<comfy>ComfyWhitelist는 이미 <off>비활성화</off>된 상태입니다."
|
||||
|
||||
# 플레이어 관리 메시지
|
||||
not-whitelisted: "<warning>화이트리스트에 없습니다.</warning>"
|
||||
player-added: "<comfy>플레이어 <success><name></success>가 화이트리스트에 <success>추가</success>되었습니다."
|
||||
player-removed: "<comfy>플레이어 <remove><name></remove>가 화이트리스트에서 <remove>제거</remove>되었습니다."
|
||||
non-existent-player-name: "<comfy>화이트리스트에 <warning><name></warning>라는 이름의 플레이어는 <warning>존재하지 않습니다</warning>."
|
||||
|
||||
# 화이트리스트 표시 메시지
|
||||
whitelisted-players-list: "<comfy>화이트리스트의 플레이어들: <success><players></success>"
|
||||
empty-whitelisted-players-list: "<comfy>화이트리스트가 <off>비어있습니다</off>."
|
||||
whitelist-cleared: "<comfy>모든 플레이어가 화이트리스트에서 <remove>제거</remove>되었습니다."
|
||||
24
live-server/plugins/ComfyWhitelist/locales/messages_komi.yml
Executable file
24
live-server/plugins/ComfyWhitelist/locales/messages_komi.yml
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
# Обычные сообщения
|
||||
no-permission: "<comfy><warning>Тый сез командаыт корыстны и пырыш адӧмас.</warning>"
|
||||
inactive-command: "<comfy>Та команда <off>кытсӧмсь</off> ана конфигурация вара."
|
||||
invalid-usage: "<comfy><warning>Нырысь команда корыс.</warning>\nКорысӧм: <usage>"
|
||||
unknown-subcommand: "<comfy><warning>Нырысь пӧдкоманда.</warning> Командаысь списк вара /comfywl помощь тыны керет."
|
||||
invalid-player-name: "<comfy><warning>Нырысь игрокын ним.</warning>"
|
||||
plugin-reloaded: "<comfy>ComfyWhitelist <success>успешно перезагруженысь.</success>"
|
||||
|
||||
# Сообщения статуса белого списка
|
||||
whitelist-enabled: "<comfy>ComfyWhitelist <success>включенысь.</success>"
|
||||
whitelist-disabled: "<comfy>ComfyWhitelist <off>выключенысь.</off>"
|
||||
whitelist-already-enabled: "<comfy>ComfyWhitelist <success>уже включенысь.</success>"
|
||||
whitelist-already-disabled: "<comfy>ComfyWhitelist <off>уже выключенысь.</off>"
|
||||
|
||||
# Сообщения управления игроками
|
||||
not-whitelisted: "<warning>Тый та белый списокын нет.</warning>"
|
||||
player-added: "<comfy>Игрок <success><name></success> белый списокын <success>добавленысь</success>."
|
||||
player-removed: "<comfy>Игрок <remove><name></remove> белый списокыннун <remove>удаленысь</remove>."
|
||||
non-existent-player-name: "<comfy>Белый списокын та <warning><name></warning> нимысь игрок нет."
|
||||
|
||||
# Сообщения отображения белого списка
|
||||
whitelisted-players-list: "<comfy>Белый списокысь игрокыс: <success><players></success>"
|
||||
empty-whitelisted-players-list: "<comfy>Белый список <off>пуст.</off>"
|
||||
whitelist-cleared: "<comfy>Белый списокыннун кышӧдӧй игрокыс <remove>удаленысь</remove>."
|
||||
24
live-server/plugins/ComfyWhitelist/locales/messages_lolcat.yml
Executable file
24
live-server/plugins/ComfyWhitelist/locales/messages_lolcat.yml
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
# GENERAL MESSAGES
|
||||
no-permission: "<comfy><warning>U CANT HAZ PERMISSION 2 USE DIS COMMAND.</warning>"
|
||||
inactive-command: "<comfy>DIS COMMAND IZ <off>OFF</off> VIA CONFIG."
|
||||
invalid-usage: "<comfy><warning>INVALID COMMAND USAGE.</warning>\nUSE: <usage>"
|
||||
unknown-subcommand: "<comfy><warning>UNKNOWN SUBCOMMAND.</warning> TYPE /COMFYWL HELP 4 LIST OF COMMANDS."
|
||||
invalid-player-name: "<comfy><warning>BAD PLAYER NAME.</warning>"
|
||||
plugin-reloaded: "<comfy>ComfyWhitelist <success>IZ BACK.</success>"
|
||||
|
||||
# WHITELIST STATUS MESSAGES
|
||||
whitelist-enabled: "<comfy>ComfyWhitelist <success>ON.</success>"
|
||||
whitelist-disabled: "<comfy>ComfyWhitelist <off>OFF.</off>"
|
||||
whitelist-already-enabled: "<comfy>ComfyWhitelist <success>ALREADY ON.</success>"
|
||||
whitelist-already-disabled: "<comfy>ComfyWhitelist <off>ALREADY OFF.</off>"
|
||||
|
||||
# PLAYER MANAGEMENT MESSAGES
|
||||
not-whitelisted: "<warning>U NOT ON WHITELIST.</warning>"
|
||||
player-added: "<comfy>PLAYER <success><name></success> ADDED 2 <success>WHITELIST</success>."
|
||||
player-removed: "<comfy>PLAYER <remove><name></remove> <remove>REMOVED</remove> FROM WHITELIST."
|
||||
non-existent-player-name: "<comfy>NO PLAYER NAMED <warning><name></warning> ON WHITELIST."
|
||||
|
||||
# WHITELIST DISPLAY MESSAGES
|
||||
whitelisted-players-list: "<comfy>PLAYERS ON WHITELIST: <success><players></success>"
|
||||
empty-whitelisted-players-list: "<comfy>WHITELIST <off>EMPTY</off>."
|
||||
whitelist-cleared: "<comfy>ALL PLAYERS <remove>REMOVED</remove> FROM WHITELIST."
|
||||
24
live-server/plugins/ComfyWhitelist/locales/messages_nl.yml
Executable file
24
live-server/plugins/ComfyWhitelist/locales/messages_nl.yml
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
# Algemene berichten
|
||||
no-permission: "<comfy><warning>Je hebt geen toestemming om dit commando te gebruiken.</warning>"
|
||||
inactive-command: "<comfy>Dit commando is <off>uitgeschakeld</off> via de configuratie."
|
||||
invalid-usage: "<comfy><warning>Ongeldig commandogebruik.</warning>\nGebruik: <usage>"
|
||||
unknown-subcommand: "<comfy><warning>Onbekend subcommando.</warning> Typ /comfywl help voor een lijst met commando's."
|
||||
invalid-player-name: "<comfy><warning>Ongeldige spelersnaam.</warning>"
|
||||
plugin-reloaded: "<comfy>ComfyWhitelist <success>is succesvol herladen.</success>"
|
||||
|
||||
# Whitelist statusberichten
|
||||
whitelist-enabled: "<comfy>ComfyWhitelist <success>ingeschakeld.</success>"
|
||||
whitelist-disabled: "<comfy>ComfyWhitelist <off>uitgeschakeld.</off>"
|
||||
whitelist-already-enabled: "<comfy>ComfyWhitelist <success>al ingeschakeld.</success>"
|
||||
whitelist-already-disabled: "<comfy>ComfyWhitelist <off>al uitgeschakeld.</off>"
|
||||
|
||||
# Spelersbeheer berichten
|
||||
not-whitelisted: "<warning>Je staat niet op de whitelist.</warning>"
|
||||
player-added: "<comfy>Speler <success><name></success> is <success>toegevoegd</success> aan de whitelist."
|
||||
player-removed: "<comfy>Speler <remove><name></remove> is <remove>verwijderd</remove> van de whitelist."
|
||||
non-existent-player-name: "<comfy>Er is <warning>geen</warning> speler met de naam <warning><name></warning> op de whitelist."
|
||||
|
||||
# Whitelist weergave berichten
|
||||
whitelisted-players-list: "<comfy>Whitelist spelers: <success><players></success>"
|
||||
empty-whitelisted-players-list: "<comfy>Whitelist is <off>leeg.</off>"
|
||||
whitelist-cleared: "<comfy>Alle spelers zijn <remove>verwijderd</remove> van de whitelist."
|
||||
24
live-server/plugins/ComfyWhitelist/locales/messages_pt.yml
Executable file
24
live-server/plugins/ComfyWhitelist/locales/messages_pt.yml
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
# Mensagens gerais
|
||||
no-permission: "<comfy><warning>Você não tem permissão para usar este comando.</warning>"
|
||||
inactive-command: "<comfy>Este comando está <off>desativado</off> via configuração."
|
||||
invalid-usage: "<comfy><warning>Uso inválido do comando.</warning>\nUse: <usage>"
|
||||
unknown-subcommand: "<comfy><warning>Subcomando desconhecido.</warning> Digite /comfywl help para uma lista de comandos."
|
||||
invalid-player-name: "<comfy><warning>Nome de jogador inválido.</warning>"
|
||||
plugin-reloaded: "<comfy>ComfyWhitelist <success>foi recarregado com sucesso.</success>"
|
||||
|
||||
# Mensagens de status da lista de permissões
|
||||
whitelist-enabled: "<comfy>ComfyWhitelist <success>ativado.</success>"
|
||||
whitelist-disabled: "<comfy>ComfyWhitelist <off>desativado.</off>"
|
||||
whitelist-already-enabled: "<comfy>ComfyWhitelist <success>já ativado.</success>"
|
||||
whitelist-already-disabled: "<comfy>ComfyWhitelist <off>já desativado.</off>"
|
||||
|
||||
# Mensagens de gerenciamento de jogadores
|
||||
not-whitelisted: "<warning>Você não está na lista de permissões.</warning>"
|
||||
player-added: "<comfy>Jogador <success><name></success> foi <success>adicionado</success> à lista de permissões."
|
||||
player-removed: "<comfy>Jogador <remove><name></remove> foi <remove>removido</remove> da lista de permissões."
|
||||
non-existent-player-name: "<comfy>Não existe <warning>nenhum</warning> jogador chamado <warning><name></warning> na lista de permissões."
|
||||
|
||||
# Mensagens de exibição da lista de permissões
|
||||
whitelisted-players-list: "<comfy>Jogadores na lista de permissões: <success><players></success>"
|
||||
empty-whitelisted-players-list: "<comfy>A lista de permissões está <off>vazia.</off>"
|
||||
whitelist-cleared: "<comfy>Todos os jogadores foram <remove>removidos</remove> da lista de permissões."
|
||||
24
live-server/plugins/ComfyWhitelist/locales/messages_ru.yml
Executable file
24
live-server/plugins/ComfyWhitelist/locales/messages_ru.yml
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
# Общие сообщения
|
||||
no-permission: "<comfy><warning>У вас недостаточно полномочий для использования этой команды.</warning>"
|
||||
inactive-command: "<comfy>Данная команда <off>выключена</off> через конфиг."
|
||||
invalid-usage: "<comfy><warning>Недопустимое использование команды.</warning>\nИспользуйте: <usage>"
|
||||
unknown-subcommand: "<comfy><warning>Неизвестная подкоманда.</warning> Введите /comfywl help для отображения доступных подкоманд."
|
||||
invalid-player-name: "<comfy><warning>Некорректный формат имени игрока.</warning>"
|
||||
plugin-reloaded: "<comfy>ComfyWhitelist <success>успешно перезагружен.</success>"
|
||||
|
||||
# Сообщения о статусе вайтлиста
|
||||
whitelist-enabled: "<comfy>ComfyWhitelist <success>включен.</success>"
|
||||
whitelist-disabled: "<comfy>ComfyWhitelist <off>выключен.</off>"
|
||||
whitelist-already-enabled: "<comfy>ComfyWhitelist <success>уже включен.</success>"
|
||||
whitelist-already-disabled: "<comfy>ComfyWhitelist <off>уже выключен.</off>"
|
||||
|
||||
# Сообщения об управлении игроками
|
||||
not-whitelisted: "<warning>Вы не в вайтлисте.</warning>"
|
||||
player-added: "<comfy>Игрок <success><name></success> <success>добавлен</success> в вайтлист."
|
||||
player-removed: "<comfy>Игрок <remove><name></remove> <remove>удален</remove> из вайтлиста."
|
||||
non-existent-player-name: "<comfy>Игрока с именем <warning><name></warning> <warning>нет</warning> в вайтлисте."
|
||||
|
||||
# Сообщения о отображении вайтлиста
|
||||
whitelisted-players-list: "<comfy>Игроки в вайтлисте: <success><players></success>"
|
||||
empty-whitelisted-players-list: "<comfy>В вайтлисте <off>нет игроков.</off>"
|
||||
whitelist-cleared: "<comfy>Все игроки <remove>удалены</remove> из вайтлиста."
|
||||
24
live-server/plugins/ComfyWhitelist/locales/messages_sv.yml
Executable file
24
live-server/plugins/ComfyWhitelist/locales/messages_sv.yml
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
# Generella meddelanden
|
||||
no-permission: "<comfy><warning>Du har inte tillåtelse att använda detta kommando.</warning>"
|
||||
inactive-command: "<comfy>Det här kommandot är <off>inaktiverat</off> via konfigurationen."
|
||||
invalid-usage: "<comfy><warning>Ogiltig kommandoanvändning.</warning>\nAnvänd: <usage>"
|
||||
unknown-subcommand: "<comfy><warning>Okänt underkommando.</warning> Skriv /comfywl help för en lista över kommandon."
|
||||
invalid-player-name: "<comfy><warning>Ogiltigt spelarnamn.</warning>"
|
||||
plugin-reloaded: "<comfy>ComfyWhitelist <success>har laddats om framgångsrikt.</success>"
|
||||
|
||||
# Whitelist statusmeddelanden
|
||||
whitelist-enabled: "<comfy>ComfyWhitelist <success>aktiverad.</success>"
|
||||
whitelist-disabled: "<comfy>ComfyWhitelist <off>inaktiverad.</off>"
|
||||
whitelist-already-enabled: "<comfy>ComfyWhitelist <success>är redan aktiverad.</success>"
|
||||
whitelist-already-disabled: "<comfy>ComfyWhitelist <off>är redan inaktiverad.</off>"
|
||||
|
||||
# Spelarhanteringsmeddelanden
|
||||
not-whitelisted: "<warning>Du finns inte i whitelist.</warning>"
|
||||
player-added: "<comfy>Spelaren <success><name></success> har <success>lagts till</success> i whitelist."
|
||||
player-removed: "<comfy>Spelaren <remove><name></remove> har <remove>tagits bort</remove> från whitelist."
|
||||
non-existent-player-name: "<comfy>Det finns <warning>ingen</warning> spelare med namnet <warning><name></warning> i whitelist."
|
||||
|
||||
# Whitelist visningsmeddelanden
|
||||
whitelisted-players-list: "<comfy>Spelare i whitelist: <success><players></success>"
|
||||
empty-whitelisted-players-list: "<comfy>Whitelist är <off>tom.</off>"
|
||||
whitelist-cleared: "<comfy>Alla spelare har <remove>tagits bort</remove> från whitelist."
|
||||
24
live-server/plugins/ComfyWhitelist/locales/messages_tr.yml
Executable file
24
live-server/plugins/ComfyWhitelist/locales/messages_tr.yml
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
# Genel mesajlar
|
||||
no-permission: "<comfy><warning>Bu komutu kullanma yetkiniz yok.</warning>"
|
||||
inactive-command: "<comfy>Bu komut, yapılandırma üzerinden <off>devre dışı</off>."
|
||||
invalid-usage: "<comfy><warning>Geçersiz komut kullanımı.</warning>\nKullan: <usage>"
|
||||
unknown-subcommand: "<comfy><warning>Bilinmeyen alt komut.</warning> Komut listesi için /comfywl help yazın."
|
||||
invalid-player-name: "<comfy><warning>Geçersiz oyuncu adı.</warning>"
|
||||
plugin-reloaded: "<comfy>ComfyWhitelist <success>başarıyla yeniden yüklendi.</success>"
|
||||
|
||||
# Beyaz liste durum mesajları
|
||||
whitelist-enabled: "<comfy>ComfyWhitelist <success>etkinleştirildi.</success>"
|
||||
whitelist-disabled: "<comfy>ComfyWhitelist <off>devre dışı bırakıldı.</off>"
|
||||
whitelist-already-enabled: "<comfy>ComfyWhitelist <success>zaten etkin.</success>"
|
||||
whitelist-already-disabled: "<comfy>ComfyWhitelist <off>zaten devre dışı.</off>"
|
||||
|
||||
# Oyuncu yönetimi mesajları
|
||||
not-whitelisted: "<warning>Beyaz listeye eklenmemişsiniz.</warning>"
|
||||
player-added: "<comfy>Oyuncu <success><name></success>, beyaz listeye <success>eklendi</success>."
|
||||
player-removed: "<comfy>Oyuncu <remove><name></remove>, beyaz listeden <remove>çıkarıldı</remove>."
|
||||
non-existent-player-name: "<comfy>Beyaz listede <warning><name></warning> adında bir oyuncu <warning>yok</warning>."
|
||||
|
||||
# Beyaz liste görüntüleme mesajları
|
||||
whitelisted-players-list: "<comfy>Beyaz listeye eklenmiş oyuncular: <success><players></success>"
|
||||
empty-whitelisted-players-list: "<comfy>Beyaz liste <off>boş</off>."
|
||||
whitelist-cleared: "<comfy>Tüm oyuncular beyaz listeden <remove>kaldırıldı</remove>."
|
||||
24
live-server/plugins/ComfyWhitelist/locales/messages_uk.yml
Executable file
24
live-server/plugins/ComfyWhitelist/locales/messages_uk.yml
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
# Загальні повідомлення
|
||||
no-permission: "<comfy><warning>У вас немає дозволу використовувати цю команду.</warning>"
|
||||
inactive-command: "<comfy>Ця команда <off>вимкнена</off> через конфігурацію."
|
||||
invalid-usage: "<comfy><warning>Недійсне використання команди.</warning>\nВикористовуйте: <usage>"
|
||||
unknown-subcommand: "<comfy><warning>Невідома підкоманда.</warning> Введіть /comfywl help для отримання списку команд."
|
||||
invalid-player-name: "<comfy><warning>Недійсне ім'я гравця.</warning>"
|
||||
plugin-reloaded: "<comfy>ComfyWhitelist <success>успішно перезавантажено.</success>"
|
||||
|
||||
# Повідомлення про статус білого списку
|
||||
whitelist-enabled: "<comfy>ComfyWhitelist <success>увімкнено.</success>"
|
||||
whitelist-disabled: "<comfy>ComfyWhitelist <off>вимкнено.</off>"
|
||||
whitelist-already-enabled: "<comfy>ComfyWhitelist <success>уже увімкнено.</success>"
|
||||
whitelist-already-disabled: "<comfy>ComfyWhitelist <off>уже вимкнено.</off>"
|
||||
|
||||
# Повідомлення про управління гравцями
|
||||
not-whitelisted: "<warning>Ви не в білому списку.</warning>"
|
||||
player-added: "<comfy>Гравець <success><name></success> <success>додано</success> до білого списку."
|
||||
player-removed: "<comfy>Гравець <remove><name></remove> <remove>видалено</remove> з білого списку."
|
||||
non-existent-player-name: "<comfy>У білому списку <warning>немає</warning> гравця з ім'ям <warning><name></warning>."
|
||||
|
||||
# Повідомлення про відображення білого списку
|
||||
whitelisted-players-list: "<comfy>Гравці в білому списку: <success><players></success>"
|
||||
empty-whitelisted-players-list: "<comfy>Білий список <off>порожній.</off>"
|
||||
whitelist-cleared: "<comfy>Всі гравці <remove>видалені</remove> з білого списку."
|
||||
24
live-server/plugins/ComfyWhitelist/locales/messages_zh.yml
Executable file
24
live-server/plugins/ComfyWhitelist/locales/messages_zh.yml
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
# 一般消息
|
||||
no-permission: "<comfy><warning>您没有权限使用此命令。</warning>"
|
||||
inactive-command: "<comfy>此命令已通过配置<off>禁用</off>。"
|
||||
invalid-usage: "<comfy><warning>命令使用无效。</warning>\n使用:<usage>"
|
||||
unknown-subcommand: "<comfy><warning>未知的子命令。</warning>键入/comfywl help以获取命令列表。"
|
||||
invalid-player-name: "<comfy><warning>玩家名称无效。</warning>"
|
||||
plugin-reloaded: "<comfy>ComfyWhitelist <success>已成功重新加载。</success>"
|
||||
|
||||
# 白名单状态消息
|
||||
whitelist-enabled: "<comfy>ComfyWhitelist <success>已启用。</success>"
|
||||
whitelist-disabled: "<comfy>ComfyWhitelist <off>已禁用。</off>"
|
||||
whitelist-already-enabled: "<comfy>ComfyWhitelist <success>已经启用。</success>"
|
||||
whitelist-already-disabled: "<comfy>ComfyWhitelist <off>已经禁用。</off>"
|
||||
|
||||
# 玩家管理消息
|
||||
not-whitelisted: "<warning>你不在白名单中。</warning>"
|
||||
player-added: "<comfy>玩家 <success><name></success> 已被<success>添加</success>到白名单中。"
|
||||
player-removed: "<comfy>玩家 <remove><name></remove> 已从白名单中<remove>移除</remove>。"
|
||||
non-existent-player-name: "<comfy>白名单中没有名为 <warning><name></warning> 的玩家。"
|
||||
|
||||
# 白名单显示消息
|
||||
whitelisted-players-list: "<comfy>白名单中的玩家:<success><players></success>"
|
||||
empty-whitelisted-players-list: "<comfy>白名单<off>为空。</off>"
|
||||
whitelist-cleared: "<comfy>所有玩家已从白名单中<remove>移除</remove>。"
|
||||
7
live-server/plugins/ComfyWhitelist/whitelist.yml
Executable file
7
live-server/plugins/ComfyWhitelist/whitelist.yml
Executable file
|
|
@ -0,0 +1,7 @@
|
|||
players:
|
||||
- s8n
|
||||
- BingeEater
|
||||
- YOU500
|
||||
- EnderBoy2882
|
||||
- MochaBun
|
||||
- 64bitpotato
|
||||
0
live-server/plugins/CoreProtect/.license
Executable file
0
live-server/plugins/CoreProtect/.license
Executable file
148
live-server/plugins/CoreProtect/config.yml
Executable file
148
live-server/plugins/CoreProtect/config.yml
Executable file
|
|
@ -0,0 +1,148 @@
|
|||
# CoreProtect Config
|
||||
|
||||
# CoreProtect is donationware. Obtain a donation key from coreprotect.net/donate/
|
||||
donation-key:
|
||||
|
||||
# MySQL is optional and not required.
|
||||
# If you prefer to use MySQL, enable the following and fill out the fields.
|
||||
use-mysql: false
|
||||
table-prefix: co_
|
||||
mysql-host: 127.0.0.1
|
||||
mysql-port: 3306
|
||||
mysql-database: database
|
||||
mysql-username: root
|
||||
mysql-password:
|
||||
|
||||
# If modified, will automatically attempt to translate languages phrases.
|
||||
# List of language codes: https://coreprotect.net/languages/
|
||||
language: en
|
||||
|
||||
# If enabled, CoreProtect will check for updates when your server starts up.
|
||||
# If an update is available, you'll be notified via your server console.
|
||||
check-updates: false
|
||||
|
||||
# If enabled, other plugins will be able to utilize the CoreProtect API.
|
||||
api-enabled: true
|
||||
|
||||
# If enabled, extra data is displayed during rollbacks and restores.
|
||||
# Can be manually triggered by adding "#verbose" to your rollback command.
|
||||
verbose: true
|
||||
|
||||
# If no radius is specified in a rollback or restore, this value will be
|
||||
# used as the radius. Set to "0" to disable automatically adding a radius.
|
||||
default-radius: 10
|
||||
|
||||
# The maximum radius that can be used in a command. Set to "0" to disable.
|
||||
# To run a rollback or restore without a radius, you can use "r:#global".
|
||||
max-radius: 100
|
||||
|
||||
# If enabled, items taken from containers (etc) will be included in rollbacks.
|
||||
rollback-items: true
|
||||
|
||||
# If enabled, entities, such as killed animals, will be included in rollbacks.
|
||||
rollback-entities: true
|
||||
|
||||
# If enabled, generic data, like zombies burning in daylight, won't be logged.
|
||||
skip-generic-data: true
|
||||
|
||||
# Logs blocks placed by players.
|
||||
block-place: true
|
||||
|
||||
# Logs blocks broken by players.
|
||||
block-break: true
|
||||
|
||||
# Logs blocks that break off of other blocks; for example, a sign or torch
|
||||
# falling off of a dirt block that a player breaks. This is required for
|
||||
# beds/doors to properly rollback.
|
||||
natural-break: true
|
||||
|
||||
# Properly track block movement, such as sand or gravel falling.
|
||||
block-movement: true
|
||||
|
||||
# Properly track blocks moved by pistons.
|
||||
pistons: true
|
||||
|
||||
# Logs blocks that burn up in a fire.
|
||||
block-burn: true
|
||||
|
||||
# Logs when a block naturally ignites, such as from fire spreading.
|
||||
block-ignite: true
|
||||
|
||||
# Logs explosions, such as TNT and Creepers.
|
||||
explosions: true
|
||||
|
||||
# Track when an entity changes a block, such as an Enderman destroying blocks.
|
||||
entity-change: true
|
||||
|
||||
# Logs killed entities, such as killed cows and enderman.
|
||||
entity-kills: true
|
||||
|
||||
# Logs text on signs. If disabled, signs will be blank when rolled back.
|
||||
sign-text: true
|
||||
|
||||
# Logs lava and water sources placed/removed by players who are using buckets.
|
||||
buckets: true
|
||||
|
||||
# Logs natural tree leaf decay.
|
||||
leaf-decay: true
|
||||
|
||||
# Logs tree growth. Trees are linked to the player who planted the sapling.
|
||||
tree-growth: true
|
||||
|
||||
# Logs mushroom growth.
|
||||
mushroom-growth: true
|
||||
|
||||
# Logs natural vine growth.
|
||||
vine-growth: true
|
||||
|
||||
# Logs the spread of sculk blocks from sculk catalysts.
|
||||
sculk-spread: true
|
||||
|
||||
# Logs when portals such as Nether portals generate naturally.
|
||||
portals: true
|
||||
|
||||
# Logs water flow. If water destroys other blocks, such as torches,
|
||||
# this allows it to be properly rolled back.
|
||||
water-flow: true
|
||||
|
||||
# Logs lava flow. If lava destroys other blocks, such as torches,
|
||||
# this allows it to be properly rolled back.
|
||||
lava-flow: true
|
||||
|
||||
# Allows liquid to be properly tracked and linked to players.
|
||||
# For example, if a player places water which flows and destroys torches,
|
||||
# it can all be properly restored by rolling back that single player.
|
||||
liquid-tracking: true
|
||||
|
||||
# Track item transactions, such as when a player takes items from
|
||||
# a chest, furnace, or dispenser.
|
||||
item-transactions: true
|
||||
|
||||
# Logs items dropped by players.
|
||||
item-drops: true
|
||||
|
||||
# Logs items picked up by players.
|
||||
item-pickups: true
|
||||
|
||||
# Track all hopper transactions, such as when a hopper removes items from a
|
||||
# chest, furnace, or dispenser.
|
||||
hopper-transactions: true
|
||||
|
||||
# Track player interactions, such as when a player opens a door, presses
|
||||
# a button, or opens a chest. Player interactions can't be rolled back.
|
||||
player-interactions: true
|
||||
|
||||
# Logs messages that players send in the chat.
|
||||
player-messages: true
|
||||
|
||||
# Logs all commands used by players.
|
||||
player-commands: true
|
||||
|
||||
# Logs the logins and logouts of players.
|
||||
player-sessions: true
|
||||
|
||||
# Logs when a player changes their Minecraft username.
|
||||
username-changes: true
|
||||
|
||||
# Logs changes made via the plugin "WorldEdit" if it's in use on your server.
|
||||
worldedit: true
|
||||
212
live-server/plugins/CoreProtect/language.yml
Executable file
212
live-server/plugins/CoreProtect/language.yml
Executable file
|
|
@ -0,0 +1,212 @@
|
|||
# CoreProtect Language File (en)
|
||||
|
||||
ACTION_NOT_SUPPORTED: "That action is not supported by the command."
|
||||
AMOUNT_BLOCK: "{0} {block|blocks}"
|
||||
AMOUNT_CHUNK: "{0} {chunk|chunks}"
|
||||
AMOUNT_ENTITY: "{0} {entity|entities}"
|
||||
AMOUNT_ITEM: "{0} {item|items}"
|
||||
API_TEST: "API test successful."
|
||||
CACHE_ERROR: "WARNING: Error while validating {0} cache."
|
||||
CACHE_RELOAD: "Forcing reload of {mapping|world} caches from database."
|
||||
CHECK_CONFIG: "Please check config.yml"
|
||||
COMMAND_CONSOLE: "Please run the command from the console."
|
||||
COMMAND_NOT_FOUND: "Command \"{0}\" not found."
|
||||
COMMAND_THROTTLED: "Please wait a moment and try again."
|
||||
CONSUMER_ERROR: "Consumer queue processing already {paused|resumed}."
|
||||
CONSUMER_TOGGLED: "Consumer queue processing has been {paused|resumed}."
|
||||
CONTAINER_HEADER: "Container Transactions"
|
||||
DATABASE_BUSY: "Database busy. Please try again later."
|
||||
DATABASE_INDEX_ERROR: "Unable to validate database indexes."
|
||||
DATABASE_LOCKED_1: "Database locked. Waiting up to 15 seconds..."
|
||||
DATABASE_LOCKED_2: "Database is already in use. Please try again."
|
||||
DATABASE_LOCKED_3: "To disable database locking, set \"database-lock: false\"."
|
||||
DATABASE_LOCKED_4: "Disabling database locking can result in data corruption."
|
||||
DATABASE_UNREACHABLE: "Database is unreachable. Discarding data and shutting down."
|
||||
DEVELOPMENT_BRANCH: "Development branch detected, skipping patch scripts."
|
||||
DIRT_BLOCK: "Placed a dirt block under you."
|
||||
DISABLE_SUCCESS: "Success! Disabled {0}"
|
||||
ENABLE_FAILED: "{0} was unable to start."
|
||||
ENABLE_SUCCESS: "{0} has been successfully enabled!"
|
||||
ENJOY_COREPROTECT: "Enjoy {0}? Join our Discord!"
|
||||
FINISHING_CONVERSION: "Finishing up data conversion. Please wait..."
|
||||
FINISHING_LOGGING: "Finishing up data logging. Please wait..."
|
||||
FIRST_VERSION: "Initial DB: {0}"
|
||||
GLOBAL_LOOKUP: "Don't specify a radius to do a global lookup."
|
||||
GLOBAL_ROLLBACK: "Use \"{0}\" to do a global {rollback|restore}"
|
||||
HELP_ACTION_1: "Restrict the lookup to a certain action."
|
||||
HELP_ACTION_2: "Examples: [a:block], [a:+block], [a:-block] [a:click], [a:container], [a:inventory], [a:item], [a:kill], [a:chat], [a:command], [a:sign], [a:session], [a:username]"
|
||||
HELP_COMMAND: "Display more info for that command."
|
||||
HELP_EXCLUDE_1: "Exclude blocks/users."
|
||||
HELP_EXCLUDE_2: "Examples: [e:stone], [e:Notch], [e:stone,Notch]"
|
||||
HELP_HEADER: "{0} Help"
|
||||
HELP_INCLUDE_1: "Include specific blocks/entities."
|
||||
HELP_INCLUDE_2: "Examples: [i:stone], [i:zombie], [i:stone,wood,bedrock]"
|
||||
HELP_INSPECT_1: "With the inspector enabled, you can do the following:"
|
||||
HELP_INSPECT_2: "Left-click a block to see who placed that block."
|
||||
HELP_INSPECT_3: "Right-click a block to see what adjacent block was broken."
|
||||
HELP_INSPECT_4: "Place a block to see what block was broken at that location."
|
||||
HELP_INSPECT_5: "Place a block in liquid (etc) to see who placed it."
|
||||
HELP_INSPECT_6: "Right-click on a door, chest, etc, to see who last used it."
|
||||
HELP_INSPECT_7: "Tip: You can use just \"/co i\" for quicker access."
|
||||
HELP_INSPECT_COMMAND: "Turns the block inspector on or off."
|
||||
HELP_LIST: "Displays a list of all commands."
|
||||
HELP_LOOKUP_1: "Command shortcut."
|
||||
HELP_LOOKUP_2: "Use after inspecting a block to view logs."
|
||||
HELP_LOOKUP_COMMAND: "Advanced block data lookup."
|
||||
HELP_NO_INFO: "Information for command \"{0}\" not found."
|
||||
HELP_PARAMETER: "Please see \"{0}\" for detailed parameter info."
|
||||
HELP_PARAMS_1: "Perform the {lookup|rollback|restore}."
|
||||
HELP_PARAMS_2: "Specify the user(s) to {lookup|rollback|restore}."
|
||||
HELP_PARAMS_3: "Specify the amount of time to {lookup|rollback|restore}."
|
||||
HELP_PARAMS_4: "Specify a radius area to limit the {lookup|rollback|restore} to."
|
||||
HELP_PARAMS_5: "Restrict the {lookup|rollback|restore} to a certain action."
|
||||
HELP_PARAMS_6: "Include specific blocks/entities in the {lookup|rollback|restore}."
|
||||
HELP_PARAMS_7: "Exclude blocks/users from the {lookup|rollback|restore}."
|
||||
HELP_PURGE_1: "Delete data older than specified time."
|
||||
HELP_PURGE_2: "For example, \"{0}\" will delete all data older than one month, and only keep the last 30 days of data."
|
||||
HELP_PURGE_COMMAND: "Delete old block data."
|
||||
HELP_RADIUS_1: "Specify a radius area."
|
||||
HELP_RADIUS_2: "Examples: [r:10] (Only make changes within 10 blocks of you)"
|
||||
HELP_RELOAD_COMMAND: "Reloads the configuration file."
|
||||
HELP_RESTORE_COMMAND: "Restore block data."
|
||||
HELP_ROLLBACK_COMMAND: "Rollback block data."
|
||||
HELP_STATUS: "View the plugin status and version information."
|
||||
HELP_STATUS_COMMAND: "Displays the plugin status."
|
||||
HELP_TELEPORT: "Teleport to a location."
|
||||
HELP_TIME_1: "Specify the amount of time to lookup."
|
||||
HELP_TIME_2: "Examples: [t:2w,5d,7h,2m,10s], [t:5d2h], [t:2.50h]"
|
||||
HELP_USER_1: "Specify the user(s) to lookup."
|
||||
HELP_USER_2: "Examples: [u:Notch], [u:Notch,#enderman]"
|
||||
INCOMPATIBLE_ACTION: "\"{0}\" can't be used with that action."
|
||||
INSPECTOR_ERROR: "Inspector already {enabled|disabled}."
|
||||
INSPECTOR_TOGGLED: "Inspector now {enabled|disabled}."
|
||||
INTEGRATION_ERROR: "Unable to {initialize|disable} {0} logging."
|
||||
INTEGRATION_SUCCESS: "{0} logging successfully {initialized|disabled}."
|
||||
INTEGRATION_VERSION: "Invalid {0} version found."
|
||||
INTERACTIONS_HEADER: "Player Interactions"
|
||||
INVALID_ACTION: "That is not a valid action."
|
||||
INVALID_BRANCH_1: "Invalid plugin version (branch has not been set)."
|
||||
INVALID_BRANCH_2: "To continue, set project branch to \"development\"."
|
||||
INVALID_BRANCH_3: "Running development code may result in data corruption."
|
||||
INVALID_CONTAINER: "Please inspect a valid container first."
|
||||
INVALID_DONATION_KEY: "Invalid donation key."
|
||||
INVALID_INCLUDE: "\"{0}\" is an invalid block/entity name."
|
||||
INVALID_INCLUDE_COMBO: "That is an invalid block/entity combination."
|
||||
INVALID_RADIUS: "Please enter a valid radius."
|
||||
INVALID_SELECTION: "{0} selection not found."
|
||||
INVALID_USERNAME: "\"{0}\" is an invalid username."
|
||||
INVALID_WORLD: "Please specify a valid world."
|
||||
LATEST_VERSION: "Latest Version: {0}"
|
||||
LINK_DISCORD: "Discord: {0}"
|
||||
LINK_DOWNLOAD: "Download: {0}"
|
||||
LINK_PATREON: "Patreon: {0}"
|
||||
LINK_WIKI_BLOCK: "Block Names: {0}"
|
||||
LINK_WIKI_ENTITY: "Entity Names: {0}"
|
||||
LOGGING_ITEMS: "{0} items left to log. Please wait..."
|
||||
LOGGING_TIME_LIMIT: "Logging time limit reached. Discarding data and shutting down."
|
||||
LOOKUP_BLOCK: "{0} {placed|broke} {1}."
|
||||
LOOKUP_CONTAINER: "{0} {added|removed} {1} {2}."
|
||||
LOOKUP_HEADER: "{0} Lookup Results"
|
||||
LOOKUP_INTERACTION: "{0} {clicked|killed} {1}."
|
||||
LOOKUP_ITEM: "{0} {picked up|dropped} {1} {2}."
|
||||
LOOKUP_LOGIN: "{0} logged {in|out}."
|
||||
LOOKUP_PAGE: "Page {0}"
|
||||
LOOKUP_PROJECTILE: "{0} {threw|shot} {1} {2}."
|
||||
LOOKUP_ROWS_FOUND: "{0} {row|rows} found."
|
||||
LOOKUP_SEARCHING: "Lookup searching. Please wait..."
|
||||
LOOKUP_STORAGE: "{0} {deposited|withdrew} {1} {2}."
|
||||
LOOKUP_TIME: "{0} ago"
|
||||
LOOKUP_USERNAME: "{0} logged in as {1}."
|
||||
MAXIMUM_RADIUS: "The maximum {lookup|rollback|restore} radius is {0}."
|
||||
MISSING_ACTION_USER: "To use that action, please specify a user."
|
||||
MISSING_LOOKUP_TIME: "Please specify the amount of time to {lookup|rollback|restore}."
|
||||
MISSING_LOOKUP_USER: "Please specify a user or {block|radius} to lookup."
|
||||
MISSING_PARAMETERS: "Please use \"{0}\"."
|
||||
MISSING_ROLLBACK_RADIUS: "You did not specify a {rollback|restore} radius."
|
||||
MISSING_ROLLBACK_USER: "You did not specify a {rollback|restore} user."
|
||||
MYSQL_UNAVAILABLE: "Unable to connect to MySQL server."
|
||||
NETWORK_CONNECTION: "Connection by {0} {successful|failed}. Using {1} {2}."
|
||||
NETWORK_TEST: "Network test data has been successful sent."
|
||||
NO_DATA: "No data found at {0}."
|
||||
NO_DATA_LOCATION: "No {data|transactions|interactions|messages} found at this location."
|
||||
NO_PERMISSION: "You do not have permission to do that."
|
||||
NO_RESULTS: "No results found."
|
||||
NO_RESULTS_PAGE: "No {results|data} found for that page."
|
||||
NO_ROLLBACK: "No {pending|previous} rollback/restore found."
|
||||
PATCH_INTERRUPTED: "Upgrade interrupted. Will try again on restart."
|
||||
PATCH_OUTDATED_1: "Unable to upgrade databases older than {0}."
|
||||
PATCH_OUTDATED_2: "Please upgrade with a supported version of CoreProtect."
|
||||
PATCH_PROCESSING: "Processing new data. Please wait..."
|
||||
PATCH_SKIP_UPDATE: "Skipping {table|index} {update|creation|removal} on {0}."
|
||||
PATCH_STARTED: "Performing {0} upgrade. Please wait..."
|
||||
PATCH_SUCCESS: "Successfully upgraded to {0}."
|
||||
PATCH_UPGRADING: "Database upgrade in progress. Please wait..."
|
||||
PLEASE_SELECT: "Please select: \"{0}\" or \"{1}\"."
|
||||
PREVIEW_CANCELLED: "Preview cancelled."
|
||||
PREVIEW_CANCELLING: "Cancelling preview..."
|
||||
PREVIEW_IN_GAME: "You can only preview rollbacks in-game."
|
||||
PREVIEW_TRANSACTION: "You can't preview {container|inventory} transactions."
|
||||
PURGE_ABORTED: "Purge failed. Database may be corrupt."
|
||||
PURGE_ERROR: "Unable to process {0} data!"
|
||||
PURGE_FAILED: "Purge failed. Please try again later."
|
||||
PURGE_IN_PROGRESS: "Purge in progress. Please try again later."
|
||||
PURGE_MINIMUM_TIME: "You can only purge data older than {0} {days|hours}."
|
||||
PURGE_NOTICE_1: "Please note that this may take some time."
|
||||
PURGE_NOTICE_2: "Do not restart your server until completed."
|
||||
PURGE_OPTIMIZING: "Optimizing database. Please wait..."
|
||||
PURGE_PROCESSING: "Processing {0} data..."
|
||||
PURGE_REPAIRING: "Attempting to repair. This may take some time..."
|
||||
PURGE_ROWS: "{0} {row|rows} of data deleted."
|
||||
PURGE_STARTED: "Data purge started on \"{0}\"."
|
||||
PURGE_SUCCESS: "Data purge successful."
|
||||
RELOAD_STARTED: "Reloading configuration - please wait."
|
||||
RELOAD_SUCCESS: "Configuration successfully reloaded."
|
||||
ROLLBACK_ABORTED: "Rollback or restore aborted."
|
||||
ROLLBACK_CHUNKS_FOUND: "Found {0} {chunk|chunks} to modify."
|
||||
ROLLBACK_CHUNKS_MODIFIED: "Modified {0}/{1} {chunk|chunks}."
|
||||
ROLLBACK_COMPLETED: "{Rollback|Restore|Preview} completed for \"{0}\"."
|
||||
ROLLBACK_EXCLUDED_USERS: "Excluded {user|users}: \"{0}\"."
|
||||
ROLLBACK_INCLUDE: "{Included|Excluded} {block|entity|target} {type|types}: \"{0}\"."
|
||||
ROLLBACK_IN_PROGRESS: "A rollback/restore is already in progress."
|
||||
ROLLBACK_LENGTH: "Time taken: {0} {second|seconds}."
|
||||
ROLLBACK_MODIFIED: "{Modified|Modifying} {0}."
|
||||
ROLLBACK_RADIUS: "Radius: {0} {block|blocks}."
|
||||
ROLLBACK_SELECTION: "Radius set to \"{0}\"."
|
||||
ROLLBACK_STARTED: "{Rollback|Restore|Preview} started on \"{0}\"."
|
||||
ROLLBACK_TIME: "Time range: {0}."
|
||||
ROLLBACK_WORLD_ACTION: "Restricted to {world|action} \"{0}\"."
|
||||
SIGN_HEADER: "Sign Messages"
|
||||
STATUS_CONSUMER: "Consumer: {0} {item|items} in queue."
|
||||
STATUS_DATABASE: "Database: Using {0}."
|
||||
STATUS_INTEGRATION: "{0}: Integration {enabled|disabled}."
|
||||
STATUS_LICENSE: "License: {0}"
|
||||
STATUS_VERSION: "Version: {0}"
|
||||
TELEPORTED: "Teleported to {0}."
|
||||
TELEPORTED_SAFETY: "Teleported you to safety."
|
||||
TELEPORT_PLAYERS: "Teleport command can only be used by players."
|
||||
TIME_DAYS: "{0} {day|days}"
|
||||
TIME_HOURS: "{0} {hour|hours}"
|
||||
TIME_MINUTES: "{0} {minute|minutes}"
|
||||
TIME_SECONDS: "{0} {second|seconds}"
|
||||
TIME_WEEKS: "{0} {week|weeks}"
|
||||
UPDATE_ERROR: "An error occurred while checking for updates."
|
||||
UPDATE_HEADER: "{0} Update"
|
||||
UPDATE_NOTICE: "Notice: {0} is now available."
|
||||
UPGRADE_IN_PROGRESS: "Upgrade in progress. Please try again later."
|
||||
USER_NOT_FOUND: "User \"{0}\" not found."
|
||||
USER_OFFLINE: "The user \"{0}\" is not online."
|
||||
USING_MYSQL: "Using MySQL for data storage."
|
||||
USING_SQLITE: "Using SQLite for data storage."
|
||||
VALID_DONATION_KEY: "Valid donation key."
|
||||
VERSION_NOTICE: "Version {0} is now available."
|
||||
VERSION_REQUIRED: "{0} {1} or higher is required."
|
||||
WORLD_NOT_FOUND: "World \"{0}\" not found."
|
||||
CPU_CORES: "CPU cores."
|
||||
DONATION_KEY_REQUIRED: "A valid donation key is required for that command."
|
||||
PRIMARY_THREAD_ERROR: "That API method can't be used on the primary thread."
|
||||
RAM_STATS: "{0}GB / {1}GB RAM"
|
||||
STATUS_SYSTEM: "System: {0}"
|
||||
TIME_MONTHS: "{0} {month|months}"
|
||||
TIME_UNITS: "{/m|/h|/d}"
|
||||
TIME_YEARS: "{0} {year|years}"
|
||||
VERSION_INCOMPATIBLE: "{0} {1} is not supported."
|
||||
1051
live-server/plugins/Essentials/config.yml
Executable file
1051
live-server/plugins/Essentials/config.yml
Executable file
File diff suppressed because it is too large
Load diff
7
live-server/plugins/Essentials/custom_items.yml
Executable file
7
live-server/plugins/Essentials/custom_items.yml
Executable file
|
|
@ -0,0 +1,7 @@
|
|||
# This file stores custom item aliases.
|
||||
# NOTE: If you try and alias an item to another entry in this file, the alias won't work.
|
||||
|
||||
aliases:
|
||||
bluepaint: blue_dye
|
||||
snad: sand
|
||||
breakfast: cooked_porkchop
|
||||
55
live-server/plugins/Essentials/kits.yml
Executable file
55
live-server/plugins/Essentials/kits.yml
Executable file
|
|
@ -0,0 +1,55 @@
|
|||
kits:
|
||||
tools:
|
||||
delay: 10
|
||||
items:
|
||||
- stonesword 1
|
||||
- stoneshovel 1
|
||||
- stonepickaxe 1
|
||||
- stoneaxe 1
|
||||
dtools:
|
||||
delay: 600
|
||||
items:
|
||||
- dpickaxe 1 efficiency:1 durability:1 fortune:1 name:&4Gigadrill lore:The_drill_that_&npierces|the_heavens
|
||||
- dshovel 1 digspeed:3 name:Dwarf lore:Diggy|Diggy|Hole
|
||||
- lhelm 1 color:255,255,255 name:Top_Hat lore:Good_day,_Good_day
|
||||
- daxe:780 1
|
||||
- /broadcast {USERNAME} just got some fancy tools!
|
||||
notch:
|
||||
delay: 6000
|
||||
items:
|
||||
- playerhead 1 player:Notch
|
||||
color:
|
||||
delay: 6000
|
||||
items:
|
||||
- writtenbook 1 title:&4Book_&9o_&6Colors author:KHobbits lore:Ingame_color_codes
|
||||
book:Colors
|
||||
firework:
|
||||
delay: 6000
|
||||
items:
|
||||
- fireworkrocket 1 name:Angry_Creeper color:red fade:green type:creeper power:1
|
||||
- fireworkrocket 1 name:Starry_Night color:yellow,orange fade:blue type:star effect:trail,twinkle
|
||||
power:1
|
||||
- fireworkrocket 2 name:Solar_Wind color:yellow,orange fade:red shape:large effect:twinkle
|
||||
color:yellow,orange fade:red shape:ball effect:trail color:red,purple fade:pink
|
||||
shape:star effect:trail power:1
|
||||
kit1:
|
||||
delay: 0
|
||||
items:
|
||||
- stone_shovel 1
|
||||
- stone_pickaxe 1
|
||||
- iron_axe 1
|
||||
- shield 1 basecolor:16383998
|
||||
- iron_leggings 1
|
||||
- iron_boots 1
|
||||
- iron_chestplate 1
|
||||
- iron_helmet 1
|
||||
- water_bucket 1
|
||||
- stone_shovel 1
|
||||
- baked_potato 16
|
||||
- apple 2
|
||||
- gravel 12
|
||||
- stone_axe 1
|
||||
- oak_sapling 31
|
||||
- arrow 2
|
||||
- dirt 23
|
||||
- enchanted_golden_apple 1
|
||||
1
live-server/plugins/Essentials/messages.properties
Executable file
1
live-server/plugins/Essentials/messages.properties
Executable file
|
|
@ -0,0 +1 @@
|
|||
deletehomeUsage=""
|
||||
1
live-server/plugins/Essentials/motd.txt
Normal file
1
live-server/plugins/Essentials/motd.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
&8[&fracked.ru&8]&r &7Type &e/help &7for a list of commands.
|
||||
3
live-server/plugins/Essentials/rules.txt
Executable file
3
live-server/plugins/Essentials/rules.txt
Executable file
|
|
@ -0,0 +1,3 @@
|
|||
[1] Be respectful
|
||||
[2] Be ethical
|
||||
[3] Use common sense
|
||||
16
live-server/plugins/Essentials/tpr.yml
Executable file
16
live-server/plugins/Essentials/tpr.yml
Executable file
|
|
@ -0,0 +1,16 @@
|
|||
# Configuration for the random teleport command.
|
||||
# Some settings may be defaulted, and can be changed via the /settpr command in-game.
|
||||
default-location: '{world}'
|
||||
excluded-biomes:
|
||||
- cold_ocean
|
||||
- deep_cold_ocean
|
||||
- deep_frozen_ocean
|
||||
- deep_lukewarm_ocean
|
||||
- deep_ocean
|
||||
- deep_warm_ocean
|
||||
- frozen_ocean
|
||||
- frozen_river
|
||||
- lukewarm_ocean
|
||||
- ocean
|
||||
- river
|
||||
- warm_ocean
|
||||
16
live-server/plugins/Essentials/upgrades-done.yml
Executable file
16
live-server/plugins/Essentials/upgrades-done.yml
Executable file
|
|
@ -0,0 +1,16 @@
|
|||
updateLegacyToAdventure: true
|
||||
newUidCacheBuilt: true
|
||||
updateSpawnsToNewSpawnsConfig: true
|
||||
updateJailsToNewJailsConfig: true
|
||||
warnMetrics: true
|
||||
updateRandomTeleport: true
|
||||
movemotdToFile: true
|
||||
moverulesToFile: true
|
||||
sanitizeAllUserFilenames: true
|
||||
updateUsersPowerToolsFormat: true
|
||||
updateUsersHomesFormat: true
|
||||
banFormatChange: true
|
||||
updateUsersIgnoreListUUID: true
|
||||
updateUsersStupidLegacyPathNames: true
|
||||
updateUsersMailList: true
|
||||
updatePurgeBrokenNpcAccounts: true
|
||||
187
live-server/plugins/Essentials/worth.yml
Executable file
187
live-server/plugins/Essentials/worth.yml
Executable file
|
|
@ -0,0 +1,187 @@
|
|||
# Determines how much items are worth on the server.
|
||||
# This can be set in this file, or by running the /setworth command.
|
||||
worth:
|
||||
|
||||
# Items not listed in this file will not be sellable on the server
|
||||
# Setting the worth to 0 will sell items for free, delete the item or set to -1 to disable.
|
||||
|
||||
# This will set the worth of all logs to '2'
|
||||
log: 2.0
|
||||
|
||||
# This will work similar to the above syntax
|
||||
wool:
|
||||
'0': 20
|
||||
|
||||
# This will only allow selling leaves with datavalue '0' and '1'
|
||||
leaves:
|
||||
'0': 1.0
|
||||
'1': 1.0
|
||||
|
||||
# This will allow the selling of all, but sells '0' slightly cheaper
|
||||
sapling:
|
||||
'0': 2.0
|
||||
'*': 2.5
|
||||
|
||||
|
||||
stonebutton: 6.0
|
||||
wood: 0.50
|
||||
arrow: 3.50
|
||||
diamondpickaxe: 650.0
|
||||
rawfish: 5.0
|
||||
minecart: 23.0
|
||||
leatherchestplate: 85.0
|
||||
storageminecart: 30.0
|
||||
feather: 3.0
|
||||
goldchestplate: 6.5
|
||||
mushroomsoup: 4.5
|
||||
bread: 30.0
|
||||
stationarywater: 1.0
|
||||
workbench: 2.5
|
||||
stonehoe: 2.5
|
||||
brownmushroom: 2.0
|
||||
mossycobblestone: 90.0
|
||||
diamondhoe: 400.0
|
||||
woodsword: 1.0
|
||||
torch: 4.0
|
||||
grass: 1.0
|
||||
poweredminecart: 32.0
|
||||
snowball: 1.0
|
||||
goldenapple: 100.0
|
||||
leatherleggings: 75.0
|
||||
diamondaxe: 650.0
|
||||
slimeball: 50.0
|
||||
fence: 1.0
|
||||
stonespade: 1.5
|
||||
claybrick: 5.0
|
||||
noteblock: 36.0
|
||||
ironaxe: 22.0
|
||||
coalore: 15.0
|
||||
clayball: 3.0
|
||||
fishingrod: 10.0
|
||||
ironhoe: 22.0
|
||||
goldrecord: 100.0
|
||||
ironpickaxe: 22.0
|
||||
irondoor: 22.0
|
||||
bucket: 22.0
|
||||
redrose: 2.0
|
||||
grilledpork: 7.0
|
||||
gravel: 1.0
|
||||
wooddoor: 3.0
|
||||
chainmailhelmet: 40.0
|
||||
ironchestplate: 22.0
|
||||
diamondblock: 2000.0
|
||||
diamondhelmet: 1000.0
|
||||
goldhelmet: 6.0
|
||||
redstonetorchon: 32.0
|
||||
ironspade: 22.0
|
||||
furnace: 8.5
|
||||
ironsword: 22.0
|
||||
dispenser: 58.0
|
||||
woodaxe: 2.0
|
||||
seeds: 2.0
|
||||
painting: 25.0
|
||||
woodplate: 1.0
|
||||
redstoneore: 30.0
|
||||
diamondspade: 210.0
|
||||
waterbucket: 40.0
|
||||
water: 1.0
|
||||
bedrock: 100.0
|
||||
irondoorblock: 15.0
|
||||
goldhoe: 6.0
|
||||
sand: 1.0
|
||||
goldsword: 6.0
|
||||
stoneaxe: 3.0
|
||||
bookshelf: 140.0
|
||||
ironblock: 190.0
|
||||
jackolantern: 56.0
|
||||
boat: 3.0
|
||||
diamondchestplate: 1750.0
|
||||
redstonewire: 30.0
|
||||
redmushroom: 2.0
|
||||
string: 5.0
|
||||
stoneplate: 6.0
|
||||
wallsign: 1.0
|
||||
cactus: 10.0
|
||||
sulphur: 20.0
|
||||
rails: 22.0
|
||||
ironore: 18.0
|
||||
leatherhelmet: 52.0
|
||||
stone: 3.00
|
||||
egg: 1.0
|
||||
diamondore: 200.0
|
||||
woodhoe: 2.0
|
||||
goldleggings: 6.0
|
||||
chainmailleggings: 50.0
|
||||
yellowflower: 2.0
|
||||
ironhelmet: 22.0
|
||||
obsidian: 130.0
|
||||
dirt: 1.0
|
||||
leather: 10.0
|
||||
leatherboots: 42.0
|
||||
lever: 1.0
|
||||
cobblestone: 1.0
|
||||
cake: 180.0
|
||||
woodstairs: 1.0
|
||||
ironingot: 22.0
|
||||
goldore: 45.0
|
||||
pumpkin: 50.0
|
||||
bed: 68.0
|
||||
watch: 6.0
|
||||
ironleggings: 22.0
|
||||
sign: 1.5
|
||||
doublestep: 1.0
|
||||
woodpickaxe: 2.0
|
||||
stonepickaxe: 4.0
|
||||
chainmailboots: 30.0
|
||||
diamondleggings: 1500.0
|
||||
cookedfish: 7.0
|
||||
saddle: 100.0
|
||||
cobblestonestairs: 1.5
|
||||
tnt: 100.0
|
||||
glowingredstoneore: 30.0
|
||||
apple: 10.0
|
||||
woodspade: 1.0
|
||||
goldingot: 105.0
|
||||
diode: 110.0
|
||||
soil: 1.0
|
||||
clay: 12.0
|
||||
goldblock: 450.0
|
||||
stick: 0.25
|
||||
paper: 10.0
|
||||
brick: 21.0
|
||||
stationarylava: 1.0
|
||||
chest: 4.0
|
||||
sandstone: 3.0
|
||||
goldpickaxe: 6.0
|
||||
compass: 22.0
|
||||
sugarcane: 10.0
|
||||
diamondsword: 420.0
|
||||
goldboots: 6.0
|
||||
sponge: 80.0
|
||||
stonesword: 2.5
|
||||
coal: 15.0
|
||||
goldaxe: 6.0
|
||||
bone: 2.0
|
||||
diamond: 200.0
|
||||
glass: 3.00
|
||||
goldspade: 6.0
|
||||
lapisblock: 950.0
|
||||
lavabucket: 40.0
|
||||
wheat: 9.0
|
||||
ladder: 0.5
|
||||
sugarcaneblock: 15.0
|
||||
bowl: 0.50
|
||||
chainmailchestplate: 40.0
|
||||
diamondboots: 850.0
|
||||
lapisore: 100.0
|
||||
lava: 25.0
|
||||
milkbucket: 40.0
|
||||
redstone: 32.0
|
||||
greenrecord: 100.0
|
||||
inksack: 10.0
|
||||
glowstonedust: 10.0
|
||||
book: 45.0
|
||||
bow: 15.0
|
||||
ironboots: 22.0
|
||||
step: 1.5
|
||||
sugar: 10.0
|
||||
408
live-server/plugins/FastAsyncWorldEdit/config.yml
Normal file
408
live-server/plugins/FastAsyncWorldEdit/config.yml
Normal file
|
|
@ -0,0 +1,408 @@
|
|||
# These first 6 aren't configurable
|
||||
issues: "https://github.com/IntellectualSites/FastAsyncWorldEdit/issues"
|
||||
wiki: "https://intellectualsites.github.io/fastasyncworldedit-documentation/"
|
||||
date: "Tue Feb 10 00:00:00 GMT 2026"
|
||||
build: "https://ci.athion.net/job/FastAsyncWorldEdit/0"
|
||||
commit: "https://github.com/IntellectualSites/FastAsyncWorldEdit/commit/fa6c8d3b"
|
||||
platform: "Bukkit"
|
||||
# Set true to enable WorldEdit restrictions per region (e.g. PlotSquared or WorldGuard).
|
||||
# To be allowed to WorldEdit in a region, users need the appropriate
|
||||
# fawe.<plugin> permission. See the Permissions page for supported region plugins.
|
||||
region-restrictions: true
|
||||
# FAWE will cancel non admin edits when memory consumption exceeds this %
|
||||
# - Bypass with `/wea` or `//fast` or `fawe.bypass`
|
||||
# - Disable with 100 or -1.
|
||||
max-memory-percent: 95
|
||||
# When percent memory usage reaches this threshold some aspects of editing will be slowed down:
|
||||
# - FAWE-Asynchronous chunk loading when writing changes (see queue.async-chunk-load-write)
|
||||
slower-memory-percent: 80
|
||||
|
||||
# Enable or disable core components
|
||||
enabled-components:
|
||||
commands: true
|
||||
# Show additional information in console. It helps us at IntellectualSites to find out more about an issue.
|
||||
# Leave it off if you don't need it, it can spam your console.
|
||||
debug: false
|
||||
# Whether or not FAWE should notify you on startup about new available snapshots.
|
||||
snapshot-update-notifications: false
|
||||
# Whether or not FAWE should notify you on startup about new releases.
|
||||
release-update-notifications: false
|
||||
# Whether or not FAWE should notify you for updates (snapshot / release) on join (with the required permission)
|
||||
notify-update-ingame: false
|
||||
|
||||
clipboard:
|
||||
# Store the clipboard on disk instead of memory
|
||||
# - Will be slightly slower
|
||||
# - Uses 2 bytes per block
|
||||
use-disk: true
|
||||
# Compress the clipboard to reduce the size:
|
||||
# - TODO: Buffered random access with compression is not implemented on disk yet
|
||||
# - 0 = No compression
|
||||
# - 1 = Fast compression
|
||||
# - 2-17 = Slower compression
|
||||
# - levels over 6 require ZSTD 1.4.8+ to be installed to the system
|
||||
compression-level: 1
|
||||
# Number of days to keep history on disk before deleting it
|
||||
delete-after-days: 1
|
||||
# If a player's clipboard should be deleted upon logout
|
||||
delete-on-logout: false
|
||||
# Allows NBT stored in a clipboard to be written to disk
|
||||
# - Requires clipboard.use-disk to be enabled
|
||||
save-clipboard-nbt-to-disk: true
|
||||
# Apply a file lock on the clipboard file (only relevant if clipboad.on-disk is enabled)
|
||||
# - Prevents other processes using the file whilst in use by FAWE
|
||||
# - This extends to other servers, useful if you have multiple servers using a unified clipboard folder
|
||||
# - May run into issues where a file lock is not correctly lifted
|
||||
lock-clipboard-file: false
|
||||
|
||||
lighting:
|
||||
# If packet sending should be delayed until relight is finished
|
||||
delay-packet-sending: true
|
||||
async: true
|
||||
# The relighting mode to use:
|
||||
# - 0 = None (Do no relighting)
|
||||
# - 1 = Optimal (Relight changed light sources and changed blocks)
|
||||
# - 2 = All (Slowly relight every blocks)
|
||||
mode: 1
|
||||
# If existing lighting should be removed before relighting
|
||||
remove-first: true
|
||||
|
||||
# Generic tick limiter (not necessarily WorldEdit related, but useful to stop abuse)
|
||||
tick-limiter:
|
||||
# Enable the limiter
|
||||
enabled: false
|
||||
# The interval in ticks
|
||||
interval: 20
|
||||
# Max falling blocks per interval (per chunk)
|
||||
falling: 64
|
||||
# Max physics per interval (excluding redstone)
|
||||
physics-ms: 10
|
||||
# Max item spawns per interval (per chunk)
|
||||
items: 256
|
||||
|
||||
# Web/HTTP connection related settings
|
||||
web:
|
||||
# The web interface for clipboards
|
||||
# - All schematics are anonymous and private
|
||||
# - Downloads can be deleted by the user
|
||||
# - Supports clipboard uploads, downloads and saves
|
||||
url: "https://schem.intellectualsites.com/fawe/"
|
||||
# The url of the backend server (Arkitektonika)
|
||||
arkitektonika-backend-url: "https://api.schematic.cloud/"
|
||||
# The url used to generate a download link from.
|
||||
# {key} will be replaced with the generated key
|
||||
arkitektonika-download-url: "https://schematic.cloud/download/{key}"
|
||||
# The url used to generate a deletion link from.
|
||||
# {key} will be replaced with the generated key
|
||||
arkitektonika-delete-url: "https://schematic.cloud/delete/{key}"
|
||||
# The maximum amount of time in seconds the plugin can attempt to load images for.
|
||||
max-image-load-time: 5
|
||||
# The maximum size (width x length) an image being loaded can be.
|
||||
# - 8294400 is 3840x2160
|
||||
max-image-size: 8294400
|
||||
# Whitelist of hostnames to allow images to be downloaded from
|
||||
# - Adding '*' to the list will allow any host, but this is NOT adviseable
|
||||
# - Crash exploits exist with malformed images
|
||||
# - See: https://medium.com/chargebee-engineering/perils-of-parsing-pixel-flood-attack-on-java-imageio-a97aeb06637d
|
||||
allowed-image-hosts:
|
||||
- "i.imgur.com"
|
||||
|
||||
extent:
|
||||
# Don't bug console when these plugins slow down WorldEdit operations
|
||||
# - You'll see a message in console or ingame if you need to change this option
|
||||
allowed-plugins:
|
||||
- "com.example.ExamplePlugin"
|
||||
# Should debug messages be sent when third party extents are used?
|
||||
debug: true
|
||||
|
||||
# Experimental options, use at your own risk
|
||||
# - UNSAFE = Can cause permanent damage to the server
|
||||
# - SAFE = Can be buggy but unlikely to cause any damage
|
||||
experimental:
|
||||
# Undo operation batch size
|
||||
# - The size defines the number of changes read at once.
|
||||
# - Larger numbers might reduce overhead but increase latency for edits with only few changes.
|
||||
# - 0 means undo operations are not batched.
|
||||
undo-batch-size: 128
|
||||
# [UNSAFE] Directly modify the region files. (OBSOLETE - USE ANVIL COMMANDS)
|
||||
# - IMPROPER USE CAN CAUSE WORLD CORRUPTION!
|
||||
anvil-queue-mode: false
|
||||
# [SAFE] Dynamically increase the number of chunks rendered
|
||||
# - Requires Paper
|
||||
# - Set your server view distance to 1 (spigot.yml, server.properties)
|
||||
# - Based on tps and player movement
|
||||
# - Note: If entities become hidden, increase the server view distance to 3
|
||||
dynamic-chunk-rendering: -1
|
||||
# Allows brushes to be persistent (default: true)
|
||||
persistent-brushes: true
|
||||
# [SAFE] Keep entities that are positioned in non-air blocks when editing an area (default: true)
|
||||
# - Might cause client-side FPS lag in some situations
|
||||
# - Requires fast-placement to be true
|
||||
keep-entities-in-blocks: true
|
||||
# [SAFE] Attempt to remove entities from the world if they were not present in the expected chunk (default: true)
|
||||
# - Sometimes an entity may have moved into a different chunk to that which FAWE expected
|
||||
# - This option allows FAWE to attempt to remove the entity, even if present in a different chunk
|
||||
# - If the entity is in an unloaded or partially loaded chunk, this will fail
|
||||
# - If an entity cannot be removed, it is possible duplicate entities may be created when using undo and/or redo
|
||||
remove-entity-from-world-on-chunk-fail: true
|
||||
# [SAFE] Perform operations involving entities on chunk load
|
||||
# - Allows entities that might not otherwise be captured due to unloaded chunks to be captured
|
||||
# - Main use-case is copying larger areas with entities
|
||||
improved-entity-edits: true
|
||||
# Increased debug logging for brush actions and processor setup
|
||||
other: false
|
||||
# Allow fluids placed by FAWE to tick (flow). This could cause the big lags.
|
||||
# This has no effect on existing blocks one way or the other.
|
||||
# Changes due to fluid flow will not be tracked by history, thus may have unintended consequences
|
||||
allow-tick-fluids: false
|
||||
# Whether FAWE should use the incubator Vector API to accelerate some operations
|
||||
use-vector-api: false
|
||||
|
||||
# This relates to how FAWE places chunks
|
||||
queue:
|
||||
progress:
|
||||
# Display constant titles about the progress of a user's edit
|
||||
# - false = disabled
|
||||
# - title = Display progress titles
|
||||
# - chat = Display progress in chat
|
||||
# - Currently not implemented
|
||||
display: "false"
|
||||
# How often edit progress is displayed
|
||||
interval: 1
|
||||
# Delay sending progress in milliseconds (so quick edits don't spam)
|
||||
delay: 5000
|
||||
# This should equal the number of processors you have
|
||||
parallel-threads: 6
|
||||
# When doing edits that effect more than this many chunks:
|
||||
# - FAWE will start placing before all calculations are finished
|
||||
# - A larger value will use slightly less CPU time
|
||||
# - A smaller value will reduce memory usage
|
||||
# - A value too small may break some operations (deform?)
|
||||
# - Values smaller than the configured parallel-threads are not accepted
|
||||
# - It is recommended this option be at least 4x greater than parallel-threads
|
||||
target-size: 48
|
||||
# Increase or decrease queue intensity (ms) [-50,50]:
|
||||
# 0 = balance of performance / stability
|
||||
# -10 = Allocate 10ms less for chunk placement
|
||||
# Too high can cause lag spikes (you might be okay with this)
|
||||
# Too low will result in slow edits
|
||||
extra-time-ms: 0
|
||||
# Loading the right amount of chunks beforehand can speed up operations
|
||||
# - Low values may result in FAWE waiting on requests to the main thread
|
||||
# - Higher values use more memory and isn't noticeably faster
|
||||
# - A good (relatively) safe way to set this is
|
||||
# - Use 128 x GB of RAM / number of players expected to be using WE at the same time
|
||||
# - Paper and derivatives only. (requires delay-chunk-unloads-by to be set).
|
||||
preload-chunk-count: 512
|
||||
# If pooling is enabled (reduces GC, higher memory usage)
|
||||
# - Enable to improve performance at the expense of memory
|
||||
pool: true
|
||||
# If chunk loading for writing edits to the world should be performed asynchronously to FAWE
|
||||
# - Enable to improve performance at the expense of memory
|
||||
# - If experience out of memory crashed, disable this or reduce slower-memory-percent
|
||||
async-chunk-load-write: true
|
||||
# Percentage of queue.target-size to use per thread in multi-threaded operations
|
||||
# - Minimum of 100 / queue.parallel-threads (queue.target-size split across threads)
|
||||
# - Maximum of 100 (queue.target-size per thread)
|
||||
# - Higher performance at the expense of memory
|
||||
# - I.e. target-size=400, parallel-threads=8 and threads-target-size=25 means target-size of 100 per thread
|
||||
# - Defaults to 100 * 2 / parallel-threads
|
||||
thread-target-size-percent: 33
|
||||
|
||||
history:
|
||||
# Should history be saved on disk:
|
||||
# - Frees up a lot of memory
|
||||
# - Persists restarts
|
||||
# - Unlimited undo
|
||||
# - Does not affect edit performance if `combine-stages`
|
||||
use-disk: true
|
||||
# Use a database to store disk storage summaries:
|
||||
# - Enables inspection and rollback
|
||||
# - Does not impact performance
|
||||
use-database: true
|
||||
# Record history with dispatching:
|
||||
# - Much faster as it avoids duplicate block checks
|
||||
# - Slightly worse compression since dispatch order is different
|
||||
combine-stages: true
|
||||
# Do not wait for a chunk's history to save before sending it
|
||||
# - Undo/redo commands will wait until the history has been written to disk before executing
|
||||
# - Requires combine-stages = true
|
||||
send-before-history: true
|
||||
# Higher compression reduces the size of history at the expense of CPU
|
||||
# 0 = Uncompressed byte array (fastest)
|
||||
# 1 = 1 pass fast compressor (default)
|
||||
# 2 = 2 x fast
|
||||
# 3 = 3 x fast
|
||||
# 4 = 1 x medium, 1 x fast
|
||||
# 5 = 1 x medium, 2 x fast
|
||||
# 6 = 1 x medium, 3 x fast
|
||||
# 7 = 1 x high, 1 x medium, 1 x fast
|
||||
# 8 = 1 x high, 1 x medium, 2 x fast
|
||||
# 9 = 1 x high, 1 x medium, 3 x fast (best compression)
|
||||
# NOTE: If using disk, do some compression (3+) as smaller files save faster
|
||||
# - levels over 6 require ZSTD 1.4.8+ to be installed to the system
|
||||
compression-level: 3
|
||||
# The buffer size for compression:
|
||||
# - Larger = better ratio but uses more upfront memory
|
||||
# - Must be in the range [64, 33554432]
|
||||
buffer-size: 531441
|
||||
# Delete history on disk after a number of days
|
||||
delete-after-days: 7
|
||||
# Delete history in memory on logout (does not effect disk)
|
||||
delete-on-logout: true
|
||||
# Delete history on disk on logout
|
||||
delete-disk-on-logout: false
|
||||
# If history should be enabled by default for plugins using WorldEdit:
|
||||
# - It is faster to have disabled
|
||||
# - It is faster to have disabled
|
||||
# - Use of the FAWE API will not be effected
|
||||
enable-for-console: true
|
||||
# Should redo information be stored:
|
||||
# - History is about 20% larger
|
||||
# - Enables use of /redo
|
||||
store-redo: true
|
||||
# Assumes all edits are smaller than 4096x256x4096:
|
||||
# - Reduces history size by ~10%
|
||||
small-edits: false
|
||||
|
||||
# Paths for various directories
|
||||
paths:
|
||||
# Put any minecraft or mod jars for FAWE to be aware of block textures
|
||||
textures: "textures"
|
||||
heightmap: "heightmap"
|
||||
history: "history"
|
||||
# Multiple servers can use the same clipboards
|
||||
# - Use a shared directory or NFS/Samba
|
||||
clipboard: "clipboard"
|
||||
# Each player has his or her own sub directory for schematics
|
||||
per-player-schematics: false
|
||||
|
||||
# Region restriction settings
|
||||
region-restrictions-options:
|
||||
# What type of users are allowed to WorldEdit in a region
|
||||
# - MEMBER = Players added to a region
|
||||
# - OWNER = Players who own the region
|
||||
mode: "MEMBER"
|
||||
# Allow region blacklists.
|
||||
# - Currently only implemented for WorldGuard
|
||||
# - see region-restrictions-options.worldguard-region-blacklist
|
||||
allow-blacklists: false
|
||||
# List of plugin mask managers that should be exclusive. Exclusive managers are not
|
||||
# checked for edit restrictions if another manager already allowed an edit, and further
|
||||
# managers are not checked if an exclusive manager allows an edit.
|
||||
# - May be useful to add PlotSquared if using both P2 and WorldGuard on a server
|
||||
# - Some custom-implementations in other plugins may override this setting
|
||||
exclusive-managers:
|
||||
- "ExamplePlugin"
|
||||
# If a worldguard-protected world should be considered as a region blacklist.
|
||||
# - This will create a blacklist of regions where an edit cannot operate.
|
||||
# - Useful for a "freebuild" worlds with few protected areas.
|
||||
# - May cause performance loss with large numbers of protected areas.
|
||||
# - Requires region-restrictions-options.allow-blacklists be true.
|
||||
# - Will still search for current allowed regions to limit the edit to.
|
||||
# - Any blacklist regions are likely to override any internal allowed regions.
|
||||
worldguard-region-blacklist: false
|
||||
# Restrict all edits to within the safe chunk limits of +/- 30 million blocks
|
||||
# - Edits outside this range may induce crashing
|
||||
# - Forcefully prevents any edit outside this range
|
||||
restrict-to-safe-range: true
|
||||
|
||||
general:
|
||||
# If the player should be relocated/unstuck when a generation command would bury them
|
||||
unstuck-on-generate: true
|
||||
# If unlimited limits should still require /confirm on large. Defaults to limits.default.confirm-large otherwise.
|
||||
limit-unlimited-confirms: true
|
||||
# If unlimited limits should skip sending creature spawn events. Using //fast will still disable spawn events.
|
||||
limit-unlimited-skips-creature-spawn-events: true
|
||||
# The "default" limit group affects those without a specific limit permission.
|
||||
# To grant someone different limits, copy the default limits group
|
||||
# and give it a different name (e.g. newbie). Then give the user the limit
|
||||
# permission node with that limit name (e.g. fawe.limit.newbie )
|
||||
limits:
|
||||
default:
|
||||
# Max actions that can be run concurrently (i.e. commands)
|
||||
max-actions: 1
|
||||
# Max number of block changes (e.g. by `//set stone`).
|
||||
max-changes: 50000000
|
||||
# Max number of blocks checked (e.g. `//count stone` which doesn't change blocks)
|
||||
max-checks: 50000000
|
||||
# Number of times a change can fail (e.g. if the player can't access that region)
|
||||
max-fails: 50000000
|
||||
# Allowed brush iterations (e.g. `//brush smooth`)
|
||||
max-iterations: 1000
|
||||
# Max allowed entities (e.g. cows)
|
||||
max-entities: 1337
|
||||
# Max allowed radius (e.g. for //sphere)
|
||||
max-radius: -1
|
||||
# Max allowed superpickaxe size
|
||||
max-super-pickaxe-size: 5
|
||||
# Max allowed brush radius
|
||||
max-brush-radius: 100
|
||||
# Max allowed butcher radius
|
||||
max-butcher-radius: -1
|
||||
# Blockstates include Banner, Beacon, BrewingStand, Chest, CommandBlock,
|
||||
# CreatureSpawner, Dispenser, Dropper, EndGateway, Furnace, Hopper, Jukebox,
|
||||
# NoteBlock, Sign, Skull, Structure
|
||||
max-blockstates: 1337
|
||||
# Maximum size of the player's history in Megabytes:
|
||||
# - History on disk or memory will be deleted
|
||||
max-history-mb: -1
|
||||
# Sets a maximum limit (in kb) for the size of a player's schematics directory (per-player mode only)
|
||||
# Set to -1 to disable
|
||||
schem-file-size-limit: -1
|
||||
# Sets a maximum limit for the amount of schematics in a player's schematics directory (per-player mode only)
|
||||
# Set to -1 to disable
|
||||
schem-file-num-limit: -1
|
||||
# Maximum time in milliseconds //calc can execute
|
||||
max-expression-ms: 50
|
||||
# Cinematic block placement:
|
||||
# - Adds a delay to block placement (nanoseconds/block)
|
||||
# - Having an artificial delay will use more CPU/Memory
|
||||
speed-reduction: 0
|
||||
# Place chunks instead of individual blocks:
|
||||
# - Disabling this will negatively impact performance
|
||||
# - Only disable this for compatibility or cinematic placement
|
||||
fast-placement: true
|
||||
# Should WorldEdit use inventory?
|
||||
# 0 = No inventory usage (creative)
|
||||
# 1 = Inventory for removing and placing (freebuild)
|
||||
# 2 = Inventory for placing (survival)
|
||||
inventory-mode: 0
|
||||
# Should large edits require confirmation (>16384 chunks)
|
||||
confirm-large: true
|
||||
# If undo and redo commands should be restricted to allowed regions
|
||||
# - Prevents scenarios where players can delete/reset a region, and then continue to undo/redo on it
|
||||
restrict-history-to-regions: true
|
||||
# List of nbt tags to strip from blocks, e.g. Items
|
||||
strip-nbt: []
|
||||
# If the disallowed blocks listed in worldedit-config.yml should be disallowed in all edits,
|
||||
# not just where blocks patterns are used.
|
||||
# - Can prevent blocks being pasted from clipboards, etc.
|
||||
# - If fast-placement is disabled, this may cause edits to be slower.
|
||||
universal-disallowed-blocks: true
|
||||
# If legacy, mumerical, blocks IDs should be able to be used (i.e. 12:2).
|
||||
allow-legacy: true
|
||||
# If sending creature spawn events should be skipped upon creation.
|
||||
# - Will not work when setting entities directly to a world, rather than using an EditSession(Builder)
|
||||
# - Setting fast-placement to false forces writing directly to the world (for example).
|
||||
skip-creature-spawn-events: false
|
||||
# List of blocks to deny use of. Can be either an entire block type or a block with a specific property value.
|
||||
# Where block properties are specified, any blockstate with the property will be disallowed (e.g. all directions
|
||||
# of a waterlogged fence). For blocking/remapping of all occurrences of a property like waterlogged, see
|
||||
# remap-properties below.
|
||||
# To generate a blank list, substitute the default content with a set of square brackets [] instead.
|
||||
# The 'worldedit.anyblock' permission is not considered here.
|
||||
# Example block property blocking:
|
||||
# - "minecraft:conduit[waterlogged=true]"
|
||||
# - "minecraft:piston[extended=false,facing=west]"
|
||||
# - "minecraft:wheat[age=7]"
|
||||
disallowed-blocks:
|
||||
- "minecraft:wheat"
|
||||
- "minecraft:fire"
|
||||
- "minecraft:redstone_wire"
|
||||
# List of block properties that should be remapped if used in an edit. Entries should take the form
|
||||
# "property_name[value1_old:value1_new,value2_old:value2_new]". For example:
|
||||
# - "waterlogged[true:false]"
|
||||
# - "age[7:4,6:4,5:4]"
|
||||
# - "extended[true:false]"
|
||||
remap-properties: []
|
||||
672
live-server/plugins/FastAsyncWorldEdit/lang/strings.json
Normal file
672
live-server/plugins/FastAsyncWorldEdit/lang/strings.json
Normal file
|
|
@ -0,0 +1,672 @@
|
|||
{
|
||||
"prefix": "&8(&4&lFAWE&8)&7 {0}",
|
||||
"fawe.worldedit.history.find.element": "&2{0} {1} &7ago &3{2}m &6{3} &c/{4}",
|
||||
"fawe.worldedit.history.find.element.more": " - Changes: {0}\n - Bounds: {1} -> {2}\n - Extra: {3}\n - Size on Disk: {4}",
|
||||
"fawe.worldedit.history.find.hover": "{0} blocks changed, click for more info",
|
||||
"fawe.worldedit.history.distr.summary_null": "Could not find edit summary for inputs.",
|
||||
"fawe.info.lighting.propagate.selection": "Lighting has been propagated in {0} chunks.",
|
||||
"fawe.info.updated.lighting.selection": "Lighting has been updated in {0} chunks. (It may take a second for the packets to send)",
|
||||
"fawe.info.set.region": "Selection set to your current allowed region",
|
||||
"fawe.info.worldedit.toggle.tips.on": "Disabled FAWE tips.",
|
||||
"fawe.info.worldedit.toggle.tips.off": "Enabled FAWE tips.",
|
||||
"fawe.info.worldedit.bypassed": "Currently bypassing FAWE restriction.",
|
||||
"fawe.info.worldedit.restricted": "Your FAWE edits are now restricted.",
|
||||
"fawe.info.worldedit.oom.admin": "Possible options:\n - //fast\n - Do smaller edits\n - Allocate more memory\n - Disable `max-memory-percent`",
|
||||
"fawe.info.temporarily-not-working": "Temporarily not working",
|
||||
"fawe.info.light-blocks": "Light blocks are more reliable than light sources, please use the blocks. This command is deprecated and will be removed in a future version.",
|
||||
"fawe.info.update-available.build": "An update for FastAsyncWorldEdit is available. You are {0} build(s) behind.\nYou are running build {1}, the latest build is {2}.\nUpdate at {3}",
|
||||
"fawe.info.update-available.release": "A new release for FastAsyncWorldEdit is available: {0}. You are currently on {1}. Download from {2} or {3}.",
|
||||
"fawe.web.generating.link": "Uploading {0}, please wait...",
|
||||
"fawe.web.generating.link.failed": "Failed to generate download link!",
|
||||
"fawe.web.download.link": "{0}",
|
||||
"fawe.web.image.load.timeout": "Image load attempt timed out, max time: {0}s. Please try a smaller-resolution image.",
|
||||
"fawe.web.image.load.size.too-large": "Image dimensions too large! Max allowable size (width x height): {0} pixels.",
|
||||
"fawe.worldedit.general.texture.disabled": "Texturing reset",
|
||||
"fawe.worldedit.general.texture.set": "Set texturing to {1}",
|
||||
"fawe.worldedit.general.source.mask.disabled": "Global source mask disabled",
|
||||
"fawe.worldedit.general.source.mask": "Global source mask set",
|
||||
"fawe.worldedit.general.transform.disabled": "Global transform disabled",
|
||||
"fawe.worldedit.general.transform": "Global transform set",
|
||||
"fawe.worldedit.copy.command.copy": "{0} blocks were copied.",
|
||||
"fawe.worldedit.cut.command.cut.lazy": "{0} blocks will be removed on paste",
|
||||
"fawe.worldedit.paste.command.paste": "The clipboard has been pasted at {0}",
|
||||
"fawe.worldedit.history.command.undo.disabled": "Undo disabled, use: //fast",
|
||||
"fawe.worldedit.selection.selection.count": "Counted {0} blocks.",
|
||||
"fawe.worldedit.anvil.world.is.loaded": "The world shouldn't be in use when executing. Unload the world, or use -f to override (save first)",
|
||||
"fawe.worldedit.brush.brush.reset": "Reset your brush. (SHIFT + Click)",
|
||||
"fawe.worldedit.brush.brush.none": "You aren't holding a brush!",
|
||||
"fawe.worldedit.brush.brush.scroll.action.set": "Set scroll action to {0}",
|
||||
"fawe.worldedit.brush.brush.scroll.action.unset": "Removed scroll action",
|
||||
"fawe.worldedit.brush.brush.visual.mode.set": "Set visual mode to {0}",
|
||||
"fawe.worldedit.brush.brush.target.mode.set": "Set target mode to {0}",
|
||||
"fawe.worldedit.brush.brush.target.offset.set": "Set target offset to {0}",
|
||||
"fawe.worldedit.brush.brush.equipped": "Equipped brush {0}",
|
||||
"fawe.worldedit.brush.brush.try.other": "There are other more suitable brushes e.g.,\n - //br height [radius=5] [#clipboard|file=null] [rotation=0] [yscale=1.00]",
|
||||
"fawe.worldedit.brush.brush.copy": "Left click the base of an object to copy, right click to paste. Increase the brush radius if necessary.",
|
||||
"fawe.worldedit.brush.brush.height.invalid": "Invalid height map file ({0})",
|
||||
"fawe.worldedit.brush.brush.spline": "Click to add a point, click the same spot to finish",
|
||||
"fawe.worldedit.brush.brush.line.primary": "Added point {0}, click another position to create the line",
|
||||
"fawe.worldedit.brush.brush.catenary.direction": "Added point {0}, click the direction you want to create the spline",
|
||||
"fawe.worldedit.brush.brush.line.secondary": "Created spline",
|
||||
"fawe.worldedit.brush.spline.primary.2": "Added position, Click the same spot to join!",
|
||||
"fawe.worldedit.brush.brush.spline.secondary.error": "Not enough positions set!",
|
||||
"fawe.worldedit.brush.spline.secondary": "Created spline",
|
||||
"fawe.worldedit.brush.brush.source.mask.disabled": "Brush source mask disabled",
|
||||
"fawe.worldedit.brush.brush.source.mask": "Brush source mask set",
|
||||
"fawe.worldedit.brush.brush.transform.disabled": "Brush transform disabled",
|
||||
"fawe.worldedit.brush.brush.transform": "Brush transform set",
|
||||
"fawe.worldedit.rollback.rollingback.index": "Undoing {0} ...",
|
||||
"fawe.worldedit.rollback.rollback.element": "{0} undone.",
|
||||
"fawe.worldedit.tool.tool.inspect": "Inspect tool bound to {0}.",
|
||||
"fawe.worldedit.tool.tool.inspect.info": "{0} changed {1} to {2} {3} ago",
|
||||
"fawe.worldedit.tool.tool.inspect.info.footer": "Total: {0} changes",
|
||||
"fawe.worldedit.tool.tool.range.error": "Maximum range: {0}.",
|
||||
"fawe.worldedit.tool.tool.lrbuild.info": "Left-click set to {0}; right-click set to {1}.",
|
||||
"fawe.worldedit.utility.nothing.confirmed": "You have no actions pending confirmation.",
|
||||
"fawe.worldedit.schematic.schematic.move.exists": "{0} already exists",
|
||||
"fawe.worldedit.schematic.schematic.move.success": "{0} -> {1}",
|
||||
"fawe.worldedit.schematic.schematic.move.failed": "{0} no moved: {1}",
|
||||
"fawe.worldedit.schematic.schematic.loaded": "{0} loaded. Paste it with //paste",
|
||||
"fawe.worldedit.schematic.schematic.saved": "{0} saved.",
|
||||
"fawe.worldedit.schematic.schematic.none": "No files found.",
|
||||
"fawe.worldedit.schematic.schematic.load-failure": "File could not be read or it does not exist: {0}. If you are specifying a format, you may not be specifying the correct one. Sponge schematic v2 and v3 both use the .schem file extension. To allow FAWE to select the format, do not specify one. If you are using a litematica schematic, it is not supported!",
|
||||
"fawe.worldedit.clipboard.clipboard.uri.not.found": "You do not have {0} loaded",
|
||||
"fawe.worldedit.clipboard.clipboard.cleared": "Clipboard cleared",
|
||||
"fawe.worldedit.clipboard.clipboard.invalid.format": "Unknown clipboard format: {0}",
|
||||
"fawe.worldedit.visitor.visitor.block": "{0} blocks affected",
|
||||
"fawe.worldedit.selector.selector.fuzzy.pos1": "Region set and expanded from {0} {1}.",
|
||||
"fawe.worldedit.selector.selector.fuzzy.pos2": "Added expansion of {0} {1}.",
|
||||
"fawe.progress.progress.message": "{1}/{0} ({2}%) @{3}cps {4}s left",
|
||||
"fawe.progress.progress.finished": "[ Done! ]",
|
||||
"fawe.error.command.syntax": "Usage: {0}",
|
||||
"fawe.error.no-perm": "You are lacking the permission node: {0}",
|
||||
"fawe.error.block.not.allowed": "You are not allowed to use: {0}",
|
||||
"fawe.error.setting.disable": "Lacking setting: {0}",
|
||||
"fawe.error.brush.not.found": "Available brushes: {0}",
|
||||
"fawe.error.brush.incompatible": "Brush not compatible with this version",
|
||||
"fawe.error.no.region": "You have no current allowed region",
|
||||
"fawe.error.player.not.found": "Player not found: {0}",
|
||||
"fawe.error.worldedit.some.fails": "{0} blocks weren't placed because they were outside your allowed region.",
|
||||
"fawe.error.worldedit.some.fails.blockbag": "Missing blocks: {0}",
|
||||
"fawe.error.mask.angle": "Cannot combine degree with block-step",
|
||||
"fawe.error.invalid-flag": "The flag {0} is not applicable here",
|
||||
"fawe.error.lighting": "Error when attempting lighting. You may need to reload the chunks to see the edit.",
|
||||
"fawe.error.parser.invalid-data": "Invalid data: {0}",
|
||||
"fawe.error.unsupported": "Unsupported!",
|
||||
"fawe.error.invalid-block-type": "Does not match a valid block type: {0}",
|
||||
"fawe.error.invalid-block-state-property": "Cannot parse value `{0}` for property `{1}`, block state: `{2}`",
|
||||
"fawe.error.nbt.forbidden": "You are not allowed to use nbt. Lacking permission: {0}",
|
||||
"fawe.error.invalid-arguments": "Invalid amount of arguments. Expected: {0}",
|
||||
"fawe.error.unrecognised-tag": "Unrecognised tag: {0} {1}",
|
||||
"fawe.error.unknown-block-tag": "Unknown block tag: {0}",
|
||||
"fawe.error.block-tag-no-blocks": "Block tag '{0}' had no blocks.",
|
||||
"fawe.error.no-block-found": "No block found for '{0}'.",
|
||||
"fawe.error.invalid-states": "Invalid states: {0}",
|
||||
"fawe.error.no-session": "No session is available, so no clipboard is available.",
|
||||
"fawe.error.empty-clipboard": "To use '{0}', please first copy something to your clipboard",
|
||||
"fawe.error.selection-expand": "Selection cannot expand.",
|
||||
"fawe.error.selection-contract": "Selection cannot expand.",
|
||||
"fawe.error.selection-shift": "Selection cannot be shifted.",
|
||||
"fawe.error.invalid-user": "User must be provided.",
|
||||
"fawe.error.radius-too-small": "Radius must be >=0",
|
||||
"fawe.error.time-too-less": "Time must be >=0",
|
||||
"fawe.error.invalid-image": "Invalid image: {0}",
|
||||
"fawe.error.image-dimensions": "Dimensions given for image too large, max allowable size (width x height): {0} pixels.",
|
||||
"fawe.error.file-not-found": "File not found: {0}",
|
||||
"fawe.error.file-is-invalid-directory": "File is a directory: {0}",
|
||||
"fawe.error.stacktrace": "===============---=============",
|
||||
"fawe.error.no-failure": "This shouldn't result in any failure",
|
||||
"fawe.error.invalid-bracketing": "Invalid bracketing, are you missing a '{0}'.",
|
||||
"fawe.error.too-simple": "Complexity must be in the range 0-100",
|
||||
"fawe.error.outside-range": "Argument {0} outside of range {1}-{2}.",
|
||||
"fawe.error.outside-range-lower": "Argument {0} may not be less than {1}",
|
||||
"fawe.error.outside-range-upper": "Argument {0} may not be greater than {1}",
|
||||
"fawe.error.argument-size-mismatch": "Argument {0} may not be greater than argument {1}",
|
||||
"fawe.error.input-parser-exception": "Invalid empty string instead of boolean.",
|
||||
"fawe.error.invalid-boolean": "Invalid boolean {0}",
|
||||
"fawe.error.schematic.not.found": "Schematic {0} not found.",
|
||||
"fawe.error.parse.invalid-dangling-character": "Invalid dangling character {0}.",
|
||||
"fawe.error.parse.unknown-mask": "Unknown mask: {0}, See: {1}",
|
||||
"fawe.error.parse.unknown-pattern": "Unknown pattern: {0}, See: {1}",
|
||||
"fawe.error.parse.unknown-transform": "Unknown transform: {0}, See: {1}",
|
||||
"fawe.error.parse.no-clipboard": "To use {0}, please first copy something to your clipboard",
|
||||
"fawe.error.parse.no-clipboard-source": "No clipboards found at given source: {0}",
|
||||
"fawe.error.clipboard.invalid": "====== INVALID CLIPBOARD ======",
|
||||
"fawe.error.clipboard.invalid.info": "File: {0} (len: {1})",
|
||||
"fawe.error.clipboard.load.failure": "Unexpected failure loading clipboard from disk!",
|
||||
"fawe.error.clipboard.on.disk.version.mismatch": "Clipboard version mismatch: expected {0} but got {1}. It is recommended you delete the clipboard folder and restart the server.\nYour clipboard folder is located at {2}.",
|
||||
"fawe.error.limit.disallowed-block": "Your limit disallows use of block '{0}'",
|
||||
"fawe.error.limit.disallowed-property": "Your limit disallows use of property '{0}'",
|
||||
"fawe.error.region-mask-invalid": "Invalid region mask: {0}",
|
||||
"fawe.error.occurred-continuing": "Ignorable error occurred during edit: {0}",
|
||||
"fawe.error.limit.max-brush-radius": "Maximum brush radius in limit: {0}",
|
||||
"fawe.error.limit.max-radius": "Maximum radius in limit: {0}",
|
||||
"fawe.error.no-valid-on-hotbar": "No valid block types on hotbar",
|
||||
"fawe.error.no-process-non-synchronous-edit": "No processor holder was found but edit is non-synchronous",
|
||||
"fawe.cancel.count": "Cancelled {0} edits.",
|
||||
"fawe.cancel.reason.confirm": "Use //confirm to execute {0}",
|
||||
"fawe.cancel.reason.confirm.region": "Your selection is large ({0} -> {1}, containing {3} blocks). Use //confirm to execute {2}",
|
||||
"fawe.cancel.reason.confirm.radius": "Your radius is large ({0} > {1}). Use //confirm to execute {2}",
|
||||
"fawe.cancel.reason.confirm.limit": "You're exceeding your limit for this action ({0} > {1}). Use //confirm to execute {2}",
|
||||
"fawe.cancel.reason": "Your WorldEdit action was cancelled: {0}.",
|
||||
"fawe.cancel.reason.manual": "Manual cancellation",
|
||||
"fawe.cancel.reason.low.memory": "Low memory",
|
||||
"fawe.cancel.reason.max.changes": "Too many blocks changed",
|
||||
"fawe.cancel.reason.max.checks": "Too many block checks",
|
||||
"fawe.cancel.reason.max.fails": "Too many fails",
|
||||
"fawe.cancel.reason.max.tiles": "Too many block entities",
|
||||
"fawe.cancel.reason.max.entities": "Too many entities",
|
||||
"fawe.cancel.reason.max.iterations": "Max iterations",
|
||||
"fawe.cancel.reason.outside.level": "Outside world",
|
||||
"fawe.cancel.reason.outside.region": "Outside allowed region (bypass with /wea, or disable `region-restrictions` in config.yml)",
|
||||
"fawe.cancel.reason.outside.safe.region": "Outside safe edit region of +/- 30,000,000 blocks.",
|
||||
"fawe.cancel.reason.no.region": "No allowed region (bypass with /wea, or disable `region-restrictions` in config.yml)",
|
||||
"fawe.cancel.reason.no.region.reason": "No allowed region: {0}",
|
||||
"fawe.cancel.reason.no.region.plot.noworldeditflag": "Plot flag NoWorldeditFlag set",
|
||||
"fawe.cancel.reason.no.region.plot.owner.offline": "Region owner offline",
|
||||
"fawe.cancel.reason.no.region.plot.owner.only": "Only region owners may edit them",
|
||||
"fawe.cancel.reason.no.region.not.added": "Not added to region",
|
||||
"fawe.cancel.reason.player-only": "This operation requires a player, and cannot be executed from console, or without an actor.",
|
||||
"fawe.cancel.reason.actor-required": "This operation requires an actor.",
|
||||
"fawe.cancel.reason.world.limit": "This operation cannot be performed at y={0} as it is outside world limits.",
|
||||
"fawe.cancel.worldedit.failed.load.chunk": "Skipped loading chunk: {0};{1}. Try increasing chunk-wait.",
|
||||
"fawe.navigation.no.block": "No block in sight! (or too far)",
|
||||
"fawe.selection.sel.max": "{0} points maximum.",
|
||||
"fawe.selection.sel.fuzzy": "Fuzzy selector: Left click to select all contingent blocks, right click to add. To select an air cavity, use //pos1.",
|
||||
"fawe.selection.sel.fuzzy-instruction": "Select all connected blocks (magic wand)",
|
||||
"fawe.selection.sel.convex.polyhedral": "Convex polyhedral selector: Left click=First vertex, right click to add more.",
|
||||
"fawe.selection.sel.polyhedral": "Select a hollow polyhedral",
|
||||
"fawe.selection.sel.list": "For a list of selection types use: //sel list",
|
||||
"fawe.tips.tip.sel.list": "Tip: See the different selection modes with //sel list",
|
||||
"fawe.tips.tip.select.connected": "Tip: Select all connected blocks with //sel fuzzy",
|
||||
"fawe.tips.tip.set.pos1": "Tip: Use pos1 as a pattern with //set pos1",
|
||||
"fawe.tips.tip.farwand": "Tip: Select distant points with //farwand",
|
||||
"fawe.tips.tip.discord": "Need help using FAWE? https://discord.gg/intellectualsites",
|
||||
"fawe.tips.tip.lazycut": "Tip: It is safer to use //lazycut",
|
||||
"fawe.tips.tip.fast": "Tip: Set fast and without undo using //fast",
|
||||
"fawe.tips.tip.cancel": "Tip: You can //cancel an edit in progress",
|
||||
"fawe.tips.tip.mask": "Tip: Set a global destination mask with /gmask",
|
||||
"fawe.tips.tip.mask.angle": "Tip: Replace upward slopes of 3-20 blocks using //replace /[-20][-3] bedrock",
|
||||
"fawe.tips.tip.set.linear": "Tip: Set blocks linearly with //set #l3d[wood,bedrock]",
|
||||
"fawe.tips.tip.surface.spread": "Tip: Spread a flat surface with //set #surfacespread[5][0][5][#existing]",
|
||||
"fawe.tips.tip.set.hand": "Tip: Use your current hand with //set hand",
|
||||
"fawe.tips.tip.replace.regex": "Tip: Replace using regex: //replace .*_log <pattern>",
|
||||
"fawe.tips.tip.replace.regex.2": "Tip: Replace using regex: //replace .*stairs[facing=(north|south)] <pattern>",
|
||||
"fawe.tips.tip.replace.regex.3": "Tip: Replace using operators: //replace water[level>2] sand",
|
||||
"fawe.tips.tip.replace.regex.4": "Tip: Replace using operators: //replace true *[waterlogged=false]",
|
||||
"fawe.tips.tip.replace.regex.5": "Tip: Replace using operators: //replace true *[level-=1]",
|
||||
"fawe.tips.tip.replace.id": "Tip: Replace only the block id: //replace woodenstair #id[cobblestair]",
|
||||
"fawe.tips.tip.replace.light": "Tip: Remove light sources with //replace #brightness[1][15] 0",
|
||||
"fawe.tips.tip.tab.complete": "Tip: The replace command supports tab completion",
|
||||
"fawe.tips.tip.flip": "Tip: Mirror with //flip",
|
||||
"fawe.tips.tip.deform": "Tip: Reshape with //deform",
|
||||
"fawe.tips.tip.transform": "Tip: Set a transform with //gtransform",
|
||||
"fawe.tips.tip.copypaste": "Tip: Paste on click with //br copypaste",
|
||||
"fawe.tips.tip.source.mask": "Tip: Set a source mask with /gsmask <mask>",
|
||||
"fawe.tips.tip.replace.marker": "Tip: Replace a block with your full clipboard using //replace wool #fullcopy",
|
||||
"fawe.tips.tip.paste": "Tip: Place with //paste",
|
||||
"fawe.tips.tip.lazycopy": "Tip: lazycopy is faster",
|
||||
"fawe.tips.tip.download": "Tip: Try out //download",
|
||||
"fawe.tips.tip.rotate": "Tip: Orientate with //rotate",
|
||||
"fawe.tips.tip.copy.pattern": "Tip: To use as a pattern try #copy",
|
||||
"fawe.tips.tip.regen.0": "Tip: Use a biome with /regen [biome]",
|
||||
"fawe.tips.tip.regen.1": "Tip: Use a seed with /regen [biome] [seed]",
|
||||
"fawe.tips.tip.biome.pattern": "Tip: The #biome[forest] pattern can be used in any command",
|
||||
"fawe.tips.tip.biome.mask": "Tip: Restrict to a biome with the `$jungle` mask",
|
||||
"fawe.regen.time": "Regenerating region, this might take a while!",
|
||||
"worldedit.expand.description.vert": "Vertically expand the selection to world limits.",
|
||||
"worldedit.expand.expanded": "Region expanded {0} blocks",
|
||||
"worldedit.expand.expanded.vert": "Region expanded {0} blocks (top-to-bottom).",
|
||||
"worldedit.biomeinfo.lineofsight": "Biomes at line of sight point: {0}",
|
||||
"worldedit.biomeinfo.position": "Biomes at your position: {0}",
|
||||
"worldedit.biomeinfo.selection": "Biomes in your selection: {0}",
|
||||
"worldedit.biomeinfo.not-locatable": "Command sender must be present in the world to use the -p flag.",
|
||||
"worldedit.error.disabled": "This functionality is disabled (see WorldEdit configuration).",
|
||||
"worldedit.error.no-match": "No match for '{0}'.",
|
||||
"worldedit.error.unknown": "Unknown error occurred: {0}",
|
||||
"worldedit.error.parser.player-only": "Input '{0}' requires a player!",
|
||||
"worldedit.error.parser.bad-state-format": "Bad state format in {0}",
|
||||
"worldedit.error.parser.unknown-property": "Unknown property '{0}' for block '{1}'",
|
||||
"worldedit.error.parser.duplicate-property": "Duplicate property: {0}",
|
||||
"worldedit.error.parser.unknown-value": "Unknown value '{0}' for property '{1}'",
|
||||
"worldedit.error.parser.invalid-colon": "Invalid colon.",
|
||||
"worldedit.error.parser.hanging-lbracket": "Invalid format. Hanging bracket at '{0}'.",
|
||||
"worldedit.error.parser.missing-rbracket": "State is missing trailing ']'",
|
||||
"worldedit.error.incomplete-region": "Make a region selection first.",
|
||||
"worldedit.error.not-a-block": "This item is not a block.",
|
||||
"worldedit.error.unknown-entity": "Entity name '{0}' was not recognized.",
|
||||
"worldedit.error.unknown-mob": "Mob name '{0}' was not recognized.",
|
||||
"worldedit.error.parser.clipboard.missing-offset": "Offset specified with @ but no offset given. Use '#copy@[x,y,z]'.",
|
||||
"worldedit.error.parser.clipboard.missing-coordinates": "Clipboard offset needs x,y,z coordinates.",
|
||||
"worldedit.error.unknown-item": "Item name '{0}' was not recognized.",
|
||||
"worldedit.error.parser.invalid-expression": "Invalid expression: {0}",
|
||||
"worldedit.error.parser.negate-nothing": "Cannot negate nothing!",
|
||||
"worldedit.error.invalid-page": "Invalid page number",
|
||||
"worldedit.error.missing-extent": "No Extent is known",
|
||||
"worldedit.error.missing-session": "No LocalSession is known",
|
||||
"worldedit.error.missing-world": "You need to provide a world (Try //world)",
|
||||
"worldedit.error.missing-actor": "No actor is known",
|
||||
"worldedit.error.missing-player": "No player is known",
|
||||
"worldedit.error.no-file-selected": "No file selected.",
|
||||
"worldedit.error.file-resolution.outside-root": "Path is outside allowable root",
|
||||
"worldedit.error.file-resolution.resolve-failed": "Failed to resolve path",
|
||||
"worldedit.error.invalid-filename.invalid-characters": "Invalid characters or extension missing",
|
||||
"worldedit.error.invalid-number.matches": "Number expected; string \"{0}\" given.",
|
||||
"worldedit.error.invalid-number": "Number expected; string given.",
|
||||
"worldedit.error.unknown-block": "Block name '{0}' was not recognized.",
|
||||
"worldedit.error.disallowed-block": "Block '{0}' not allowed (see WorldEdit configuration).",
|
||||
"worldedit.error.max-changes": "Max blocks changed in an operation reached ({0}).",
|
||||
"worldedit.error.max-brush-radius": "Maximum brush radius (in worldedit-config.yml): {0}",
|
||||
"worldedit.error.max-radius": "Maximum radius (in worldedit-config.yml): {0}",
|
||||
"worldedit.error.unknown-direction": "Unknown direction: {0}",
|
||||
"worldedit.error.empty-clipboard": "Your clipboard is empty. Use //copy first.",
|
||||
"worldedit.error.invalid-filename": "Filename '{0}' invalid: {1}",
|
||||
"worldedit.error.file-resolution": "File '{0}' resolution error: {1}",
|
||||
"worldedit.tool.error.cannot-bind": "Can't bind tool to {0}: {1}",
|
||||
"worldedit.error.file-aborted": "File selection aborted.",
|
||||
"worldedit.error.world-unloaded": "The world was unloaded already.",
|
||||
"worldedit.error.named-world-unloaded": "The world '{0}' was unloaded already.",
|
||||
"worldedit.error.blocks-cant-be-used": "Blocks can't be used",
|
||||
"worldedit.error.unknown-tag": "Tag name '{0}' was not recognized.",
|
||||
"worldedit.error.empty-tag": "Tag name '{0}' has no contents.",
|
||||
"worldedit.error.unknown-biome": "Biome name '{0}' was not recognized.",
|
||||
"worldedit.brush.radius-too-large": "Maximum allowed brush radius: {0}",
|
||||
"worldedit.brush.apply.description": "Apply brush, apply a function to every block",
|
||||
"worldedit.brush.apply.radius": "The size of the brush",
|
||||
"worldedit.brush.apply.shape": "The shape of the region",
|
||||
"worldedit.brush.apply.type": "Type of brush to use",
|
||||
"worldedit.brush.apply.item.warning": "This brush simulates item usages. Its effects may not work on all platforms, may not be undo-able, and may cause strange interactions with other mods/plugins. Use at your own risk.",
|
||||
"worldedit.brush.paint.description": "Paint brush, apply a function to a surface",
|
||||
"worldedit.brush.paint.size": "The size of the brush",
|
||||
"worldedit.brush.paint.shape": "The shape of the region",
|
||||
"worldedit.brush.paint.density": "The density of the brush",
|
||||
"worldedit.brush.paint.type": "Type of brush to use",
|
||||
"worldedit.brush.paint.item.warning": "This brush simulates item usages. Its effects may not work on all platforms, may not be undo-able, and may cause strange interactions with other mods/plugins. Use at your own risk.",
|
||||
"worldedit.brush.sphere.equip": "Sphere brush shape equipped ({0}).",
|
||||
"worldedit.brush.cylinder.equip": "Cylinder brush shape equipped ({0} by {1}).",
|
||||
"worldedit.brush.clipboard.equip": "Clipboard brush shape equipped.",
|
||||
"worldedit.brush.smooth.equip": "Smooth brush equipped ({0} x {1}x using {2}).",
|
||||
"worldedit.brush.smooth.nofilter": "any block",
|
||||
"worldedit.brush.smooth.filter": "filter",
|
||||
"worldedit.brush.snowsmooth.equip": "SnowSmooth brush equipped ({0} x {1}x using {2}), {3} snow blocks.",
|
||||
"worldedit.brush.snowsmooth.nofilter": "any block",
|
||||
"worldedit.brush.snowsmooth.filter": "filter",
|
||||
"worldedit.brush.extinguish.equip": "Extinguisher equipped ({0}).",
|
||||
"worldedit.brush.gravity.equip": "Gravity brush equipped ({0}).",
|
||||
"worldedit.brush.butcher.equip": "Butcher brush equipped ({0}).",
|
||||
"worldedit.brush.operation.equip": "Set brush to {0}.",
|
||||
"worldedit.brush.morph.equip": "Morph brush shape equipped: {0}.",
|
||||
"worldedit.brush.biome.column-supported-types": "This brush shape is not supported with whole-column brushing, try the cylinder shape.",
|
||||
"worldedit.brush.none.equip": "Brush unbound from your current item.",
|
||||
"worldedit.brush.none.equipped": "You have no brush bound to your current item. Try /brush sphere for a basic brush.",
|
||||
"worldedit.setbiome.changed": "Biomes were changed in {0} columns. You may have to rejoin your game (or close and reopen your world) to see a change.",
|
||||
"worldedit.setbiome.warning": "You may have to re-join your game (or close and re-open your world) to see changes.",
|
||||
"worldedit.setbiome.not-locatable": "Command sender must be present in the world to use the -p flag.",
|
||||
"worldedit.drawsel.disabled": "Server CUI disabled.",
|
||||
"worldedit.drawsel.enabled": "Server CUI enabled. This only supports cuboid regions, with a maximum size of {0}x{1}x{2}.",
|
||||
"worldedit.drawsel.disabled.already": "Server CUI already disabled.",
|
||||
"worldedit.drawsel.enabled.already": "Server CUI already enabled.",
|
||||
"worldedit.limit.too-high": "Your maximum allowable limit is {0}.",
|
||||
"worldedit.limit.set": "Block change limit set to {0}.",
|
||||
"worldedit.limit.return-to-default": "(Use //limit to go back to the default.)",
|
||||
"worldedit.timeout.too-high": "Your maximum allowable timeout is {0}ms.",
|
||||
"worldedit.timeout.set": "Timeout time set to {0}ms.",
|
||||
"worldedit.timeout.return-to-default": " (Use //timeout to go back to the default.)",
|
||||
"worldedit.fast.disabled": "Fast mode disabled.",
|
||||
"worldedit.fast.enabled": "Fast mode enabled. Changes won't be written to history (//undo is disabled). Lighting in the affected chunks may be wrong and/or you may need to rejoin to see changes.",
|
||||
"worldedit.fast.disabled.already": "Fast mode already disabled.",
|
||||
"worldedit.fast.enabled.already": "Fast mode already enabled.",
|
||||
"worldedit.perf.sideeffect.set": "Side effect \"{0}\" set to {1}",
|
||||
"worldedit.perf.sideeffect.get": "Side effect \"{0}\" is set to {1}",
|
||||
"worldedit.perf.sideeffect.already-set": "Side effect \"{0}\" is already {1}",
|
||||
"worldedit.perf.sideeffect.set-all": "All side effects set to {0}",
|
||||
"worldedit.reorder.current": "The reorder mode is {0}",
|
||||
"worldedit.reorder.set": "The reorder mode is now {0}",
|
||||
"worldedit.gmask.disabled": "Global mask disabled.",
|
||||
"worldedit.gmask.set": "Global mask set.",
|
||||
"worldedit.toggleplace.pos1": "Now placing at pos #1.",
|
||||
"worldedit.toggleplace.player": "Now placing at the block you stand in.",
|
||||
"worldedit.toggleplace.not-locatable": "Cannot toggle placing in this context.",
|
||||
"worldedit.searchitem.too-short": "Enter a longer search string (len > 2).",
|
||||
"worldedit.searchitem.either-b-or-i": "You cannot use both the 'b' and 'i' flags simultaneously.",
|
||||
"worldedit.searchitem.searching": "(Please wait... searching items.)",
|
||||
"worldedit.watchdog.no-hook": "This platform has no watchdog hook.",
|
||||
"worldedit.watchdog.active.already": "Watchdog hook already active.",
|
||||
"worldedit.watchdog.inactive.already": "Watchdog hook already inactive.",
|
||||
"worldedit.watchdog.active": "Watchdog hook now active.",
|
||||
"worldedit.watchdog.inactive": "Watchdog hook now inactive.",
|
||||
"worldedit.world.remove": "Removed world override.",
|
||||
"worldedit.world.set": "Set the world override to {0}. (Use //world to go back to default)",
|
||||
"worldedit.undo.undone": "Undid {0} available edits.",
|
||||
"worldedit.undo.none": "Nothing left to undo.",
|
||||
"worldedit.redo.redone": "Redid {0} available edits.",
|
||||
"worldedit.redo.none": "Nothing left to redo.",
|
||||
"worldedit.clearhistory.cleared": "History cleared.",
|
||||
"worldedit.raytrace.noblock": "No block in sight!",
|
||||
"worldedit.raytrace.require-player": "Raytracing commands require a player!",
|
||||
"worldedit.restore.not-configured": "Snapshot/backup restore is not configured.",
|
||||
"worldedit.restore.not-available": "That snapshot does not exist or is not available.",
|
||||
"worldedit.restore.failed": "Failed to load snapshot: {0}",
|
||||
"worldedit.restore.loaded": "Snapshot '{0}' loaded; now restoring...",
|
||||
"worldedit.restore.restored": "Restored; {0} missing chunks and {1} other errors.",
|
||||
"worldedit.restore.none-for-specific-world": "No snapshots were found for world '{0}'.",
|
||||
"worldedit.restore.none-for-world": "No snapshots were found for this world.",
|
||||
"worldedit.restore.none-found": "No snapshots were found.",
|
||||
"worldedit.restore.none-found-console": "No snapshots were found. See console for details.",
|
||||
"worldedit.restore.chunk-not-present": "Chunks were not present in snapshot.",
|
||||
"worldedit.restore.chunk-load-failed": "No chunks could be loaded. (Bad archive?)",
|
||||
"worldedit.restore.block-place-failed": "Errors prevented any blocks from being restored.",
|
||||
"worldedit.restore.block-place-error": "Last error: {0}",
|
||||
"worldedit.snapshot.use.newest": "Now using newest snapshot.",
|
||||
"worldedit.snapshot.use": "Snapshot set to: {0}",
|
||||
"worldedit.snapshot.none-before": "Couldn't find a snapshot before {0}.",
|
||||
"worldedit.snapshot.none-after": "Couldn't find a snapshot after {0}.",
|
||||
"worldedit.snapshot.index-above-0": "Invalid index, must be greater than or equal to 1.",
|
||||
"worldedit.snapshot.index-oob": "Invalid index, must be between 1 and {0}.",
|
||||
"worldedit.schematic.unknown-format": "Unknown schematic format: {0}.",
|
||||
"worldedit.schematic.load.does-not-exist": "Schematic {0} does not exist!",
|
||||
"worldedit.schematic.load.loading": "(Please wait... loading schematic.)",
|
||||
"worldedit.schematic.load.unsupported-version": "This schematic is not supported. Version: {0}. If you are using a litematica schematic, it is not supported!",
|
||||
"worldedit.schematic.save.already-exists": "That schematic already exists. Use the -f flag to overwrite it.",
|
||||
"worldedit.schematic.save.failed-directory": "Could not create folder for schematics!",
|
||||
"worldedit.schematic.save.saving": "(Please wait... saving schematic.)",
|
||||
"worldedit.schematic.save.still-saving": "(Please wait... still saving schematic.)",
|
||||
"worldedit.schematic.share.unsupported-format": "The schematic share destination \"{0}\" does not support the \"{1}\" format.",
|
||||
"worldedit.schematic.share.response.arkitektonika.download" : "Download: {0}",
|
||||
"worldedit.schematic.share.response.arkitektonika.delete" : "Delete: {0}",
|
||||
"worldedit.schematic.share.response.arkitektonika.click-here" : "[Click here]",
|
||||
"worldedit.schematic.delete.empty": "Schematic {0} not found!",
|
||||
"worldedit.schematic.delete.does-not-exist": "Schematic {0} does not exist!",
|
||||
"worldedit.schematic.delete.failed": "Deletion of {0} failed! Is it read-only?",
|
||||
"worldedit.schematic.delete.deleted": "{0} has been deleted.",
|
||||
"worldedit.schematic.formats.title": "Available clipboard formats (Name: Lookup names)",
|
||||
"worldedit.schematic.load.symbol": "[L]",
|
||||
"worldedit.schematic.plus.symbol": "[+]",
|
||||
"worldedit.schematic.minus.symbol": "[-]",
|
||||
"worldedit.schematic.x.symbol": "[X]",
|
||||
"worldedit.schematic.0.symbol": "[O]",
|
||||
"worldedit.schematic.dash.symbol": " - ",
|
||||
"worldedit.schematic.click-to-load": "Click to load",
|
||||
"worldedit.schematic.load": "Load",
|
||||
"worldedit.schematic.list": "List",
|
||||
"worldedit.schematic.available": "Available schematics",
|
||||
"worldedit.schematic.unload": "Unload",
|
||||
"worldedit.schematic.delete": "delete",
|
||||
"worldedit.schematic.visualize": "visualize",
|
||||
"worldedit.schematic.clipboard": "Add to (multi-)clipboard",
|
||||
"worldedit.schematic.unknown-filename": "Unknown filename: {0}",
|
||||
"worldedit.schematic.file-not-exist": "File could not be read or it does not exist: {0}",
|
||||
"worldedit.schematic.already-exists": "That schematic already exists!",
|
||||
"worldedit.schematic.failed-to-save": "Failed to save schematic",
|
||||
"worldedit.schematic.directory-does-not-exist": "Directory '{0}' does not exist!",
|
||||
"worldedit.schematic.file-perm-fail": "Creation of '{0}' failed! Check file permission.",
|
||||
"worldedit.schematic.sorting-old-new": "Cannot sort by oldest and newest.",
|
||||
"worldedit.schematic.unsupported-minecraft-version": "This version of WorldEdit does not support your Minecraft version. Schematics will not work until this is resolved.",
|
||||
"worldedit.pos.already-set": "Position already set.",
|
||||
"worldedit.pos.console-require-coords": "You must provide coordinates as console.",
|
||||
"worldedit.hpos.no-block": "No block in sight!",
|
||||
"worldedit.hpos.already-set": "Position already set.",
|
||||
"worldedit.chunk.selected-multiple": "Chunks selected: ({0}, {1}, {2}) - ({3}, {4}, {5})",
|
||||
"worldedit.chunk.selected": "Chunk selected: {0}, {1}, {2}",
|
||||
"worldedit.wand.invalid": "Wand item is mis-configured or disabled.",
|
||||
"worldedit.wand.selwand.info": "Left click: select pos #1; Right click: select pos #2",
|
||||
"worldedit.wand.selwand.now.tool": "The selection wand is now a normal tool. You can disable it with {0} and rebind it to any item with {1} or get a new wand with {2}.",
|
||||
"worldedit.wand.navwand.info": "Left click: jump to location; Right click: pass through walls",
|
||||
"worldedit.contract.contracted": "Region contracted {0} blocks.",
|
||||
"worldedit.shift.shifted": "Region shifted.",
|
||||
"worldedit.outset.outset": "Region outset.",
|
||||
"worldedit.inset.inset": "Region inset.",
|
||||
"worldedit.trim.trim": "Region trimmed.",
|
||||
"worldedit.trim.no-blocks": "No blocks matched the trim mask.",
|
||||
"worldedit.size.offset": "{0}: {1} @ {2} ({3} blocks)",
|
||||
"worldedit.size.type": "Type: {0}",
|
||||
"worldedit.size.size": "Size: {0}",
|
||||
"worldedit.size.distance": "Cuboid distance: {0}",
|
||||
"worldedit.size.blocks": "# of blocks: {0}",
|
||||
"worldedit.count.counted": "Counted: {0}",
|
||||
"worldedit.distr.no-blocks": "No blocks counted.",
|
||||
"worldedit.distr.no-previous": "No previous distribution.",
|
||||
"worldedit.distr.total": "Total Block Count: {0}",
|
||||
"worldedit.select.cleared": "Selection cleared.",
|
||||
"worldedit.select.cuboid.message": "Cuboid: left click for point 1, right click for point 2",
|
||||
"worldedit.select.cuboid.description": "Select two corners of a cuboid",
|
||||
"worldedit.select.extend.message": "Cuboid: left click for a starting point, right click to extend",
|
||||
"worldedit.select.extend.description": "Fast cuboid selection mode",
|
||||
"worldedit.select.poly.message": "2D polygon selector: Left/right click to add a point.",
|
||||
"worldedit.select.poly.limit-message": "{0} points maximum.",
|
||||
"worldedit.select.poly.description": "Select a 2D polygon with height",
|
||||
"worldedit.select.ellipsoid.message": "Ellipsoid selector: left click=center, right click to extend",
|
||||
"worldedit.select.ellipsoid.description": "Select an ellipsoid",
|
||||
"worldedit.select.sphere.message": "Sphere selector: left click=center, right click to set radius",
|
||||
"worldedit.select.sphere.description": "Select a sphere",
|
||||
"worldedit.select.cyl.message": "Cylindrical selector: Left click=center, right click to extend",
|
||||
"worldedit.select.cyl.description": "Select a cylinder",
|
||||
"worldedit.select.convex.message": "Convex polyhedral selector: Left click=First vertex, right click to add more.",
|
||||
"worldedit.select.convex.limit-message": "{0} points maximum.",
|
||||
"worldedit.select.convex.description": "Select a convex polyhedral",
|
||||
"worldedit.select.default-set": "Your default region selector is now {0}.",
|
||||
"worldedit.chunkinfo.chunk": "Chunk: {0}, {1}",
|
||||
"worldedit.chunkinfo.old-filename": "Old format: {0}",
|
||||
"worldedit.chunkinfo.mcregion-filename": "McRegion: region/{0}",
|
||||
"worldedit.listchunks.listfor": "Listing chunks for: {0}",
|
||||
"worldedit.drain.drained": "{0} blocks have been drained.",
|
||||
"worldedit.fill.created": "{0} blocks have been filled.",
|
||||
"worldedit.fillr.created": "{0} blocks have been filled.",
|
||||
"worldedit.fixlava.fixed": "{0} blocks have been fixed.",
|
||||
"worldedit.fixwater.fixed": "{0} blocks have been fixed.",
|
||||
"worldedit.removeabove.removed": "{0} blocks have been removed.",
|
||||
"worldedit.removebelow.removed": "{0} blocks have been removed.",
|
||||
"worldedit.removenear.removed": "{0} blocks have been removed.",
|
||||
"worldedit.replacenear.replaced": "{0} blocks have been replaced.",
|
||||
"worldedit.snow.created": "{0} surfaces have been covered.",
|
||||
"worldedit.thaw.removed": "{0} blocks have been thawed.",
|
||||
"worldedit.green.changed": "{0} blocks have been greened.",
|
||||
"worldedit.extinguish.removed": "{0} fires have been extinguished.",
|
||||
"worldedit.butcher.killed": "{0} mobs have been killed in a radius of {1}.",
|
||||
"worldedit.butcher.explain-all": "Use -1 to remove all mobs in loaded chunks",
|
||||
"worldedit.remove.removed": "{0} entities have been marked for removal.",
|
||||
"worldedit.remove.explain-all": "Use -1 to remove all entities in loaded chunks",
|
||||
"worldedit.calc.invalid": "'{0}' could not be parsed as a valid expression",
|
||||
"worldedit.calc.invalid.with-error": "'{0}' could not be parsed as a valid expression: '{1}'",
|
||||
"worldedit.paste.pasted": "The clipboard has been pasted at {0}",
|
||||
"worldedit.paste.selected": "Selected clipboard paste region.",
|
||||
"worldedit.rotate.no-interpolation": "Note: Interpolation is not yet supported, so angles that are multiples of 90 is recommended.",
|
||||
"worldedit.rotate.rotated": "The clipboard copy has been rotated.",
|
||||
"worldedit.flip.flipped": "The clipboard copy has been flipped.",
|
||||
"worldedit.clearclipboard.cleared": "Clipboard cleared.",
|
||||
"worldedit.set.done": "Operation completed ({0}).",
|
||||
"worldedit.set.done.verbose": "Operation completed ({0}).",
|
||||
"worldedit.line.changed": "{0} blocks have been changed.",
|
||||
"worldedit.line.invalid-type": "//line only works with cuboid selections or convex polyhedral selections",
|
||||
"worldedit.line.cuboid-only": "//line only works with cuboid selections",
|
||||
"worldedit.curve.changed": "{0} blocks have been changed.",
|
||||
"worldedit.curve.invalid-type": "//curve only works with convex polyhedral selections",
|
||||
"worldedit.curve.convex-only": "//curve only works with convex polyhedral selections",
|
||||
"worldedit.replace.replaced": "{0} blocks have been replaced.",
|
||||
"worldedit.stack.changed": "{0} blocks changed. Undo with //undo",
|
||||
"worldedit.stack.intersecting-region": "Stack offset must not collide with the region when using block units",
|
||||
"worldedit.regen.regenerated": "Region regenerated.",
|
||||
"worldedit.regen.failed": "Unable to regenerate chunks. Check console for details.",
|
||||
"worldedit.walls.changed": "{0} blocks have been changed.",
|
||||
"worldedit.faces.changed": "{0} blocks have been changed.",
|
||||
"worldedit.overlay.overlaid": "{0} blocks have been overlaid.",
|
||||
"worldedit.naturalize.naturalized": "{0} block(s) have been made to look more natural.",
|
||||
"worldedit.center.changed": "Center set. ({0} blocks changed)",
|
||||
"worldedit.smooth.changed": "Terrain's height map smoothed. {0} blocks changed.",
|
||||
"worldedit.snowsmooth.changed": "Snow's height map smoothed. {0} blocks changed.",
|
||||
"worldedit.move.moved": "{0} blocks moved.",
|
||||
"worldedit.deform.deformed": "{0} blocks have been deformed.",
|
||||
"worldedit.hollow.changed": "{0} blocks have been changed.",
|
||||
"worldedit.forest.created": "{0} trees created.",
|
||||
"worldedit.flora.created": "{0} flora created.",
|
||||
"worldedit.unstuck.moved": "There you go!",
|
||||
"worldedit.ascend.obstructed": "No free spot above you found.",
|
||||
"worldedit.ascend.moved": "Ascended {0} levels.",
|
||||
"worldedit.descend.obstructed": "No free spot below you found.",
|
||||
"worldedit.descend.moved": "Descended {0} levels.",
|
||||
"worldedit.ceil.obstructed": "No free spot above you found.",
|
||||
"worldedit.ceil.moved": "Woosh!",
|
||||
"worldedit.thru.obstructed": "No free spot ahead of you found.",
|
||||
"worldedit.thru.moved": "Woosh!",
|
||||
"worldedit.jumpto.moved": "Poof!",
|
||||
"worldedit.jumpto.none": "No block in sight (or too far away)!",
|
||||
"worldedit.up.obstructed": "You would hit something above you.",
|
||||
"worldedit.up.moved": "Woosh!",
|
||||
"worldedit.cone.invalid-radius": "You must either specify 1 or 2 radius values.",
|
||||
"worldedit.cone.created": "{0} blocks have been created.",
|
||||
"worldedit.cyl.invalid-radius": "You must either specify 1 or 2 radius values.",
|
||||
"worldedit.cyl.created": "{0} blocks have been created.",
|
||||
"worldedit.hcyl.thickness-too-large": "Thickness cannot be larger than x or z radii.",
|
||||
"worldedit.sphere.invalid-radius": "You must either specify 1 or 3 radius values.",
|
||||
"worldedit.sphere.created": "{0} blocks have been created.",
|
||||
"worldedit.blob.created": "{0} blocks have been created.",
|
||||
"worldedit.feature.created": "Feature created, {0} blocks placed.",
|
||||
"worldedit.generate.feature.failed": "This feature cannot go here. Ensure the area meets the requirements.",
|
||||
"worldedit.forestgen.created": "{0} trees created.",
|
||||
"worldedit.pumpkins.created": "{0} pumpkin patches created.",
|
||||
"worldedit.feature.failed": "Failed to generate feature. Is it a valid spot for it?",
|
||||
"worldedit.pyramid.created": "{0} blocks have been created.",
|
||||
"worldedit.generate.created": "{0} blocks have been created.",
|
||||
"worldedit.generatebiome.changed": "{0} biomes affected.",
|
||||
"worldedit.structure.created": "Structure created, {0} blocks placed.",
|
||||
"worldedit.generate.structure.failed": "Failed to generate structure. Is it a valid spot for it?",
|
||||
"worldedit.reload.config": "Configuration reloaded!",
|
||||
"worldedit.report.written": "FAWE report written to {0}",
|
||||
"worldedit.report.error": "Failed to write report: {0}",
|
||||
"worldedit.report.callback": "FAWE report: {0}.report",
|
||||
"worldedit.timezone.invalid": "Invalid timezone",
|
||||
"worldedit.timezone.set": "Timezone set for this session to: {0}",
|
||||
"worldedit.timezone.current": "The current time in that timezone is: {0}",
|
||||
"worldedit.version.version": "FAWE version:\n - Date {0}\n - Commit {1}\n - Build {2}\n - Platform {3}",
|
||||
"worldedit.trace.no-tracing-extents": "Trace: No extent was used.",
|
||||
"worldedit.trace.action-failed": "Trace: Action(s) {0} at {1} discarded by extent {2}",
|
||||
"worldedit.trace.active.already": "Trace mode already active.",
|
||||
"worldedit.trace.inactive.already": "Trace mode already inactive.",
|
||||
"worldedit.trace.active": "Trace mode now active.",
|
||||
"worldedit.trace.inactive": "Trace mode now inactive.",
|
||||
"worldedit.command.time-elapsed": "{0}s elapsed (history: {1} changed; {2} blocks/sec).",
|
||||
"worldedit.command.permissions": "You are not permitted to do that. Are you in the right mode?",
|
||||
"worldedit.command.player-only": "This command must be used with a player.",
|
||||
"worldedit.command.error.report": "&cPlease report this error: [See console]",
|
||||
"worldedit.command.deprecation": "This command is deprecated.",
|
||||
"worldedit.command.deprecation-message": "Please use '{0}' instead.",
|
||||
"worldedit.pastebin.uploading": "(Please wait... sending output to paste service...)",
|
||||
"worldedit.session.cant-find-session": "Unable to find session for {0}",
|
||||
"worldedit.platform.no-file-dialog": "File dialogs are not supported in your environment.",
|
||||
"worldedit.tool.max-block-changes": "Max blocks change limit reached.",
|
||||
"worldedit.tool.no-block": "No block in sight!",
|
||||
"worldedit.tool.repl.equip": "Block replacer tool bound to {0}.",
|
||||
"worldedit.tool.repl.switched": "Replacer tool switched to: {0}",
|
||||
"worldedit.tool.data-cycler.equip": "Block data cycler tool bound to {0}.",
|
||||
"worldedit.tool.data-cycler.block-not-permitted": "You are not permitted to cycle the data value of that block.",
|
||||
"worldedit.tool.data-cycler.cant-cycle": "That block's data cannot be cycled!",
|
||||
"worldedit.tool.data-cycler.new-value": "Value of {0} is now {1}.",
|
||||
"worldedit.tool.data-cycler.cycling": "Now cycling {0}.",
|
||||
"worldedit.tool.deltree.equip": "Floating tree remover tool bound to {0}.",
|
||||
"worldedit.tool.deltree.not-tree": "That's not a tree.",
|
||||
"worldedit.tool.deltree.not-floating": "That's not a floating tree.",
|
||||
"worldedit.tool.tree.equip": "Tree tool bound to {0}.",
|
||||
"worldedit.tool.tree.obstructed": "A tree can't go there.",
|
||||
"worldedit.tool.structure.equip": "Structure placer tool bound to {0}.",
|
||||
"worldedit.tool.feature.equip": "Feature placer tool bound to {0}.",
|
||||
"worldedit.tool.info.equip": "Info tool bound to {0}.",
|
||||
"worldedit.tool.inspect.equip": "Inspect tool bound to {0}.",
|
||||
"worldedit.tool.info.blockstate.hover": "Block state (click to copy)",
|
||||
"worldedit.tool.info.internalid.hover": "Internal ID",
|
||||
"worldedit.tool.info.legacy.hover": "Legacy id:data",
|
||||
"worldedit.tool.info.light.hover": "Block Light/Light Above",
|
||||
"worldedit.tool.none.equip": "Tool unbound from your current item.",
|
||||
"worldedit.tool.selwand.equip": "Selection wand bound to {0}.",
|
||||
"worldedit.tool.navwand.equip": "Navigation wand bound to {0}.",
|
||||
"worldedit.tool.floodfill.equip": "Block flood fill tool bound to {0}.",
|
||||
"worldedit.tool.farwand.equip": "Far wand tool bound to {0}.",
|
||||
"worldedit.tool.lrbuild.equip": "Long-range building tool bound to {0}.",
|
||||
"worldedit.tool.lrbuild.set": "Left-click set to {0}; right-click set to {1}.",
|
||||
"worldedit.tool.stack.equip": "Stack tool bound to {0}.",
|
||||
"worldedit.tool.unbind-instruction": "Run {0} while holding the item to unbind it.",
|
||||
"worldedit.tool.superpickaxe.mode.single": "Mode is now single. Left click with a pickaxe. // to disable.",
|
||||
"worldedit.tool.superpickaxe.mode.area": "Mode is now area. Left click with a pickaxe. // to disable.",
|
||||
"worldedit.tool.superpickaxe.mode.recursive": "Mode is now recursive. Left click with a pickaxe. // to disable.",
|
||||
"worldedit.tool.superpickaxe.max-range": "Maximum range is {0}.",
|
||||
"worldedit.tool.superpickaxe.enabled.already": "Super pickaxe already enabled.",
|
||||
"worldedit.tool.superpickaxe.disabled.already": "Super pickaxe already disabled.",
|
||||
"worldedit.tool.superpickaxe.enabled": "Super pickaxe enabled.",
|
||||
"worldedit.tool.superpickaxe.disabled": "Super pickaxe disabled.",
|
||||
"worldedit.tool.mask.set": "Brush mask set.",
|
||||
"worldedit.tool.mask.disabled": "Brush mask disabled.",
|
||||
"worldedit.tool.material.set": "Brush material set.",
|
||||
"worldedit.tool.range.set": "Brush range set.",
|
||||
"worldedit.tool.size.set": "Brush size set.",
|
||||
"worldedit.tool.tracemask.set": "Trace mask set.",
|
||||
"worldedit.tool.tracemask.disabled": "Trace mask disabled.",
|
||||
"worldedit.execute.script-permissions": "You don't have permission to use that script.",
|
||||
"worldedit.executelast.no-script": "Use /cs with a script name first.",
|
||||
"worldedit.script.read-error": "Script read error: {0}",
|
||||
"worldedit.script.unsupported": "Only .js scripts are currently supported",
|
||||
"worldedit.script.file-not-found": "Script does not exist: {0}",
|
||||
"worldedit.script.no-script-engine": "Failed to find an installed script engine.\nPlease see https://worldedit.enginehub.org/en/latest/usage/other/craftscripts/",
|
||||
"worldedit.script.failed": "Failed to execute: {0}",
|
||||
"worldedit.script.failed-console": "Failed to execute (see console): {0}",
|
||||
"worldedit.operation.affected.biome": "{0} biomes affected",
|
||||
"worldedit.operation.affected.block": "{0} blocks affected",
|
||||
"worldedit.operation.affected.column": "{0} columns affected",
|
||||
"worldedit.operation.affected.entity": "{0} entities affected",
|
||||
"worldedit.operation.deform.expression": "deformed using {0}",
|
||||
"worldedit.error.parser.invalid-nbt": "Invalid NBT Data in input: '{0}'. Error: {1}",
|
||||
"worldedit.selection.convex.info.vertices": "Vertices: {0}",
|
||||
"worldedit.selection.convex.info.triangles": "Triangles: {0}",
|
||||
"worldedit.selection.convex.explain.primary": "Started new selection with vertex {0}.",
|
||||
"worldedit.selection.convex.explain.secondary": "Added vertex {0} to the selection.",
|
||||
"worldedit.selection.cuboid.info.pos1": "Position 1: {0}",
|
||||
"worldedit.selection.cuboid.info.pos2": "Position 2: {0}",
|
||||
"worldedit.selection.cuboid.explain.primary": "First position set to {0}.",
|
||||
"worldedit.selection.cuboid.explain.primary-area": "First position set to {0} ({1}).",
|
||||
"worldedit.selection.cuboid.explain.secondary": "Second position set to {0}.",
|
||||
"worldedit.selection.cuboid.explain.secondary-area": "Second position set to {0} ({1}).",
|
||||
"worldedit.selection.extend.explain.primary": "Started selection at {0} ({1}).",
|
||||
"worldedit.selection.extend.explain.secondary": "Extended selection to encompass {0} ({1}).",
|
||||
"worldedit.selection.ellipsoid.info.center": "Center: {0}",
|
||||
"worldedit.selection.ellipsoid.info.radius": "X/Y/Z Radius: {0}",
|
||||
"worldedit.selection.ellipsoid.explain.primary": "Center position set to {0}.",
|
||||
"worldedit.selection.ellipsoid.explain.primary-area": "Center position set to {0} ({1}).",
|
||||
"worldedit.selection.ellipsoid.explain.secondary": "Radius set to {0}.",
|
||||
"worldedit.selection.ellipsoid.explain.secondary-area": "Radius set to {0} ({1}).",
|
||||
"worldedit.selection.cylinder.info.center": "Center: {0}",
|
||||
"worldedit.selection.cylinder.info.radius": "Radius: {0}",
|
||||
"worldedit.selection.cylinder.explain.primary": "Starting a new cylindrical selection at {0}.",
|
||||
"worldedit.selection.cylinder.explain.secondary": "Radius set to {0}/{1} blocks. ({2})",
|
||||
"worldedit.selection.cylinder.explain.secondary-missing": "You must select the center point before setting the radius.",
|
||||
"worldedit.selection.polygon2d.info": "# points: {0}",
|
||||
"worldedit.selection.polygon2d.explain.primary": "Starting a new polygon at {0}.",
|
||||
"worldedit.selection.polygon2d.explain.secondary": "Added point #{0} at {1}.",
|
||||
"worldedit.selection.sphere.explain.secondary": "Radius set to {0}.",
|
||||
"worldedit.selection.sphere.explain.secondary-defined": "Radius set to {0} ({1}).",
|
||||
"worldedit.sideeffect.history": "History",
|
||||
"worldedit.sideeffect.history.description": "Writes history of the change",
|
||||
"worldedit.sideeffect.heightmaps": "Heightmaps",
|
||||
"worldedit.sideeffect.heightmaps.description": "Updates heightmaps",
|
||||
"worldedit.sideeffect.lighting": "Lighting",
|
||||
"worldedit.sideeffect.lighting.description": "Updates block lighting",
|
||||
"worldedit.sideeffect.neighbors": "Neighbors",
|
||||
"worldedit.sideeffect.neighbors.description": "Updates shapes of blocks in the edit",
|
||||
"worldedit.sideeffect.update": "Update",
|
||||
"worldedit.sideeffect.update.description": "Notifies the changed block",
|
||||
"worldedit.sideeffect.validation": "Validation",
|
||||
"worldedit.sideeffect.validation.description": "Validates and fixes inconsistent world state, such as disconnected blocks",
|
||||
"worldedit.sideeffect.entity_ai": "Entity AI",
|
||||
"worldedit.sideeffect.entity_ai.description": "Updates Entity AI paths for the block changes",
|
||||
"worldedit.sideeffect.events": "Mod/Plugin Events",
|
||||
"worldedit.sideeffect.events.description": "Tells other mods/plugins about these changes when applicable",
|
||||
"worldedit.sideeffect.state.on": "On",
|
||||
"worldedit.sideeffect.state.delayed": "Delayed",
|
||||
"worldedit.sideeffect.state.off": "Off",
|
||||
"worldedit.sideeffect.box.current": "Current",
|
||||
"worldedit.sideeffect.box.change-to": "Click to set to {0}",
|
||||
"worldedit.help.command-not-found": "The command '{0}' could not be found.",
|
||||
"worldedit.help.no-subcommands": "'{0}' has no sub-commands. (Maybe '{1}' is for a parameter?)",
|
||||
"worldedit.help.subcommand-not-found": "The sub-command '{0}' under '{1}' could not be found.",
|
||||
"worldedit.cli.stopping": "Stopping!",
|
||||
"worldedit.cli.unknown-command": "Unknown command!",
|
||||
"worldedit.version.bukkit.unsupported-adapter": "This FastAsyncWorldEdit version does not fully support your version of Bukkit. Block entities (e.g. chests) will be empty, block properties (e.g. rotation) will be missing, and other things may not work. Update FastAsyncWorldEdit to restore this functionality:\n{0}",
|
||||
"worldedit.bukkit.no-edit-without-adapter": "Editing on unsupported versions is disabled."
|
||||
}
|
||||
98
live-server/plugins/FastAsyncWorldEdit/worldedit-config.yml
Normal file
98
live-server/plugins/FastAsyncWorldEdit/worldedit-config.yml
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
#
|
||||
# WorldEdit's Configuration File
|
||||
#
|
||||
# About editing this file:
|
||||
# - DO NOT USE TABS. You MUST use spaces or Bukkit will complain and post
|
||||
# errors. If you use an editor, like Notepad++ (recommended for Windows
|
||||
# users), you must configure it to "replace tabs with spaces."
|
||||
# This can be changed in Settings > Preferences > Language Menu.
|
||||
# - Don't get rid of indentations. They are indented so some entries that are
|
||||
# in categories, like "max-blocks-changed", are placed in the "limits"
|
||||
# category.
|
||||
# - If you want to check the format of this file before putting it
|
||||
# into WorldEdit, paste it into https://yaml-online-parser.appspot.com/
|
||||
# and see if it gives you "ERROR:".
|
||||
# - Lines starting with # are comments, so they are ignored.
|
||||
# - If you want to allow blocks, make sure to change "disallowed-blocks" to []
|
||||
#
|
||||
|
||||
limits:
|
||||
max-blocks-changed:
|
||||
# Ignored, use FAWE config limits
|
||||
default: -1
|
||||
maximum: -1
|
||||
max-polygonal-points:
|
||||
default: -1
|
||||
maximum: 20
|
||||
# radius, superpickaxe, brush radius are ignored, use FAWE config limits
|
||||
max-radius: -1
|
||||
max-super-pickaxe-size: 5
|
||||
max-brush-radius: 100
|
||||
butcher-radius:
|
||||
default: -1
|
||||
# Ignored, use FAWE config limits
|
||||
maximum: -1
|
||||
disallowed-blocks:
|
||||
- "minecraft:wheat"
|
||||
- "minecraft:fire"
|
||||
- "minecraft:redstone_wire"
|
||||
|
||||
use-inventory:
|
||||
enable: false
|
||||
allow-override: true
|
||||
creative-mode-overrides: false
|
||||
|
||||
logging:
|
||||
log-commands: false
|
||||
file: worldedit.log
|
||||
# The format of custom log message. This is java general format string (java.util.Formatter). Arguments are:
|
||||
# 1$ : date - a Date object representing event time of the log record.
|
||||
# 2$ : source - a string representing the caller, if available; otherwise, the logger's name.
|
||||
# 3$ : logger - the logger's name.
|
||||
# 4$ : level - the log level.
|
||||
# 5$ : message - the formatted log message returned from the Formatter.formatMessage(LogRecord) method. It uses java.text formatting and does not use the java.util.Formatter format argument.
|
||||
# 6$ : thrown - a string representing the throwable associated with the log record and its backtrace beginning with a newline character, if any; otherwise, an empty string.
|
||||
# For details see:
|
||||
# https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html
|
||||
# https://docs.oracle.com/javase/8/docs/api/java/util/logging/SimpleFormatter.html#format-java.util.logging.LogRecord-
|
||||
format: "[%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS %4$s]: %5$s%6$s%n"
|
||||
|
||||
super-pickaxe:
|
||||
drop-items: true
|
||||
many-drop-items: false
|
||||
|
||||
snapshots:
|
||||
directory:
|
||||
|
||||
navigation-wand:
|
||||
item: minecraft:compass
|
||||
max-distance: 100
|
||||
|
||||
scripting:
|
||||
timeout: 3000
|
||||
dir: craftscripts
|
||||
|
||||
saving:
|
||||
dir: schematics
|
||||
|
||||
files:
|
||||
allow-symbolic-links: false
|
||||
|
||||
history:
|
||||
size: 15
|
||||
expiration: 10
|
||||
|
||||
calculation:
|
||||
timeout: 100
|
||||
|
||||
debugging:
|
||||
trace-unflushed-sessions: false
|
||||
|
||||
wand-item: minecraft:wooden_axe
|
||||
shell-save-type:
|
||||
no-double-slash: false
|
||||
no-op-permissions: false
|
||||
debug: false
|
||||
show-help-on-first-use: true
|
||||
server-side-cui: true
|
||||
command-block-support: false
|
||||
230
live-server/plugins/GrimAC/config.yml
Normal file
230
live-server/plugins/GrimAC/config.yml
Normal file
|
|
@ -0,0 +1,230 @@
|
|||
# GrimAC main configuration
|
||||
# Source code: https://github.com/MWHunter/Grim
|
||||
# Copyright 2025 DefineOutside and contributors, Licensed under GPLv3.
|
||||
# Modified binaries, or plugins with copied grim code, must be private,
|
||||
# or with full source code available to buyers at no additional cost.
|
||||
|
||||
alerts:
|
||||
# In addition to broadcasting alerts to players, should they also be sent to the console?
|
||||
print-to-console: true
|
||||
# This controls whether/how alerts are shared between servers connected to your proxy.
|
||||
# You must have 'bungee-plugin-message-channel' enabled in your Velocity's configuration if Velocity is in use.
|
||||
proxy:
|
||||
# Should alerts be sent to other servers connected to your proxy?
|
||||
send: false
|
||||
# Should the alerts received from other servers be announced to this server?
|
||||
receive: false
|
||||
|
||||
verbose:
|
||||
print-to-console: false
|
||||
|
||||
check-for-updates: false
|
||||
|
||||
client-brand:
|
||||
# This means it won't broadcast their brand to operators if the brand matches the following regexes
|
||||
ignored-clients:
|
||||
- "^vanilla$"
|
||||
- "^fabric$"
|
||||
- "^quilt$"
|
||||
- "^lunarclient:v\\d+\\.\\d+\\.\\d+-\\d{4},(?:fabric|forge)$"
|
||||
- "^Feather Fabric$"
|
||||
- "^labymod$"
|
||||
# Grim will blacklist specific Forge versions which include built-in Reach hacks (Forge 1.18.2 to 1.19.3).
|
||||
# Setting this option to false will allow said clients to connect to the server. Disable this at your own risk.
|
||||
disconnect-blacklisted-forge-versions: true
|
||||
|
||||
spectators:
|
||||
# Hide all spectators with the grim.spectator permission regardless if they are actually actively spectating
|
||||
hide-regardless: false
|
||||
# Will make spectators hidden only in these worlds, keep blank to allow all worlds
|
||||
allowed-worlds:
|
||||
- ""
|
||||
|
||||
# How long should players have until we kick them for timing out? Default = 60 seconds
|
||||
max-transaction-time: 60
|
||||
|
||||
# Enable this to stop Grim cancelling pongs received from players.
|
||||
# This may improve compatibility with other anticheats. It may cause issues with packet limiters.
|
||||
# Do not enable this if you are not sure what you are doing.
|
||||
disable-pong-cancelling: false
|
||||
|
||||
# Should the default block resynchronization handler be disabled?
|
||||
# By default, Grim reads blocks from the server world and sends them to the client to fix desync.
|
||||
# If you use plugins that create fake packet-based blocks (which don't exist in the server world),
|
||||
# you should set this to true to prevent Grim from overwriting them with air/real blocks.
|
||||
# This forces the use of a "NoOp" (No Operation) handler unless a custom one is provided via API.
|
||||
disable-default-resync-handler: false
|
||||
|
||||
# Should the duplicate movement packet be cancelled?
|
||||
# Mojang has fixed this issue in 1.21. This was their attempt to fix the "bucket desync". https://bugs.mojang.com/browse/MC-12363
|
||||
# This setting only applies to 1.17-1.20.5 clients on 1.8 servers.
|
||||
cancel-duplicate-packet: true
|
||||
|
||||
# Whether or not to ignore the rotation in duplicate packets
|
||||
ignore-duplicate-packet-rotation: false
|
||||
|
||||
Simulation:
|
||||
# How much should we multiply total advantage by when the player is legit
|
||||
# This is what the default config looks like (x axis = seconds, y axis = 1/1000 block): https://www.desmos.com/calculator/d4ufgxrxer
|
||||
setback-decay-multiplier: 0.999
|
||||
# How large of an offset from the player's movement should we create a violation for?
|
||||
# Measured in blocks from the possible movement
|
||||
# We account for Optifine by switching trig tables but dropping this to 0.001 will reduce FastMath
|
||||
# flagging the anticheat if this compensation doesn't work...
|
||||
threshold: 0.001
|
||||
# How large of a violation in a tick before the player gets immediately setback?
|
||||
# -1 to disable
|
||||
immediate-setback-threshold: 0.1
|
||||
# How large of an advantage over all ticks before we start to setback?
|
||||
# -1 to disable
|
||||
max-advantage: 1
|
||||
# After 50 seconds with default config, the player will go from 4 blocks -> 1 block of advantage
|
||||
# This is to stop the player from gathering too many violations and never being able to clear them all
|
||||
# Default advantage ceiling (x axis = seconds, y axis = 1/1000 block): https://www.desmos.com/calculator/4lovswdarj
|
||||
max-ceiling: 4
|
||||
# Violation level threshold for setback
|
||||
# 1 for old behavior
|
||||
setback-violation-threshold: 1
|
||||
|
||||
# Checks to see if a player entered a block during a movement
|
||||
Phase:
|
||||
setbackvl: 1 # Glitching into blocks can allow wall climbing, plus this check is relatively stable
|
||||
decay: 0.005
|
||||
|
||||
AirLiquidPlace:
|
||||
cancelvl: 0
|
||||
|
||||
FabricatedPlace:
|
||||
cancelvl: 5
|
||||
|
||||
FarPlace:
|
||||
cancelvl: 5
|
||||
|
||||
PositionPlace:
|
||||
cancelvl: 5
|
||||
|
||||
RotationPlace:
|
||||
cancelvl: 5
|
||||
|
||||
# Prediction-based no slow check
|
||||
# Grim accounts for buggy netcode here... hard to false even when spamming right click and offhand button
|
||||
# Much more stable than other anticheats, but please report any falses... I have fixed a ton of netcode issues here.
|
||||
NoSlow:
|
||||
# How much of an offset is "cheating"
|
||||
# By default this is lower than other offs
|
||||
# Flags by 0.03-0.2 consistently with NoSlow on
|
||||
threshold: 0.001
|
||||
# Setback fast on the first item to remove any advantage NoSlow gives
|
||||
setbackvl: 5
|
||||
# Decay's when the player uses an item AND is slowed by it
|
||||
decay: 0.05
|
||||
|
||||
Knockback:
|
||||
# How much should we multiply total advantage by when the player is legit
|
||||
setback-decay-multiplier: 0.999
|
||||
# How large of an offset from the player's velocity should we create a violation for?
|
||||
# Measured in blocks from the possible velocity
|
||||
threshold: 0.001
|
||||
# How large of a violation in a tick before the player gets immediately setback?
|
||||
# -1 to disable
|
||||
immediate-setback-threshold: 0.1
|
||||
# How large of an advantage over all ticks before we start to setback?
|
||||
# -1 to disable
|
||||
max-advantage: 1
|
||||
# This is to stop the player from gathering too many violations and never being able to clear them all
|
||||
max-ceiling: 4
|
||||
|
||||
Explosion:
|
||||
threshold: 0.001
|
||||
setbackvl: 3
|
||||
|
||||
TimerA:
|
||||
setbackvl: 10
|
||||
# Milliseconds that the player can accumulate for later use when they fall behind
|
||||
# Could potentially allow 1.8 fast use/fast heal/fast bow bypasses if set too high, 120 ms seems like a good balance
|
||||
drift: 120
|
||||
|
||||
# This check limits abuse of the TimerA balance by preventing the player's movement falling too far behind realtime
|
||||
TimerLimit:
|
||||
# Ping at which the check will start to limit timer balance, to prevent abuse.
|
||||
# Can cause some setbacks for legitimate players but only if they are over this ping threshold.
|
||||
# -1 to disable
|
||||
ping-abuse-limit-threshold: 1000
|
||||
|
||||
NegativeTimer:
|
||||
# Number of milliseconds lost while moving before we should start flagging
|
||||
drift: 1200
|
||||
|
||||
# Same check method as TimerA, but for vehicles
|
||||
VehicleTimer:
|
||||
# Target 1.005 timer
|
||||
setbackvl: 10
|
||||
|
||||
PacketOrderI:
|
||||
# enable if players are getting flagged for using 1.7 animations mods
|
||||
exempt-placing-while-digging: false
|
||||
|
||||
Reach:
|
||||
# How much should we expand hitboxes by? 0.0005 should detect 3.0005+ reach
|
||||
#
|
||||
# There is 0.03 forced expansion with 1.9-1.18.1 (not 1.18.2), or some client/server combinations due to
|
||||
# protocol changes and limitations. This check is most powerful with 1.7/1.8 clients on 1.8 servers.
|
||||
threshold: 0.0005
|
||||
# Should we cancel hits that we know are impossible?
|
||||
# 3.00-3.03 hits may go through but still be flagged, due to packet order limitations
|
||||
block-impossible-hits: true
|
||||
# This will send an additional packet at the end of every tick to increase the likelihood of catching cheats
|
||||
# This injects into server's connection list to send a final packet just before the server flushes
|
||||
# Enabling this will increase bandwidth usage for all players
|
||||
# This will not decrease overall server performance
|
||||
# Enabling this will catch more cheaters.
|
||||
# Leaving this disabled will still catch cheaters and will not cause false positives
|
||||
# Unless you are a 1.8 PvP focused server, this additional packet is not recommended
|
||||
enable-post-packet: false
|
||||
|
||||
exploit:
|
||||
# You can gain high speeds when sprint jumping with an elytra, this prevents the exploit when set to false
|
||||
# Mojang screwed up netcode by making elytra start client sided and elytra end server sided
|
||||
# Elytras take 0.99 horizontal friction, so constantly adding 0.2 horizontal speeds results in very high speeds.
|
||||
allow-sprint-jumping-when-using-elytra: true
|
||||
# This option mitigates the player's placement on ghostblocks by resynchronizing the player when it happens
|
||||
allow-building-on-ghostblocks: true
|
||||
# This setting, influenced by the boolean above defines the distance to check for ghost blocks
|
||||
# Its valid range is limited from 2 to 4
|
||||
distance-to-check-if-ghostblocks: 2
|
||||
|
||||
# Enable logging plugins who have injected into netty on join to debug compatibility issues
|
||||
debug-pipeline-on-join: false
|
||||
|
||||
# Enables experimental checks
|
||||
experimental-checks: false
|
||||
|
||||
reset-item-usage-on-item-update: true
|
||||
reset-item-usage-on-attack: true
|
||||
reset-item-usage-on-slot-change: true
|
||||
reset-item-usage-on-item-use: true
|
||||
|
||||
# Grim sometimes cancels illegal packets such as with timer, after X packets in a second cancelled, when should
|
||||
# we simply kick the player? This is required as some packet limiters don't count packets cancelled by grim.
|
||||
packet-spam-threshold: 100
|
||||
# Enable this to print a stacktrace when a player is kicked due to packet-spam-threshold
|
||||
debug-packet-cancel: false
|
||||
|
||||
# Grim is able to enforce that a player set out of flying state cannot have more than X milliseconds of ping
|
||||
# This is due to Grim not currently checking flying players
|
||||
# To disable, use -1
|
||||
max-ping-out-of-flying: 1000
|
||||
|
||||
# Maximum ping when a firework boost is removed from the player.
|
||||
# This prevents high latency players from being able to use 1 firework boost with an elytra forever.
|
||||
max-ping-firework-boost: 1000
|
||||
|
||||
# Schema markers — touch only if you know what you're doing.
|
||||
# config-flavor: V2 = Grim 2.x build, V3 = Grim 3.x. The plugin refuses
|
||||
# to load a config whose flavor doesn't match its own
|
||||
# build, so a V3 config opened by a V2 jar fails fast
|
||||
# instead of silently flat-merging into the wrong keys.
|
||||
# config-version: bumped on every breaking shape change. Old configs
|
||||
# auto-migrate up via the bundled updater on next start.
|
||||
config-flavor: V2
|
||||
config-version: 10
|
||||
99
live-server/plugins/GrimAC/database.yml
Normal file
99
live-server/plugins/GrimAC/database.yml
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
# ===========================================================================
|
||||
# Grim datastore
|
||||
#
|
||||
# Routes the DataStore categories (violation / session / player-identity /
|
||||
# setting / blob) to specific backend instances. Each backend listed in
|
||||
# `routing:` has its own settings file under `databases/<backend-id>.yml`.
|
||||
#
|
||||
# On first boot, if the legacy store (violations.sqlite) is present, it
|
||||
# is migrated into the new store automatically. Set migration.skip to
|
||||
# true if you prefer to carry over manually later.
|
||||
# ===========================================================================
|
||||
|
||||
# Every datastore key lives under this top-level wrapper so the keyspace is
|
||||
# naturally namespaced — Configuralize merges every yml into one global
|
||||
# keyspace at runtime, and a flat layout here would collide with identical
|
||||
# top-level keys in config.yml / discord.yml (`enabled`, `history`, etc.).
|
||||
database:
|
||||
|
||||
# Master toggle. Set false to disable violation history + /grim history
|
||||
# entirely. Live AC checks keep running; flags just aren't persisted.
|
||||
enabled: true
|
||||
|
||||
# Categories → backend ids. Each distinct id here must have a matching
|
||||
# `databases/<id>.yml` file (auto-created from bundled defaults on first
|
||||
# boot) and a registered BackendProvider at runtime. `none` disables
|
||||
# persistence for that category entirely. Mixed backends are fine — e.g.
|
||||
# violations in a networked SQL store and blobs in an object store.
|
||||
routing:
|
||||
violation: sqlite
|
||||
session: sqlite
|
||||
player-identity: sqlite
|
||||
setting: sqlite
|
||||
blob: none
|
||||
|
||||
session:
|
||||
# Used at migration time only — the legacy V0 reader has no join/quit
|
||||
# signals, so SessionReconstructor groups violations into sessions when
|
||||
# consecutive flags fall within this gap. Live sessions are bounded by
|
||||
# the connection, not this value.
|
||||
gap-ms: 600000
|
||||
scope-per-server: true
|
||||
# How often a connected-player heartbeat upserts the session row so
|
||||
# last_activity_epoch_ms stays current. Bounds the apparent session
|
||||
# duration if the server crashes (graceful disconnects always set
|
||||
# closed_at). Cost: ~one row UPSERT per online player per interval.
|
||||
# 0 disables.
|
||||
heartbeat-interval-ms: 30000
|
||||
|
||||
write-path:
|
||||
# queue-capacity must be a positive power of two (ring-buffer requirement).
|
||||
# Typical values: 4096, 8192, 16384, 32768, 65536.
|
||||
queue-capacity: 16384
|
||||
batch-size: 256
|
||||
flush-interval-ms: 1000
|
||||
warn-rate-ms: 10000
|
||||
shutdown-drain-timeout-ms: 5000
|
||||
# Ring-buffer wait strategy. BLOCKING is the safe default: a condition-variable
|
||||
# wait that minimises CPU use at the cost of a small amount of latency under
|
||||
# extreme burst. Pick YIELDING or BUSY_SPIN only when you have a free core
|
||||
# budget and have measured a win over BLOCKING.
|
||||
# Options: BLOCKING, TIMEOUT_BLOCKING, SLEEPING, YIELDING, BUSY_SPIN.
|
||||
wait-strategy: BLOCKING
|
||||
|
||||
retention:
|
||||
session:
|
||||
enabled: true
|
||||
max-age-days: 90
|
||||
violation:
|
||||
enabled: true
|
||||
max-age-days: 365
|
||||
player-identity:
|
||||
enabled: false
|
||||
setting:
|
||||
enabled: false
|
||||
blob:
|
||||
enabled: true
|
||||
max-age-days: 30
|
||||
|
||||
migration:
|
||||
skip: false
|
||||
max-duration-ms: 0 # 0 = no timeout
|
||||
|
||||
name-resolution:
|
||||
# Order matters — first non-empty result wins.
|
||||
# local-cache reads the PlayerIdentity category.
|
||||
# offline-mode-uuid derives UUID.nameUUIDFromBytes (offline servers only).
|
||||
chain: [local-cache, offline-mode-uuid]
|
||||
|
||||
history:
|
||||
entries-per-page: 15
|
||||
group-interval-ms: 30000
|
||||
|
||||
# Display-only tag stamped on new session records. Shown in the session
|
||||
# header line of `/grim history`. Safe to change mid-operation.
|
||||
server-name: "Prison"
|
||||
|
||||
# Schema markers — see header comment in config.yml.
|
||||
config-flavor: V2
|
||||
config-version: 1
|
||||
35
live-server/plugins/GrimAC/databases/mongo.yml
Normal file
35
live-server/plugins/GrimAC/databases/mongo.yml
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# ===========================================================================
|
||||
# MongoDB backend settings.
|
||||
#
|
||||
# Requires the MongoDB sync driver at runtime; if absent the backend
|
||||
# disables itself and routing falls back.
|
||||
# ===========================================================================
|
||||
|
||||
# Every key lives under `mongo:` so this file's keyspace doesn't collide
|
||||
# with sibling per-backend files when Configuralize merges them all into
|
||||
# one global namespace.
|
||||
mongo:
|
||||
# MongoDB connection string. Credentials encoded in-URL as per the driver's
|
||||
# standard (mongodb://user:pass@host:port/?authSource=admin).
|
||||
connection-string: "mongodb://localhost:27017"
|
||||
|
||||
# Database to write into. Collections inside this database come from the
|
||||
# `tables:` block below.
|
||||
database: "grim"
|
||||
|
||||
# Per-handler bulkWrite() size. The Mongo driver pools connections
|
||||
# internally, so this controls commit batching, not connection count.
|
||||
batch-flush-cap: 256
|
||||
|
||||
# Collection-name overrides. Default names below.
|
||||
tables:
|
||||
meta: grim_meta
|
||||
checks: grim_checks
|
||||
players: grim_players
|
||||
sessions: grim_sessions
|
||||
violations: grim_violations
|
||||
settings: grim_settings
|
||||
|
||||
# Schema markers — see header comment in config.yml.
|
||||
config-flavor: V2
|
||||
config-version: 1
|
||||
47
live-server/plugins/GrimAC/databases/mysql.yml
Normal file
47
live-server/plugins/GrimAC/databases/mysql.yml
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
# ===========================================================================
|
||||
# MySQL backend settings.
|
||||
#
|
||||
# MySQL supports multi-server deployments (several Grim instances writing
|
||||
# into one central DB). Requires the MySQL Connector/J driver at runtime;
|
||||
# if the driver is missing the backend disables itself at startup and
|
||||
# logs a clear error, and routing that targeted this backend falls back
|
||||
# to whatever else is configured.
|
||||
# ===========================================================================
|
||||
|
||||
# Every key lives under `mysql:` so this file's keyspace doesn't collide
|
||||
# with sibling per-backend files (sqlite:, postgres:, mongo:, redis:)
|
||||
# when Configuralize merges them all into one global namespace.
|
||||
mysql:
|
||||
# Connection target.
|
||||
host: "localhost"
|
||||
port: 3306
|
||||
database: "grim"
|
||||
user: "root"
|
||||
password: ""
|
||||
|
||||
# Extra URL parameters appended after the canned set
|
||||
# (useSSL=false&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true).
|
||||
# Leave empty unless you know you need something specific — the defaults
|
||||
# match what a local dev install wants.
|
||||
extra-jdbc-params: ""
|
||||
|
||||
# Per-handler batch-flush cap. Each ring handler accumulates events into a
|
||||
# PreparedStatement batch and commits on endOfBatch OR when the batch hits
|
||||
# this cap, whichever comes first. Higher values trade latency for
|
||||
# throughput under sustained bursts.
|
||||
batch-flush-cap: 256
|
||||
|
||||
# Table-name overrides. Rename any of the six logical stores so multiple
|
||||
# Grim instances can share one MySQL database, or to match an existing
|
||||
# corporate naming scheme. Defaults shown below.
|
||||
tables:
|
||||
meta: grim_meta
|
||||
checks: grim_checks
|
||||
players: grim_players
|
||||
sessions: grim_sessions
|
||||
violations: grim_violations
|
||||
settings: grim_settings
|
||||
|
||||
# Schema markers — see header comment in config.yml.
|
||||
config-flavor: V2
|
||||
config-version: 1
|
||||
37
live-server/plugins/GrimAC/databases/postgres.yml
Normal file
37
live-server/plugins/GrimAC/databases/postgres.yml
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
# ===========================================================================
|
||||
# Postgres backend settings.
|
||||
#
|
||||
# Postgres supports multi-server deployments (several Grim instances
|
||||
# writing into one central DB). Requires the Postgres JDBC driver at
|
||||
# runtime; if the driver is missing the backend disables itself at
|
||||
# startup and routing that targeted this backend falls back.
|
||||
# ===========================================================================
|
||||
|
||||
# Every key lives under `postgres:` so this file's keyspace doesn't collide
|
||||
# with sibling per-backend files when Configuralize merges them all into
|
||||
# one global namespace.
|
||||
postgres:
|
||||
host: "localhost"
|
||||
port: 5432
|
||||
database: "grim"
|
||||
user: "postgres"
|
||||
password: ""
|
||||
|
||||
# Extra URL parameters appended after `?`. Leave empty unless you know
|
||||
# you need something specific.
|
||||
extra-jdbc-params: ""
|
||||
|
||||
batch-flush-cap: 256
|
||||
|
||||
# Table-name overrides. Default names below.
|
||||
tables:
|
||||
meta: grim_meta
|
||||
checks: grim_checks
|
||||
players: grim_players
|
||||
sessions: grim_sessions
|
||||
violations: grim_violations
|
||||
settings: grim_settings
|
||||
|
||||
# Schema markers — see header comment in config.yml.
|
||||
config-flavor: V2
|
||||
config-version: 1
|
||||
51
live-server/plugins/GrimAC/databases/redis.yml
Normal file
51
live-server/plugins/GrimAC/databases/redis.yml
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
# ===========================================================================
|
||||
# Redis backend settings.
|
||||
#
|
||||
# Redis is primarily an in-memory store — ensure AOF persistence is
|
||||
# enabled on the server if you route history to it, or the history will
|
||||
# disappear on restart. Requires Jedis at runtime; if Jedis is missing
|
||||
# the backend disables itself and routing falls back.
|
||||
#
|
||||
# Not recommended as a primary history target. Offered for operators
|
||||
# who only have Redis available and need something working in a pinch.
|
||||
# ===========================================================================
|
||||
|
||||
# Every key lives under `redis:` so this file's keyspace doesn't collide
|
||||
# with sibling per-backend files when Configuralize merges them all into
|
||||
# one global namespace.
|
||||
redis:
|
||||
host: "localhost"
|
||||
port: 6379
|
||||
|
||||
# Logical database index (0-15 by default).
|
||||
database: 0
|
||||
|
||||
# Optional ACL credentials. Leave empty for no-auth Redis.
|
||||
user: ""
|
||||
password: ""
|
||||
|
||||
# Prepended to every key this backend writes. Useful when sharing a Redis
|
||||
# instance with other apps. Leave empty for no prefix.
|
||||
key-prefix: ""
|
||||
|
||||
timeout-ms: 2000
|
||||
batch-flush-cap: 256
|
||||
|
||||
# When true, log a startup warning if this backend is routing
|
||||
# violation/session history. Set false to silence after you've confirmed
|
||||
# persistence is configured.
|
||||
warn-on-history: true
|
||||
|
||||
# Key-namespace overrides. Interpreted as key-prefix segments (Redis has
|
||||
# no native tables). Default names below.
|
||||
tables:
|
||||
meta: grim_meta
|
||||
checks: grim_checks
|
||||
players: grim_players
|
||||
sessions: grim_sessions
|
||||
violations: grim_violations
|
||||
settings: grim_settings
|
||||
|
||||
# Schema markers — see header comment in config.yml.
|
||||
config-flavor: V2
|
||||
config-version: 1
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue