From a3fcb844a62e9aa9384cba9ebbee07343cb6c220 Mon Sep 17 00:00:00 2001 From: henriquescrrrr Date: Wed, 14 Jan 2026 00:04:03 +0000 Subject: [PATCH] Initial Realease --- .idea/.gitignore | 10 + .idea/compiler.xml | 18 + .idea/copilot.data.migration.ask2agent.xml | 6 + .idea/encodings.xml | 7 + .idea/jarRepositories.xml | 35 + .idea/misc.xml | 14 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + README.md | 194 ++++ communitymarket.iml | 13 + dependency-reduced-pom.xml | 100 ++ pom.xml | 124 +++ .../communityMarket/CommunityMarket.java | 178 ++++ .../command/MarketCommand.java | 54 + .../communityMarket/config/ConfigManager.java | 289 +++++ .../config/MessageManager.java | 230 ++++ .../communityMarket/db/DatabaseManager.java | 987 ++++++++++++++++++ .../economy/EconomyManager.java | 254 +++++ .../communityMarket/gui/AdminGui.java | 347 ++++++ .../gui/BrowseAuctionsGui.java | 299 ++++++ .../communityMarket/gui/BrowseMarketGui.java | 257 +++++ .../communityMarket/gui/ClaimGui.java | 205 ++++ .../communityMarket/gui/ConfirmationGui.java | 120 +++ .../communityMarket/gui/CreateAuctionGui.java | 378 +++++++ .../communityMarket/gui/CreateListingGui.java | 325 ++++++ .../communityMarket/gui/EarningsGui.java | 155 +++ .../communityMarket/gui/GuiManager.java | 211 ++++ .../henrique/communityMarket/gui/HelpGui.java | 187 ++++ .../communityMarket/gui/ItemSelectionGui.java | 260 +++++ .../communityMarket/gui/MainMenuGui.java | 261 +++++ .../communityMarket/gui/MarketGui.java | 85 ++ .../communityMarket/gui/MyAuctionsGui.java | 192 ++++ .../communityMarket/gui/MyListingsGui.java | 175 ++++ .../communityMarket/gui/NumberInputGui.java | 261 +++++ .../gui/QuantitySelectGui.java | 323 ++++++ .../communityMarket/listener/GuiListener.java | 141 +++ .../listener/PlayerListener.java | 84 ++ .../communityMarket/model/Auction.java | 200 ++++ .../henrique/communityMarket/model/Bid.java | 79 ++ .../communityMarket/model/ClaimItem.java | 102 ++ .../communityMarket/model/Listing.java | 126 +++ .../model/PendingEarnings.java | 79 ++ .../service/AuctionService.java | 473 +++++++++ .../communityMarket/service/ClaimService.java | 154 +++ .../service/EarningsService.java | 112 ++ .../service/ListingService.java | 377 +++++++ .../service/TransactionService.java | 297 ++++++ .../communityMarket/task/AuctionTask.java | 28 + .../task/ExpiredListingTask.java | 28 + .../communityMarket/util/InventoryUtil.java | 269 +++++ .../communityMarket/util/ItemBuilder.java | 215 ++++ .../communityMarket/util/ItemSerializer.java | 73 ++ .../communityMarket/util/SoundUtil.java | 114 ++ .../communityMarket/util/TextUtil.java | 145 +++ src/main/resources/config.yml | 152 +++ src/main/resources/lang/en_US.yml | 353 +++++++ src/main/resources/lang/pt_PT.yml | 353 +++++++ src/main/resources/plugin.yml | 83 ++ target/CommunityMarket-1.0.0.jar | Bin 0 -> 418222 bytes target/classes/config.yml | 152 +++ target/classes/lang/en_US.yml | 351 +++++++ target/classes/lang/pt_PT.yml | 351 +++++++ target/classes/plugin.yml | 83 ++ .../communityMarket/CommunityMarket.class | Bin 0 -> 6934 bytes .../command/MarketCommand.class | Bin 0 -> 2664 bytes .../config/ConfigManager.class | Bin 0 -> 14615 bytes .../config/MessageManager.class | Bin 0 -> 9038 bytes .../communityMarket/db/DatabaseManager.class | Bin 0 -> 45115 bytes .../EconomyManager$EconomyProvider.class | Bin 0 -> 1502 bytes .../economy/EconomyManager.class | Bin 0 -> 6941 bytes .../gui/AdminGui$AdminAuctionsGui.class | Bin 0 -> 8810 bytes .../gui/AdminGui$AdminListingsGui.class | Bin 0 -> 8450 bytes .../communityMarket/gui/AdminGui.class | Bin 0 -> 6091 bytes .../gui/BrowseAuctionsGui$1.class | Bin 0 -> 1033 bytes .../gui/BrowseAuctionsGui.class | Bin 0 -> 17531 bytes .../gui/BrowseMarketGui$1.class | Bin 0 -> 1103 bytes .../communityMarket/gui/BrowseMarketGui.class | Bin 0 -> 14401 bytes .../communityMarket/gui/ClaimGui$1.class | Bin 0 -> 950 bytes .../communityMarket/gui/ClaimGui.class | Bin 0 -> 12554 bytes .../gui/ConfirmationGui$ConfirmCallback.class | Bin 0 -> 382 bytes .../communityMarket/gui/ConfirmationGui.class | Bin 0 -> 5436 bytes .../gui/CreateAuctionGui.class | Bin 0 -> 15348 bytes .../gui/CreateListingGui.class | Bin 0 -> 14335 bytes .../communityMarket/gui/EarningsGui.class | Bin 0 -> 9660 bytes .../communityMarket/gui/GuiManager.class | Bin 0 -> 8801 bytes .../communityMarket/gui/HelpGui.class | Bin 0 -> 6903 bytes .../gui/ItemSelectionGui$SelectionMode.class | Bin 0 -> 1424 bytes .../gui/ItemSelectionGui.class | Bin 0 -> 8997 bytes .../communityMarket/gui/MainMenuGui.class | Bin 0 -> 12100 bytes .../gui/MarketGui$GuiType.class | Bin 0 -> 2476 bytes .../communityMarket/gui/MarketGui.class | Bin 0 -> 1098 bytes .../communityMarket/gui/MyAuctionsGui.class | Bin 0 -> 11898 bytes .../communityMarket/gui/MyListingsGui.class | Bin 0 -> 11294 bytes .../NumberInputGui$NumberInputCallback.class | Bin 0 -> 387 bytes .../communityMarket/gui/NumberInputGui.class | Bin 0 -> 8440 bytes .../listener/GuiListener$1.class | Bin 0 -> 851 bytes .../listener/GuiListener.class | Bin 0 -> 5367 bytes .../listener/PlayerListener.class | Bin 0 -> 6018 bytes .../model/Auction$AuctionStatus.class | Bin 0 -> 1579 bytes .../communityMarket/model/Auction.class | Bin 0 -> 5218 bytes .../henrique/communityMarket/model/Bid.class | Bin 0 -> 1938 bytes .../model/ClaimItem$ClaimReason.class | Bin 0 -> 2193 bytes .../communityMarket/model/ClaimItem.class | Bin 0 -> 2436 bytes .../model/Listing$ListingStatus.class | Bin 0 -> 1472 bytes .../communityMarket/model/Listing.class | Bin 0 -> 3336 bytes .../model/PendingEarnings.class | Bin 0 -> 1967 bytes .../service/AuctionService$BidResult.class | Bin 0 -> 1902 bytes .../service/AuctionService$CancelResult.class | Bin 0 -> 1595 bytes .../service/AuctionService.class | Bin 0 -> 18470 bytes .../service/ClaimService$ClaimResult.class | Bin 0 -> 1522 bytes .../service/ClaimService.class | Bin 0 -> 8304 bytes .../EarningsService$WithdrawResult.class | Bin 0 -> 1339 bytes .../service/EarningsService.class | Bin 0 -> 5211 bytes .../ListingService$PurchaseResult.class | Bin 0 -> 1755 bytes .../service/ListingService.class | Bin 0 -> 17362 bytes ...TransactionService$TransactionResult.class | Bin 0 -> 1295 bytes .../TransactionService$ValidationResult.class | Bin 0 -> 1936 bytes .../service/TransactionService.class | Bin 0 -> 9178 bytes .../communityMarket/task/AuctionTask.class | Bin 0 -> 2296 bytes .../task/ExpiredListingTask.class | Bin 0 -> 2328 bytes .../util/InventoryUtil$ItemCategory.class | Bin 0 -> 2627 bytes .../communityMarket/util/InventoryUtil.class | Bin 0 -> 5788 bytes .../communityMarket/util/ItemBuilder.class | Bin 0 -> 6813 bytes .../communityMarket/util/ItemSerializer.class | Bin 0 -> 2671 bytes .../communityMarket/util/SoundUtil.class | Bin 0 -> 3424 bytes .../communityMarket/util/TextUtil.class | Bin 0 -> 4811 bytes target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 63 ++ .../compile/default-compile/inputFiles.lst | 41 + target/original-CommunityMarket-1.0.0.jar | Bin 0 -> 188869 bytes 130 files changed, 11649 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/copilot.data.migration.ask2agent.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 README.md create mode 100644 communitymarket.iml create mode 100644 dependency-reduced-pom.xml create mode 100644 pom.xml create mode 100644 src/main/java/pt/henrique/communityMarket/CommunityMarket.java create mode 100644 src/main/java/pt/henrique/communityMarket/command/MarketCommand.java create mode 100644 src/main/java/pt/henrique/communityMarket/config/ConfigManager.java create mode 100644 src/main/java/pt/henrique/communityMarket/config/MessageManager.java create mode 100644 src/main/java/pt/henrique/communityMarket/db/DatabaseManager.java create mode 100644 src/main/java/pt/henrique/communityMarket/economy/EconomyManager.java create mode 100644 src/main/java/pt/henrique/communityMarket/gui/AdminGui.java create mode 100644 src/main/java/pt/henrique/communityMarket/gui/BrowseAuctionsGui.java create mode 100644 src/main/java/pt/henrique/communityMarket/gui/BrowseMarketGui.java create mode 100644 src/main/java/pt/henrique/communityMarket/gui/ClaimGui.java create mode 100644 src/main/java/pt/henrique/communityMarket/gui/ConfirmationGui.java create mode 100644 src/main/java/pt/henrique/communityMarket/gui/CreateAuctionGui.java create mode 100644 src/main/java/pt/henrique/communityMarket/gui/CreateListingGui.java create mode 100644 src/main/java/pt/henrique/communityMarket/gui/EarningsGui.java create mode 100644 src/main/java/pt/henrique/communityMarket/gui/GuiManager.java create mode 100644 src/main/java/pt/henrique/communityMarket/gui/HelpGui.java create mode 100644 src/main/java/pt/henrique/communityMarket/gui/ItemSelectionGui.java create mode 100644 src/main/java/pt/henrique/communityMarket/gui/MainMenuGui.java create mode 100644 src/main/java/pt/henrique/communityMarket/gui/MarketGui.java create mode 100644 src/main/java/pt/henrique/communityMarket/gui/MyAuctionsGui.java create mode 100644 src/main/java/pt/henrique/communityMarket/gui/MyListingsGui.java create mode 100644 src/main/java/pt/henrique/communityMarket/gui/NumberInputGui.java create mode 100644 src/main/java/pt/henrique/communityMarket/gui/QuantitySelectGui.java create mode 100644 src/main/java/pt/henrique/communityMarket/listener/GuiListener.java create mode 100644 src/main/java/pt/henrique/communityMarket/listener/PlayerListener.java create mode 100644 src/main/java/pt/henrique/communityMarket/model/Auction.java create mode 100644 src/main/java/pt/henrique/communityMarket/model/Bid.java create mode 100644 src/main/java/pt/henrique/communityMarket/model/ClaimItem.java create mode 100644 src/main/java/pt/henrique/communityMarket/model/Listing.java create mode 100644 src/main/java/pt/henrique/communityMarket/model/PendingEarnings.java create mode 100644 src/main/java/pt/henrique/communityMarket/service/AuctionService.java create mode 100644 src/main/java/pt/henrique/communityMarket/service/ClaimService.java create mode 100644 src/main/java/pt/henrique/communityMarket/service/EarningsService.java create mode 100644 src/main/java/pt/henrique/communityMarket/service/ListingService.java create mode 100644 src/main/java/pt/henrique/communityMarket/service/TransactionService.java create mode 100644 src/main/java/pt/henrique/communityMarket/task/AuctionTask.java create mode 100644 src/main/java/pt/henrique/communityMarket/task/ExpiredListingTask.java create mode 100644 src/main/java/pt/henrique/communityMarket/util/InventoryUtil.java create mode 100644 src/main/java/pt/henrique/communityMarket/util/ItemBuilder.java create mode 100644 src/main/java/pt/henrique/communityMarket/util/ItemSerializer.java create mode 100644 src/main/java/pt/henrique/communityMarket/util/SoundUtil.java create mode 100644 src/main/java/pt/henrique/communityMarket/util/TextUtil.java create mode 100644 src/main/resources/config.yml create mode 100644 src/main/resources/lang/en_US.yml create mode 100644 src/main/resources/lang/pt_PT.yml create mode 100644 src/main/resources/plugin.yml create mode 100644 target/CommunityMarket-1.0.0.jar create mode 100644 target/classes/config.yml create mode 100644 target/classes/lang/en_US.yml create mode 100644 target/classes/lang/pt_PT.yml create mode 100644 target/classes/plugin.yml create mode 100644 target/classes/pt/henrique/communityMarket/CommunityMarket.class create mode 100644 target/classes/pt/henrique/communityMarket/command/MarketCommand.class create mode 100644 target/classes/pt/henrique/communityMarket/config/ConfigManager.class create mode 100644 target/classes/pt/henrique/communityMarket/config/MessageManager.class create mode 100644 target/classes/pt/henrique/communityMarket/db/DatabaseManager.class create mode 100644 target/classes/pt/henrique/communityMarket/economy/EconomyManager$EconomyProvider.class create mode 100644 target/classes/pt/henrique/communityMarket/economy/EconomyManager.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/AdminGui$AdminAuctionsGui.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/AdminGui$AdminListingsGui.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/AdminGui.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/BrowseAuctionsGui$1.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/BrowseAuctionsGui.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/BrowseMarketGui$1.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/BrowseMarketGui.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/ClaimGui$1.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/ClaimGui.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/ConfirmationGui$ConfirmCallback.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/ConfirmationGui.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/CreateAuctionGui.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/CreateListingGui.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/EarningsGui.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/GuiManager.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/HelpGui.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/ItemSelectionGui$SelectionMode.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/ItemSelectionGui.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/MainMenuGui.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/MarketGui$GuiType.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/MarketGui.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/MyAuctionsGui.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/MyListingsGui.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/NumberInputGui$NumberInputCallback.class create mode 100644 target/classes/pt/henrique/communityMarket/gui/NumberInputGui.class create mode 100644 target/classes/pt/henrique/communityMarket/listener/GuiListener$1.class create mode 100644 target/classes/pt/henrique/communityMarket/listener/GuiListener.class create mode 100644 target/classes/pt/henrique/communityMarket/listener/PlayerListener.class create mode 100644 target/classes/pt/henrique/communityMarket/model/Auction$AuctionStatus.class create mode 100644 target/classes/pt/henrique/communityMarket/model/Auction.class create mode 100644 target/classes/pt/henrique/communityMarket/model/Bid.class create mode 100644 target/classes/pt/henrique/communityMarket/model/ClaimItem$ClaimReason.class create mode 100644 target/classes/pt/henrique/communityMarket/model/ClaimItem.class create mode 100644 target/classes/pt/henrique/communityMarket/model/Listing$ListingStatus.class create mode 100644 target/classes/pt/henrique/communityMarket/model/Listing.class create mode 100644 target/classes/pt/henrique/communityMarket/model/PendingEarnings.class create mode 100644 target/classes/pt/henrique/communityMarket/service/AuctionService$BidResult.class create mode 100644 target/classes/pt/henrique/communityMarket/service/AuctionService$CancelResult.class create mode 100644 target/classes/pt/henrique/communityMarket/service/AuctionService.class create mode 100644 target/classes/pt/henrique/communityMarket/service/ClaimService$ClaimResult.class create mode 100644 target/classes/pt/henrique/communityMarket/service/ClaimService.class create mode 100644 target/classes/pt/henrique/communityMarket/service/EarningsService$WithdrawResult.class create mode 100644 target/classes/pt/henrique/communityMarket/service/EarningsService.class create mode 100644 target/classes/pt/henrique/communityMarket/service/ListingService$PurchaseResult.class create mode 100644 target/classes/pt/henrique/communityMarket/service/ListingService.class create mode 100644 target/classes/pt/henrique/communityMarket/service/TransactionService$TransactionResult.class create mode 100644 target/classes/pt/henrique/communityMarket/service/TransactionService$ValidationResult.class create mode 100644 target/classes/pt/henrique/communityMarket/service/TransactionService.class create mode 100644 target/classes/pt/henrique/communityMarket/task/AuctionTask.class create mode 100644 target/classes/pt/henrique/communityMarket/task/ExpiredListingTask.class create mode 100644 target/classes/pt/henrique/communityMarket/util/InventoryUtil$ItemCategory.class create mode 100644 target/classes/pt/henrique/communityMarket/util/InventoryUtil.class create mode 100644 target/classes/pt/henrique/communityMarket/util/ItemBuilder.class create mode 100644 target/classes/pt/henrique/communityMarket/util/ItemSerializer.class create mode 100644 target/classes/pt/henrique/communityMarket/util/SoundUtil.class create mode 100644 target/classes/pt/henrique/communityMarket/util/TextUtil.class create mode 100644 target/maven-archiver/pom.properties create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 target/original-CommunityMarket-1.0.0.jar diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..ab1f416 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..a4aa64a --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/copilot.data.migration.ask2agent.xml b/.idea/copilot.data.migration.ask2agent.xml new file mode 100644 index 0000000..1f2ea11 --- /dev/null +++ b/.idea/copilot.data.migration.ask2agent.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..da1acce --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..7ace097 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..d16871e --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..f2e53c0 --- /dev/null +++ b/README.md @@ -0,0 +1,194 @@ +# CommunityMarket + +A professional, production-ready GUI-only marketplace plugin for Minecraft Paper 1.21.11. + +Players can create fixed-price listings and auctions, browse, buy, bid, claim items, and withdraw earnings — all through intuitive GUIs. No complex commands to learn! + +## Features + +### 🛒 Fixed-Price Market +- Create listings with custom prices and durations +- Browse paginated listings with categories and sorting +- Safe atomic purchases to prevent double-buying +- Configurable taxes on sales + +### 🔨 Auction System +- Start auctions with minimum bid and optional buyout +- Anti-snipe protection extends auction when bids arrive near the end +- Bid history and automatic outbid notifications +- Safe handling of auction endings and payouts + +### 📦 Claim Storage +- Items from expired listings go to claim storage +- Won auction items are safely delivered +- Handles full inventories gracefully + +### 💰 Earnings Management +- Pending earnings from sales +- Withdraw all at once +- Complete transaction history + +### 🔐 Admin Features (GUI-based) +- View all listings and auctions +- Remove any listing +- Cancel/force-end auctions +- Reload configuration + +### 🎮 Intuitive GUI Flow +The creation flow for listings and auctions: +1. **Main Menu** - Central hub for all actions +2. **Select Item** - Click an item from your inventory to select it +3. **Select Quantity** - Choose how many to sell (skipped for unstackable items) +4. **Settings** - Set price and duration with merged, clickable elements +5. **Confirm** - Review and confirm your listing/auction + +## Requirements + +- **Server**: Paper 1.21.11 (or compatible) +- **Java**: Java 21 +- **Economy**: One of the following: + - Vault + any Vault-compatible economy (Essentials, CMI, etc.) + - EssentialsX (fallback if Vault is not present) + +## Installation + +1. Download `CommunityMarket-1.0.0.jar` +2. Place it in your server's `plugins/` folder +3. Ensure you have an economy plugin installed (Vault recommended) +4. Start/restart your server +5. Edit `plugins/CommunityMarket/config.yml` as needed +6. Use `/market` to open the marketplace! + +## Commands + +| Command | Alias | Description | Permission | +|---------|-------|-------------|------------| +| `/market` | `/cmarket` | Opens the main market GUI | `communitymarket.use` | + +**That's it!** Everything else is done through GUIs. + +## Permissions + +| Permission | Description | Default | +|------------|-------------|---------| +| `communitymarket.*` | All permissions | op | +| `communitymarket.use` | Access the market GUI | true | +| `communitymarket.sell` | Create fixed-price listings | true | +| `communitymarket.auction` | Create auctions | true | +| `communitymarket.buy` | Purchase from the market | true | +| `communitymarket.bid` | Bid on auctions | true | +| `communitymarket.claim` | Claim items from storage | true | +| `communitymarket.withdraw` | Withdraw earnings | true | +| `communitymarket.admin` | Access admin functions | op | +| `communitymarket.admin.viewall` | View all listings/auctions | op | +| `communitymarket.admin.remove` | Remove any listing/auction | op | +| `communitymarket.admin.reload` | Reload configuration | op | + +## Configuration + +### config.yml + +```yaml +# Language setting (available: en_US, pt_PT) +language: en_US + +# Database Configuration +database: + type: sqlite # or "mysql" + sqlite: + file: database.db + mysql: + host: localhost + port: 3306 + database: communitymarket + username: root + password: "" + +# Economy Settings +economy: + currency-format: "$#,##0.00" + currency-symbol: "$" + taxes: + market-tax: 5.0 # 5% tax on listings + auction-tax: 7.5 # 7.5% tax on auctions + +# Market Settings +market: + max-listings-per-player: 20 + listing-cooldown: 0 # seconds between listings + default-duration-hours: 168 # 7 days + min-price: 1.0 + max-price: 1000000000.0 + +# Auction Settings +auction: + max-auctions-per-player: 10 + min-duration-hours: 1 + max-duration-hours: 168 + anti-snipe: + enabled: true + trigger-seconds: 30 + extension-seconds: 30 + max-extensions: 10 + +# GUI Settings +gui: + items-per-page: 45 + show-help-button: true # Set to false to hide help button in main menu +``` + +See the full `config.yml` for all options. + +### Languages + +CommunityMarket ships with two languages: +- **English (US)**: `en_US` +- **Portuguese (Portugal)**: `pt_PT` + +Change the language in `config.yml`: +```yaml +language: pt_PT +``` + +You can create custom language files by copying an existing one in `plugins/CommunityMarket/lang/`. + +## Building from Source + +```bash +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`. + +## FAQ + +### Q: The plugin says "No economy plugin found!" +**A:** Install Vault + an economy plugin (like EssentialsX) or just EssentialsX. + +### Q: Can I use MySQL instead of SQLite? +**A:** Yes! Change `database.type` to `mysql` in config.yml and fill in your credentials. + +### Q: How do I change the GUI titles? +**A:** Edit the language file in `plugins/CommunityMarket/lang/`. + +### Q: Items aren't being removed when creating listings? +**A:** This is a known issue with some inventory plugins. Make sure you're running Paper 1.21.11. + +### Q: How do taxes work? +**A:** When an item sells, the tax percentage is deducted from the seller's earnings. Buyers pay the listed price. + +## Support + +- **Issues**: [GitHub Issues](https://github.com/henrique/CommunityMarket/issues) +- **Discord**: Coming soon + +## License + +MIT License - See LICENSE file for details. + +--- + +Made with ❤️ for the Minecraft community + diff --git a/communitymarket.iml b/communitymarket.iml new file mode 100644 index 0000000..a376b96 --- /dev/null +++ b/communitymarket.iml @@ -0,0 +1,13 @@ + + + + + + + ADVENTURE + + 1 + + + + \ No newline at end of file diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml new file mode 100644 index 0000000..64288af --- /dev/null +++ b/dependency-reduced-pom.xml @@ -0,0 +1,100 @@ + + + 4.0.0 + pt.henrique + CommunityMarket + CommunityMarket + 1.0.0 + A GUI-only marketplace plugin for Minecraft Paper servers + + clean package + + + true + src/main/resources + + + ${project.name}-${project.version} + + + maven-compiler-plugin + 3.13.0 + + ${java.version} + ${java.version} + + --enable-preview + + + + + maven-shade-plugin + 3.5.3 + + + package + + shade + + + + + com.zaxxer.hikari + pt.henrique.communityMarket.lib.hikari + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + + + + + + papermc-repo + https://repo.papermc.io/repository/maven-public/ + + + jitpack.io + https://jitpack.io + + + essentials-releases + https://repo.essentialsx.net/releases/ + + + + + io.papermc.paper + paper-api + 1.21.4-R0.1-SNAPSHOT + provided + + + com.github.MilkBowl + VaultAPI + 1.7.1 + provided + + + net.essentialsx + EssentialsX + 2.20.1 + provided + + + + 21 + UTF-8 + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..97a43a8 --- /dev/null +++ b/pom.xml @@ -0,0 +1,124 @@ + + + 4.0.0 + + pt.henrique + CommunityMarket + 1.0.0 + jar + + CommunityMarket + A GUI-only marketplace plugin for Minecraft Paper servers + + + 21 + UTF-8 + + + + clean package + ${project.name}-${project.version} + + + org.apache.maven.plugins + maven-compiler-plugin + 3.13.0 + + ${java.version} + ${java.version} + + --enable-preview + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.5.3 + + + package + + shade + + + + + com.zaxxer.hikari + pt.henrique.communityMarket.lib.hikari + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + + + + + src/main/resources + true + + + + + + + papermc-repo + https://repo.papermc.io/repository/maven-public/ + + + jitpack.io + https://jitpack.io + + + essentials-releases + https://repo.essentialsx.net/releases/ + + + + + + + io.papermc.paper + paper-api + 1.21.4-R0.1-SNAPSHOT + provided + + + + + com.github.MilkBowl + VaultAPI + 1.7.1 + provided + + + + + net.essentialsx + EssentialsX + 2.20.1 + provided + + + + + com.zaxxer + HikariCP + 5.1.0 + compile + + + diff --git a/src/main/java/pt/henrique/communityMarket/CommunityMarket.java b/src/main/java/pt/henrique/communityMarket/CommunityMarket.java new file mode 100644 index 0000000..ca85bd1 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/CommunityMarket.java @@ -0,0 +1,178 @@ +package pt.henrique.communityMarket; + +import org.bukkit.Bukkit; +import org.bukkit.plugin.java.JavaPlugin; +import pt.henrique.communityMarket.command.MarketCommand; +import pt.henrique.communityMarket.config.ConfigManager; +import pt.henrique.communityMarket.config.MessageManager; +import pt.henrique.communityMarket.db.DatabaseManager; +import pt.henrique.communityMarket.economy.EconomyManager; +import pt.henrique.communityMarket.gui.GuiManager; +import pt.henrique.communityMarket.listener.GuiListener; +import pt.henrique.communityMarket.listener.PlayerListener; +import pt.henrique.communityMarket.service.*; +import pt.henrique.communityMarket.task.AuctionTask; +import pt.henrique.communityMarket.task.ExpiredListingTask; + +import java.util.logging.Level; + +public final class CommunityMarket extends JavaPlugin { + + private static CommunityMarket instance; + + private ConfigManager configManager; + private MessageManager messageManager; + private DatabaseManager databaseManager; + private EconomyManager economyManager; + private GuiManager guiManager; + + private ListingService listingService; + private AuctionService auctionService; + private ClaimService claimService; + private EarningsService earningsService; + private TransactionService transactionService; + + private AuctionTask auctionTask; + private ExpiredListingTask expiredListingTask; + + @Override + public void onEnable() { + instance = this; + + // Load configurations + configManager = new ConfigManager(this); + messageManager = new MessageManager(this); + + // Initialize economy + economyManager = new EconomyManager(this); + if (!economyManager.setupEconomy()) { + getLogger().severe("No economy plugin found! Please install Vault or EssentialsX."); + getLogger().severe("Disabling CommunityMarket..."); + getServer().getPluginManager().disablePlugin(this); + return; + } + getLogger().info("Economy provider: " + economyManager.getProviderName()); + + // Initialize database + databaseManager = new DatabaseManager(this); + if (!databaseManager.initialize()) { + getLogger().severe("Failed to initialize database!"); + getLogger().severe("Disabling CommunityMarket..."); + getServer().getPluginManager().disablePlugin(this); + return; + } + getLogger().info("Database initialized successfully."); + + // Initialize services + claimService = new ClaimService(this); + earningsService = new EarningsService(this); + listingService = new ListingService(this); + auctionService = new AuctionService(this); + transactionService = new TransactionService(this); + + // Initialize GUI manager + guiManager = new GuiManager(this); + + // Register command + MarketCommand marketCommand = new MarketCommand(this); + var command = getCommand("market"); + if (command != null) { + command.setExecutor(marketCommand); + command.setTabCompleter(marketCommand); + } + + // Register listeners + getServer().getPluginManager().registerEvents(new GuiListener(this), this); + getServer().getPluginManager().registerEvents(new PlayerListener(this), this); + + // Start tasks + startTasks(); + + getLogger().info("CommunityMarket has been enabled!"); + } + + @Override + public void onDisable() { + // Stop tasks + if (auctionTask != null) { + auctionTask.cancel(); + } + if (expiredListingTask != null) { + expiredListingTask.cancel(); + } + + // Close GUI manager + if (guiManager != null) { + guiManager.closeAllGuis(); + } + + // Close database + if (databaseManager != null) { + databaseManager.shutdown(); + } + + getLogger().info("CommunityMarket has been disabled!"); + } + + private void startTasks() { + // Auction check task + int auctionInterval = configManager.getAuctionCheckInterval() * 20; // Convert to ticks + auctionTask = new AuctionTask(this); + auctionTask.runTaskTimerAsynchronously(this, auctionInterval, auctionInterval); + + // Expired listing check task + int expiredInterval = configManager.getExpiredCheckInterval() * 60 * 20; // Convert minutes to ticks + expiredListingTask = new ExpiredListingTask(this); + expiredListingTask.runTaskTimerAsynchronously(this, expiredInterval, expiredInterval); + } + + public void reload() { + configManager.reload(); + messageManager.reload(); + getLogger().info("Configuration reloaded."); + } + + public static CommunityMarket getInstance() { + return instance; + } + + public ConfigManager getConfigManager() { + return configManager; + } + + public MessageManager getMessageManager() { + return messageManager; + } + + public DatabaseManager getDatabaseManager() { + return databaseManager; + } + + public EconomyManager getEconomyManager() { + return economyManager; + } + + public GuiManager getGuiManager() { + return guiManager; + } + + public ListingService getListingService() { + return listingService; + } + + public AuctionService getAuctionService() { + return auctionService; + } + + public ClaimService getClaimService() { + return claimService; + } + + public EarningsService getEarningsService() { + return earningsService; + } + + public TransactionService getTransactionService() { + return transactionService; + } +} diff --git a/src/main/java/pt/henrique/communityMarket/command/MarketCommand.java b/src/main/java/pt/henrique/communityMarket/command/MarketCommand.java new file mode 100644 index 0000000..c65dd2e --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/command/MarketCommand.java @@ -0,0 +1,54 @@ +package pt.henrique.communityMarket.command; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import pt.henrique.communityMarket.CommunityMarket; + +import java.util.Collections; +import java.util.List; + +/** + * The only command in the plugin: /market (alias: /cmarket) + * Opens the main market GUI. All other actions are done through GUIs. + */ +public class MarketCommand implements CommandExecutor, TabCompleter { + + private final CommunityMarket plugin; + + public MarketCommand(CommunityMarket plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, + @NotNull String label, @NotNull String[] args) { + // Only players can use this command + if (!(sender instanceof Player player)) { + sender.sendMessage(plugin.getMessageManager().get("messages.player-only")); + return true; + } + + // Check basic permission + if (!player.hasPermission("communitymarket.use")) { + player.sendMessage(plugin.getMessageManager().getPrefixed("messages.no-permission")); + return true; + } + + // Open the main market GUI + plugin.getGuiManager().openMainMenu(player); + return true; + } + + @Override + public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, + @NotNull String label, @NotNull String[] args) { + // No tab completions - everything is GUI-based + return Collections.emptyList(); + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/config/ConfigManager.java b/src/main/java/pt/henrique/communityMarket/config/ConfigManager.java new file mode 100644 index 0000000..0393458 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/config/ConfigManager.java @@ -0,0 +1,289 @@ +package pt.henrique.communityMarket.config; + +import org.bukkit.Material; +import org.bukkit.configuration.file.FileConfiguration; +import pt.henrique.communityMarket.CommunityMarket; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * Manages the main plugin configuration + */ +public class ConfigManager { + + private final CommunityMarket plugin; + private FileConfiguration config; + + // Database settings + private String databaseType; + private String sqliteFile; + private String mysqlHost; + private int mysqlPort; + private String mysqlDatabase; + private String mysqlUsername; + private String mysqlPassword; + private int poolMaxSize; + private int poolMinIdle; + private long poolConnectionTimeout; + private long poolIdleTimeout; + private long poolMaxLifetime; + + // Economy settings + private String currencyFormat; + private String currencySymbol; + private double marketTax; + private double auctionTax; + + // Market settings + private int maxListingsPerPlayer; + private int listingCooldown; + private int defaultDurationHours; + private List availableDurations; + private double minPrice; + private double maxPrice; + + // Auction settings + private int maxAuctionsPerPlayer; + private int minDurationHours; + private int maxDurationHours; + private int defaultAuctionDurationHours; + private List availableAuctionDurations; + private double minStartPrice; + private double maxStartPrice; + private double minBidIncrementPercent; + private double minBidIncrementAbsolute; + private boolean antiSnipeEnabled; + private int antiSnipeTriggerSeconds; + private int antiSnipeExtensionSeconds; + private int antiSnipeMaxExtensions; + + // Blacklist + private Set blacklistedMaterials; + private List blacklistedKeywords; + + // GUI settings + private String mainMenuTitle; + private String browseMarketTitle; + private String browseAuctionsTitle; + private String createListingTitle; + private String createAuctionTitle; + private String myListingsTitle; + private String myAuctionsTitle; + private String claimTitle; + private String earningsTitle; + private String confirmTitle; + private String numberInputTitle; + private String adminTitle; + private int itemsPerPage; + private boolean helpButtonEnabled; + private String clickSound; + private String successSound; + private String errorSound; + private String purchaseSound; + + // Notifications + private boolean notifyOnSale; + private boolean notifyOnOutbid; + private boolean notifyOnWin; + private boolean notifyOnExpire; + + // Performance + private int cacheDuration; + private int auctionCheckInterval; + private int expiredCheckInterval; + + public ConfigManager(CommunityMarket plugin) { + this.plugin = plugin; + reload(); + } + + public void reload() { + plugin.saveDefaultConfig(); + plugin.reloadConfig(); + config = plugin.getConfig(); + loadSettings(); + } + + private void loadSettings() { + // Database settings + databaseType = config.getString("database.type", "sqlite"); + sqliteFile = config.getString("database.sqlite.file", "database.db"); + mysqlHost = config.getString("database.mysql.host", "localhost"); + mysqlPort = config.getInt("database.mysql.port", 3306); + mysqlDatabase = config.getString("database.mysql.database", "communitymarket"); + mysqlUsername = config.getString("database.mysql.username", "root"); + mysqlPassword = config.getString("database.mysql.password", ""); + poolMaxSize = config.getInt("database.mysql.pool.maximum-pool-size", 10); + poolMinIdle = config.getInt("database.mysql.pool.minimum-idle", 2); + poolConnectionTimeout = config.getLong("database.mysql.pool.connection-timeout", 30000); + poolIdleTimeout = config.getLong("database.mysql.pool.idle-timeout", 600000); + poolMaxLifetime = config.getLong("database.mysql.pool.max-lifetime", 1800000); + + // Economy settings + currencyFormat = config.getString("economy.currency-format", "$#,##0.00"); + currencySymbol = config.getString("economy.currency-symbol", "$"); + marketTax = config.getDouble("economy.taxes.market-tax", 5.0); + auctionTax = config.getDouble("economy.taxes.auction-tax", 7.5); + + // Market settings + maxListingsPerPlayer = config.getInt("market.max-listings-per-player", 20); + listingCooldown = config.getInt("market.listing-cooldown", 0); + defaultDurationHours = config.getInt("market.default-duration-hours", 168); + availableDurations = config.getIntegerList("market.available-durations"); + minPrice = config.getDouble("market.min-price", 1.0); + maxPrice = config.getDouble("market.max-price", 1000000000.0); + + // Auction settings + maxAuctionsPerPlayer = config.getInt("auction.max-auctions-per-player", 10); + minDurationHours = config.getInt("auction.min-duration-hours", 1); + maxDurationHours = config.getInt("auction.max-duration-hours", 168); + defaultAuctionDurationHours = config.getInt("auction.default-duration-hours", 24); + availableAuctionDurations = config.getIntegerList("auction.available-durations"); + minStartPrice = config.getDouble("auction.min-start-price", 1.0); + maxStartPrice = config.getDouble("auction.max-start-price", 1000000000.0); + minBidIncrementPercent = config.getDouble("auction.min-bid-increment-percent", 5.0); + minBidIncrementAbsolute = config.getDouble("auction.min-bid-increment-absolute", 1.0); + antiSnipeEnabled = config.getBoolean("auction.anti-snipe.enabled", true); + antiSnipeTriggerSeconds = config.getInt("auction.anti-snipe.trigger-seconds", 30); + antiSnipeExtensionSeconds = config.getInt("auction.anti-snipe.extension-seconds", 30); + antiSnipeMaxExtensions = config.getInt("auction.anti-snipe.max-extensions", 10); + + // Blacklist + blacklistedMaterials = new HashSet<>(); + for (String materialName : config.getStringList("blacklist.materials")) { + try { + Material material = Material.valueOf(materialName.toUpperCase()); + blacklistedMaterials.add(material); + } catch (IllegalArgumentException e) { + plugin.getLogger().warning("Invalid material in blacklist: " + materialName); + } + } + blacklistedKeywords = config.getStringList("blacklist.keywords"); + + // GUI settings + mainMenuTitle = config.getString("gui.main-menu-title", "&8&lCommunity Market"); + browseMarketTitle = config.getString("gui.browse-market-title", "&8&lBrowse Market"); + browseAuctionsTitle = config.getString("gui.browse-auctions-title", "&8&lBrowse Auctions"); + createListingTitle = config.getString("gui.create-listing-title", "&8&lCreate Listing"); + createAuctionTitle = config.getString("gui.create-auction-title", "&8&lCreate Auction"); + myListingsTitle = config.getString("gui.my-listings-title", "&8&lMy Listings"); + myAuctionsTitle = config.getString("gui.my-auctions-title", "&8&lMy Auctions"); + claimTitle = config.getString("gui.claim-title", "&8&lClaim Items"); + earningsTitle = config.getString("gui.earnings-title", "&8&lEarnings"); + confirmTitle = config.getString("gui.confirm-title", "&8&lConfirm Action"); + numberInputTitle = config.getString("gui.number-input-title", "&8&lEnter Amount"); + adminTitle = config.getString("gui.admin-title", "&8&lAdmin Panel"); + itemsPerPage = config.getInt("gui.items-per-page", 45); + helpButtonEnabled = config.getBoolean("gui.show-help-button", true); + clickSound = config.getString("gui.sounds.click", "UI_BUTTON_CLICK"); + successSound = config.getString("gui.sounds.success", "ENTITY_PLAYER_LEVELUP"); + errorSound = config.getString("gui.sounds.error", "ENTITY_VILLAGER_NO"); + purchaseSound = config.getString("gui.sounds.purchase", "ENTITY_EXPERIENCE_ORB_PICKUP"); + + // Notifications + notifyOnSale = config.getBoolean("notifications.notify-on-sale", true); + notifyOnOutbid = config.getBoolean("notifications.notify-on-outbid", true); + notifyOnWin = config.getBoolean("notifications.notify-on-win", true); + notifyOnExpire = config.getBoolean("notifications.notify-on-expire", true); + + // Performance + cacheDuration = config.getInt("performance.cache-duration", 30); + auctionCheckInterval = config.getInt("performance.auction-check-interval", 5); + expiredCheckInterval = config.getInt("performance.expired-check-interval", 5); + } + + // Getters + public String getDatabaseType() { return databaseType; } + public String getSqliteFile() { return sqliteFile; } + public String getMysqlHost() { return mysqlHost; } + public int getMysqlPort() { return mysqlPort; } + public String getMysqlDatabase() { return mysqlDatabase; } + public String getMysqlUsername() { return mysqlUsername; } + public String getMysqlPassword() { return mysqlPassword; } + public int getPoolMaxSize() { return poolMaxSize; } + public int getPoolMinIdle() { return poolMinIdle; } + public long getPoolConnectionTimeout() { return poolConnectionTimeout; } + public long getPoolIdleTimeout() { return poolIdleTimeout; } + public long getPoolMaxLifetime() { return poolMaxLifetime; } + + public String getCurrencyFormat() { return currencyFormat; } + public String getCurrencySymbol() { return currencySymbol; } + public double getMarketTax() { return marketTax; } + public double getAuctionTax() { return auctionTax; } + + public int getMaxListingsPerPlayer() { return maxListingsPerPlayer; } + public int getListingCooldown() { return listingCooldown; } + public int getDefaultDurationHours() { return defaultDurationHours; } + public List getAvailableDurations() { return availableDurations; } + public double getMinPrice() { return minPrice; } + public double getMaxPrice() { return maxPrice; } + + public int getMaxAuctionsPerPlayer() { return maxAuctionsPerPlayer; } + public int getMinDurationHours() { return minDurationHours; } + public int getMaxDurationHours() { return maxDurationHours; } + public int getDefaultAuctionDurationHours() { return defaultAuctionDurationHours; } + public List getAvailableAuctionDurations() { return availableAuctionDurations; } + public double getMinStartPrice() { return minStartPrice; } + public double getMaxStartPrice() { return maxStartPrice; } + public double getMinBidIncrementPercent() { return minBidIncrementPercent; } + public double getMinBidIncrementAbsolute() { return minBidIncrementAbsolute; } + public boolean isAntiSnipeEnabled() { return antiSnipeEnabled; } + public int getAntiSnipeTriggerSeconds() { return antiSnipeTriggerSeconds; } + public int getAntiSnipeExtensionSeconds() { return antiSnipeExtensionSeconds; } + public int getAntiSnipeMaxExtensions() { return antiSnipeMaxExtensions; } + + public Set getBlacklistedMaterials() { return blacklistedMaterials; } + public List getBlacklistedKeywords() { return blacklistedKeywords; } + + public String getMainMenuTitle() { return mainMenuTitle; } + public String getBrowseMarketTitle() { return browseMarketTitle; } + public String getBrowseAuctionsTitle() { return browseAuctionsTitle; } + public String getCreateListingTitle() { return createListingTitle; } + public String getCreateAuctionTitle() { return createAuctionTitle; } + public String getMyListingsTitle() { return myListingsTitle; } + public String getMyAuctionsTitle() { return myAuctionsTitle; } + public String getClaimTitle() { return claimTitle; } + public String getEarningsTitle() { return earningsTitle; } + public String getConfirmTitle() { return confirmTitle; } + public String getNumberInputTitle() { return numberInputTitle; } + public String getAdminTitle() { return adminTitle; } + public int getItemsPerPage() { return itemsPerPage; } + public boolean isHelpButtonEnabled() { return helpButtonEnabled; } + public String getClickSound() { return clickSound; } + public String getSuccessSound() { return successSound; } + public String getErrorSound() { return errorSound; } + public String getPurchaseSound() { return purchaseSound; } + + public boolean isNotifyOnSale() { return notifyOnSale; } + public boolean isNotifyOnOutbid() { return notifyOnOutbid; } + public boolean isNotifyOnWin() { return notifyOnWin; } + public boolean isNotifyOnExpire() { return notifyOnExpire; } + + public int getCacheDuration() { return cacheDuration; } + public int getAuctionCheckInterval() { return auctionCheckInterval; } + public int getExpiredCheckInterval() { return expiredCheckInterval; } + + /** + * Checks if a material is blacklisted + */ + public boolean isMaterialBlacklisted(Material material) { + return blacklistedMaterials.contains(material); + } + + /** + * Checks if text contains blacklisted keywords + */ + public boolean containsBlacklistedKeyword(String text) { + if (text == null) return false; + String lowerText = text.toLowerCase(); + for (String keyword : blacklistedKeywords) { + if (lowerText.contains(keyword.toLowerCase())) { + return true; + } + } + return false; + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/config/MessageManager.java b/src/main/java/pt/henrique/communityMarket/config/MessageManager.java new file mode 100644 index 0000000..2efa189 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/config/MessageManager.java @@ -0,0 +1,230 @@ +package pt.henrique.communityMarket.config; + +import net.kyori.adventure.text.Component; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import pt.henrique.communityMarket.CommunityMarket; +import pt.henrique.communityMarket.util.TextUtil; + +import java.io.File; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.text.DecimalFormat; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Manages plugin messages and localization. + * Supports multiple languages loaded from lang/ folder. + */ +public class MessageManager { + + private final CommunityMarket plugin; + private FileConfiguration messagesConfig; + private final Map messageCache; + private DecimalFormat currencyFormatter; + private String currentLanguage; + + public MessageManager(CommunityMarket plugin) { + this.plugin = plugin; + this.messageCache = new HashMap<>(); + reload(); + } + + public void reload() { + messageCache.clear(); + + // Get language from config + currentLanguage = plugin.getConfig().getString("language", "en_US"); + + // Save default language files + saveDefaultLanguageFiles(); + + // Load the selected language file + File langFolder = new File(plugin.getDataFolder(), "lang"); + File langFile = new File(langFolder, currentLanguage + ".yml"); + + if (!langFile.exists()) { + plugin.getLogger().warning("Language file not found: " + currentLanguage + ".yml, falling back to en_US"); + langFile = new File(langFolder, "en_US.yml"); + } + + messagesConfig = YamlConfiguration.loadConfiguration(langFile); + + // Load defaults from jar as fallback + InputStream defaultStream = plugin.getResource("lang/en_US.yml"); + if (defaultStream != null) { + YamlConfiguration defaultConfig = YamlConfiguration.loadConfiguration( + new InputStreamReader(defaultStream, StandardCharsets.UTF_8)); + messagesConfig.setDefaults(defaultConfig); + } + + // Setup currency formatter + String format = plugin.getConfigManager().getCurrencyFormat(); + try { + currencyFormatter = new DecimalFormat(format.replace("$", "")); + } catch (Exception e) { + currencyFormatter = new DecimalFormat("#,##0.00"); + } + + plugin.getLogger().info("Loaded language: " + currentLanguage); + } + + private void saveDefaultLanguageFiles() { + File langFolder = new File(plugin.getDataFolder(), "lang"); + if (!langFolder.exists()) { + langFolder.mkdirs(); + } + + // Save default language files if they don't exist + String[] languages = {"en_US.yml", "pt_PT.yml"}; + for (String lang : languages) { + File langFile = new File(langFolder, lang); + if (!langFile.exists()) { + plugin.saveResource("lang/" + lang, false); + } + } + } + + /** + * Gets the current language code + */ + public String getCurrentLanguage() { + return currentLanguage; + } + + /** + * Gets a raw message string from the config + */ + public String getRaw(String path) { + if (messageCache.containsKey(path)) { + return messageCache.get(path); + } + + String message = messagesConfig.getString(path, "&cMissing message: " + path); + messageCache.put(path, message); + return message; + } + + /** + * Gets a message as a Component + */ + public Component get(String path) { + return TextUtil.colorize(getRaw(path)); + } + + /** + * Gets a message with placeholders replaced + */ + public Component get(String path, Map placeholders) { + String message = getRaw(path); + for (Map.Entry entry : placeholders.entrySet()) { + message = message.replace("{" + entry.getKey() + "}", entry.getValue()); + } + return TextUtil.colorize(message); + } + + /** + * Gets a message with a single placeholder replaced + */ + public Component get(String path, String placeholder, String value) { + String message = getRaw(path).replace("{" + placeholder + "}", value); + return TextUtil.colorize(message); + } + + /** + * Gets a prefixed message + */ + public Component getPrefixed(String path) { + return TextUtil.colorize(getRaw("prefix") + getRaw(path)); + } + + /** + * Gets a prefixed message with placeholders + */ + public Component getPrefixed(String path, Map placeholders) { + String message = getRaw(path); + for (Map.Entry entry : placeholders.entrySet()) { + message = message.replace("{" + entry.getKey() + "}", entry.getValue()); + } + return TextUtil.colorize(getRaw("prefix") + message); + } + + /** + * Gets a prefixed message with a single placeholder + */ + public Component getPrefixed(String path, String placeholder, String value) { + String message = getRaw(path).replace("{" + placeholder + "}", value); + return TextUtil.colorize(getRaw("prefix") + message); + } + + /** + * Gets a list of messages from the config + */ + public List getList(String path) { + return messagesConfig.getStringList(path); + } + + /** + * Gets a list of messages as Components + */ + public List getComponentList(String path) { + return getList(path).stream() + .map(TextUtil::colorize) + .toList(); + } + + /** + * Formats a currency amount + */ + public String formatCurrency(double amount) { + String symbol = plugin.getConfigManager().getCurrencySymbol(); + return symbol + currencyFormatter.format(amount); + } + + /** + * Gets a button name from config + */ + public String getButton(String buttonKey) { + return getRaw("buttons." + buttonKey); + } + + /** + * Gets button lore list from config + */ + public List getLore(String loreKey) { + return getList("lore." + loreKey); + } + + /** + * Gets lore with placeholders replaced + */ + public List getLore(String loreKey, Map placeholders) { + List lore = getList("lore." + loreKey); + return lore.stream() + .map(line -> { + String result = line; + for (Map.Entry entry : placeholders.entrySet()) { + result = result.replace("{" + entry.getKey() + "}", entry.getValue()); + } + return result; + }) + .toList(); + } + + /** + * Gets filter display name + */ + public String getFilter(String filterKey) { + return getRaw("filters." + filterKey); + } + + /** + * Gets sort display name + */ + public String getSort(String sortKey) { + return getRaw("sort." + sortKey); + } +} diff --git a/src/main/java/pt/henrique/communityMarket/db/DatabaseManager.java b/src/main/java/pt/henrique/communityMarket/db/DatabaseManager.java new file mode 100644 index 0000000..821f316 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/db/DatabaseManager.java @@ -0,0 +1,987 @@ +package pt.henrique.communityMarket.db; + +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; +import org.bukkit.inventory.ItemStack; +import pt.henrique.communityMarket.CommunityMarket; +import pt.henrique.communityMarket.model.*; +import pt.henrique.communityMarket.util.ItemSerializer; + +import java.io.File; +import java.io.IOException; +import java.sql.*; +import java.time.Instant; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.logging.Level; + +/** + * Manages database connections and operations. + * Supports SQLite (default) and MySQL. + * All operations are asynchronous to prevent blocking the main thread. + */ +public class DatabaseManager { + + private final CommunityMarket plugin; + private HikariDataSource dataSource; + private boolean isMySQL; + + // Schema version for migrations + private static final int SCHEMA_VERSION = 1; + + public DatabaseManager(CommunityMarket plugin) { + this.plugin = plugin; + } + + /** + * Initializes the database connection pool and creates tables. + * + * @return true if successful + */ + public boolean initialize() { + try { + var config = plugin.getConfigManager(); + isMySQL = "mysql".equalsIgnoreCase(config.getDatabaseType()); + + HikariConfig hikariConfig = new HikariConfig(); + + if (isMySQL) { + // MySQL configuration + hikariConfig.setJdbcUrl("jdbc:mysql://" + config.getMysqlHost() + ":" + + config.getMysqlPort() + "/" + config.getMysqlDatabase() + + "?useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=utf8"); + hikariConfig.setUsername(config.getMysqlUsername()); + hikariConfig.setPassword(config.getMysqlPassword()); + hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver"); + } else { + // SQLite configuration + File dataFolder = plugin.getDataFolder(); + if (!dataFolder.exists()) { + dataFolder.mkdirs(); + } + File dbFile = new File(dataFolder, config.getSqliteFile()); + hikariConfig.setJdbcUrl("jdbc:sqlite:" + dbFile.getAbsolutePath()); + hikariConfig.setDriverClassName("org.sqlite.JDBC"); + } + + // Connection pool settings + hikariConfig.setMaximumPoolSize(config.getPoolMaxSize()); + hikariConfig.setMinimumIdle(config.getPoolMinIdle()); + hikariConfig.setConnectionTimeout(config.getPoolConnectionTimeout()); + hikariConfig.setIdleTimeout(config.getPoolIdleTimeout()); + hikariConfig.setMaxLifetime(config.getPoolMaxLifetime()); + hikariConfig.setPoolName("CommunityMarket-Pool"); + + dataSource = new HikariDataSource(hikariConfig); + + // Create tables + createTables(); + + plugin.getLogger().info("Database connection established (" + + (isMySQL ? "MySQL" : "SQLite") + ")"); + return true; + + } catch (Exception e) { + plugin.getLogger().log(Level.SEVERE, "Failed to initialize database", e); + return false; + } + } + + /** + * Shuts down the database connection pool. + */ + public void shutdown() { + if (dataSource != null && !dataSource.isClosed()) { + dataSource.close(); + plugin.getLogger().info("Database connection closed."); + } + } + + /** + * Gets a connection from the pool. + */ + private Connection getConnection() throws SQLException { + return dataSource.getConnection(); + } + + /** + * Creates all database tables. + */ + private void createTables() throws SQLException { + try (Connection conn = getConnection(); Statement stmt = conn.createStatement()) { + + // Listings table + stmt.execute(""" + CREATE TABLE IF NOT EXISTS listings ( + id INTEGER PRIMARY KEY %s, + seller_uuid VARCHAR(36) NOT NULL, + seller_name VARCHAR(16) NOT NULL, + item_data TEXT NOT NULL, + amount INTEGER NOT NULL, + price DOUBLE NOT NULL, + status VARCHAR(20) NOT NULL DEFAULT 'ACTIVE', + created_at BIGINT NOT NULL, + expires_at BIGINT, + buyer_uuid VARCHAR(36), + buyer_name VARCHAR(16), + sold_at BIGINT + ) + """.formatted(isMySQL ? "AUTO_INCREMENT" : "AUTOINCREMENT")); + + // Auctions table + stmt.execute(""" + CREATE TABLE IF NOT EXISTS auctions ( + id INTEGER PRIMARY KEY %s, + seller_uuid VARCHAR(36) NOT NULL, + seller_name VARCHAR(16) NOT NULL, + item_data TEXT NOT NULL, + start_price DOUBLE NOT NULL, + current_bid DOUBLE NOT NULL DEFAULT 0, + highest_bidder_uuid VARCHAR(36), + highest_bidder_name VARCHAR(16), + bid_count INTEGER NOT NULL DEFAULT 0, + buyout_price DOUBLE, + status VARCHAR(20) NOT NULL DEFAULT 'ACTIVE', + created_at BIGINT NOT NULL, + ends_at BIGINT NOT NULL, + extension_count INTEGER NOT NULL DEFAULT 0 + ) + """.formatted(isMySQL ? "AUTO_INCREMENT" : "AUTOINCREMENT")); + + // Bids table (bid history) + stmt.execute(""" + CREATE TABLE IF NOT EXISTS bids ( + id INTEGER PRIMARY KEY %s, + auction_id INTEGER NOT NULL, + bidder_uuid VARCHAR(36) NOT NULL, + bidder_name VARCHAR(16) NOT NULL, + amount DOUBLE NOT NULL, + created_at BIGINT NOT NULL, + FOREIGN KEY (auction_id) REFERENCES auctions(id) + ) + """.formatted(isMySQL ? "AUTO_INCREMENT" : "AUTOINCREMENT")); + + // Claim storage table + stmt.execute(""" + CREATE TABLE IF NOT EXISTS claim_storage ( + id INTEGER PRIMARY KEY %s, + player_uuid VARCHAR(36) NOT NULL, + item_data TEXT NOT NULL, + reason VARCHAR(50) NOT NULL, + source_info VARCHAR(100), + created_at BIGINT NOT NULL + ) + """.formatted(isMySQL ? "AUTO_INCREMENT" : "AUTOINCREMENT")); + + // Pending earnings table + stmt.execute(""" + CREATE TABLE IF NOT EXISTS pending_earnings ( + id INTEGER PRIMARY KEY %s, + player_uuid VARCHAR(36) NOT NULL, + amount DOUBLE NOT NULL, + source VARCHAR(100), + created_at BIGINT NOT NULL, + withdrawn BOOLEAN NOT NULL DEFAULT FALSE + ) + """.formatted(isMySQL ? "AUTO_INCREMENT" : "AUTOINCREMENT")); + + // Player data table (for cooldowns, etc.) + stmt.execute(""" + CREATE TABLE IF NOT EXISTS player_data ( + player_uuid VARCHAR(36) PRIMARY KEY, + last_listing_time BIGINT, + preferred_language VARCHAR(10) + ) + """); + + // Create indexes for performance + try { + stmt.execute("CREATE INDEX IF NOT EXISTS idx_listings_seller ON listings(seller_uuid)"); + stmt.execute("CREATE INDEX IF NOT EXISTS idx_listings_status ON listings(status)"); + stmt.execute("CREATE INDEX IF NOT EXISTS idx_auctions_seller ON auctions(seller_uuid)"); + stmt.execute("CREATE INDEX IF NOT EXISTS idx_auctions_status ON auctions(status)"); + stmt.execute("CREATE INDEX IF NOT EXISTS idx_claim_player ON claim_storage(player_uuid)"); + stmt.execute("CREATE INDEX IF NOT EXISTS idx_earnings_player ON pending_earnings(player_uuid)"); + } catch (SQLException e) { + // Indexes might already exist, ignore + } + } + } + + // ==================== LISTING OPERATIONS ==================== + + /** + * Creates a new listing and returns its ID. + */ + public CompletableFuture createListing(Listing listing) { + return CompletableFuture.supplyAsync(() -> { + String sql = """ + INSERT INTO listings (seller_uuid, seller_name, item_data, amount, price, status, created_at, expires_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?) + """; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) { + + stmt.setString(1, listing.getSellerUuid().toString()); + stmt.setString(2, listing.getSellerName()); + stmt.setString(3, ItemSerializer.serialize(listing.getItem())); + stmt.setInt(4, listing.getAmount()); + stmt.setDouble(5, listing.getPrice()); + stmt.setString(6, listing.getStatus().name()); + stmt.setLong(7, listing.getCreatedAt().toEpochMilli()); + stmt.setLong(8, listing.getExpiresAt() != null ? listing.getExpiresAt().toEpochMilli() : 0); + + stmt.executeUpdate(); + + try (ResultSet rs = stmt.getGeneratedKeys()) { + if (rs.next()) { + return rs.getInt(1); + } + } + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to create listing", e); + } + return -1; + }); + } + + /** + * Gets all active listings. + */ + public CompletableFuture> getActiveListings() { + return CompletableFuture.supplyAsync(() -> { + List listings = new ArrayList<>(); + String sql = "SELECT * FROM listings WHERE status = 'ACTIVE' ORDER BY created_at DESC"; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql); + ResultSet rs = stmt.executeQuery()) { + + while (rs.next()) { + Listing listing = mapListing(rs); + if (listing != null) { + listings.add(listing); + } + } + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to get active listings", e); + } + return listings; + }); + } + + /** + * Gets a listing by ID. + */ + public CompletableFuture> getListing(int id) { + return CompletableFuture.supplyAsync(() -> { + String sql = "SELECT * FROM listings WHERE id = ?"; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql)) { + + stmt.setInt(1, id); + + try (ResultSet rs = stmt.executeQuery()) { + if (rs.next()) { + return Optional.ofNullable(mapListing(rs)); + } + } + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to get listing", e); + } + return Optional.empty(); + }); + } + + /** + * Gets all listings for a player. + */ + public CompletableFuture> getPlayerListings(UUID playerUuid) { + return CompletableFuture.supplyAsync(() -> { + List listings = new ArrayList<>(); + String sql = "SELECT * FROM listings WHERE seller_uuid = ? AND status = 'ACTIVE' ORDER BY created_at DESC"; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql)) { + + stmt.setString(1, playerUuid.toString()); + + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + Listing listing = mapListing(rs); + if (listing != null) { + listings.add(listing); + } + } + } + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to get player listings", e); + } + return listings; + }); + } + + /** + * Counts active listings for a player. + */ + public CompletableFuture countPlayerListings(UUID playerUuid) { + return CompletableFuture.supplyAsync(() -> { + String sql = "SELECT COUNT(*) FROM listings WHERE seller_uuid = ? AND status = 'ACTIVE'"; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql)) { + + stmt.setString(1, playerUuid.toString()); + + try (ResultSet rs = stmt.executeQuery()) { + if (rs.next()) { + return rs.getInt(1); + } + } + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to count player listings", e); + } + return 0; + }); + } + + /** + * Atomically purchases a listing. + * Returns true if successful (listing was still available). + */ + public CompletableFuture purchaseListing(int listingId, UUID buyerUuid, String buyerName) { + return CompletableFuture.supplyAsync(() -> { + String sql = "UPDATE listings SET status = 'SOLD', buyer_uuid = ?, buyer_name = ?, sold_at = ? " + + "WHERE id = ? AND status = 'ACTIVE'"; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql)) { + + stmt.setString(1, buyerUuid.toString()); + stmt.setString(2, buyerName); + stmt.setLong(3, Instant.now().toEpochMilli()); + stmt.setInt(4, listingId); + + int updated = stmt.executeUpdate(); + return updated > 0; + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to purchase listing", e); + } + return false; + }); + } + + /** + * Updates a listing's status. + */ + public CompletableFuture updateListingStatus(int listingId, Listing.ListingStatus status) { + return CompletableFuture.supplyAsync(() -> { + String sql = "UPDATE listings SET status = ? WHERE id = ?"; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql)) { + + stmt.setString(1, status.name()); + stmt.setInt(2, listingId); + + return stmt.executeUpdate() > 0; + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to update listing status", e); + } + return false; + }); + } + + /** + * Gets expired active listings. + */ + public CompletableFuture> getExpiredListings() { + return CompletableFuture.supplyAsync(() -> { + List listings = new ArrayList<>(); + String sql = "SELECT * FROM listings WHERE status = 'ACTIVE' AND expires_at > 0 AND expires_at < ?"; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql)) { + + stmt.setLong(1, Instant.now().toEpochMilli()); + + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + Listing listing = mapListing(rs); + if (listing != null) { + listings.add(listing); + } + } + } + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to get expired listings", e); + } + return listings; + }); + } + + private Listing mapListing(ResultSet rs) throws SQLException { + try { + Listing listing = new Listing(); + listing.setId(rs.getInt("id")); + listing.setSellerUuid(UUID.fromString(rs.getString("seller_uuid"))); + listing.setSellerName(rs.getString("seller_name")); + listing.setItem(ItemSerializer.deserialize(rs.getString("item_data"))); + listing.setAmount(rs.getInt("amount")); + listing.setPrice(rs.getDouble("price")); + listing.setStatus(Listing.ListingStatus.valueOf(rs.getString("status"))); + listing.setCreatedAt(Instant.ofEpochMilli(rs.getLong("created_at"))); + long expiresAt = rs.getLong("expires_at"); + if (expiresAt > 0) { + listing.setExpiresAt(Instant.ofEpochMilli(expiresAt)); + } + return listing; + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to map listing", e); + return null; + } + } + + // ==================== AUCTION OPERATIONS ==================== + + /** + * Creates a new auction and returns its ID. + */ + public CompletableFuture createAuction(Auction auction) { + return CompletableFuture.supplyAsync(() -> { + String sql = """ + INSERT INTO auctions (seller_uuid, seller_name, item_data, start_price, current_bid, + buyout_price, status, created_at, ends_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) + """; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) { + + stmt.setString(1, auction.getSellerUuid().toString()); + stmt.setString(2, auction.getSellerName()); + stmt.setString(3, ItemSerializer.serialize(auction.getItem())); + stmt.setDouble(4, auction.getStartPrice()); + stmt.setDouble(5, 0); + if (auction.getBuyoutPrice() != null) { + stmt.setDouble(6, auction.getBuyoutPrice()); + } else { + stmt.setNull(6, Types.DOUBLE); + } + stmt.setString(7, auction.getStatus().name()); + stmt.setLong(8, auction.getCreatedAt().toEpochMilli()); + stmt.setLong(9, auction.getEndsAt().toEpochMilli()); + + stmt.executeUpdate(); + + try (ResultSet rs = stmt.getGeneratedKeys()) { + if (rs.next()) { + return rs.getInt(1); + } + } + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to create auction", e); + } + return -1; + }); + } + + /** + * Gets all active auctions. + */ + public CompletableFuture> getActiveAuctions() { + return CompletableFuture.supplyAsync(() -> { + List auctions = new ArrayList<>(); + String sql = "SELECT * FROM auctions WHERE status = 'ACTIVE' ORDER BY ends_at ASC"; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql); + ResultSet rs = stmt.executeQuery()) { + + while (rs.next()) { + Auction auction = mapAuction(rs); + if (auction != null) { + auctions.add(auction); + } + } + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to get active auctions", e); + } + return auctions; + }); + } + + /** + * Gets an auction by ID. + */ + public CompletableFuture> getAuction(int id) { + return CompletableFuture.supplyAsync(() -> { + String sql = "SELECT * FROM auctions WHERE id = ?"; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql)) { + + stmt.setInt(1, id); + + try (ResultSet rs = stmt.executeQuery()) { + if (rs.next()) { + return Optional.ofNullable(mapAuction(rs)); + } + } + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to get auction", e); + } + return Optional.empty(); + }); + } + + /** + * Gets all auctions for a player. + */ + public CompletableFuture> getPlayerAuctions(UUID playerUuid) { + return CompletableFuture.supplyAsync(() -> { + List auctions = new ArrayList<>(); + String sql = "SELECT * FROM auctions WHERE seller_uuid = ? AND status = 'ACTIVE' ORDER BY ends_at ASC"; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql)) { + + stmt.setString(1, playerUuid.toString()); + + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + Auction auction = mapAuction(rs); + if (auction != null) { + auctions.add(auction); + } + } + } + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to get player auctions", e); + } + return auctions; + }); + } + + /** + * Counts active auctions for a player. + */ + public CompletableFuture countPlayerAuctions(UUID playerUuid) { + return CompletableFuture.supplyAsync(() -> { + String sql = "SELECT COUNT(*) FROM auctions WHERE seller_uuid = ? AND status = 'ACTIVE'"; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql)) { + + stmt.setString(1, playerUuid.toString()); + + try (ResultSet rs = stmt.executeQuery()) { + if (rs.next()) { + return rs.getInt(1); + } + } + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to count player auctions", e); + } + return 0; + }); + } + + /** + * Places a bid on an auction. + */ + public CompletableFuture placeBid(int auctionId, UUID bidderUuid, String bidderName, double amount) { + return CompletableFuture.supplyAsync(() -> { + String updateSql = """ + UPDATE auctions SET current_bid = ?, highest_bidder_uuid = ?, highest_bidder_name = ?, + bid_count = bid_count + 1 + WHERE id = ? AND status = 'ACTIVE' AND current_bid < ? + """; + + String insertBidSql = """ + INSERT INTO bids (auction_id, bidder_uuid, bidder_name, amount, created_at) + VALUES (?, ?, ?, ?, ?) + """; + + try (Connection conn = getConnection()) { + conn.setAutoCommit(false); + + try (PreparedStatement updateStmt = conn.prepareStatement(updateSql); + PreparedStatement insertStmt = conn.prepareStatement(insertBidSql)) { + + updateStmt.setDouble(1, amount); + updateStmt.setString(2, bidderUuid.toString()); + updateStmt.setString(3, bidderName); + updateStmt.setInt(4, auctionId); + updateStmt.setDouble(5, amount); + + int updated = updateStmt.executeUpdate(); + + if (updated > 0) { + // Insert bid history + insertStmt.setInt(1, auctionId); + insertStmt.setString(2, bidderUuid.toString()); + insertStmt.setString(3, bidderName); + insertStmt.setDouble(4, amount); + insertStmt.setLong(5, Instant.now().toEpochMilli()); + insertStmt.executeUpdate(); + + conn.commit(); + return true; + } else { + conn.rollback(); + return false; + } + } catch (Exception e) { + conn.rollback(); + throw e; + } + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to place bid", e); + } + return false; + }); + } + + /** + * Updates an auction's status. + */ + public CompletableFuture updateAuctionStatus(int auctionId, Auction.AuctionStatus status) { + return CompletableFuture.supplyAsync(() -> { + String sql = "UPDATE auctions SET status = ? WHERE id = ?"; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql)) { + + stmt.setString(1, status.name()); + stmt.setInt(2, auctionId); + + return stmt.executeUpdate() > 0; + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to update auction status", e); + } + return false; + }); + } + + /** + * Gets auctions that have ended but are still active. + */ + public CompletableFuture> getEndedAuctions() { + return CompletableFuture.supplyAsync(() -> { + List auctions = new ArrayList<>(); + String sql = "SELECT * FROM auctions WHERE status = 'ACTIVE' AND ends_at < ?"; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql)) { + + stmt.setLong(1, Instant.now().toEpochMilli()); + + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + Auction auction = mapAuction(rs); + if (auction != null) { + auctions.add(auction); + } + } + } + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to get ended auctions", e); + } + return auctions; + }); + } + + private Auction mapAuction(ResultSet rs) throws SQLException { + try { + Auction auction = new Auction(); + auction.setId(rs.getInt("id")); + auction.setSellerUuid(UUID.fromString(rs.getString("seller_uuid"))); + auction.setSellerName(rs.getString("seller_name")); + auction.setItem(ItemSerializer.deserialize(rs.getString("item_data"))); + auction.setStartPrice(rs.getDouble("start_price")); + auction.setCurrentBid(rs.getDouble("current_bid")); + + String highestBidder = rs.getString("highest_bidder_uuid"); + if (highestBidder != null) { + auction.setHighestBidderUuid(UUID.fromString(highestBidder)); + auction.setHighestBidderName(rs.getString("highest_bidder_name")); + } + + auction.setBidCount(rs.getInt("bid_count")); + + double buyout = rs.getDouble("buyout_price"); + if (!rs.wasNull()) { + auction.setBuyoutPrice(buyout); + } + + auction.setStatus(Auction.AuctionStatus.valueOf(rs.getString("status"))); + auction.setCreatedAt(Instant.ofEpochMilli(rs.getLong("created_at"))); + auction.setEndsAt(Instant.ofEpochMilli(rs.getLong("ends_at"))); + auction.setExtensionCount(rs.getInt("extension_count")); + + return auction; + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to map auction", e); + return null; + } + } + + // ==================== CLAIM STORAGE OPERATIONS ==================== + + /** + * Adds an item to claim storage. + */ + public CompletableFuture addClaimItem(ClaimItem claimItem) { + return CompletableFuture.supplyAsync(() -> { + String sql = """ + INSERT INTO claim_storage (player_uuid, item_data, reason, source_info, created_at) + VALUES (?, ?, ?, ?, ?) + """; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) { + + stmt.setString(1, claimItem.getPlayerUuid().toString()); + stmt.setString(2, ItemSerializer.serialize(claimItem.getItem())); + stmt.setString(3, claimItem.getReason().name()); + stmt.setString(4, claimItem.getSourceInfo()); + stmt.setLong(5, claimItem.getCreatedAt().toEpochMilli()); + + stmt.executeUpdate(); + + try (ResultSet rs = stmt.getGeneratedKeys()) { + if (rs.next()) { + return rs.getInt(1); + } + } + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to add claim item", e); + } + return -1; + }); + } + + /** + * Gets all claim items for a player. + */ + public CompletableFuture> getPlayerClaimItems(UUID playerUuid) { + return CompletableFuture.supplyAsync(() -> { + List items = new ArrayList<>(); + String sql = "SELECT * FROM claim_storage WHERE player_uuid = ? ORDER BY created_at DESC"; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql)) { + + stmt.setString(1, playerUuid.toString()); + + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + ClaimItem item = mapClaimItem(rs); + if (item != null) { + items.add(item); + } + } + } + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to get claim items", e); + } + return items; + }); + } + + /** + * Counts claim items for a player. + */ + public CompletableFuture countPlayerClaimItems(UUID playerUuid) { + return CompletableFuture.supplyAsync(() -> { + String sql = "SELECT COUNT(*) FROM claim_storage WHERE player_uuid = ?"; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql)) { + + stmt.setString(1, playerUuid.toString()); + + try (ResultSet rs = stmt.executeQuery()) { + if (rs.next()) { + return rs.getInt(1); + } + } + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to count claim items", e); + } + return 0; + }); + } + + /** + * Removes a claim item. + */ + public CompletableFuture removeClaimItem(int id) { + return CompletableFuture.supplyAsync(() -> { + String sql = "DELETE FROM claim_storage WHERE id = ?"; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql)) { + + stmt.setInt(1, id); + return stmt.executeUpdate() > 0; + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to remove claim item", e); + } + return false; + }); + } + + private ClaimItem mapClaimItem(ResultSet rs) throws SQLException { + try { + ClaimItem item = new ClaimItem(); + item.setId(rs.getInt("id")); + item.setPlayerUuid(UUID.fromString(rs.getString("player_uuid"))); + item.setItem(ItemSerializer.deserialize(rs.getString("item_data"))); + item.setReason(ClaimItem.ClaimReason.valueOf(rs.getString("reason"))); + item.setSourceInfo(rs.getString("source_info")); + item.setCreatedAt(Instant.ofEpochMilli(rs.getLong("created_at"))); + return item; + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to map claim item", e); + return null; + } + } + + // ==================== EARNINGS OPERATIONS ==================== + + /** + * Adds pending earnings. + */ + public CompletableFuture addPendingEarnings(PendingEarnings earnings) { + return CompletableFuture.supplyAsync(() -> { + String sql = """ + INSERT INTO pending_earnings (player_uuid, amount, source, created_at, withdrawn) + VALUES (?, ?, ?, ?, ?) + """; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) { + + stmt.setString(1, earnings.getPlayerUuid().toString()); + stmt.setDouble(2, earnings.getAmount()); + stmt.setString(3, earnings.getSource()); + stmt.setLong(4, earnings.getCreatedAt().toEpochMilli()); + stmt.setBoolean(5, false); + + stmt.executeUpdate(); + + try (ResultSet rs = stmt.getGeneratedKeys()) { + if (rs.next()) { + return rs.getInt(1); + } + } + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to add pending earnings", e); + } + return -1; + }); + } + + /** + * Gets total pending earnings for a player. + */ + public CompletableFuture getPlayerPendingEarnings(UUID playerUuid) { + return CompletableFuture.supplyAsync(() -> { + String sql = "SELECT SUM(amount) FROM pending_earnings WHERE player_uuid = ? AND withdrawn = FALSE"; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql)) { + + stmt.setString(1, playerUuid.toString()); + + try (ResultSet rs = stmt.executeQuery()) { + if (rs.next()) { + return rs.getDouble(1); + } + } + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to get pending earnings", e); + } + return 0.0; + }); + } + + /** + * Marks all earnings as withdrawn for a player. + */ + public CompletableFuture withdrawAllEarnings(UUID playerUuid) { + return CompletableFuture.supplyAsync(() -> { + String sql = "UPDATE pending_earnings SET withdrawn = TRUE WHERE player_uuid = ? AND withdrawn = FALSE"; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql)) { + + stmt.setString(1, playerUuid.toString()); + return stmt.executeUpdate() > 0; + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to withdraw earnings", e); + } + return false; + }); + } + + // ==================== PLAYER DATA OPERATIONS ==================== + + /** + * Gets the last listing time for a player. + */ + public CompletableFuture> getLastListingTime(UUID playerUuid) { + return CompletableFuture.supplyAsync(() -> { + String sql = "SELECT last_listing_time FROM player_data WHERE player_uuid = ?"; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql)) { + + stmt.setString(1, playerUuid.toString()); + + try (ResultSet rs = stmt.executeQuery()) { + if (rs.next()) { + long time = rs.getLong("last_listing_time"); + if (!rs.wasNull() && time > 0) { + return Optional.of(Instant.ofEpochMilli(time)); + } + } + } + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to get last listing time", e); + } + return Optional.empty(); + }); + } + + /** + * Updates the last listing time for a player. + */ + public void updateLastListingTime(UUID playerUuid) { + CompletableFuture.runAsync(() -> { + String sql = isMySQL + ? "INSERT INTO player_data (player_uuid, last_listing_time) VALUES (?, ?) ON DUPLICATE KEY UPDATE last_listing_time = ?" + : "INSERT OR REPLACE INTO player_data (player_uuid, last_listing_time) VALUES (?, ?)"; + + try (Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement(sql)) { + + long now = Instant.now().toEpochMilli(); + stmt.setString(1, playerUuid.toString()); + stmt.setLong(2, now); + if (isMySQL) { + stmt.setLong(3, now); + } + + stmt.executeUpdate(); + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to update last listing time", e); + } + }); + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/economy/EconomyManager.java b/src/main/java/pt/henrique/communityMarket/economy/EconomyManager.java new file mode 100644 index 0000000..7eac470 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/economy/EconomyManager.java @@ -0,0 +1,254 @@ +package pt.henrique.communityMarket.economy; + +import net.milkbowl.vault.economy.Economy; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.plugin.RegisteredServiceProvider; +import pt.henrique.communityMarket.CommunityMarket; + +import java.util.UUID; +import java.util.logging.Level; + +/** + * Manages economy operations with support for Vault and EssentialsX fallback. + *

+ * Priority: Vault > EssentialsX + * If neither is available, the plugin will disable itself. + */ +public class EconomyManager { + + private final CommunityMarket plugin; + private Economy vaultEconomy; + private com.earth2me.essentials.Essentials essentials; + private EconomyProvider provider = EconomyProvider.NONE; + + public enum EconomyProvider { + VAULT, + ESSENTIALS, + NONE + } + + public EconomyManager(CommunityMarket plugin) { + this.plugin = plugin; + } + + /** + * Attempts to set up an economy provider. + * Tries Vault first, then EssentialsX. + * + * @return true if an economy provider was found + */ + public boolean setupEconomy() { + // Try Vault first + if (setupVault()) { + provider = EconomyProvider.VAULT; + plugin.getLogger().info("Using Vault as economy provider."); + return true; + } + + // Fallback to EssentialsX + if (setupEssentials()) { + provider = EconomyProvider.ESSENTIALS; + plugin.getLogger().info("Using EssentialsX as economy provider."); + return true; + } + + plugin.getLogger().severe("No economy provider found!"); + return false; + } + + /** + * Attempts to hook into Vault economy + */ + private boolean setupVault() { + if (Bukkit.getPluginManager().getPlugin("Vault") == null) { + return false; + } + + try { + RegisteredServiceProvider rsp = Bukkit.getServicesManager().getRegistration(Economy.class); + if (rsp == null) { + plugin.getLogger().warning("Vault found but no economy provider registered."); + return false; + } + + vaultEconomy = rsp.getProvider(); + return vaultEconomy != null; + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to hook into Vault", e); + return false; + } + } + + /** + * Attempts to hook into EssentialsX economy + */ + private boolean setupEssentials() { + if (Bukkit.getPluginManager().getPlugin("Essentials") == null) { + return false; + } + + try { + essentials = (com.earth2me.essentials.Essentials) Bukkit.getPluginManager().getPlugin("Essentials"); + return essentials != null && essentials.isEnabled(); + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to hook into EssentialsX", e); + return false; + } + } + + /** + * Gets the name of the active economy provider + */ + public String getProviderName() { + return switch (provider) { + case VAULT -> "Vault (" + (vaultEconomy != null ? vaultEconomy.getName() : "Unknown") + ")"; + case ESSENTIALS -> "EssentialsX"; + case NONE -> "None"; + }; + } + + /** + * Gets a player's current balance + * + * @param playerUuid The player's UUID + * @return The player's balance + */ + public double getBalance(UUID playerUuid) { + OfflinePlayer player = Bukkit.getOfflinePlayer(playerUuid); + + return switch (provider) { + case VAULT -> vaultEconomy.getBalance(player); + case ESSENTIALS -> { + try { + yield essentials.getUser(playerUuid).getMoney().doubleValue(); + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to get balance from EssentialsX", e); + yield 0.0; + } + } + case NONE -> 0.0; + }; + } + + /** + * Checks if a player has at least the specified amount + * + * @param playerUuid The player's UUID + * @param amount The amount to check + * @return true if the player has enough money + */ + public boolean has(UUID playerUuid, double amount) { + return getBalance(playerUuid) >= amount; + } + + /** + * Withdraws money from a player's account + * + * @param playerUuid The player's UUID + * @param amount The amount to withdraw + * @return true if successful + */ + public boolean withdraw(UUID playerUuid, double amount) { + if (amount <= 0) return true; + + OfflinePlayer player = Bukkit.getOfflinePlayer(playerUuid); + + return switch (provider) { + case VAULT -> { + if (!vaultEconomy.has(player, amount)) { + yield false; + } + yield vaultEconomy.withdrawPlayer(player, amount).transactionSuccess(); + } + case ESSENTIALS -> { + try { + var user = essentials.getUser(playerUuid); + if (user.getMoney().doubleValue() < amount) { + yield false; + } + user.setMoney(user.getMoney().subtract(java.math.BigDecimal.valueOf(amount))); + yield true; + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to withdraw from EssentialsX", e); + yield false; + } + } + case NONE -> false; + }; + } + + /** + * Deposits money into a player's account + * + * @param playerUuid The player's UUID + * @param amount The amount to deposit + * @return true if successful + */ + public boolean deposit(UUID playerUuid, double amount) { + if (amount <= 0) return true; + + OfflinePlayer player = Bukkit.getOfflinePlayer(playerUuid); + + return switch (provider) { + case VAULT -> vaultEconomy.depositPlayer(player, amount).transactionSuccess(); + case ESSENTIALS -> { + try { + var user = essentials.getUser(playerUuid); + user.setMoney(user.getMoney().add(java.math.BigDecimal.valueOf(amount))); + yield true; + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to deposit to EssentialsX", e); + yield false; + } + } + case NONE -> false; + }; + } + + /** + * Transfers money between two players + * + * @param fromUuid The UUID of the payer + * @param toUuid The UUID of the receiver + * @param amount The amount to transfer + * @return true if successful + */ + public boolean transfer(UUID fromUuid, UUID toUuid, double amount) { + if (amount <= 0) return true; + + // Withdraw first + if (!withdraw(fromUuid, amount)) { + return false; + } + + // Then deposit - if this fails, refund the withdrawal + if (!deposit(toUuid, amount)) { + deposit(fromUuid, amount); // Attempt refund + return false; + } + + return true; + } + + /** + * Formats an amount according to the economy's formatting + * + * @param amount The amount to format + * @return Formatted currency string + */ + public String format(double amount) { + if (provider == EconomyProvider.VAULT && vaultEconomy != null) { + return vaultEconomy.format(amount); + } + return plugin.getMessageManager().formatCurrency(amount); + } + + /** + * Gets the economy provider type + */ + public EconomyProvider getProvider() { + return provider; + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/gui/AdminGui.java b/src/main/java/pt/henrique/communityMarket/gui/AdminGui.java new file mode 100644 index 0000000..e41f34e --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/gui/AdminGui.java @@ -0,0 +1,347 @@ +package pt.henrique.communityMarket.gui; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import pt.henrique.communityMarket.CommunityMarket; +import pt.henrique.communityMarket.util.ItemBuilder; +import pt.henrique.communityMarket.util.TextUtil; + +/** + * Admin panel GUI for moderating the marketplace. + * Provides access to view all listings/auctions, remove items, and reload config. + */ +public class AdminGui implements MarketGui { + + private final CommunityMarket plugin; + private final GuiManager guiManager; + private Inventory inventory; + + private static final int VIEW_LISTINGS_SLOT = 20; + private static final int VIEW_AUCTIONS_SLOT = 24; + private static final int RELOAD_SLOT = 40; + private static final int BACK_SLOT = 49; + + public AdminGui(CommunityMarket plugin, GuiManager guiManager) { + this.plugin = plugin; + this.guiManager = guiManager; + } + + public void open(Player player) { + if (!player.hasPermission("communitymarket.admin")) { + player.sendMessage(plugin.getMessageManager().getPrefixed("messages.no-permission")); + return; + } + + var msgManager = plugin.getMessageManager(); + String title = TextUtil.colorizeToString(msgManager.getRaw("gui-titles.admin-panel")); + inventory = Bukkit.createInventory(this, 54, title); + + buildGui(); + player.openInventory(inventory); + guiManager.registerGui(player.getUniqueId(), this); + } + + private void buildGui() { + var msgManager = plugin.getMessageManager(); + + // Fill with glass + ItemStack filler = new ItemBuilder(Material.RED_STAINED_GLASS_PANE).name(" ").build(); + for (int i = 0; i < 54; i++) { + inventory.setItem(i, filler); + } + + // Admin panel header + inventory.setItem(4, new ItemBuilder(Material.COMMAND_BLOCK) + .name("&c&lAdmin Panel") + .lore( + "&7Manage the marketplace.", + "&7Remove listings, cancel auctions,", + "&7and reload configuration." + ) + .build()); + + // View all listings + inventory.setItem(VIEW_LISTINGS_SLOT, new ItemBuilder(Material.CHEST) + .name(msgManager.getButton("admin-view-listings")) + .lore( + "&7View all active listings", + "&7from all players.", + "", + "&cClick on items to remove them." + ) + .build()); + + // View all auctions + inventory.setItem(VIEW_AUCTIONS_SLOT, new ItemBuilder(Material.GOLD_BLOCK) + .name(msgManager.getButton("admin-view-auctions")) + .lore( + "&7View all active auctions", + "&7from all players.", + "", + "&cClick on items to force-end them." + ) + .build()); + + // Reload config + inventory.setItem(RELOAD_SLOT, new ItemBuilder(Material.REPEATING_COMMAND_BLOCK) + .name(msgManager.getButton("admin-reload")) + .lore( + "&7Reload plugin configuration", + "&7and language files." + ) + .build()); + + // Back button + inventory.setItem(BACK_SLOT, new ItemBuilder(Material.BARRIER) + .name(msgManager.getButton("back")) + .build()); + } + + @Override + public void handleClick(InventoryClickEvent event) { + event.setCancelled(true); + + Player player = (Player) event.getWhoClicked(); + int slot = event.getRawSlot(); + + switch (slot) { + case VIEW_LISTINGS_SLOT -> openAdminListings(player); + case VIEW_AUCTIONS_SLOT -> openAdminAuctions(player); + case RELOAD_SLOT -> { + plugin.reload(); + player.sendMessage(plugin.getMessageManager().getPrefixed("messages.admin-reload")); + playSound(player, plugin.getConfigManager().getSuccessSound()); + } + case BACK_SLOT -> guiManager.openMainMenu(player); + } + } + + private void openAdminListings(Player player) { + // Opens browse market but with admin remove capability + new AdminListingsGui(plugin, guiManager).open(player, 0); + } + + private void openAdminAuctions(Player player) { + new AdminAuctionsGui(plugin, guiManager).open(player, 0); + } + + private void playSound(Player player, String soundName) { + pt.henrique.communityMarket.util.SoundUtil.playSound(player, soundName); + } + + @Override + public GuiType getType() { + return GuiType.ADMIN; + } + + @Override + public Inventory getInventory() { + return inventory; + } + + // ==================== Inner Admin GUIs ==================== + + /** + * Admin view of all listings with remove capability + */ + private static class AdminListingsGui implements MarketGui { + private final CommunityMarket plugin; + private final GuiManager guiManager; + private Inventory inventory; + private Player player; + private int page; + private java.util.List listings; + + public AdminListingsGui(CommunityMarket plugin, GuiManager guiManager) { + this.plugin = plugin; + this.guiManager = guiManager; + } + + public void open(Player player, int page) { + this.player = player; + this.page = page; + + plugin.getListingService().getActiveListings().thenAccept(loaded -> { + this.listings = loaded; + Bukkit.getScheduler().runTask(plugin, () -> { + buildGui(); + player.openInventory(inventory); + guiManager.registerGui(player.getUniqueId(), this); + }); + }); + } + + private void buildGui() { + var msgManager = plugin.getMessageManager(); + String title = TextUtil.colorizeToString(msgManager.getRaw("gui-titles.admin-listings")); + inventory = Bukkit.createInventory(this, 54, title); + + ItemStack filler = new ItemBuilder(Material.RED_STAINED_GLASS_PANE).name(" ").build(); + for (int i = 45; i < 54; i++) { + inventory.setItem(i, filler); + } + + int start = page * 45; + int end = Math.min(start + 45, listings.size()); + for (int i = start; i < end; i++) { + var listing = listings.get(i); + ItemStack display = listing.getItem().clone(); + inventory.setItem(i - start, new ItemBuilder(display) + .addLore(java.util.List.of( + "", + "&7Seller: &f" + listing.getSellerName(), + "&7Price: &a" + msgManager.formatCurrency(listing.getPrice()), + "&7ID: &f#" + listing.getId(), + "", + "&cClick to remove" + )) + .build()); + } + + inventory.setItem(49, new ItemBuilder(Material.BARRIER) + .name(msgManager.getButton("back")) + .build()); + } + + @Override + public void handleClick(InventoryClickEvent event) { + event.setCancelled(true); + Player player = (Player) event.getWhoClicked(); + int slot = event.getRawSlot(); + + if (slot == 49) { + new AdminGui(plugin, guiManager).open(player); + return; + } + + if (slot >= 0 && slot < 45 && slot + page * 45 < listings.size()) { + var listing = listings.get(slot + page * 45); + plugin.getListingService().cancelListing(listing.getId(), player.getUniqueId(), true) + .thenAccept(success -> { + Bukkit.getScheduler().runTask(plugin, () -> { + if (success) { + player.sendMessage(plugin.getMessageManager().getPrefixed( + "messages.admin-listing-removed", "id", String.valueOf(listing.getId()))); + } + open(player, page); + }); + }); + } + } + + @Override + public GuiType getType() { + return GuiType.ADMIN_LISTINGS; + } + + @Override + public Inventory getInventory() { + return inventory; + } + } + + /** + * Admin view of all auctions with cancel capability + */ + private static class AdminAuctionsGui implements MarketGui { + private final CommunityMarket plugin; + private final GuiManager guiManager; + private Inventory inventory; + private Player player; + private int page; + private java.util.List auctions; + + public AdminAuctionsGui(CommunityMarket plugin, GuiManager guiManager) { + this.plugin = plugin; + this.guiManager = guiManager; + } + + public void open(Player player, int page) { + this.player = player; + this.page = page; + + plugin.getAuctionService().getActiveAuctions().thenAccept(loaded -> { + this.auctions = loaded; + Bukkit.getScheduler().runTask(plugin, () -> { + buildGui(); + player.openInventory(inventory); + guiManager.registerGui(player.getUniqueId(), this); + }); + }); + } + + private void buildGui() { + var msgManager = plugin.getMessageManager(); + String title = TextUtil.colorizeToString(msgManager.getRaw("gui-titles.admin-auctions")); + inventory = Bukkit.createInventory(this, 54, title); + + ItemStack filler = new ItemBuilder(Material.RED_STAINED_GLASS_PANE).name(" ").build(); + for (int i = 45; i < 54; i++) { + inventory.setItem(i, filler); + } + + int start = page * 45; + int end = Math.min(start + 45, auctions.size()); + for (int i = start; i < end; i++) { + var auction = auctions.get(i); + ItemStack display = auction.getItem().clone(); + String bidder = auction.getHighestBidderName() != null ? auction.getHighestBidderName() : "None"; + inventory.setItem(i - start, new ItemBuilder(display) + .addLore(java.util.List.of( + "", + "&7Seller: &f" + auction.getSellerName(), + "&7Current Bid: &a" + msgManager.formatCurrency(auction.getCurrentBid()), + "&7Bidder: &f" + bidder, + "&7Bids: &f" + auction.getBidCount(), + "&7ID: &f#" + auction.getId(), + "", + "&cClick to force-end" + )) + .build()); + } + + inventory.setItem(49, new ItemBuilder(Material.BARRIER) + .name(msgManager.getButton("back")) + .build()); + } + + @Override + public void handleClick(InventoryClickEvent event) { + event.setCancelled(true); + Player player = (Player) event.getWhoClicked(); + int slot = event.getRawSlot(); + + if (slot == 49) { + new AdminGui(plugin, guiManager).open(player); + return; + } + + if (slot >= 0 && slot < 45 && slot + page * 45 < auctions.size()) { + var auction = auctions.get(slot + page * 45); + plugin.getAuctionService().cancelAuction(auction.getId(), player.getUniqueId(), true) + .thenAccept(result -> { + Bukkit.getScheduler().runTask(plugin, () -> { + player.sendMessage(plugin.getMessageManager().getPrefixed( + "messages.admin-auction-cancelled", "id", String.valueOf(auction.getId()))); + open(player, page); + }); + }); + } + } + + @Override + public GuiType getType() { + return GuiType.ADMIN_AUCTIONS; + } + + @Override + public Inventory getInventory() { + return inventory; + } + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/gui/BrowseAuctionsGui.java b/src/main/java/pt/henrique/communityMarket/gui/BrowseAuctionsGui.java new file mode 100644 index 0000000..c7bd6bc --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/gui/BrowseAuctionsGui.java @@ -0,0 +1,299 @@ +package pt.henrique.communityMarket.gui; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import pt.henrique.communityMarket.CommunityMarket; +import pt.henrique.communityMarket.model.Auction; +import pt.henrique.communityMarket.service.AuctionService; +import pt.henrique.communityMarket.util.ItemBuilder; +import pt.henrique.communityMarket.util.TextUtil; + +import java.time.Duration; +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * GUI for browsing active auctions. + * Left-click to bid, right-click to buyout (if available). + */ +public class BrowseAuctionsGui implements MarketGui { + + private final CommunityMarket plugin; + private final GuiManager guiManager; + private Inventory inventory; + private Player player; + private int currentPage; + private List auctions; + + // Layout constants + private static final int ITEMS_PER_PAGE = 45; + private static final int PREV_PAGE_SLOT = 45; + private static final int INFO_SLOT = 49; + private static final int NEXT_PAGE_SLOT = 53; + private static final int BACK_SLOT = 48; + + public BrowseAuctionsGui(CommunityMarket plugin, GuiManager guiManager) { + this.plugin = plugin; + this.guiManager = guiManager; + } + + public void open(Player player, int page) { + this.player = player; + this.currentPage = page; + + // Load auctions asynchronously + plugin.getAuctionService().getActiveAuctions().thenAccept(loadedAuctions -> { + this.auctions = loadedAuctions; + + Bukkit.getScheduler().runTask(plugin, () -> { + buildGui(); + player.openInventory(inventory); + guiManager.registerGui(player.getUniqueId(), this); + playSound(player, plugin.getConfigManager().getClickSound()); + }); + }); + } + + private void buildGui() { + var msgManager = plugin.getMessageManager(); + + String title = msgManager.getRaw("gui-titles.browse-auctions") + .replace("{page}", String.valueOf(currentPage + 1)); + inventory = Bukkit.createInventory(this, 54, TextUtil.colorizeToString(title)); + + // Fill bottom row + ItemStack filler = new ItemBuilder(Material.GRAY_STAINED_GLASS_PANE).name(" ").build(); + for (int i = 45; i < 54; i++) { + inventory.setItem(i, filler); + } + + // Add auctions + int startIndex = currentPage * ITEMS_PER_PAGE; + int endIndex = Math.min(startIndex + ITEMS_PER_PAGE, auctions.size()); + + for (int i = startIndex; i < endIndex; i++) { + Auction auction = auctions.get(i); + int slot = i - startIndex; + inventory.setItem(slot, createAuctionItem(auction)); + } + + // Navigation + if (currentPage > 0) { + inventory.setItem(PREV_PAGE_SLOT, new ItemBuilder(Material.ARROW) + .name(msgManager.getButton("previous-page")) + .build()); + } + + int totalPages = (int) Math.ceil((double) auctions.size() / ITEMS_PER_PAGE); + if (currentPage < totalPages - 1) { + inventory.setItem(NEXT_PAGE_SLOT, new ItemBuilder(Material.ARROW) + .name(msgManager.getButton("next-page")) + .build()); + } + + inventory.setItem(INFO_SLOT, new ItemBuilder(Material.PAPER) + .name("&ePage " + (currentPage + 1) + "/" + Math.max(1, totalPages)) + .lore("&7Total auctions: &f" + auctions.size()) + .build()); + + inventory.setItem(BACK_SLOT, new ItemBuilder(Material.BARRIER) + .name(msgManager.getButton("back")) + .build()); + } + + private ItemStack createAuctionItem(Auction auction) { + var msgManager = plugin.getMessageManager(); + + ItemStack display = auction.getItem().clone(); + + // Time remaining + Duration remaining = Duration.between(Instant.now(), auction.getEndsAt()); + String ends = TextUtil.formatDuration(remaining); + + // Current bidder + String bidder = auction.getHighestBidderName() != null ? auction.getHighestBidderName() : "&7None"; + String currentBid = auction.getBidCount() > 0 + ? msgManager.formatCurrency(auction.getCurrentBid()) + : msgManager.formatCurrency(auction.getStartPrice()); + + List lore = new ArrayList<>(); + lore.add(""); + for (String line : msgManager.getLore("auction-info", Map.of( + "seller", auction.getSellerName(), + "start_price", msgManager.formatCurrency(auction.getStartPrice()), + "current_bid", currentBid, + "bidder", bidder, + "bid_count", String.valueOf(auction.getBidCount()), + "ends", ends + ))) { + lore.add(line); + } + + // Add buyout info if available + if (auction.hasBuyout()) { + lore.add("&7Buyout: &a" + msgManager.formatCurrency(auction.getBuyoutPrice())); + } + + return new ItemBuilder(display) + .addLore(lore) + .build(); + } + + @Override + public void handleClick(InventoryClickEvent event) { + event.setCancelled(true); + + Player player = (Player) event.getWhoClicked(); + int slot = event.getRawSlot(); + + if (slot == BACK_SLOT) { + guiManager.openMainMenu(player); + return; + } + + if (slot == PREV_PAGE_SLOT && currentPage > 0) { + open(player, currentPage - 1); + return; + } + + int totalPages = (int) Math.ceil((double) auctions.size() / ITEMS_PER_PAGE); + if (slot == NEXT_PAGE_SLOT && currentPage < totalPages - 1) { + open(player, currentPage + 1); + return; + } + + // Click on auction + if (slot >= 0 && slot < ITEMS_PER_PAGE) { + int auctionIndex = currentPage * ITEMS_PER_PAGE + slot; + if (auctionIndex < auctions.size()) { + Auction auction = auctions.get(auctionIndex); + + // Right-click for buyout + if (event.getClick() == ClickType.RIGHT && auction.hasBuyout()) { + handleBuyout(player, auction); + } else { + // Left-click for bid + handleBid(player, auction); + } + } + } + } + + private void handleBid(Player player, Auction auction) { + var msgManager = plugin.getMessageManager(); + + // Can't bid on own auction + if (auction.getSellerUuid().equals(player.getUniqueId())) { + player.sendMessage(msgManager.getPrefixed("messages.auction-own-item")); + playSound(player, plugin.getConfigManager().getErrorSound()); + return; + } + + // Calculate minimum bid + double minBid = plugin.getAuctionService().calculateMinBid(auction); + + // Open number input for bid amount + guiManager.openNumberInput(player, bidAmount -> { + if (bidAmount <= 0) { + guiManager.openBrowseAuctions(player, currentPage); + return; + } + + // Place bid + plugin.getAuctionService().placeBid(auction.getId(), player, bidAmount) + .thenAccept(result -> { + Bukkit.getScheduler().runTask(plugin, () -> { + switch (result) { + case SUCCESS -> { + player.sendMessage(msgManager.getPrefixed("messages.auction-bid-placed", Map.of( + "amount", msgManager.formatCurrency(bidAmount), + "item", auction.getItem().getType().name() + ))); + playSound(player, plugin.getConfigManager().getSuccessSound()); + guiManager.openBrowseAuctions(player, currentPage); + } + case BID_TOO_LOW -> { + player.sendMessage(msgManager.getPrefixed("messages.auction-bid-too-low", + "min", msgManager.formatCurrency(minBid))); + playSound(player, plugin.getConfigManager().getErrorSound()); + } + case INSUFFICIENT_FUNDS -> { + player.sendMessage(msgManager.getPrefixed("messages.auction-insufficient-funds", + "price", msgManager.formatCurrency(bidAmount))); + playSound(player, plugin.getConfigManager().getErrorSound()); + } + default -> { + player.sendMessage(msgManager.getPrefixed("messages.auction-not-found")); + playSound(player, plugin.getConfigManager().getErrorSound()); + guiManager.openBrowseAuctions(player, currentPage); + } + } + }); + }); + }, minBid, minBid, plugin.getConfigManager().getMaxPrice(), + msgManager.getRaw("gui-titles.number-input")); + } + + private void handleBuyout(Player player, Auction auction) { + var msgManager = plugin.getMessageManager(); + + if (auction.getSellerUuid().equals(player.getUniqueId())) { + player.sendMessage(msgManager.getPrefixed("messages.auction-own-item")); + playSound(player, plugin.getConfigManager().getErrorSound()); + return; + } + + String[] info = { + "&7Item: &f" + auction.getItem().getType().name(), + "&7Buyout Price: &a" + msgManager.formatCurrency(auction.getBuyoutPrice()), + "", + "&eClick to confirm buyout!" + }; + + guiManager.openConfirmation(player, confirmed -> { + if (confirmed) { + plugin.getAuctionService().buyout(auction.getId(), player) + .thenAccept(result -> { + Bukkit.getScheduler().runTask(plugin, () -> { + if (result == AuctionService.BidResult.BUYOUT_SUCCESS) { + player.sendMessage(msgManager.getPrefixed("messages.auction-buyout", Map.of( + "item", auction.getItem().getType().name(), + "price", msgManager.formatCurrency(auction.getBuyoutPrice()) + ))); + playSound(player, plugin.getConfigManager().getPurchaseSound()); + } else { + player.sendMessage(msgManager.getPrefixed("messages.auction-not-found")); + playSound(player, plugin.getConfigManager().getErrorSound()); + } + guiManager.openBrowseAuctions(player, currentPage); + }); + }); + } else { + guiManager.openBrowseAuctions(player, currentPage); + } + }, msgManager.getRaw("gui-titles.confirm-purchase"), info); + } + + private void playSound(Player player, String soundName) { + pt.henrique.communityMarket.util.SoundUtil.playSound(player, soundName); + } + + @Override + public GuiType getType() { + return GuiType.BROWSE_AUCTIONS; + } + + @Override + public Inventory getInventory() { + return inventory; + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/gui/BrowseMarketGui.java b/src/main/java/pt/henrique/communityMarket/gui/BrowseMarketGui.java new file mode 100644 index 0000000..8a52de9 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/gui/BrowseMarketGui.java @@ -0,0 +1,257 @@ +package pt.henrique.communityMarket.gui; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import pt.henrique.communityMarket.CommunityMarket; +import pt.henrique.communityMarket.model.Listing; +import pt.henrique.communityMarket.service.ListingService; +import pt.henrique.communityMarket.util.ItemBuilder; +import pt.henrique.communityMarket.util.TextUtil; + +import java.time.Duration; +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * GUI for browsing the market's fixed-price listings. + * Features pagination, and click-to-buy functionality. + */ +public class BrowseMarketGui implements MarketGui { + + private final CommunityMarket plugin; + private final GuiManager guiManager; + private Inventory inventory; + private Player player; + private int currentPage; + private List

listings; + + // Layout constants + private static final int ITEMS_PER_PAGE = 45; + private static final int PREV_PAGE_SLOT = 45; + private static final int INFO_SLOT = 49; + private static final int NEXT_PAGE_SLOT = 53; + private static final int BACK_SLOT = 48; + private static final int FILTER_SLOT = 47; + private static final int SORT_SLOT = 51; + + public BrowseMarketGui(CommunityMarket plugin, GuiManager guiManager) { + this.plugin = plugin; + this.guiManager = guiManager; + } + + /** + * Opens the browse market GUI for a player + */ + public void open(Player player, int page) { + this.player = player; + this.currentPage = page; + + // Load listings asynchronously + plugin.getListingService().getActiveListings().thenAccept(loadedListings -> { + this.listings = loadedListings; + + // Build GUI on main thread + Bukkit.getScheduler().runTask(plugin, () -> { + buildGui(); + player.openInventory(inventory); + guiManager.registerGui(player.getUniqueId(), this); + playSound(player, plugin.getConfigManager().getClickSound()); + }); + }); + } + + private void buildGui() { + var msgManager = plugin.getMessageManager(); + + String title = msgManager.getRaw("gui-titles.browse-market") + .replace("{page}", String.valueOf(currentPage + 1)); + inventory = Bukkit.createInventory(this, 54, TextUtil.colorizeToString(title)); + + // Fill bottom row with glass + ItemStack filler = new ItemBuilder(Material.GRAY_STAINED_GLASS_PANE).name(" ").build(); + for (int i = 45; i < 54; i++) { + inventory.setItem(i, filler); + } + + // Add listings to slots 0-44 + int startIndex = currentPage * ITEMS_PER_PAGE; + int endIndex = Math.min(startIndex + ITEMS_PER_PAGE, listings.size()); + + for (int i = startIndex; i < endIndex; i++) { + Listing listing = listings.get(i); + int slot = i - startIndex; + inventory.setItem(slot, createListingItem(listing)); + } + + // Navigation buttons + if (currentPage > 0) { + inventory.setItem(PREV_PAGE_SLOT, new ItemBuilder(Material.ARROW) + .name(msgManager.getButton("previous-page")) + .build()); + } + + int totalPages = (int) Math.ceil((double) listings.size() / ITEMS_PER_PAGE); + if (currentPage < totalPages - 1) { + inventory.setItem(NEXT_PAGE_SLOT, new ItemBuilder(Material.ARROW) + .name(msgManager.getButton("next-page")) + .build()); + } + + // Info/page indicator + inventory.setItem(INFO_SLOT, new ItemBuilder(Material.PAPER) + .name("&ePage " + (currentPage + 1) + "/" + Math.max(1, totalPages)) + .lore("&7Total listings: &f" + listings.size()) + .build()); + + // Back button + inventory.setItem(BACK_SLOT, new ItemBuilder(Material.BARRIER) + .name(msgManager.getButton("back")) + .build()); + } + + private ItemStack createListingItem(Listing listing) { + var msgManager = plugin.getMessageManager(); + + ItemStack display = listing.getItem().clone(); + display.setAmount(listing.getAmount()); + + // Calculate time remaining + String expires; + if (listing.getExpiresAt() != null) { + Duration remaining = Duration.between(Instant.now(), listing.getExpiresAt()); + expires = TextUtil.formatDuration(remaining); + } else { + expires = "Never"; + } + + List lore = new ArrayList<>(); + lore.add(""); // Empty line separator + for (String line : msgManager.getLore("listing-info", Map.of( + "seller", listing.getSellerName(), + "price", msgManager.formatCurrency(listing.getPrice()), + "amount", String.valueOf(listing.getAmount()), + "expires", expires + ))) { + lore.add(line); + } + + return new ItemBuilder(display) + .addLore(lore) + .build(); + } + + @Override + public void handleClick(InventoryClickEvent event) { + event.setCancelled(true); + + Player player = (Player) event.getWhoClicked(); + int slot = event.getRawSlot(); + + // Bottom row navigation + if (slot == BACK_SLOT) { + guiManager.openMainMenu(player); + return; + } + + if (slot == PREV_PAGE_SLOT && currentPage > 0) { + open(player, currentPage - 1); + return; + } + + int totalPages = (int) Math.ceil((double) listings.size() / ITEMS_PER_PAGE); + if (slot == NEXT_PAGE_SLOT && currentPage < totalPages - 1) { + open(player, currentPage + 1); + return; + } + + // Click on a listing (slots 0-44) + if (slot >= 0 && slot < ITEMS_PER_PAGE) { + int listingIndex = currentPage * ITEMS_PER_PAGE + slot; + if (listingIndex < listings.size()) { + Listing listing = listings.get(listingIndex); + handleListingClick(player, listing); + } + } + } + + private void handleListingClick(Player player, Listing listing) { + var msgManager = plugin.getMessageManager(); + + // Can't buy own listing + if (listing.getSellerUuid().equals(player.getUniqueId())) { + player.sendMessage(msgManager.getPrefixed("messages.listing-own-item")); + playSound(player, plugin.getConfigManager().getErrorSound()); + return; + } + + // Show confirmation + double tax = plugin.getTransactionService().calculateListingTax(listing.getPrice()); + String[] info = { + "&7Item: &f" + listing.getItem().getType().name() + " x" + listing.getAmount(), + "&7Seller: &f" + listing.getSellerName(), + "&7Price: &a" + msgManager.formatCurrency(listing.getPrice()), + "", + "&eClick to confirm purchase!" + }; + + guiManager.openConfirmation(player, confirmed -> { + if (confirmed) { + // Attempt purchase + plugin.getListingService().purchaseListing(listing.getId(), player) + .thenAccept(result -> { + Bukkit.getScheduler().runTask(plugin, () -> { + switch (result) { + case SUCCESS -> { + player.sendMessage(msgManager.getPrefixed("messages.listing-purchased", Map.of( + "item", listing.getItem().getType().name(), + "amount", String.valueOf(listing.getAmount()), + "price", msgManager.formatCurrency(listing.getPrice()) + ))); + playSound(player, plugin.getConfigManager().getPurchaseSound()); + guiManager.openBrowseMarket(player, currentPage); + } + case INSUFFICIENT_FUNDS -> { + player.sendMessage(msgManager.getPrefixed("messages.listing-insufficient-funds", + "price", msgManager.formatCurrency(listing.getPrice()))); + playSound(player, plugin.getConfigManager().getErrorSound()); + } + case ALREADY_SOLD, NOT_FOUND -> { + player.sendMessage(msgManager.getPrefixed("messages.listing-not-found")); + playSound(player, plugin.getConfigManager().getErrorSound()); + guiManager.openBrowseMarket(player, currentPage); + } + default -> { + player.sendMessage(msgManager.getPrefixed("messages.listing-not-found")); + playSound(player, plugin.getConfigManager().getErrorSound()); + } + } + }); + }); + } else { + guiManager.openBrowseMarket(player, currentPage); + } + }, msgManager.getRaw("gui-titles.confirm-purchase"), info); + } + + private void playSound(Player player, String soundName) { + pt.henrique.communityMarket.util.SoundUtil.playSound(player, soundName); + } + + @Override + public GuiType getType() { + return GuiType.BROWSE_MARKET; + } + + @Override + public Inventory getInventory() { + return inventory; + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/gui/ClaimGui.java b/src/main/java/pt/henrique/communityMarket/gui/ClaimGui.java new file mode 100644 index 0000000..709b564 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/gui/ClaimGui.java @@ -0,0 +1,205 @@ +package pt.henrique.communityMarket.gui; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import pt.henrique.communityMarket.CommunityMarket; +import pt.henrique.communityMarket.model.ClaimItem; +import pt.henrique.communityMarket.service.ClaimService; +import pt.henrique.communityMarket.util.ItemBuilder; +import pt.henrique.communityMarket.util.TextUtil; + +import java.time.Duration; +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * GUI for claiming items from expired listings, won auctions, etc. + * Click on an item to claim it, or use "Claim All" button. + */ +public class ClaimGui implements MarketGui { + + private final CommunityMarket plugin; + private final GuiManager guiManager; + private Inventory inventory; + private Player player; + private List claimItems; + + private static final int BACK_SLOT = 49; + private static final int CLAIM_ALL_SLOT = 45; + + public ClaimGui(CommunityMarket plugin, GuiManager guiManager) { + this.plugin = plugin; + this.guiManager = guiManager; + } + + public void open(Player player) { + this.player = player; + + plugin.getClaimService().getPlayerClaimItems(player.getUniqueId()) + .thenAccept(items -> { + this.claimItems = items; + + Bukkit.getScheduler().runTask(plugin, () -> { + buildGui(); + player.openInventory(inventory); + guiManager.registerGui(player.getUniqueId(), this); + }); + }); + } + + private void buildGui() { + var msgManager = plugin.getMessageManager(); + + String title = TextUtil.colorizeToString(msgManager.getRaw("gui-titles.claim-items")); + inventory = Bukkit.createInventory(this, 54, title); + + // Fill bottom row + ItemStack filler = new ItemBuilder(Material.GRAY_STAINED_GLASS_PANE).name(" ").build(); + for (int i = 45; i < 54; i++) { + inventory.setItem(i, filler); + } + + // Add claim items + for (int i = 0; i < Math.min(claimItems.size(), 45); i++) { + ClaimItem item = claimItems.get(i); + inventory.setItem(i, createClaimItemDisplay(item)); + } + + // Claim All button + if (!claimItems.isEmpty()) { + inventory.setItem(CLAIM_ALL_SLOT, new ItemBuilder(Material.HOPPER) + .name(msgManager.getButton("claim-all")) + .lore("&7Claim all items at once") + .glow() + .build()); + } + + // Back button + inventory.setItem(BACK_SLOT, new ItemBuilder(Material.BARRIER) + .name(msgManager.getButton("back")) + .build()); + + // Show empty message if no items + if (claimItems.isEmpty()) { + inventory.setItem(22, new ItemBuilder(Material.BARRIER) + .name("&cNo items to claim") + .lore("&7Items from expired listings,", + "&7won auctions, etc. appear here.") + .build()); + } + } + + private ItemStack createClaimItemDisplay(ClaimItem claimItem) { + var msgManager = plugin.getMessageManager(); + + ItemStack display = claimItem.getItem().clone(); + + String age = TextUtil.formatDuration( + Duration.between(claimItem.getCreatedAt(), Instant.now())) + " ago"; + + List lore = new ArrayList<>(); + lore.add(""); + lore.addAll(msgManager.getLore("claim-item-info", Map.of( + "reason", claimItem.getReason().getDisplayName(), + "source", claimItem.getSourceInfo() != null ? claimItem.getSourceInfo() : "Unknown", + "date", age + ))); + + return new ItemBuilder(display) + .addLore(lore) + .build(); + } + + @Override + public void handleClick(InventoryClickEvent event) { + event.setCancelled(true); + + Player player = (Player) event.getWhoClicked(); + int slot = event.getRawSlot(); + + if (slot == BACK_SLOT) { + guiManager.openMainMenu(player); + return; + } + + if (slot == CLAIM_ALL_SLOT && !claimItems.isEmpty()) { + claimAll(player); + return; + } + + // Click on item to claim + if (slot >= 0 && slot < 45 && slot < claimItems.size()) { + ClaimItem item = claimItems.get(slot); + claimSingle(player, item); + } + } + + private void claimSingle(Player player, ClaimItem item) { + var msgManager = plugin.getMessageManager(); + + plugin.getClaimService().claimItem(item.getId(), player) + .thenAccept(result -> { + Bukkit.getScheduler().runTask(plugin, () -> { + switch (result) { + case SUCCESS -> { + player.sendMessage(msgManager.getPrefixed("messages.claim-success")); + playSound(player, plugin.getConfigManager().getSuccessSound()); + open(player); // Refresh + } + case INVENTORY_FULL -> { + player.sendMessage(msgManager.getPrefixed("messages.claim-inventory-full")); + playSound(player, plugin.getConfigManager().getErrorSound()); + } + default -> { + player.sendMessage(msgManager.getPrefixed("messages.claim-empty")); + playSound(player, plugin.getConfigManager().getErrorSound()); + open(player); + } + } + }); + }); + } + + private void claimAll(Player player) { + var msgManager = plugin.getMessageManager(); + + plugin.getClaimService().claimAll(player) + .thenAccept(count -> { + Bukkit.getScheduler().runTask(plugin, () -> { + if (count > 0) { + player.sendMessage(msgManager.getPrefixed("messages.claim-all-success", + "count", String.valueOf(count))); + playSound(player, plugin.getConfigManager().getSuccessSound()); + } else { + player.sendMessage(msgManager.getPrefixed("messages.claim-empty")); + } + open(player); // Refresh + }); + }); + } + + private void playSound(Player player, String soundName) { + try { + Sound sound = Sound.valueOf(soundName); + player.playSound(player.getLocation(), sound, 0.5f, 1.0f); + } catch (IllegalArgumentException ignored) {} + } + + @Override + public GuiType getType() { + return GuiType.CLAIM; + } + + @Override + public Inventory getInventory() { + return inventory; + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/gui/ConfirmationGui.java b/src/main/java/pt/henrique/communityMarket/gui/ConfirmationGui.java new file mode 100644 index 0000000..dfb9301 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/gui/ConfirmationGui.java @@ -0,0 +1,120 @@ +package pt.henrique.communityMarket.gui; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import pt.henrique.communityMarket.CommunityMarket; +import pt.henrique.communityMarket.util.ItemBuilder; +import pt.henrique.communityMarket.util.TextUtil; + +import java.util.ArrayList; +import java.util.List; + +/** + * Confirmation dialog GUI for important actions like purchases and cancellations. + */ +public class ConfirmationGui implements MarketGui { + + private final CommunityMarket plugin; + private final GuiManager guiManager; + private final ConfirmCallback callback; + private final String title; + private final String[] infoLines; + + private Inventory inventory; + + private static final int INFO_SLOT = 13; + private static final int CONFIRM_SLOT = 29; + private static final int CANCEL_SLOT = 33; + + @FunctionalInterface + public interface ConfirmCallback { + void onComplete(boolean confirmed); + } + + public ConfirmationGui(CommunityMarket plugin, GuiManager guiManager, + ConfirmCallback callback, String title, String... infoLines) { + this.plugin = plugin; + this.guiManager = guiManager; + this.callback = callback; + this.title = title; + this.infoLines = infoLines; + } + + public void open(Player player) { + inventory = Bukkit.createInventory(this, 45, TextUtil.colorizeToString(title)); + buildGui(); + player.openInventory(inventory); + guiManager.registerGui(player.getUniqueId(), this); + } + + private void buildGui() { + var msgManager = plugin.getMessageManager(); + + // Fill with glass + ItemStack filler = new ItemBuilder(Material.GRAY_STAINED_GLASS_PANE).name(" ").build(); + for (int i = 0; i < 45; i++) { + inventory.setItem(i, filler); + } + + // Info display + List lore = new ArrayList<>(); + for (String line : infoLines) { + lore.add(line); + } + + inventory.setItem(INFO_SLOT, new ItemBuilder(Material.PAPER) + .name("&e&lConfirm Action") + .lore(lore) + .build()); + + // Confirm button + inventory.setItem(CONFIRM_SLOT, new ItemBuilder(Material.LIME_WOOL) + .name(msgManager.getButton("confirm")) + .lore("&aClick to confirm") + .glow() + .build()); + + // Cancel button + inventory.setItem(CANCEL_SLOT, new ItemBuilder(Material.RED_WOOL) + .name(msgManager.getButton("cancel")) + .lore("&cClick to cancel") + .build()); + } + + @Override + public void handleClick(InventoryClickEvent event) { + event.setCancelled(true); + + Player player = (Player) event.getWhoClicked(); + int slot = event.getRawSlot(); + + if (slot == CONFIRM_SLOT) { + playSound(player, plugin.getConfigManager().getSuccessSound()); + player.closeInventory(); + callback.onComplete(true); + } else if (slot == CANCEL_SLOT) { + player.closeInventory(); + callback.onComplete(false); + } + } + + private void playSound(Player player, String soundName) { + pt.henrique.communityMarket.util.SoundUtil.playSound(player, soundName); + } + + @Override + public GuiType getType() { + return GuiType.CONFIRMATION; + } + + @Override + public Inventory getInventory() { + return inventory; + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/gui/CreateAuctionGui.java b/src/main/java/pt/henrique/communityMarket/gui/CreateAuctionGui.java new file mode 100644 index 0000000..2aa0a62 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/gui/CreateAuctionGui.java @@ -0,0 +1,378 @@ +package pt.henrique.communityMarket.gui; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import pt.henrique.communityMarket.CommunityMarket; +import pt.henrique.communityMarket.util.ItemBuilder; +import pt.henrique.communityMarket.util.InventoryUtil; +import pt.henrique.communityMarket.util.SoundUtil; +import pt.henrique.communityMarket.util.TextUtil; + +import java.util.List; + +/** + * GUI for setting up a new auction. + * This GUI is opened AFTER the player has selected an item and quantity. + * All elements are merged: start price, buyout, and duration are single clickable items. + * + * Layout (54-slot chest): + * ┌─────────────────────────────────────────────────────┐ + * │ . . . . INFO . . . . │ Row 0 │ + * │ . . . . ITEM . . . . │ Row 1: Item │ + * │ . . . . . . . . . │ Row 2 │ + * │ . START . BUYOUT . DURATION . │ Row 3: Setup │ + * │ . . . . . . . . . │ Row 4 │ + * │ BACK . . . CONFIRM . . . .│ Row 5: Action│ + * └─────────────────────────────────────────────────────┘ + */ +public class CreateAuctionGui implements MarketGui { + + private final CommunityMarket plugin; + private final GuiManager guiManager; + private Inventory inventory; + private Player player; + + // Selected item info (from ItemSelectionGui -> QuantitySelectGui) + private int sourceInventorySlot = -1; + private ItemStack selectedItem = null; + + // Auction settings + private double startPrice; + private Double buyoutPrice = null; + private int durationHours; + + // ==================== LAYOUT CONSTANTS ==================== + private static final int INFO_SLOT = 4; // Top center + private static final int ITEM_DISPLAY_SLOT = 13; // Center + + // Row 3: Merged elements (single slot each) + private static final int START_PRICE_SLOT = 28; // Start price (display + click) + private static final int BUYOUT_SLOT = 31; // Buyout (display + click) + private static final int DURATION_SLOT = 34; // Duration (display + click) + + private static final int BACK_SLOT = 45; // Bottom-left + private static final int CONFIRM_SLOT = 49; // Bottom-center + // =========================================================== + + public CreateAuctionGui(CommunityMarket plugin, GuiManager guiManager) { + this.plugin = plugin; + this.guiManager = guiManager; + } + + /** + * Opens the auction creation GUI with a pre-selected item and quantity. + * Called from QuantitySelectGui or ItemSelectionGui (for unstackable items). + * + * @param player The player + * @param inventorySlot The slot in the player's inventory where the item is + * @param item A clone of the selected item with the desired quantity + */ + public void openWithItem(Player player, int inventorySlot, ItemStack item) { + this.player = player; + this.sourceInventorySlot = inventorySlot; + this.selectedItem = item; + this.durationHours = plugin.getConfigManager().getDefaultAuctionDurationHours(); + this.startPrice = plugin.getConfigManager().getMinStartPrice(); + this.buyoutPrice = null; + + var msgManager = plugin.getMessageManager(); + String title = TextUtil.colorizeToString(msgManager.getRaw("gui-titles.create-auction")); + inventory = Bukkit.createInventory(this, 54, title); + + buildGui(); + player.openInventory(inventory); + guiManager.registerGui(player.getUniqueId(), this); + } + + /** + * @deprecated Use openWithItem instead. This opens item selection first. + */ + public void open(Player player) { + new ItemSelectionGui(plugin, guiManager, ItemSelectionGui.SelectionMode.AUCTION).open(player); + } + + private void buildGui() { + var msgManager = plugin.getMessageManager(); + + // Fill with glass + ItemStack filler = new ItemBuilder(Material.GRAY_STAINED_GLASS_PANE).name(" ").build(); + for (int i = 0; i < 54; i++) { + inventory.setItem(i, filler); + } + + // Info panel + inventory.setItem(INFO_SLOT, new ItemBuilder(Material.OAK_SIGN) + .name("&6&lCreate Auction") + .lore( + "&7Set starting price, optional buyout,", + "&7and duration for your auction.", + "", + "&7Tax on sale: &f" + plugin.getConfigManager().getAuctionTax() + "%" + ) + .build()); + + // Selected item display + if (selectedItem != null) { + inventory.setItem(ITEM_DISPLAY_SLOT, new ItemBuilder(selectedItem.clone()) + .addLore(List.of( + "", + "&7Quantity: &f" + selectedItem.getAmount(), + "&eThis item will be auctioned" + )) + .build()); + } + + // Merged start price element + updateStartPriceElement(); + + // Merged buyout element + updateBuyoutElement(); + + // Merged duration element + updateDurationElement(); + + // Back button + inventory.setItem(BACK_SLOT, new ItemBuilder(Material.RED_WOOL) + .name(msgManager.getButton("back")) + .lore("&7Return to item selection") + .build()); + + // Confirm button + updateConfirmButton(); + } + + /** + * Updates the merged start price element (displays + clickable) + */ + private void updateStartPriceElement() { + var msgManager = plugin.getMessageManager(); + inventory.setItem(START_PRICE_SLOT, new ItemBuilder(Material.GOLD_INGOT) + .name("&6Starting Price: " + msgManager.formatCurrency(startPrice)) + .lore( + "", + "&7Minimum bid to start", + "&7the auction.", + "", + "&eClick to change" + ) + .glow() + .build()); + } + + /** + * Updates the merged buyout element (displays + clickable) + */ + private void updateBuyoutElement() { + var msgManager = plugin.getMessageManager(); + + if (buyoutPrice != null) { + inventory.setItem(BUYOUT_SLOT, new ItemBuilder(Material.DIAMOND) + .name("&bBuyout: " + msgManager.formatCurrency(buyoutPrice)) + .lore( + "", + "&7Instant purchase price.", + "", + "&eLeft-click to change", + "&cRight-click to remove" + ) + .glow() + .build()); + } else { + inventory.setItem(BUYOUT_SLOT, new ItemBuilder(Material.DIAMOND) + .name("&bBuyout: &7Not set") + .lore( + "", + "&7Optional instant purchase", + "&7price for your auction.", + "", + "&eClick to set buyout price" + ) + .build()); + } + } + + /** + * Updates the merged duration element (displays + clickable) + */ + private void updateDurationElement() { + String durationText = formatDuration(durationHours); + + inventory.setItem(DURATION_SLOT, new ItemBuilder(Material.CLOCK) + .name("&eDuration: " + durationText) + .lore( + "", + "&7Auction ends after this time.", + "", + "&eClick to change duration" + ) + .glow() + .build()); + } + + private String formatDuration(int hours) { + if (hours >= 24) { + int days = hours / 24; + return days + " day" + (days > 1 ? "s" : ""); + } else { + return hours + " hour" + (hours > 1 ? "s" : ""); + } + } + + private void updateConfirmButton() { + var msgManager = plugin.getMessageManager(); + + inventory.setItem(CONFIRM_SLOT, new ItemBuilder(Material.LIME_WOOL) + .name(msgManager.getButton("confirm")) + .lore( + "&7Item: &f" + selectedItem.getType().name() + " x" + selectedItem.getAmount(), + "&7Start: &a" + msgManager.formatCurrency(startPrice), + buyoutPrice != null ? "&7Buyout: &b" + msgManager.formatCurrency(buyoutPrice) : "&7Buyout: &7None", + "&7Duration: &e" + formatDuration(durationHours), + "", + "&aClick to create auction!" + ) + .glow() + .build()); + } + + @Override + public void handleClick(InventoryClickEvent event) { + event.setCancelled(true); + + Player player = (Player) event.getWhoClicked(); + int slot = event.getRawSlot(); + + var msgManager = plugin.getMessageManager(); + + switch (slot) { + case START_PRICE_SLOT -> { + guiManager.openNumberInput(player, newPrice -> { + if (newPrice > 0) { + this.startPrice = newPrice; + // Ensure buyout is higher than start + if (buyoutPrice != null && buyoutPrice <= startPrice) { + buyoutPrice = null; + } + } + reopenGui(); + }, startPrice, plugin.getConfigManager().getMinStartPrice(), + plugin.getConfigManager().getMaxStartPrice(), + msgManager.getRaw("gui-titles.number-input")); + } + case BUYOUT_SLOT -> { + if (event.isRightClick() && buyoutPrice != null) { + // Remove buyout + buyoutPrice = null; + updateBuyoutElement(); + updateConfirmButton(); + SoundUtil.playSound(player, plugin.getConfigManager().getClickSound()); + } else { + // Set buyout + double defaultBuyout = buyoutPrice != null ? buyoutPrice : startPrice * 2; + guiManager.openNumberInput(player, newPrice -> { + if (newPrice > startPrice) { + this.buyoutPrice = newPrice; + } + reopenGui(); + }, defaultBuyout, startPrice + 1, plugin.getConfigManager().getMaxPrice(), + msgManager.getRaw("gui-titles.number-input")); + } + } + case DURATION_SLOT -> { + List durations = plugin.getConfigManager().getAvailableAuctionDurations(); + if (!durations.isEmpty()) { + int currentIndex = durations.indexOf(durationHours); + int nextIndex = (currentIndex + 1) % durations.size(); + durationHours = durations.get(nextIndex); + updateDurationElement(); + updateConfirmButton(); + SoundUtil.playSound(player, plugin.getConfigManager().getClickSound()); + } + } + case CONFIRM_SLOT -> { + confirmAuction(player); + } + case BACK_SLOT -> { + // Go back to item selection + new ItemSelectionGui(plugin, guiManager, ItemSelectionGui.SelectionMode.AUCTION).open(player); + } + } + } + + private void confirmAuction(Player player) { + var msgManager = plugin.getMessageManager(); + + // Verify item still exists in player's inventory with sufficient quantity + int available = InventoryUtil.countSimilarItems(player.getInventory(), selectedItem); + + if (available < selectedItem.getAmount()) { + if (available < 1) { + player.sendMessage(msgManager.getPrefixed("messages.item-no-longer-available")); + } else { + player.sendMessage(msgManager.getPrefixed("messages.quantity-changed")); + } + SoundUtil.playSound(player, plugin.getConfigManager().getErrorSound()); + new ItemSelectionGui(plugin, guiManager, ItemSelectionGui.SelectionMode.AUCTION).open(player); + return; + } + + // Validate item again + var validation = plugin.getTransactionService().validateItem(selectedItem); + if (!validation.isValid()) { + player.sendMessage(msgManager.getPrefixed("messages." + validation.getErrorKey())); + SoundUtil.playSound(player, plugin.getConfigManager().getErrorSound()); + return; + } + + // Create the auction + ItemStack auctionItem = selectedItem.clone(); + + plugin.getTransactionService().createAuctionTransaction( + player, auctionItem, startPrice, buyoutPrice, durationHours + ).thenAccept(result -> { + Bukkit.getScheduler().runTask(plugin, () -> { + if (result.isSuccess()) { + // Remove items from inventory AFTER successful creation + InventoryUtil.removeItems(player, auctionItem, auctionItem.getAmount()); + + player.sendMessage(msgManager.getPrefixed("messages.auction-created", + "id", String.valueOf(result.getId()))); + SoundUtil.playSound(player, plugin.getConfigManager().getSuccessSound()); + player.closeInventory(); + guiManager.openMainMenu(player); + } else { + player.sendMessage(msgManager.getPrefixed("messages." + result.getErrorKey())); + SoundUtil.playSound(player, plugin.getConfigManager().getErrorSound()); + } + }); + }); + } + + private void reopenGui() { + var msgManager = plugin.getMessageManager(); + String title = TextUtil.colorizeToString(msgManager.getRaw("gui-titles.create-auction")); + inventory = Bukkit.createInventory(this, 54, title); + + buildGui(); + player.openInventory(inventory); + } + + @Override + public boolean allowsItemMovement() { + return false; + } + + @Override + public GuiType getType() { + return GuiType.CREATE_AUCTION; + } + + @Override + public Inventory getInventory() { + return inventory; + } +} diff --git a/src/main/java/pt/henrique/communityMarket/gui/CreateListingGui.java b/src/main/java/pt/henrique/communityMarket/gui/CreateListingGui.java new file mode 100644 index 0000000..27120f3 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/gui/CreateListingGui.java @@ -0,0 +1,325 @@ +package pt.henrique.communityMarket.gui; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import pt.henrique.communityMarket.CommunityMarket; +import pt.henrique.communityMarket.util.ItemBuilder; +import pt.henrique.communityMarket.util.InventoryUtil; +import pt.henrique.communityMarket.util.SoundUtil; +import pt.henrique.communityMarket.util.TextUtil; + +import java.util.List; + +/** + * GUI for setting up a new fixed-price listing. + * This GUI is opened AFTER the player has selected an item and quantity. + * All elements are merged: price and duration are single clickable items. + * + * Layout (54-slot chest): + * ┌─────────────────────────────────────────────────────┐ + * │ . . . . INFO . . . . │ Row 0 │ + * │ . . . . ITEM . . . . │ Row 1: Item │ + * │ . . . . . . . . . │ Row 2 │ + * │ . . PRICE . . . DURATION │ Row 3: Setup │ + * │ . . . . . . . . . │ Row 4 │ + * │ BACK . . . CONFIRM . . . .│ Row 5: Action│ + * └─────────────────────────────────────────────────────┘ + */ +public class CreateListingGui implements MarketGui { + + private final CommunityMarket plugin; + private final GuiManager guiManager; + private Inventory inventory; + private Player player; + + // Selected item info (from ItemSelectionGui -> QuantitySelectGui) + private int sourceInventorySlot = -1; + private ItemStack selectedItem = null; + + // Listing settings + private double price; + private int durationHours; + + // ==================== LAYOUT CONSTANTS ==================== + private static final int INFO_SLOT = 4; // Top center + private static final int ITEM_DISPLAY_SLOT = 13; // Center row 1 + + // Row 3: Merged elements (single slot each) + private static final int PRICE_SLOT = 29; // Price (display + click to adjust) + private static final int DURATION_SLOT = 33; // Duration (display + click to cycle) + + private static final int BACK_SLOT = 45; // Bottom-left + private static final int CONFIRM_SLOT = 49; // Bottom-center + // =========================================================== + + public CreateListingGui(CommunityMarket plugin, GuiManager guiManager) { + this.plugin = plugin; + this.guiManager = guiManager; + } + + /** + * Opens the listing creation GUI with a pre-selected item and quantity. + * Called from QuantitySelectGui or ItemSelectionGui (for unstackable items). + * + * @param player The player + * @param inventorySlot The slot in the player's inventory where the item is + * @param item A clone of the selected item with the desired quantity + */ + public void openWithItem(Player player, int inventorySlot, ItemStack item) { + this.player = player; + this.sourceInventorySlot = inventorySlot; + this.selectedItem = item; + this.durationHours = plugin.getConfigManager().getDefaultDurationHours(); + this.price = plugin.getConfigManager().getMinPrice(); + + var msgManager = plugin.getMessageManager(); + String title = TextUtil.colorizeToString(msgManager.getRaw("gui-titles.create-listing")); + inventory = Bukkit.createInventory(this, 54, title); + + buildGui(); + player.openInventory(inventory); + guiManager.registerGui(player.getUniqueId(), this); + } + + /** + * @deprecated Use openWithItem instead. This opens item selection first. + */ + public void open(Player player) { + new ItemSelectionGui(plugin, guiManager, ItemSelectionGui.SelectionMode.LISTING).open(player); + } + + private void buildGui() { + var msgManager = plugin.getMessageManager(); + + // Fill with glass + ItemStack filler = new ItemBuilder(Material.GRAY_STAINED_GLASS_PANE).name(" ").build(); + for (int i = 0; i < 54; i++) { + inventory.setItem(i, filler); + } + + // Info panel + inventory.setItem(INFO_SLOT, new ItemBuilder(Material.OAK_SIGN) + .name("&6&lCreate Listing") + .lore( + "&7Set a price and duration", + "&7for your listing.", + "", + "&7Tax: &f" + plugin.getConfigManager().getMarketTax() + "%" + ) + .build()); + + // Selected item display + if (selectedItem != null) { + inventory.setItem(ITEM_DISPLAY_SLOT, new ItemBuilder(selectedItem.clone()) + .addLore(List.of( + "", + "&7Quantity: &f" + selectedItem.getAmount(), + "&eThis item will be listed" + )) + .build()); + } + + // Merged price element + updatePriceElement(); + + // Merged duration element + updateDurationElement(); + + // Back button + inventory.setItem(BACK_SLOT, new ItemBuilder(Material.RED_WOOL) + .name(msgManager.getButton("back")) + .lore("&7Return to item selection") + .build()); + + // Confirm button + updateConfirmButton(); + } + + /** + * Updates the merged price element (displays current price + clickable to change) + */ + private void updatePriceElement() { + var msgManager = plugin.getMessageManager(); + double tax = plugin.getTransactionService().calculateListingTax(price); + double earnings = price - tax; + + inventory.setItem(PRICE_SLOT, new ItemBuilder(Material.GOLD_INGOT) + .name("&6Price: " + msgManager.formatCurrency(price)) + .lore( + "", + "&7Tax (" + plugin.getConfigManager().getMarketTax() + "%): &c" + msgManager.formatCurrency(tax), + "&7You receive: &a" + msgManager.formatCurrency(earnings), + "", + "&eClick to change price" + ) + .glow() + .build()); + } + + /** + * Updates the merged duration element (displays current duration + clickable to cycle) + */ + private void updateDurationElement() { + String durationText = formatDuration(durationHours); + + inventory.setItem(DURATION_SLOT, new ItemBuilder(Material.CLOCK) + .name("&eDuration: " + durationText) + .lore( + "", + "&7Listing expires after this time", + "", + "&eClick to change duration" + ) + .glow() + .build()); + } + + private String formatDuration(int hours) { + if (hours >= 24) { + int days = hours / 24; + return days + " day" + (days > 1 ? "s" : ""); + } else { + return hours + " hour" + (hours > 1 ? "s" : ""); + } + } + + private void updateConfirmButton() { + var msgManager = plugin.getMessageManager(); + double tax = plugin.getTransactionService().calculateListingTax(price); + double earnings = price - tax; + + inventory.setItem(CONFIRM_SLOT, new ItemBuilder(Material.LIME_WOOL) + .name(msgManager.getButton("confirm")) + .lore( + "&7Item: &f" + selectedItem.getType().name() + " x" + selectedItem.getAmount(), + "&7Price: &a" + msgManager.formatCurrency(price), + "&7You receive: &a" + msgManager.formatCurrency(earnings), + "&7Duration: &e" + formatDuration(durationHours), + "", + "&aClick to create listing!" + ) + .glow() + .build()); + } + + @Override + public void handleClick(InventoryClickEvent event) { + event.setCancelled(true); + + Player player = (Player) event.getWhoClicked(); + int slot = event.getRawSlot(); + + var msgManager = plugin.getMessageManager(); + + switch (slot) { + case PRICE_SLOT -> { + // Open number input for price + guiManager.openNumberInput(player, newPrice -> { + if (newPrice > 0) { + this.price = newPrice; + } + reopenGui(); + }, price, plugin.getConfigManager().getMinPrice(), + plugin.getConfigManager().getMaxPrice(), + msgManager.getRaw("gui-titles.number-input")); + } + case DURATION_SLOT -> { + // Cycle through available durations + List durations = plugin.getConfigManager().getAvailableDurations(); + if (!durations.isEmpty()) { + int currentIndex = durations.indexOf(durationHours); + int nextIndex = (currentIndex + 1) % durations.size(); + durationHours = durations.get(nextIndex); + updateDurationElement(); + updateConfirmButton(); + SoundUtil.playSound(player, plugin.getConfigManager().getClickSound()); + } + } + case CONFIRM_SLOT -> { + confirmListing(player); + } + case BACK_SLOT -> { + // Go back to item selection + new ItemSelectionGui(plugin, guiManager, ItemSelectionGui.SelectionMode.LISTING).open(player); + } + } + } + + private void confirmListing(Player player) { + var msgManager = plugin.getMessageManager(); + + // Verify item still exists in player's inventory with sufficient quantity + int available = InventoryUtil.countSimilarItems(player.getInventory(), selectedItem); + + if (available < selectedItem.getAmount()) { + if (available < 1) { + player.sendMessage(msgManager.getPrefixed("messages.item-no-longer-available")); + } else { + player.sendMessage(msgManager.getPrefixed("messages.quantity-changed")); + } + SoundUtil.playSound(player, plugin.getConfigManager().getErrorSound()); + new ItemSelectionGui(plugin, guiManager, ItemSelectionGui.SelectionMode.LISTING).open(player); + return; + } + + // Validate item again + var validation = plugin.getTransactionService().validateItem(selectedItem); + if (!validation.isValid()) { + player.sendMessage(msgManager.getPrefixed("messages." + validation.getErrorKey())); + SoundUtil.playSound(player, plugin.getConfigManager().getErrorSound()); + return; + } + + // Create the listing + int amount = selectedItem.getAmount(); + ItemStack listItem = selectedItem.clone(); + + plugin.getTransactionService().createListingTransaction( + player, listItem, amount, price, durationHours + ).thenAccept(result -> { + Bukkit.getScheduler().runTask(plugin, () -> { + if (result.isSuccess()) { + // Remove items from inventory AFTER successful creation + InventoryUtil.removeItems(player, listItem, amount); + + player.sendMessage(msgManager.getPrefixed("messages.listing-created", + "id", String.valueOf(result.getId()))); + SoundUtil.playSound(player, plugin.getConfigManager().getSuccessSound()); + player.closeInventory(); + guiManager.openMainMenu(player); + } else { + player.sendMessage(msgManager.getPrefixed("messages." + result.getErrorKey())); + SoundUtil.playSound(player, plugin.getConfigManager().getErrorSound()); + } + }); + }); + } + + private void reopenGui() { + var msgManager = plugin.getMessageManager(); + String title = TextUtil.colorizeToString(msgManager.getRaw("gui-titles.create-listing")); + inventory = Bukkit.createInventory(this, 54, title); + + buildGui(); + player.openInventory(inventory); + } + + @Override + public boolean allowsItemMovement() { + return false; + } + + @Override + public GuiType getType() { + return GuiType.CREATE_LISTING; + } + + @Override + public Inventory getInventory() { + return inventory; + } +} diff --git a/src/main/java/pt/henrique/communityMarket/gui/EarningsGui.java b/src/main/java/pt/henrique/communityMarket/gui/EarningsGui.java new file mode 100644 index 0000000..cf7920d --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/gui/EarningsGui.java @@ -0,0 +1,155 @@ +package pt.henrique.communityMarket.gui; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import pt.henrique.communityMarket.CommunityMarket; +import pt.henrique.communityMarket.util.ItemBuilder; +import pt.henrique.communityMarket.util.TextUtil; + +/** + * GUI for viewing and withdrawing pending earnings from sales. + */ +public class EarningsGui implements MarketGui { + + private final CommunityMarket plugin; + private final GuiManager guiManager; + private Inventory inventory; + private Player player; + private double pendingAmount; + + private static final int EARNINGS_DISPLAY_SLOT = 13; + private static final int WITHDRAW_SLOT = 31; + private static final int BACK_SLOT = 49; + + public EarningsGui(CommunityMarket plugin, GuiManager guiManager) { + this.plugin = plugin; + this.guiManager = guiManager; + } + + public void open(Player player) { + this.player = player; + + plugin.getEarningsService().getPendingEarnings(player.getUniqueId()) + .thenAccept(amount -> { + this.pendingAmount = amount; + + Bukkit.getScheduler().runTask(plugin, () -> { + buildGui(); + player.openInventory(inventory); + guiManager.registerGui(player.getUniqueId(), this); + }); + }); + } + + private void buildGui() { + var msgManager = plugin.getMessageManager(); + + String title = TextUtil.colorizeToString(msgManager.getRaw("gui-titles.earnings")); + inventory = Bukkit.createInventory(this, 54, title); + + // Fill with glass + ItemStack filler = new ItemBuilder(Material.GRAY_STAINED_GLASS_PANE).name(" ").build(); + for (int i = 0; i < 54; i++) { + inventory.setItem(i, filler); + } + + // Earnings display + inventory.setItem(EARNINGS_DISPLAY_SLOT, new ItemBuilder(Material.EMERALD_BLOCK) + .name("&a&lPending Earnings") + .lore( + "", + "&7Total: &a" + msgManager.formatCurrency(pendingAmount), + "", + "&7This is money from your sales", + "&7waiting to be withdrawn." + ) + .glow(pendingAmount > 0) + .build()); + + // Withdraw button + if (pendingAmount > 0) { + inventory.setItem(WITHDRAW_SLOT, new ItemBuilder(Material.GOLD_BLOCK) + .name(msgManager.getButton("withdraw")) + .lore( + "&7Click to withdraw all earnings", + "&7Amount: &a" + msgManager.formatCurrency(pendingAmount) + ) + .glow() + .build()); + } else { + inventory.setItem(WITHDRAW_SLOT, new ItemBuilder(Material.BARRIER) + .name("&cNo Earnings") + .lore("&7You have no pending earnings to withdraw.") + .build()); + } + + // Back button + inventory.setItem(BACK_SLOT, new ItemBuilder(Material.BARRIER) + .name(msgManager.getButton("back")) + .build()); + } + + @Override + public void handleClick(InventoryClickEvent event) { + event.setCancelled(true); + + Player player = (Player) event.getWhoClicked(); + int slot = event.getRawSlot(); + + if (slot == BACK_SLOT) { + guiManager.openMainMenu(player); + return; + } + + if (slot == WITHDRAW_SLOT && pendingAmount > 0) { + withdrawEarnings(player); + } + } + + private void withdrawEarnings(Player player) { + var msgManager = plugin.getMessageManager(); + + plugin.getEarningsService().withdrawAll(player) + .thenAccept(result -> { + Bukkit.getScheduler().runTask(plugin, () -> { + if (result.isSuccess()) { + double newBalance = plugin.getEconomyManager().getBalance(player.getUniqueId()); + player.sendMessage(msgManager.getPrefixed("messages.earnings-withdrawn", + java.util.Map.of( + "amount", msgManager.formatCurrency(result.getAmount()), + "balance", msgManager.formatCurrency(newBalance) + ))); + playSound(player, plugin.getConfigManager().getSuccessSound()); + open(player); // Refresh + } else { + if ("no_earnings".equals(result.getError())) { + player.sendMessage(msgManager.getPrefixed("messages.earnings-empty")); + } else { + player.sendMessage(msgManager.getPrefixed("messages.earnings-empty")); + } + playSound(player, plugin.getConfigManager().getErrorSound()); + } + }); + }); + } + + private void playSound(Player player, String soundName) { + pt.henrique.communityMarket.util.SoundUtil.playSound(player, soundName); + } + + @Override + public GuiType getType() { + return GuiType.EARNINGS; + } + + @Override + public Inventory getInventory() { + return inventory; + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/gui/GuiManager.java b/src/main/java/pt/henrique/communityMarket/gui/GuiManager.java new file mode 100644 index 0000000..0a69526 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/gui/GuiManager.java @@ -0,0 +1,211 @@ +package pt.henrique.communityMarket.gui; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; +import org.jetbrains.annotations.NotNull; +import pt.henrique.communityMarket.CommunityMarket; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +/** + * Manages all GUI instances and player GUI states. + * Central hub for opening, closing, and tracking GUI interactions. + */ +public class GuiManager { + + private final CommunityMarket plugin; + + // Track open GUIs per player + private final Map openGuis = new HashMap<>(); + + // GUI builders/templates + private final MainMenuGui mainMenuGui; + private final BrowseMarketGui browseMarketGui; + private final BrowseAuctionsGui browseAuctionsGui; + private final CreateListingGui createListingGui; + private final CreateAuctionGui createAuctionGui; + private final MyListingsGui myListingsGui; + private final MyAuctionsGui myAuctionsGui; + private final ClaimGui claimGui; + private final EarningsGui earningsGui; + private final HelpGui helpGui; + private final AdminGui adminGui; + + public GuiManager(CommunityMarket plugin) { + this.plugin = plugin; + + // Initialize GUI handlers + this.mainMenuGui = new MainMenuGui(plugin, this); + this.browseMarketGui = new BrowseMarketGui(plugin, this); + this.browseAuctionsGui = new BrowseAuctionsGui(plugin, this); + this.createListingGui = new CreateListingGui(plugin, this); + this.createAuctionGui = new CreateAuctionGui(plugin, this); + this.myListingsGui = new MyListingsGui(plugin, this); + this.myAuctionsGui = new MyAuctionsGui(plugin, this); + this.claimGui = new ClaimGui(plugin, this); + this.earningsGui = new EarningsGui(plugin, this); + this.helpGui = new HelpGui(plugin, this); + this.adminGui = new AdminGui(plugin, this); + } + + /** + * Opens the main menu for a player + */ + public void openMainMenu(Player player) { + mainMenuGui.open(player); + } + + /** + * Opens the browse market GUI + */ + public void openBrowseMarket(Player player, int page) { + browseMarketGui.open(player, page); + } + + /** + * Opens the browse auctions GUI + */ + public void openBrowseAuctions(Player player, int page) { + browseAuctionsGui.open(player, page); + } + + /** + * Opens the create listing flow (starts with item selection) + */ + public void openCreateListing(Player player) { + // Open item selection first, which will then open CreateListingGui + new ItemSelectionGui(plugin, this, ItemSelectionGui.SelectionMode.LISTING).open(player); + } + + /** + * Opens the create auction flow (starts with item selection) + */ + public void openCreateAuction(Player player) { + // Open item selection first, which will then open CreateAuctionGui + new ItemSelectionGui(plugin, this, ItemSelectionGui.SelectionMode.AUCTION).open(player); + } + + /** + * Opens the player's listings GUI + */ + public void openMyListings(Player player) { + myListingsGui.open(player); + } + + /** + * Opens the player's auctions GUI + */ + public void openMyAuctions(Player player) { + myAuctionsGui.open(player); + } + + /** + * Opens the claim GUI + */ + public void openClaim(Player player) { + claimGui.open(player); + } + + /** + * Opens the earnings GUI + */ + public void openEarnings(Player player) { + earningsGui.open(player); + } + + /** + * Opens the help GUI + */ + public void openHelp(Player player) { + helpGui.open(player); + } + + /** + * Opens the admin panel + */ + public void openAdmin(Player player) { + adminGui.open(player); + } + + /** + * Opens a number input GUI + */ + public void openNumberInput(Player player, NumberInputGui.NumberInputCallback callback, + double currentValue, double minValue, double maxValue, String title) { + new NumberInputGui(plugin, this, callback, currentValue, minValue, maxValue, title).open(player); + } + + /** + * Opens a confirmation GUI + */ + public void openConfirmation(Player player, ConfirmationGui.ConfirmCallback callback, + String title, String... infoLines) { + new ConfirmationGui(plugin, this, callback, title, infoLines).open(player); + } + + /** + * Registers an open GUI for a player + */ + public void registerGui(UUID playerUuid, MarketGui gui) { + openGuis.put(playerUuid, gui); + } + + /** + * Unregisters a GUI when closed + */ + public void unregisterGui(UUID playerUuid) { + openGuis.remove(playerUuid); + } + + /** + * Gets the currently open GUI for a player + */ + public MarketGui getOpenGui(UUID playerUuid) { + return openGuis.get(playerUuid); + } + + /** + * Checks if a player has a market GUI open + */ + public boolean hasGuiOpen(UUID playerUuid) { + return openGuis.containsKey(playerUuid); + } + + /** + * Closes all open market GUIs (used on plugin disable) + */ + public void closeAllGuis() { + for (UUID uuid : openGuis.keySet()) { + Player player = Bukkit.getPlayer(uuid); + if (player != null && player.isOnline()) { + player.closeInventory(); + } + } + openGuis.clear(); + } + + /** + * Gets the plugin instance + */ + public CommunityMarket getPlugin() { + return plugin; + } + + // Getters for GUI handlers + public MainMenuGui getMainMenuGui() { return mainMenuGui; } + public BrowseMarketGui getBrowseMarketGui() { return browseMarketGui; } + public BrowseAuctionsGui getBrowseAuctionsGui() { return browseAuctionsGui; } + public CreateListingGui getCreateListingGui() { return createListingGui; } + public CreateAuctionGui getCreateAuctionGui() { return createAuctionGui; } + public MyListingsGui getMyListingsGui() { return myListingsGui; } + public MyAuctionsGui getMyAuctionsGui() { return myAuctionsGui; } + public ClaimGui getClaimGui() { return claimGui; } + public EarningsGui getEarningsGui() { return earningsGui; } + public HelpGui getHelpGui() { return helpGui; } + public AdminGui getAdminGui() { return adminGui; } +} + diff --git a/src/main/java/pt/henrique/communityMarket/gui/HelpGui.java b/src/main/java/pt/henrique/communityMarket/gui/HelpGui.java new file mode 100644 index 0000000..563de04 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/gui/HelpGui.java @@ -0,0 +1,187 @@ +package pt.henrique.communityMarket.gui; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import pt.henrique.communityMarket.CommunityMarket; +import pt.henrique.communityMarket.util.ItemBuilder; +import pt.henrique.communityMarket.util.TextUtil; + +import java.util.List; + +/** + * Help GUI showing how to use the marketplace. + */ +public class HelpGui implements MarketGui { + + private final CommunityMarket plugin; + private final GuiManager guiManager; + private Inventory inventory; + + private static final int BACK_SLOT = 49; + + public HelpGui(CommunityMarket plugin, GuiManager guiManager) { + this.plugin = plugin; + this.guiManager = guiManager; + } + + public void open(Player player) { + var msgManager = plugin.getMessageManager(); + + String title = TextUtil.colorizeToString(msgManager.getRaw("gui-titles.help")); + inventory = Bukkit.createInventory(this, 54, title); + + buildGui(); + player.openInventory(inventory); + guiManager.registerGui(player.getUniqueId(), this); + } + + private void buildGui() { + var msgManager = plugin.getMessageManager(); + + // Fill with glass + ItemStack filler = new ItemBuilder(Material.GRAY_STAINED_GLASS_PANE).name(" ").build(); + for (int i = 0; i < 54; i++) { + inventory.setItem(i, filler); + } + + // Help content + List helpContent = msgManager.getList("help.content"); + + // Main help book + inventory.setItem(4, new ItemBuilder(Material.WRITTEN_BOOK) + .name(msgManager.getRaw("help.title")) + .build()); + + // Feature explanations + inventory.setItem(19, new ItemBuilder(Material.CHEST) + .name("&aBrowse Market") + .lore( + "&7View all fixed-price listings", + "&7from other players.", + "", + "&7Click on items to purchase them." + ) + .build()); + + inventory.setItem(20, new ItemBuilder(Material.GOLD_INGOT) + .name("&6Browse Auctions") + .lore( + "&7View all active auctions.", + "", + "&eLeft-click &7to place a bid", + "&eRight-click &7to buyout (if available)" + ) + .build()); + + inventory.setItem(21, new ItemBuilder(Material.WRITABLE_BOOK) + .name("&eCreate Listing") + .lore( + "&7Sell items at a fixed price.", + "", + "&71. Place your item in the slot", + "&72. Set the price", + "&73. Choose duration", + "&74. Click confirm" + ) + .build()); + + inventory.setItem(22, new ItemBuilder(Material.GOLDEN_HELMET) + .name("&eCreate Auction") + .lore( + "&7Auction items to the highest bidder.", + "", + "&71. Place your item in the slot", + "&72. Set starting price", + "&73. Optionally set buyout", + "&74. Choose duration", + "&75. Click confirm" + ) + .build()); + + inventory.setItem(23, new ItemBuilder(Material.BOOK) + .name("&bMy Listings") + .lore( + "&7View your active listings.", + "", + "&7Click on a listing to cancel it.", + "&7Cancelled items go to claim storage." + ) + .build()); + + inventory.setItem(24, new ItemBuilder(Material.CLOCK) + .name("&bMy Auctions") + .lore( + "&7View your active auctions.", + "", + "&7You can only cancel auctions", + "&7that have no bids yet." + ) + .build()); + + inventory.setItem(25, new ItemBuilder(Material.ENDER_CHEST) + .name("&dClaim Items") + .lore( + "&7Collect items waiting for you:", + "", + "&7- Expired listings", + "&7- Cancelled listings", + "&7- Won auctions", + "&7- Auction refunds" + ) + .build()); + + inventory.setItem(31, new ItemBuilder(Material.EMERALD) + .name("&aEarnings") + .lore( + "&7Withdraw money from sales.", + "", + "&7When you sell something, the money", + "&7goes to pending earnings first.", + "&7Withdraw it here." + ) + .build()); + + // Tax info + inventory.setItem(40, new ItemBuilder(Material.GOLD_NUGGET) + .name("&6Tax Information") + .lore( + "&7Market Tax: &f" + plugin.getConfigManager().getMarketTax() + "%", + "&7Auction Tax: &f" + plugin.getConfigManager().getAuctionTax() + "%", + "", + "&7Taxes are deducted from seller earnings." + ) + .build()); + + // Back button + inventory.setItem(BACK_SLOT, new ItemBuilder(Material.BARRIER) + .name(msgManager.getButton("back")) + .build()); + } + + @Override + public void handleClick(InventoryClickEvent event) { + event.setCancelled(true); + + Player player = (Player) event.getWhoClicked(); + int slot = event.getRawSlot(); + + if (slot == BACK_SLOT) { + guiManager.openMainMenu(player); + } + } + + @Override + public GuiType getType() { + return GuiType.HELP; + } + + @Override + public Inventory getInventory() { + return inventory; + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/gui/ItemSelectionGui.java b/src/main/java/pt/henrique/communityMarket/gui/ItemSelectionGui.java new file mode 100644 index 0000000..4f4f456 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/gui/ItemSelectionGui.java @@ -0,0 +1,260 @@ +package pt.henrique.communityMarket.gui; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; +import pt.henrique.communityMarket.CommunityMarket; +import pt.henrique.communityMarket.util.ItemBuilder; +import pt.henrique.communityMarket.util.InventoryUtil; +import pt.henrique.communityMarket.util.SoundUtil; +import pt.henrique.communityMarket.util.TextUtil; + +import java.util.HashMap; +import java.util.Map; + +/** + * GUI for selecting an item from the player's inventory to list or auction. + * Displays a mirror view of the player's inventory as clickable icons. + * This replaces the "drag item into slot" workflow for better UX. + */ +public class ItemSelectionGui implements MarketGui { + + private final CommunityMarket plugin; + private final GuiManager guiManager; + private final SelectionMode mode; + private Inventory inventory; + private Player player; + + // Maps GUI slot -> player inventory slot for tracking selections + private final Map slotMapping = new HashMap<>(); + + // Layout: 54-slot chest + // Rows 0-3 (slots 0-35): Player inventory mirror + // Row 4 (slots 36-44): Hotbar mirror + // Row 5 (slots 45-53): Navigation/info bar + + private static final int INFO_SLOT = 49; + private static final int BACK_SLOT = 45; + + public enum SelectionMode { + LISTING, + AUCTION + } + + public ItemSelectionGui(CommunityMarket plugin, GuiManager guiManager, SelectionMode mode) { + this.plugin = plugin; + this.guiManager = guiManager; + this.mode = mode; + } + + /** + * Opens the item selection GUI for a player + */ + public void open(Player player) { + this.player = player; + + var msgManager = plugin.getMessageManager(); + String titleKey = mode == SelectionMode.LISTING + ? "gui-titles.select-item-listing" + : "gui-titles.select-item-auction"; + String title = TextUtil.colorizeToString(msgManager.getRaw(titleKey)); + + inventory = Bukkit.createInventory(this, 54, title); + + buildGui(); + player.openInventory(inventory); + guiManager.registerGui(player.getUniqueId(), this); + } + + private void buildGui() { + var msgManager = plugin.getMessageManager(); + slotMapping.clear(); + + // Fill bottom row with glass + ItemStack filler = new ItemBuilder(Material.GRAY_STAINED_GLASS_PANE).name(" ").build(); + for (int i = 45; i < 54; i++) { + inventory.setItem(i, filler); + } + + PlayerInventory playerInv = player.getInventory(); + + // Mirror player's main inventory (slots 9-35 in player inv -> slots 0-26 in GUI) + for (int i = 9; i < 36; i++) { + ItemStack item = playerInv.getItem(i); + int guiSlot = i - 9; // Maps 9-35 to 0-26 + + if (item != null && !item.getType().isAir()) { + // Check if item can be listed + if (canBeSelected(item)) { + inventory.setItem(guiSlot, createSelectableItem(item)); + slotMapping.put(guiSlot, i); + } else { + // Show as blocked/unavailable + inventory.setItem(guiSlot, createBlockedItem(item)); + } + } + } + + // Mirror hotbar (slots 0-8 in player inv -> slots 27-35 in GUI) + for (int i = 0; i < 9; i++) { + ItemStack item = playerInv.getItem(i); + int guiSlot = 27 + i; // Maps 0-8 to 27-35 + + if (item != null && !item.getType().isAir()) { + if (canBeSelected(item)) { + inventory.setItem(guiSlot, createSelectableItem(item)); + slotMapping.put(guiSlot, i); + } else { + inventory.setItem(guiSlot, createBlockedItem(item)); + } + } + } + + // Info display + String modeText = mode == SelectionMode.LISTING ? "&eListing" : "&6Auction"; + inventory.setItem(INFO_SLOT, new ItemBuilder(Material.PAPER) + .name("&fSelect an Item") + .lore( + "&7Click on an item from your", + "&7inventory to create a " + modeText + "&7.", + "", + "&7Blacklisted items are shown in red." + ) + .build()); + + // Back button + inventory.setItem(BACK_SLOT, new ItemBuilder(Material.BARRIER) + .name(msgManager.getButton("back")) + .lore("&7Return to main menu") + .build()); + } + + /** + * Checks if an item can be selected for listing/auction + */ + private boolean canBeSelected(ItemStack item) { + if (item == null || item.getType().isAir()) { + return false; + } + + // Check material blacklist + if (plugin.getConfigManager().isMaterialBlacklisted(item.getType())) { + return false; + } + + // Check keyword blacklist in name/lore + var validation = plugin.getTransactionService().validateItem(item); + return validation.isValid(); + } + + /** + * Creates a display item with selection lore + */ + private ItemStack createSelectableItem(ItemStack original) { + return new ItemBuilder(original.clone()) + .addLore(java.util.List.of( + "", + "&a► Click to select" + )) + .build(); + } + + /** + * Creates a blocked/unavailable item display + */ + private ItemStack createBlockedItem(ItemStack original) { + return new ItemBuilder(Material.BARRIER) + .name("&c" + original.getType().name()) + .lore( + "&7This item cannot be listed.", + "&cBlacklisted or invalid." + ) + .build(); + } + + @Override + public void handleClick(InventoryClickEvent event) { + event.setCancelled(true); + + Player player = (Player) event.getWhoClicked(); + int slot = event.getRawSlot(); + + // Back button + if (slot == BACK_SLOT) { + guiManager.openMainMenu(player); + return; + } + + // Check if clicked slot contains a selectable item + if (slotMapping.containsKey(slot)) { + int playerInvSlot = slotMapping.get(slot); + ItemStack selectedItem = player.getInventory().getItem(playerInvSlot); + + // Verify item still exists + if (selectedItem == null || selectedItem.getType().isAir()) { + player.sendMessage(plugin.getMessageManager().getPrefixed("messages.invalid-item")); + SoundUtil.playSound(player, plugin.getConfigManager().getErrorSound()); + open(player); // Refresh + return; + } + + // Verify item is still valid + if (!canBeSelected(selectedItem)) { + player.sendMessage(plugin.getMessageManager().getPrefixed("messages.blacklisted-item")); + SoundUtil.playSound(player, plugin.getConfigManager().getErrorSound()); + return; + } + + SoundUtil.playSound(player, plugin.getConfigManager().getClickSound()); + + // Check if item is stackable (max stack size > 1) + int maxStackSize = selectedItem.getMaxStackSize(); + int availableQuantity = InventoryUtil.countSimilarItems(player.getInventory(), selectedItem); + + if (maxStackSize > 1 && availableQuantity > 1) { + // Stackable item with more than 1 available - show quantity selector + new QuantitySelectGui(plugin, guiManager, quantity -> { + if (quantity > 0) { + // Proceed with the selected quantity + ItemStack itemWithQuantity = selectedItem.clone(); + itemWithQuantity.setAmount(quantity); + + if (mode == SelectionMode.LISTING) { + guiManager.getCreateListingGui().openWithItem(player, playerInvSlot, itemWithQuantity); + } else { + guiManager.getCreateAuctionGui().openWithItem(player, playerInvSlot, itemWithQuantity); + } + } else { + // User cancelled - go back to item selection + open(player); + } + }, selectedItem, availableQuantity).open(player); + } else { + // Unstackable item or only 1 available - skip quantity selection + ItemStack singleItem = selectedItem.clone(); + singleItem.setAmount(1); + + if (mode == SelectionMode.LISTING) { + guiManager.getCreateListingGui().openWithItem(player, playerInvSlot, singleItem); + } else { + guiManager.getCreateAuctionGui().openWithItem(player, playerInvSlot, singleItem); + } + } + } + } + + @Override + public GuiType getType() { + return GuiType.ITEM_SELECTION; + } + + @Override + public Inventory getInventory() { + return inventory; + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/gui/MainMenuGui.java b/src/main/java/pt/henrique/communityMarket/gui/MainMenuGui.java new file mode 100644 index 0000000..c4f73fe --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/gui/MainMenuGui.java @@ -0,0 +1,261 @@ +package pt.henrique.communityMarket.gui; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import pt.henrique.communityMarket.CommunityMarket; +import pt.henrique.communityMarket.util.ItemBuilder; +import pt.henrique.communityMarket.util.SoundUtil; +import pt.henrique.communityMarket.util.TextUtil; + +import java.util.Map; + +/** + * The main menu GUI - the hub of the marketplace. + * Contains buttons for all major features. + */ +public class MainMenuGui implements MarketGui { + + private final CommunityMarket plugin; + private final GuiManager guiManager; + private Inventory inventory; + private Player player; + + // Slot positions for buttons + private static final int SLOT_BROWSE_MARKET = 10; + private static final int SLOT_BROWSE_AUCTIONS = 12; + private static final int SLOT_CREATE_LISTING = 14; + private static final int SLOT_CREATE_AUCTION = 16; + private static final int SLOT_MY_LISTINGS = 28; + private static final int SLOT_MY_AUCTIONS = 30; + private static final int SLOT_CLAIM = 32; + private static final int SLOT_EARNINGS = 34; + private static final int SLOT_HELP = 40; + private static final int SLOT_ADMIN = 44; + + public MainMenuGui(CommunityMarket plugin, GuiManager guiManager) { + this.plugin = plugin; + this.guiManager = guiManager; + } + + /** + * Opens the main menu for a player + */ + public void open(Player player) { + this.player = player; + + String title = TextUtil.colorizeToString( + plugin.getMessageManager().getRaw("gui-titles.main-menu")); + inventory = Bukkit.createInventory(this, 54, title); + + // Fill background with glass panes + ItemStack filler = new ItemBuilder(Material.GRAY_STAINED_GLASS_PANE) + .name(" ") + .build(); + for (int i = 0; i < 54; i++) { + inventory.setItem(i, filler); + } + + // Build menu items asynchronously (to get counts from DB) + buildMenuAsync(); + } + + private void buildMenuAsync() { + // Get player stats for lore + var listingCountFuture = plugin.getListingService().countPlayerListings(player.getUniqueId()); + var auctionCountFuture = plugin.getAuctionService().countPlayerAuctions(player.getUniqueId()); + var claimCountFuture = plugin.getClaimService().countPlayerClaimItems(player.getUniqueId()); + var earningsFuture = plugin.getEarningsService().getPendingEarnings(player.getUniqueId()); + + // When all futures complete, build the GUI + listingCountFuture.thenCombine(auctionCountFuture, (listingCount, auctionCount) -> + claimCountFuture.thenCombine(earningsFuture, (claimCount, earnings) -> { + // Run on main thread + Bukkit.getScheduler().runTask(plugin, () -> { + buildMenu(listingCount, auctionCount, claimCount, earnings); + player.openInventory(inventory); + guiManager.registerGui(player.getUniqueId(), this); + playSound(player, plugin.getConfigManager().getClickSound()); + }); + return null; + }) + ); + } + + private void buildMenu(int listingCount, int auctionCount, int claimCount, double earnings) { + var msgManager = plugin.getMessageManager(); + var configManager = plugin.getConfigManager(); + + // Browse Market + inventory.setItem(SLOT_BROWSE_MARKET, new ItemBuilder(Material.CHEST) + .name(msgManager.getButton("browse-market")) + .lore(msgManager.getLore("browse-market")) + .build()); + + // Browse Auctions + inventory.setItem(SLOT_BROWSE_AUCTIONS, new ItemBuilder(Material.GOLD_INGOT) + .name(msgManager.getButton("browse-auctions")) + .lore(msgManager.getLore("browse-auctions")) + .build()); + + // Create Listing + inventory.setItem(SLOT_CREATE_LISTING, new ItemBuilder(Material.WRITABLE_BOOK) + .name(msgManager.getButton("create-listing")) + .lore(msgManager.getLore("create-listing", Map.of( + "tax", String.valueOf(configManager.getMarketTax()) + ))) + .build()); + + // Create Auction + inventory.setItem(SLOT_CREATE_AUCTION, new ItemBuilder(Material.GOLDEN_HELMET) + .name(msgManager.getButton("create-auction")) + .lore(msgManager.getLore("create-auction", Map.of( + "tax", String.valueOf(configManager.getAuctionTax()) + ))) + .build()); + + // My Listings + inventory.setItem(SLOT_MY_LISTINGS, new ItemBuilder(Material.BOOK) + .name(msgManager.getButton("my-listings")) + .lore(msgManager.getLore("my-listings", Map.of( + "count", String.valueOf(listingCount), + "max", String.valueOf(configManager.getMaxListingsPerPlayer()) + ))) + .build()); + + // My Auctions + inventory.setItem(SLOT_MY_AUCTIONS, new ItemBuilder(Material.CLOCK) + .name(msgManager.getButton("my-auctions")) + .lore(msgManager.getLore("my-auctions", Map.of( + "count", String.valueOf(auctionCount), + "max", String.valueOf(configManager.getMaxAuctionsPerPlayer()) + ))) + .build()); + + // Claim Items + inventory.setItem(SLOT_CLAIM, new ItemBuilder(Material.ENDER_CHEST) + .name(msgManager.getButton("claim-items")) + .lore(msgManager.getLore("claim-items", Map.of( + "count", String.valueOf(claimCount) + ))) + .glow(claimCount > 0) // Glow if there are items to claim + .build()); + + // Earnings + inventory.setItem(SLOT_EARNINGS, new ItemBuilder(Material.EMERALD) + .name(msgManager.getButton("earnings")) + .lore(msgManager.getLore("earnings", Map.of( + "amount", msgManager.formatCurrency(earnings) + ))) + .glow(earnings > 0) // Glow if there are earnings + .build()); + + // Help (only if enabled in config) + if (configManager.isHelpButtonEnabled()) { + inventory.setItem(SLOT_HELP, new ItemBuilder(Material.OAK_SIGN) + .name(msgManager.getButton("help")) + .lore(msgManager.getLore("help")) + .build()); + } + // If help is disabled, the slot stays as glass pane (already filled) + + // Admin button (only if player has permission) + if (player.hasPermission("communitymarket.admin")) { + inventory.setItem(SLOT_ADMIN, new ItemBuilder(Material.COMMAND_BLOCK) + .name(msgManager.getButton("admin")) + .lore(msgManager.getLore("admin")) + .build()); + } + } + + @Override + public void handleClick(InventoryClickEvent event) { + event.setCancelled(true); + + if (event.getCurrentItem() == null) return; + + Player player = (Player) event.getWhoClicked(); + int slot = event.getRawSlot(); + + switch (slot) { + case SLOT_BROWSE_MARKET -> { + if (player.hasPermission("communitymarket.buy")) { + guiManager.openBrowseMarket(player, 0); + } else { + player.sendMessage(plugin.getMessageManager().getPrefixed("messages.no-permission")); + playSound(player, plugin.getConfigManager().getErrorSound()); + } + } + case SLOT_BROWSE_AUCTIONS -> { + if (player.hasPermission("communitymarket.bid")) { + guiManager.openBrowseAuctions(player, 0); + } else { + player.sendMessage(plugin.getMessageManager().getPrefixed("messages.no-permission")); + playSound(player, plugin.getConfigManager().getErrorSound()); + } + } + case SLOT_CREATE_LISTING -> { + if (player.hasPermission("communitymarket.sell")) { + guiManager.openCreateListing(player); + } else { + player.sendMessage(plugin.getMessageManager().getPrefixed("messages.no-permission")); + playSound(player, plugin.getConfigManager().getErrorSound()); + } + } + case SLOT_CREATE_AUCTION -> { + if (player.hasPermission("communitymarket.auction")) { + guiManager.openCreateAuction(player); + } else { + player.sendMessage(plugin.getMessageManager().getPrefixed("messages.no-permission")); + playSound(player, plugin.getConfigManager().getErrorSound()); + } + } + case SLOT_MY_LISTINGS -> guiManager.openMyListings(player); + case SLOT_MY_AUCTIONS -> guiManager.openMyAuctions(player); + case SLOT_CLAIM -> { + if (player.hasPermission("communitymarket.claim")) { + guiManager.openClaim(player); + } else { + player.sendMessage(plugin.getMessageManager().getPrefixed("messages.no-permission")); + playSound(player, plugin.getConfigManager().getErrorSound()); + } + } + case SLOT_EARNINGS -> { + if (player.hasPermission("communitymarket.withdraw")) { + guiManager.openEarnings(player); + } else { + player.sendMessage(plugin.getMessageManager().getPrefixed("messages.no-permission")); + playSound(player, plugin.getConfigManager().getErrorSound()); + } + } + case SLOT_HELP -> { + if (plugin.getConfigManager().isHelpButtonEnabled()) { + guiManager.openHelp(player); + } + } + case SLOT_ADMIN -> { + if (player.hasPermission("communitymarket.admin")) { + guiManager.openAdmin(player); + } + } + } + } + + private void playSound(Player player, String soundName) { + SoundUtil.playSound(player, soundName); + } + + @Override + public GuiType getType() { + return GuiType.MAIN_MENU; + } + + @Override + public @org.jetbrains.annotations.NotNull Inventory getInventory() { + return inventory; + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/gui/MarketGui.java b/src/main/java/pt/henrique/communityMarket/gui/MarketGui.java new file mode 100644 index 0000000..2078bcc --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/gui/MarketGui.java @@ -0,0 +1,85 @@ +package pt.henrique.communityMarket.gui; + +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.inventory.InventoryDragEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; +import org.jetbrains.annotations.NotNull; +import pt.henrique.communityMarket.CommunityMarket; + +/** + * Base interface for all market GUI screens. + * Implements InventoryHolder to allow identification of market inventories. + */ +public interface MarketGui extends InventoryHolder { + + /** + * Gets the GUI type identifier + */ + GuiType getType(); + + /** + * Handles a click event in this GUI + * + * @param event The click event + */ + void handleClick(InventoryClickEvent event); + + /** + * Handles a drag event in this GUI + * + * @param event The drag event + */ + default void handleDrag(InventoryDragEvent event) { + // By default, cancel all drags to prevent item manipulation + event.setCancelled(true); + } + + /** + * Handles the inventory being closed + * + * @param event The close event + */ + default void handleClose(InventoryCloseEvent event) { + // Default: do nothing special + } + + /** + * Checks if items can be moved in this GUI + * Most GUIs should return false, but create listing/auction GUIs need true + */ + default boolean allowsItemMovement() { + return false; + } + + /** + * Enum of all GUI types for identification + */ + enum GuiType { + MAIN_MENU, + BROWSE_MARKET, + BROWSE_AUCTIONS, + CREATE_LISTING, + CREATE_AUCTION, + ITEM_SELECTION, + QUANTITY_SELECT, + MY_LISTINGS, + MY_AUCTIONS, + CLAIM, + EARNINGS, + HELP, + ADMIN, + ADMIN_LISTINGS, + ADMIN_AUCTIONS, + NUMBER_INPUT, + CONFIRMATION, + LISTING_DETAILS, + AUCTION_DETAILS, + DURATION_SELECT, + FILTER_MENU, + SORT_MENU + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/gui/MyAuctionsGui.java b/src/main/java/pt/henrique/communityMarket/gui/MyAuctionsGui.java new file mode 100644 index 0000000..0274ff4 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/gui/MyAuctionsGui.java @@ -0,0 +1,192 @@ +package pt.henrique.communityMarket.gui; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import pt.henrique.communityMarket.CommunityMarket; +import pt.henrique.communityMarket.model.Auction; +import pt.henrique.communityMarket.service.AuctionService; +import pt.henrique.communityMarket.util.ItemBuilder; +import pt.henrique.communityMarket.util.TextUtil; + +import java.time.Duration; +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * GUI for viewing and managing the player's own auctions. + * Click to cancel (only if no bids). + */ +public class MyAuctionsGui implements MarketGui { + + private final CommunityMarket plugin; + private final GuiManager guiManager; + private Inventory inventory; + private Player player; + private List auctions; + + private static final int BACK_SLOT = 49; + + public MyAuctionsGui(CommunityMarket plugin, GuiManager guiManager) { + this.plugin = plugin; + this.guiManager = guiManager; + } + + public void open(Player player) { + this.player = player; + + plugin.getAuctionService().getPlayerAuctions(player.getUniqueId()) + .thenAccept(loadedAuctions -> { + this.auctions = loadedAuctions; + + Bukkit.getScheduler().runTask(plugin, () -> { + buildGui(); + player.openInventory(inventory); + guiManager.registerGui(player.getUniqueId(), this); + }); + }); + } + + private void buildGui() { + var msgManager = plugin.getMessageManager(); + + String title = TextUtil.colorizeToString(msgManager.getRaw("gui-titles.my-auctions")); + inventory = Bukkit.createInventory(this, 54, title); + + // Fill bottom + ItemStack filler = new ItemBuilder(Material.GRAY_STAINED_GLASS_PANE).name(" ").build(); + for (int i = 45; i < 54; i++) { + inventory.setItem(i, filler); + } + + // Add auctions + for (int i = 0; i < Math.min(auctions.size(), 45); i++) { + Auction auction = auctions.get(i); + inventory.setItem(i, createAuctionItem(auction)); + } + + // Back button + inventory.setItem(BACK_SLOT, new ItemBuilder(Material.BARRIER) + .name(msgManager.getButton("back")) + .build()); + } + + private ItemStack createAuctionItem(Auction auction) { + var msgManager = plugin.getMessageManager(); + + ItemStack display = auction.getItem().clone(); + + Duration remaining = Duration.between(Instant.now(), auction.getEndsAt()); + String ends = TextUtil.formatDuration(remaining); + + String bidder = auction.getHighestBidderName() != null ? auction.getHighestBidderName() : "&7None"; + String currentBid = auction.getBidCount() > 0 + ? msgManager.formatCurrency(auction.getCurrentBid()) + : "&7No bids"; + + List lore = new ArrayList<>(); + lore.add(""); + lore.addAll(msgManager.getLore("my-auction-info", Map.of( + "start_price", msgManager.formatCurrency(auction.getStartPrice()), + "current_bid", currentBid, + "bidder", bidder, + "bid_count", String.valueOf(auction.getBidCount()), + "ends", ends + ))); + + // Show if cancellable + if (auction.getBidCount() == 0) { + lore.add(""); + lore.add("&aClick to cancel"); + } else { + lore.add(""); + lore.add("&cCannot cancel - has bids"); + } + + return new ItemBuilder(display) + .addLore(lore) + .build(); + } + + @Override + public void handleClick(InventoryClickEvent event) { + event.setCancelled(true); + + Player player = (Player) event.getWhoClicked(); + int slot = event.getRawSlot(); + + if (slot == BACK_SLOT) { + guiManager.openMainMenu(player); + return; + } + + // Click on auction to cancel + if (slot >= 0 && slot < 45 && slot < auctions.size()) { + Auction auction = auctions.get(slot); + + if (auction.getBidCount() > 0) { + player.sendMessage(plugin.getMessageManager().getPrefixed("messages.auction-not-found")); + playSound(player, plugin.getConfigManager().getErrorSound()); + return; + } + + confirmCancel(player, auction); + } + } + + private void confirmCancel(Player player, Auction auction) { + var msgManager = plugin.getMessageManager(); + + String[] info = { + "&7Item: &f" + auction.getItem().getType().name(), + "&7Starting Price: &a" + msgManager.formatCurrency(auction.getStartPrice()), + "", + "&cThis will cancel your auction.", + "&cThe item will be moved to claim storage." + }; + + guiManager.openConfirmation(player, confirmed -> { + if (confirmed) { + plugin.getAuctionService().cancelAuction(auction.getId(), player.getUniqueId(), false) + .thenAccept(result -> { + Bukkit.getScheduler().runTask(plugin, () -> { + if (result == AuctionService.CancelResult.SUCCESS) { + player.sendMessage(msgManager.getPrefixed("messages.auction-cancelled")); + playSound(player, plugin.getConfigManager().getSuccessSound()); + } else if (result == AuctionService.CancelResult.HAS_BIDS) { + player.sendMessage(msgManager.getPrefixed("messages.auction-not-found")); + playSound(player, plugin.getConfigManager().getErrorSound()); + } else { + player.sendMessage(msgManager.getPrefixed("messages.auction-not-found")); + playSound(player, plugin.getConfigManager().getErrorSound()); + } + open(player); // Refresh + }); + }); + } else { + open(player); + } + }, msgManager.getRaw("gui-titles.confirm-cancel"), info); + } + + private void playSound(Player player, String soundName) { + pt.henrique.communityMarket.util.SoundUtil.playSound(player, soundName); + } + + @Override + public GuiType getType() { + return GuiType.MY_AUCTIONS; + } + + @Override + public Inventory getInventory() { + return inventory; + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/gui/MyListingsGui.java b/src/main/java/pt/henrique/communityMarket/gui/MyListingsGui.java new file mode 100644 index 0000000..deb382c --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/gui/MyListingsGui.java @@ -0,0 +1,175 @@ +package pt.henrique.communityMarket.gui; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import pt.henrique.communityMarket.CommunityMarket; +import pt.henrique.communityMarket.model.Listing; +import pt.henrique.communityMarket.util.ItemBuilder; +import pt.henrique.communityMarket.util.TextUtil; + +import java.time.Duration; +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * GUI for viewing and managing the player's own listings. + * Click on a listing to cancel it. + */ +public class MyListingsGui implements MarketGui { + + private final CommunityMarket plugin; + private final GuiManager guiManager; + private Inventory inventory; + private Player player; + private List listings; + + private static final int BACK_SLOT = 49; + + public MyListingsGui(CommunityMarket plugin, GuiManager guiManager) { + this.plugin = plugin; + this.guiManager = guiManager; + } + + public void open(Player player) { + this.player = player; + + plugin.getListingService().getPlayerListings(player.getUniqueId()) + .thenAccept(loadedListings -> { + this.listings = loadedListings; + + Bukkit.getScheduler().runTask(plugin, () -> { + buildGui(); + player.openInventory(inventory); + guiManager.registerGui(player.getUniqueId(), this); + }); + }); + } + + private void buildGui() { + var msgManager = plugin.getMessageManager(); + + String title = TextUtil.colorizeToString(msgManager.getRaw("gui-titles.my-listings")); + inventory = Bukkit.createInventory(this, 54, title); + + // Fill bottom + ItemStack filler = new ItemBuilder(Material.GRAY_STAINED_GLASS_PANE).name(" ").build(); + for (int i = 45; i < 54; i++) { + inventory.setItem(i, filler); + } + + // Add listings + for (int i = 0; i < Math.min(listings.size(), 45); i++) { + Listing listing = listings.get(i); + inventory.setItem(i, createListingItem(listing)); + } + + // Back button + inventory.setItem(BACK_SLOT, new ItemBuilder(Material.BARRIER) + .name(msgManager.getButton("back")) + .build()); + } + + private ItemStack createListingItem(Listing listing) { + var msgManager = plugin.getMessageManager(); + + ItemStack display = listing.getItem().clone(); + display.setAmount(listing.getAmount()); + + String expires; + if (listing.getExpiresAt() != null) { + Duration remaining = Duration.between(Instant.now(), listing.getExpiresAt()); + expires = TextUtil.formatDuration(remaining); + } else { + expires = "Never"; + } + + String created = TextUtil.formatDuration( + Duration.between(listing.getCreatedAt(), Instant.now())) + " ago"; + + List lore = new ArrayList<>(); + lore.add(""); + lore.addAll(msgManager.getLore("my-listing-info", Map.of( + "price", msgManager.formatCurrency(listing.getPrice()), + "amount", String.valueOf(listing.getAmount()), + "created", created, + "expires", expires + ))); + + return new ItemBuilder(display) + .addLore(lore) + .build(); + } + + @Override + public void handleClick(InventoryClickEvent event) { + event.setCancelled(true); + + Player player = (Player) event.getWhoClicked(); + int slot = event.getRawSlot(); + + if (slot == BACK_SLOT) { + guiManager.openMainMenu(player); + return; + } + + // Click on listing to cancel + if (slot >= 0 && slot < 45 && slot < listings.size()) { + Listing listing = listings.get(slot); + confirmCancel(player, listing); + } + } + + private void confirmCancel(Player player, Listing listing) { + var msgManager = plugin.getMessageManager(); + + String[] info = { + "&7Item: &f" + listing.getItem().getType().name() + " x" + listing.getAmount(), + "&7Price: &a" + msgManager.formatCurrency(listing.getPrice()), + "", + "&cThis will cancel your listing.", + "&cThe item will be moved to claim storage." + }; + + guiManager.openConfirmation(player, confirmed -> { + if (confirmed) { + plugin.getListingService().cancelListing(listing.getId(), player.getUniqueId(), false) + .thenAccept(success -> { + Bukkit.getScheduler().runTask(plugin, () -> { + if (success) { + player.sendMessage(msgManager.getPrefixed("messages.listing-cancelled")); + playSound(player, plugin.getConfigManager().getSuccessSound()); + } else { + player.sendMessage(msgManager.getPrefixed("messages.listing-not-found")); + playSound(player, plugin.getConfigManager().getErrorSound()); + } + open(player); // Refresh + }); + }); + } else { + open(player); + } + }, msgManager.getRaw("gui-titles.confirm-cancel"), info); + } + + private void playSound(Player player, String soundName) { + pt.henrique.communityMarket.util.SoundUtil.playSound(player, soundName); + } + + @Override + public GuiType getType() { + return GuiType.MY_LISTINGS; + } + + @Override + public Inventory getInventory() { + return inventory; + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/gui/NumberInputGui.java b/src/main/java/pt/henrique/communityMarket/gui/NumberInputGui.java new file mode 100644 index 0000000..844f4f0 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/gui/NumberInputGui.java @@ -0,0 +1,261 @@ +package pt.henrique.communityMarket.gui; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import pt.henrique.communityMarket.CommunityMarket; +import pt.henrique.communityMarket.util.ItemBuilder; +import pt.henrique.communityMarket.util.SoundUtil; +import pt.henrique.communityMarket.util.TextUtil; + +/** + * GUI-based numeric input to replace chat input. + * Players can increment/decrement values using buttons. + * + * Layout (54-slot chest): + * ┌─────────────────────────────────────────────────────┐ + * │ . . . . . . . . . │ Row 0: Empty │ + * │ . . . . [DISPLAY] . . . │ Row 1: Value │ + * │ . . . . . . . . . │ Row 2: Empty │ + * │ -1K -100 -10 -1 . +1 +10 +100 +1K│ Row 3: Adjust │ + * │ . MIN . . . . . MAX . │ Row 4: Presets│ + * │ BACK . . . CONFIRM . . . │ Row 5: Actions│ + * └─────────────────────────────────────────────────────┘ + */ +public class NumberInputGui implements MarketGui { + + private final CommunityMarket plugin; + private final GuiManager guiManager; + private final NumberInputCallback callback; + private final double minValue; + private final double maxValue; + private final String title; + + private Inventory inventory; + private Player player; + private double currentValue; + + // ==================== LAYOUT CONSTANTS ==================== + // Row 1: Current value display (center) + private static final int DISPLAY_SLOT = 13; + + // Row 3: Decrease buttons (LEFT side) - slots 27-30 + private static final int SUB_1000_SLOT = 27; // -1,000 + private static final int SUB_100_SLOT = 28; // -100 + private static final int SUB_10_SLOT = 29; // -10 + private static final int SUB_1_SLOT = 30; // -1 + + // Row 3: Increase buttons (RIGHT side) - slots 32-35 + private static final int ADD_1_SLOT = 32; // +1 + private static final int ADD_10_SLOT = 33; // +10 + private static final int ADD_100_SLOT = 34; // +100 + private static final int ADD_1000_SLOT = 35; // +1,000 + + // Row 4: Preset buttons + private static final int SET_MIN_SLOT = 37; // Set to minimum + private static final int SET_MAX_SLOT = 43; // Set to maximum + + // Row 5: Action buttons + private static final int BACK_SLOT = 45; // Cancel/Back (bottom-left) + private static final int CONFIRM_SLOT = 49; // Confirm (bottom-center) + // =========================================================== + + @FunctionalInterface + public interface NumberInputCallback { + void onComplete(double value); + } + + public NumberInputGui(CommunityMarket plugin, GuiManager guiManager, + NumberInputCallback callback, double currentValue, + double minValue, double maxValue, String title) { + this.plugin = plugin; + this.guiManager = guiManager; + this.callback = callback; + this.currentValue = currentValue; + this.minValue = minValue; + this.maxValue = maxValue; + this.title = title; + } + + public void open(Player player) { + this.player = player; + + inventory = Bukkit.createInventory(this, 54, TextUtil.colorizeToString(title)); + buildGui(); + player.openInventory(inventory); + guiManager.registerGui(player.getUniqueId(), this); + } + + private void buildGui() { + var msgManager = plugin.getMessageManager(); + + // Fill all slots with glass panes + ItemStack filler = new ItemBuilder(Material.GRAY_STAINED_GLASS_PANE).name(" ").build(); + for (int i = 0; i < 54; i++) { + inventory.setItem(i, filler); + } + + // Current value display (center, row 1) + updateDisplay(); + + // === DECREASE BUTTONS (LEFT SIDE) === + inventory.setItem(SUB_1000_SLOT, new ItemBuilder(Material.RED_STAINED_GLASS_PANE) + .name("&c-1,000") + .lore("&7Click: &c-1,000", "&7Shift-click: &c-10,000") + .build()); + + inventory.setItem(SUB_100_SLOT, new ItemBuilder(Material.RED_STAINED_GLASS_PANE) + .name("&c-100") + .lore("&7Click: &c-100", "&7Shift-click: &c-1,000") + .build()); + + inventory.setItem(SUB_10_SLOT, new ItemBuilder(Material.RED_STAINED_GLASS_PANE) + .name("&c-10") + .lore("&7Click: &c-10", "&7Shift-click: &c-100") + .build()); + + inventory.setItem(SUB_1_SLOT, new ItemBuilder(Material.RED_STAINED_GLASS_PANE) + .name("&c-1") + .lore("&7Click: &c-1", "&7Shift-click: &c-10") + .build()); + + // === INCREASE BUTTONS (RIGHT SIDE) === + inventory.setItem(ADD_1_SLOT, new ItemBuilder(Material.LIME_STAINED_GLASS_PANE) + .name("&a+1") + .lore("&7Click: &a+1", "&7Shift-click: &a+10") + .build()); + + inventory.setItem(ADD_10_SLOT, new ItemBuilder(Material.LIME_STAINED_GLASS_PANE) + .name("&a+10") + .lore("&7Click: &a+10", "&7Shift-click: &a+100") + .build()); + + inventory.setItem(ADD_100_SLOT, new ItemBuilder(Material.LIME_STAINED_GLASS_PANE) + .name("&a+100") + .lore("&7Click: &a+100", "&7Shift-click: &a+1,000") + .build()); + + inventory.setItem(ADD_1000_SLOT, new ItemBuilder(Material.LIME_STAINED_GLASS_PANE) + .name("&a+1,000") + .lore("&7Click: &a+1,000", "&7Shift-click: &a+10,000") + .build()); + + // === PRESET BUTTONS === + inventory.setItem(SET_MIN_SLOT, new ItemBuilder(Material.ORANGE_STAINED_GLASS_PANE) + .name("&6Set Minimum") + .lore("&7Set to: &f" + msgManager.formatCurrency(minValue)) + .build()); + + inventory.setItem(SET_MAX_SLOT, new ItemBuilder(Material.ORANGE_STAINED_GLASS_PANE) + .name("&6Set Maximum") + .lore("&7Set to: &f" + msgManager.formatCurrency(maxValue)) + .build()); + + // === ACTION BUTTONS === + inventory.setItem(BACK_SLOT, new ItemBuilder(Material.RED_WOOL) + .name(msgManager.getButton("cancel")) + .lore("&7Cancel and go back") + .build()); + + inventory.setItem(CONFIRM_SLOT, new ItemBuilder(Material.LIME_WOOL) + .name(msgManager.getButton("confirm")) + .lore("&7Confirm: &a" + msgManager.formatCurrency(currentValue)) + .build()); + } + + private void updateDisplay() { + var msgManager = plugin.getMessageManager(); + inventory.setItem(DISPLAY_SLOT, new ItemBuilder(Material.GOLD_INGOT) + .name("&6&l" + msgManager.formatCurrency(currentValue)) + .lore( + "", + "&7Minimum: &f" + msgManager.formatCurrency(minValue), + "&7Maximum: &f" + msgManager.formatCurrency(maxValue), + "", + "&eUse buttons to adjust" + ) + .glow() + .build()); + + // Also update confirm button lore + inventory.setItem(CONFIRM_SLOT, new ItemBuilder(Material.LIME_WOOL) + .name(plugin.getMessageManager().getButton("confirm")) + .lore("&7Confirm: &a" + msgManager.formatCurrency(currentValue)) + .build()); + } + + @Override + public void handleClick(InventoryClickEvent event) { + event.setCancelled(true); + + Player player = (Player) event.getWhoClicked(); + int slot = event.getRawSlot(); + boolean shift = event.isShiftClick(); + + // Multiplier for shift-click (10x) + double multiplier = shift ? 10 : 1; + + switch (slot) { + // Decrease buttons + case SUB_1000_SLOT -> adjustValue(-1000 * multiplier); + case SUB_100_SLOT -> adjustValue(-100 * multiplier); + case SUB_10_SLOT -> adjustValue(-10 * multiplier); + case SUB_1_SLOT -> adjustValue(-1 * multiplier); + + // Increase buttons + case ADD_1_SLOT -> adjustValue(1 * multiplier); + case ADD_10_SLOT -> adjustValue(10 * multiplier); + case ADD_100_SLOT -> adjustValue(100 * multiplier); + case ADD_1000_SLOT -> adjustValue(1000 * multiplier); + + // Preset buttons + case SET_MIN_SLOT -> { + currentValue = minValue; + updateDisplay(); + SoundUtil.playSound(player, plugin.getConfigManager().getClickSound()); + } + case SET_MAX_SLOT -> { + currentValue = maxValue; + updateDisplay(); + SoundUtil.playSound(player, plugin.getConfigManager().getClickSound()); + } + + // Action buttons + case CONFIRM_SLOT -> { + SoundUtil.playSound(player, plugin.getConfigManager().getSuccessSound()); + player.closeInventory(); + callback.onComplete(currentValue); + } + case BACK_SLOT -> { + player.closeInventory(); + callback.onComplete(-1); // Signal cancellation + } + } + } + + private void adjustValue(double delta) { + double newValue = currentValue + delta; + + // Clamp to min/max + newValue = Math.max(minValue, Math.min(maxValue, newValue)); + + // Round to 2 decimal places + currentValue = Math.round(newValue * 100.0) / 100.0; + + updateDisplay(); + SoundUtil.playSound(player, plugin.getConfigManager().getClickSound(), 0.3f, 1.2f); + } + + @Override + public GuiType getType() { + return GuiType.NUMBER_INPUT; + } + + @Override + public Inventory getInventory() { + return inventory; + } +} diff --git a/src/main/java/pt/henrique/communityMarket/gui/QuantitySelectGui.java b/src/main/java/pt/henrique/communityMarket/gui/QuantitySelectGui.java new file mode 100644 index 0000000..157162b --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/gui/QuantitySelectGui.java @@ -0,0 +1,323 @@ +package pt.henrique.communityMarket.gui; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import pt.henrique.communityMarket.CommunityMarket; +import pt.henrique.communityMarket.util.ItemBuilder; +import pt.henrique.communityMarket.util.InventoryUtil; +import pt.henrique.communityMarket.util.SoundUtil; +import pt.henrique.communityMarket.util.TextUtil; + +/** + * GUI for selecting quantity of an item to list or auction. + * Only shown for stackable items; unstackable items skip this step. + * + * Layout (54-slot chest): + * ┌─────────────────────────────────────────────────────┐ + * │ . . . . INFO . . . . │ Row 0 │ + * │ . . . . ITEM . . . . │ Row 1: Item │ + * │ . . . . DISPLAY . . . . │ Row 2: Qty │ + * │ -64 -32 -16 -1 . +1 +16 +32 +64 │ Row 3: Adjust│ + * │ . MIN . . . . . MAX . │ Row 4: Preset│ + * │ BACK . . . CONFIRM . . . .│ Row 5: Action│ + * └─────────────────────────────────────────────────────┘ + */ +public class QuantitySelectGui implements MarketGui { + + private final CommunityMarket plugin; + private final GuiManager guiManager; + private final QuantityCallback callback; + private final ItemStack selectedItem; + private final int maxQuantity; + + private Inventory inventory; + private Player player; + private int currentQuantity; + + // ==================== LAYOUT CONSTANTS ==================== + private static final int INFO_SLOT = 4; // Top center info + private static final int ITEM_DISPLAY_SLOT = 13; // Item preview + private static final int QUANTITY_DISPLAY_SLOT = 22; // Current quantity display + + // Row 3: Decrease buttons (LEFT side) - slots 27-30 + private static final int SUB_64_SLOT = 27; // -64 + private static final int SUB_32_SLOT = 28; // -32 + private static final int SUB_16_SLOT = 29; // -16 + private static final int SUB_1_SLOT = 30; // -1 + + // Row 3: Increase buttons (RIGHT side) - slots 32-35 + private static final int ADD_1_SLOT = 32; // +1 + private static final int ADD_16_SLOT = 33; // +16 + private static final int ADD_32_SLOT = 34; // +32 + private static final int ADD_64_SLOT = 35; // +64 + + // Row 4: Preset buttons + private static final int SET_MIN_SLOT = 37; // Set to 1 + private static final int SET_MAX_SLOT = 43; // Set to max + + // Row 5: Action buttons + private static final int BACK_SLOT = 45; // Cancel/Back + private static final int CONFIRM_SLOT = 49; // Confirm + // =========================================================== + + @FunctionalInterface + public interface QuantityCallback { + void onComplete(int quantity); + } + + public QuantitySelectGui(CommunityMarket plugin, GuiManager guiManager, + QuantityCallback callback, ItemStack selectedItem, + int maxQuantity) { + this.plugin = plugin; + this.guiManager = guiManager; + this.callback = callback; + this.selectedItem = selectedItem; + this.maxQuantity = maxQuantity; + this.currentQuantity = Math.min(selectedItem.getAmount(), maxQuantity); + } + + public void open(Player player) { + this.player = player; + + var msgManager = plugin.getMessageManager(); + String title = TextUtil.colorizeToString(msgManager.getRaw("gui-titles.quantity-select")); + inventory = Bukkit.createInventory(this, 54, title); + + buildGui(); + player.openInventory(inventory); + guiManager.registerGui(player.getUniqueId(), this); + } + + private void buildGui() { + var msgManager = plugin.getMessageManager(); + + // Fill with glass + ItemStack filler = new ItemBuilder(Material.GRAY_STAINED_GLASS_PANE).name(" ").build(); + for (int i = 0; i < 54; i++) { + inventory.setItem(i, filler); + } + + // Info panel + inventory.setItem(INFO_SLOT, new ItemBuilder(Material.OAK_SIGN) + .name("&6&lSelect Quantity") + .lore( + "&7Choose how many items", + "&7you want to sell.", + "", + "&7Available: &f" + maxQuantity + ) + .build()); + + // Item preview + ItemStack displayItem = selectedItem.clone(); + displayItem.setAmount(currentQuantity); + inventory.setItem(ITEM_DISPLAY_SLOT, new ItemBuilder(displayItem) + .addLore(java.util.List.of( + "", + "&7Selected: &f" + currentQuantity + )) + .build()); + + // Quantity display + updateQuantityDisplay(); + + // === DECREASE BUTTONS (LEFT SIDE) === + inventory.setItem(SUB_64_SLOT, new ItemBuilder(Material.RED_STAINED_GLASS_PANE) + .name("&c-64") + .lore("&7Click: &c-64") + .amount(64) + .build()); + + inventory.setItem(SUB_32_SLOT, new ItemBuilder(Material.RED_STAINED_GLASS_PANE) + .name("&c-32") + .lore("&7Click: &c-32") + .amount(32) + .build()); + + inventory.setItem(SUB_16_SLOT, new ItemBuilder(Material.RED_STAINED_GLASS_PANE) + .name("&c-16") + .lore("&7Click: &c-16") + .amount(16) + .build()); + + inventory.setItem(SUB_1_SLOT, new ItemBuilder(Material.RED_STAINED_GLASS_PANE) + .name("&c-1") + .lore("&7Click: &c-1") + .build()); + + // === INCREASE BUTTONS (RIGHT SIDE) === + inventory.setItem(ADD_1_SLOT, new ItemBuilder(Material.LIME_STAINED_GLASS_PANE) + .name("&a+1") + .lore("&7Click: &a+1") + .build()); + + inventory.setItem(ADD_16_SLOT, new ItemBuilder(Material.LIME_STAINED_GLASS_PANE) + .name("&a+16") + .lore("&7Click: &a+16") + .amount(16) + .build()); + + inventory.setItem(ADD_32_SLOT, new ItemBuilder(Material.LIME_STAINED_GLASS_PANE) + .name("&a+32") + .lore("&7Click: &a+32") + .amount(32) + .build()); + + inventory.setItem(ADD_64_SLOT, new ItemBuilder(Material.LIME_STAINED_GLASS_PANE) + .name("&a+64") + .lore("&7Click: &a+64") + .amount(64) + .build()); + + // === PRESET BUTTONS === + inventory.setItem(SET_MIN_SLOT, new ItemBuilder(Material.ORANGE_STAINED_GLASS_PANE) + .name("&6Set Minimum") + .lore("&7Set to: &f1") + .build()); + + inventory.setItem(SET_MAX_SLOT, new ItemBuilder(Material.ORANGE_STAINED_GLASS_PANE) + .name("&6Set Maximum") + .lore("&7Set to: &f" + maxQuantity) + .build()); + + // === ACTION BUTTONS === + inventory.setItem(BACK_SLOT, new ItemBuilder(Material.RED_WOOL) + .name(msgManager.getButton("back")) + .lore("&7Return to item selection") + .build()); + + updateConfirmButton(); + } + + private void updateQuantityDisplay() { + inventory.setItem(QUANTITY_DISPLAY_SLOT, new ItemBuilder(Material.PAPER) + .name("&6&lQuantity: " + currentQuantity) + .lore( + "", + "&7Minimum: &f1", + "&7Maximum: &f" + maxQuantity, + "", + "&eUse buttons to adjust" + ) + .amount(Math.min(currentQuantity, 64)) + .glow() + .build()); + + // Update item display amount + ItemStack displayItem = selectedItem.clone(); + displayItem.setAmount(Math.min(currentQuantity, 64)); + inventory.setItem(ITEM_DISPLAY_SLOT, new ItemBuilder(displayItem) + .addLore(java.util.List.of( + "", + "&7Selected: &f" + currentQuantity + )) + .build()); + } + + private void updateConfirmButton() { + var msgManager = plugin.getMessageManager(); + inventory.setItem(CONFIRM_SLOT, new ItemBuilder(Material.LIME_WOOL) + .name(msgManager.getButton("confirm")) + .lore("&7Quantity: &a" + currentQuantity) + .build()); + } + + @Override + public void handleClick(InventoryClickEvent event) { + event.setCancelled(true); + + Player player = (Player) event.getWhoClicked(); + int slot = event.getRawSlot(); + + switch (slot) { + // Decrease buttons + case SUB_64_SLOT -> adjustQuantity(-64); + case SUB_32_SLOT -> adjustQuantity(-32); + case SUB_16_SLOT -> adjustQuantity(-16); + case SUB_1_SLOT -> adjustQuantity(-1); + + // Increase buttons + case ADD_1_SLOT -> adjustQuantity(1); + case ADD_16_SLOT -> adjustQuantity(16); + case ADD_32_SLOT -> adjustQuantity(32); + case ADD_64_SLOT -> adjustQuantity(64); + + // Preset buttons + case SET_MIN_SLOT -> { + currentQuantity = 1; + updateQuantityDisplay(); + updateConfirmButton(); + SoundUtil.playSound(player, plugin.getConfigManager().getClickSound()); + } + case SET_MAX_SLOT -> { + currentQuantity = maxQuantity; + updateQuantityDisplay(); + updateConfirmButton(); + SoundUtil.playSound(player, plugin.getConfigManager().getClickSound()); + } + + // Action buttons + case CONFIRM_SLOT -> { + // Validate quantity is still valid + int currentAvailable = countAvailableItems(player); + if (currentQuantity > currentAvailable) { + player.sendMessage(plugin.getMessageManager().getPrefixed("messages.quantity-changed")); + currentQuantity = Math.min(currentQuantity, currentAvailable); + if (currentQuantity < 1) { + player.sendMessage(plugin.getMessageManager().getPrefixed("messages.item-no-longer-available")); + SoundUtil.playSound(player, plugin.getConfigManager().getErrorSound()); + player.closeInventory(); + return; + } + updateQuantityDisplay(); + updateConfirmButton(); + SoundUtil.playSound(player, plugin.getConfigManager().getErrorSound()); + return; + } + + SoundUtil.playSound(player, plugin.getConfigManager().getSuccessSound()); + player.closeInventory(); + callback.onComplete(currentQuantity); + } + case BACK_SLOT -> { + player.closeInventory(); + callback.onComplete(-1); // Signal cancellation + } + } + } + + private void adjustQuantity(int delta) { + int newQuantity = currentQuantity + delta; + + // Clamp to 1..maxQuantity + newQuantity = Math.max(1, Math.min(maxQuantity, newQuantity)); + + currentQuantity = newQuantity; + updateQuantityDisplay(); + updateConfirmButton(); + SoundUtil.playSound(player, plugin.getConfigManager().getClickSound(), 0.3f, 1.2f); + } + + /** + * Counts how many of the selected item the player currently has. + * Uses strict item comparison including all metadata. + */ + private int countAvailableItems(Player player) { + return InventoryUtil.countSimilarItems(player.getInventory(), selectedItem); + } + + @Override + public GuiType getType() { + return GuiType.QUANTITY_SELECT; + } + + @Override + public Inventory getInventory() { + return inventory; + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/listener/GuiListener.java b/src/main/java/pt/henrique/communityMarket/listener/GuiListener.java new file mode 100644 index 0000000..21b46e5 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/listener/GuiListener.java @@ -0,0 +1,141 @@ +package pt.henrique.communityMarket.listener; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.*; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; +import pt.henrique.communityMarket.CommunityMarket; +import pt.henrique.communityMarket.gui.MarketGui; + +/** + * Listener for all GUI-related inventory events. + * Handles clicks, drags, and closes for market GUIs. + * Implements security measures to prevent item duplication exploits. + */ +public class GuiListener implements Listener { + + private final CommunityMarket plugin; + + public GuiListener(CommunityMarket plugin) { + this.plugin = plugin; + } + + /** + * Handles all click events in market GUIs. + * Security: Validates all click actions and prevents item manipulation. + */ + @EventHandler(priority = EventPriority.HIGH) + public void onInventoryClick(InventoryClickEvent event) { + if (!(event.getWhoClicked() instanceof Player player)) return; + + Inventory topInventory = event.getView().getTopInventory(); + InventoryHolder holder = topInventory.getHolder(); + + // Check if this is a market GUI + if (!(holder instanceof MarketGui marketGui)) return; + + // Get the clicked inventory + Inventory clickedInventory = event.getClickedInventory(); + + // Handle different GUI types + if (marketGui.allowsItemMovement()) { + // GUIs like CreateListing allow item placement in specific slots + handleItemMovementGui(event, marketGui); + } else { + // Standard GUIs don't allow any item movement + event.setCancelled(true); + } + + // Always delegate to the GUI's click handler + marketGui.handleClick(event); + } + + /** + * Handles GUIs that allow item movement (like create listing/auction). + * Only allows items in designated slots. + */ + private void handleItemMovementGui(InventoryClickEvent event, MarketGui marketGui) { + // Cancel by default - the GUI handler will un-cancel for specific slots + ClickType clickType = event.getClick(); + + // Block potentially exploitative click types + switch (clickType) { + case DOUBLE_CLICK -> { + // Prevent collecting items from market GUI via double-click + event.setCancelled(true); + } + case NUMBER_KEY -> { + // Block number key swaps to prevent inventory tricks + if (event.getRawSlot() < event.getView().getTopInventory().getSize()) { + // Allow in player inventory, cancel in market GUI + // The specific GUI handler will manage this + } + } + case SWAP_OFFHAND -> { + event.setCancelled(true); + } + default -> { + // Let the GUI handler decide + } + } + } + + /** + * Handles drag events - prevents dragging items across market GUIs. + */ + @EventHandler(priority = EventPriority.HIGH) + public void onInventoryDrag(InventoryDragEvent event) { + if (!(event.getWhoClicked() instanceof Player)) return; + + Inventory topInventory = event.getView().getTopInventory(); + InventoryHolder holder = topInventory.getHolder(); + + if (!(holder instanceof MarketGui marketGui)) return; + + // Check if any dragged slots are in the top inventory + int topSize = topInventory.getSize(); + boolean affectsTop = event.getRawSlots().stream() + .anyMatch(slot -> slot < topSize); + + if (affectsTop) { + // Delegate to GUI handler (most will cancel) + marketGui.handleDrag(event); + } + } + + /** + * Handles inventory close events. + * Ensures items are returned and GUI state is cleaned up. + */ + @EventHandler(priority = EventPriority.MONITOR) + public void onInventoryClose(InventoryCloseEvent event) { + if (!(event.getPlayer() instanceof Player player)) return; + + Inventory inventory = event.getInventory(); + InventoryHolder holder = inventory.getHolder(); + + if (!(holder instanceof MarketGui marketGui)) return; + + // Notify the GUI of the close + marketGui.handleClose(event); + + // Unregister from GUI manager + plugin.getGuiManager().unregisterGui(player.getUniqueId()); + } + + /** + * Prevents moving items out of market GUIs via shift-click from player inventory. + */ + @EventHandler(priority = EventPriority.HIGH) + public void onInventoryMoveItem(InventoryMoveItemEvent event) { + // This handles hopper/dropper interactions - cancel if involves market GUI + if (event.getSource().getHolder() instanceof MarketGui || + event.getDestination().getHolder() instanceof MarketGui) { + event.setCancelled(true); + } + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/listener/PlayerListener.java b/src/main/java/pt/henrique/communityMarket/listener/PlayerListener.java new file mode 100644 index 0000000..dfdf6d5 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/listener/PlayerListener.java @@ -0,0 +1,84 @@ +package pt.henrique.communityMarket.listener; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import pt.henrique.communityMarket.CommunityMarket; + +/** + * Listener for player join/quit events. + * Notifies players of pending items and earnings on join. + */ +public class PlayerListener implements Listener { + + private final CommunityMarket plugin; + + public PlayerListener(CommunityMarket plugin) { + this.plugin = plugin; + } + + /** + * Notifies players of pending claims and earnings when they join. + */ + @EventHandler(priority = EventPriority.MONITOR) + public void onPlayerJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + + // Delay notification slightly to ensure player is fully loaded + plugin.getServer().getScheduler().runTaskLater(plugin, () -> { + if (!player.isOnline()) return; + + notifyPendingItems(player); + }, 40L); // 2 second delay + } + + /** + * Cleans up when a player quits. + */ + @EventHandler(priority = EventPriority.MONITOR) + public void onPlayerQuit(PlayerQuitEvent event) { + Player player = event.getPlayer(); + + // Close any open market GUI to prevent issues + if (plugin.getGuiManager().hasGuiOpen(player.getUniqueId())) { + player.closeInventory(); + } + } + + /** + * Notifies a player about pending claims and earnings. + */ + private void notifyPendingItems(Player player) { + var msgManager = plugin.getMessageManager(); + + // Check for pending claim items + plugin.getClaimService().countPlayerClaimItems(player.getUniqueId()) + .thenAccept(claimCount -> { + if (claimCount > 0) { + plugin.getServer().getScheduler().runTask(plugin, () -> { + if (player.isOnline()) { + player.sendMessage(msgManager.getPrefixed("messages.claim-items", + java.util.Map.of("count", String.valueOf(claimCount)))); + } + }); + } + }); + + // Check for pending earnings + plugin.getEarningsService().getPendingEarnings(player.getUniqueId()) + .thenAccept(earnings -> { + if (earnings > 0) { + plugin.getServer().getScheduler().runTask(plugin, () -> { + if (player.isOnline()) { + player.sendMessage(msgManager.getPrefixed("messages.earnings-balance", + "amount", msgManager.formatCurrency(earnings))); + } + }); + } + }); + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/model/Auction.java b/src/main/java/pt/henrique/communityMarket/model/Auction.java new file mode 100644 index 0000000..296b85a --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/model/Auction.java @@ -0,0 +1,200 @@ +package pt.henrique.communityMarket.model; + +import org.bukkit.inventory.ItemStack; + +import java.time.Instant; +import java.util.UUID; + +/** + * Represents an auction listing + */ +public class Auction { + + private int id; + private UUID sellerUuid; + private String sellerName; + private ItemStack item; + private double startPrice; + private double currentBid; + private UUID highestBidderUuid; + private String highestBidderName; + private int bidCount; + private Double buyoutPrice; // nullable + private Instant createdAt; + private Instant endsAt; + private int extensionCount; + private AuctionStatus status; + + public Auction() { + this.status = AuctionStatus.ACTIVE; + this.createdAt = Instant.now(); + this.bidCount = 0; + this.extensionCount = 0; + this.currentBid = 0; + } + + public Auction(UUID sellerUuid, String sellerName, ItemStack item, double startPrice, Double buyoutPrice, Instant endsAt) { + this(); + this.sellerUuid = sellerUuid; + this.sellerName = sellerName; + this.item = item; + this.startPrice = startPrice; + this.buyoutPrice = buyoutPrice; + this.endsAt = endsAt; + } + + // Getters and Setters + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public UUID getSellerUuid() { + return sellerUuid; + } + + public void setSellerUuid(UUID sellerUuid) { + this.sellerUuid = sellerUuid; + } + + public String getSellerName() { + return sellerName; + } + + public void setSellerName(String sellerName) { + this.sellerName = sellerName; + } + + public ItemStack getItem() { + return item; + } + + public void setItem(ItemStack item) { + this.item = item; + } + + public double getStartPrice() { + return startPrice; + } + + public void setStartPrice(double startPrice) { + this.startPrice = startPrice; + } + + public double getCurrentBid() { + return currentBid; + } + + public void setCurrentBid(double currentBid) { + this.currentBid = currentBid; + } + + public UUID getHighestBidderUuid() { + return highestBidderUuid; + } + + public void setHighestBidderUuid(UUID highestBidderUuid) { + this.highestBidderUuid = highestBidderUuid; + } + + public String getHighestBidderName() { + return highestBidderName; + } + + public void setHighestBidderName(String highestBidderName) { + this.highestBidderName = highestBidderName; + } + + public int getBidCount() { + return bidCount; + } + + public void setBidCount(int bidCount) { + this.bidCount = bidCount; + } + + public Double getBuyoutPrice() { + return buyoutPrice; + } + + public void setBuyoutPrice(Double buyoutPrice) { + this.buyoutPrice = buyoutPrice; + } + + public boolean hasBuyout() { + return buyoutPrice != null && buyoutPrice > 0; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } + + public Instant getEndsAt() { + return endsAt; + } + + public void setEndsAt(Instant endsAt) { + this.endsAt = endsAt; + } + + public int getExtensionCount() { + return extensionCount; + } + + public void setExtensionCount(int extensionCount) { + this.extensionCount = extensionCount; + } + + public void incrementExtensionCount() { + this.extensionCount++; + } + + public AuctionStatus getStatus() { + return status; + } + + public void setStatus(AuctionStatus status) { + this.status = status; + } + + public boolean isEnded() { + return Instant.now().isAfter(endsAt); + } + + public boolean isActive() { + return status == AuctionStatus.ACTIVE && !isEnded(); + } + + public boolean hasBids() { + return bidCount > 0; + } + + public double getEffectivePrice() { + return hasBids() ? currentBid : startPrice; + } + + public double getMinimumBid(double minIncrementPercent, double minIncrementAbsolute) { + if (!hasBids()) { + return startPrice; + } + double percentIncrement = currentBid * (minIncrementPercent / 100.0); + return currentBid + Math.max(percentIncrement, minIncrementAbsolute); + } + + public enum AuctionStatus { + ACTIVE, + ENDED, + SOLD, + CANCELLED, + EXPIRED, + NO_BIDS + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/model/Bid.java b/src/main/java/pt/henrique/communityMarket/model/Bid.java new file mode 100644 index 0000000..d6a2ae0 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/model/Bid.java @@ -0,0 +1,79 @@ +package pt.henrique.communityMarket.model; + +import java.time.Instant; +import java.util.UUID; + +/** + * Represents a bid on an auction + */ +public class Bid { + + private int id; + private int auctionId; + private UUID bidderUuid; + private String bidderName; + private double amount; + private Instant createdAt; + + public Bid() { + this.createdAt = Instant.now(); + } + + public Bid(int auctionId, UUID bidderUuid, String bidderName, double amount) { + this(); + this.auctionId = auctionId; + this.bidderUuid = bidderUuid; + this.bidderName = bidderName; + this.amount = amount; + } + + // Getters and Setters + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public int getAuctionId() { + return auctionId; + } + + public void setAuctionId(int auctionId) { + this.auctionId = auctionId; + } + + public UUID getBidderUuid() { + return bidderUuid; + } + + public void setBidderUuid(UUID bidderUuid) { + this.bidderUuid = bidderUuid; + } + + public String getBidderName() { + return bidderName; + } + + public void setBidderName(String bidderName) { + this.bidderName = bidderName; + } + + public double getAmount() { + return amount; + } + + public void setAmount(double amount) { + this.amount = amount; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/model/ClaimItem.java b/src/main/java/pt/henrique/communityMarket/model/ClaimItem.java new file mode 100644 index 0000000..64a20d8 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/model/ClaimItem.java @@ -0,0 +1,102 @@ +package pt.henrique.communityMarket.model; + +import org.bukkit.inventory.ItemStack; + +import java.time.Instant; +import java.util.UUID; + +/** + * Represents an item in claim storage waiting to be claimed by a player + */ +public class ClaimItem { + + private int id; + private UUID playerUuid; + private ItemStack item; + private ClaimReason reason; + private String sourceInfo; // Additional info like listing ID, auction ID, etc. + private Instant createdAt; + + public ClaimItem() { + this.createdAt = Instant.now(); + } + + public ClaimItem(UUID playerUuid, ItemStack item, ClaimReason reason, String sourceInfo) { + this(); + this.playerUuid = playerUuid; + this.item = item; + this.reason = reason; + this.sourceInfo = sourceInfo; + } + + // Getters and Setters + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public UUID getPlayerUuid() { + return playerUuid; + } + + public void setPlayerUuid(UUID playerUuid) { + this.playerUuid = playerUuid; + } + + public ItemStack getItem() { + return item; + } + + public void setItem(ItemStack item) { + this.item = item; + } + + public ClaimReason getReason() { + return reason; + } + + public void setReason(ClaimReason reason) { + this.reason = reason; + } + + public String getSourceInfo() { + return sourceInfo; + } + + public void setSourceInfo(String sourceInfo) { + this.sourceInfo = sourceInfo; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } + + public enum ClaimReason { + EXPIRED_LISTING("Expired Listing"), + CANCELLED_LISTING("Cancelled Listing"), + WON_AUCTION("Won Auction"), + AUCTION_NO_BIDS("Auction Ended (No Bids)"), + CANCELLED_AUCTION("Cancelled Auction"), + PURCHASE_FULL_INVENTORY("Purchase (Inventory Full)"), + OUTBID_REFUND("Outbid Refund"), + ADMIN_RETURN("Admin Return"); + + private final String displayName; + + ClaimReason(String displayName) { + this.displayName = displayName; + } + + public String getDisplayName() { + return displayName; + } + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/model/Listing.java b/src/main/java/pt/henrique/communityMarket/model/Listing.java new file mode 100644 index 0000000..2698725 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/model/Listing.java @@ -0,0 +1,126 @@ +package pt.henrique.communityMarket.model; + +import org.bukkit.inventory.ItemStack; + +import java.time.Instant; +import java.util.UUID; + +/** + * Represents a fixed-price market listing + */ +public class Listing { + + private int id; + private UUID sellerUuid; + private String sellerName; + private ItemStack item; + private int amount; + private double price; + private Instant createdAt; + private Instant expiresAt; + private ListingStatus status; + + public Listing() { + this.status = ListingStatus.ACTIVE; + this.createdAt = Instant.now(); + } + + public Listing(UUID sellerUuid, String sellerName, ItemStack item, int amount, double price, Instant expiresAt) { + this(); + this.sellerUuid = sellerUuid; + this.sellerName = sellerName; + this.item = item; + this.amount = amount; + this.price = price; + this.expiresAt = expiresAt; + } + + // Getters and Setters + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public UUID getSellerUuid() { + return sellerUuid; + } + + public void setSellerUuid(UUID sellerUuid) { + this.sellerUuid = sellerUuid; + } + + public String getSellerName() { + return sellerName; + } + + public void setSellerName(String sellerName) { + this.sellerName = sellerName; + } + + public ItemStack getItem() { + return item; + } + + public void setItem(ItemStack item) { + this.item = item; + } + + public int getAmount() { + return amount; + } + + public void setAmount(int amount) { + this.amount = amount; + } + + public double getPrice() { + return price; + } + + public void setPrice(double price) { + this.price = price; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } + + public Instant getExpiresAt() { + return expiresAt; + } + + public void setExpiresAt(Instant expiresAt) { + this.expiresAt = expiresAt; + } + + public ListingStatus getStatus() { + return status; + } + + public void setStatus(ListingStatus status) { + this.status = status; + } + + public boolean isExpired() { + return expiresAt != null && Instant.now().isAfter(expiresAt); + } + + public boolean isActive() { + return status == ListingStatus.ACTIVE && !isExpired(); + } + + public enum ListingStatus { + ACTIVE, + SOLD, + EXPIRED, + CANCELLED + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/model/PendingEarnings.java b/src/main/java/pt/henrique/communityMarket/model/PendingEarnings.java new file mode 100644 index 0000000..8b6bed2 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/model/PendingEarnings.java @@ -0,0 +1,79 @@ +package pt.henrique.communityMarket.model; + +import java.time.Instant; +import java.util.UUID; + +/** + * Represents pending earnings that a player can withdraw + */ +public class PendingEarnings { + + private int id; + private UUID playerUuid; + private double amount; + private String source; // e.g., "Listing #123", "Auction #456" + private Instant createdAt; + private boolean withdrawn; + + public PendingEarnings() { + this.createdAt = Instant.now(); + this.withdrawn = false; + } + + public PendingEarnings(UUID playerUuid, double amount, String source) { + this(); + this.playerUuid = playerUuid; + this.amount = amount; + this.source = source; + } + + // Getters and Setters + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public UUID getPlayerUuid() { + return playerUuid; + } + + public void setPlayerUuid(UUID playerUuid) { + this.playerUuid = playerUuid; + } + + public double getAmount() { + return amount; + } + + public void setAmount(double amount) { + this.amount = amount; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } + + public boolean isWithdrawn() { + return withdrawn; + } + + public void setWithdrawn(boolean withdrawn) { + this.withdrawn = withdrawn; + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/service/AuctionService.java b/src/main/java/pt/henrique/communityMarket/service/AuctionService.java new file mode 100644 index 0000000..3b0eef4 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/service/AuctionService.java @@ -0,0 +1,473 @@ +package pt.henrique.communityMarket.service; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import pt.henrique.communityMarket.CommunityMarket; +import pt.henrique.communityMarket.model.Auction; +import pt.henrique.communityMarket.model.Bid; +import pt.henrique.communityMarket.model.ClaimItem; +import pt.henrique.communityMarket.model.PendingEarnings; + +import java.time.Instant; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Service layer for managing auctions. + * Handles creation, bidding, buyout, and auction end processing. + */ +public class AuctionService { + + private final CommunityMarket plugin; + + // Simple cache for active auctions + private List cachedAuctions; + private long cacheExpiry = 0; + + // Track pending operations to prevent race conditions + private final Map pendingBids = new ConcurrentHashMap<>(); + + public AuctionService(CommunityMarket plugin) { + this.plugin = plugin; + } + + /** + * Creates a new auction + * + * @param player The seller + * @param item The item to auction + * @param startPrice Starting bid price + * @param buyoutPrice Optional buyout price (null for no buyout) + * @param durationHours Duration in hours + * @return CompletableFuture with the auction ID or -1 if failed + */ + public CompletableFuture createAuction(Player player, ItemStack item, double startPrice, + Double buyoutPrice, int durationHours) { + // Validate + if (item == null || item.getType().isAir()) { + return CompletableFuture.completedFuture(-1); + } + + if (plugin.getConfigManager().isMaterialBlacklisted(item.getType())) { + return CompletableFuture.completedFuture(-1); + } + + // Create auction object + Auction auction = new Auction( + player.getUniqueId(), + player.getName(), + item.clone(), + startPrice, + buyoutPrice, + Instant.now().plusSeconds(durationHours * 3600L) + ); + + // Save to database + return plugin.getDatabaseManager().createAuction(auction) + .thenApply(id -> { + if (id > 0) { + invalidateCache(); + } + return id; + }); + } + + /** + * Gets all active auctions with caching + */ + public CompletableFuture> getActiveAuctions() { + long now = System.currentTimeMillis(); + + if (cachedAuctions != null && now < cacheExpiry) { + return CompletableFuture.completedFuture(cachedAuctions); + } + + return plugin.getDatabaseManager().getActiveAuctions() + .thenApply(auctions -> { + cachedAuctions = auctions; + cacheExpiry = System.currentTimeMillis() + + (plugin.getConfigManager().getCacheDuration() * 1000L); + return auctions; + }); + } + + /** + * Gets a specific auction by ID + */ + public CompletableFuture> getAuction(int id) { + return plugin.getDatabaseManager().getAuction(id); + } + + /** + * Gets all auctions for a specific player + */ + public CompletableFuture> getPlayerAuctions(UUID playerUuid) { + return plugin.getDatabaseManager().getPlayerAuctions(playerUuid); + } + + /** + * Counts active auctions for a player + */ + public CompletableFuture countPlayerAuctions(UUID playerUuid) { + return plugin.getDatabaseManager().countPlayerAuctions(playerUuid); + } + + /** + * Checks if a player can create a new auction (not at limit) + */ + public CompletableFuture canCreateAuction(UUID playerUuid) { + int maxAuctions = plugin.getConfigManager().getMaxAuctionsPerPlayer(); + + return countPlayerAuctions(playerUuid) + .thenApply(count -> count < maxAuctions); + } + + /** + * Calculates the minimum bid for an auction + * + * @param auction The auction + * @return Minimum bid amount + */ + public double calculateMinBid(Auction auction) { + return auction.getMinimumBid( + plugin.getConfigManager().getMinBidIncrementPercent(), + plugin.getConfigManager().getMinBidIncrementAbsolute() + ); + } + + /** + * Places a bid on an auction + * + * @param auctionId The auction to bid on + * @param bidder The bidder + * @param amount The bid amount + * @return CompletableFuture with bid result + */ + public CompletableFuture placeBid(int auctionId, Player bidder, double amount) { + // Check if already processing this auction + if (pendingBids.putIfAbsent(auctionId, true) != null) { + return CompletableFuture.completedFuture(BidResult.ALREADY_PROCESSING); + } + + try { + return getAuction(auctionId) + .thenCompose(optAuction -> { + if (optAuction.isEmpty()) { + pendingBids.remove(auctionId); + return CompletableFuture.completedFuture(BidResult.NOT_FOUND); + } + + Auction auction = optAuction.get(); + + // Can't bid on own auction + if (auction.getSellerUuid().equals(bidder.getUniqueId())) { + pendingBids.remove(auctionId); + return CompletableFuture.completedFuture(BidResult.OWN_AUCTION); + } + + // Check bid amount + double minBid = calculateMinBid(auction); + if (amount < minBid) { + pendingBids.remove(auctionId); + return CompletableFuture.completedFuture(BidResult.BID_TOO_LOW); + } + + // Check bidder funds + if (!plugin.getEconomyManager().has(bidder.getUniqueId(), amount)) { + pendingBids.remove(auctionId); + return CompletableFuture.completedFuture(BidResult.INSUFFICIENT_FUNDS); + } + + // Store previous bidder info for refund + UUID previousBidder = auction.getHighestBidderUuid(); + double previousBid = auction.getCurrentBid(); + + // Withdraw from bidder first + if (!plugin.getEconomyManager().withdraw(bidder.getUniqueId(), amount)) { + pendingBids.remove(auctionId); + return CompletableFuture.completedFuture(BidResult.ECONOMY_ERROR); + } + + // Place bid in database + return plugin.getDatabaseManager().placeBid(auctionId, bidder.getUniqueId(), bidder.getName(), amount) + .thenApply(success -> { + if (!success) { + // Refund bidder + plugin.getEconomyManager().deposit(bidder.getUniqueId(), amount); + pendingBids.remove(auctionId); + return BidResult.AUCTION_ENDED; + } + + // Refund previous bidder + if (previousBidder != null && previousBid > 0) { + plugin.getEconomyManager().deposit(previousBidder, previousBid); + + // Notify previous bidder if online + if (plugin.getConfigManager().isNotifyOnOutbid()) { + Player prevBidderPlayer = Bukkit.getPlayer(previousBidder); + if (prevBidderPlayer != null && prevBidderPlayer.isOnline()) { + Map placeholders = Map.of( + "item", auction.getItem().getType().name(), + "amount", plugin.getMessageManager().formatCurrency(amount), + "bidder", bidder.getName() + ); + prevBidderPlayer.sendMessage(plugin.getMessageManager() + .getPrefixed("messages.auction-outbid", placeholders)); + } + } + } + + invalidateCache(); + pendingBids.remove(auctionId); + return BidResult.SUCCESS; + }); + }); + } catch (Exception e) { + pendingBids.remove(auctionId); + throw e; + } + } + + /** + * Buys out an auction immediately + * + * @param auctionId The auction to buyout + * @param buyer The buyer + * @return CompletableFuture with buyout result + */ + public CompletableFuture buyout(int auctionId, Player buyer) { + return getAuction(auctionId) + .thenCompose(optAuction -> { + if (optAuction.isEmpty()) { + return CompletableFuture.completedFuture(BidResult.NOT_FOUND); + } + + Auction auction = optAuction.get(); + + // Check if buyout is available + if (!auction.hasBuyout()) { + return CompletableFuture.completedFuture(BidResult.NO_BUYOUT); + } + + // Can't buyout own auction + if (auction.getSellerUuid().equals(buyer.getUniqueId())) { + return CompletableFuture.completedFuture(BidResult.OWN_AUCTION); + } + + // Check buyer funds + double buyoutPrice = auction.getBuyoutPrice(); + if (!plugin.getEconomyManager().has(buyer.getUniqueId(), buyoutPrice)) { + return CompletableFuture.completedFuture(BidResult.INSUFFICIENT_FUNDS); + } + + // Place bid at buyout price (this will end the auction) + return placeBid(auctionId, buyer, buyoutPrice) + .thenCompose(result -> { + if (result == BidResult.SUCCESS) { + // Immediately end the auction + return processAuctionEnd(auctionId) + .thenApply(v -> BidResult.BUYOUT_SUCCESS); + } + return CompletableFuture.completedFuture(result); + }); + }); + } + + /** + * Cancels an auction (only if no bids) + * + * @param auctionId The auction to cancel + * @param playerUuid The player attempting to cancel + * @param isAdmin Whether this is an admin action + * @return CompletableFuture with success status + */ + public CompletableFuture cancelAuction(int auctionId, UUID playerUuid, boolean isAdmin) { + return getAuction(auctionId) + .thenCompose(optAuction -> { + if (optAuction.isEmpty()) { + return CompletableFuture.completedFuture(CancelResult.NOT_FOUND); + } + + Auction auction = optAuction.get(); + + // Check permission + if (!isAdmin && !auction.getSellerUuid().equals(playerUuid)) { + return CompletableFuture.completedFuture(CancelResult.NOT_OWNER); + } + + // Can only cancel if no bids (unless admin) + if (!isAdmin && auction.getBidCount() > 0) { + return CompletableFuture.completedFuture(CancelResult.HAS_BIDS); + } + + // If admin cancelling with bids, refund highest bidder + if (isAdmin && auction.getBidCount() > 0 && auction.getHighestBidderUuid() != null) { + plugin.getEconomyManager().deposit(auction.getHighestBidderUuid(), auction.getCurrentBid()); + } + + // Update status + return plugin.getDatabaseManager().updateAuctionStatus(auctionId, Auction.AuctionStatus.CANCELLED) + .thenApply(success -> { + if (success) { + // Return item to claim storage + ClaimItem claimItem = new ClaimItem( + auction.getSellerUuid(), + auction.getItem().clone(), + ClaimItem.ClaimReason.CANCELLED_AUCTION, + "Auction #" + auctionId + ); + plugin.getDatabaseManager().addClaimItem(claimItem); + invalidateCache(); + return CancelResult.SUCCESS; + } + return CancelResult.FAILED; + }); + }); + } + + /** + * Processes ended auctions - delivers items and handles payments + */ + public CompletableFuture processEndedAuctions() { + return plugin.getDatabaseManager().getEndedAuctions() + .thenAccept(auctions -> { + for (Auction auction : auctions) { + processAuctionEnd(auction.getId()); + } + if (!auctions.isEmpty()) { + invalidateCache(); + } + }); + } + + /** + * Processes a single auction end + */ + private CompletableFuture processAuctionEnd(int auctionId) { + return getAuction(auctionId) + .thenAccept(optAuction -> { + if (optAuction.isEmpty()) return; + + Auction auction = optAuction.get(); + + // Update status first + Auction.AuctionStatus newStatus = auction.getBidCount() > 0 + ? Auction.AuctionStatus.SOLD + : Auction.AuctionStatus.EXPIRED; + + plugin.getDatabaseManager().updateAuctionStatus(auctionId, newStatus); + + if (auction.getBidCount() > 0 && auction.getHighestBidderUuid() != null) { + // Auction has a winner + double winningBid = auction.getCurrentBid(); + double tax = plugin.getConfigManager().getAuctionTax(); + double sellerEarnings = winningBid * (1 - tax / 100); + + // Add pending earnings for seller + PendingEarnings earnings = new PendingEarnings( + auction.getSellerUuid(), + sellerEarnings, + "Auction #" + auctionId + ); + plugin.getDatabaseManager().addPendingEarnings(earnings); + + // Add item to winner's claim storage + ClaimItem claimItem = new ClaimItem( + auction.getHighestBidderUuid(), + auction.getItem().clone(), + ClaimItem.ClaimReason.WON_AUCTION, + "Auction #" + auctionId + ); + plugin.getDatabaseManager().addClaimItem(claimItem); + + // Notify winner if online + if (plugin.getConfigManager().isNotifyOnWin()) { + Player winner = Bukkit.getPlayer(auction.getHighestBidderUuid()); + if (winner != null && winner.isOnline()) { + Map placeholders = Map.of( + "item", auction.getItem().getType().name(), + "price", plugin.getMessageManager().formatCurrency(winningBid) + ); + winner.sendMessage(plugin.getMessageManager() + .getPrefixed("messages.auction-ended-winner", placeholders)); + } + } + + // Notify seller if online + if (plugin.getConfigManager().isNotifyOnSale()) { + Player seller = Bukkit.getPlayer(auction.getSellerUuid()); + if (seller != null && seller.isOnline()) { + Map placeholders = Map.of( + "item", auction.getItem().getType().name(), + "winner", auction.getHighestBidderName(), + "price", plugin.getMessageManager().formatCurrency(sellerEarnings) + ); + seller.sendMessage(plugin.getMessageManager() + .getPrefixed("messages.auction-ended-seller", placeholders)); + } + } + } else { + // No bids - return item to seller + ClaimItem claimItem = new ClaimItem( + auction.getSellerUuid(), + auction.getItem().clone(), + ClaimItem.ClaimReason.AUCTION_NO_BIDS, + "Auction #" + auctionId + ); + plugin.getDatabaseManager().addClaimItem(claimItem); + + // Notify seller if online + if (plugin.getConfigManager().isNotifyOnExpire()) { + Player seller = Bukkit.getPlayer(auction.getSellerUuid()); + if (seller != null && seller.isOnline()) { + seller.sendMessage(plugin.getMessageManager().getPrefixed( + "messages.auction-ended-no-bids", + "item", auction.getItem().getType().name() + )); + } + } + } + }); + } + + /** + * Invalidates the auction cache + */ + public void invalidateCache() { + cachedAuctions = null; + cacheExpiry = 0; + } + + /** + * Result of a bid attempt + */ + public enum BidResult { + SUCCESS, + BUYOUT_SUCCESS, + NOT_FOUND, + AUCTION_ENDED, + OWN_AUCTION, + BID_TOO_LOW, + INSUFFICIENT_FUNDS, + ECONOMY_ERROR, + ALREADY_PROCESSING, + NO_BUYOUT + } + + /** + * Result of a cancel attempt + */ + public enum CancelResult { + SUCCESS, + NOT_FOUND, + NOT_OWNER, + HAS_BIDS, + FAILED + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/service/ClaimService.java b/src/main/java/pt/henrique/communityMarket/service/ClaimService.java new file mode 100644 index 0000000..ed5e404 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/service/ClaimService.java @@ -0,0 +1,154 @@ +package pt.henrique.communityMarket.service; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import pt.henrique.communityMarket.CommunityMarket; +import pt.henrique.communityMarket.model.ClaimItem; +import pt.henrique.communityMarket.util.InventoryUtil; + +import java.util.List; +import java.util.UUID; +import java.util.concurrent.CompletableFuture; + +/** + * Service layer for managing claim storage. + * Players claim items from expired listings, won auctions, etc. + */ +public class ClaimService { + + private final CommunityMarket plugin; + + public ClaimService(CommunityMarket plugin) { + this.plugin = plugin; + } + + /** + * Gets all pending claim items for a player + * + * @param playerUuid The player's UUID + * @return CompletableFuture with list of claim items + */ + public CompletableFuture> getPlayerClaimItems(UUID playerUuid) { + return plugin.getDatabaseManager().getPlayerClaimItems(playerUuid); + } + + /** + * Counts pending claim items for a player + * + * @param playerUuid The player's UUID + * @return CompletableFuture with count + */ + public CompletableFuture countPlayerClaimItems(UUID playerUuid) { + return plugin.getDatabaseManager().countPlayerClaimItems(playerUuid); + } + + /** + * Claims a single item + * + * @param claimId The claim item ID + * @param player The player claiming + * @return CompletableFuture with claim result + */ + public CompletableFuture claimItem(int claimId, Player player) { + return plugin.getDatabaseManager().getPlayerClaimItems(player.getUniqueId()) + .thenCompose(items -> { + // Find the specific item + ClaimItem claimItem = items.stream() + .filter(i -> i.getId() == claimId) + .findFirst() + .orElse(null); + + if (claimItem == null) { + return CompletableFuture.completedFuture(ClaimResult.NOT_FOUND); + } + + // Check inventory space + if (!InventoryUtil.hasSpace(player, claimItem.getItem())) { + return CompletableFuture.completedFuture(ClaimResult.INVENTORY_FULL); + } + + // Remove from database first + return plugin.getDatabaseManager().removeClaimItem(claimId) + .thenApply(success -> { + if (!success) { + return ClaimResult.FAILED; + } + + // Give item to player on main thread + Bukkit.getScheduler().runTask(plugin, () -> { + ItemStack leftover = InventoryUtil.giveItem(player, claimItem.getItem()); + if (leftover != null) { + // This shouldn't happen since we checked space, but just in case + plugin.getDatabaseManager().addClaimItem(new ClaimItem( + player.getUniqueId(), + leftover, + claimItem.getReason(), + claimItem.getSourceInfo() + )); + } + }); + + return ClaimResult.SUCCESS; + }); + }); + } + + /** + * Claims all items for a player + * + * @param player The player claiming + * @return CompletableFuture with number of items claimed + */ + public CompletableFuture claimAll(Player player) { + return plugin.getDatabaseManager().getPlayerClaimItems(player.getUniqueId()) + .thenApply(items -> { + int claimed = 0; + + for (ClaimItem item : items) { + // Check if player has space + if (!InventoryUtil.hasSpace(player, item.getItem())) { + break; // Stop claiming if inventory is full + } + + // Remove from database + boolean removed = plugin.getDatabaseManager().removeClaimItem(item.getId()).join(); + if (removed) { + // Give item on main thread + ItemStack itemToGive = item.getItem(); + Bukkit.getScheduler().runTask(plugin, () -> { + InventoryUtil.giveItem(player, itemToGive); + }); + claimed++; + } + } + + return claimed; + }); + } + + /** + * Adds an item to a player's claim storage + * + * @param playerUuid The player's UUID + * @param item The item to add + * @param reason The reason for the claim + * @param sourceInfo Additional info about the source + * @return CompletableFuture with the claim ID + */ + public CompletableFuture addClaimItem(UUID playerUuid, ItemStack item, ClaimItem.ClaimReason reason, String sourceInfo) { + ClaimItem claimItem = new ClaimItem(playerUuid, item, reason, sourceInfo); + return plugin.getDatabaseManager().addClaimItem(claimItem); + } + + /** + * Result of a claim attempt + */ + public enum ClaimResult { + SUCCESS, + NOT_FOUND, + INVENTORY_FULL, + FAILED + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/service/EarningsService.java b/src/main/java/pt/henrique/communityMarket/service/EarningsService.java new file mode 100644 index 0000000..d1940b5 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/service/EarningsService.java @@ -0,0 +1,112 @@ +package pt.henrique.communityMarket.service; + +import org.bukkit.entity.Player; +import pt.henrique.communityMarket.CommunityMarket; + +import java.util.UUID; +import java.util.concurrent.CompletableFuture; + +/** + * Service layer for managing player earnings. + * Handles pending earnings from sales and withdrawals. + */ +public class EarningsService { + + private final CommunityMarket plugin; + + public EarningsService(CommunityMarket plugin) { + this.plugin = plugin; + } + + /** + * Gets the total pending earnings for a player + * + * @param playerUuid The player's UUID + * @return CompletableFuture with the total pending amount + */ + public CompletableFuture getPendingEarnings(UUID playerUuid) { + return plugin.getDatabaseManager().getPlayerPendingEarnings(playerUuid); + } + + /** + * Withdraws all pending earnings for a player + * + * @param player The player withdrawing + * @return CompletableFuture with the withdrawal result + */ + public CompletableFuture withdrawAll(Player player) { + return getPendingEarnings(player.getUniqueId()) + .thenCompose(amount -> { + if (amount <= 0) { + return CompletableFuture.completedFuture(WithdrawResult.NO_EARNINGS); + } + + // Mark earnings as withdrawn in database first + return plugin.getDatabaseManager().withdrawAllEarnings(player.getUniqueId()) + .thenApply(success -> { + if (!success) { + return WithdrawResult.FAILED; + } + + // Deposit to player's economy account + if (!plugin.getEconomyManager().deposit(player.getUniqueId(), amount)) { + // Economy failed - this is a problem + // The earnings are marked as withdrawn but money wasn't given + plugin.getLogger().severe("Failed to deposit " + amount + " to " + player.getName() + " after marking earnings as withdrawn!"); + return WithdrawResult.ECONOMY_ERROR; + } + + return WithdrawResult.success(amount); + }); + }); + } + + /** + * Adds pending earnings for a player + * + * @param playerUuid The player's UUID + * @param amount The amount to add + * @param source Description of the source (e.g., "Listing #123") + * @return CompletableFuture with the earnings ID + */ + public CompletableFuture addEarnings(UUID playerUuid, double amount, String source) { + var earnings = new pt.henrique.communityMarket.model.PendingEarnings(playerUuid, amount, source); + return plugin.getDatabaseManager().addPendingEarnings(earnings); + } + + /** + * Result of a withdrawal attempt + */ + public static class WithdrawResult { + private final boolean success; + private final double amount; + private final String error; + + private WithdrawResult(boolean success, double amount, String error) { + this.success = success; + this.amount = amount; + this.error = error; + } + + public static WithdrawResult success(double amount) { + return new WithdrawResult(true, amount, null); + } + + public static final WithdrawResult NO_EARNINGS = new WithdrawResult(false, 0, "no_earnings"); + public static final WithdrawResult FAILED = new WithdrawResult(false, 0, "failed"); + public static final WithdrawResult ECONOMY_ERROR = new WithdrawResult(false, 0, "economy_error"); + + public boolean isSuccess() { + return success; + } + + public double getAmount() { + return amount; + } + + public String getError() { + return error; + } + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/service/ListingService.java b/src/main/java/pt/henrique/communityMarket/service/ListingService.java new file mode 100644 index 0000000..d749efa --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/service/ListingService.java @@ -0,0 +1,377 @@ +package pt.henrique.communityMarket.service; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import pt.henrique.communityMarket.CommunityMarket; +import pt.henrique.communityMarket.model.ClaimItem; +import pt.henrique.communityMarket.model.Listing; +import pt.henrique.communityMarket.model.PendingEarnings; +import pt.henrique.communityMarket.util.InventoryUtil; + +import java.time.Instant; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Service layer for managing fixed-price market listings. + * Handles creation, purchase, cancellation, and expiration of listings. + */ +public class ListingService { + + private final CommunityMarket plugin; + + // Simple cache for active listings + private List cachedListings; + private long cacheExpiry = 0; + + // Track pending operations to prevent double-purchases + private final Map pendingPurchases = new ConcurrentHashMap<>(); + + public ListingService(CommunityMarket plugin) { + this.plugin = plugin; + } + + /** + * Creates a new listing for a player + * + * @param player The seller + * @param item The item to sell + * @param amount Amount of items + * @param price Total price for all items + * @param durationHours Duration in hours + * @return CompletableFuture with the listing ID or -1 if failed + */ + public CompletableFuture createListing(Player player, ItemStack item, int amount, double price, int durationHours) { + // Validate + if (item == null || item.getType().isAir()) { + return CompletableFuture.completedFuture(-1); + } + + if (plugin.getConfigManager().isMaterialBlacklisted(item.getType())) { + return CompletableFuture.completedFuture(-1); + } + + // Create listing object + Listing listing = new Listing( + player.getUniqueId(), + player.getName(), + item.clone(), + amount, + price, + Instant.now().plusSeconds(durationHours * 3600L) + ); + + // Save to database + return plugin.getDatabaseManager().createListing(listing) + .thenApply(id -> { + if (id > 0) { + invalidateCache(); + // Update cooldown + plugin.getDatabaseManager().updateLastListingTime(player.getUniqueId()); + } + return id; + }); + } + + /** + * Gets all active listings with caching + */ + public CompletableFuture> getActiveListings() { + long now = System.currentTimeMillis(); + + // Return cached if still valid + if (cachedListings != null && now < cacheExpiry) { + return CompletableFuture.completedFuture(cachedListings); + } + + return plugin.getDatabaseManager().getActiveListings() + .thenApply(listings -> { + cachedListings = listings; + cacheExpiry = System.currentTimeMillis() + + (plugin.getConfigManager().getCacheDuration() * 1000L); + return listings; + }); + } + + /** + * Gets a specific listing by ID + */ + public CompletableFuture> getListing(int id) { + return plugin.getDatabaseManager().getListing(id); + } + + /** + * Gets all listings for a specific player + */ + public CompletableFuture> getPlayerListings(UUID playerUuid) { + return plugin.getDatabaseManager().getPlayerListings(playerUuid); + } + + /** + * Counts active listings for a player + */ + public CompletableFuture countPlayerListings(UUID playerUuid) { + return plugin.getDatabaseManager().countPlayerListings(playerUuid); + } + + /** + * Checks if a player can create a new listing (not at limit and no cooldown) + */ + public CompletableFuture canCreateListing(UUID playerUuid) { + int maxListings = plugin.getConfigManager().getMaxListingsPerPlayer(); + + return countPlayerListings(playerUuid) + .thenCompose(count -> { + if (count >= maxListings) { + return CompletableFuture.completedFuture(false); + } + + int cooldown = plugin.getConfigManager().getListingCooldown(); + if (cooldown <= 0) { + return CompletableFuture.completedFuture(true); + } + + return plugin.getDatabaseManager().getLastListingTime(playerUuid) + .thenApply(lastTime -> { + if (lastTime.isEmpty()) return true; + return Instant.now().isAfter(lastTime.get().plusSeconds(cooldown)); + }); + }); + } + + /** + * Calculates the remaining cooldown time in seconds + */ + public CompletableFuture getRemainingCooldown(UUID playerUuid) { + int cooldown = plugin.getConfigManager().getListingCooldown(); + if (cooldown <= 0) { + return CompletableFuture.completedFuture(0L); + } + + return plugin.getDatabaseManager().getLastListingTime(playerUuid) + .thenApply(lastTime -> { + if (lastTime.isEmpty()) return 0L; + long remaining = lastTime.get().plusSeconds(cooldown).getEpochSecond() - Instant.now().getEpochSecond(); + return Math.max(0, remaining); + }); + } + + /** + * Attempts to purchase a listing. + * This is an atomic operation that prevents double-purchases. + * + * @param listingId The listing to purchase + * @param buyer The buyer + * @return CompletableFuture with success status + */ + public CompletableFuture purchaseListing(int listingId, Player buyer) { + // Check if already processing this listing + if (pendingPurchases.putIfAbsent(listingId, true) != null) { + return CompletableFuture.completedFuture(PurchaseResult.ALREADY_PROCESSING); + } + + try { + return getListing(listingId) + .thenCompose(optListing -> { + if (optListing.isEmpty()) { + pendingPurchases.remove(listingId); + return CompletableFuture.completedFuture(PurchaseResult.NOT_FOUND); + } + + Listing listing = optListing.get(); + + // Can't buy own listing + if (listing.getSellerUuid().equals(buyer.getUniqueId())) { + pendingPurchases.remove(listingId); + return CompletableFuture.completedFuture(PurchaseResult.OWN_LISTING); + } + + // Check buyer funds + if (!plugin.getEconomyManager().has(buyer.getUniqueId(), listing.getPrice())) { + pendingPurchases.remove(listingId); + return CompletableFuture.completedFuture(PurchaseResult.INSUFFICIENT_FUNDS); + } + + // Attempt atomic purchase in DB + return plugin.getDatabaseManager().purchaseListing(listingId, buyer.getUniqueId(), buyer.getName()) + .thenApply(success -> { + if (!success) { + pendingPurchases.remove(listingId); + return PurchaseResult.ALREADY_SOLD; + } + + // Withdraw from buyer + if (!plugin.getEconomyManager().withdraw(buyer.getUniqueId(), listing.getPrice())) { + // Rollback DB change + plugin.getDatabaseManager().updateListingStatus(listingId, Listing.ListingStatus.ACTIVE); + pendingPurchases.remove(listingId); + return PurchaseResult.ECONOMY_ERROR; + } + + // Calculate seller earnings after tax + double tax = plugin.getConfigManager().getMarketTax(); + double sellerEarnings = listing.getPrice() * (1 - tax / 100); + + // Add pending earnings for seller + PendingEarnings earnings = new PendingEarnings( + listing.getSellerUuid(), + sellerEarnings, + "Listing #" + listingId + ); + plugin.getDatabaseManager().addPendingEarnings(earnings); + + // Give item to buyer or add to claim storage + Bukkit.getScheduler().runTask(plugin, () -> { + ItemStack item = listing.getItem().clone(); + item.setAmount(listing.getAmount()); + ItemStack leftover = InventoryUtil.giveItem(buyer, item); + + if (leftover != null) { + // Couldn't fit in inventory, add to claim storage + ClaimItem claimItem = new ClaimItem( + buyer.getUniqueId(), + leftover, + ClaimItem.ClaimReason.PURCHASE_FULL_INVENTORY, + "Listing #" + listingId + ); + plugin.getDatabaseManager().addClaimItem(claimItem); + buyer.sendMessage(plugin.getMessageManager().getPrefixed("messages.claim-inventory-full")); + } + }); + + // Notify seller if online + if (plugin.getConfigManager().isNotifyOnSale()) { + Player seller = Bukkit.getPlayer(listing.getSellerUuid()); + if (seller != null && seller.isOnline()) { + Map placeholders = Map.of( + "item", listing.getItem().getType().name(), + "amount", String.valueOf(listing.getAmount()), + "buyer", buyer.getName(), + "price", plugin.getMessageManager().formatCurrency(listing.getPrice()) + ); + seller.sendMessage(plugin.getMessageManager().getPrefixed("messages.listing-sold", placeholders)); + } + } + + invalidateCache(); + pendingPurchases.remove(listingId); + return PurchaseResult.SUCCESS; + }); + }); + } catch (Exception e) { + pendingPurchases.remove(listingId); + throw e; + } + } + + /** + * Cancels a listing and returns the item to the seller's claim storage + * + * @param listingId The listing to cancel + * @param playerUuid The player attempting to cancel (must be seller or admin) + * @param isAdmin Whether this is an admin action + * @return CompletableFuture with success status + */ + public CompletableFuture cancelListing(int listingId, UUID playerUuid, boolean isAdmin) { + return getListing(listingId) + .thenCompose(optListing -> { + if (optListing.isEmpty()) { + return CompletableFuture.completedFuture(false); + } + + Listing listing = optListing.get(); + + // Check permission + if (!isAdmin && !listing.getSellerUuid().equals(playerUuid)) { + return CompletableFuture.completedFuture(false); + } + + // Update status + return plugin.getDatabaseManager().updateListingStatus(listingId, Listing.ListingStatus.CANCELLED) + .thenApply(success -> { + if (success) { + // Return item to claim storage + ItemStack item = listing.getItem().clone(); + item.setAmount(listing.getAmount()); + ClaimItem claimItem = new ClaimItem( + listing.getSellerUuid(), + item, + ClaimItem.ClaimReason.CANCELLED_LISTING, + "Listing #" + listingId + ); + plugin.getDatabaseManager().addClaimItem(claimItem); + invalidateCache(); + } + return success; + }); + }); + } + + /** + * Processes expired listings - moves items to claim storage + */ + public CompletableFuture processExpiredListings() { + return plugin.getDatabaseManager().getExpiredListings() + .thenAccept(listings -> { + for (Listing listing : listings) { + // Update status to expired + plugin.getDatabaseManager().updateListingStatus(listing.getId(), Listing.ListingStatus.EXPIRED) + .thenAccept(success -> { + if (success) { + // Return item to claim storage + ItemStack item = listing.getItem().clone(); + item.setAmount(listing.getAmount()); + ClaimItem claimItem = new ClaimItem( + listing.getSellerUuid(), + item, + ClaimItem.ClaimReason.EXPIRED_LISTING, + "Listing #" + listing.getId() + ); + plugin.getDatabaseManager().addClaimItem(claimItem); + + // Notify seller if online + if (plugin.getConfigManager().isNotifyOnExpire()) { + Player seller = Bukkit.getPlayer(listing.getSellerUuid()); + if (seller != null && seller.isOnline()) { + seller.sendMessage(plugin.getMessageManager().getPrefixed( + "messages.listing-expired", + "id", String.valueOf(listing.getId()) + )); + } + } + } + }); + } + if (!listings.isEmpty()) { + invalidateCache(); + } + }); + } + + /** + * Invalidates the listing cache + */ + public void invalidateCache() { + cachedListings = null; + cacheExpiry = 0; + } + + /** + * Result of a purchase attempt + */ + public enum PurchaseResult { + SUCCESS, + NOT_FOUND, + ALREADY_SOLD, + OWN_LISTING, + INSUFFICIENT_FUNDS, + ECONOMY_ERROR, + ALREADY_PROCESSING + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/service/TransactionService.java b/src/main/java/pt/henrique/communityMarket/service/TransactionService.java new file mode 100644 index 0000000..8eac484 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/service/TransactionService.java @@ -0,0 +1,297 @@ +package pt.henrique.communityMarket.service; + +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import pt.henrique.communityMarket.CommunityMarket; + +import java.util.concurrent.CompletableFuture; + +/** + * Service layer for handling marketplace transactions. + * Provides a unified interface for complex operations that + * involve multiple services (purchases, bids, etc.) + */ +public class TransactionService { + + private final CommunityMarket plugin; + + public TransactionService(CommunityMarket plugin) { + this.plugin = plugin; + } + + /** + * Validates an item before it can be listed or auctioned. + * Checks material blacklist, keywords in name/lore, and other restrictions. + * + * @param item The item to validate + * @return ValidationResult with success status and error message if applicable + */ + public ValidationResult validateItem(ItemStack item) { + if (item == null || item.getType().isAir()) { + return new ValidationResult(false, "invalid-item"); + } + + // Check material blacklist + if (plugin.getConfigManager().isMaterialBlacklisted(item.getType())) { + return new ValidationResult(false, "blacklisted-item"); + } + + // Check for blacklisted keywords in item name/lore + if (item.hasItemMeta()) { + var meta = item.getItemMeta(); + + // Check display name + if (meta.hasDisplayName()) { + String displayName = meta.getDisplayName(); + if (plugin.getConfigManager().containsBlacklistedKeyword(displayName)) { + return new ValidationResult(false, "blacklisted-content"); + } + } + + // Check lore + if (meta.hasLore()) { + for (String loreLine : meta.getLore()) { + if (plugin.getConfigManager().containsBlacklistedKeyword(loreLine)) { + return new ValidationResult(false, "blacklisted-content"); + } + } + } + } + + return new ValidationResult(true, null); + } + + /** + * Validates a price for a listing + * + * @param price The price to validate + * @return true if the price is within allowed range + */ + public boolean validateListingPrice(double price) { + double min = plugin.getConfigManager().getMinPrice(); + double max = plugin.getConfigManager().getMaxPrice(); + return price >= min && price <= max; + } + + /** + * Validates a starting price for an auction + * + * @param price The price to validate + * @return true if the price is within allowed range + */ + public boolean validateAuctionStartPrice(double price) { + double min = plugin.getConfigManager().getMinStartPrice(); + double max = plugin.getConfigManager().getMaxStartPrice(); + return price >= min && price <= max; + } + + /** + * Validates an auction duration + * + * @param hours The duration in hours + * @return true if the duration is within allowed range + */ + public boolean validateAuctionDuration(int hours) { + int min = plugin.getConfigManager().getMinDurationHours(); + int max = plugin.getConfigManager().getMaxDurationHours(); + return hours >= min && hours <= max; + } + + /** + * Calculates the tax amount for a listing sale + * + * @param salePrice The sale price + * @return The tax amount + */ + public double calculateListingTax(double salePrice) { + double taxPercent = plugin.getConfigManager().getMarketTax(); + return salePrice * (taxPercent / 100); + } + + /** + * Calculates the seller's earnings after tax for a listing + * + * @param salePrice The sale price + * @return The amount the seller receives + */ + public double calculateListingEarnings(double salePrice) { + return salePrice - calculateListingTax(salePrice); + } + + /** + * Calculates the tax amount for an auction sale + * + * @param salePrice The final sale price + * @return The tax amount + */ + public double calculateAuctionTax(double salePrice) { + double taxPercent = plugin.getConfigManager().getAuctionTax(); + return salePrice * (taxPercent / 100); + } + + /** + * Calculates the seller's earnings after tax for an auction + * + * @param salePrice The final sale price + * @return The amount the seller receives + */ + public double calculateAuctionEarnings(double salePrice) { + return salePrice - calculateAuctionTax(salePrice); + } + + /** + * Creates a listing with full validation and item removal + * + * @param player The seller + * @param item The item to list + * @param amount Amount to list + * @param price Total price + * @param durationHours Duration in hours + * @return CompletableFuture with transaction result + */ + public CompletableFuture createListingTransaction( + Player player, ItemStack item, int amount, double price, int durationHours) { + + // Validate item + ValidationResult validation = validateItem(item); + if (!validation.isValid()) { + return CompletableFuture.completedFuture( + TransactionResult.failed(validation.getErrorKey())); + } + + // Validate price + if (!validateListingPrice(price)) { + return CompletableFuture.completedFuture( + TransactionResult.failed("invalid-price")); + } + + // Check listing limit + return plugin.getListingService().canCreateListing(player.getUniqueId()) + .thenCompose(canCreate -> { + if (!canCreate) { + // Check if it's cooldown or limit + return plugin.getListingService().getRemainingCooldown(player.getUniqueId()) + .thenApply(cooldown -> { + if (cooldown > 0) { + return TransactionResult.failed("listing-cooldown"); + } + return TransactionResult.failed("listing-limit-reached"); + }); + } + + // Create the listing + ItemStack listItem = item.clone(); + listItem.setAmount(amount); + + return plugin.getListingService().createListing(player, listItem, amount, price, durationHours) + .thenApply(id -> { + if (id > 0) { + return TransactionResult.success(id); + } + return TransactionResult.failed("failed"); + }); + }); + } + + /** + * Creates an auction with full validation and item removal + * + * @param player The seller + * @param item The item to auction + * @param startPrice Starting bid + * @param buyoutPrice Optional buyout price + * @param durationHours Duration in hours + * @return CompletableFuture with transaction result + */ + public CompletableFuture createAuctionTransaction( + Player player, ItemStack item, double startPrice, Double buyoutPrice, int durationHours) { + + // Validate item + ValidationResult validation = validateItem(item); + if (!validation.isValid()) { + return CompletableFuture.completedFuture( + TransactionResult.failed(validation.getErrorKey())); + } + + // Validate prices + if (!validateAuctionStartPrice(startPrice)) { + return CompletableFuture.completedFuture( + TransactionResult.failed("invalid-price")); + } + + if (buyoutPrice != null && buyoutPrice <= startPrice) { + return CompletableFuture.completedFuture( + TransactionResult.failed("invalid-price")); + } + + // Validate duration + if (!validateAuctionDuration(durationHours)) { + return CompletableFuture.completedFuture( + TransactionResult.failed("invalid-duration")); + } + + // Check auction limit + return plugin.getAuctionService().canCreateAuction(player.getUniqueId()) + .thenCompose(canCreate -> { + if (!canCreate) { + return CompletableFuture.completedFuture( + TransactionResult.failed("auction-limit-reached")); + } + + // Create the auction + return plugin.getAuctionService().createAuction( + player, item.clone(), startPrice, buyoutPrice, durationHours) + .thenApply(id -> { + if (id > 0) { + return TransactionResult.success(id); + } + return TransactionResult.failed("failed"); + }); + }); + } + + /** + * Result of item validation + */ + public record ValidationResult(boolean isValid, String errorKey) { + public String getErrorKey() { + return errorKey; + } + } + + /** + * Result of a transaction + */ + public static class TransactionResult { + private final boolean success; + private final int id; + private final String errorKey; + + private TransactionResult(boolean success, int id, String errorKey) { + this.success = success; + this.id = id; + this.errorKey = errorKey; + } + + public static TransactionResult success(int id) { + return new TransactionResult(true, id, null); + } + + public static TransactionResult failed(String errorKey) { + return new TransactionResult(false, -1, errorKey); + } + + public boolean isSuccess() { + return success; + } + + public int getId() { + return id; + } + + public String getErrorKey() { + return errorKey; + } + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/task/AuctionTask.java b/src/main/java/pt/henrique/communityMarket/task/AuctionTask.java new file mode 100644 index 0000000..a7c7088 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/task/AuctionTask.java @@ -0,0 +1,28 @@ +package pt.henrique.communityMarket.task; + +import org.bukkit.scheduler.BukkitRunnable; +import pt.henrique.communityMarket.CommunityMarket; + +/** + * Periodic task that checks for ended auctions and processes them. + * Runs asynchronously to avoid blocking the main thread. + */ +public class AuctionTask extends BukkitRunnable { + + private final CommunityMarket plugin; + + public AuctionTask(CommunityMarket plugin) { + this.plugin = plugin; + } + + @Override + public void run() { + // Process ended auctions + plugin.getAuctionService().processEndedAuctions() + .exceptionally(ex -> { + plugin.getLogger().warning("Error processing ended auctions: " + ex.getMessage()); + return null; + }); + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/task/ExpiredListingTask.java b/src/main/java/pt/henrique/communityMarket/task/ExpiredListingTask.java new file mode 100644 index 0000000..9dbd24a --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/task/ExpiredListingTask.java @@ -0,0 +1,28 @@ +package pt.henrique.communityMarket.task; + +import org.bukkit.scheduler.BukkitRunnable; +import pt.henrique.communityMarket.CommunityMarket; + +/** + * Periodic task that checks for expired listings and moves items to claim storage. + * Runs asynchronously to avoid blocking the main thread. + */ +public class ExpiredListingTask extends BukkitRunnable { + + private final CommunityMarket plugin; + + public ExpiredListingTask(CommunityMarket plugin) { + this.plugin = plugin; + } + + @Override + public void run() { + // Process expired listings + plugin.getListingService().processExpiredListings() + .exceptionally(ex -> { + plugin.getLogger().warning("Error processing expired listings: " + ex.getMessage()); + return null; + }); + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/util/InventoryUtil.java b/src/main/java/pt/henrique/communityMarket/util/InventoryUtil.java new file mode 100644 index 0000000..cdabd8a --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/util/InventoryUtil.java @@ -0,0 +1,269 @@ +package pt.henrique.communityMarket.util; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import pt.henrique.communityMarket.CommunityMarket; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Utility class for inventory operations + */ +public class InventoryUtil { + + /** + * Checks if a player has space for an item in their inventory + * + * @param player The player + * @param item The item to check + * @return True if the player has space + */ + public static boolean hasSpace(Player player, ItemStack item) { + if (item == null || item.getType().isAir()) { + return true; + } + + // Try to add a clone and see if anything remains + ItemStack clone = item.clone(); + Map leftover = new HashMap<>(); + + // Check each slot + for (int i = 0; i < 36; i++) { + ItemStack slot = player.getInventory().getItem(i); + + if (slot == null || slot.getType().isAir()) { + return true; + } + + if (slot.isSimilar(clone) && slot.getAmount() < slot.getMaxStackSize()) { + int canAdd = slot.getMaxStackSize() - slot.getAmount(); + if (canAdd >= clone.getAmount()) { + return true; + } + } + } + + return false; + } + + /** + * Gives an item to a player, returning any items that couldn't fit + * + * @param player The player + * @param item The item to give + * @return Items that couldn't fit, or null if all items were added + */ + public static ItemStack giveItem(Player player, ItemStack item) { + if (item == null || item.getType().isAir()) { + return null; + } + + HashMap leftover = player.getInventory().addItem(item.clone()); + + if (leftover.isEmpty()) { + return null; + } + + return leftover.values().iterator().next(); + } + + /** + * Removes a specific amount of an item from a player's inventory + * + * @param player The player + * @param item The item type to remove + * @param amount The amount to remove + * @return True if the full amount was removed + */ + public static boolean removeItem(Player player, ItemStack item, int amount) { + if (item == null || amount <= 0) { + return true; + } + + ItemStack toRemove = item.clone(); + toRemove.setAmount(amount); + + HashMap notRemoved = player.getInventory().removeItem(toRemove); + + return notRemoved.isEmpty(); + } + + /** + * Counts how many of a specific item a player has + * + * @param player The player + * @param item The item type to count + * @return Total count + */ + public static int countItem(Player player, ItemStack item) { + if (item == null) { + return 0; + } + + int count = 0; + for (ItemStack slot : player.getInventory().getContents()) { + if (slot != null && slot.isSimilar(item)) { + count += slot.getAmount(); + } + } + return count; + } + + /** + * Counts how many similar items exist in an inventory. + * Uses strict comparison including all metadata (material, name, lore, + * enchantments, custom model data, etc.). + * + * @param inventory The inventory to search + * @param item The item to match against + * @return Total count of matching items + */ + public static int countSimilarItems(org.bukkit.inventory.Inventory inventory, ItemStack item) { + if (item == null || inventory == null) { + return 0; + } + + int count = 0; + for (ItemStack slot : inventory.getContents()) { + if (slot != null && slot.isSimilar(item)) { + count += slot.getAmount(); + } + } + return count; + } + + /** + * Gets a display name for an item, using material name if custom name is not set + * + * @param item The item + * @return Display name + */ + public static String getDisplayName(ItemStack item) { + if (item == null) { + return "Unknown"; + } + + ItemMeta meta = item.getItemMeta(); + if (meta != null && meta.hasDisplayName()) { + return TextUtil.stripColor(meta.getDisplayName()); + } + + return formatMaterialName(item.getType()); + } + + /** + * Formats a material name into a readable string + * + * @param material The material + * @return Formatted name (e.g., "Diamond Sword") + */ + public static String formatMaterialName(Material material) { + String name = material.name().replace("_", " ").toLowerCase(); + StringBuilder result = new StringBuilder(); + boolean capitalizeNext = true; + + for (char c : name.toCharArray()) { + if (c == ' ') { + result.append(c); + capitalizeNext = true; + } else if (capitalizeNext) { + result.append(Character.toUpperCase(c)); + capitalizeNext = false; + } else { + result.append(c); + } + } + + return result.toString(); + } + + /** + * Determines the category of an item for filtering purposes + * + * @param item The item + * @return Category name + */ + public static ItemCategory getCategory(ItemStack item) { + if (item == null) { + return ItemCategory.MISC; + } + + Material material = item.getType(); + String name = material.name(); + + // Check for enchantments first + if (item.hasItemMeta() && item.getItemMeta().hasEnchants()) { + return ItemCategory.ENCHANTED; + } + + // Weapons + if (name.endsWith("_SWORD") || name.endsWith("_AXE") || name.equals("BOW") || + name.equals("CROSSBOW") || name.equals("TRIDENT") || name.equals("MACE")) { + return ItemCategory.WEAPONS; + } + + // Armor + if (name.endsWith("_HELMET") || name.endsWith("_CHESTPLATE") || + name.endsWith("_LEGGINGS") || name.endsWith("_BOOTS") || + name.equals("SHIELD") || name.equals("ELYTRA")) { + return ItemCategory.ARMOR; + } + + // Tools + if (name.endsWith("_PICKAXE") || name.endsWith("_SHOVEL") || + name.endsWith("_HOE") || name.equals("FISHING_ROD") || + name.equals("FLINT_AND_STEEL") || name.equals("SHEARS")) { + return ItemCategory.TOOLS; + } + + // Blocks + if (material.isBlock()) { + return ItemCategory.BLOCKS; + } + + // Food + if (material.isEdible()) { + return ItemCategory.FOOD; + } + + // Potions + if (name.contains("POTION") || name.equals("DRAGON_BREATH")) { + return ItemCategory.POTIONS; + } + + return ItemCategory.MISC; + } + + public enum ItemCategory { + ALL("All Items", Material.CHEST), + WEAPONS("Weapons", Material.DIAMOND_SWORD), + ARMOR("Armor", Material.DIAMOND_CHESTPLATE), + TOOLS("Tools", Material.DIAMOND_PICKAXE), + BLOCKS("Blocks", Material.GRASS_BLOCK), + FOOD("Food", Material.GOLDEN_APPLE), + POTIONS("Potions", Material.POTION), + ENCHANTED("Enchanted", Material.ENCHANTED_BOOK), + MISC("Miscellaneous", Material.ENDER_PEARL); + + private final String displayName; + private final Material icon; + + ItemCategory(String displayName, Material icon) { + this.displayName = displayName; + this.icon = icon; + } + + public String getDisplayName() { + return displayName; + } + + public Material getIcon() { + return icon; + } + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/util/ItemBuilder.java b/src/main/java/pt/henrique/communityMarket/util/ItemBuilder.java new file mode 100644 index 0000000..279359e --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/util/ItemBuilder.java @@ -0,0 +1,215 @@ +package pt.henrique.communityMarket.util; + +import net.kyori.adventure.text.Component; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * Fluent builder for creating ItemStacks with custom properties. + * Used throughout the GUI system to create menu items. + */ +public class ItemBuilder { + + private final ItemStack item; + private final ItemMeta meta; + + /** + * Creates a new ItemBuilder with the specified material + */ + public ItemBuilder(Material material) { + this(material, 1); + } + + /** + * Creates a new ItemBuilder with the specified material and amount + */ + public ItemBuilder(Material material, int amount) { + this.item = new ItemStack(material, amount); + this.meta = item.getItemMeta(); + } + + /** + * Creates a new ItemBuilder from an existing ItemStack + */ + public ItemBuilder(ItemStack item) { + this.item = item.clone(); + this.meta = this.item.getItemMeta(); + } + + /** + * Sets the display name using legacy color codes + */ + public ItemBuilder name(String name) { + if (meta != null) { + meta.displayName(TextUtil.colorize(name)); + } + return this; + } + + /** + * Sets the display name using a Component + */ + public ItemBuilder name(Component name) { + if (meta != null) { + meta.displayName(name); + } + return this; + } + + /** + * Sets the lore using a list of strings with legacy color codes + */ + public ItemBuilder lore(List lore) { + if (meta != null && lore != null) { + List components = lore.stream() + .map(TextUtil::colorize) + .collect(Collectors.toList()); + meta.lore(components); + } + return this; + } + + /** + * Sets the lore using varargs strings + */ + public ItemBuilder lore(String... lore) { + return lore(List.of(lore)); + } + + /** + * Adds a line to the existing lore + */ + public ItemBuilder addLore(String line) { + if (meta != null) { + List existingLore = meta.lore(); + List newLore = existingLore != null ? new ArrayList<>(existingLore) : new ArrayList<>(); + newLore.add(TextUtil.colorize(line)); + meta.lore(newLore); + } + return this; + } + + /** + * Adds multiple lines to the existing lore + */ + public ItemBuilder addLore(List lines) { + if (meta != null && lines != null) { + List existingLore = meta.lore(); + List newLore = existingLore != null ? new ArrayList<>(existingLore) : new ArrayList<>(); + for (String line : lines) { + newLore.add(TextUtil.colorize(line)); + } + meta.lore(newLore); + } + return this; + } + + /** + * Sets the item amount + */ + public ItemBuilder amount(int amount) { + item.setAmount(Math.min(64, Math.max(1, amount))); + return this; + } + + /** + * Adds an enchantment glow effect (uses LUCK with HIDE_ENCHANTS flag) + */ + public ItemBuilder glow(boolean glow) { + if (glow && meta != null) { + meta.addEnchant(Enchantment.LUCK_OF_THE_SEA, 1, true); + meta.addItemFlags(ItemFlag.HIDE_ENCHANTS); + } + return this; + } + + /** + * Always adds glow effect + */ + public ItemBuilder glow() { + return glow(true); + } + + /** + * Adds an enchantment + */ + public ItemBuilder enchant(Enchantment enchantment, int level) { + if (meta != null) { + meta.addEnchant(enchantment, level, true); + } + return this; + } + + /** + * Hides all item flags (enchants, attributes, etc.) + */ + public ItemBuilder hideFlags() { + if (meta != null) { + meta.addItemFlags(ItemFlag.values()); + } + return this; + } + + /** + * Adds specific item flags + */ + public ItemBuilder addFlags(ItemFlag... flags) { + if (meta != null) { + meta.addItemFlags(flags); + } + return this; + } + + /** + * Sets the item as unbreakable + */ + public ItemBuilder unbreakable(boolean unbreakable) { + if (meta != null) { + meta.setUnbreakable(unbreakable); + if (unbreakable) { + meta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE); + } + } + return this; + } + + /** + * Sets custom model data + */ + public ItemBuilder customModelData(int data) { + if (meta != null) { + meta.setCustomModelData(data); + } + return this; + } + + /** + * Builds and returns the final ItemStack + */ + public ItemStack build() { + item.setItemMeta(meta); + return item; + } + + /** + * Creates a copy of an ItemStack with modified lore + */ + public static ItemStack withLore(ItemStack original, List lore) { + return new ItemBuilder(original).lore(lore).build(); + } + + /** + * Creates a copy of an ItemStack with additional lore appended + */ + public static ItemStack appendLore(ItemStack original, List additionalLore) { + return new ItemBuilder(original).addLore(additionalLore).build(); + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/util/ItemSerializer.java b/src/main/java/pt/henrique/communityMarket/util/ItemSerializer.java new file mode 100644 index 0000000..e9d71e5 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/util/ItemSerializer.java @@ -0,0 +1,73 @@ +package pt.henrique.communityMarket.util; + +import org.bukkit.inventory.ItemStack; +import org.bukkit.util.io.BukkitObjectInputStream; +import org.bukkit.util.io.BukkitObjectOutputStream; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Base64; + +/** + * Utility class for serializing and deserializing ItemStacks to/from Base64 strings + */ +public class ItemSerializer { + + /** + * Serializes an ItemStack to a Base64 encoded string + * + * @param item The ItemStack to serialize + * @return Base64 encoded string representation + * @throws IOException If serialization fails + */ + public static String serialize(ItemStack item) throws IOException { + if (item == null) { + return null; + } + + try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream)) { + + dataOutput.writeObject(item); + return Base64.getEncoder().encodeToString(outputStream.toByteArray()); + } + } + + /** + * Deserializes a Base64 encoded string to an ItemStack + * + * @param data The Base64 encoded string + * @return The deserialized ItemStack + * @throws IOException If deserialization fails + * @throws ClassNotFoundException If the class is not found + */ + public static ItemStack deserialize(String data) throws IOException, ClassNotFoundException { + if (data == null || data.isEmpty()) { + return null; + } + + byte[] bytes = Base64.getDecoder().decode(data); + + try (ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes); + BukkitObjectInputStream dataInput = new BukkitObjectInputStream(inputStream)) { + + return (ItemStack) dataInput.readObject(); + } + } + + /** + * Safely deserializes an ItemStack, returning null if any error occurs + * + * @param data The Base64 encoded string + * @return The deserialized ItemStack or null if failed + */ + public static ItemStack deserializeSafe(String data) { + try { + return deserialize(data); + } catch (Exception e) { + return null; + } + } +} + diff --git a/src/main/java/pt/henrique/communityMarket/util/SoundUtil.java b/src/main/java/pt/henrique/communityMarket/util/SoundUtil.java new file mode 100644 index 0000000..f1c11a6 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/util/SoundUtil.java @@ -0,0 +1,114 @@ +package pt.henrique.communityMarket.util; + +import org.bukkit.NamespacedKey; +import org.bukkit.Registry; +import org.bukkit.Sound; +import org.bukkit.entity.Player; + +/** + * Utility class for playing sounds. + * Handles Sound API changes gracefully for Paper 1.21+. + */ +public class SoundUtil { + + /** + * Plays a sound to a player by name. + * + * @param player The player + * @param soundName The sound name (e.g., "UI_BUTTON_CLICK" or "ui.button.click") + * @param volume Volume (0.0 - 1.0) + * @param pitch Pitch (0.5 - 2.0) + */ + public static void playSound(Player player, String soundName, float volume, float pitch) { + if (player == null || soundName == null || soundName.isEmpty()) { + return; + } + + try { + Sound sound = findSound(soundName); + if (sound != null) { + player.playSound(player.getLocation(), sound, volume, pitch); + } + } catch (Exception ignored) { + // Sound not found or error playing, ignore silently + } + } + + /** + * Plays a sound with default volume and pitch. + */ + public static void playSound(Player player, String soundName) { + playSound(player, soundName, 0.5f, 1.0f); + } + + /** + * Finds a Sound by name using the Registry API (Paper 1.21+). + * Supports both formats: "UI_BUTTON_CLICK" and "ui.button.click" + */ + private static Sound findSound(String name) { + if (name == null) return null; + + // Convert legacy format (UI_BUTTON_CLICK) to namespaced format (ui.button.click) + String key = name.toLowerCase().replace("_", "."); + + // Try direct lookup with the converted key + Sound sound = Registry.SOUNDS.get(NamespacedKey.minecraft(key)); + if (sound != null) { + return sound; + } + + // Try some common mappings for legacy sound names + String mappedKey = mapLegacySoundName(name); + if (mappedKey != null) { + sound = Registry.SOUNDS.get(NamespacedKey.minecraft(mappedKey)); + if (sound != null) { + return sound; + } + } + + // Fallback: try the original name as-is (lowercase) + return Registry.SOUNDS.get(NamespacedKey.minecraft(name.toLowerCase())); + } + + /** + * Maps legacy enum-style sound names to their registry keys. + */ + private static String mapLegacySoundName(String legacyName) { + if (legacyName == null) return null; + + String upper = legacyName.toUpperCase(); + + return switch (upper) { + case "UI_BUTTON_CLICK" -> "ui.button.click"; + case "ENTITY_PLAYER_LEVELUP" -> "entity.player.levelup"; + case "ENTITY_VILLAGER_NO" -> "entity.villager.no"; + case "ENTITY_EXPERIENCE_ORB_PICKUP" -> "entity.experience_orb.pickup"; + case "BLOCK_NOTE_BLOCK_PLING" -> "block.note_block.pling"; + case "ENTITY_ITEM_PICKUP" -> "entity.item.pickup"; + case "BLOCK_CHEST_OPEN" -> "block.chest.open"; + case "BLOCK_CHEST_CLOSE" -> "block.chest.close"; + case "ENTITY_ARROW_HIT_PLAYER" -> "entity.arrow.hit_player"; + case "BLOCK_ANVIL_USE" -> "block.anvil.use"; + default -> null; + }; + } + + /** + * Common sounds for easy access + */ + public static void playClickSound(Player player) { + playSound(player, "ui.button.click", 0.5f, 1.0f); + } + + public static void playSuccessSound(Player player) { + playSound(player, "entity.player.levelup", 0.5f, 1.5f); + } + + public static void playErrorSound(Player player) { + playSound(player, "entity.villager.no", 0.5f, 1.0f); + } + + public static void playPurchaseSound(Player player) { + playSound(player, "entity.experience_orb.pickup", 0.5f, 1.0f); + } +} diff --git a/src/main/java/pt/henrique/communityMarket/util/TextUtil.java b/src/main/java/pt/henrique/communityMarket/util/TextUtil.java new file mode 100644 index 0000000..c622882 --- /dev/null +++ b/src/main/java/pt/henrique/communityMarket/util/TextUtil.java @@ -0,0 +1,145 @@ +package pt.henrique.communityMarket.util; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.TextDecoration; +import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; + +import java.time.Duration; +import java.time.Instant; +import java.util.regex.Pattern; + +/** + * Utility class for text formatting and color code handling + */ +public class TextUtil { + + private static final Pattern HEX_PATTERN = Pattern.compile("&#([A-Fa-f0-9]{6})"); + private static final LegacyComponentSerializer LEGACY_SERIALIZER = LegacyComponentSerializer.legacyAmpersand(); + private static final MiniMessage MINI_MESSAGE = MiniMessage.miniMessage(); + + /** + * Colorizes a string using legacy & color codes + * + * @param text The text to colorize + * @return Colorized Component + */ + public static Component colorize(String text) { + if (text == null || text.isEmpty()) { + return Component.empty(); + } + + // Convert hex codes like &#FFFFFF to adventure format + text = HEX_PATTERN.matcher(text).replaceAll("<#$1>"); + + // First try legacy format, then MiniMessage + try { + Component component = LEGACY_SERIALIZER.deserialize(text); + // Remove italic decoration that gets added by default + return component.decoration(TextDecoration.ITALIC, false); + } catch (Exception e) { + return MINI_MESSAGE.deserialize(text); + } + } + + /** + * Colorizes a string and returns the legacy string representation + * + * @param text The text to colorize + * @return Colorized string with § codes + */ + public static String colorizeToString(String text) { + return LegacyComponentSerializer.legacySection().serialize(colorize(text)); + } + + /** + * Strips color codes from a string + * + * @param text The text to strip + * @return Text without color codes + */ + public static String stripColor(String text) { + if (text == null) { + return null; + } + return text.replaceAll("(?i)[&§][0-9a-fk-or]", ""); + } + + /** + * Formats a duration into a human-readable string + * + * @param duration The duration to format + * @return Formatted string (e.g., "2d 5h 30m") + */ + public static String formatDuration(Duration duration) { + if (duration.isNegative() || duration.isZero()) { + return "Expired"; + } + + long days = duration.toDays(); + long hours = duration.toHoursPart(); + long minutes = duration.toMinutesPart(); + long seconds = duration.toSecondsPart(); + + StringBuilder sb = new StringBuilder(); + + if (days > 0) { + sb.append(days).append("d "); + } + if (hours > 0) { + sb.append(hours).append("h "); + } + if (minutes > 0 && days == 0) { + sb.append(minutes).append("m "); + } + if (seconds > 0 && days == 0 && hours == 0) { + sb.append(seconds).append("s"); + } + + return sb.toString().trim(); + } + + /** + * Formats a duration from now until a future instant + * + * @param future The future instant + * @return Formatted duration string + */ + public static String formatTimeUntil(Instant future) { + if (future == null) { + return "Never"; + } + + Duration duration = Duration.between(Instant.now(), future); + return formatDuration(duration); + } + + /** + * Checks if a duration is considered "ending soon" (less than 5 minutes) + * + * @param endsAt The end time + * @return True if ending soon + */ + public static boolean isEndingSoon(Instant endsAt) { + if (endsAt == null) { + return false; + } + Duration remaining = Duration.between(Instant.now(), endsAt); + return !remaining.isNegative() && remaining.toMinutes() < 5; + } + + /** + * Truncates a string to a maximum length + * + * @param text The text to truncate + * @param maxLength Maximum length + * @return Truncated string with "..." if needed + */ + public static String truncate(String text, int maxLength) { + if (text == null || text.length() <= maxLength) { + return text; + } + return text.substring(0, maxLength - 3) + "..."; + } +} + diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..1bd7524 --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,152 @@ +# ============================================ +# CommunityMarket Configuration +# A GUI-only marketplace plugin +# ============================================ + +# Language setting (available: en_US, pt_PT) +language: en_US + +# Database Configuration +database: + # Type: sqlite or mysql + type: sqlite + + sqlite: + file: database.db + + mysql: + host: localhost + port: 3306 + database: communitymarket + username: root + password: "" + pool: + maximum-pool-size: 10 + minimum-idle: 2 + connection-timeout: 30000 + idle-timeout: 600000 + max-lifetime: 1800000 + +# Economy Settings +economy: + # Currency display format (uses Java DecimalFormat) + currency-format: "$#,##0.00" + currency-symbol: "$" + + taxes: + # Tax percentage for fixed-price market sales (seller pays) + market-tax: 5.0 + # Tax percentage for auction sales (seller pays) + auction-tax: 7.5 + +# Fixed-Price Market Settings +market: + # Maximum active listings per player + max-listings-per-player: 20 + # Cooldown between creating listings (seconds, 0 = disabled) + listing-cooldown: 0 + # Default listing duration in hours + default-duration-hours: 168 + # Available durations for players to choose (in hours) + available-durations: + - 24 + - 72 + - 168 + - 336 + # Price limits + min-price: 1.0 + max-price: 1000000000.0 + +# Auction Settings +auction: + # Maximum active auctions per player + max-auctions-per-player: 10 + # Duration limits (hours) + min-duration-hours: 1 + max-duration-hours: 168 + default-duration-hours: 24 + # Available durations for players to choose (in hours) + available-durations: + - 1 + - 6 + - 12 + - 24 + - 48 + - 72 + - 168 + # Price limits for starting bid + min-start-price: 1.0 + max-start-price: 1000000000.0 + # Minimum bid increment (percentage of current bid) + min-bid-increment-percent: 5.0 + # Minimum absolute bid increment + min-bid-increment-absolute: 1.0 + + # Anti-snipe protection + anti-snipe: + enabled: true + # If bid placed within this many seconds of end, extend auction + trigger-seconds: 30 + # How many seconds to extend + extension-seconds: 30 + # Maximum number of extensions (0 = unlimited) + max-extensions: 10 + +# Item Blacklist +blacklist: + # Materials that cannot be listed/auctioned + materials: + - BARRIER + - COMMAND_BLOCK + - CHAIN_COMMAND_BLOCK + - REPEATING_COMMAND_BLOCK + - COMMAND_BLOCK_MINECART + - STRUCTURE_BLOCK + - STRUCTURE_VOID + - JIGSAW + - DEBUG_STICK + - KNOWLEDGE_BOOK + - SPAWNER + - BEDROCK + # Items with these keywords in their name/lore are blocked + keywords: + - "admin" + - "illegal" + - "exploit" + +# GUI Settings +gui: + # Items displayed per page in browse views + items-per-page: 45 + + # Whether to show the Help button in the main menu + # Set to false to hide it (slot will be filled with glass) + show-help-button: true + + # Sound effects (use Bukkit Sound enum names) + sounds: + click: UI_BUTTON_CLICK + success: ENTITY_PLAYER_LEVELUP + error: ENTITY_VILLAGER_NO + purchase: ENTITY_EXPERIENCE_ORB_PICKUP + +# Notification Settings +notifications: + # Notify seller when their item sells + notify-on-sale: true + # Notify bidder when they are outbid + notify-on-outbid: true + # Notify winner when they win an auction + notify-on-win: true + # Notify seller when their listing expires + notify-on-expire: true + +# Performance Settings +performance: + # How often to cache listings/auctions (seconds) + cache-duration: 30 + # How often to check for ended auctions (seconds) + auction-check-interval: 5 + # How often to check for expired listings (minutes) + expired-check-interval: 5 + diff --git a/src/main/resources/lang/en_US.yml b/src/main/resources/lang/en_US.yml new file mode 100644 index 0000000..a4d4306 --- /dev/null +++ b/src/main/resources/lang/en_US.yml @@ -0,0 +1,353 @@ +# ============================================ +# 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" + +# Help Content +help: + title: "&6&lCommunity Market Help" + content: + - "&eBrowse Market &7- View and buy fixed-price listings" + - "&eBrowse Auctions &7- View and bid on auctions" + - "&eCreate Listing &7- Sell items at a fixed price" + - "&eCreate Auction &7- Auction items to highest bidder" + - "&eMy Listings &7- Manage your active listings" + - "&eMy Auctions &7- Manage your active auctions" + - "&eClaim Items &7- Collect unsold/won items" + - "&eEarnings &7- Withdraw money from sales" + - "" + - "&7&oTip: All actions are done through GUIs!" + - "&7&oJust click on buttons to navigate." + diff --git a/src/main/resources/lang/pt_PT.yml b/src/main/resources/lang/pt_PT.yml new file mode 100644 index 0000000..6b1d6b8 --- /dev/null +++ b/src/main/resources/lang/pt_PT.yml @@ -0,0 +1,353 @@ +# ============================================ +# 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" + +# Conteúdo de Ajuda +help: + title: "&6&lAjuda do Mercado Comunitário" + content: + - "&eExplorar Mercado &7- Ver e comprar anúncios de preço fixo" + - "&eExplorar Leilões &7- Ver e licitar em leilões" + - "&eCriar Anúncio &7- Vender itens a um preço fixo" + - "&eCriar Leilão &7- Leiloar itens ao maior licitador" + - "&eOs Meus Anúncios &7- Gerir os teus anúncios ativos" + - "&eOs Meus Leilões &7- Gerir os teus leilões ativos" + - "&eReclamar Itens &7- Recolher itens não vendidos/ganhos" + - "&eGanhos &7- Levantar dinheiro das vendas" + - "" + - "&7&oDica: Todas as ações são feitas através de GUIs!" + - "&7&oBasta clicar nos botões para navegar." + diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..c99954b --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,83 @@ +name: CommunityMarket +version: '${project.version}' +main: pt.henrique.communityMarket.CommunityMarket +api-version: '1.21' +description: A GUI-only marketplace plugin for fixed-price listings and auctions +author: Henrique +website: https://github.com/henrique/CommunityMarket + +# Soft dependencies - plugin will detect and use these if available +softdepend: + - Vault + - Essentials + +load: POSTWORLD + +commands: + market: + description: Opens the Community Market main menu + usage: / + aliases: [cmarket] + permission: communitymarket.use + +permissions: + communitymarket.*: + description: Grants all CommunityMarket permissions + default: op + children: + communitymarket.use: true + communitymarket.sell: true + communitymarket.auction: true + communitymarket.buy: true + communitymarket.bid: true + communitymarket.claim: true + communitymarket.withdraw: true + communitymarket.admin: true + + communitymarket.use: + description: Allows access to the market GUI + default: true + + communitymarket.sell: + description: Allows creating fixed-price listings + default: true + + communitymarket.auction: + description: Allows creating auctions + default: true + + communitymarket.buy: + description: Allows purchasing from the market + default: true + + communitymarket.bid: + description: Allows bidding on auctions + default: true + + communitymarket.claim: + description: Allows claiming items from storage + default: true + + communitymarket.withdraw: + description: Allows withdrawing earnings + default: true + + communitymarket.admin: + description: Allows access to admin functions + default: op + children: + communitymarket.admin.viewall: true + communitymarket.admin.remove: true + communitymarket.admin.reload: true + + communitymarket.admin.viewall: + description: Allows viewing all listings/auctions + default: op + + communitymarket.admin.remove: + description: Allows removing any listing or auction + default: op + + communitymarket.admin.reload: + description: Allows reloading configuration + default: op diff --git a/target/CommunityMarket-1.0.0.jar b/target/CommunityMarket-1.0.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..47fbee62601a6be21ae935b0ba8795bcd114a6f8 GIT binary patch literal 418222 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 + aliases: [cmarket] + permission: communitymarket.use + +permissions: + communitymarket.*: + description: Grants all CommunityMarket permissions + default: op + children: + communitymarket.use: true + communitymarket.sell: true + communitymarket.auction: true + communitymarket.buy: true + communitymarket.bid: true + communitymarket.claim: true + communitymarket.withdraw: true + communitymarket.admin: true + + communitymarket.use: + description: Allows access to the market GUI + default: true + + communitymarket.sell: + description: Allows creating fixed-price listings + default: true + + communitymarket.auction: + description: Allows creating auctions + default: true + + communitymarket.buy: + description: Allows purchasing from the market + default: true + + communitymarket.bid: + description: Allows bidding on auctions + default: true + + communitymarket.claim: + description: Allows claiming items from storage + default: true + + communitymarket.withdraw: + description: Allows withdrawing earnings + default: true + + communitymarket.admin: + description: Allows access to admin functions + default: op + children: + communitymarket.admin.viewall: true + communitymarket.admin.remove: true + communitymarket.admin.reload: true + + communitymarket.admin.viewall: + description: Allows viewing all listings/auctions + default: op + + communitymarket.admin.remove: + description: Allows removing any listing or auction + default: op + + communitymarket.admin.reload: + description: Allows reloading configuration + default: op diff --git a/target/classes/pt/henrique/communityMarket/CommunityMarket.class b/target/classes/pt/henrique/communityMarket/CommunityMarket.class new file mode 100644 index 0000000000000000000000000000000000000000..6faa8a5fe442f871c49544d47881534529777cb1 GIT binary patch literal 6934 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 UPdWlGiRpYw@F^x5#SF}Q83@zd{r~^~ literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/command/MarketCommand.class b/target/classes/pt/henrique/communityMarket/command/MarketCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..d14c08020b99cae6f3a832cdf61375d721491430 GIT binary patch literal 2664 zcmc&$ZBrXn6n-w*un?A(@}9m3QVIzvER|MkgVlQIfke}dB z&_Cdpe$W|3@q?pZ{U81d$MM`v2uWa49cOeH_U=9B+~=P2oR`gSfBy6{fIHwZ^dO=` zGY~~D!_W@jBd zsZ;_ot!25pEBtWJ<)&HRu922@gjcnLvLzW7Gu=)r`xdmcjx!9Cj$1a1!S1f*n?m|@ zmzlG9O}H@(;hc_P10xt^Nc{t3hI3`%XNBkSvdD5tPnY3FBH7iwk|VdQve|wt-G_08 z(Mlc5TdIb>EjrS!#W0Duj`IdC;No+MI|ZBgCpQ^xCNjr4%KNS*%jslB65qQu$F)qp zxkt6kX~B4!w-Tc}i-Q<-YyC@8K$oi7Q<5Di2)2^&cHkp41?R;%L%t)d7kA^EsUKO)kYr{7{;4)N@ua! zJfjG`YG6^ZIY7+hT(M>Ci%oUQlq!d11K02pT}8_Kfz{0H(sMFf4lMK7J{`k#+|co| zfmd*oVWC@PwI5|LoT`vnZpo~W0mG$4riJvj`b{SbG28-G`Kp1}K;1SLW;yUJo6=(2 z)QUuu$Ive-Rlk<8JgS9Z3gy^L$q3*LhMAUYI&yn=Uz7shado`OFm;OE6JDe;sM^9; zC9s_6+6Ag$TAMUkV9?f_O~G(BV@a_dREokSNSh?X8K=bU0(UL7ZwNJi+oGsex?Xb> zL)#=t6BmwD9)x3MtBu^F6Ag8}qSLMPcUYuPcGc69qU1(6ztqHGINu7_o=vh+y`!vV zTCF-RZMemtHxvvPyO>kNQJWWqt++ff1c-U=mWj)eQyix@$ossso8{F8@l%fj8lV;N zQ0`ftr4mxBiaSy|K5tao<cvo9^!4XSD3%k+DmIb^(zLygpv9MgSVnzV;Fqe_W$$)aJD3 zhu9#;6mJF6D;KpN@#;6U*0az{QeY(v=6YS<3_)v#pfy9#njvV75T1ruAK_zK71}4X TD(B}A9fjKc+YmktFZk>)n9J9d literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/config/ConfigManager.class b/target/classes/pt/henrique/communityMarket/config/ConfigManager.class new file mode 100644 index 0000000000000000000000000000000000000000..e35a8e1b4a6df0daefac77c2ae8a6b31a503776e GIT binary patch literal 14615 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 N{yN9$M|NZWe*p$``eXnA literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/config/MessageManager.class b/target/classes/pt/henrique/communityMarket/config/MessageManager.class new file mode 100644 index 0000000000000000000000000000000000000000..d65cc1b1d9dca9e3def9804f02084d50343a1779 GIT binary patch literal 9038 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 literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/db/DatabaseManager.class b/target/classes/pt/henrique/communityMarket/db/DatabaseManager.class new file mode 100644 index 0000000000000000000000000000000000000000..3ef9cb6ecfd43308a2f0f028f49d780a8ef610e7 GIT binary patch literal 45115 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 literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/gui/AdminGui$AdminAuctionsGui.class b/target/classes/pt/henrique/communityMarket/gui/AdminGui$AdminAuctionsGui.class new file mode 100644 index 0000000000000000000000000000000000000000..12e28bdc9d0ba1613c4c0aa5807d4561cc983eec GIT binary patch literal 8810 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 literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/gui/AdminGui$AdminListingsGui.class b/target/classes/pt/henrique/communityMarket/gui/AdminGui$AdminListingsGui.class new file mode 100644 index 0000000000000000000000000000000000000000..36848ada444dd5056db31413d68b560a7602eb01 GIT binary patch literal 8450 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 HgO>jT4tt6A literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/gui/AdminGui.class b/target/classes/pt/henrique/communityMarket/gui/AdminGui.class new file mode 100644 index 0000000000000000000000000000000000000000..154db21838ad6fead3ea479a56dc6c322500b60e GIT binary patch literal 6091 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 DJoFS( literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/gui/BrowseAuctionsGui.class b/target/classes/pt/henrique/communityMarket/gui/BrowseAuctionsGui.class new file mode 100644 index 0000000000000000000000000000000000000000..67a1a02ca938eb55895cd47a1b2310f3c2d806ed GIT binary patch literal 17531 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 literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/gui/BrowseMarketGui$1.class b/target/classes/pt/henrique/communityMarket/gui/BrowseMarketGui$1.class new file mode 100644 index 0000000000000000000000000000000000000000..e317f6c79d0276954bd529550759e790a54ce620 GIT binary patch literal 1103 zcmb_bT~8B16g@*rx2+4*ihTKnx@s%R3W>gGjJ54z<92IUz!)CLu$|C>Wf%7Y;@|Pb zXEia#7=D0{{vhL>f*}xtF}m5zoiq3Dx%cip^XDg7cqd0hOCZ3a1WsIB8|KrkHw;hQ$JzI?Q%aAF@sg9 zuG;@h_^^OH3L1(!&Om3FJB@K8mFCkZ+>6CQ%?qhC<``_l-IIyeYx5mrCoz6?Xq@QK zIPB2)Lx%&atpfeGVI3nVF=*~`z20;~YkbIgGk8;66j9Qf+A%W0>0H zyWI47uwgo(n|eJ<3cuToqA*f5P3V|ZHI-YAyKGsldaLOyty#-X!&UAJIxZ@=Ub7dQ zwZ^M8w_`Vy!Bvm}_7q!BWt%qH~Fk;I< zIO+Dfh?e-ePbXzN^tivmBdPG=;gFkfZ;J+Th>LDW`Vp2?UyPoZ-KnkK1E)5T(? z2_;swqmyg6PSzmw78%+B)@QK&uf>nhKB#x-6V7Hk?~r}ohvNhXkKh!++!4G)Q0v3@ z$fAHzjN?2eD925*w=j?UWFOGwZjjC32Ib53vwo)t(5yjGz!>r`HHv5-Ux>5PkE-G} c*(_#gz1u&T!7SM_F$}=O+>=S_jh<5eCzY%vTL1t6 literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/gui/BrowseMarketGui.class b/target/classes/pt/henrique/communityMarket/gui/BrowseMarketGui.class new file mode 100644 index 0000000000000000000000000000000000000000..8466800821cb3d2c78ba8fbf60e0941a6ff0fa61 GIT binary patch literal 14401 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 TExxbC?^Nv5TD7yab}Icp5UrF% literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/gui/ClaimGui$1.class b/target/classes/pt/henrique/communityMarket/gui/ClaimGui$1.class new file mode 100644 index 0000000000000000000000000000000000000000..b49505f62e249af61779fe3141dc9056506813d2 GIT binary patch literal 950 zcmbtS+iuf95Ivi?agsW%35BNRR;XK&f-pQ&Ra8+@B65-HHVE|rZJbrIsbdFUg7^`B zfoDKM2%&xeAB7k@K_FCBNVU8>d&Zu#XD&Z}emeuOkB51rkXE5+SU`qhcM_UI;rjAT zBuv{Ik0V!x?^@hH6`>gje=2QZRvj+K)(jX4I21wTgbbM}cOnrm?3XJi&C75-%^{1N zioAwJXbd|Skqsg_6LkSr)}?Uz zHQ)FASWZd9S}bR&(eBpTN1el0uj|LnrivR3`k&BFZzOE$N_N+FB=vDGxuMITRK31n zSZ+#Jw4-rP_(#0wkf+%6Z0>ZqFJnA+7Oarlr&P;1&RbsO+oCSxh(gkTs{5n(UgE5| zw&MlT9kfI^^!h5c8Os0LJkr`0LHOJYNVe8+UEvdd5Qsp<4#VS%c+Q(nhQ+_;Q{SMO zTBo^ZdMTc&_(YzYxJC9hp%Kz_0?J>(&c5eAL;V!Lg)g|GbUr|Nk-$}g3km#4y~tq& ztGI>|HnB}MjXT7UNqF94gU%^hcWG%*UaIs*E8d{sUh-`d23ZALwBJuWTPTw)Qd|lZ NJb1Q78tKuqzX0?7{tf^D literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/gui/ClaimGui.class b/target/classes/pt/henrique/communityMarket/gui/ClaimGui.class new file mode 100644 index 0000000000000000000000000000000000000000..51172c61b72712c526c75be71376085157c27d8f GIT binary patch literal 12554 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 HY;F8MKPL^8 literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/gui/CreateAuctionGui.class b/target/classes/pt/henrique/communityMarket/gui/CreateAuctionGui.class new file mode 100644 index 0000000000000000000000000000000000000000..620f6fa922349b64502d1583fe3f9f01ba5498cd GIT binary patch literal 15348 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 z zO&*%X@7DP}{9aV={QdpL7(CfM|BHY(lNo00Fej}in|hSf8EVL^G$w0_YJG$8kjh4- z;v0>RO2wJq$5*-d{W@RG*oRi6w=dabfvAt1KGbXpVViybF?A06E+!k*rab--f7rzz z(fJzw=nQ35$qQ1|t8%0Trn8#e($&`7)7F=&BAqp3sGdRv$;4K^R_BlL$4!6T-9Ky$ z#Dh}2pX9Hj$u|vV;WX6~XwmsPov-IlBIrfpA;#DlS(%a>WgU^l9Bl?-+4=tq=+uX! zu6QUUW`q!SBj4oWn|1yae>yXSol=hQBM@GXKRUwn+6+TCzw6-3iG1F%@1|4pWyHJ5 zGYCnb{}%p?i$AOL=fwGK&t_exBW*KK#9?pt&chGo9Lin{P#- zATS{8+^+K-k^ng+awAAw&Bu_q(QOhmk4w-z!F2vKVRC9BH1$cUjI{I3D-MiYQ zl8KJ;q5v85t}b6o+mtu>E;qZot*6g?o9vHWO>yh)uI3(J=guiZyqHCXq&g%=EdhU9 znp;rqv!<w^f|!`S%u z`cdme+j{7bjWE-ytd2&sFvT@lYL?2OnYG~agDu)-#;uHyHf=%!&I?j6%#XkhNgxqw zMx*I3n%Uhsq67qJxx!v#)XGrHS25j{q4^ZJZ3h)H%p%ibvdU?CoM#=9 zMYL0s1wmjgie=a!FrE9KqkBqe!7V~s+1%o3@o$Ize_!q*t$7v-Y^GnnLiRDO^41+P zE>`6zcpC&#oOjt85SLs$*{jxze}Y+W35R3RSj0cpVZ?^R15vj&2WC~V7M0rd-ikq9 z=GNxIKUJ(XH%#i8TPp(j3cs3Yy_eluF(SAc6>Il~<6byDBXGdL zb3dM!Lgnm*L&NvOTg$NcpoHQL+h3T9>b#t*v)yO}e&0+X&}1 zWl8PIQGs9oU~)mTM(wQ!{`tXY)7`6>J6JZPQntU0Mq&^`}P%pI~f+lQnFZ{p27AGsLv!&UWq;H|^4V zOv|RIc{)J4v>o`en!PLR-$XAh!3PhGnD3`T^2jkdicHmR27puGWr`tD28dL3PbBnp<6ajEZklZ2la- z3n>@B8}N;4Ipt9$&8CeI#U=>h9DWpUye1+31wV!sNGd_$+dJ+=R3gB~`Ipwje+3<( zccDyGTD@3iu9KOo@1(g2DofDPV^o!HftMBLtJUirr4G-!1g$?oo7X$5s|y=TohPX6 z811M|P-hK#?KnwY8tuVdam`739g5xwIzPRVRS*c#x%k4i12wmHoT==fGAOZzcF}5_ zo!U%Yc-n*3ZrX=4QvsZsk`-<;IZmzcLOI9?abgwxE6~)`-4hUT4(K%UulY%=ax+!) zZ}_*EjpalOlrDnrL|gio+(rBM%EE-%+iBo9U09Q#(KNGi0F~$hnooU-iTUQR6cZ&T z6Z{l<2^w+q%M`Iz1=Ko-c%zU{(CYTP=%T&1Q}j5Ed)}0w%M$d~j+{+pg^f4TJapMn zR(q1(ofIGH&JO^;9;1<8*C7^C<%Mp675p@VdQF30Jj!*mJV zgw|*1QaXzEZS)o#k+_1sL08g)^mcj(XKx-x`!Srod4dknbM!ty>MDGJeLv^YA)ZAa zd z72wPC%T(r~CKqbW|EBpb(3=1o9CffP^GO_C7R!u5s0udb^>JKQBKNCTsPNge6G|l;NO=W`c@-M*1UPsLWhiW~SiI_C(>%j$1=0Mul z!Fya!XVMLj^o=;6c{BCl=*lo;IzmS%gy&JZB_#>)om@YTxrqfL$3`jU4{*X7sO;uv zaOc214qccl=Ee9tE>186W~&Mp+(1jro8ZR9iyb$U+w=D$1h7xgKZ)9p&|-Nje;M!o zjdyssqtI)Lfbhw1 zu>499yOgvzFX%+ zGbJ=Ip908e3LqDx0Mcs#g!#|>tOby#07f^K{alSB!38x5F1nYxJ8&)8WC>!uqwI6& zfd77qKX_f3BvCE?mf-L8_^ZR;efV36zmphMTw6WC3yE-R1vdE5T9aH^g3l;*6!8)S zxdbmgLYJnVFJJF0b)MuJrfX?ysT0quPH@9XUZYWCZgH;T4f6JErm;p>b*Z!1b&@y0 zxOqi_H%mN)uT0O;a)P%V0oZF3+;N0Tr$(Y$D-t=B1H1sTCVBvY>w8o{--jdlAspd@ zv>h&NA3X|){sPYLF__~+aD9){INaHl^lQ2b$8@fz-vHddgC z=#LonEd34VWF*9PLC)9XK>J?+>s*Xj#(%|~3v@d8Z~PqQh88US$=%=i9{_Rzs7ff- zz|#}_Pvr;~(Zgl{=6_)fGA@h8^T>Y04Hi-E%e38v0xn$PiWlg0nyVPN$LDHG>Ca+X z7yRi0Q}(MnYEJSlq!M=$gxaIg&bs@lpf17ZCHR8Fw5F!Ei2VufKgmNH3BHxv;}OVs zs$f-!uS2JT1cwgO+`0rERV_Mtqe&`qTBOYB9tSru$&M0y@LH;A;n6AawEKDRWt*qPwBSk!8yiF<)(Rf4aqt}Axd)K2ibgxsM$Y5!#c;~!An^T_jF zpbB~s=J*m0=)X*R=oKVjIXDdDpv%}v?}f$R2$A1}xOOY!kRTV(13a4^;W;>LR)jB{ z^XO?VroV6r7jY?m>lHAzo4QD*8@}AN6?4)4dg=B_<@3&i0yQ%Gn_qXKgy+ zgmg;rXXTt}C#CXbUI`9Ykq1$`jMvZ-Zp49{wQ5CXzPuvkj4CZ>I03pF*(Fs0`@pIviY8Ka(IwtrNaDjY74k-+o zYf)(~{NX~J*h%Nwi!7c%MCn%6xJYSKlHx@Q1EQrxrm4%F=Fptv1S2SHn2hi;=wBE) z1dn~>Fb%-19WDDLm6SSC7R@L5Xb#eef?D-*09H`yD0LR`=ZpA@7jOHNKTgqOl5vkbi0P0Ln270+5|~7%LrP$# zC(I?s(!BLcAu<%IEZyz3;9t0W_BGd$yL!27zY_e_G}m%iQKDTg{S49Z=h#F&syH(D zCxt1F3blMV16F1SWXz%*O)@)8(={xc&Zh!xC9yVJ{T8ZUkNTabe&?&-1?qR9`dzGk z&(PL_l2==TKN(-H+7()*R-^9fw0f;h+k_cbfklJ%Yv*h()i!HewAS1_*!q)N8rCF8{$ctqTTd>%&tdr#w7!hn;AjOgZNk|dckkM)+E!y1?yR%?n zJHFyLHo1?+PMgHdQF_IV-LMAIxJlD9P4D!+(xy$D^i0n*ZbILGW_C3TVg*m!$5?ZI z$Nzorcm1tO0rSnDb{=2;S$!d3O75781st5 zx_&D?9i7O|&c^MinX;*T^k70gYY*WTtk$qb$6BmgVx?DTEC^4Vc7Ex@X8Ke-W(syT zG?r92jVI_^ZhU|T6STtgjqaR<%RB>kFSqhNQ#m9qT8V^%7bO{Zz$C~Y;DFl}QZVeZS? z*|ganCK4NTG@^-~F=8=uj;NbzC}}I@+`Mo)x&7LH^s6zIO~vfEm7)@@ECC=g zpNdaMi^0RI22e{yL+@Qr)?;q+I zKR!It(Kp!BeSCj^$MEp+gB^oCf*QX@c>=<(ABR;P7-fCVzW$;6NqV;)L~*u zuzvB^^S%~n8PitOg1UyjrI@RlcK|aw;>yxhJp(;M9sS+MJNplG-512H;O2UxKH=rV zNIoZNAa`Febs-ysC4j1DCv~KeA-_2{k#;1lY>H`5x>ZzWb({jDYQ>b5P8xQXlR9IB zZ%sq@B2g8FU|z==6;i8{#;n=JbZgjSaeIbm8QVzNnIIk(Y^dKkG84~4_%CUt%=ySv z+Db;|t!z4yF_;>HcnfP{{m#=y+-3wvY%4NhMoyE@WZF2L+N8Yxn2yKs1ihZH()4;) z!_mb;<%Zqde}IVdymq^Ep zs`x`XKBQFCIy;7j`g(?fc%CSzj}2M{>;&<{>^JInj$7HtjB(10q^yVslY%mSEjI=6 z5gKlSp%B8y@PdXP)$wtBLa@mf38u<{QD6Av

Vk9sQ585vzhDrP1UCSxx^FN`Xl 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 literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/gui/GuiManager.class b/target/classes/pt/henrique/communityMarket/gui/GuiManager.class new file mode 100644 index 0000000000000000000000000000000000000000..4e854adbacff69289a060b0ce0d312fb64bfea68 GIT binary patch literal 8801 zcmc&(33yyp75;CQPG|CxwrSEfg+kFvv$X?V6i6ve6G&5%l#-^tx8}O_uyY-O>LMRQR0$K=_8mcf$pm8J<9W=~z;=HU8jirW%vxFJz z*3&~qCK}Hsq8-^pw{GfjBP}p9HDZ{2F)A>tYZ9K&EfRK)hHA_umyu*Po-hTLbxnuf zR;aBdgj#{7=_DkdZarak8)lX?BB;T9>5>HkJL(Tf*R+GB8p7LVw=`^(#x2xv7!DVx z7@i~$WTA&IEj&UX8f4-6bn5(3!v%(_tS`DwmaSoZu5yg|4lp&cDxXgk)(>-Q; z#hRt#EhZ;wSc{VcDu>;lxda1!Qh-MetwnKg&1eMcEDr4&PR1#UgX?o~99#nAutA_c z$PaBvJu$2%qr*~vs)jCfGjzr5FARBs*5^^EbW;%_>0~`^azR?I@3HiruAvuO7%q&- zkHv%w7Z$Z|6<8W%@&+S0qAc#SG;hTpcF_595KzvPC0Z5217^|v7b9L#&EBZWHx26qjh1JNQE$>;XE++tqqz7uly1R ztUEPea6Y;^d$)APWWa7&TT>Jk^d@q-#bpH?rq$7807?WNMwf41b z>D<&4!SNW7F@irG@~21s^vRzc7zp7af#pFC@5v7L8|hASB%4u-aS!%NpIj`Edj)+` z$ZCnJ+omUz{d#PurMFPdYq5MCKHIw8z*@0z77r*)6zT z!yUMjf!kECYx3Bx!wIv>T>@2;czu1H?Gfz9cnEiEn7}=>#})3^tEev!rf;p7FVJke zMwu(+TN)0YAu8}W+#AAu8a^*AS>VDhNF_{IiP24FGGQ80=ekf*DvSTZ$gbeg+3 zIF%lg{{NzeFUe2ku_W_3sr4q}rk=^BxoWzs)uov6B(%oWRYU`$sIxL!*0wND9oqhF zV2M!HrV`AoE*fIRn=N{OlGLiZQZYTbRZk~m-+oz^8I%XO=0IKys`(?3fF=`j{_LfW zcrqCaEIjx$umYAs?xP2}j_@ccAUerz@@u}(lM8_&1r>S0J9{7}N%3*YTIa51&#r(iuxpy?BG7*>B)alYGJz~t?PMX){=ZN}7sRsZ zG*|RiJ(-mg&`u>RH^X{}LDLRRR>ZgNj-t#Y)8$m}?GYmYZOTU|WmgbHyzn}S!MBh5FCZz~ATe{r|#0u%yB4`ze zI4~}wc|TPYj7x+t71B@6QNOteg#2g<%N3N*63UQbR**}85D`Myr)looBGl)P-WK)z zp;%Tt)35(HS6zOz)Z3fNrenq_2^qR)k-VL{m&+i|{nu%lMw+IMj>_m(S#UND30|PC zpKh~BWx?r;tJF0pU-gH?VFD)wp$9}~+T=+MIEq)ICA=Q5pXMGNB>~yG3XAT?L=~122a@fpHpX!{E!

tP@OmA zaP}SKS%Sy-yOy2;jz$^g^JyusU>fPsCM-uYTCfZo_|%6e?L7u5dg}tLz$I9TE3pbU zU^O16^gPRMJb@?KqX*PHu(rTc*lBqOtsEo06K=c6y9QMq=Of+@hFWi<15rI@Ks;rr4spE zFLEc5Hx`Zjoa2Hndx6v(z|c1Gp51sShQ~2VZ|w5w*vy4|y2~3i4*MF%8(*6i`TT<* zZzJ;d0OYSb$nI%dL!xi=51-MMXZ{YtADd;T8I%h-G;rsZ3+RkJ{;0yqpYUfJyq$d+-ZTY1f%lh8#lDUi?0VP4X%4n# zV+;HRf3*?U+lW;*;*}-1A6MN@9aco2p}5@a!mD!dsvNw(;qNxyNj6@Ejdx86ZuNlO z<^rp5z$zTDe?Tf_62xt6%h+~EunBxr@LJ~v-iTuepYj#16jeUL zo4vwM`wGuuZ8%l)nO@;%e1+$TY9HaVy~5A>2$u+14VQ=-QOkBA_k@WdF>hU+n2$Z8 PZbn!v#6EHOjPQQ|v_Nlh literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/gui/HelpGui.class b/target/classes/pt/henrique/communityMarket/gui/HelpGui.class new file mode 100644 index 0000000000000000000000000000000000000000..a531317d6f701b5bfee4d68e7fac7f42e809eec4 GIT binary patch literal 6903 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 RYP0Hp)Ji zo6wMqXp7sWT6wD~)~;yK&`+sm>cz_Tn#oXn(Q7UhgGedp*D!=ML%iX5E@v3d>XifQ z&@vp$Z5ms<2c$q=#V|$`jA|IeHHLxTfHgO4QC)|Y6Y{N>49nTB=#pc#+xe~qGw^M< zneWaZ2qONBhU=JM=v%SrC{`IpyQw;nWxbw2TqQ{|2_%J`)G&o<1=)4&QE4It4VQZKBHEY+QmD*qG(|bJ?hIGYiSWeyYZIPyvOLnamrA%Mek|DLp zgMDxBndK8E;66zp2m3aeq-i%@D+qlGm9l!BF4s!K>B#%Mi%T5BO0T7_<{4De3;hOP zw}n6>f6manxHnWpmA8YZUOP~*%&_pkGsB>jU6=dO?c&sC|Ao;kEYhtQrcsv)<6=Mo zvNTaZDkG+dcH-pEV484u$eSW79`y+7M+}@{@I849cj?;~?d1qRhI@!b_$9I;LQS*W zDXyM@34H7VK1(awISM**r?7VdN*5hcM7Bs)qAeviJ8^>X5A^#lCIxe%i-;*1 zqju<@-uqF=d`cB_Kq*B_I%N6+L-8+QJJJy(b4NacVqWen0R!`$uwo}{@-s!HZ%8M& zc?>CXZpo3OoZ|K|R8i)+Km$?rvn1;rGSsNtsb>L;go)t+9!7QvkI0IFWmv-F!uSvL CH&+D! literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/gui/ItemSelectionGui.class b/target/classes/pt/henrique/communityMarket/gui/ItemSelectionGui.class new file mode 100644 index 0000000000000000000000000000000000000000..f3bc99fe58335b85a97c0a2018b4622cdc8fcf45 GIT binary patch literal 8997 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 literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/gui/MainMenuGui.class b/target/classes/pt/henrique/communityMarket/gui/MainMenuGui.class new file mode 100644 index 0000000000000000000000000000000000000000..0a650c703ac078a63530872102ef26c1983a6246 GIT binary patch literal 12100 zcmcIq33yc1z5o3uLnaBABm~)_ARuZ8Ap?l01kp({gpo{wNdQ4@oFqdSn9RgkfM~0A zf34PiDca)J61BF9g#hlgTI$l;y4QWHR&A}e_0{%0wZC)joynacTl>BD<;&cAmjAw- z|2gMA@#Vb_0`SP+3gAGF3r+*0kSi$O5ZDxOhXavLcVpXzV0%K4yEqgHC6)+s%4V&~ zM;`KBC@?S@hG2Gg!o5BiiG@y22How^uC64f_V@#_jlqPwGZ}LG1EGjN7)jP8L&Ve_ zPIiVOf;sg=!PR8qsZulx4HThRP(Y;qKqSx^j0q}+M5D-)tTkI>DKRh(2WUnDJqkl< zeKgkTZcA?57)rQFL>DF*n2ge4B+cSjFt#(8@CV~@@|ouL$g){O z^4lJbtP6FzGr_9zaFE~t$})${g@f_RE^2g67gbt-sW{k$X$GcahG5=MDjg6v^*}b8 z0-FVgmDTqfzBv&KMLMfy?cY^^nK;yi!wej*NX{CHWHJ#7yIX==5-a&a$7+v;qp{E# z!Ir3rzW}pP?!s&X6_`Vf*$h#w?I9>?j|BsXpf9qCrisRS1Sgl-4HilbxYJXXMZ+C5 zo^OBNXAJ|X9mH*5F6IgH)2Id0h68lr2>Rl%y6`1}UDe5u;x8XZVxbF188{lp2*%lD z_fz0lC_s%(tZVYDX>D%t_!_*mt#$RD=H}KFo(8XAyq%*I03CKds#F*+7EH>}Q+mp* zRe4|_%QQ9jcmp0(3!ITaS5QzrpbPvvQfUrq4S2CsFse<7Dwsj9w~3e5t6Qm~IT2{z zST!2U;B(;w1Itk_m^$$El&uA>crc-$1vATh!y%uws(|UE!9b%*Z-tsGm5@B~o=Cfj z@e>U+q1g=C`cOPU*KZESHig=$lZC^CY}}ma&V-{tE3wLj)do(&8XChUP)3dsjAj6? zjHvACqpnIwPKTk6os}znwN&ZJIK_oi4SWr)g84()V_WwplQ%E}uIYy^X2SQzGW*3am#&#&O8bQ>BZUd()R_BhyEOrEp zVVhC(i1KL7YTQ5qNqPfW^#)=QI%GV}?NKA-HVcppZ^jlEdJLSQ7(QYo3}@jmIa(2n zbdaOeSP83$uN(LV&SJ<1y1TALoa4f|2F}CzT>APWZYc7M)dVXY218pY!qgD8htK|iDjX7A{q52X#EhNU{jp@l z+=T`%!hdlsRZgs{g>-Q-oEHIcrOX^~4e3{~%0ATpd|YebI((OF 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 C)tG4j literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/gui/MarketGui$GuiType.class b/target/classes/pt/henrique/communityMarket/gui/MarketGui$GuiType.class new file mode 100644 index 0000000000000000000000000000000000000000..5e0e7d68fc52789d4ab96cf57c8918e73e85b04a GIT binary patch literal 2476 zcmbVOZF3V<6n?fznw#{tSyHGJP+lzd1tC-_2rZ@Cbla|EH#M6U18CfarAq4_UL{I+qbw36TVTlO3 zHN(k&o;M{< zDo3K-tKyuQH>?bo`If|K_O++z^i4`kv2SiU$I04_Q#q$4&M9Bdyp_pQ6>2LeyCE^F z>@hc+%RjTuNtl?|5FJ`EGRvl`VdBy@c1;|Mu%eikcpK;G3zRCgs!tzxWHhtk-Skow zuez4Xu5S3H#$+5eoG7vqOL&KR{C9v^ZEjL2H@!;J&t9eWjC71nSG=vQ$qs|tsF$m2 zlbtiD1f1WM$b(Km_f(k<&$Nbt&Q$G@*64~rBu>3?1!4kHAR&+x*d?%AV6VU{0tW?# z1cn911da+E7dRnsQsA_}l)yQGS(RW@qKcYoBNxA=;pE8Zb{a_~Kg|$M*RD_x6Pa?= zcbc24em(E4R>-pO4{I6S#z)hT%+yL=WyPzPRpxg3aMjzSS&}cdT7z!;jrH1ktjIPk3n<`b>-8VaOsc$s3jcTVSHN@RovtIJ&%c>21 z&vfvZ+Cns;<8L(&dKBqJMpS6!ptW~Z0b>3kMf55^MEZ!%kp-#Wu?3<$aC2XOK<0lB! zh%V1+ z;+9$kXNq;va_F6&+dSls9#@Bqrc_J%4q^HQ?&-UJhE@m#2)TuDfT&xD1hi2K-2r;t zLNtKx7DRx4x1f`0fPid+1Z3Pt5DT!MfLe2ipeMj#0vTY0pf|t~g1!L92oeFt3G@IH z1UmwpB1i@}L(m`KEWyqIGwzGM75E5uT7_%(T7_%FKT+AqmC!?6cz_U-cf(AgObQVu zaV8hLne;Nb6lJ0_xh$CUGkH&M#SJifUvC8tGArt>$bHN{&|^GqKQm8{Gdsj=RqtVT zm|01e%tn}9(R-O4Vdm?7%#Ja;swbF@Gh5SjW)sZT^&QMkF)QmyW@ngf=>5#jGP|bl zWH$2%l?O<_!SxaM#uSgiv9yxEsP~CNjJ~|x=X|DJ@zp^p*gznDL!Moi!TV3!fUjx IznmHT3qmjt;Q#;t literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/gui/MarketGui.class b/target/classes/pt/henrique/communityMarket/gui/MarketGui.class new file mode 100644 index 0000000000000000000000000000000000000000..36ea7015a28f6ec464ce32c536c61b990113969d GIT binary patch literal 1098 zcmb7@OK;Oa5Xb+UI5C9KmhvpGLYr2J3M>zmOCVsLHSNx zxNzXW2jD{?W;Y?t0VH$r%#LS&GxOK%&tKnv0CEnH@`;-Xy12RX`Qxe#( zH`=)i*SNU7b|7$JsG`26rVfLVz_WULsqjB#aM@0WgGN`NGGkbA1fJ$YER=KvuNn7w zh}Cu&(P1|3QF5eunj`D&I8eH)lF**#LC*}sRA4Xvz&vQlO(P(4O?cMcl0tTxWZri?tmSBb-TFA-nCg4+v|MdeB8hWGX!qp)||D^aeHeCQ|4cQ zTtbKiLNMaCL)^jLIpTpkGp6{(!E7rt#&gH0I$mMUC}PuP-NSvh9{<}yjlGKVeC)j3 F_zj}OB0K;9 literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/gui/MyAuctionsGui.class b/target/classes/pt/henrique/communityMarket/gui/MyAuctionsGui.class new file mode 100644 index 0000000000000000000000000000000000000000..d93c0753a4cfa16d676b8d5f85f9628d42c76a28 GIT binary patch literal 11898 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 DtbJ{2 literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/gui/NumberInputGui.class b/target/classes/pt/henrique/communityMarket/gui/NumberInputGui.class new file mode 100644 index 0000000000000000000000000000000000000000..7f453cf46e601fd5137284fda261f70a4309d390 GIT binary patch literal 8440 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 literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/listener/PlayerListener.class b/target/classes/pt/henrique/communityMarket/listener/PlayerListener.class new file mode 100644 index 0000000000000000000000000000000000000000..0d9b2122f492367277441829c404d78142a40d7f GIT binary patch literal 6018 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 Yv*7My_$9ynnLDF|`4{{R|G>uo0Do2H0ssI2 literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/model/Auction$AuctionStatus.class b/target/classes/pt/henrique/communityMarket/model/Auction$AuctionStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..2723f9dc61477f38ba3a04b5d4c1a9f67a6a982b GIT binary patch literal 1579 zcmbVMTTc@~6#j-@c3T&y<)U0f1jH7Uihu~MmC_bzEG==NvGKtyWrf9dtJ^J!Z@&0{ zv?M|_3f^A)QN}aV8cWc`bd%jP-`R7%IhQ%}Y+lp zRH~YW{c=sSp6Pa|RNmH$p;)zG8)b8>Ayr$ms}&CzoC;iUGq_{%jZ`klu#j$%EzId; z1s+c4N@fzt1lOEXpm2>-&8CH-LqR83c;c~4Jef|{&CV8a=Hr&E~1a@#&WUrW>RHXeB5%xUJPJRLZ5<57^0vH#j>e0bO(azJ#AkL6*Y4w zl-=6X3wGFxVO)_gqF@wb3>|+Al4i9;0qtwWs-AtyFc)a@ju*8`CETP?ZObrs!p%Ey z0>MA7;2HwdjEF%Uj572#Q#CwO!JG`2mufLC!y`kH(J8|(qlfFJ72LuMuaAhQ!Vn1r zTdxqs@|(vQr<26cnKn#4Q!Q=j)`qrKB+c4if(*9Y69#{}T+oU+%`!NDV-u&Tm1r;j z*-A3_)^vNfyuGejWMk_VCGE6#4H6#J*fHs-Tjc5p1aoviBZXq4xDT4Rcncye#~cka zc-3;%D(EW)FNxBavnhT`Xw!^du~*9#TSAf{_}>FYL@CqMEpdo+%BTI*{4PyX!-wf2 zke2%R6ayq_{Dh>T6Ov|4NSZDoX`%pMKc6DQeR2$xU5xP99x`#Ypj>Q-35BB3z7E^>RtP3gSDA;_jl zI_Q@)F*$gMt8Z!fFD3~Qo`qoYv{5>=ruVLJiTb>J1ZYd1(lVU%1txs%k6?L64GuN$ ztU*%qt{OEh@2;U;%}X`-)Vy3nmwGm38TSxv@V##EZGIp&f6#G=i32zUm~;vt32@yd zfLDMUZUNc_n34qW2@sM6=sLp91N8Eo>(w5DMC%i@<1_m4h064m`t*&i{O`!%n1ZM$ YyF?mZr)9*2Okjm1zX%u-xWCl*3-Y&W8UO$Q literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/model/Auction.class b/target/classes/pt/henrique/communityMarket/model/Auction.class new file mode 100644 index 0000000000000000000000000000000000000000..456743cee2cd8550e43f4989d6714f857b702d1b GIT binary patch literal 5218 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 B_sswR literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/model/ClaimItem.class b/target/classes/pt/henrique/communityMarket/model/ClaimItem.class new file mode 100644 index 0000000000000000000000000000000000000000..16dc042a3af2c3928f5e147d6b0214f930918876 GIT binary patch literal 2436 zcmbW3ZBr9h6vzKJ55$B8m8U{Pi;5Z+VOwjZ8cJ0xH8!Fnh4)Li#g$}ZHyb;=>GT8j zMLW|>JAKg)&=1w=|J)5^8#cqho7{ak_kVup+;h(6pMU@Q8^9A(3rHcIL&icDLkgGP zxgT7o?)v-AtKE0H7Ag#_dcGH~DWppaI|W=oK8J#ZVOR>6jd|!bv{Uh0q3hE=?Kgi^ zm@F++PrNMWF^Y>hT(WQ(V+xD!L+7pb1Mi2nc52N=qfJkTFWulkhfbrpr|Zso-Srxk zP&X9vwLrU}-g`nP;|bygil@cHq=hMbq)>QYcMo;2-S+kvS+t`adUa=eyYkGi%vdPm zibBRS9_FgeVBgto9~^k0(`xz(536SgW8MVx z#%wim*Dc(@O~SUC?VzSB{`XCVu?W_j!&Vr0{=TujW#KmND5NAHRU!8}lcaF5>iK%J z-PqN^ckXVTPsXavnp@v-15fU|4>RFgucfeb7T&VLPo@6UotCDvIQU;ePKLd(qmbR# zVTBR102y<(72Rb@6?r+rm#<^zJa$xgy_2R9_r#6HPlO~=Iq_o(;RZ!cDFvDfh%vue zI?Y<-^OTPcUZG3}=dBtl(eshgYU$iUN9o&&Ro=u=`r@@0B`|I_*-c>FO5`lYxX#At zwy8zX*zHtzSA1ZUWm_TA-teS$M~{1cStf|W@TP8sFSV3+D+iXq$~jXHhxp4j<5f!Lh*>!$%*xI;D_hpA9AjKZ!LsB&g%a=9xKDAl>_4FF zKauNT&#WJ$TBJT1|w3fPBKT|8qXGLm_+lw7c*mpaawwF4X zwP!LN%=MIuBmicpTtuF{qnO1wuJXw>?0u!EP%0*!+vO2~b zGKV3K@8PqqRvcvFS8j@f*oh$b@%af5$!9;vGC`aHAW{ti@&GFdAk+OI_Yy(Az{4bv z>3)z01X&pXBF7~lk5Enkne7L8lnAnlFOxuK`$5(S^3?zksTKiQqeWEx@uQjR2YH$Z z@|b@_daV=H2#+RK+EI;c5agQyAX2OX^3*hwv|$`%q#xu(BFH+PC4t1cHv-ut$g2S$ eG7=+v&Bn?%&Gw_RFak3xgV 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 literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/service/ClaimService$ClaimResult.class b/target/classes/pt/henrique/communityMarket/service/ClaimService$ClaimResult.class new file mode 100644 index 0000000000000000000000000000000000000000..082b7eb73ecbf2efae5581d00f25c8c6efba8b62 GIT binary patch literal 1522 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 QiCDg+N}Mjv5UWu2UqDHw#{d8T literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/service/EarningsService$WithdrawResult.class b/target/classes/pt/henrique/communityMarket/service/EarningsService$WithdrawResult.class new file mode 100644 index 0000000000000000000000000000000000000000..caeda888b08f427e516c745dbd24f83864718a83 GIT binary patch literal 1339 zcmb_bYflqV5IwigZM!W{d5HKz5!<4yiiip^sck`GX_Hoq5RaMC7s=2LH zw|2PZGDMbiQ+FRQ1T)!23=(2d#APHPGdz6lDs67s`kO9SG^^9;5_E4(wO?^pak#y! zYg{R*wyB%jPQB+(t?O>PWvg#%-02!b5Ounm#vO-&ZHoFS83Pz3Vzpy+O#-l@2&ZM7 z!Z1Ua+qPvhq{~OW)?J$zXc!5jVv;e2vCL-iI3nASFwT%LttR)|6168}oW(hcSE|iY zzE)YStkfBb<$oV&hqxm1)e#gOEhWm=uRrZ<{EP0P3{ zP{~rETB)vWG)uKwwZ;%CSS`*lP}WUe>2|ib{Y2d|D3UH)nrbvuTNl0`47qKco^>Tt z%>Iv27-G6p|0Nc!!zM+xxtsTOqDYZJqDZMH(QqbvTmnKYX@p zDYHUgf>*fXKC&D)in|PRf1wG3ylR@&GB+OD$IwT*2p~)UqaNrf zLTDg{b)@i&NH&n8yBtNS0A{@M;v^bkUQDzk+8hyI0^wqGcg?4s_gVoGUmptP{<0RaPBjr@A{Hkza@wL?idu@I7|*4CMVzbCAUvZ zzKL6h$w$mX{cRg3Bukj1d3%rkm`>t1BPI`~(x++kPdMXy=RNPD?_Ku1D?$q9Ns%JO ffF?=sf)rNCyG?!o^SI;L1>7SWC$xkG+(+yuf659O literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/service/EarningsService.class b/target/classes/pt/henrique/communityMarket/service/EarningsService.class new file mode 100644 index 0000000000000000000000000000000000000000..159cc3a0c7591e3597848ed9f648ebe700a3512f GIT binary patch literal 5211 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 ZdgB$FN;!v~Gp^ZGYFukvZ`?qo{|h+7&XWKD literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/service/TransactionService$TransactionResult.class b/target/classes/pt/henrique/communityMarket/service/TransactionService$TransactionResult.class new file mode 100644 index 0000000000000000000000000000000000000000..4ea89867f04f9f6a15ccdce9d805a631d0a1522a GIT binary patch literal 1295 zcmb_b$!^n76g@Yy6E}mKwsZmtEhL8G6>N%-Pz7orZ6#7gA`2wPeWWgq4IV1>pICrI zR0$+LfR94l7Y7JQRwx_acgJ&w;~zi2eh2UryLlv#%p#>CjSQiDZeEy%W4b-#xO*Fqme=n`9C~?Z`tL+&1j4_tEn%Ga zrW=@6XnSreHf@iYUWp)b7$zG;mL-CKKplxvR8c~ikg!kL)Q~1k#UiSNobY|me<>~r zTJvwit&~m*qGsgq2#SF&$BF6H@!$sUVb^wkwXJepmP>X4heh*7PjXX`8++ z^^q|Zp4r^li{`xM-6I^<8ufYB%e*yhNAR-V)Mku4Pb9?-TECCQr05XRJrOn-nzaU@ zz}mAvC#u%!)BO105LX+I)mnI1~l*~Go8TK=)K)A-5!&-`ERlfr1>jPxW+W$ZXV~9e)P}N-do1%@ KE{8hqL-_^&NE0Xk literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/service/TransactionService$ValidationResult.class b/target/classes/pt/henrique/communityMarket/service/TransactionService$ValidationResult.class new file mode 100644 index 0000000000000000000000000000000000000000..9c7c55046de62f09ebe1d5bcac25edc5863fb37a GIT binary patch literal 1936 zcmb_dTTc@~6#k|_x5dSlilE|M(6%Zo-nDoImBxYwNFOkoOxp=vX?N=El!X7}gC-gi z9{d6RDC3#kEv$e%7?O5p_RRUtne&~?{`$T36Tmaf4I+U)3;i|*kYvby+ac|98 z5_PE>49OYSbM<3}zI>sYMha;QgEo%9W_Z=nPE&Zw{nQmsUAEg@Qr%qOYF%i@7iz<; z3ui@f&*ydRN^dz7O;mZyZEz!55`MR(87$WigbZxeI5}z~gDgWzC?(ZvvB{9D>|AbH zE7w~q=nTo3iniE8Z4bC^CO!P3RZf#W9lKCsRSqmKl!cV`0VO zW%BQ;ijD#p(J{CzyQ(f;x+c=Gy=6RQ>XB+-QTTdZ`r3lSaQFWzkJ8+0xa@N&wXYTL zghBf$+#&{|1}XI#B126>|DjA0_Xcqv4=g;iQNj$vxt&H)T~E7h;e??@1{u<|o)3nv zadup9L#_)aRGjBtqb2-_ij?c!PANuWR2wl#1YFtdh&kccmD|x$#UZmT?)z~;WaHgl zBXRG4b>Mb_?6T(x6_^xM3)$TR#llmD$sHOF2+P8AhO-B&Qg%WPFio>5LCu*!&Wu1a zf6Snw)dHg#dWKHU(%XWWtF&f{KfsFP-(eN6eaFyO5+!hso=H+Szw@*|AFAR4F47x; z0@HLzJ7YY7OSDfXNNhv~H-Sld8czTfW_-ut$AQngyzdVm$CU^^Lw7Y~rixd$aPnXH(NJfbofPsYkOdk6 zC`OjzBv=PsV<0lah{qlYaqu1n5u>079>CQg(rdULtW&r_>ruLASQ24DOb0TW2OakPW}ON^~}Kl literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/service/TransactionService.class b/target/classes/pt/henrique/communityMarket/service/TransactionService.class new file mode 100644 index 0000000000000000000000000000000000000000..e8e46c537864fdda66359c87b4df81d7f965c043 GIT binary patch literal 9178 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 CtI?DI literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/task/AuctionTask.class b/target/classes/pt/henrique/communityMarket/task/AuctionTask.class new file mode 100644 index 0000000000000000000000000000000000000000..cbb60999fee186049ebc0c3025e051de9138d184 GIT binary patch literal 2296 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 T-V*XM-XY27xrEDjcc}Mo^zLD< literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/util/InventoryUtil.class b/target/classes/pt/henrique/communityMarket/util/InventoryUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..f17a1cdec022acff680083e6db0f14e0eb583c55 GIT binary patch literal 5788 zcmbtY3w%@68ULT=antnDLZF56ER;uE3Uv;;jY4OdrZgi>SQFmPdP%SCwP{k56sbCV zjJ-E?zG2fTd!QR`#m!1ZnDc>?ZMsc2H}`f=_kPbY6#wVmq)nv$m_vRhC+D2+eBb~7 zJnm_@4<3eL(lSvnrsHj1$K(UdI z82v_Eqs`Sd`NU5oS!*XysNyX$4iqEp?;pqv$+@?wScN7=;tnl7sHf>5 z(mpQkOUC1jR3n)n&1=xC;O#2TV{l{IM4JR$24hcSs0vgRoJ8x*d7k4#s{+4@Hmnu! zjGvR+B4AJGJIThYk`PBX|I-UHPQpjl#tfX$k>W56&He9O9>}$>9wRqGASd` zL(*dCR-mi62t5L|1DS?iJ&`gl8PpqM$^QO9mZ6~zE!C%I8q5@q(g7Qo%cL>QBL)}< z(x;1Stl%&ml07>cFZok$7`RwLpNcq`Vav~`ZY-NEot}%5seX;wU==cnnMN1nT5hdr zLiMFcsu+;`*b@|Xfwqe-7Z_Bc%8ebkRKZRaL%6J{*bTT z8;bf{UD!uHyCR#yovqRXpH}f1e3rn;Z+erF=@lr?kBeL)Y<1yo0_pN@_Pg*oR`{0i zCMkbF#l83fk7Vp|MTgeowE8Ig*fRqdk8RH0Z0N2tt~>}Ihj3mOSMG}ymgPenD_!`m&GjA`+W8rw1c&Q97hy#_U( z^9CcGx3r5P9T_kS)0%>6SkOu}ov}gKN>*Z8!rRSqAp*2N9Z#|}R-H+ZyA6uUdq~!a znfdz*P2ib^*wdf3cnDQYd;x;n4e26%P%=&3V;Z07ls z%w~$Z%wrW%#HsOqgY%@c$FOH}G8^Dt#QWSZE1`t1LUw)rgV57f$- z(6X&5D}1NfJn{NZBs12Su~Hn9t*b1mEYxSAt(Gz8Fwas%nZW!rwqOD)3e-)+@adNx z>9xyFijRVc-BZwJakq%^e_lc^HXr5_ilsVVa;)i)nLU1WX6ru*OzG*tI5Vm8wAI`N z%#JOl4Hy|M&K5spwz*=fBIXDbZKGzhI~}_dyZ#5zXLDWBy^-W#DyFv?X0x76Jwwd}Tw{ipWZ4$uO-Y4s{zP{2%n&Z6z}_*kyO98_ZopP!9b%va44 zw4)9eU@7|e>dRmmZ=Pygfpbly?L^bZC;mV1PcqQR*VMo8Z<1Ao^YIer>=G;fgA@Fg zqyKW1ct~wIM@7`7;Ur#$4Xu3 zZV`(S{=Cr*<5)%zLB@l<(oPuT-n0ykFkqupvI%9_jA?8Z zYv~Ocmn*E}#|&=B8cdbKMQ;^RqDmCgGd9XNg_|JkV<4;Eo|B|8~*OXiLyBaXRD@6I~s5)S$wQK=g%XY5! z;*PNZT**HVO%>D3Q0W)tqJpQDvA_(7=>#|(8^sJ!NmeTPhl-hER<;mS!*PlUs3<5^ zutUKvx@)$i=_Di8a{^A&YhtdLmu2Y)k6=L%3caS>hZ{`S1j$UIgS_3g2UDdVNAYp# zL2kHXxZZQu2tKtJ=hS=ln}a3wo_j{{`MsE1@A;xRD6jV%GzV(E=Sv)zlJ`^cP)_o} zoa961fRabe0VN;KNj{R3e2kJ$pvFoIw11?~H7Ztw4gC491MMdWtO;P`GvkfEb|Za#wh@F*VRzi03`p2L%Tu^h(>cnUA#X_kOza0<@~8&_npF{>kM zn=JXDmJ_D0*=sNXrLV0dtbpoz8C8~BSK8!1w|k0>Uaz85k(e(Q@LN{-8$~roZaIP> I7M@r6Dm1b8VgLXD literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/util/ItemBuilder.class b/target/classes/pt/henrique/communityMarket/util/ItemBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..37508ac1ed471e3844f35a9645dab73d4ec063d0 GIT binary patch literal 6813 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 R@pnE6@yS2%FT8+dF9XL^=Mw+` literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/util/ItemSerializer.class b/target/classes/pt/henrique/communityMarket/util/ItemSerializer.class new file mode 100644 index 0000000000000000000000000000000000000000..a03f75bcf95093002ff0f48e6fd26a1be42d6bdb GIT binary patch literal 2671 zcmb7GZBr9h6n<_9EP;MAGgPwh;9ROxd!FKniaPKU|fz4xAb&Uv2m+_U`s&u_m2n8(i=LgxdvK zaO{ck%*a#>do#1L@x&~70@2Sb+wwja=$V*Yljs!~^^Ghilil&mdDk^|RvKQd;T1jC zG^!e;^4Kph<+z)fjmGx2+OmBgSxY$Df=5Hy*cT+^W8n2rx{ zT%iBCYk6in%i-3UK}MFFfuXOj2ti- zZ|%-1TxWHBh!Mv2oDOz@@WkZ9tcEzwNsQ?@j|&24d;~}M5g0W6c&iTivg}QPQxgxf zt-yZz&2{x(;tgvnOxH3h z)=MSi{<2wbPX%Us#jv+!)deo+{wIoAfxd1K@5%UxE5y>24bNzH5rK3N^!qvzN+|S6x`UM*+Rvr*9(q!%W2r< zK<+~UO%{#El#AeRI1r#?On$VY({M}XElcU@M7O@DRWMd(*|tsB52vz`oi;98-2~@( zk3#&;0bww0MEU%VvkXVUF_PSe_?0gq+~-qm14CHnQ*RpJ0UmPJhwt$Nt$0{mLJwU5 z#pGXzh}}1k>-*@-y@9qqwGTa?O73CkHBL_Y*MEJ5{+r=+EWC%w z^xM4Jc!j<~D$RN7Eghd`7r)Hk6i#(3s5Qh0uzJ;>+*lIjzFM?y+| zgoH%mfS;alXNe2`syyKNP;oodF-~dZ8OzSv5dI?;kpX>a)#*;HX ztw~}_U=mxfh$v3)Pq0mlM1~5g9EXvI4TlUUf*+x`UmPH<=$w|QNz6%he&Lhci%4*_ z&2#So9g^3UeTV9xi&jN^wxcwEjHl$gPQII>zpqNg_`S*3SlP{qUCvcqB1GO4(;!Ds zWD#PBQXc9aoZ=bf%|pYt?`>gHNO)hCBu|I%jI$7);|0g#e2eqHgdIk|&haJs{sn+U BeV70M literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/util/SoundUtil.class b/target/classes/pt/henrique/communityMarket/util/SoundUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..388042951b846cc7b30515d662df3739967460c6 GIT binary patch literal 3424 zcmb7G+jARN8UGzyvR1NUJDb{d(l}|{G__?}irX|zqhLo?*0GYcq*#(`o2Fv5T3Z`k zvsyVZx0V*@g=?XG=r9bAVqjnr9^9nEFnuyJK%aPFc;JBtX5bGfGYka2v%8fgVi?$& zvuDpa-}n3O-`QV1_}~`+qIlPb9`t(P^23cjhM^nEmJ%*2)y;4+e?wDEhQ14WRX1lD zdM74Vd=TLEz~@Il{9WW})6lD%3?989RqE!pMZfOD00uo6^5Y;xhCtm67qzOP-)w4O zwN|M#33_`;F-n>lZkl>IoUS#ig)DtBcsKNF!CEt%nvnN2vqeQF<(jb>&NoXX-L&~4 z{dfe!9*p?$C`K7ZI|#I@Nut83va+oi4E>v$Dc4lR)N56SM<=?#J~^=Pj`;Byj*>cc zVs+FBPISs{lXq@fl#zvn$rTTdF&x@cU%IVobuQO6M={_YI>AMZGt6|sc4-`W*nW=9 z<8jiDCvl2QGHY_}mS)71hQ{y+nY1UDvQH((OP#Kc z6%`|`QM9V6)~Q0*{yu`dIE@((p7!GzoFVHw0J8JN1nEmBvx!S-hT%@feR3Z0 z;Vho>;G7@N<9v586G}yE)JfgKRgHkW6}_sdhO$BF8tPPkzf9@kr3jzK1wTFop5T-d z7C?u#-PB!KLZY=o#Dj}e2OS(%;CWQ%{fOZbgIH1OvbL$HcJ^?@|CG=V1&oJi!H>&M ze6#hs9bdj5_u~q#G6+SbQH<3Jgi0kE7qG-In2qP=vzbgXk&DUk*i}xS^dp69ixs)7Tla_O`v?9sblz=Rm;~cHTWjT784iiZMFEAW+ z_NCR7v>cZbF)5c^p3kL7I_F$t7@3!ov8zO%k#hEDN{%Nk3;6UNYCIz?wRx_SXKljR zqLj|$k|`-6Ajfd9b2la@(~ssv)(kt0e){!iMe23-N;2j8IwI(#p-c0G-ryj<)o2S=pq+YE3|ijCc06+Y}(3 zS4*yDC89UAoc&oZQ^OQc+e6h&tE<0@oWvZV*NZ#r)t$|Z^>>l3RR!o zaC~K}o^6fXO+UT^GFR?oBYNM@$P{W)OmX7UIDxmV7k=ly-lky&5UMu;C-;W^wERQ(wiRx zetgb)TLkz#zCbH4zmpv1_X)^NdozJu3{369H?;%LdvM*Ix`zYjU58z}I1~un$03Hp zu9HvR$6+^GaG!VGC4eDJA%rpXS^~$Z6M?ShL5$MLQH;>ZV>m`M<3#m1wc{r&WzLYm z5e(ytco{A(8n56>H1n@l@tURf48Dx7Sk}(qtMt{2*Xi5`_aKhUdoV_sL)dRPMnnmR zd&V1>5|8`u;qg5$@V_8nl2i*=!bfbvwn(od(#L;e9JoJ{IIh@w;FoZ-JAoZMAwDHe z?qEv(8N%e4XYV7@gAXyc6x@Y7cqecV(ZuvF4%6}U!^gDCF**+J5W4NO5dCg(!~1ZC z9?;kkff#AX1-*JpS$dz=1+4lAb#6kA5Lfc+Ro?7ae4ens^$0XrTG<-Tw%ZGOCH+^6~N1I>x!H2-=e z`|)pR{=s-D@Gi}-1x0xWiTCh&?`#XN2E}D-we6yn85A?ts^q5CMo?U_R@eJzwHg#x ztyR)Pt1Cfq-C9KjT3rZ=FIuZ-hB)bTP<+W+o*d$|$AaQ#tmW_!Cmsxnd287>rQh#M^g#bOIji8opp7t1Y-iPaWH z#d-^eM5BcP(QLshZnfZIdy$`|LIIX2@=3~pYwR?Z*|T&*pGStx(RF+YD=bdeZvv|< zO_%H{*4cHsQ1f_^skpY6&8&d0Tba<$*6K!osZJ4*)FdfPi_gAJ&%2YZ~d~KBP?1yq=f0R0*+}sC+;k(>dc;{bPVIPtJ literal 0 HcmV?d00001 diff --git a/target/classes/pt/henrique/communityMarket/util/TextUtil.class b/target/classes/pt/henrique/communityMarket/util/TextUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..f88cdeadfaf5ee5a6815feac6cc0b252a7061bb5 GIT binary patch literal 4811 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 b)&m7;SRhh_fY1Q`@smP8IJN;(3dH{b>vf#9 literal 0 HcmV?d00001