diff --git a/.idea/copilot.data.migration.agent.xml b/.idea/copilot.data.migration.agent.xml
new file mode 100644
index 0000000..4ea72a9
--- /dev/null
+++ b/.idea/copilot.data.migration.agent.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/copilot.data.migration.edit.xml b/.idea/copilot.data.migration.edit.xml
new file mode 100644
index 0000000..8648f94
--- /dev/null
+++ b/.idea/copilot.data.migration.edit.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..810de20
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,73 @@
+# Changelog
+
+All notable changes to CommunityMarket will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## [1.0.0] - 2026-01-15
+
+### Added
+
+#### Core Features
+- **Fixed-Price Market**: Create and browse fixed-price listings
+- **Auction System**: Full auction support with bidding, buyout, and anti-snipe protection
+- **Claim Storage**: Safe item delivery for expired listings and won auctions
+- **Earnings System**: Pending earnings with withdraw functionality
+
+#### GUI System
+- Fully GUI-based interface - no complex commands to learn
+- Intuitive item selection from player inventory
+- Quantity selection with step buttons for stackable items
+- Price and duration settings with click-to-adjust controls
+- Paginated browsing for listings and auctions
+- Confirmation dialogs for purchases and bids
+
+#### Economy Integration
+- **Vault support** (primary): Works with any Vault-compatible economy plugin
+- **EssentialsX fallback**: Direct integration when Vault is not available
+- Thread-safe economy operations
+- Detailed startup logging for economy detection
+
+#### Administration
+- Admin GUI for viewing all listings and auctions
+- Remove any listing or cancel any auction
+- Force-end auctions with proper refunds
+- In-game configuration reload
+
+#### Configuration
+- SQLite database (default) with MySQL support
+- Configurable taxes for market and auction sales
+- Listing and auction limits per player
+- Duration options for listings and auctions
+- Item blacklist by material and keywords
+- Sound effects customization
+- Notification settings
+
+#### Localization
+- Full language file support
+- Included languages: English (en_US), Portuguese (pt_PT)
+- All messages and GUI text customizable
+
+### Technical
+- Built for Paper 1.21+
+- Requires Java 21+
+- Uses HikariCP for database connection pooling
+- Async database operations with sync economy calls for safety
+- Atomic transaction handling to prevent duplication bugs
+
+---
+
+## Future Releases
+
+### Planned Features
+- Search/filter functionality in browse GUIs
+- Category system for listings
+- Statistics and leaderboards
+- Public API for developer integration
+- Additional language translations
+
+---
+
+For more information, see the [README](README.md) or visit our [GitHub repository](https://github.com/henrique/CommunityMarket).
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..2d54ee2
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2026 Henrique
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/README.md b/README.md
index e922b62..3eefda4 100644
--- a/README.md
+++ b/README.md
@@ -1,20 +1,23 @@
# CommunityMarket
-A professional, production-ready GUI-only marketplace plugin for Minecraft Paper 1.21.11.
+[](https://modrinth.com/plugin/communitymarket)
+[](LICENSE)
-Players can create fixed-price listings and auctions, browse, buy, bid, claim items, and withdraw earnings — all through intuitive GUIs. No complex commands to learn!
+A professional, production-ready **GUI-only marketplace plugin** for Minecraft Paper 1.21+.
-## Features
+Players can create fixed-price listings and auctions, browse, buy, bid, claim items, and withdraw earnings — all through intuitive GUIs. **No complex commands to learn!**
+
+## ✨ Features
### 🛒 Fixed-Price Market
- Create listings with custom prices and durations
-- Browse paginated listings with categories and sorting
+- Browse paginated listings with sorting
- Safe atomic purchases to prevent double-buying
- Configurable taxes on sales
### 🔨 Auction System
-- Start auctions with minimum bid and optional buyout
-- Anti-snipe protection extends auction when bids arrive near the end
+- Start auctions with minimum bid and optional buyout price
+- **Anti-snipe protection** extends auction when bids arrive near the end
- Bid history and automatic outbid notifications
- Safe handling of auction endings and payouts
@@ -24,48 +27,53 @@ Players can create fixed-price listings and auctions, browse, buy, bid, claim it
- Handles full inventories gracefully
### 💰 Earnings Management
-- Pending earnings from sales
-- Withdraw all at once
+- Pending earnings from sales accumulate
+- Withdraw all earnings at once
- Complete transaction history
### 🔐 Admin Features (GUI-based)
- View all listings and auctions
-- Remove any listing
-- Cancel/force-end auctions
-- Reload configuration
+- Remove any listing or cancel auctions
+- Force-end auctions
+- Reload configuration in-game
### 🎮 Intuitive GUI Flow
The creation flow for listings and auctions:
1. **Main Menu** - Central hub for all actions
-2. **Select Item** - Click an item from your inventory to select it
-3. **Select Quantity** - Choose how many to sell (for stackable items with quantity > 1)
- - Step buttons: -32, -16, -8, -1 and +1, +8, +16, +32
- - MIN and MAX preset buttons for quick selection
- - Items are matched by exact metadata (material, name, lore, enchants, custom model data)
-4. **Settings** - Set price and duration with merged, clickable elements
- - Single-item interface: each setting is one clickable item showing all info
- - No redundant info/action item pairs
-5. **Confirm** - Review and confirm your listing/auction
- - Final validation ensures items still exist before creating
+2. **Select Item** - Click an item from your inventory
+3. **Select Quantity** - Choose how many to sell (for stackable items)
+4. **Settings** - Set price and duration with easy click-to-adjust controls
+5. **Confirm** - Review and create your listing/auction
-## Requirements
+## 📋 Requirements
-- **Server**: Paper 1.21.11 (or compatible)
-- **Java**: Java 21
-- **Economy**: One of the following:
- - Vault + any Vault-compatible economy (Essentials, CMI, etc.)
- - EssentialsX (fallback if Vault is not present)
+| Requirement | Version |
+|-------------|---------|
+| **Server** | Paper 1.21+ (or Purpur, Folia-compatible forks) |
+| **Java** | Java 21+ |
+| **Economy** | Vault + economy plugin **OR** EssentialsX |
-## Installation
+### Economy Support
+CommunityMarket supports two economy configurations:
-1. Download `CommunityMarket-1.0.0.jar`
+1. **Vault + Economy Plugin** (Recommended)
+ - Install [Vault](https://www.spigotmc.org/resources/vault.34315/)
+ - Install an economy plugin: [EssentialsX](https://essentialsx.net/), CMI, or any Vault-compatible economy
+
+2. **EssentialsX Standalone** (Fallback)
+ - Install [EssentialsX](https://essentialsx.net/) with economy enabled
+ - CommunityMarket will use EssentialsX directly if Vault is not present
+
+## 📥 Installation
+
+1. Download the latest `CommunityMarket-x.x.x.jar` from [Modrinth](https://modrinth.com/plugin/communitymarket)
2. Place it in your server's `plugins/` folder
-3. Ensure you have an economy plugin installed (Vault recommended)
-4. Start/restart your server
+3. Ensure you have an economy system installed (see above)
+4. Start or restart your server
5. Edit `plugins/CommunityMarket/config.yml` as needed
6. Use `/market` to open the marketplace!
-## Commands
+## 🎮 Commands
| Command | Alias | Description | Permission |
|---------|-------|-------------|------------|
@@ -73,128 +81,131 @@ The creation flow for listings and auctions:
**That's it!** Everything else is done through GUIs.
-## Permissions
+## 🔒 Permissions
| Permission | Description | Default |
|------------|-------------|---------|
| `communitymarket.*` | All permissions | op |
-| `communitymarket.use` | Access the market GUI | true |
-| `communitymarket.sell` | Create fixed-price listings | true |
-| `communitymarket.auction` | Create auctions | true |
-| `communitymarket.buy` | Purchase from the market | true |
-| `communitymarket.bid` | Bid on auctions | true |
-| `communitymarket.claim` | Claim items from storage | true |
-| `communitymarket.withdraw` | Withdraw earnings | true |
+| `communitymarket.use` | Access the market GUI | everyone |
+| `communitymarket.sell` | Create fixed-price listings | everyone |
+| `communitymarket.auction` | Create auctions | everyone |
+| `communitymarket.buy` | Purchase from the market | everyone |
+| `communitymarket.bid` | Bid on auctions | everyone |
+| `communitymarket.claim` | Claim items from storage | everyone |
+| `communitymarket.withdraw` | Withdraw earnings | everyone |
| `communitymarket.admin` | Access admin functions | op |
| `communitymarket.admin.viewall` | View all listings/auctions | op |
| `communitymarket.admin.remove` | Remove any listing/auction | op |
| `communitymarket.admin.reload` | Reload configuration | op |
-## Configuration
+## ⚙️ Configuration
-### config.yml
+### config.yml Highlights
```yaml
# Language setting (available: en_US, pt_PT)
language: en_US
-# Database Configuration
+# Database: sqlite (default) or mysql
database:
- type: sqlite # or "mysql"
- sqlite:
- file: database.db
- mysql:
- host: localhost
- port: 3306
- database: communitymarket
- username: root
- password: ""
+ type: sqlite
-# Economy Settings
+# Economy settings
economy:
currency-format: "$#,##0.00"
- currency-symbol: "$"
taxes:
- market-tax: 5.0 # 5% tax on listings
- auction-tax: 7.5 # 7.5% tax on auctions
+ market-tax: 5.0 # Tax on fixed-price sales
+ auction-tax: 7.5 # Tax on auction sales
-# Market Settings
+# Fixed-Price Market
market:
max-listings-per-player: 20
- listing-cooldown: 0 # seconds between listings
default-duration-hours: 168 # 7 days
min-price: 1.0
max-price: 1000000000.0
-# Auction Settings
+# Auctions
auction:
max-auctions-per-player: 10
- min-duration-hours: 1
- max-duration-hours: 168
+ default-duration-hours: 24
anti-snipe:
enabled: true
trigger-seconds: 30
extension-seconds: 30
- max-extensions: 10
# GUI Settings
gui:
- items-per-page: 45
- show-help-button: true # Set to false to hide help button in main menu
+ show-help-button: true # Toggle help button visibility
+ sounds:
+ click: UI_BUTTON_CLICK
+ success: ENTITY_PLAYER_LEVELUP
+ error: ENTITY_VILLAGER_NO
```
-See the full `config.yml` for all options.
+### Available Languages
+- `en_US` - English (default)
+- `pt_PT` - Portuguese
-### Languages
+Language files are located in `plugins/CommunityMarket/lang/` and can be customized.
-CommunityMarket ships with two languages:
-- **English (US)**: `en_US`
-- **Portuguese (Portugal)**: `pt_PT`
+## 🔧 Troubleshooting
+
+### "No compatible economy provider found!"
+
+This error appears when CommunityMarket cannot find an economy system.
+
+**Solutions:**
+1. **Install Vault + an economy plugin:**
+ - Download [Vault](https://www.spigotmc.org/resources/vault.34315/)
+ - Download [EssentialsX](https://essentialsx.net/) or another economy plugin
+ - Restart your server
+
+2. **Using EssentialsX without Vault:**
+ - Make sure EssentialsX is installed and enabled
+ - Check that `economy` is not disabled in EssentialsX's `config.yml`
+
+### Items stuck in claim storage
+
+If a player's inventory was full when they purchased an item or won an auction, the item goes to their claim storage. They can retrieve it from the main menu → "Claim Items".
+
+### Auctions not ending
+
+Auctions are checked periodically (every 5 seconds by default). If auctions seem stuck:
+- Check server console for errors
+- Verify the database is working properly
+- Try `/market admin` → View Auctions to see auction status
+
+### Database issues
+
+By default, CommunityMarket uses SQLite (no setup required). For larger servers, MySQL is recommended:
-Change the language in `config.yml`:
```yaml
-language: pt_PT
+database:
+ type: mysql
+ mysql:
+ host: localhost
+ port: 3306
+ database: communitymarket
+ username: your_user
+ password: your_password
```
-You can create custom language files by copying an existing one in `plugins/CommunityMarket/lang/`.
+## 📊 API
-## Building from Source
+CommunityMarket does not currently provide a public API. If you need integration capabilities, please open an issue on GitHub.
-```bash
-git clone https://github.com/henrique/CommunityMarket.git
-cd CommunityMarket
-mvn clean package
-```
+## 🤝 Support
-The compiled JAR will be in `target/CommunityMarket-1.0.0.jar`.
+- **Issues & Bug Reports:** [GitHub Issues](https://github.com/henrique/CommunityMarket/issues)
+- **Feature Requests:** [GitHub Issues](https://github.com/henrique/CommunityMarket/issues)
-## FAQ
+## 📜 License
-### Q: The plugin says "No economy plugin found!"
-**A:** Install Vault + an economy plugin (like EssentialsX) or just EssentialsX.
+This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
-### Q: Can I use MySQL instead of SQLite?
-**A:** Yes! Change `database.type` to `mysql` in config.yml and fill in your credentials.
+## 🙏 Credits
-### Q: How do I change the GUI titles?
-**A:** Edit the language file in `plugins/CommunityMarket/lang/`.
-
-### Q: Items aren't being removed when creating listings?
-**A:** This is a known issue with some inventory plugins. Make sure you're running Paper 1.21.11.
-
-### Q: How do taxes work?
-**A:** When an item sells, the tax percentage is deducted from the seller's earnings. Buyers pay the listed price.
-
-## Support
-
-- **Issues**: [GitHub Issues](https://github.com/henrique/CommunityMarket/issues)
-- **Discord**: Coming soon
-
-## License
-
-MIT License - See LICENSE file for details.
-
----
-
-Made with ❤️ for the Minecraft community
+- Built for the Paper/Spigot community
+- Uses [Vault](https://github.com/MilkBowl/VaultAPI) for economy integration
+- Uses [HikariCP](https://github.com/brettwooldridge/HikariCP) for database connection pooling
diff --git a/RELEASE_CHECKLIST.md b/RELEASE_CHECKLIST.md
new file mode 100644
index 0000000..b2e33b9
--- /dev/null
+++ b/RELEASE_CHECKLIST.md
@@ -0,0 +1,107 @@
+# Release Checklist for Modrinth
+
+Use this checklist before uploading a new release to Modrinth.
+
+## Pre-Release Verification
+
+### Build & Code Quality
+- [ ] Code compiles without errors (`mvn clean package`)
+- [ ] No critical warnings in compiler output
+- [ ] All tests pass (if applicable)
+- [ ] Plugin JAR is created in `target/communitymarket-x.x.x.jar`
+
+### Functional Testing
+- [ ] Plugin loads without errors on a fresh Paper 1.21+ server
+- [ ] Economy detection works:
+ - [ ] Scenario A: Vault + EssentialsX → Uses Vault
+ - [ ] Scenario B: Vault only (no economy) → Clear error message, plugin disables
+ - [ ] Scenario C: EssentialsX only (no Vault) → Uses EssentialsX directly
+ - [ ] Scenario D: Neither installed → Clear error message, plugin disables
+- [ ] `/market` command opens the main menu
+- [ ] `/cmarket` alias works
+
+### Feature Testing
+- [ ] **Listings**: Create, browse, purchase, cancel, expire
+- [ ] **Auctions**: Create, bid, buyout, anti-snipe extension, expire
+- [ ] **Claim Storage**: Items delivered correctly, claim GUI works
+- [ ] **Earnings**: Earnings accumulate, withdraw works
+- [ ] **Admin**: View all, remove listings, cancel auctions, reload config
+
+### Configuration
+- [ ] Default config.yml has safe values
+- [ ] Language files (en_US.yml, pt_PT.yml) are complete
+- [ ] Config reload (`/market admin` → reload) works
+
+### Documentation
+- [ ] README.md is up to date
+- [ ] CHANGELOG.md has current version entry
+- [ ] LICENSE file is present
+
+---
+
+## Modrinth Upload Checklist
+
+### Project Information
+- [ ] Project name: `CommunityMarket`
+- [ ] Summary: "A GUI-only marketplace plugin for fixed-price listings and auctions"
+- [ ] Description: Use content from README.md
+- [ ] Categories: Economy, Miscellaneous
+- [ ] Client-side: No (Server-side only)
+- [ ] Server-side: Required
+- [ ] License: MIT
+
+### Version Details
+- [ ] Version number matches pom.xml and CHANGELOG.md
+- [ ] Version type: Release (or Alpha/Beta if applicable)
+- [ ] Game versions: 1.21, 1.21.1 (add newer as supported)
+- [ ] Loaders: Paper, Purpur
+- [ ] Changelog: Copy from CHANGELOG.md
+
+### Files
+- [ ] Upload primary JAR: `communitymarket-x.x.x.jar`
+- [ ] Do NOT upload `original-communitymarket-x.x.x.jar` (doesn't include shaded dependencies)
+
+### Dependencies (Modrinth)
+- [ ] Mark Vault as optional dependency (if available on Modrinth)
+- [ ] Mark EssentialsX as optional dependency (if available on Modrinth)
+
+### Gallery (Optional)
+- [ ] Screenshot of main menu
+- [ ] Screenshot of browse listings
+- [ ] Screenshot of create listing flow
+
+---
+
+## Post-Release
+
+- [ ] Verify download works correctly
+- [ ] Test downloaded JAR on a clean server
+- [ ] Announce release (if applicable)
+- [ ] Tag release in Git: `git tag -a v1.0.0 -m "Release 1.0.0"`
+- [ ] Push tag: `git push origin v1.0.0`
+
+---
+
+## Version Naming Convention
+
+- **Major.Minor.Patch** (e.g., 1.0.0)
+ - Major: Breaking changes or major feature additions
+ - Minor: New features, backwards compatible
+ - Patch: Bug fixes, small improvements
+
+---
+
+## Quick Commands
+
+```bash
+# Clean build
+mvn clean package
+
+# Run local test server (if configured)
+# Place JAR in test-server/plugins/
+
+# Create Git tag
+git tag -a v1.0.0 -m "Release 1.0.0"
+git push origin v1.0.0
+```
+
diff --git a/src/main/java/pt/henrique/communityMarket/CommunityMarket.java b/src/main/java/pt/henrique/communityMarket/CommunityMarket.java
index ca85bd1..500e4f8 100644
--- a/src/main/java/pt/henrique/communityMarket/CommunityMarket.java
+++ b/src/main/java/pt/henrique/communityMarket/CommunityMarket.java
@@ -1,6 +1,5 @@
package pt.henrique.communityMarket;
-import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;
import pt.henrique.communityMarket.command.MarketCommand;
import pt.henrique.communityMarket.config.ConfigManager;
@@ -14,7 +13,6 @@ import pt.henrique.communityMarket.service.*;
import pt.henrique.communityMarket.task.AuctionTask;
import pt.henrique.communityMarket.task.ExpiredListingTask;
-import java.util.logging.Level;
public final class CommunityMarket extends JavaPlugin {
@@ -46,12 +44,10 @@ public final class CommunityMarket extends JavaPlugin {
// Initialize economy
economyManager = new EconomyManager(this);
if (!economyManager.setupEconomy()) {
- getLogger().severe("No economy plugin found! Please install Vault or EssentialsX.");
- getLogger().severe("Disabling CommunityMarket...");
+ getLogger().severe("Disabling CommunityMarket due to missing economy provider.");
getServer().getPluginManager().disablePlugin(this);
return;
}
- getLogger().info("Economy provider: " + economyManager.getProviderName());
// Initialize database
databaseManager = new DatabaseManager(this);
diff --git a/src/main/java/pt/henrique/communityMarket/economy/EconomyManager.java b/src/main/java/pt/henrique/communityMarket/economy/EconomyManager.java
index 0f182d1..1e9759c 100644
--- a/src/main/java/pt/henrique/communityMarket/economy/EconomyManager.java
+++ b/src/main/java/pt/henrique/communityMarket/economy/EconomyManager.java
@@ -3,78 +3,192 @@ package pt.henrique.communityMarket.economy;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
+import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.RegisteredServiceProvider;
import pt.henrique.communityMarket.CommunityMarket;
+import java.math.BigDecimal;
import java.util.UUID;
+import java.util.concurrent.CompletableFuture;
import java.util.logging.Level;
/**
- * Manages economy operations using Vault.
+ * Manages economy operations using Vault (preferred) or EssentialsX (fallback).
*
- * Vault provides a unified economy API that works with many economy plugins
- * including EssentialsX, CMI, and others.
+ * Priority order:
+ * 1. Vault with a registered economy provider
+ * 2. EssentialsX economy (direct integration)
+ *
+ * All economy operations can be called from any thread, but the actual
+ * economy API calls are dispatched to the main thread for safety.
*/
public class EconomyManager {
private final CommunityMarket plugin;
- private Economy vaultEconomy;
+ private EconomyAdapter adapter;
+ private String providerName = "None";
public EconomyManager(CommunityMarket plugin) {
this.plugin = plugin;
}
/**
- * Attempts to set up the Vault economy provider.
+ * Attempts to set up an economy provider.
+ * Tries Vault first, then EssentialsX as fallback.
*
- * @return true if Vault economy was found
+ * @return true if an economy provider was found
*/
public boolean setupEconomy() {
- if (Bukkit.getPluginManager().getPlugin("Vault") == null) {
- plugin.getLogger().severe("Vault plugin not found!");
- return false;
+ plugin.getLogger().info("=== Economy Detection ===");
+
+ // Step 1: Check for Vault
+ boolean vaultPresent = Bukkit.getPluginManager().getPlugin("Vault") != null;
+ plugin.getLogger().info("Vault detected: " + (vaultPresent ? "YES" : "NO"));
+
+ if (vaultPresent) {
+ if (setupVaultEconomy()) {
+ plugin.getLogger().info("=== Economy Setup Complete ===");
+ return true;
+ }
+ // Vault found but no provider - log and continue to fallback
+ plugin.getLogger().warning("Vault is installed but no economy provider is registered.");
+ plugin.getLogger().warning("This usually means you have Vault but no economy plugin (EssentialsX, CMI, etc).");
}
+ // Step 2: Try EssentialsX fallback
+ boolean essentialsPresent = Bukkit.getPluginManager().getPlugin("Essentials") != null;
+ plugin.getLogger().info("Essentials detected: " + (essentialsPresent ? "YES" : "NO"));
+
+ if (essentialsPresent) {
+ if (setupEssentialsEconomy()) {
+ plugin.getLogger().info("=== Economy Setup Complete ===");
+ return true;
+ }
+ }
+
+ // Step 3: No economy available
+ plugin.getLogger().severe("=== Economy Setup FAILED ===");
+ plugin.getLogger().severe("No compatible economy provider found!");
+ plugin.getLogger().severe("");
+ plugin.getLogger().severe("To fix this, install ONE of the following:");
+ plugin.getLogger().severe(" Option A: Vault + an economy plugin (EssentialsX, CMI, etc)");
+ plugin.getLogger().severe(" Option B: EssentialsX (with economy enabled in config)");
+ plugin.getLogger().severe("");
+ if (vaultPresent && !essentialsPresent) {
+ plugin.getLogger().severe("You have Vault installed but no economy plugin.");
+ plugin.getLogger().severe("Install EssentialsX or another Vault-compatible economy plugin.");
+ } else if (!vaultPresent && essentialsPresent) {
+ plugin.getLogger().severe("EssentialsX is installed but economy service failed to initialize.");
+ plugin.getLogger().severe("Check that economy is enabled in Essentials config.yml.");
+ } else if (!vaultPresent && !essentialsPresent) {
+ plugin.getLogger().severe("Neither Vault nor EssentialsX is installed.");
+ plugin.getLogger().severe("Please install an economy system.");
+ }
+
+ return false;
+ }
+
+ /**
+ * Attempts to set up Vault economy provider.
+ */
+ private boolean setupVaultEconomy() {
try {
RegisteredServiceProvider rsp = Bukkit.getServicesManager().getRegistration(Economy.class);
if (rsp == null) {
- plugin.getLogger().severe("No economy provider registered with Vault! Please install an economy plugin like EssentialsX.");
+ plugin.getLogger().info("Vault economy provider: NONE REGISTERED");
return false;
}
- vaultEconomy = rsp.getProvider();
- if (vaultEconomy != null) {
- plugin.getLogger().info("Using Vault economy provider: " + vaultEconomy.getName());
- return true;
+ Economy vaultEconomy = rsp.getProvider();
+ if (vaultEconomy == null) {
+ plugin.getLogger().info("Vault economy provider: NULL (registration found but provider is null)");
+ return false;
}
- return false;
+
+ adapter = new VaultAdapter(vaultEconomy);
+ providerName = "Vault (" + vaultEconomy.getName() + ")";
+ plugin.getLogger().info("Vault economy provider: " + vaultEconomy.getName());
+ plugin.getLogger().info("Selected provider: " + providerName);
+ return true;
} catch (Exception e) {
plugin.getLogger().log(Level.SEVERE, "Failed to hook into Vault economy", e);
return false;
}
}
+ /**
+ * Attempts to set up EssentialsX economy as fallback.
+ */
+ private boolean setupEssentialsEconomy() {
+ try {
+ Plugin essPlugin = Bukkit.getPluginManager().getPlugin("Essentials");
+ if (essPlugin == null || !essPlugin.isEnabled()) {
+ plugin.getLogger().info("Essentials plugin: NOT ENABLED");
+ return false;
+ }
+
+ // Check if it's actually EssentialsX (has the expected class)
+ if (!essPlugin.getClass().getName().equals("com.earth2me.essentials.Essentials")) {
+ plugin.getLogger().warning("Essentials plugin found but is not EssentialsX.");
+ plugin.getLogger().warning("Class: " + essPlugin.getClass().getName());
+ return false;
+ }
+
+ // Try to create the adapter
+ EssentialsAdapter essAdapter = new EssentialsAdapter(essPlugin);
+ if (!essAdapter.isAvailable()) {
+ plugin.getLogger().warning("EssentialsX found but economy service is not available.");
+ plugin.getLogger().warning("Check that economy is enabled in Essentials config.yml");
+ return false;
+ }
+
+ adapter = essAdapter;
+ providerName = "EssentialsX (Direct)";
+ plugin.getLogger().info("Using EssentialsX direct economy integration.");
+ plugin.getLogger().info("Selected provider: " + providerName);
+ return true;
+ } catch (Exception e) {
+ plugin.getLogger().log(Level.WARNING, "Failed to set up EssentialsX economy fallback", e);
+ return false;
+ }
+ }
+
/**
* Gets the name of the active economy provider
*/
public String getProviderName() {
- return vaultEconomy != null ? "Vault (" + vaultEconomy.getName() + ")" : "None";
+ return providerName;
}
/**
- * Gets a player's current balance
+ * Checks if the economy manager is ready
+ */
+ public boolean isReady() {
+ return adapter != null;
+ }
+
+ /**
+ * Gets a player's current balance.
+ * Thread-safe: can be called from any thread.
*
* @param playerUuid The player's UUID
* @return The player's balance
*/
public double getBalance(UUID playerUuid) {
- if (vaultEconomy == null) return 0.0;
- OfflinePlayer player = Bukkit.getOfflinePlayer(playerUuid);
- return vaultEconomy.getBalance(player);
+ if (adapter == null) return 0.0;
+
+ // If on main thread, call directly
+ if (Bukkit.isPrimaryThread()) {
+ return adapter.getBalance(playerUuid);
+ }
+
+ // Off main thread - schedule sync and wait
+ return runSync(() -> adapter.getBalance(playerUuid));
}
/**
- * Checks if a player has at least the specified amount
+ * Checks if a player has at least the specified amount.
+ * Thread-safe: can be called from any thread.
*
* @param playerUuid The player's UUID
* @param amount The amount to check
@@ -85,7 +199,8 @@ public class EconomyManager {
}
/**
- * Withdraws money from a player's account
+ * Withdraws money from a player's account.
+ * Thread-safe: can be called from any thread.
*
* @param playerUuid The player's UUID
* @param amount The amount to withdraw
@@ -93,17 +208,20 @@ public class EconomyManager {
*/
public boolean withdraw(UUID playerUuid, double amount) {
if (amount <= 0) return true;
- if (vaultEconomy == null) return false;
+ if (adapter == null) return false;
- OfflinePlayer player = Bukkit.getOfflinePlayer(playerUuid);
- if (!vaultEconomy.has(player, amount)) {
- return false;
+ // If on main thread, call directly
+ if (Bukkit.isPrimaryThread()) {
+ return adapter.withdraw(playerUuid, amount);
}
- return vaultEconomy.withdrawPlayer(player, amount).transactionSuccess();
+
+ // Off main thread - schedule sync and wait
+ return runSync(() -> adapter.withdraw(playerUuid, amount));
}
/**
- * Deposits money into a player's account
+ * Deposits money into a player's account.
+ * Thread-safe: can be called from any thread.
*
* @param playerUuid The player's UUID
* @param amount The amount to deposit
@@ -111,14 +229,21 @@ public class EconomyManager {
*/
public boolean deposit(UUID playerUuid, double amount) {
if (amount <= 0) return true;
- if (vaultEconomy == null) return false;
+ if (adapter == null) return false;
- OfflinePlayer player = Bukkit.getOfflinePlayer(playerUuid);
- return vaultEconomy.depositPlayer(player, amount).transactionSuccess();
+ // If on main thread, call directly
+ if (Bukkit.isPrimaryThread()) {
+ return adapter.deposit(playerUuid, amount);
+ }
+
+ // Off main thread - schedule sync and wait
+ Boolean result = runSync(() -> adapter.deposit(playerUuid, amount));
+ return result != null && result;
}
/**
- * Transfers money between two players
+ * Transfers money between two players.
+ * Thread-safe: can be called from any thread.
*
* @param fromUuid The UUID of the payer
* @param toUuid The UUID of the receiver
@@ -143,15 +268,198 @@ public class EconomyManager {
}
/**
- * Formats an amount according to the economy's formatting
+ * Formats an amount according to the economy's formatting.
*
* @param amount The amount to format
* @return Formatted currency string
*/
public String format(double amount) {
- if (vaultEconomy != null) {
- return vaultEconomy.format(amount);
+ if (adapter != null) {
+ return adapter.format(amount);
}
return plugin.getMessageManager().formatCurrency(amount);
}
+
+ /**
+ * Runs a task synchronously on the main thread and waits for the result.
+ * If already on main thread, runs directly.
+ */
+ private T runSync(java.util.function.Supplier task) {
+ if (Bukkit.isPrimaryThread()) {
+ return task.get();
+ }
+
+ CompletableFuture future = new CompletableFuture<>();
+ Bukkit.getScheduler().runTask(plugin, () -> {
+ try {
+ future.complete(task.get());
+ } catch (Exception e) {
+ future.completeExceptionally(e);
+ }
+ });
+
+ try {
+ return future.join();
+ } catch (Exception e) {
+ plugin.getLogger().log(Level.SEVERE, "Economy operation failed", e);
+ return null;
+ }
+ }
+
+ // ==================== ADAPTER INTERFACE ====================
+
+ /**
+ * Interface for economy adapters
+ */
+ private interface EconomyAdapter {
+ double getBalance(UUID playerUuid);
+ boolean withdraw(UUID playerUuid, double amount);
+ boolean deposit(UUID playerUuid, double amount);
+ String format(double amount);
+ }
+
+ // ==================== VAULT ADAPTER ====================
+
+ /**
+ * Adapter for Vault economy
+ */
+ private static class VaultAdapter implements EconomyAdapter {
+ private final Economy economy;
+
+ VaultAdapter(Economy economy) {
+ this.economy = economy;
+ }
+
+ @Override
+ public double getBalance(UUID playerUuid) {
+ OfflinePlayer player = Bukkit.getOfflinePlayer(playerUuid);
+ return economy.getBalance(player);
+ }
+
+ @Override
+ public boolean withdraw(UUID playerUuid, double amount) {
+ OfflinePlayer player = Bukkit.getOfflinePlayer(playerUuid);
+ if (!economy.has(player, amount)) {
+ return false;
+ }
+ return economy.withdrawPlayer(player, amount).transactionSuccess();
+ }
+
+ @Override
+ public boolean deposit(UUID playerUuid, double amount) {
+ OfflinePlayer player = Bukkit.getOfflinePlayer(playerUuid);
+ return economy.depositPlayer(player, amount).transactionSuccess();
+ }
+
+ @Override
+ public String format(double amount) {
+ return economy.format(amount);
+ }
+ }
+
+ // ==================== ESSENTIALS ADAPTER ====================
+
+ /**
+ * Adapter for EssentialsX direct economy integration
+ */
+ private static class EssentialsAdapter implements EconomyAdapter {
+ private final Object essentials;
+ private final java.lang.reflect.Method getUserMethod;
+ private final java.lang.reflect.Method getMoneyMethod;
+ private final java.lang.reflect.Method setMoneyMethod;
+ private final boolean available;
+
+ EssentialsAdapter(Plugin essPlugin) {
+ this.essentials = essPlugin;
+
+ java.lang.reflect.Method getUserTemp = null;
+ java.lang.reflect.Method getMoneyTemp = null;
+ java.lang.reflect.Method setMoneyTemp = null;
+ boolean availableTemp = false;
+
+ try {
+ // Get the getUser method
+ Class> essClass = essPlugin.getClass();
+ getUserTemp = essClass.getMethod("getUser", UUID.class);
+
+ // Get User class and its money methods
+ Class> userClass = Class.forName("com.earth2me.essentials.User");
+ getMoneyTemp = userClass.getMethod("getMoney");
+ setMoneyTemp = userClass.getMethod("setMoney", BigDecimal.class);
+
+ // Test that it works
+ availableTemp = true;
+ } catch (Exception e) {
+ // Methods not available
+ }
+
+ this.getUserMethod = getUserTemp;
+ this.getMoneyMethod = getMoneyTemp;
+ this.setMoneyMethod = setMoneyTemp;
+ this.available = availableTemp;
+ }
+
+ public boolean isAvailable() {
+ return available;
+ }
+
+ @Override
+ public double getBalance(UUID playerUuid) {
+ try {
+ Object user = getUserMethod.invoke(essentials, playerUuid);
+ if (user == null) return 0.0;
+
+ BigDecimal money = (BigDecimal) getMoneyMethod.invoke(user);
+ return money != null ? money.doubleValue() : 0.0;
+ } catch (Exception e) {
+ return 0.0;
+ }
+ }
+
+ @Override
+ public boolean withdraw(UUID playerUuid, double amount) {
+ try {
+ Object user = getUserMethod.invoke(essentials, playerUuid);
+ if (user == null) return false;
+
+ BigDecimal current = (BigDecimal) getMoneyMethod.invoke(user);
+ if (current == null) current = BigDecimal.ZERO;
+
+ BigDecimal amountBD = BigDecimal.valueOf(amount);
+ if (current.compareTo(amountBD) < 0) {
+ return false;
+ }
+
+ BigDecimal newBalance = current.subtract(amountBD);
+ setMoneyMethod.invoke(user, newBalance);
+ return true;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+ @Override
+ public boolean deposit(UUID playerUuid, double amount) {
+ try {
+ Object user = getUserMethod.invoke(essentials, playerUuid);
+ if (user == null) return false;
+
+ BigDecimal current = (BigDecimal) getMoneyMethod.invoke(user);
+ if (current == null) current = BigDecimal.ZERO;
+
+ BigDecimal newBalance = current.add(BigDecimal.valueOf(amount));
+ setMoneyMethod.invoke(user, newBalance);
+ return true;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+ @Override
+ public String format(double amount) {
+ // EssentialsX doesn't have a simple format method accessible this way
+ // Return a reasonable default
+ return String.format("$%.2f", amount);
+ }
+ }
}
diff --git a/target/CommunityMarket-1.0.0.jar b/target/CommunityMarket-1.0.0.jar
deleted file mode 100644
index 81607b2..0000000
Binary files a/target/CommunityMarket-1.0.0.jar and /dev/null differ
diff --git a/target/classes/config.yml b/target/classes/config.yml
deleted file mode 100644
index 1bd7524..0000000
--- a/target/classes/config.yml
+++ /dev/null
@@ -1,152 +0,0 @@
-# ============================================
-# CommunityMarket Configuration
-# A GUI-only marketplace plugin
-# ============================================
-
-# Language setting (available: en_US, pt_PT)
-language: en_US
-
-# Database Configuration
-database:
- # Type: sqlite or mysql
- type: sqlite
-
- sqlite:
- file: database.db
-
- mysql:
- host: localhost
- port: 3306
- database: communitymarket
- username: root
- password: ""
- pool:
- maximum-pool-size: 10
- minimum-idle: 2
- connection-timeout: 30000
- idle-timeout: 600000
- max-lifetime: 1800000
-
-# Economy Settings
-economy:
- # Currency display format (uses Java DecimalFormat)
- currency-format: "$#,##0.00"
- currency-symbol: "$"
-
- taxes:
- # Tax percentage for fixed-price market sales (seller pays)
- market-tax: 5.0
- # Tax percentage for auction sales (seller pays)
- auction-tax: 7.5
-
-# Fixed-Price Market Settings
-market:
- # Maximum active listings per player
- max-listings-per-player: 20
- # Cooldown between creating listings (seconds, 0 = disabled)
- listing-cooldown: 0
- # Default listing duration in hours
- default-duration-hours: 168
- # Available durations for players to choose (in hours)
- available-durations:
- - 24
- - 72
- - 168
- - 336
- # Price limits
- min-price: 1.0
- max-price: 1000000000.0
-
-# Auction Settings
-auction:
- # Maximum active auctions per player
- max-auctions-per-player: 10
- # Duration limits (hours)
- min-duration-hours: 1
- max-duration-hours: 168
- default-duration-hours: 24
- # Available durations for players to choose (in hours)
- available-durations:
- - 1
- - 6
- - 12
- - 24
- - 48
- - 72
- - 168
- # Price limits for starting bid
- min-start-price: 1.0
- max-start-price: 1000000000.0
- # Minimum bid increment (percentage of current bid)
- min-bid-increment-percent: 5.0
- # Minimum absolute bid increment
- min-bid-increment-absolute: 1.0
-
- # Anti-snipe protection
- anti-snipe:
- enabled: true
- # If bid placed within this many seconds of end, extend auction
- trigger-seconds: 30
- # How many seconds to extend
- extension-seconds: 30
- # Maximum number of extensions (0 = unlimited)
- max-extensions: 10
-
-# Item Blacklist
-blacklist:
- # Materials that cannot be listed/auctioned
- materials:
- - BARRIER
- - COMMAND_BLOCK
- - CHAIN_COMMAND_BLOCK
- - REPEATING_COMMAND_BLOCK
- - COMMAND_BLOCK_MINECART
- - STRUCTURE_BLOCK
- - STRUCTURE_VOID
- - JIGSAW
- - DEBUG_STICK
- - KNOWLEDGE_BOOK
- - SPAWNER
- - BEDROCK
- # Items with these keywords in their name/lore are blocked
- keywords:
- - "admin"
- - "illegal"
- - "exploit"
-
-# GUI Settings
-gui:
- # Items displayed per page in browse views
- items-per-page: 45
-
- # Whether to show the Help button in the main menu
- # Set to false to hide it (slot will be filled with glass)
- show-help-button: true
-
- # Sound effects (use Bukkit Sound enum names)
- sounds:
- click: UI_BUTTON_CLICK
- success: ENTITY_PLAYER_LEVELUP
- error: ENTITY_VILLAGER_NO
- purchase: ENTITY_EXPERIENCE_ORB_PICKUP
-
-# Notification Settings
-notifications:
- # Notify seller when their item sells
- notify-on-sale: true
- # Notify bidder when they are outbid
- notify-on-outbid: true
- # Notify winner when they win an auction
- notify-on-win: true
- # Notify seller when their listing expires
- notify-on-expire: true
-
-# Performance Settings
-performance:
- # How often to cache listings/auctions (seconds)
- cache-duration: 30
- # How often to check for ended auctions (seconds)
- auction-check-interval: 5
- # How often to check for expired listings (minutes)
- expired-check-interval: 5
-
diff --git a/target/classes/lang/en_US.yml b/target/classes/lang/en_US.yml
deleted file mode 100644
index a3793fe..0000000
--- a/target/classes/lang/en_US.yml
+++ /dev/null
@@ -1,448 +0,0 @@
-# ============================================
-# CommunityMarket Language File - English (US)
-# ============================================
-
-# General
-prefix: "&8[&6Market&8] &r"
-
-# General Messages
-messages:
- no-permission: "&cYou don't have permission to do that."
- player-only: "&cThis command can only be used by players."
- reload-success: "&aConfiguration reloaded successfully!"
- economy-not-found: "&cNo economy plugin found! Market disabled."
-
- # Listing Messages
- listing-created: "&aListing created successfully! ID: #{id}"
- listing-cancelled: "&aListing cancelled. Item returned to claim storage."
- listing-expired: "&eYour listing #{id} has expired. Item moved to claim storage."
- listing-purchased: "&aYou purchased {item} x{amount} for {price}!"
- listing-sold: "&aYour {item} x{amount} was sold to {buyer} for {price}!"
- listing-limit-reached: "&cYou've reached the maximum number of listings ({max})."
- listing-cooldown: "&cPlease wait {time} before creating another listing."
- listing-not-found: "&cListing not found or no longer available."
- listing-own-item: "&cYou cannot buy your own listing."
- listing-insufficient-funds: "&cYou don't have enough money. Required: {price}"
-
- # Auction Messages
- auction-created: "&aAuction created successfully! ID: #{id}"
- auction-cancelled: "&aAuction cancelled. Item returned to claim storage."
- auction-ended-winner: "&aCongratulations! You won the auction for {item}! Paid: {price}"
- auction-ended-seller: "&aYour auction for {item} ended! Winner: {winner}, Earned: {price}"
- auction-ended-no-bids: "&eYour auction for {item} ended with no bids. Item moved to claim storage."
- auction-limit-reached: "&cYou've reached the maximum number of auctions ({max})."
- auction-not-found: "&cAuction not found or no longer available."
- auction-own-item: "&cYou cannot bid on your own auction."
- auction-bid-placed: "&aYou placed a bid of {amount} on {item}!"
- auction-outbid: "&eYou've been outbid on {item}! New bid: {amount} by {bidder}"
- auction-bid-too-low: "&cBid too low! Minimum bid: {min}"
- auction-insufficient-funds: "&cYou don't have enough money. Required: {price}"
- auction-buyout: "&aYou bought out the auction for {item} for {price}!"
- auction-extended: "&eAuction extended by {seconds}s due to anti-snipe protection."
-
- # Claim Messages
- claim-success: "&aItem claimed successfully!"
- claim-empty: "&eYou have no items to claim."
- claim-inventory-full: "&cYour inventory is full! Please make space."
- claim-all-success: "&aClaimed {count} items!"
-
- # Earnings Messages
- earnings-withdrawn: "&aWithdrew {amount}! New balance: {balance}"
- earnings-empty: "&eYou have no pending earnings."
- earnings-balance: "&aYour pending earnings: {amount}"
-
- # Item Validation
- invalid-item: "&cPlease select a valid item."
- item-no-longer-available: "&cThe selected item is no longer in your inventory."
- item-changed: "&cThe selected item has changed. Please select again."
- quantity-changed: "&cThe available quantity has changed. Please verify and try again."
- blacklisted-item: "&cThis item type is not allowed on the market."
- blacklisted-content: "&cThis item contains blacklisted content."
- invalid-price: "&cInvalid price. Range: {min} - {max}"
- invalid-amount: "&cInvalid amount."
- invalid-duration: "&cInvalid duration."
-
- # Admin Messages
- admin-listing-removed: "&aListing #{id} removed by admin."
- admin-auction-cancelled: "&aAuction #{id} cancelled by admin."
- admin-reload: "&aConfiguration reloaded."
-
-# GUI Titles (support color codes)
-gui-titles:
- main-menu: "&8&lCommunity Market"
- browse-market: "&8&lBrowse Market &7(Page {page})"
- browse-auctions: "&8&lBrowse Auctions &7(Page {page})"
- create-listing: "&8&lCreate Listing"
- create-auction: "&8&lCreate Auction"
- select-item-listing: "&8&lSelect Item to Sell"
- select-item-auction: "&8&lSelect Item to Auction"
- quantity-select: "&8&lSelect Quantity"
- my-listings: "&8&lMy Listings"
- my-auctions: "&8&lMy Auctions"
- claim-items: "&8&lClaim Items"
- earnings: "&8&lEarnings"
- confirm-purchase: "&8&lConfirm Purchase"
- confirm-bid: "&8&lConfirm Bid"
- confirm-cancel: "&8&lConfirm Cancellation"
- number-input: "&8&lEnter Amount"
- admin-panel: "&8&lAdmin Panel"
- admin-listings: "&8&lAll Listings"
- admin-auctions: "&8&lAll Auctions"
- listing-details: "&8&lListing Details"
- auction-details: "&8&lAuction Details"
- filter-menu: "&8&lFilter Options"
- sort-menu: "&8&lSort Options"
- duration-select: "&8&lSelect Duration"
- help: "&8&lHelp"
-
-# Button Names
-buttons:
- # Main Menu
- browse-market: "&aBrowse Market"
- browse-auctions: "&6Browse Auctions"
- create-listing: "&eCreate Listing"
- create-auction: "&eCreate Auction"
- my-listings: "&bMy Listings"
- my-auctions: "&bMy Auctions"
- claim-items: "&dClaim Items"
- earnings: "&aEarnings"
- help: "&fHelp"
- admin: "&cAdmin Panel"
-
- # Navigation
- next-page: "&aNext Page →"
- previous-page: "&a← Previous Page"
- back: "&cBack"
- close: "&cClose"
-
- # Actions
- confirm: "&aConfirm"
- cancel: "&cCancel"
- buy: "&aBuy Now"
- bid: "&6Place Bid"
- buyout: "&eBuyout"
- claim: "&aClaim"
- claim-all: "&aClaim All"
- withdraw: "&aWithdraw All"
- remove: "&cRemove Listing"
- cancel-auction: "&cCancel Auction"
-
- # Number Input
- add-1: "&a+1"
- add-10: "&a+10"
- add-100: "&a+100"
- add-1000: "&a+1,000"
- subtract-1: "&c-1"
- subtract-10: "&c-10"
- subtract-100: "&c-100"
- subtract-1000: "&c-1,000"
- set-min: "&eSet Min"
- set-max: "&eSet Max"
- custom-amount: "&bCustom Amount"
-
- # Filters & Sort
- filter: "&eFilter"
- sort: "&eSort"
- search: "&eSearch"
- clear-filter: "&cClear Filters"
-
- # Duration
- duration-1h: "&e1 Hour"
- duration-6h: "&e6 Hours"
- duration-12h: "&e12 Hours"
- duration-24h: "&e24 Hours"
- duration-48h: "&e48 Hours"
- duration-72h: "&e3 Days"
- duration-168h: "&e7 Days"
- duration-336h: "&e14 Days"
-
- # Admin
- admin-view-listings: "&aView All Listings"
- admin-view-auctions: "&6View All Auctions"
- admin-reload: "&eReload Config"
-
-# Button Lore (descriptions)
-lore:
- browse-market:
- - "&7Browse all fixed-price"
- - "&7listings from players."
- - ""
- - "&eClick to browse!"
- browse-auctions:
- - "&7Browse all active auctions"
- - "&7and place bids."
- - ""
- - "&eClick to browse!"
- create-listing:
- - "&7Sell items at a fixed price."
- - "&7Tax: &f{tax}%"
- - ""
- - "&eClick to create!"
- create-auction:
- - "&7Auction items to the"
- - "&7highest bidder."
- - "&7Tax: &f{tax}%"
- - ""
- - "&eClick to create!"
- my-listings:
- - "&7View and manage your"
- - "&7active listings."
- - ""
- - "&7Active: &f{count}/{max}"
- - ""
- - "&eClick to view!"
- my-auctions:
- - "&7View and manage your"
- - "&7active auctions."
- - ""
- - "&7Active: &f{count}/{max}"
- - ""
- - "&eClick to view!"
- claim-items:
- - "&7Claim items from expired"
- - "&7listings or won auctions."
- - ""
- - "&7Pending: &f{count}"
- - ""
- - "&eClick to claim!"
- earnings:
- - "&7View and withdraw your"
- - "&7pending earnings from sales."
- - ""
- - "&7Pending: &a{amount}"
- - ""
- - "&eClick to view!"
- help:
- - "&7Learn how to use the"
- - "&7Community Market."
- - ""
- - "&eClick for help!"
- admin:
- - "&cAdmin Panel"
- - "&7Manage listings and auctions."
- - ""
- - "&eClick to open!"
-
- # Listing Info
- listing-info:
- - "&7Seller: &f{seller}"
- - "&7Price: &a{price}"
- - "&7Amount: &f{amount}"
- - "&7Expires: &f{expires}"
- - ""
- - "&eLeft-click to buy!"
-
- # Auction Info
- auction-info:
- - "&7Seller: &f{seller}"
- - "&7Starting bid: &a{start_price}"
- - "&7Current bid: &a{current_bid}"
- - "&7Bidder: &f{bidder}"
- - "&7Bids: &f{bid_count}"
- - "&7Ends: &f{ends}"
- - ""
- - "&eLeft-click to bid!"
- - "&eRight-click to buyout!"
-
- # My Listing Info
- my-listing-info:
- - "&7Price: &a{price}"
- - "&7Amount: &f{amount}"
- - "&7Created: &f{created}"
- - "&7Expires: &f{expires}"
- - ""
- - "&cClick to cancel"
-
- # My Auction Info
- my-auction-info:
- - "&7Starting bid: &a{start_price}"
- - "&7Current bid: &a{current_bid}"
- - "&7Bidder: &f{bidder}"
- - "&7Bids: &f{bid_count}"
- - "&7Ends: &f{ends}"
- - ""
- - "&cClick to cancel (if no bids)"
-
- # Confirm Purchase
- confirm-purchase-info:
- - "&7You are purchasing:"
- - "&f{item} x{amount}"
- - ""
- - "&7Price: &a{price}"
- - "&7Tax: &e{tax}"
- - "&7Total: &a{total}"
- - ""
- - "&aClick to confirm!"
-
- # Confirm Bid
- confirm-bid-info:
- - "&7You are bidding on:"
- - "&f{item}"
- - ""
- - "&7Your bid: &a{bid}"
- - "&7Current high: &e{current}"
- - ""
- - "&aClick to confirm!"
-
- # Claim Item
- claim-item-info:
- - "&7Reason: &f{reason}"
- - "&7From: &f{source}"
- - "&7Date: &f{date}"
- - ""
- - "&eClick to claim!"
-
- # Earnings Info
- earnings-info:
- - "&7Your pending earnings"
- - "&7from market sales."
- - ""
- - "&7Total: &a{amount}"
- - ""
- - "&aClick to withdraw!"
-
- # Number Input Info
- current-value:
- - "&7Current: &a{value}"
-
-# Filter Options
-filters:
- all: "&fAll Items"
- weapons: "&cWeapons"
- armor: "&bArmor"
- tools: "&eTools"
- blocks: "&7Blocks"
- food: "&6Food"
- potions: "&dPotions"
- materials: "&aMaterials"
- enchanted: "&5Enchanted Items"
- misc: "&8Miscellaneous"
-
-# Sort Options
-sort:
- newest: "&aNewest First"
- oldest: "&eOldest First"
- price-low: "&aPrice: Low to High"
- price-high: "&cPrice: High to Low"
- ending-soon: "&6Ending Soon"
- most-bids: "&bMost Bids"
-
-# Time Formats
-time:
- expired: "&cExpired"
- days: "{d}d"
- hours: "{h}h"
- minutes: "{m}m"
- seconds: "{s}s"
-
-# Quantity Selector GUI
-quantity-select:
- title: "&6&lSelect Quantity"
- info-line-1: "&7Choose how many items"
- info-line-2: "&7you want to sell."
- available: "&7Available: &f{amount}"
- selected: "&7Selected: &f{amount}"
- quantity-label: "Quantity"
- minimum: "&7Minimum: &f{amount}"
- maximum: "&7Maximum: &f{amount}"
- use-buttons: "&eUse buttons to adjust"
- click-adjust: "&7Click: &e{amount}"
- set-minimum: "&6Set Minimum"
- set-maximum: "&6Set Maximum"
- set-to: "&7Set to: &f{amount}"
- back-lore: "&7Return to item selection"
- confirm-lore: "&7Quantity: &a{amount}"
-
-# Item Selection GUI
-item-selection:
- info-title: "&fSelect an Item"
- info-lore-listing: "&7Click on an item from your|&7inventory to create a &eListing&7."
- info-lore-auction: "&7Click on an item from your|&7inventory to create a &6Auction&7."
- blacklisted-note: "&7Blacklisted items are shown in red."
- click-to-select: "&a► Click to select"
- blocked-title: "&c{material}"
- blocked-lore-1: "&7This item cannot be listed."
- blocked-lore-2: "&cBlacklisted or invalid."
- back-lore: "&7Return to main menu"
-
-# Create Listing GUI
-create-listing:
- info-title: "&6&lCreate Listing"
- info-lore-1: "&7Set a price and duration"
- info-lore-2: "&7for your listing."
- tax-info: "&7Tax: &f{tax}%"
- item-lore: "&7Quantity: &f{amount}|&eThis item will be listed"
- price-title: "&6Price: {price}"
- price-tax: "&7Tax ({percent}%): &c{amount}"
- price-earnings: "&7You receive: &a{amount}"
- price-click: "&eClick to change price"
- duration-title: "&eDuration: {duration}"
- duration-lore: "&7Listing expires after this time"
- duration-click: "&eClick to change duration"
- back-lore: "&7Return to item selection"
- confirm-item: "&7Item: &f{item} x{amount}"
- confirm-price: "&7Price: &a{price}"
- confirm-earnings: "&7You receive: &a{amount}"
- confirm-duration: "&7Duration: &e{duration}"
- confirm-click: "&aClick to create listing!"
-
-# Create Auction GUI
-create-auction:
- info-title: "&6&lCreate Auction"
- info-lore-1: "&7Set starting price, optional buyout,"
- info-lore-2: "&7and duration for your auction."
- tax-info: "&7Tax on sale: &f{tax}%"
- item-lore: "&7Quantity: &f{amount}|&eThis item will be auctioned"
- start-price-title: "&6Starting Price: {price}"
- start-price-lore-1: "&7Minimum bid to start"
- start-price-lore-2: "&7the auction."
- start-price-click: "&eClick to change"
- buyout-title-set: "&bBuyout: {price}"
- buyout-title-unset: "&bBuyout: &7Not set"
- buyout-lore-set-1: "&7Instant purchase price."
- buyout-lore-set-2: "&eLeft-click to change"
- buyout-lore-set-3: "&cRight-click to remove"
- buyout-lore-unset-1: "&7Optional instant purchase"
- buyout-lore-unset-2: "&7price for your auction."
- buyout-lore-unset-click: "&eClick to set buyout price"
- duration-title: "&eDuration: {duration}"
- duration-lore: "&7Auction ends after this time."
- duration-click: "&eClick to change duration"
- back-lore: "&7Return to item selection"
- confirm-item: "&7Item: &f{item} x{amount}"
- confirm-start: "&7Start: &a{price}"
- confirm-buyout: "&7Buyout: &b{price}"
- confirm-buyout-none: "&7Buyout: &7None"
- confirm-duration: "&7Duration: &e{duration}"
- confirm-click: "&aClick to create auction!"
-
-# Number Input GUI
-number-input:
- display-title: "&6&l{value}"
- minimum: "&7Minimum: &f{value}"
- maximum: "&7Maximum: &f{value}"
- use-buttons: "&eUse buttons to adjust"
- click-adjust: "&7Click: &e{amount}"
- shift-click: "&7Shift-click: &e{amount}"
- set-minimum: "&6Set Minimum"
- set-maximum: "&6Set Maximum"
- set-to: "&7Set to: &f{value}"
- cancel-lore: "&7Cancel and go back"
- confirm-lore: "&7Confirm: &a{value}"
-
-# Help Content
-help:
- title: "&6&lCommunity Market Help"
- content:
- - "&eBrowse Market &7- View and buy fixed-price listings"
- - "&eBrowse Auctions &7- View and bid on auctions"
- - "&eCreate Listing &7- Sell items at a fixed price"
- - "&eCreate Auction &7- Auction items to highest bidder"
- - "&eMy Listings &7- Manage your active listings"
- - "&eMy Auctions &7- Manage your active auctions"
- - "&eClaim Items &7- Collect unsold/won items"
- - "&eEarnings &7- Withdraw money from sales"
- - ""
- - "&7&oTip: All actions are done through GUIs!"
- - "&7&oJust click on buttons to navigate."
-
diff --git a/target/classes/lang/pt_PT.yml b/target/classes/lang/pt_PT.yml
deleted file mode 100644
index 019e495..0000000
--- a/target/classes/lang/pt_PT.yml
+++ /dev/null
@@ -1,448 +0,0 @@
-# ============================================
-# CommunityMarket Ficheiro de Idioma - Português (Portugal)
-# ============================================
-
-# Geral
-prefix: "&8[&6Mercado&8] &r"
-
-# Mensagens Gerais
-messages:
- no-permission: "&cNão tens permissão para fazer isso."
- player-only: "&cEste comando só pode ser usado por jogadores."
- reload-success: "&aConfiguração recarregada com sucesso!"
- economy-not-found: "&cNenhum plugin de economia encontrado! Mercado desativado."
-
- # Mensagens de Anúncios
- listing-created: "&aAnúncio criado com sucesso! ID: #{id}"
- listing-cancelled: "&aAnúncio cancelado. Item devolvido ao armazém."
- listing-expired: "&eO teu anúncio #{id} expirou. Item movido para o armazém."
- listing-purchased: "&aCompraste {item} x{amount} por {price}!"
- listing-sold: "&aO teu {item} x{amount} foi vendido a {buyer} por {price}!"
- listing-limit-reached: "&cAtingiste o número máximo de anúncios ({max})."
- listing-cooldown: "&cPor favor aguarda {time} antes de criar outro anúncio."
- listing-not-found: "&cAnúncio não encontrado ou já não está disponível."
- listing-own-item: "&cNão podes comprar o teu próprio anúncio."
- listing-insufficient-funds: "&cNão tens dinheiro suficiente. Necessário: {price}"
-
- # Mensagens de Leilões
- auction-created: "&aLeilão criado com sucesso! ID: #{id}"
- auction-cancelled: "&aLeilão cancelado. Item devolvido ao armazém."
- auction-ended-winner: "&aParabéns! Ganhaste o leilão por {item}! Pagaste: {price}"
- auction-ended-seller: "&aO teu leilão por {item} terminou! Vencedor: {winner}, Ganhaste: {price}"
- auction-ended-no-bids: "&eO teu leilão por {item} terminou sem licitações. Item movido para o armazém."
- auction-limit-reached: "&cAtingiste o número máximo de leilões ({max})."
- auction-not-found: "&cLeilão não encontrado ou já não está disponível."
- auction-own-item: "&cNão podes licitar no teu próprio leilão."
- auction-bid-placed: "&aFizeste uma licitação de {amount} em {item}!"
- auction-outbid: "&eForam feitas licitações superiores à tua em {item}! Nova licitação: {amount} por {bidder}"
- auction-bid-too-low: "&cLicitação muito baixa! Mínimo: {min}"
- auction-insufficient-funds: "&cNão tens dinheiro suficiente. Necessário: {price}"
- auction-buyout: "&aCompraste o leilão de {item} por {price}!"
- auction-extended: "&eLeilão prolongado por {seconds}s devido à proteção anti-snipe."
-
- # Mensagens de Reclamação
- claim-success: "&aItem reclamado com sucesso!"
- claim-empty: "&eNão tens itens para reclamar."
- claim-inventory-full: "&cO teu inventário está cheio! Por favor liberta espaço."
- claim-all-success: "&aReclamaste {count} itens!"
-
- # Mensagens de Ganhos
- earnings-withdrawn: "&aLevantaste {amount}! Novo saldo: {balance}"
- earnings-empty: "&eNão tens ganhos pendentes."
- earnings-balance: "&aOs teus ganhos pendentes: {amount}"
-
- # Validação de Itens
- invalid-item: "&cPor favor seleciona um item válido."
- item-no-longer-available: "&cO item selecionado já não está no teu inventário."
- item-changed: "&cO item selecionado foi alterado. Por favor seleciona novamente."
- quantity-changed: "&cA quantidade disponível foi alterada. Por favor verifica e tenta novamente."
- blacklisted-item: "&cEste tipo de item não é permitido no mercado."
- blacklisted-content: "&cEste item contém conteúdo bloqueado."
- invalid-price: "&cPreço inválido. Intervalo: {min} - {max}"
- invalid-amount: "&cQuantidade inválida."
- invalid-duration: "&cDuração inválida."
-
- # Mensagens de Admin
- admin-listing-removed: "&aAnúncio #{id} removido pelo admin."
- admin-auction-cancelled: "&aLeilão #{id} cancelado pelo admin."
- admin-reload: "&aConfiguração recarregada."
-
-# Títulos GUI (suportam códigos de cor)
-gui-titles:
- main-menu: "&8&lMercado Comunitário"
- browse-market: "&8&lExplorar Mercado &7(Página {page})"
- browse-auctions: "&8&lExplorar Leilões &7(Página {page})"
- create-listing: "&8&lCriar Anúncio"
- create-auction: "&8&lCriar Leilão"
- select-item-listing: "&8&lSelecionar Item para Vender"
- select-item-auction: "&8&lSelecionar Item para Leilão"
- quantity-select: "&8&lSelecionar Quantidade"
- my-listings: "&8&lOs Meus Anúncios"
- my-auctions: "&8&lOs Meus Leilões"
- claim-items: "&8&lReclamar Itens"
- earnings: "&8&lGanhos"
- confirm-purchase: "&8&lConfirmar Compra"
- confirm-bid: "&8&lConfirmar Licitação"
- confirm-cancel: "&8&lConfirmar Cancelamento"
- number-input: "&8&lIntroduzir Valor"
- admin-panel: "&8&lPainel de Admin"
- admin-listings: "&8&lTodos os Anúncios"
- admin-auctions: "&8&lTodos os Leilões"
- listing-details: "&8&lDetalhes do Anúncio"
- auction-details: "&8&lDetalhes do Leilão"
- filter-menu: "&8&lOpções de Filtro"
- sort-menu: "&8&lOpções de Ordenação"
- duration-select: "&8&lSelecionar Duração"
- help: "&8&lAjuda"
-
-# Nomes dos Botões
-buttons:
- # Menu Principal
- browse-market: "&aExplorar Mercado"
- browse-auctions: "&6Explorar Leilões"
- create-listing: "&eCriar Anúncio"
- create-auction: "&eCriar Leilão"
- my-listings: "&bOs Meus Anúncios"
- my-auctions: "&bOs Meus Leilões"
- claim-items: "&dReclamar Itens"
- earnings: "&aGanhos"
- help: "&fAjuda"
- admin: "&cPainel de Admin"
-
- # Navegação
- next-page: "&aPágina Seguinte →"
- previous-page: "&a← Página Anterior"
- back: "&cVoltar"
- close: "&cFechar"
-
- # Ações
- confirm: "&aConfirmar"
- cancel: "&cCancelar"
- buy: "&aComprar Agora"
- bid: "&6Fazer Licitação"
- buyout: "&eCompra Imediata"
- claim: "&aReclamar"
- claim-all: "&aReclamar Tudo"
- withdraw: "&aLevantar Tudo"
- remove: "&cRemover Anúncio"
- cancel-auction: "&cCancelar Leilão"
-
- # Entrada Numérica
- add-1: "&a+1"
- add-10: "&a+10"
- add-100: "&a+100"
- add-1000: "&a+1.000"
- subtract-1: "&c-1"
- subtract-10: "&c-10"
- subtract-100: "&c-100"
- subtract-1000: "&c-1.000"
- set-min: "&eDefinir Mín"
- set-max: "&eDefinir Máx"
- custom-amount: "&bValor Personalizado"
-
- # Filtros e Ordenação
- filter: "&eFiltro"
- sort: "&eOrdenar"
- search: "&ePesquisar"
- clear-filter: "&cLimpar Filtros"
-
- # Duração
- duration-1h: "&e1 Hora"
- duration-6h: "&e6 Horas"
- duration-12h: "&e12 Horas"
- duration-24h: "&e24 Horas"
- duration-48h: "&e48 Horas"
- duration-72h: "&e3 Dias"
- duration-168h: "&e7 Dias"
- duration-336h: "&e14 Dias"
-
- # Admin
- admin-view-listings: "&aVer Todos os Anúncios"
- admin-view-auctions: "&6Ver Todos os Leilões"
- admin-reload: "&eRecarregar Config"
-
-# Lore dos Botões (descrições)
-lore:
- browse-market:
- - "&7Explora todos os anúncios"
- - "&7de preço fixo dos jogadores."
- - ""
- - "&eClica para explorar!"
- browse-auctions:
- - "&7Explora todos os leilões ativos"
- - "&7e faz licitações."
- - ""
- - "&eClica para explorar!"
- create-listing:
- - "&7Vende itens a um preço fixo."
- - "&7Taxa: &f{tax}%"
- - ""
- - "&eClica para criar!"
- create-auction:
- - "&7Leiloa itens ao"
- - "&7maior licitador."
- - "&7Taxa: &f{tax}%"
- - ""
- - "&eClica para criar!"
- my-listings:
- - "&7Vê e gere os teus"
- - "&7anúncios ativos."
- - ""
- - "&7Ativos: &f{count}/{max}"
- - ""
- - "&eClica para ver!"
- my-auctions:
- - "&7Vê e gere os teus"
- - "&7leilões ativos."
- - ""
- - "&7Ativos: &f{count}/{max}"
- - ""
- - "&eClica para ver!"
- claim-items:
- - "&7Reclama itens de anúncios"
- - "&7expirados ou leilões ganhos."
- - ""
- - "&7Pendentes: &f{count}"
- - ""
- - "&eClica para reclamar!"
- earnings:
- - "&7Vê e levanta os teus"
- - "&7ganhos pendentes das vendas."
- - ""
- - "&7Pendente: &a{amount}"
- - ""
- - "&eClica para ver!"
- help:
- - "&7Aprende a usar o"
- - "&7Mercado Comunitário."
- - ""
- - "&eClica para ajuda!"
- admin:
- - "&cPainel de Admin"
- - "&7Gere anúncios e leilões."
- - ""
- - "&eClica para abrir!"
-
- # Info do Anúncio
- listing-info:
- - "&7Vendedor: &f{seller}"
- - "&7Preço: &a{price}"
- - "&7Quantidade: &f{amount}"
- - "&7Expira: &f{expires}"
- - ""
- - "&eClique esquerdo para comprar!"
-
- # Info do Leilão
- auction-info:
- - "&7Vendedor: &f{seller}"
- - "&7Licitação inicial: &a{start_price}"
- - "&7Licitação atual: &a{current_bid}"
- - "&7Licitador: &f{bidder}"
- - "&7Licitações: &f{bid_count}"
- - "&7Termina: &f{ends}"
- - ""
- - "&eClique esquerdo para licitar!"
- - "&eClique direito para compra imediata!"
-
- # Info do Meu Anúncio
- my-listing-info:
- - "&7Preço: &a{price}"
- - "&7Quantidade: &f{amount}"
- - "&7Criado: &f{created}"
- - "&7Expira: &f{expires}"
- - ""
- - "&cClica para cancelar"
-
- # Info do Meu Leilão
- my-auction-info:
- - "&7Licitação inicial: &a{start_price}"
- - "&7Licitação atual: &a{current_bid}"
- - "&7Licitador: &f{bidder}"
- - "&7Licitações: &f{bid_count}"
- - "&7Termina: &f{ends}"
- - ""
- - "&cClica para cancelar (sem licitações)"
-
- # Confirmar Compra
- confirm-purchase-info:
- - "&7Estás a comprar:"
- - "&f{item} x{amount}"
- - ""
- - "&7Preço: &a{price}"
- - "&7Taxa: &e{tax}"
- - "&7Total: &a{total}"
- - ""
- - "&aClica para confirmar!"
-
- # Confirmar Licitação
- confirm-bid-info:
- - "&7Estás a licitar em:"
- - "&f{item}"
- - ""
- - "&7A tua licitação: &a{bid}"
- - "&7Atual mais alta: &e{current}"
- - ""
- - "&aClica para confirmar!"
-
- # Reclamar Item
- claim-item-info:
- - "&7Razão: &f{reason}"
- - "&7De: &f{source}"
- - "&7Data: &f{date}"
- - ""
- - "&eClica para reclamar!"
-
- # Info de Ganhos
- earnings-info:
- - "&7Os teus ganhos pendentes"
- - "&7das vendas no mercado."
- - ""
- - "&7Total: &a{amount}"
- - ""
- - "&aClica para levantar!"
-
- # Info de Entrada Numérica
- current-value:
- - "&7Atual: &a{value}"
-
-# Opções de Filtro
-filters:
- all: "&fTodos os Itens"
- weapons: "&cArmas"
- armor: "&bArmadura"
- tools: "&eFerramentas"
- blocks: "&7Blocos"
- food: "&6Comida"
- potions: "&dPoções"
- materials: "&aMateriais"
- enchanted: "&5Itens Encantados"
- misc: "&8Diversos"
-
-# Opções de Ordenação
-sort:
- newest: "&aMais Recente"
- oldest: "&eMais Antigo"
- price-low: "&aPreço: Menor para Maior"
- price-high: "&cPreço: Maior para Menor"
- ending-soon: "&6A Terminar Em Breve"
- most-bids: "&bMais Licitações"
-
-# Formatos de Tempo
-time:
- expired: "&cExpirado"
- days: "{d}d"
- hours: "{h}h"
- minutes: "{m}m"
- seconds: "{s}s"
-
-# GUI de Seleção de Quantidade
-quantity-select:
- title: "&6&lSelecionar Quantidade"
- info-line-1: "&7Escolhe quantos itens"
- info-line-2: "&7queres vender."
- available: "&7Disponível: &f{amount}"
- selected: "&7Selecionado: &f{amount}"
- quantity-label: "Quantidade"
- minimum: "&7Mínimo: &f{amount}"
- maximum: "&7Máximo: &f{amount}"
- use-buttons: "&eUsa os botões para ajustar"
- click-adjust: "&7Clica: &e{amount}"
- set-minimum: "&6Definir Mínimo"
- set-maximum: "&6Definir Máximo"
- set-to: "&7Definir para: &f{amount}"
- back-lore: "&7Voltar à seleção de item"
- confirm-lore: "&7Quantidade: &a{amount}"
-
-# GUI de Seleção de Item
-item-selection:
- info-title: "&fSelecionar um Item"
- info-lore-listing: "&7Clica num item do teu|&7inventário para criar um &eAnúncio&7."
- info-lore-auction: "&7Clica num item do teu|&7inventário para criar um &6Leilão&7."
- blacklisted-note: "&7Itens bloqueados aparecem a vermelho."
- click-to-select: "&a► Clica para selecionar"
- blocked-title: "&c{material}"
- blocked-lore-1: "&7Este item não pode ser listado."
- blocked-lore-2: "&cBloqueado ou inválido."
- back-lore: "&7Voltar ao menu principal"
-
-# GUI de Criar Anúncio
-create-listing:
- info-title: "&6&lCriar Anúncio"
- info-lore-1: "&7Define um preço e duração"
- info-lore-2: "&7para o teu anúncio."
- tax-info: "&7Taxa: &f{tax}%"
- item-lore: "&7Quantidade: &f{amount}|&eEste item será listado"
- price-title: "&6Preço: {price}"
- price-tax: "&7Taxa ({percent}%): &c{amount}"
- price-earnings: "&7Recebes: &a{amount}"
- price-click: "&eClica para alterar preço"
- duration-title: "&eDuração: {duration}"
- duration-lore: "&7O anúncio expira após este tempo"
- duration-click: "&eClica para alterar duração"
- back-lore: "&7Voltar à seleção de item"
- confirm-item: "&7Item: &f{item} x{amount}"
- confirm-price: "&7Preço: &a{price}"
- confirm-earnings: "&7Recebes: &a{amount}"
- confirm-duration: "&7Duração: &e{duration}"
- confirm-click: "&aClica para criar anúncio!"
-
-# GUI de Criar Leilão
-create-auction:
- info-title: "&6&lCriar Leilão"
- info-lore-1: "&7Define preço inicial, compra imediata opcional,"
- info-lore-2: "&7e duração para o teu leilão."
- tax-info: "&7Taxa na venda: &f{tax}%"
- item-lore: "&7Quantidade: &f{amount}|&eEste item será leiloado"
- start-price-title: "&6Preço Inicial: {price}"
- start-price-lore-1: "&7Licitação mínima para iniciar"
- start-price-lore-2: "&7o leilão."
- start-price-click: "&eClica para alterar"
- buyout-title-set: "&bCompra Imediata: {price}"
- buyout-title-unset: "&bCompra Imediata: &7Não definido"
- buyout-lore-set-1: "&7Preço de compra instantânea."
- buyout-lore-set-2: "&eClique esquerdo para alterar"
- buyout-lore-set-3: "&cClique direito para remover"
- buyout-lore-unset-1: "&7Preço opcional de compra"
- buyout-lore-unset-2: "&7instantânea para o teu leilão."
- buyout-lore-unset-click: "&eClica para definir preço de compra imediata"
- duration-title: "&eDuração: {duration}"
- duration-lore: "&7O leilão termina após este tempo."
- duration-click: "&eClica para alterar duração"
- back-lore: "&7Voltar à seleção de item"
- confirm-item: "&7Item: &f{item} x{amount}"
- confirm-start: "&7Início: &a{price}"
- confirm-buyout: "&7Compra Imediata: &b{price}"
- confirm-buyout-none: "&7Compra Imediata: &7Nenhum"
- confirm-duration: "&7Duração: &e{duration}"
- confirm-click: "&aClica para criar leilão!"
-
-# GUI de Entrada Numérica
-number-input:
- display-title: "&6&l{value}"
- minimum: "&7Mínimo: &f{value}"
- maximum: "&7Máximo: &f{value}"
- use-buttons: "&eUsa os botões para ajustar"
- click-adjust: "&7Clica: &e{amount}"
- shift-click: "&7Shift-clica: &e{amount}"
- set-minimum: "&6Definir Mínimo"
- set-maximum: "&6Definir Máximo"
- set-to: "&7Definir para: &f{value}"
- cancel-lore: "&7Cancelar e voltar"
- confirm-lore: "&7Confirmar: &a{value}"
-
-# Conteúdo de Ajuda
-help:
- title: "&6&lAjuda do Mercado Comunitário"
- content:
- - "&eExplorar Mercado &7- Ver e comprar anúncios de preço fixo"
- - "&eExplorar Leilões &7- Ver e licitar em leilões"
- - "&eCriar Anúncio &7- Vender itens a um preço fixo"
- - "&eCriar Leilão &7- Leiloar itens ao maior licitador"
- - "&eOs Meus Anúncios &7- Gerir os teus anúncios ativos"
- - "&eOs Meus Leilões &7- Gerir os teus leilões ativos"
- - "&eReclamar Itens &7- Recolher itens não vendidos/ganhos"
- - "&eGanhos &7- Levantar dinheiro das vendas"
- - ""
- - "&7&oDica: Todas as ações são feitas através de GUIs!"
- - "&7&oBasta clicar nos botões para navegar."
-
diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml
deleted file mode 100644
index 844bcb7..0000000
--- a/target/classes/plugin.yml
+++ /dev/null
@@ -1,83 +0,0 @@
-name: CommunityMarket
-version: '1.0.0'
-main: pt.henrique.communityMarket.CommunityMarket
-api-version: '1.21'
-description: A GUI-only marketplace plugin for fixed-price listings and auctions
-author: Henrique
-website: https://github.com/henrique/CommunityMarket
-
-# Soft dependencies - plugin will detect and use these if available
-softdepend:
- - Vault
- - Essentials
-
-load: POSTWORLD
-
-commands:
- market:
- description: Opens the Community Market main menu
- usage: /
- aliases: [cmarket]
- permission: communitymarket.use
-
-permissions:
- communitymarket.*:
- description: Grants all CommunityMarket permissions
- default: op
- children:
- communitymarket.use: true
- communitymarket.sell: true
- communitymarket.auction: true
- communitymarket.buy: true
- communitymarket.bid: true
- communitymarket.claim: true
- communitymarket.withdraw: true
- communitymarket.admin: true
-
- communitymarket.use:
- description: Allows access to the market GUI
- default: true
-
- communitymarket.sell:
- description: Allows creating fixed-price listings
- default: true
-
- communitymarket.auction:
- description: Allows creating auctions
- default: true
-
- communitymarket.buy:
- description: Allows purchasing from the market
- default: true
-
- communitymarket.bid:
- description: Allows bidding on auctions
- default: true
-
- communitymarket.claim:
- description: Allows claiming items from storage
- default: true
-
- communitymarket.withdraw:
- description: Allows withdrawing earnings
- default: true
-
- communitymarket.admin:
- description: Allows access to admin functions
- default: op
- children:
- communitymarket.admin.viewall: true
- communitymarket.admin.remove: true
- communitymarket.admin.reload: true
-
- communitymarket.admin.viewall:
- description: Allows viewing all listings/auctions
- default: op
-
- communitymarket.admin.remove:
- description: Allows removing any listing or auction
- default: op
-
- communitymarket.admin.reload:
- description: Allows reloading configuration
- default: op
diff --git a/target/classes/pt/henrique/communityMarket/CommunityMarket.class b/target/classes/pt/henrique/communityMarket/CommunityMarket.class
deleted file mode 100644
index 6faa8a5..0000000
Binary files a/target/classes/pt/henrique/communityMarket/CommunityMarket.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/command/MarketCommand.class b/target/classes/pt/henrique/communityMarket/command/MarketCommand.class
deleted file mode 100644
index d14c080..0000000
Binary files a/target/classes/pt/henrique/communityMarket/command/MarketCommand.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/config/ConfigManager.class b/target/classes/pt/henrique/communityMarket/config/ConfigManager.class
deleted file mode 100644
index e35a8e1..0000000
Binary files a/target/classes/pt/henrique/communityMarket/config/ConfigManager.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/config/MessageManager.class b/target/classes/pt/henrique/communityMarket/config/MessageManager.class
deleted file mode 100644
index d65cc1b..0000000
Binary files a/target/classes/pt/henrique/communityMarket/config/MessageManager.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/db/DatabaseManager.class b/target/classes/pt/henrique/communityMarket/db/DatabaseManager.class
deleted file mode 100644
index 3ef9cb6..0000000
Binary files a/target/classes/pt/henrique/communityMarket/db/DatabaseManager.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/economy/EconomyManager.class b/target/classes/pt/henrique/communityMarket/economy/EconomyManager.class
deleted file mode 100644
index df82d94..0000000
Binary files a/target/classes/pt/henrique/communityMarket/economy/EconomyManager.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/AdminGui$AdminAuctionsGui.class b/target/classes/pt/henrique/communityMarket/gui/AdminGui$AdminAuctionsGui.class
deleted file mode 100644
index 12e28bd..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/AdminGui$AdminAuctionsGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/AdminGui$AdminListingsGui.class b/target/classes/pt/henrique/communityMarket/gui/AdminGui$AdminListingsGui.class
deleted file mode 100644
index 36848ad..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/AdminGui$AdminListingsGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/AdminGui.class b/target/classes/pt/henrique/communityMarket/gui/AdminGui.class
deleted file mode 100644
index 154db21..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/AdminGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/BrowseAuctionsGui$1.class b/target/classes/pt/henrique/communityMarket/gui/BrowseAuctionsGui$1.class
deleted file mode 100644
index 4d68a81..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/BrowseAuctionsGui$1.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/BrowseAuctionsGui.class b/target/classes/pt/henrique/communityMarket/gui/BrowseAuctionsGui.class
deleted file mode 100644
index 67a1a02..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/BrowseAuctionsGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/BrowseMarketGui$1.class b/target/classes/pt/henrique/communityMarket/gui/BrowseMarketGui$1.class
deleted file mode 100644
index e317f6c..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/BrowseMarketGui$1.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/BrowseMarketGui.class b/target/classes/pt/henrique/communityMarket/gui/BrowseMarketGui.class
deleted file mode 100644
index 8466800..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/BrowseMarketGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/ClaimGui$1.class b/target/classes/pt/henrique/communityMarket/gui/ClaimGui$1.class
deleted file mode 100644
index b49505f..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/ClaimGui$1.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/ClaimGui.class b/target/classes/pt/henrique/communityMarket/gui/ClaimGui.class
deleted file mode 100644
index 6617c12..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/ClaimGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/ConfirmationGui$ConfirmCallback.class b/target/classes/pt/henrique/communityMarket/gui/ConfirmationGui$ConfirmCallback.class
deleted file mode 100644
index 3b64abd..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/ConfirmationGui$ConfirmCallback.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/ConfirmationGui.class b/target/classes/pt/henrique/communityMarket/gui/ConfirmationGui.class
deleted file mode 100644
index a35cd01..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/ConfirmationGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/CreateAuctionGui.class b/target/classes/pt/henrique/communityMarket/gui/CreateAuctionGui.class
deleted file mode 100644
index c00038b..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/CreateAuctionGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/CreateListingGui.class b/target/classes/pt/henrique/communityMarket/gui/CreateListingGui.class
deleted file mode 100644
index 62ea03f..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/CreateListingGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/EarningsGui.class b/target/classes/pt/henrique/communityMarket/gui/EarningsGui.class
deleted file mode 100644
index 6a5a6e1..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/EarningsGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/GuiManager.class b/target/classes/pt/henrique/communityMarket/gui/GuiManager.class
deleted file mode 100644
index 4e854ad..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/GuiManager.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/HelpGui.class b/target/classes/pt/henrique/communityMarket/gui/HelpGui.class
deleted file mode 100644
index a531317..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/HelpGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/ItemSelectionGui$SelectionMode.class b/target/classes/pt/henrique/communityMarket/gui/ItemSelectionGui$SelectionMode.class
deleted file mode 100644
index e1e708a..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/ItemSelectionGui$SelectionMode.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/ItemSelectionGui.class b/target/classes/pt/henrique/communityMarket/gui/ItemSelectionGui.class
deleted file mode 100644
index 29dc14c..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/ItemSelectionGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/MainMenuGui.class b/target/classes/pt/henrique/communityMarket/gui/MainMenuGui.class
deleted file mode 100644
index 0a650c7..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/MainMenuGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/MarketGui$GuiType.class b/target/classes/pt/henrique/communityMarket/gui/MarketGui$GuiType.class
deleted file mode 100644
index e17d295..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/MarketGui$GuiType.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/MarketGui.class b/target/classes/pt/henrique/communityMarket/gui/MarketGui.class
deleted file mode 100644
index 36ea701..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/MarketGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/MyAuctionsGui.class b/target/classes/pt/henrique/communityMarket/gui/MyAuctionsGui.class
deleted file mode 100644
index d93c075..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/MyAuctionsGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/MyListingsGui.class b/target/classes/pt/henrique/communityMarket/gui/MyListingsGui.class
deleted file mode 100644
index 3f69f61..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/MyListingsGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/NumberInputGui$NumberInputCallback.class b/target/classes/pt/henrique/communityMarket/gui/NumberInputGui$NumberInputCallback.class
deleted file mode 100644
index c4fe151..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/NumberInputGui$NumberInputCallback.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/NumberInputGui.class b/target/classes/pt/henrique/communityMarket/gui/NumberInputGui.class
deleted file mode 100644
index cc3136d..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/NumberInputGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/QuantitySelectGui$QuantityCallback.class b/target/classes/pt/henrique/communityMarket/gui/QuantitySelectGui$QuantityCallback.class
deleted file mode 100644
index 1135df2..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/QuantitySelectGui$QuantityCallback.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/QuantitySelectGui.class b/target/classes/pt/henrique/communityMarket/gui/QuantitySelectGui.class
deleted file mode 100644
index 7b39d2b..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/QuantitySelectGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/listener/GuiListener$1.class b/target/classes/pt/henrique/communityMarket/listener/GuiListener$1.class
deleted file mode 100644
index d3d3890..0000000
Binary files a/target/classes/pt/henrique/communityMarket/listener/GuiListener$1.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/listener/GuiListener.class b/target/classes/pt/henrique/communityMarket/listener/GuiListener.class
deleted file mode 100644
index b6d82cc..0000000
Binary files a/target/classes/pt/henrique/communityMarket/listener/GuiListener.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/listener/PlayerListener.class b/target/classes/pt/henrique/communityMarket/listener/PlayerListener.class
deleted file mode 100644
index 0d9b212..0000000
Binary files a/target/classes/pt/henrique/communityMarket/listener/PlayerListener.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/model/Auction$AuctionStatus.class b/target/classes/pt/henrique/communityMarket/model/Auction$AuctionStatus.class
deleted file mode 100644
index 2723f9d..0000000
Binary files a/target/classes/pt/henrique/communityMarket/model/Auction$AuctionStatus.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/model/Auction.class b/target/classes/pt/henrique/communityMarket/model/Auction.class
deleted file mode 100644
index 456743c..0000000
Binary files a/target/classes/pt/henrique/communityMarket/model/Auction.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/model/Bid.class b/target/classes/pt/henrique/communityMarket/model/Bid.class
deleted file mode 100644
index 128fea0..0000000
Binary files a/target/classes/pt/henrique/communityMarket/model/Bid.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/model/ClaimItem$ClaimReason.class b/target/classes/pt/henrique/communityMarket/model/ClaimItem$ClaimReason.class
deleted file mode 100644
index 8f871f0..0000000
Binary files a/target/classes/pt/henrique/communityMarket/model/ClaimItem$ClaimReason.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/model/ClaimItem.class b/target/classes/pt/henrique/communityMarket/model/ClaimItem.class
deleted file mode 100644
index 16dc042..0000000
Binary files a/target/classes/pt/henrique/communityMarket/model/ClaimItem.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/model/Listing$ListingStatus.class b/target/classes/pt/henrique/communityMarket/model/Listing$ListingStatus.class
deleted file mode 100644
index f1e58f4..0000000
Binary files a/target/classes/pt/henrique/communityMarket/model/Listing$ListingStatus.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/model/Listing.class b/target/classes/pt/henrique/communityMarket/model/Listing.class
deleted file mode 100644
index 35634db..0000000
Binary files a/target/classes/pt/henrique/communityMarket/model/Listing.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/model/PendingEarnings.class b/target/classes/pt/henrique/communityMarket/model/PendingEarnings.class
deleted file mode 100644
index b5e85ed..0000000
Binary files a/target/classes/pt/henrique/communityMarket/model/PendingEarnings.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/AuctionService$BidResult.class b/target/classes/pt/henrique/communityMarket/service/AuctionService$BidResult.class
deleted file mode 100644
index 94da621..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/AuctionService$BidResult.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/AuctionService$CancelResult.class b/target/classes/pt/henrique/communityMarket/service/AuctionService$CancelResult.class
deleted file mode 100644
index 33e6fb7..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/AuctionService$CancelResult.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/AuctionService.class b/target/classes/pt/henrique/communityMarket/service/AuctionService.class
deleted file mode 100644
index dbbc037..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/AuctionService.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/ClaimService$ClaimResult.class b/target/classes/pt/henrique/communityMarket/service/ClaimService$ClaimResult.class
deleted file mode 100644
index 082b7eb..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/ClaimService$ClaimResult.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/ClaimService.class b/target/classes/pt/henrique/communityMarket/service/ClaimService.class
deleted file mode 100644
index a9f67e0..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/ClaimService.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/EarningsService$WithdrawResult.class b/target/classes/pt/henrique/communityMarket/service/EarningsService$WithdrawResult.class
deleted file mode 100644
index caeda88..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/EarningsService$WithdrawResult.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/EarningsService.class b/target/classes/pt/henrique/communityMarket/service/EarningsService.class
deleted file mode 100644
index 159cc3a..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/EarningsService.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/ListingService$PurchaseResult.class b/target/classes/pt/henrique/communityMarket/service/ListingService$PurchaseResult.class
deleted file mode 100644
index a13f586..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/ListingService$PurchaseResult.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/ListingService.class b/target/classes/pt/henrique/communityMarket/service/ListingService.class
deleted file mode 100644
index a7dbca2..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/ListingService.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/TransactionService$TransactionResult.class b/target/classes/pt/henrique/communityMarket/service/TransactionService$TransactionResult.class
deleted file mode 100644
index 4ea8986..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/TransactionService$TransactionResult.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/TransactionService$ValidationResult.class b/target/classes/pt/henrique/communityMarket/service/TransactionService$ValidationResult.class
deleted file mode 100644
index 9c7c550..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/TransactionService$ValidationResult.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/TransactionService.class b/target/classes/pt/henrique/communityMarket/service/TransactionService.class
deleted file mode 100644
index e8e46c5..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/TransactionService.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/task/AuctionTask.class b/target/classes/pt/henrique/communityMarket/task/AuctionTask.class
deleted file mode 100644
index cbb6099..0000000
Binary files a/target/classes/pt/henrique/communityMarket/task/AuctionTask.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/task/ExpiredListingTask.class b/target/classes/pt/henrique/communityMarket/task/ExpiredListingTask.class
deleted file mode 100644
index b92cf5e..0000000
Binary files a/target/classes/pt/henrique/communityMarket/task/ExpiredListingTask.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/util/InventoryUtil$ItemCategory.class b/target/classes/pt/henrique/communityMarket/util/InventoryUtil$ItemCategory.class
deleted file mode 100644
index f47c23b..0000000
Binary files a/target/classes/pt/henrique/communityMarket/util/InventoryUtil$ItemCategory.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/util/InventoryUtil.class b/target/classes/pt/henrique/communityMarket/util/InventoryUtil.class
deleted file mode 100644
index d5fbeb8..0000000
Binary files a/target/classes/pt/henrique/communityMarket/util/InventoryUtil.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/util/ItemBuilder.class b/target/classes/pt/henrique/communityMarket/util/ItemBuilder.class
deleted file mode 100644
index 37508ac..0000000
Binary files a/target/classes/pt/henrique/communityMarket/util/ItemBuilder.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/util/ItemSerializer.class b/target/classes/pt/henrique/communityMarket/util/ItemSerializer.class
deleted file mode 100644
index a03f75b..0000000
Binary files a/target/classes/pt/henrique/communityMarket/util/ItemSerializer.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/util/SoundUtil.class b/target/classes/pt/henrique/communityMarket/util/SoundUtil.class
deleted file mode 100644
index 3880429..0000000
Binary files a/target/classes/pt/henrique/communityMarket/util/SoundUtil.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/util/TextUtil.class b/target/classes/pt/henrique/communityMarket/util/TextUtil.class
deleted file mode 100644
index f88cdea..0000000
Binary files a/target/classes/pt/henrique/communityMarket/util/TextUtil.class and /dev/null differ
diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties
deleted file mode 100644
index dd5d5c3..0000000
--- a/target/maven-archiver/pom.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-artifactId=communitymarket
-groupId=pt.henrique
-version=1.0.0
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
deleted file mode 100644
index 3fcd82f..0000000
--- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
+++ /dev/null
@@ -1,64 +0,0 @@
-pt\henrique\communityMarket\gui\BrowseAuctionsGui$1.class
-pt\henrique\communityMarket\CommunityMarket.class
-pt\henrique\communityMarket\gui\BrowseAuctionsGui.class
-pt\henrique\communityMarket\gui\MainMenuGui.class
-pt\henrique\communityMarket\gui\HelpGui.class
-pt\henrique\communityMarket\gui\ClaimGui$1.class
-pt\henrique\communityMarket\service\AuctionService.class
-pt\henrique\communityMarket\gui\EarningsGui.class
-pt\henrique\communityMarket\model\Auction$AuctionStatus.class
-pt\henrique\communityMarket\command\MarketCommand.class
-pt\henrique\communityMarket\gui\ItemSelectionGui$SelectionMode.class
-pt\henrique\communityMarket\gui\MarketGui$GuiType.class
-pt\henrique\communityMarket\model\ClaimItem$ClaimReason.class
-pt\henrique\communityMarket\service\ListingService.class
-pt\henrique\communityMarket\gui\ClaimGui.class
-pt\henrique\communityMarket\gui\QuantitySelectGui$QuantityCallback.class
-pt\henrique\communityMarket\service\TransactionService$TransactionResult.class
-pt\henrique\communityMarket\util\TextUtil.class
-pt\henrique\communityMarket\model\Listing.class
-pt\henrique\communityMarket\gui\AdminGui.class
-pt\henrique\communityMarket\util\ItemBuilder.class
-pt\henrique\communityMarket\util\ItemSerializer.class
-pt\henrique\communityMarket\gui\BrowseMarketGui$1.class
-pt\henrique\communityMarket\gui\QuantitySelectGui.class
-pt\henrique\communityMarket\gui\AdminGui$AdminAuctionsGui.class
-pt\henrique\communityMarket\gui\MyAuctionsGui.class
-pt\henrique\communityMarket\service\ClaimService$ClaimResult.class
-pt\henrique\communityMarket\gui\NumberInputGui$NumberInputCallback.class
-pt\henrique\communityMarket\gui\NumberInputGui.class
-pt\henrique\communityMarket\service\AuctionService$CancelResult.class
-pt\henrique\communityMarket\service\AuctionService$BidResult.class
-pt\henrique\communityMarket\gui\BrowseMarketGui.class
-pt\henrique\communityMarket\service\EarningsService.class
-pt\henrique\communityMarket\config\MessageManager.class
-pt\henrique\communityMarket\model\Auction.class
-pt\henrique\communityMarket\model\ClaimItem.class
-pt\henrique\communityMarket\gui\CreateAuctionGui.class
-pt\henrique\communityMarket\task\AuctionTask.class
-pt\henrique\communityMarket\util\SoundUtil.class
-pt\henrique\communityMarket\model\Listing$ListingStatus.class
-pt\henrique\communityMarket\util\InventoryUtil.class
-pt\henrique\communityMarket\gui\MarketGui.class
-pt\henrique\communityMarket\gui\GuiManager.class
-pt\henrique\communityMarket\gui\CreateListingGui.class
-pt\henrique\communityMarket\listener\GuiListener$1.class
-pt\henrique\communityMarket\service\ClaimService.class
-pt\henrique\communityMarket\service\TransactionService.class
-pt\henrique\communityMarket\gui\MyListingsGui.class
-pt\henrique\communityMarket\db\DatabaseManager.class
-pt\henrique\communityMarket\task\ExpiredListingTask.class
-pt\henrique\communityMarket\gui\AdminGui$AdminListingsGui.class
-pt\henrique\communityMarket\gui\ConfirmationGui.class
-pt\henrique\communityMarket\config\ConfigManager.class
-pt\henrique\communityMarket\listener\GuiListener.class
-pt\henrique\communityMarket\service\EarningsService$WithdrawResult.class
-pt\henrique\communityMarket\gui\ItemSelectionGui.class
-pt\henrique\communityMarket\util\InventoryUtil$ItemCategory.class
-pt\henrique\communityMarket\listener\PlayerListener.class
-pt\henrique\communityMarket\model\PendingEarnings.class
-pt\henrique\communityMarket\service\TransactionService$ValidationResult.class
-pt\henrique\communityMarket\model\Bid.class
-pt\henrique\communityMarket\gui\ConfirmationGui$ConfirmCallback.class
-pt\henrique\communityMarket\service\ListingService$PurchaseResult.class
-pt\henrique\communityMarket\economy\EconomyManager.class
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
deleted file mode 100644
index 309208c..0000000
--- a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
+++ /dev/null
@@ -1,42 +0,0 @@
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\command\MarketCommand.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\CommunityMarket.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\config\ConfigManager.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\config\MessageManager.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\db\DatabaseManager.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\economy\EconomyManager.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\gui\AdminGui.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\gui\BrowseAuctionsGui.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\gui\BrowseMarketGui.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\gui\ClaimGui.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\gui\ConfirmationGui.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\gui\CreateAuctionGui.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\gui\CreateListingGui.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\gui\EarningsGui.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\gui\GuiManager.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\gui\HelpGui.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\gui\ItemSelectionGui.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\gui\MainMenuGui.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\gui\MarketGui.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\gui\MyAuctionsGui.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\gui\MyListingsGui.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\gui\NumberInputGui.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\gui\QuantitySelectGui.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\listener\GuiListener.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\listener\PlayerListener.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\model\Auction.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\model\Bid.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\model\ClaimItem.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\model\Listing.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\model\PendingEarnings.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\service\AuctionService.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\service\ClaimService.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\service\EarningsService.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\service\ListingService.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\service\TransactionService.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\task\AuctionTask.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\task\ExpiredListingTask.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\util\InventoryUtil.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\util\ItemBuilder.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\util\ItemSerializer.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\util\SoundUtil.java
-C:\Users\imrog\IdeaProjects\CommunityMarket\src\main\java\pt\henrique\communityMarket\util\TextUtil.java
diff --git a/target/original-CommunityMarket-1.0.0.jar b/target/original-CommunityMarket-1.0.0.jar
deleted file mode 100644
index eb703b2..0000000
Binary files a/target/original-CommunityMarket-1.0.0.jar and /dev/null differ