06a4d1df48
Co-authored-by: henriquescrrrr <192057244+henriquescrrrr@users.noreply.github.com>
6.3 KiB
6.3 KiB
ServerShop
A professional server-run global market plugin for Paper/Purpur 1.21.1 servers. This plugin provides a GUI-driven shop where players can buy and sell all game items at configurable prices.
Overview
ServerShop is designed to work alongside the CommunityMarket player-to-player marketplace. It features a large spread between buy and sell prices, ensuring that player-to-player trading via CommunityMarket remains the preferred option for best deals.
How the Spread Works
- Buy Price: What the server charges when selling to players (higher)
- Sell Price: What the server pays when buying from players (lower)
- Default Spread: 75% (
sellMultiplier = 0.25)
For example, a Diamond with a buy price of $100:
- Server sells to player: $100
- Server buys from player: $25 (100 × 0.25)
- Players trading via CommunityMarket might sell for $60-80, making it better for both buyer and seller
Features
- GUI-Only Interface: All interactions through intuitive inventory GUIs
- Category System: Items organized into 10 categories (Blocks, Ores, Farming, Food, Mob Drops, Redstone, Decoration, Tools, Combat, Brewing, Misc)
- Search: Find items by name via chat input
- Pagination: Browse large categories with page navigation
- Quantity Selection: Adjust amounts with -32/-16/-8/-1/+1/+8/+16/+32 and MIN/MAX buttons
- Sell Hand / Sell Inventory: Quick-sell shortcuts from the main menu
- Vault Economy: Full integration with any Vault-compatible economy plugin
- Multi-Language: English (en_US) and Portuguese (pt_PT) included
- Transaction Logging: SQLite database for tracking all transactions
- Anti-Exploit: Comprehensive protection against item duplication and GUI exploits
- Configurable Pricing: Per-category multipliers, per-item overrides, buy/sell toggles
Requirements
- Paper or Purpur 1.21.1+
- Java 21
- Vault + an economy provider (e.g., EssentialsX, CMI)
Installation
- Download the
ServerShop-1.0.0.jar - Place it in your server's
plugins/folder - Make sure Vault and an economy plugin are installed
- Start/restart the server
- Edit configuration files in
plugins/ServerShop/
Commands
| Command | Description | Permission |
|---|---|---|
/shop |
Opens the server shop GUI | servershop.use |
/servershop |
Alias for /shop |
servershop.use |
/shop reload |
Reloads all configuration | servershop.admin.reload |
Permissions
| Permission | Description | Default |
|---|---|---|
servershop.use |
Access the server shop | true |
servershop.buy |
Buy items from the shop | true |
servershop.sell |
Sell items to the shop | true |
servershop.sell.hand |
Use the "sell hand" feature | true |
servershop.sell.inventory |
Use the "sell inventory" feature | true |
servershop.admin |
Admin permissions | op |
servershop.admin.reload |
Reload configuration | op |
Configuration
config.yml
Main plugin settings including:
- Language selection
- Economy settings (symbol, decimal places, sell tax)
- Pricing defaults (global sell multiplier)
- Shop behavior (full inventory action, sell hand/inventory toggles)
- GUI settings (titles, filler items, sounds)
- Transaction logging
prices.yml
Item pricing configuration with:
- Categories: Define categories with icon, sell multiplier, and item lists
- Items: Each item has a buy price; sell price is auto-calculated
- Overrides: Per-item buy/sell price overrides and enable/disable toggles
Adding/Editing Prices
categories:
MyCategory:
icon: DIAMOND # Category icon material
sell-multiplier: 0.30 # Override global multiplier
buy-enabled: true
sell-enabled: true
items:
DIAMOND: 100.0 # Buy price = $100, Sell = $100 * 0.30 = $30
EMERALD: 50.0 # Buy price = $50, Sell = $50 * 0.30 = $15
Per-Item Overrides
overrides:
ELYTRA:
sell: 500.0 # Override auto-calculated sell price
COMMAND_BLOCK:
buy-enabled: false # Cannot be purchased
sell-enabled: false # Cannot be sold
Language Files
Located in lang/en_US.yml and lang/pt_PT.yml. All GUI labels and messages are fully customizable.
Building from Source
cd ServerShop
mvn clean package
The compiled JAR will be in ServerShop/target/.
Architecture
pt.henrique.servershop
├── ServerShop.java # Main plugin class
├── command/
│ └── ShopCommand.java # /shop command handler
├── config/
│ ├── ConfigManager.java # Main config (config.yml)
│ └── MessageManager.java # Language/message system
├── economy/
│ └── EconomyManager.java # Vault economy integration
├── pricing/
│ ├── PricingService.java # Price calculation & lookup
│ └── ItemPrice.java # Price data model
├── category/
│ ├── CategoryRegistry.java # Category management
│ └── ShopCategory.java # Category data model
├── gui/
│ ├── ShopGui.java # GUI interface
│ ├── GuiManager.java # GUI orchestration
│ ├── MainShopGui.java # Main menu
│ ├── CategoryGui.java # Category browser
│ ├── ItemDetailGui.java # Buy/sell detail view
│ └── SearchResultsGui.java # Search results
├── service/
│ └── ShopService.java # Buy/sell business logic
├── transaction/
│ └── TransactionLogger.java # SQLite transaction logging
├── listener/
│ └── GuiListener.java # Anti-exploit GUI listener
└── util/
├── ItemBuilder.java # Fluent ItemStack builder
└── TextUtil.java # Text formatting utilities
Known Limitations
- Special Items: Enchanted books, potions, and other items with special metadata are excluded by default (configurable via
pricing.include-special-items) - Dynamic Pricing: v1.0 uses static, config-driven pricing only. Dynamic supply/demand pricing may be added in a future version
- New Items: Items added in future Minecraft updates will automatically fall into the "Misc" category if not explicitly configured
License
MIT License - See LICENSE for details.