Release 1.0.0
This commit is contained in:
Generated
+6
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="AgentMigrationStateService">
|
||||||
|
<option name="migrationStatus" value="COMPLETED" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
Generated
+6
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="EditMigrationStateService">
|
||||||
|
<option name="migrationStatus" value="COMPLETED" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
@@ -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).
|
||||||
|
|
||||||
@@ -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.
|
||||||
|
|
||||||
@@ -1,20 +1,23 @@
|
|||||||
# CommunityMarket
|
# 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
|
### 🛒 Fixed-Price Market
|
||||||
- Create listings with custom prices and durations
|
- 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
|
- Safe atomic purchases to prevent double-buying
|
||||||
- Configurable taxes on sales
|
- Configurable taxes on sales
|
||||||
|
|
||||||
### 🔨 Auction System
|
### 🔨 Auction System
|
||||||
- Start auctions with minimum bid and optional buyout
|
- Start auctions with minimum bid and optional buyout price
|
||||||
- Anti-snipe protection extends auction when bids arrive near the end
|
- **Anti-snipe protection** extends auction when bids arrive near the end
|
||||||
- Bid history and automatic outbid notifications
|
- Bid history and automatic outbid notifications
|
||||||
- Safe handling of auction endings and payouts
|
- 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
|
- Handles full inventories gracefully
|
||||||
|
|
||||||
### 💰 Earnings Management
|
### 💰 Earnings Management
|
||||||
- Pending earnings from sales
|
- Pending earnings from sales accumulate
|
||||||
- Withdraw all at once
|
- Withdraw all earnings at once
|
||||||
- Complete transaction history
|
- Complete transaction history
|
||||||
|
|
||||||
### 🔐 Admin Features (GUI-based)
|
### 🔐 Admin Features (GUI-based)
|
||||||
- View all listings and auctions
|
- View all listings and auctions
|
||||||
- Remove any listing
|
- Remove any listing or cancel auctions
|
||||||
- Cancel/force-end auctions
|
- Force-end auctions
|
||||||
- Reload configuration
|
- Reload configuration in-game
|
||||||
|
|
||||||
### 🎮 Intuitive GUI Flow
|
### 🎮 Intuitive GUI Flow
|
||||||
The creation flow for listings and auctions:
|
The creation flow for listings and auctions:
|
||||||
1. **Main Menu** - Central hub for all actions
|
1. **Main Menu** - Central hub for all actions
|
||||||
2. **Select Item** - Click an item from your inventory to select it
|
2. **Select Item** - Click an item from your inventory
|
||||||
3. **Select Quantity** - Choose how many to sell (for stackable items with quantity > 1)
|
3. **Select Quantity** - Choose how many to sell (for stackable items)
|
||||||
- Step buttons: -32, -16, -8, -1 and +1, +8, +16, +32
|
4. **Settings** - Set price and duration with easy click-to-adjust controls
|
||||||
- MIN and MAX preset buttons for quick selection
|
5. **Confirm** - Review and create your listing/auction
|
||||||
- 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
|
|
||||||
|
|
||||||
## Requirements
|
## 📋 Requirements
|
||||||
|
|
||||||
- **Server**: Paper 1.21.11 (or compatible)
|
| Requirement | Version |
|
||||||
- **Java**: Java 21
|
|-------------|---------|
|
||||||
- **Economy**: One of the following:
|
| **Server** | Paper 1.21+ (or Purpur, Folia-compatible forks) |
|
||||||
- Vault + any Vault-compatible economy (Essentials, CMI, etc.)
|
| **Java** | Java 21+ |
|
||||||
- EssentialsX (fallback if Vault is not present)
|
| **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
|
2. Place it in your server's `plugins/` folder
|
||||||
3. Ensure you have an economy plugin installed (Vault recommended)
|
3. Ensure you have an economy system installed (see above)
|
||||||
4. Start/restart your server
|
4. Start or restart your server
|
||||||
5. Edit `plugins/CommunityMarket/config.yml` as needed
|
5. Edit `plugins/CommunityMarket/config.yml` as needed
|
||||||
6. Use `/market` to open the marketplace!
|
6. Use `/market` to open the marketplace!
|
||||||
|
|
||||||
## Commands
|
## 🎮 Commands
|
||||||
|
|
||||||
| Command | Alias | Description | Permission |
|
| Command | Alias | Description | Permission |
|
||||||
|---------|-------|-------------|------------|
|
|---------|-------|-------------|------------|
|
||||||
@@ -73,128 +81,131 @@ The creation flow for listings and auctions:
|
|||||||
|
|
||||||
**That's it!** Everything else is done through GUIs.
|
**That's it!** Everything else is done through GUIs.
|
||||||
|
|
||||||
## Permissions
|
## 🔒 Permissions
|
||||||
|
|
||||||
| Permission | Description | Default |
|
| Permission | Description | Default |
|
||||||
|------------|-------------|---------|
|
|------------|-------------|---------|
|
||||||
| `communitymarket.*` | All permissions | op |
|
| `communitymarket.*` | All permissions | op |
|
||||||
| `communitymarket.use` | Access the market GUI | true |
|
| `communitymarket.use` | Access the market GUI | everyone |
|
||||||
| `communitymarket.sell` | Create fixed-price listings | true |
|
| `communitymarket.sell` | Create fixed-price listings | everyone |
|
||||||
| `communitymarket.auction` | Create auctions | true |
|
| `communitymarket.auction` | Create auctions | everyone |
|
||||||
| `communitymarket.buy` | Purchase from the market | true |
|
| `communitymarket.buy` | Purchase from the market | everyone |
|
||||||
| `communitymarket.bid` | Bid on auctions | true |
|
| `communitymarket.bid` | Bid on auctions | everyone |
|
||||||
| `communitymarket.claim` | Claim items from storage | true |
|
| `communitymarket.claim` | Claim items from storage | everyone |
|
||||||
| `communitymarket.withdraw` | Withdraw earnings | true |
|
| `communitymarket.withdraw` | Withdraw earnings | everyone |
|
||||||
| `communitymarket.admin` | Access admin functions | op |
|
| `communitymarket.admin` | Access admin functions | op |
|
||||||
| `communitymarket.admin.viewall` | View all listings/auctions | op |
|
| `communitymarket.admin.viewall` | View all listings/auctions | op |
|
||||||
| `communitymarket.admin.remove` | Remove any listing/auction | op |
|
| `communitymarket.admin.remove` | Remove any listing/auction | op |
|
||||||
| `communitymarket.admin.reload` | Reload configuration | op |
|
| `communitymarket.admin.reload` | Reload configuration | op |
|
||||||
|
|
||||||
## Configuration
|
## ⚙️ Configuration
|
||||||
|
|
||||||
### config.yml
|
### config.yml Highlights
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# Language setting (available: en_US, pt_PT)
|
# Language setting (available: en_US, pt_PT)
|
||||||
language: en_US
|
language: en_US
|
||||||
|
|
||||||
# Database Configuration
|
# Database: sqlite (default) or mysql
|
||||||
database:
|
database:
|
||||||
type: sqlite # or "mysql"
|
type: sqlite
|
||||||
sqlite:
|
|
||||||
file: database.db
|
|
||||||
mysql:
|
|
||||||
host: localhost
|
|
||||||
port: 3306
|
|
||||||
database: communitymarket
|
|
||||||
username: root
|
|
||||||
password: ""
|
|
||||||
|
|
||||||
# Economy Settings
|
# Economy settings
|
||||||
economy:
|
economy:
|
||||||
currency-format: "$#,##0.00"
|
currency-format: "$#,##0.00"
|
||||||
currency-symbol: "$"
|
|
||||||
taxes:
|
taxes:
|
||||||
market-tax: 5.0 # 5% tax on listings
|
market-tax: 5.0 # Tax on fixed-price sales
|
||||||
auction-tax: 7.5 # 7.5% tax on auctions
|
auction-tax: 7.5 # Tax on auction sales
|
||||||
|
|
||||||
# Market Settings
|
# Fixed-Price Market
|
||||||
market:
|
market:
|
||||||
max-listings-per-player: 20
|
max-listings-per-player: 20
|
||||||
listing-cooldown: 0 # seconds between listings
|
|
||||||
default-duration-hours: 168 # 7 days
|
default-duration-hours: 168 # 7 days
|
||||||
min-price: 1.0
|
min-price: 1.0
|
||||||
max-price: 1000000000.0
|
max-price: 1000000000.0
|
||||||
|
|
||||||
# Auction Settings
|
# Auctions
|
||||||
auction:
|
auction:
|
||||||
max-auctions-per-player: 10
|
max-auctions-per-player: 10
|
||||||
min-duration-hours: 1
|
default-duration-hours: 24
|
||||||
max-duration-hours: 168
|
|
||||||
anti-snipe:
|
anti-snipe:
|
||||||
enabled: true
|
enabled: true
|
||||||
trigger-seconds: 30
|
trigger-seconds: 30
|
||||||
extension-seconds: 30
|
extension-seconds: 30
|
||||||
max-extensions: 10
|
|
||||||
|
|
||||||
# GUI Settings
|
# GUI Settings
|
||||||
gui:
|
gui:
|
||||||
items-per-page: 45
|
show-help-button: true # Toggle help button visibility
|
||||||
show-help-button: true # Set to false to hide help button in main menu
|
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:
|
## 🔧 Troubleshooting
|
||||||
- **English (US)**: `en_US`
|
|
||||||
- **Portuguese (Portugal)**: `pt_PT`
|
### "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
|
```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
|
## 🤝 Support
|
||||||
git clone https://github.com/henrique/CommunityMarket.git
|
|
||||||
cd CommunityMarket
|
|
||||||
mvn clean package
|
|
||||||
```
|
|
||||||
|
|
||||||
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!"
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
||||||
**A:** Install Vault + an economy plugin (like EssentialsX) or just EssentialsX.
|
|
||||||
|
|
||||||
### Q: Can I use MySQL instead of SQLite?
|
## 🙏 Credits
|
||||||
**A:** Yes! Change `database.type` to `mysql` in config.yml and fill in your credentials.
|
|
||||||
|
|
||||||
### Q: How do I change the GUI titles?
|
- Built for the Paper/Spigot community
|
||||||
**A:** Edit the language file in `plugins/CommunityMarket/lang/`.
|
- Uses [Vault](https://github.com/MilkBowl/VaultAPI) for economy integration
|
||||||
|
- Uses [HikariCP](https://github.com/brettwooldridge/HikariCP) for database connection pooling
|
||||||
### 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
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
```
|
||||||
|
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
package pt.henrique.communityMarket;
|
package pt.henrique.communityMarket;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import pt.henrique.communityMarket.command.MarketCommand;
|
import pt.henrique.communityMarket.command.MarketCommand;
|
||||||
import pt.henrique.communityMarket.config.ConfigManager;
|
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.AuctionTask;
|
||||||
import pt.henrique.communityMarket.task.ExpiredListingTask;
|
import pt.henrique.communityMarket.task.ExpiredListingTask;
|
||||||
|
|
||||||
import java.util.logging.Level;
|
|
||||||
|
|
||||||
public final class CommunityMarket extends JavaPlugin {
|
public final class CommunityMarket extends JavaPlugin {
|
||||||
|
|
||||||
@@ -46,12 +44,10 @@ public final class CommunityMarket extends JavaPlugin {
|
|||||||
// Initialize economy
|
// Initialize economy
|
||||||
economyManager = new EconomyManager(this);
|
economyManager = new EconomyManager(this);
|
||||||
if (!economyManager.setupEconomy()) {
|
if (!economyManager.setupEconomy()) {
|
||||||
getLogger().severe("No economy plugin found! Please install Vault or EssentialsX.");
|
getLogger().severe("Disabling CommunityMarket due to missing economy provider.");
|
||||||
getLogger().severe("Disabling CommunityMarket...");
|
|
||||||
getServer().getPluginManager().disablePlugin(this);
|
getServer().getPluginManager().disablePlugin(this);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
getLogger().info("Economy provider: " + economyManager.getProviderName());
|
|
||||||
|
|
||||||
// Initialize database
|
// Initialize database
|
||||||
databaseManager = new DatabaseManager(this);
|
databaseManager = new DatabaseManager(this);
|
||||||
|
|||||||
@@ -3,78 +3,192 @@ package pt.henrique.communityMarket.economy;
|
|||||||
import net.milkbowl.vault.economy.Economy;
|
import net.milkbowl.vault.economy.Economy;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||||
import pt.henrique.communityMarket.CommunityMarket;
|
import pt.henrique.communityMarket.CommunityMarket;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manages economy operations using Vault.
|
* Manages economy operations using Vault (preferred) or EssentialsX (fallback).
|
||||||
* <p>
|
* <p>
|
||||||
* Vault provides a unified economy API that works with many economy plugins
|
* Priority order:
|
||||||
* including EssentialsX, CMI, and others.
|
* 1. Vault with a registered economy provider
|
||||||
|
* 2. EssentialsX economy (direct integration)
|
||||||
|
* <p>
|
||||||
|
* 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 {
|
public class EconomyManager {
|
||||||
|
|
||||||
private final CommunityMarket plugin;
|
private final CommunityMarket plugin;
|
||||||
private Economy vaultEconomy;
|
private EconomyAdapter adapter;
|
||||||
|
private String providerName = "None";
|
||||||
|
|
||||||
public EconomyManager(CommunityMarket plugin) {
|
public EconomyManager(CommunityMarket plugin) {
|
||||||
this.plugin = 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() {
|
public boolean setupEconomy() {
|
||||||
if (Bukkit.getPluginManager().getPlugin("Vault") == null) {
|
plugin.getLogger().info("=== Economy Detection ===");
|
||||||
plugin.getLogger().severe("Vault plugin not found!");
|
|
||||||
return false;
|
// 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 {
|
try {
|
||||||
RegisteredServiceProvider<Economy> rsp = Bukkit.getServicesManager().getRegistration(Economy.class);
|
RegisteredServiceProvider<Economy> rsp = Bukkit.getServicesManager().getRegistration(Economy.class);
|
||||||
if (rsp == null) {
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
vaultEconomy = rsp.getProvider();
|
Economy vaultEconomy = rsp.getProvider();
|
||||||
if (vaultEconomy != null) {
|
if (vaultEconomy == null) {
|
||||||
plugin.getLogger().info("Using Vault economy provider: " + vaultEconomy.getName());
|
plugin.getLogger().info("Vault economy provider: NULL (registration found but provider is null)");
|
||||||
return true;
|
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) {
|
} catch (Exception e) {
|
||||||
plugin.getLogger().log(Level.SEVERE, "Failed to hook into Vault economy", e);
|
plugin.getLogger().log(Level.SEVERE, "Failed to hook into Vault economy", e);
|
||||||
return false;
|
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
|
* Gets the name of the active economy provider
|
||||||
*/
|
*/
|
||||||
public String getProviderName() {
|
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
|
* @param playerUuid The player's UUID
|
||||||
* @return The player's balance
|
* @return The player's balance
|
||||||
*/
|
*/
|
||||||
public double getBalance(UUID playerUuid) {
|
public double getBalance(UUID playerUuid) {
|
||||||
if (vaultEconomy == null) return 0.0;
|
if (adapter == null) return 0.0;
|
||||||
OfflinePlayer player = Bukkit.getOfflinePlayer(playerUuid);
|
|
||||||
return vaultEconomy.getBalance(player);
|
// 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 playerUuid The player's UUID
|
||||||
* @param amount The amount to check
|
* @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 playerUuid The player's UUID
|
||||||
* @param amount The amount to withdraw
|
* @param amount The amount to withdraw
|
||||||
@@ -93,17 +208,20 @@ public class EconomyManager {
|
|||||||
*/
|
*/
|
||||||
public boolean withdraw(UUID playerUuid, double amount) {
|
public boolean withdraw(UUID playerUuid, double amount) {
|
||||||
if (amount <= 0) return true;
|
if (amount <= 0) return true;
|
||||||
if (vaultEconomy == null) return false;
|
if (adapter == null) return false;
|
||||||
|
|
||||||
OfflinePlayer player = Bukkit.getOfflinePlayer(playerUuid);
|
// If on main thread, call directly
|
||||||
if (!vaultEconomy.has(player, amount)) {
|
if (Bukkit.isPrimaryThread()) {
|
||||||
return false;
|
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 playerUuid The player's UUID
|
||||||
* @param amount The amount to deposit
|
* @param amount The amount to deposit
|
||||||
@@ -111,14 +229,21 @@ public class EconomyManager {
|
|||||||
*/
|
*/
|
||||||
public boolean deposit(UUID playerUuid, double amount) {
|
public boolean deposit(UUID playerUuid, double amount) {
|
||||||
if (amount <= 0) return true;
|
if (amount <= 0) return true;
|
||||||
if (vaultEconomy == null) return false;
|
if (adapter == null) return false;
|
||||||
|
|
||||||
OfflinePlayer player = Bukkit.getOfflinePlayer(playerUuid);
|
// If on main thread, call directly
|
||||||
return vaultEconomy.depositPlayer(player, amount).transactionSuccess();
|
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 fromUuid The UUID of the payer
|
||||||
* @param toUuid The UUID of the receiver
|
* @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
|
* @param amount The amount to format
|
||||||
* @return Formatted currency string
|
* @return Formatted currency string
|
||||||
*/
|
*/
|
||||||
public String format(double amount) {
|
public String format(double amount) {
|
||||||
if (vaultEconomy != null) {
|
if (adapter != null) {
|
||||||
return vaultEconomy.format(amount);
|
return adapter.format(amount);
|
||||||
}
|
}
|
||||||
return plugin.getMessageManager().formatCurrency(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> T runSync(java.util.function.Supplier<T> task) {
|
||||||
|
if (Bukkit.isPrimaryThread()) {
|
||||||
|
return task.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
CompletableFuture<T> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
@@ -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
|
|
||||||
|
|
||||||
@@ -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."
|
|
||||||
|
|
||||||
@@ -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."
|
|
||||||
|
|
||||||
@@ -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: /<command>
|
|
||||||
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
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,3 +0,0 @@
|
|||||||
artifactId=communitymarket
|
|
||||||
groupId=pt.henrique
|
|
||||||
version=1.0.0
|
|
||||||
@@ -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
|
|
||||||
@@ -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
|
|
||||||
Binary file not shown.
Reference in New Issue
Block a user