diff --git a/docs/RESEARCH-AUCTION-HOUSE.md b/docs/RESEARCH-AUCTION-HOUSE.md new file mode 100644 index 0000000..44df7ab --- /dev/null +++ b/docs/RESEARCH-AUCTION-HOUSE.md @@ -0,0 +1,116 @@ +# RESEARCH — Auction House Plugin Options for racked.ru + +**Date:** 2026-05-07 +**Status:** Read-only research; no changes applied +**Audience:** Operator deciding "drop EZShop, replace with AH-only" plan +**Source server:** `nullstone-server` / `minecraft-mc` container + +--- + +## 1. Current `/ah` plugin + +``` +Plugin: AuctionHouse (Kiranhart / Tweetzy) +Jar: AuctionHouse-1.4.6.jar +Repo: github.com/kiranhart/Auction-House (source visible, last push 2026-04-12) +LICENSE: none in repo -> defaults to ARR (proprietary) +Distro: Paid via Spigot / Songoda / Polymart (also leaked elsewhere) +1.21.x: yes — single-jar 1.8*–1.21 +``` + +Live config from `/data/plugins/AuctionHouse/config.yml`: + +| Setting | Value | +|--------------------------|------------| +| tax | 0.01 (1%) | +| default-max-auctions | 10 | +| bin-auctions | true | +| bid-auctions | true | +| bid-auction-duration | 7200 s | +| bin-auction-duration | 172800 s | +| auto-collect | false | +| partial-selling | false | +| use-adventure-text | true | + +**Vault:** required. **MiniMessage:** yes. **Per-rank limits:** via `auctionhouse.maxauctions.` permissions. **Logs:** `plugins/AuctionHouse/logs/`. **Discord:** none built in. + +**Known historic bugs (mostly patched):** +- Listing-tax + confirmation dupe when player can't pay tax +- Disconnect-during-price-input dupe on rejoin +- `AuctionHouseAntiDupe` exists as third-party patch plugin — signal that exploits keep re-appearing +- 29 open GitHub issues at time of writing + +--- + +## 2. Alternatives surveyed + +| Plugin | Last update | License | 1.21.x | Bid+BIN | Per-rank | Tax | Discord | Vault | Notes | +|---|---|---|---|---|---|---|---|---|---| +| **AuctionHouse** (Kiranhart) — current | 2026-04 | ARR (no LICENSE) | yes | yes | perms | yes | no | yes | Industry default, dupe history | +| **AuctionHousePlugin** (Elaine Qheart, Hangar) | 2025-09, v1.4.7 | GPL | 1.21–1.21.11 | yes | permissions.yml | yes | community link only | yes | Looks like a friendly fork/clone of Kiranhart. Open beta, only 1k installs | +| **NexusAuctionHouse** (Modrinth) | ~2024 (v2.2.3 latest) | MIT | 1.21–1.21.6 | BIN only | configurable caps | listing+sale fees | webhooks | yes | Truly free + permissive. Lacks bidding | +| **AuctionHousePlus** (SpigotMC, paid) | 2025-12, v3.2 | ARR / paid | 1.21–1.21.11 | yes | yes | yes | bot+web buy | yes | Web UI + Discord buy flow; paid | +| **GlobalMarketplace** (Modrinth) | ~8 months ago, v1.0.3 | ARR | 1.21–1.21.10 | both | not documented | not documented | webhooks | yes | Geyser/Bedrock UI, newer entrant | +| **ModernHDV** (SpigotMC) | 2026-02 | Free + paid Pro | 1.14–1.21.11 | yes | yes | yes | no | yes | Crash-safe atomic txns; SQLite/MySQL; free tier viable | +| **Unique Auction House** | 2026-01 | paid | 1.21.x | yes | yes | yes | partial | yes | Premium polish, ARR | +| **zAuctionHouse** (BuiltByBit) | 2026-04 | paid | 1.8.8–1.21 | yes | yes | yes | partial | yes | "Most used"; mixed reviews on support; anti-dupe built in | +| **AuctionMaster** (SpigotMC) | active 1.21.6 | paid | 1.8–1.21.6 | yes | yes | yes | partial | yes | Reported major dupe in 2025; slow dev response | +| **AuctionGUI+** (brcdev) | 2022 | paid | up to 1.19 | yes | yes | yes | no | yes | **STALE — drop from list** | +| **HeadAuction** | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | No plugin found by this name | +| **AuctionHouse-Lite (Knokko)** | 2019 | LICENSE present | no | n/a | n/a | n/a | n/a | n/a | **ARCHIVED** | +| **CMI auction module** | 2026 active | paid suite | yes | basic | yes | yes | no | yes | CMI itself doesn't ship a real auction house — operators add a separate AH plugin alongside. Not a replacement | +| **Discord-bridged AH** (e.g. Auction Discord Sync addon) | active | varies | universal | adds to any AH | n/a | n/a | yes | n/a | Bolt-on. Pair with Kiranhart or Nexus if Discord wanted | + +--- + +## 3. License / racked.ru AGPL fit + +racked.ru policy is privacy-first and open. Important: **Kiranhart's repo has no LICENSE file** — under GitHub default this is "all rights reserved". The jar is sold; redistribution likely violates terms. We are within rights to **use** it on a private server, but the project is not aligned with our open-source ethos. + +Only options that are clearly open-source: + +- **NexusAuctionHouse** — MIT. Free. Truly compatible. +- **AuctionHousePlugin (Elaine Qheart)** — GPL on Hangar. +- **ModernHDV Free Edition** — usable without paying, source not published (mixed). + +--- + +## 4. Verdict — keep or swap? + +**Keep AuctionHouse 1.4.6 (Kiranhart) for now**, but plan a swap. + +Reasons to keep short-term: +- It's working, configured, and the `/ah` UX is what players already know +- Single-jar 1.21.x support, MiniMessage, BIN+bidding both enabled, 1% tax, per-rank caps via perms +- Active dev: last push 2026-04-12, dupe patches landing + +Reasons to plan a swap medium-term: +- **License is ARR with no published LICENSE file** — incompatible with racked.ru's open philosophy +- Recurring dupe history; community ships *AuctionHouseAntiDupe* as a band-aid +- 29 open GitHub issues +- No native Discord; requires a separate sync addon + +Concrete swap candidates, ranked: + +1. **NexusAuctionHouse (MIT)** — best fit for racked.ru ethics. Drawback: BIN-only, no bidding. If we don't care about live bidding (most player markets don't), this is the strongest pick. +2. **AuctionHousePlugin (Elaine Qheart, GPL)** — closest drop-in: same config layout (`config.yml`, `layout.yml`, `messages.yml`, `permissions.yml`), so a migration is cheap. Open license. Smaller community is the main risk. +3. **ModernHDV Free Edition** — atomic transactions are a real anti-dupe win; pair with anything else for safety. Pro tier locks multi-server (we don't need). + +Reject: zAuctionHouse, AuctionMaster, AuctionHousePlus, Unique AH, AuctionGUI+, CMI as AH, Knokko archived. + +**Recommended path:** stay on Kiranhart 1.4.6 through the EZShop drop. Once `/ah` is the sole player marketplace, schedule a one-week staging-server trial of **NexusAuctionHouse** (MIT) and **Elaine Qheart's AuctionHousePlugin** (GPL). Pick whichever survives the trial; Nexus wins on license, Elaine wins on UX parity. + +--- + +## 5. Sources + +- github.com/kiranhart/Auction-House (current plugin source; no LICENSE) +- hangar.papermc.io/ElaineQheart/AuctionHousePlugin (GPL fork/parallel) +- modrinth.com/plugin/nexusauctionhouse (MIT) +- modrinth.com/plugin/globalmarketplace-(paper)-auction-house (ARR) +- spigotmc.org/resources/auctionhouseplus-...123740 (paid) +- spigotmc.org/resources/modernhdv-...132982 (free+pro) +- builtbybit.com/resources/zauctionhouse-...8987 (paid) +- spigotmc.org/resources/auctionmaster-...84784 (paid) +- github.com/knokko/Auctions-Plugin (archived 2019) +- spigotmc.org/resources/auctionhouseantidupe.109427 (signal for dupe history) diff --git a/docs/RESEARCH-SHOP-AH-HYBRID.md b/docs/RESEARCH-SHOP-AH-HYBRID.md new file mode 100644 index 0000000..dc0f6e9 --- /dev/null +++ b/docs/RESEARCH-SHOP-AH-HYBRID.md @@ -0,0 +1,89 @@ +# Research: Shop + Auction House Hybrid Plugins + +**Date:** 2026-05-07 +**Question:** Replace EZShop + AuctionHouse (two plugins) with one unified plugin? +**Goal:** Polished UX, minimal command surface, ideally AGPL/GPL-compatible. + +--- + +## Candidates + +### 1. ExcellentShop (NightExpress) — top contender + +- **Component count:** Single jar, modular internally (Virtual Shop / Chest Shop / Auction House — each toggleable in config). +- **License:** **GPL-3.0** (open source, AGPL-compatible upstream — sources at https://github.com/nulli0n/ExcellentShop-spigot). Sold as paid binary on SpigotMC/BuiltByBit (~$15–20) but source is free and self-buildable. +- **Last release:** Active — repo pushed 2026-04-27, v4.19.x line, MC 1.21.8+ Java 21. +- **Config:** Split per module (`virtual-shop/`, `chest-shop/`, `auction/` config trees) but lives under one plugin folder. +- **GUI:** Separate per module (no fused mega-GUI), but shared theme/skin. +- **Vault dep:** No — uses CoinsEngine, ExcellentEconomy, PlayerPoints, BeastTokens. Vault works via bridge. +- **Commands:** `/vshop`, `/cshop`, `/ah` (separate namespaces) + `/sell`, `/sellall`, `/sellhand`. Aliases configurable. +- **Notes:** Requires NightCore framework jar. Same dev as CoinsEngine — entire NightExpress stack is GPL-3.0. + +### 2. EconomyShopGUI + +- **Component count:** Single jar. Free tier covers admin GUI shop + sellall; **player shops + auction house are EconomyShopGUI Premium only** (paid). +- **License:** Closed source (no public repo). Free version actively maintained, v6.16.x, MC 1.21.11. +- **Vault dep:** Yes (Vault, PlayerPoints, GemsEconomy). +- **GUI:** Unified theme, single command tree under `/shop`. +- **Verdict:** Free version doesn't include AH — defeats the unification purpose unless paying for Premium. + +### 3. CMI (Zrips) + +- **Component count:** Single mega-plugin (Essentials replacement). +- **License:** Closed source, **paid €15** lifetime. +- **Shop/AH:** **No built-in shop or auction house.** Has economy, /sellhand, cheques only. Not a candidate. + +### 4. UltimateShop / UltimateShopGUI (BuiltByBit) + +- **Component count:** Single jar bundling shop + AH + custom economy. +- **License:** Closed-source paid (BuiltByBit only). +- **Verdict:** Reduces command surface but locks you into a paywalled binary with unclear support lifecycle. Skip on principle (racked.ru philosophy: pragmatic, but FOSS-leaning). + +### 5. AxAuctions / AxShop (Artillex-Studios) + +- **Component count:** Two separate paid plugins from same vendor; consistent UI theme but no unification. +- **License:** Closed-source paid. No advantage over current EZShop+AuctionHouse split. + +### 6. ShopGUIPlus + AuctionGUIPlus (brcdev) + +- **Component count:** Two paid plugins from same vendor. Industry standard but expensive (~$30 combined), Vault-locked, closed-source. +- **Verdict:** Same problem as current setup — two configs, two GUIs, two updates. + +### 7. NightExpress modular suite (CoinsEngine + ExcellentShop) + +- The "modular suite" concept (CoinsEngine + ItemStores + AuctionStation) doesn't exist as named — **ExcellentShop already is the suite**. CoinsEngine handles currency, ExcellentShop handles shop+chest+AH. Two GPL jars total. + +### 8. kiranhart AuctionHouse + +- AH only (no admin shop). Single jar, no LICENSE file in repo (effectively closed source despite mirror on GitHub). Active. Not a unified solution. + +--- + +## Verdict: Unified vs Split + +**Unified wins for racked.ru** — but only if the unified plugin is good. Two separate plugins means: +- Two config dialects to maintain +- Mismatched GUI themes (jarring for the polished feel) +- Doubled update cadence and breakage surface +- More commands in `/help` for new players + +A single well-designed plugin (ExcellentShop) gives consistent skin, one permission tree prefix, one update path, one bug-report destination. The trade-off — slightly larger jar, less "best of breed" per module — is worth it for a small server prioritising polish. + +**The catch:** ExcellentShop's modules still expose separate top-level commands (`/vshop`, `/cshop`, `/ah`). Command-surface savings come from aliasing (`/shop` → `/vshop`, hide the rest) and disabling unused modules. + +--- + +## Recommendation + +**Migrate to ExcellentShop + CoinsEngine** (or keep Vault if EssentialsX economy is in use). + +Reasoning: +1. **GPL-3.0** — aligns with racked.ru's FOSS-leaning, AGPL-compatible philosophy. Source self-buildable, free of paywalled-binary risk. +2. **Single jar, modular internally** — disable Chest Shop if EZShop's chest-shop UX isn't wanted; keep Virtual Shop (admin) + Auction House. +3. **Active maintenance** (push 2026-04-27, same dev as CoinsEngine — won't go dark). +4. **Consistent GUI theme** across shop and AH = the "polished feel" the operator wants. +5. **Replaces both EZShop and AuctionHouse** in one move, plus offers chest shops as a future bonus. + +**Don't pick:** UltimateShop/AxAuctions (closed paid), CMI (no shop/AH), EconomyShopGUI free tier (no AH). + +**Action item:** Pilot ExcellentShop on staging, alias `/shop` → `/vshop` and `/market` → `/ah`, disable Chest Shop module unless needed. Verify GPL build pipeline (`mvn package` on the GH source) so racked.ru never ships a paywalled binary. diff --git a/docs/RESEARCH-SHOP-GUI.md b/docs/RESEARCH-SHOP-GUI.md new file mode 100644 index 0000000..aa1acd0 --- /dev/null +++ b/docs/RESEARCH-SHOP-GUI.md @@ -0,0 +1,101 @@ +# RESEARCH: GUI Shop Plugin Replacement for EZShop + +**Date:** 2026-05-07 +**Server:** racked.ru (Paper 1.21.x) +**Current state:** EZShop 1.0-SNAPSHOT (custom, hardcoded 27 slots, drop+click sell only). YOU500 player report wants 54 slots + cleaner title. AUDIT-2026-05-07 F-11 already flags EZShop for removal. +**Goal:** polished default-player sell/buy GUI with categories, multi-page, per-rank pricing, AGPL-compatible. + +--- + +## Candidates Evaluated + +### 1. EconomyShopGUI (free) — Gypopo +- **Status:** very active; v6.16.2 supports MC 1.21.11 (May 2026 release). +- **License:** proprietary "free to use" binary; only the API is open-source on GitHub. **Not AGPL-compatible** in source-distribution sense, but redistributable as plugin. +- **Stack:** Bukkit/Spigot/Paper; uses Paper API on modern servers; MiniMessage support since 6.14. +- **1.21.x compat:** verified through 1.21.11. +- **Paradigm:** admin shop, both buy and sell, no player shops. +- **GUI:** sizes 9-54 configurable; multi-page; categories with custom icons; clean titles per category. +- **Categories:** unlimited (Blocks, Redstone, Food, Mob Drops…); /sellgui sub-menu; /sellall. +- **Vault:** yes; also PlayerPoints, CoinsEngine, GemsEconomy, UltraEconomy, zEssentials, VotingPlugin. +- **Per-rank pricing:** yes — discount/sell-multiplier permission nodes (`EconomyShopGUI.discount.`). +- **Config:** YAML-only in free; in-game GUI editor is premium-locked. Wiki at `wiki.gpplugins.com`. +- **DiscordSRV:** none directly; via PAPI placeholders + DiscordSRV chat-broadcast feasible. +- **Known bugs:** historic Paper-meta color-code raw display (fixed 6.x); permission registration on Paper plugin module (fixed); Mojang skull texture API outages; reviews otherwise overwhelmingly positive. +- **Premium gates:** dynamic pricing, per-player limits, NBT/custom items, MySQL stock sync, command items, in-game GUI editor, search bar, EXP-locked items. +- **Verdict:** **STEAL** — drop-in replacement that solves every YOU500 complaint with the free tier. Premium gates are nice-to-haves we don't need. + +### 2. Genesis (formerly BossShopPro) — MageMonkey.studio +- **Status:** actively maintained fork after Blackixx abandoned BSP; 1.21.1 released; 405 commits on dev branch. +- **License:** MIT (verified on GitHub repo `magemonkeystudio/genesis`). **AGPL-compatible.** +- **Stack:** Spigot/Paper. +- **1.21.x compat:** 1.21.1 confirmed, no explicit 1.21.4+ tag yet — needs smoke test. +- **Paradigm:** generic GUI engine (not strictly a shop); buy/sell/conditions/rewards all configurable. +- **GUI:** any size 9-54, multi-page, full title control. +- **Categories:** modeled as nested menus (manual link buttons); no built-in category abstraction. +- **Vault:** yes; addon `Multiple Currencies` for points/tokens. +- **Per-rank pricing:** yes via condition system + permission predicates. +- **Config:** YAML, very verbose — every button hand-defined. High config complexity but maximum flexibility. +- **Addons:** Player Shops, Limited Uses, Inventory Commands, Multiple Currencies (all free). +- **DiscordSRV:** none native; PAPI bridge possible. +- **Known bugs:** original BSP broke on 1.21 with old maintainer absent; Genesis fork stable but skull-texture fixes still trickling in. +- **Verdict:** **PATTERN** — too DIY for a default-player shop, but the condition/predicate model is the gold standard if we ever need a quest-shop or rank-buy GUI. Keep in pocket. + +### 3. UltimateShop — PQguanfang / ManyouTeam +- **Status:** very active; supports 1.20.5–1.21.11. +- **License:** GPL-3 (from search results) but a "Plugin EULA" clause restricts redistribution on leaked-plugin sites. Effectively GPL-3 + non-commercial-clone clause. **AGPL-compatible for our use** (we don't redistribute). +- **Stack:** Paper-first. +- **1.21.x compat:** verified to 1.21.11. +- **Paradigm:** admin shop; buy/sell; daily-rotation shop; menu-as-shop hybrid (TrMenu-inspired). +- **GUI:** fully customizable slot layout, multi-page native. +- **Categories:** yes; menu-driven with NBT-aware item display. +- **Vault:** yes; also PlayerPoints, plus item-for-item barter. +- **Per-rank pricing:** yes — conditional pricing with PAPI math expressions (e.g. VIP discount via placeholder). +- **Config:** YAML + math expressions; mid complexity; integrates with MMOItems, Oraxen, Nexo, MythicMobs. +- **DiscordSRV:** none mentioned. +- **Known bugs:** none flagged in search; some advanced features paywalled. +- **Verdict:** **STEAL (alternate)** — strong second pick if EconomyShopGUI's premium-funnel becomes an issue. Slightly steeper config, but cleaner license story. + +### 4. QuickShop-Hikari — Community fork +- Active, 6.2.0.11 (Feb 2026). Dual GPLv3 / AGPLv3 — perfect license fit. Paper-only (Spigot dropped). 1.20+ verified. +- Paradigm: **player chest shops** — wrong fit for "default-player sell shop". Also has admin-shop mode but the UX is sign+chest, not category GUI. +- MiniMessage native, NBT, virtual displays. +- **Verdict:** **PATTERN** — keep for future "player shops at spawn" feature; not a replacement for EZShop. + +### 5. ChestShop-3 (Acrobot) +- LGPL-2.1, dev-builds work on 1.21.8 but last tagged release was 2022. Sign+chest paradigm — no GUI. +- **Verdict:** **SKIP** — wrong paradigm and stale tags. + +### 6. zShop — Maxlego08 / GroupeZ +- GPL-3 — AGPL-compatible. Active (396 commits). Spigot-targeted. +- Buy/sell/permissions/enchants/orders. 17 button types. Multi-economy. +- 1.21 compat unclear from search; relies on zMenu API dep (extra plugin to install). +- **Verdict:** **PATTERN** — interesting for the order-book idea but extra dependency and unclear 1.21 status make it second-tier. + +### 7. CoinsEngine + ExcellentShop (NightExpress) +- CoinsEngine 1.20–1.21.10, free, modular currency provider. +- ExcellentShop is the shop module; modular (virtual / chest / rotating sub-shops); paid premium for full feature set, free tier limited. +- **Verdict:** **SKIP** for shop (paid funnel mirrors ShopGUI+); CoinsEngine itself is worth noting as a Vault alternative if we ever need multi-currency. + +### 8. ShopGUI+ (brcdev) +- Paid only on SpigotMC; closed source. Popular but **fails AGPL/free preference**. +- **Verdict:** **SKIP**. + +### 9. DeluxeMenus (HelpChat) +- MIT, active, 1.21 compat. **Not a shop** — generic menu engine. No economy logic; you'd glue Vault commands manually. +- **Verdict:** **PATTERN** — already used elsewhere on racked.ru; worth using as the *frontend* for a hand-rolled shop only if all of the above fail. + +### 10. AuctionHouse (kiranhart) / NexusAuctionHouse / ModernHDV +- Already deployed (`AuctionHouse-1.4.6.jar`). **Player-to-player auction**, not category sell-shop. Complementary, not substitute. F-11 was wrong to call AuctionHouse a replacement — it solves a different problem. +- **Verdict:** keep AuctionHouse; do **not** rely on it as the EZShop replacement. + +--- + +## Recommendation + +**Top 3:** +1. **EconomyShopGUI (free)** — STEAL. Best fit, zero-config defaults, every YOU500 complaint resolved out of the box. +2. **UltimateShop** — STEAL alternate. Cleaner license, comparable feature set, slightly more config. +3. **Genesis (BSP-continued)** — PATTERN. Keep in pocket for advanced quest-shop / rank-gated GUIs. + +**Action:** Pilot EconomyShopGUI free on staging, replicate current EZShop categories, smoke-test 54-slot layout, ship to live in next maintenance window. Keep AuctionHouse separate (player auctions remain a distinct feature). Update `AUDIT-2026-05-07.md` F-11 to reflect that EconomyShopGUI — not AuctionHouse — is the replacement. diff --git a/docs/SHOP-SYSTEM-DECISION.md b/docs/SHOP-SYSTEM-DECISION.md new file mode 100644 index 0000000..0896097 --- /dev/null +++ b/docs/SHOP-SYSTEM-DECISION.md @@ -0,0 +1,132 @@ +# Shop System Decision — racked.ru + +**Date:** 2026-05-07 +**Author:** s8n +**Status:** Decision — supersedes AUDIT-2026-05-07 F-11 +**Inputs:** RESEARCH-SHOP-GUI.md (S1), RESEARCH-AUCTION-HOUSE.md (S2), RESEARCH-SHOP-AH-HYBRID.md (S3) + +--- + +## 1. Problem statement + +Three things land on the same hot spot: + +- EZShop is bespoke, hardcoded 27-slot, drop+click-only, ugly title — YOU500 wants 54-slot polish. +- AuctionHouse 1.4.6 (Kiranhart) works, but ships ARR with no `LICENSE` file and a recurring dupe history. +- We want a single coherent marketplace experience under `/pm` (canonical exec), not a salad of mismatched plugins. + +Three agents researched independently. They disagree on the shape of the answer: + +| Agent | Recommendation | Core argument | +|---|---|---| +| S1 (shop GUI) | EconomyShopGUI free + keep AH separate | Best free-tier shop UX, drop-in replacement | +| S2 (auction house) | Keep Kiranhart short-term, swap to Nexus or Elaine Qheart | License + dupe risk; UX parity in the GPL fork | +| S3 (hybrid) | ExcellentShop unified, GPL-3 | One jar, one theme, one update path | + +This doc reconciles them. + +--- + +## 2. Stack candidates side-by-side + +| Stack | Plugins | Shop license | AH license | Unified GUI? | Player shops? | Dependency surface | +|---|---|---|---|---|---|---| +| **A. ExcellentShop unified** | ExcellentShop + CoinsEngine (or Vault bridge) + NightCore | GPL-3 | GPL-3 | Shared theme, separate menus | Optional Chest module | NightCore framework jar | +| **B. EconomyShopGUI + NexusAuctionHouse** | EconomyShopGUI free + NexusAH | Proprietary free-tier | MIT | No (two themes) | No | Vault | +| **C. Genesis (BSP) + Elaine Qheart AH** | Genesis + AuctionHousePlugin | MIT | GPL | No | Genesis addon | Vault | +| **D. Status quo** | EZShop + AuctionHouse 1.4.6 | Bespoke (us) | ARR no LICENSE | No | No | Vault | + +--- + +## 3. License + project-health matrix + +| Stack | License fit (AGPL-leaning) | Active? | 1.21.x verified | Dupe / exploit history | FOSS-ethics score | +|---|---|---|---|---|---| +| A. ExcellentShop | GPL-3, sources self-buildable | Yes — push 2026-04-27 | 1.21.8+ Java 21 | Clean | 5/5 | +| B. EconomyShopGUI + Nexus | Proprietary free + MIT | Both active; Nexus quieter | 1.21.11 / 1.21.6 | Clean | 3/5 | +| C. Genesis + Elaine | MIT + GPL | Genesis active; Elaine open beta | 1.21.1 (Genesis untested 1.21.4+) | Clean | 5/5 | +| D. Status quo | Bespoke + ARR | EZShop dead-bespoke; Kiranhart active | 1.21.x | Recurring dupes (AntiDupe band-aid exists) | 1/5 | + +ExcellentShop is the only stack where **both** halves are GPL-3, both are actively maintained by the same dev (NightExpress), and source is self-buildable so we never ship a paywalled binary. Everything else either splits the license story across two projects or carries one proprietary half. + +--- + +## 4. Visual mockup — recommended `/pm` shop GUI + +ExcellentShop's Virtual Shop module, themed and aliased. Title kept clean per YOU500 ask. + +``` ++------------------------------------------------------------+ +| racked.ru / pm shop | ++------------------------------------------------------------+ +| [BLK] [ORE] [FOO] [MOB] [RED] [DYE] [TLS] [MSC] | <- 8 categories +| | +| [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] | +| [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] | <- 36 item slots +| [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] | (4 rows x 9) +| [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] | +| | +| [<] [SELLALL] [/pm market] [BAL: 1,234] [>] | <- nav + AH jump ++------------------------------------------------------------+ +``` + +54 slots total: 8 category icons (top), 36 items (4x9 grid), 9 footer (page nav, sellall shortcut, AH cross-link, balance, page indicator). Right-click any item = sell, left-click = buy. No donor stars, no rank-locked items in the default tier. + +`/pm market` opens the shared-theme Auction House (ExcellentShop AH module) in the same skin, same fonts, same border palette — the polish unification S3 was after. + +--- + +## 5. Recommendation — Stack A (ExcellentShop unified) + +**Pick ExcellentShop + CoinsEngine.** + +Why this beats S1's EconomyShopGUI: + +- EconomyShopGUI's free tier is genuinely good for the *shop* but the auction module is paywalled. S1 was right that the shop is excellent; S1 was wrong to treat AH as out-of-scope, because we already need to swap Kiranhart (S2's finding). If we have to touch both anyway, replacing both with one GPL plugin beats replacing both with two unrelated plugins. +- "Free binary, closed source" is exactly the trap our philosophy memo (`project_racked_philosophy.md`) tells us to avoid when a real GPL alternative exists at parity. + +Why this beats S2's Nexus / Elaine path: + +- Nexus is BIN-only (no bidding). Players already use bidding on Kiranhart; removing it is a regression. +- Elaine Qheart's plugin is open beta with ~1k installs. The license is right, the maturity is not. +- ExcellentShop's AH module has BIN+bid+per-rank caps+tax — feature-parity with Kiranhart, GPL license, single-vendor support story. + +S3 was directionally right. The fix vs S3 is mostly operational (alias commands under `/pm`, disable Chest module, build from source). + +--- + +## 6. Migration cost + +| Step | Effort | Risk | +|---|---|---| +| 1. Build ExcellentShop + CoinsEngine + NightCore from source on a builder pod | 1 evening | Low — `mvn package`, output jars | +| 2. Stage on dev container, replicate EZShop 8 categories into `virtual-shop/` YAML | 2-3 hours | Low — YAML, no schema gotchas | +| 3. Migrate AuctionHouse listings | **Cannot migrate active listings** — drain or expire current AH first; new AH starts empty | Medium — communicate to players | +| 4. Alias `/pm shop` → `/vshop`, `/pm market` → `/ah`, hide native cmds | 30 min via `commands.yml` | Low | +| 5. Disable Chest Shop module (we don't need it; QuickShop-Hikari is the future story) | 5 min config flag | None | +| 6. Smoke-test on staging: 54-slot layout, per-rank discount perms, sellall, AH listing+bid | Half day | Low | +| 7. Maintenance-window swap on live: stop server, drop EZShop+AuctionHouse jars, drop new jars, reload configs | 30 min downtime | Medium — see risk register | +| 8. Update `AUDIT-2026-05-07.md` F-11, update `/pm help`, post player notice | 1 hour | None | + +**Total:** roughly one evening of build+stage + one half-day staging trial + one short maintenance window. No code changes to other plugins. AuthLimbo, chat plugin, LP prefixes — all untouched. + +--- + +## 7. Risk register + +| Risk | Likelihood | Impact | Mitigation | +|---|---|---|---| +| ExcellentShop GPL build breaks on a future Paper API rev | Low | Medium | Pin a known-good tag; CI build on Forgejo runner | +| NightCore framework jar drift between ExcellentShop and CoinsEngine | Low | Medium | Lock both to the same release wave; smoke-test on each upgrade | +| Player backlash over draining current AH listings | Medium | Low | Two-week heads-up in `/pm news`; offer to refund stuck items manually | +| `/pm` alias collisions with existing chat plugin commands | Low | Low | Audit `/pm` namespace before swap; document in SYSTEM.md | +| ExcellentShop dev (NightExpress) goes dark | Low | High | Source is GPL-3 — we keep buildable copy; fall back to Stack C (Genesis + Elaine) only if needed | +| Per-rank discount permissions clash with LP prefixes-locked rule | Low | Low | Discount perms ride on rank perms, not prefix metadata — orthogonal to `feedback_lp_prefixes_locked.md` | +| YOU500-style player wants bidding back in identical Kiranhart UX | Medium | Low | ExcellentShop AH supports bid+BIN; theme tweaks deliver familiar feel | +| Build-from-source policy adds ops overhead | Certain | Low | Document in `nullstone-server/build-shop.md`; one-line `mvn package` script | + +--- + +## 8. Decision + +**Adopt Stack A — ExcellentShop unified, GPL-3, built from source.** Schedule the migration after the next AuthLimbo release window. Update audit F-11 to reference this doc. Keep S1's EconomyShopGUI and S2's Nexus / Elaine in the back pocket as fallbacks if ExcellentShop ever goes dark.