docs: shop system research + decision (ExcellentShop or split)

This commit is contained in:
s8n 2026-05-07 22:35:28 +01:00
parent 41ae6f90ef
commit 9565f0bf53
4 changed files with 438 additions and 0 deletions

View file

@ -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.<n>` 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.211.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.211.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.211.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.211.21.10 | both | not documented | not documented | webhooks | yes | Geyser/Bedrock UI, newer entrant |
| **ModernHDV** (SpigotMC) | 2026-02 | Free + paid Pro | 1.141.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.81.21 | yes | yes | yes | partial | yes | "Most used"; mixed reviews on support; anti-dupe built in |
| **AuctionMaster** (SpigotMC) | active 1.21.6 | paid | 1.81.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)

View file

@ -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 (~$1520) 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.

101
docs/RESEARCH-SHOP-GUI.md Normal file
View file

@ -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.<n>`).
- **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.51.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.201.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.

View file

@ -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.