leftovers = InventoryUtil.giveItemSplit(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);
+ if (!leftovers.isEmpty()) {
+ // Couldn't fit in inventory, add to claim storage.
+ // Every leftover stack is stored, not just the first.
+ for (ItemStack leftover : leftovers) {
+ plugin.getDatabaseManager().addClaimItem(new ClaimItem(
+ buyer.getUniqueId(),
+ leftover,
+ ClaimItem.ClaimReason.PURCHASE_FULL_INVENTORY,
+ "Listing #" + listingId
+ ));
+ }
buyer.sendMessage(plugin.getMessageManager().getPrefixed("messages.claim-inventory-full"));
}
});
diff --git a/src/main/java/pt/henrique/communityMarket/service/TransactionService.java b/src/main/java/pt/henrique/communityMarket/service/TransactionService.java
index 8eac484..61f0ec6 100644
--- a/src/main/java/pt/henrique/communityMarket/service/TransactionService.java
+++ b/src/main/java/pt/henrique/communityMarket/service/TransactionService.java
@@ -3,6 +3,7 @@ package pt.henrique.communityMarket.service;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import pt.henrique.communityMarket.CommunityMarket;
+import pt.henrique.communityMarket.util.ContainerItemUtil;
import java.util.concurrent.CompletableFuture;
@@ -22,6 +23,11 @@ public class TransactionService {
/**
* Validates an item before it can be listed or auctioned.
* Checks material blacklist, keywords in name/lore, and other restrictions.
+ *
+ * Prices here are set by the seller and the item is transferred intact, so a
+ * loaded container is not refused. What is refused is a banned material or a
+ * banned lore keyword hidden inside a shulker box, a bundle, a sulfur cube
+ * bucket or a crossbow, so every rule is applied to the payload as well.
*
* @param item The item to validate
* @return ValidationResult with success status and error message if applicable
@@ -31,6 +37,23 @@ public class TransactionService {
return new ValidationResult(false, "invalid-item");
}
+ ValidationResult own = validateSingleStack(item);
+ if (!own.isValid()) return own;
+
+ for (ItemStack nested : ContainerItemUtil.flattenPayload(item)) {
+ ValidationResult inner = validateSingleStack(nested);
+ if (!inner.isValid()) return inner;
+ }
+
+ return new ValidationResult(true, null);
+ }
+
+ /** Applies the blacklist rules to one stack, ignoring anything it contains. */
+ private ValidationResult validateSingleStack(ItemStack item) {
+ if (item == null || item.getType().isAir()) {
+ return new ValidationResult(true, null);
+ }
+
// Check material blacklist
if (plugin.getConfigManager().isMaterialBlacklisted(item.getType())) {
return new ValidationResult(false, "blacklisted-item");
diff --git a/src/main/java/pt/henrique/communityMarket/util/ContainerItemUtil.java b/src/main/java/pt/henrique/communityMarket/util/ContainerItemUtil.java
new file mode 100644
index 0000000..61f5e50
--- /dev/null
+++ b/src/main/java/pt/henrique/communityMarket/util/ContainerItemUtil.java
@@ -0,0 +1,227 @@
+package pt.henrique.communityMarket.util;
+
+import io.papermc.paper.datacomponent.DataComponentTypes;
+import io.papermc.paper.datacomponent.item.BundleContents;
+import io.papermc.paper.datacomponent.item.ChargedProjectiles;
+import io.papermc.paper.datacomponent.item.ItemContainerContents;
+import io.papermc.paper.datacomponent.item.SulfurCubeContent;
+import org.bukkit.block.ShulkerBox;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.BlockStateMeta;
+import org.bukkit.inventory.meta.BundleMeta;
+
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Deque;
+import java.util.List;
+
+/**
+ * Single answer to "does this stack contain other stacks, and if so which ones".
+ *
+ * As of 26.2 an {@link ItemStack} can carry other stacks in four distinct ways,
+ * none of which share an API:
+ *
+ * - Shulker boxes and other block-entity items: {@link BlockStateMeta} whose
+ * block state is a container, or the {@code minecraft:container} component.
+ * - Bundles: {@link BundleMeta#getItems()} / {@code minecraft:bundle_contents}.
+ * - {@code SULFUR_CUBE_BUCKET}: {@code minecraft:sulfur_cube_content}, reached
+ * through {@link SulfurCubeContent#absorbedItem()}. Neither a
+ * {@link BlockStateMeta} nor a {@link BundleMeta}.
+ * - Crossbows: {@code minecraft:charged_projectiles}.
+ *
+ * The server's own {@code ItemStack.validateComponents} recurses into
+ * {@code CONTAINER}, {@code BUNDLE_CONTENTS} and {@code CHARGED_PROJECTILES} but
+ * not {@code SULFUR_CUBE_CONTENT}, so a sulfur cube bucket payload is never
+ * sanitised by the server. Every pricing, selling, listing and anti-dupe check must
+ * go through {@link #payloadOf(ItemStack)} rather than testing for a shulker box.
+ *
+ * The shulker-box read/rewrite helpers below stay shulker-specific: they back the
+ * three-option shulker sell flow, which needs the 27-slot inventory shape. Buckets,
+ * bundles and crossbows have no such shape and are never opened, only refused.
+ */
+public final class ContainerItemUtil {
+
+ /** Number of slots inside a shulker box. */
+ public static final int SHULKER_SIZE = 27;
+
+ /**
+ * Levels of nesting inspected by {@link #flattenPayload(ItemStack)}.
+ * Vanilla forbids shulker-in-shulker, so one level is enough today; the cap
+ * exists so a datapack or plugin that deepens the nesting cannot walk past
+ * the guard, and so a malformed cyclic payload cannot loop forever.
+ */
+ public static final int MAX_NESTING_DEPTH = 3;
+
+ private ContainerItemUtil() {}
+
+ // ══════════════════════════════════════════════════════════════
+ // General nesting
+ // ══════════════════════════════════════════════════════════════
+
+ /**
+ * Returns the stacks held directly inside this one, across all four nesting
+ * classes. Empty when the stack holds nothing or is not a container.
+ * The returned stacks are the live snapshots handed back by the API; callers
+ * that keep them should clone.
+ */
+ public static List payloadOf(ItemStack stack) {
+ if (stack == null || stack.getType().isAir()) return List.of();
+
+ List out = new ArrayList<>();
+
+ // getItemMeta() clones, and this runs once per inventory slot in the sell
+ // scans, so the meta routes are gated on the type name first. The component
+ // checks below are cheap map lookups and cover everything the gate misses,
+ // including block-entity items that are not shulker boxes.
+ String typeName = stack.getType().name();
+ if (typeName.endsWith("SHULKER_BOX")) {
+ if (stack.getItemMeta() instanceof BlockStateMeta bsm
+ && bsm.getBlockState() instanceof ShulkerBox box) {
+ addNonEmpty(out, box.getInventory().getContents());
+ }
+ } else if (typeName.endsWith("BUNDLE")) {
+ if (stack.getItemMeta() instanceof BundleMeta bundle) {
+ addNonEmpty(out, bundle.getItems());
+ }
+ }
+
+ if (out.isEmpty() && stack.hasData(DataComponentTypes.CONTAINER)) {
+ ItemContainerContents container = stack.getData(DataComponentTypes.CONTAINER);
+ if (container != null) addNonEmpty(out, container.contents());
+ }
+ if (out.isEmpty() && stack.hasData(DataComponentTypes.BUNDLE_CONTENTS)) {
+ BundleContents bundle = stack.getData(DataComponentTypes.BUNDLE_CONTENTS);
+ if (bundle != null) addNonEmpty(out, bundle.contents());
+ }
+ if (stack.hasData(DataComponentTypes.SULFUR_CUBE_CONTENT)) {
+ SulfurCubeContent cube = stack.getData(DataComponentTypes.SULFUR_CUBE_CONTENT);
+ if (cube != null) addNonEmpty(out, List.of(cube.absorbedItem()));
+ }
+ if (stack.hasData(DataComponentTypes.CHARGED_PROJECTILES)) {
+ ChargedProjectiles charged = stack.getData(DataComponentTypes.CHARGED_PROJECTILES);
+ if (charged != null) addNonEmpty(out, charged.projectiles());
+ }
+
+ return out;
+ }
+
+ /**
+ * True when this stack carries other stacks. Such items are refused by every
+ * server-shop path: their payload has no price and would be destroyed with the
+ * container, and a container priced as empty is a value-laundering route.
+ */
+ public static boolean isNestingItemWithContents(ItemStack stack) {
+ return !payloadOf(stack).isEmpty();
+ }
+
+ /**
+ * Every stack reachable from this one, breadth-first, down to
+ * {@link #MAX_NESTING_DEPTH} levels. The stack itself is not included.
+ * Used by the blacklist checks, which must see a banned material or a banned
+ * lore keyword wherever it is hidden.
+ */
+ public static List flattenPayload(ItemStack stack) {
+ List out = new ArrayList<>();
+ Deque frontier = new ArrayDeque<>(payloadOf(stack));
+ int depth = 0;
+ while (!frontier.isEmpty() && depth < MAX_NESTING_DEPTH) {
+ int levelSize = frontier.size();
+ for (int i = 0; i < levelSize; i++) {
+ ItemStack current = frontier.poll();
+ if (current == null) continue;
+ out.add(current);
+ if (depth + 1 < MAX_NESTING_DEPTH) frontier.addAll(payloadOf(current));
+ }
+ depth++;
+ }
+ return out;
+ }
+
+ /** Total number of items (summed amounts) held inside this stack, one level deep. */
+ public static int countTotalItems(ItemStack stack) {
+ int total = 0;
+ for (ItemStack c : payloadOf(stack)) total += c.getAmount();
+ return total;
+ }
+
+ /** Number of occupied slots inside this stack, one level deep. */
+ public static int countNonEmptySlots(ItemStack stack) {
+ return payloadOf(stack).size();
+ }
+
+ // ══════════════════════════════════════════════════════════════
+ // Shulker boxes: read and rewrite
+ // ══════════════════════════════════════════════════════════════
+
+ /** @return true if the stack is any shulker box (all 16 colors + uncolored). */
+ public static boolean isShulkerBox(ItemStack stack) {
+ return stack != null && !stack.getType().isAir()
+ && stack.getType().name().endsWith("SHULKER_BOX");
+ }
+
+ /**
+ * Returns the shulker's internal contents as a detached snapshot array.
+ * {@code getBlockState()} returns a copy, so reading never mutates the original
+ * item. Returns an empty array if the stack is not a shulker box.
+ */
+ public static ItemStack[] getContents(ItemStack shulker) {
+ if (!isShulkerBox(shulker)) return new ItemStack[0];
+ if (!(shulker.getItemMeta() instanceof BlockStateMeta bsm)) return new ItemStack[0];
+ if (!(bsm.getBlockState() instanceof ShulkerBox box)) return new ItemStack[0];
+ return box.getInventory().getContents();
+ }
+
+ /** @return true if the shulker box contains at least one item. */
+ public static boolean hasContents(ItemStack shulker) {
+ for (ItemStack c : getContents(shulker)) {
+ if (c != null && !c.getType().isAir()) return true;
+ }
+ return false;
+ }
+
+ /** Returns a clone of the shulker with its internal inventory emptied. */
+ public static ItemStack emptiedClone(ItemStack shulker) {
+ ItemStack clone = shulker.clone();
+ if (clone.getItemMeta() instanceof BlockStateMeta bsm
+ && bsm.getBlockState() instanceof ShulkerBox box) {
+ box.getInventory().clear();
+ bsm.setBlockState(box);
+ clone.setItemMeta(bsm);
+ }
+ return clone;
+ }
+
+ /**
+ * Returns a clone of the shulker whose internal contents are replaced by the
+ * given array (length must be at most {@link #SHULKER_SIZE}; shorter arrays
+ * clear the remaining slots).
+ */
+ public static ItemStack withContents(ItemStack shulker, ItemStack[] newContents) {
+ ItemStack clone = shulker.clone();
+ if (clone.getItemMeta() instanceof BlockStateMeta bsm
+ && bsm.getBlockState() instanceof ShulkerBox box) {
+ box.getInventory().setContents(newContents);
+ bsm.setBlockState(box);
+ clone.setItemMeta(bsm);
+ }
+ return clone;
+ }
+
+ // ══════════════════════════════════════════════════════════════
+ // Helpers
+ // ══════════════════════════════════════════════════════════════
+
+ private static void addNonEmpty(List out, ItemStack[] items) {
+ if (items == null) return;
+ for (ItemStack i : items) {
+ if (i != null && !i.getType().isAir()) out.add(i);
+ }
+ }
+
+ private static void addNonEmpty(List out, List items) {
+ if (items == null) return;
+ for (ItemStack i : items) {
+ if (i != null && !i.getType().isAir()) out.add(i);
+ }
+ }
+}
diff --git a/src/main/java/pt/henrique/communityMarket/util/InventoryUtil.java b/src/main/java/pt/henrique/communityMarket/util/InventoryUtil.java
index cdabd8a..8357e8a 100644
--- a/src/main/java/pt/henrique/communityMarket/util/InventoryUtil.java
+++ b/src/main/java/pt/henrique/communityMarket/util/InventoryUtil.java
@@ -6,6 +6,7 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import pt.henrique.communityMarket.CommunityMarket;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -51,24 +52,73 @@ public class InventoryUtil {
}
/**
- * Gives an item to a player, returning any items that couldn't fit
+ * Splits a stack into legally-sized stacks.
+ *
+ * Since 26.1 an {@link ItemStack} whose count exceeds its max stack size is
+ * treated as empty by the server, so a "give 320 dirt" shortcut built as one
+ * stack hands the player nothing. Anything that multiplies a quantity into a
+ * single stack must route through this first. The input amount is used as the
+ * total; the returned stacks are clones.
+ *
+ * @return one or more stacks, each within its max stack size; empty for air
+ */
+ public static List splitIntoLegalStacks(ItemStack item) {
+ if (item == null || item.getType().isAir() || item.getAmount() <= 0) {
+ return List.of();
+ }
+
+ int maxStack = Math.max(1, item.getMaxStackSize());
+ if (item.getAmount() <= maxStack) {
+ return List.of(item.clone());
+ }
+
+ List out = new ArrayList<>();
+ for (int left = item.getAmount(); left > 0; left -= maxStack) {
+ ItemStack part = item.clone();
+ part.setAmount(Math.min(left, maxStack));
+ out.add(part);
+ }
+ return out;
+ }
+
+ /** @return true when the stack's count is within its max stack size. */
+ public static boolean isLegalStack(ItemStack item) {
+ return item == null || item.getType().isAir()
+ || item.getAmount() <= Math.max(1, item.getMaxStackSize());
+ }
+
+ /**
+ * Gives an item to a player, returning any items that couldn't fit.
+ * The item is split into legal stacks first, so an oversized input is handed
+ * over in full instead of resolving to nothing.
*
* @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;
+ List leftovers = giveItemSplit(player, item);
+ return leftovers.isEmpty() ? null : leftovers.get(0);
+ }
+
+ /**
+ * Gives an item to a player as legal stacks.
+ *
+ * @return every stack that did not fit, each within its max stack size
+ */
+ public static List giveItemSplit(Player player, ItemStack item) {
+ List parts = splitIntoLegalStacks(item);
+ if (parts.isEmpty()) {
+ return List.of();
}
- HashMap leftover = player.getInventory().addItem(item.clone());
+ HashMap leftover =
+ player.getInventory().addItem(parts.toArray(new ItemStack[0]));
if (leftover.isEmpty()) {
- return null;
+ return List.of();
}
-
- return leftover.values().iterator().next();
+ return new ArrayList<>(leftover.values());
}
/**
@@ -87,7 +137,12 @@ public class InventoryUtil {
ItemStack toRemove = item.clone();
toRemove.setAmount(amount);
- HashMap notRemoved = player.getInventory().removeItem(toRemove);
+ // Split first: an over-full stack is treated as empty since 26.1, so a
+ // single oversized removal request could take nothing while reporting
+ // success.
+ List parts = splitIntoLegalStacks(toRemove);
+ HashMap notRemoved =
+ player.getInventory().removeItem(parts.toArray(new ItemStack[0]));
return notRemoved.isEmpty();
}
diff --git a/src/main/java/pt/henrique/communityMarket/util/ItemBuilder.java b/src/main/java/pt/henrique/communityMarket/util/ItemBuilder.java
index 279359e..ac131c4 100644
--- a/src/main/java/pt/henrique/communityMarket/util/ItemBuilder.java
+++ b/src/main/java/pt/henrique/communityMarket/util/ItemBuilder.java
@@ -38,8 +38,20 @@ public class ItemBuilder {
/**
* Creates a new ItemBuilder from an existing ItemStack
*/
+ /**
+ * Wraps an existing stack as a GUI icon.
+ *
+ * The count is clamped to the item's max stack size. Builder output only ever
+ * goes into plugin GUI inventories, never to a player, and since 26.1 an
+ * over-full stack resolves to empty, which would render the icon as a blank
+ * slot. Real quantities are shown in the lore.
+ */
public ItemBuilder(ItemStack item) {
this.item = item.clone();
+ int maxStack = Math.max(1, this.item.getMaxStackSize());
+ if (this.item.getAmount() > maxStack) {
+ this.item.setAmount(maxStack);
+ }
this.meta = this.item.getItemMeta();
}
@@ -115,7 +127,7 @@ public class ItemBuilder {
* Sets the item amount
*/
public ItemBuilder amount(int amount) {
- item.setAmount(Math.min(64, Math.max(1, amount)));
+ item.setAmount(Math.min(Math.max(1, item.getMaxStackSize()), Math.max(1, amount)));
return this;
}
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 5e7fdef..b027075 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -1,7 +1,7 @@
name: CommunityMarket
version: '${project.version}'
main: pt.henrique.communityMarket.CommunityMarket
-api-version: '1.21'
+api-version: "26.2"
description: A GUI-only marketplace plugin for fixed-price listings and auctions
author: Henrique
website: https://github.com/henriquescrrrr/carrageis-communitymarket
diff --git a/target/classes/config.yml b/target/classes/config.yml
deleted file mode 100644
index 1bd7524..0000000
--- a/target/classes/config.yml
+++ /dev/null
@@ -1,152 +0,0 @@
-# ============================================
-# CommunityMarket Configuration
-# A GUI-only marketplace plugin
-# ============================================
-
-# Language setting (available: en_US, pt_PT)
-language: en_US
-
-# Database Configuration
-database:
- # Type: sqlite or mysql
- type: sqlite
-
- sqlite:
- file: database.db
-
- mysql:
- host: localhost
- port: 3306
- database: communitymarket
- username: root
- password: ""
- pool:
- maximum-pool-size: 10
- minimum-idle: 2
- connection-timeout: 30000
- idle-timeout: 600000
- max-lifetime: 1800000
-
-# Economy Settings
-economy:
- # Currency display format (uses Java DecimalFormat)
- currency-format: "$#,##0.00"
- currency-symbol: "$"
-
- taxes:
- # Tax percentage for fixed-price market sales (seller pays)
- market-tax: 5.0
- # Tax percentage for auction sales (seller pays)
- auction-tax: 7.5
-
-# Fixed-Price Market Settings
-market:
- # Maximum active listings per player
- max-listings-per-player: 20
- # Cooldown between creating listings (seconds, 0 = disabled)
- listing-cooldown: 0
- # Default listing duration in hours
- default-duration-hours: 168
- # Available durations for players to choose (in hours)
- available-durations:
- - 24
- - 72
- - 168
- - 336
- # Price limits
- min-price: 1.0
- max-price: 1000000000.0
-
-# Auction Settings
-auction:
- # Maximum active auctions per player
- max-auctions-per-player: 10
- # Duration limits (hours)
- min-duration-hours: 1
- max-duration-hours: 168
- default-duration-hours: 24
- # Available durations for players to choose (in hours)
- available-durations:
- - 1
- - 6
- - 12
- - 24
- - 48
- - 72
- - 168
- # Price limits for starting bid
- min-start-price: 1.0
- max-start-price: 1000000000.0
- # Minimum bid increment (percentage of current bid)
- min-bid-increment-percent: 5.0
- # Minimum absolute bid increment
- min-bid-increment-absolute: 1.0
-
- # Anti-snipe protection
- anti-snipe:
- enabled: true
- # If bid placed within this many seconds of end, extend auction
- trigger-seconds: 30
- # How many seconds to extend
- extension-seconds: 30
- # Maximum number of extensions (0 = unlimited)
- max-extensions: 10
-
-# Item Blacklist
-blacklist:
- # Materials that cannot be listed/auctioned
- materials:
- - BARRIER
- - COMMAND_BLOCK
- - CHAIN_COMMAND_BLOCK
- - REPEATING_COMMAND_BLOCK
- - COMMAND_BLOCK_MINECART
- - STRUCTURE_BLOCK
- - STRUCTURE_VOID
- - JIGSAW
- - DEBUG_STICK
- - KNOWLEDGE_BOOK
- - SPAWNER
- - BEDROCK
- # Items with these keywords in their name/lore are blocked
- keywords:
- - "admin"
- - "illegal"
- - "exploit"
-
-# GUI Settings
-gui:
- # Items displayed per page in browse views
- items-per-page: 45
-
- # Whether to show the Help button in the main menu
- # Set to false to hide it (slot will be filled with glass)
- show-help-button: true
-
- # Sound effects (use Bukkit Sound enum names)
- sounds:
- click: UI_BUTTON_CLICK
- success: ENTITY_PLAYER_LEVELUP
- error: ENTITY_VILLAGER_NO
- purchase: ENTITY_EXPERIENCE_ORB_PICKUP
-
-# Notification Settings
-notifications:
- # Notify seller when their item sells
- notify-on-sale: true
- # Notify bidder when they are outbid
- notify-on-outbid: true
- # Notify winner when they win an auction
- notify-on-win: true
- # Notify seller when their listing expires
- notify-on-expire: true
-
-# Performance Settings
-performance:
- # How often to cache listings/auctions (seconds)
- cache-duration: 30
- # How often to check for ended auctions (seconds)
- auction-check-interval: 5
- # How often to check for expired listings (minutes)
- expired-check-interval: 5
-
diff --git a/target/classes/lang/en_US.yml b/target/classes/lang/en_US.yml
deleted file mode 100644
index a3793fe..0000000
--- a/target/classes/lang/en_US.yml
+++ /dev/null
@@ -1,448 +0,0 @@
-# ============================================
-# CommunityMarket Language File - English (US)
-# ============================================
-
-# General
-prefix: "&8[&6Market&8] &r"
-
-# General Messages
-messages:
- no-permission: "&cYou don't have permission to do that."
- player-only: "&cThis command can only be used by players."
- reload-success: "&aConfiguration reloaded successfully!"
- economy-not-found: "&cNo economy plugin found! Market disabled."
-
- # Listing Messages
- listing-created: "&aListing created successfully! ID: #{id}"
- listing-cancelled: "&aListing cancelled. Item returned to claim storage."
- listing-expired: "&eYour listing #{id} has expired. Item moved to claim storage."
- listing-purchased: "&aYou purchased {item} x{amount} for {price}!"
- listing-sold: "&aYour {item} x{amount} was sold to {buyer} for {price}!"
- listing-limit-reached: "&cYou've reached the maximum number of listings ({max})."
- listing-cooldown: "&cPlease wait {time} before creating another listing."
- listing-not-found: "&cListing not found or no longer available."
- listing-own-item: "&cYou cannot buy your own listing."
- listing-insufficient-funds: "&cYou don't have enough money. Required: {price}"
-
- # Auction Messages
- auction-created: "&aAuction created successfully! ID: #{id}"
- auction-cancelled: "&aAuction cancelled. Item returned to claim storage."
- auction-ended-winner: "&aCongratulations! You won the auction for {item}! Paid: {price}"
- auction-ended-seller: "&aYour auction for {item} ended! Winner: {winner}, Earned: {price}"
- auction-ended-no-bids: "&eYour auction for {item} ended with no bids. Item moved to claim storage."
- auction-limit-reached: "&cYou've reached the maximum number of auctions ({max})."
- auction-not-found: "&cAuction not found or no longer available."
- auction-own-item: "&cYou cannot bid on your own auction."
- auction-bid-placed: "&aYou placed a bid of {amount} on {item}!"
- auction-outbid: "&eYou've been outbid on {item}! New bid: {amount} by {bidder}"
- auction-bid-too-low: "&cBid too low! Minimum bid: {min}"
- auction-insufficient-funds: "&cYou don't have enough money. Required: {price}"
- auction-buyout: "&aYou bought out the auction for {item} for {price}!"
- auction-extended: "&eAuction extended by {seconds}s due to anti-snipe protection."
-
- # Claim Messages
- claim-success: "&aItem claimed successfully!"
- claim-empty: "&eYou have no items to claim."
- claim-inventory-full: "&cYour inventory is full! Please make space."
- claim-all-success: "&aClaimed {count} items!"
-
- # Earnings Messages
- earnings-withdrawn: "&aWithdrew {amount}! New balance: {balance}"
- earnings-empty: "&eYou have no pending earnings."
- earnings-balance: "&aYour pending earnings: {amount}"
-
- # Item Validation
- invalid-item: "&cPlease select a valid item."
- item-no-longer-available: "&cThe selected item is no longer in your inventory."
- item-changed: "&cThe selected item has changed. Please select again."
- quantity-changed: "&cThe available quantity has changed. Please verify and try again."
- blacklisted-item: "&cThis item type is not allowed on the market."
- blacklisted-content: "&cThis item contains blacklisted content."
- invalid-price: "&cInvalid price. Range: {min} - {max}"
- invalid-amount: "&cInvalid amount."
- invalid-duration: "&cInvalid duration."
-
- # Admin Messages
- admin-listing-removed: "&aListing #{id} removed by admin."
- admin-auction-cancelled: "&aAuction #{id} cancelled by admin."
- admin-reload: "&aConfiguration reloaded."
-
-# GUI Titles (support color codes)
-gui-titles:
- main-menu: "&8&lCommunity Market"
- browse-market: "&8&lBrowse Market &7(Page {page})"
- browse-auctions: "&8&lBrowse Auctions &7(Page {page})"
- create-listing: "&8&lCreate Listing"
- create-auction: "&8&lCreate Auction"
- select-item-listing: "&8&lSelect Item to Sell"
- select-item-auction: "&8&lSelect Item to Auction"
- quantity-select: "&8&lSelect Quantity"
- my-listings: "&8&lMy Listings"
- my-auctions: "&8&lMy Auctions"
- claim-items: "&8&lClaim Items"
- earnings: "&8&lEarnings"
- confirm-purchase: "&8&lConfirm Purchase"
- confirm-bid: "&8&lConfirm Bid"
- confirm-cancel: "&8&lConfirm Cancellation"
- number-input: "&8&lEnter Amount"
- admin-panel: "&8&lAdmin Panel"
- admin-listings: "&8&lAll Listings"
- admin-auctions: "&8&lAll Auctions"
- listing-details: "&8&lListing Details"
- auction-details: "&8&lAuction Details"
- filter-menu: "&8&lFilter Options"
- sort-menu: "&8&lSort Options"
- duration-select: "&8&lSelect Duration"
- help: "&8&lHelp"
-
-# Button Names
-buttons:
- # Main Menu
- browse-market: "&aBrowse Market"
- browse-auctions: "&6Browse Auctions"
- create-listing: "&eCreate Listing"
- create-auction: "&eCreate Auction"
- my-listings: "&bMy Listings"
- my-auctions: "&bMy Auctions"
- claim-items: "&dClaim Items"
- earnings: "&aEarnings"
- help: "&fHelp"
- admin: "&cAdmin Panel"
-
- # Navigation
- next-page: "&aNext Page →"
- previous-page: "&a← Previous Page"
- back: "&cBack"
- close: "&cClose"
-
- # Actions
- confirm: "&aConfirm"
- cancel: "&cCancel"
- buy: "&aBuy Now"
- bid: "&6Place Bid"
- buyout: "&eBuyout"
- claim: "&aClaim"
- claim-all: "&aClaim All"
- withdraw: "&aWithdraw All"
- remove: "&cRemove Listing"
- cancel-auction: "&cCancel Auction"
-
- # Number Input
- add-1: "&a+1"
- add-10: "&a+10"
- add-100: "&a+100"
- add-1000: "&a+1,000"
- subtract-1: "&c-1"
- subtract-10: "&c-10"
- subtract-100: "&c-100"
- subtract-1000: "&c-1,000"
- set-min: "&eSet Min"
- set-max: "&eSet Max"
- custom-amount: "&bCustom Amount"
-
- # Filters & Sort
- filter: "&eFilter"
- sort: "&eSort"
- search: "&eSearch"
- clear-filter: "&cClear Filters"
-
- # Duration
- duration-1h: "&e1 Hour"
- duration-6h: "&e6 Hours"
- duration-12h: "&e12 Hours"
- duration-24h: "&e24 Hours"
- duration-48h: "&e48 Hours"
- duration-72h: "&e3 Days"
- duration-168h: "&e7 Days"
- duration-336h: "&e14 Days"
-
- # Admin
- admin-view-listings: "&aView All Listings"
- admin-view-auctions: "&6View All Auctions"
- admin-reload: "&eReload Config"
-
-# Button Lore (descriptions)
-lore:
- browse-market:
- - "&7Browse all fixed-price"
- - "&7listings from players."
- - ""
- - "&eClick to browse!"
- browse-auctions:
- - "&7Browse all active auctions"
- - "&7and place bids."
- - ""
- - "&eClick to browse!"
- create-listing:
- - "&7Sell items at a fixed price."
- - "&7Tax: &f{tax}%"
- - ""
- - "&eClick to create!"
- create-auction:
- - "&7Auction items to the"
- - "&7highest bidder."
- - "&7Tax: &f{tax}%"
- - ""
- - "&eClick to create!"
- my-listings:
- - "&7View and manage your"
- - "&7active listings."
- - ""
- - "&7Active: &f{count}/{max}"
- - ""
- - "&eClick to view!"
- my-auctions:
- - "&7View and manage your"
- - "&7active auctions."
- - ""
- - "&7Active: &f{count}/{max}"
- - ""
- - "&eClick to view!"
- claim-items:
- - "&7Claim items from expired"
- - "&7listings or won auctions."
- - ""
- - "&7Pending: &f{count}"
- - ""
- - "&eClick to claim!"
- earnings:
- - "&7View and withdraw your"
- - "&7pending earnings from sales."
- - ""
- - "&7Pending: &a{amount}"
- - ""
- - "&eClick to view!"
- help:
- - "&7Learn how to use the"
- - "&7Community Market."
- - ""
- - "&eClick for help!"
- admin:
- - "&cAdmin Panel"
- - "&7Manage listings and auctions."
- - ""
- - "&eClick to open!"
-
- # Listing Info
- listing-info:
- - "&7Seller: &f{seller}"
- - "&7Price: &a{price}"
- - "&7Amount: &f{amount}"
- - "&7Expires: &f{expires}"
- - ""
- - "&eLeft-click to buy!"
-
- # Auction Info
- auction-info:
- - "&7Seller: &f{seller}"
- - "&7Starting bid: &a{start_price}"
- - "&7Current bid: &a{current_bid}"
- - "&7Bidder: &f{bidder}"
- - "&7Bids: &f{bid_count}"
- - "&7Ends: &f{ends}"
- - ""
- - "&eLeft-click to bid!"
- - "&eRight-click to buyout!"
-
- # My Listing Info
- my-listing-info:
- - "&7Price: &a{price}"
- - "&7Amount: &f{amount}"
- - "&7Created: &f{created}"
- - "&7Expires: &f{expires}"
- - ""
- - "&cClick to cancel"
-
- # My Auction Info
- my-auction-info:
- - "&7Starting bid: &a{start_price}"
- - "&7Current bid: &a{current_bid}"
- - "&7Bidder: &f{bidder}"
- - "&7Bids: &f{bid_count}"
- - "&7Ends: &f{ends}"
- - ""
- - "&cClick to cancel (if no bids)"
-
- # Confirm Purchase
- confirm-purchase-info:
- - "&7You are purchasing:"
- - "&f{item} x{amount}"
- - ""
- - "&7Price: &a{price}"
- - "&7Tax: &e{tax}"
- - "&7Total: &a{total}"
- - ""
- - "&aClick to confirm!"
-
- # Confirm Bid
- confirm-bid-info:
- - "&7You are bidding on:"
- - "&f{item}"
- - ""
- - "&7Your bid: &a{bid}"
- - "&7Current high: &e{current}"
- - ""
- - "&aClick to confirm!"
-
- # Claim Item
- claim-item-info:
- - "&7Reason: &f{reason}"
- - "&7From: &f{source}"
- - "&7Date: &f{date}"
- - ""
- - "&eClick to claim!"
-
- # Earnings Info
- earnings-info:
- - "&7Your pending earnings"
- - "&7from market sales."
- - ""
- - "&7Total: &a{amount}"
- - ""
- - "&aClick to withdraw!"
-
- # Number Input Info
- current-value:
- - "&7Current: &a{value}"
-
-# Filter Options
-filters:
- all: "&fAll Items"
- weapons: "&cWeapons"
- armor: "&bArmor"
- tools: "&eTools"
- blocks: "&7Blocks"
- food: "&6Food"
- potions: "&dPotions"
- materials: "&aMaterials"
- enchanted: "&5Enchanted Items"
- misc: "&8Miscellaneous"
-
-# Sort Options
-sort:
- newest: "&aNewest First"
- oldest: "&eOldest First"
- price-low: "&aPrice: Low to High"
- price-high: "&cPrice: High to Low"
- ending-soon: "&6Ending Soon"
- most-bids: "&bMost Bids"
-
-# Time Formats
-time:
- expired: "&cExpired"
- days: "{d}d"
- hours: "{h}h"
- minutes: "{m}m"
- seconds: "{s}s"
-
-# Quantity Selector GUI
-quantity-select:
- title: "&6&lSelect Quantity"
- info-line-1: "&7Choose how many items"
- info-line-2: "&7you want to sell."
- available: "&7Available: &f{amount}"
- selected: "&7Selected: &f{amount}"
- quantity-label: "Quantity"
- minimum: "&7Minimum: &f{amount}"
- maximum: "&7Maximum: &f{amount}"
- use-buttons: "&eUse buttons to adjust"
- click-adjust: "&7Click: &e{amount}"
- set-minimum: "&6Set Minimum"
- set-maximum: "&6Set Maximum"
- set-to: "&7Set to: &f{amount}"
- back-lore: "&7Return to item selection"
- confirm-lore: "&7Quantity: &a{amount}"
-
-# Item Selection GUI
-item-selection:
- info-title: "&fSelect an Item"
- info-lore-listing: "&7Click on an item from your|&7inventory to create a &eListing&7."
- info-lore-auction: "&7Click on an item from your|&7inventory to create a &6Auction&7."
- blacklisted-note: "&7Blacklisted items are shown in red."
- click-to-select: "&a► Click to select"
- blocked-title: "&c{material}"
- blocked-lore-1: "&7This item cannot be listed."
- blocked-lore-2: "&cBlacklisted or invalid."
- back-lore: "&7Return to main menu"
-
-# Create Listing GUI
-create-listing:
- info-title: "&6&lCreate Listing"
- info-lore-1: "&7Set a price and duration"
- info-lore-2: "&7for your listing."
- tax-info: "&7Tax: &f{tax}%"
- item-lore: "&7Quantity: &f{amount}|&eThis item will be listed"
- price-title: "&6Price: {price}"
- price-tax: "&7Tax ({percent}%): &c{amount}"
- price-earnings: "&7You receive: &a{amount}"
- price-click: "&eClick to change price"
- duration-title: "&eDuration: {duration}"
- duration-lore: "&7Listing expires after this time"
- duration-click: "&eClick to change duration"
- back-lore: "&7Return to item selection"
- confirm-item: "&7Item: &f{item} x{amount}"
- confirm-price: "&7Price: &a{price}"
- confirm-earnings: "&7You receive: &a{amount}"
- confirm-duration: "&7Duration: &e{duration}"
- confirm-click: "&aClick to create listing!"
-
-# Create Auction GUI
-create-auction:
- info-title: "&6&lCreate Auction"
- info-lore-1: "&7Set starting price, optional buyout,"
- info-lore-2: "&7and duration for your auction."
- tax-info: "&7Tax on sale: &f{tax}%"
- item-lore: "&7Quantity: &f{amount}|&eThis item will be auctioned"
- start-price-title: "&6Starting Price: {price}"
- start-price-lore-1: "&7Minimum bid to start"
- start-price-lore-2: "&7the auction."
- start-price-click: "&eClick to change"
- buyout-title-set: "&bBuyout: {price}"
- buyout-title-unset: "&bBuyout: &7Not set"
- buyout-lore-set-1: "&7Instant purchase price."
- buyout-lore-set-2: "&eLeft-click to change"
- buyout-lore-set-3: "&cRight-click to remove"
- buyout-lore-unset-1: "&7Optional instant purchase"
- buyout-lore-unset-2: "&7price for your auction."
- buyout-lore-unset-click: "&eClick to set buyout price"
- duration-title: "&eDuration: {duration}"
- duration-lore: "&7Auction ends after this time."
- duration-click: "&eClick to change duration"
- back-lore: "&7Return to item selection"
- confirm-item: "&7Item: &f{item} x{amount}"
- confirm-start: "&7Start: &a{price}"
- confirm-buyout: "&7Buyout: &b{price}"
- confirm-buyout-none: "&7Buyout: &7None"
- confirm-duration: "&7Duration: &e{duration}"
- confirm-click: "&aClick to create auction!"
-
-# Number Input GUI
-number-input:
- display-title: "&6&l{value}"
- minimum: "&7Minimum: &f{value}"
- maximum: "&7Maximum: &f{value}"
- use-buttons: "&eUse buttons to adjust"
- click-adjust: "&7Click: &e{amount}"
- shift-click: "&7Shift-click: &e{amount}"
- set-minimum: "&6Set Minimum"
- set-maximum: "&6Set Maximum"
- set-to: "&7Set to: &f{value}"
- cancel-lore: "&7Cancel and go back"
- confirm-lore: "&7Confirm: &a{value}"
-
-# Help Content
-help:
- title: "&6&lCommunity Market Help"
- content:
- - "&eBrowse Market &7- View and buy fixed-price listings"
- - "&eBrowse Auctions &7- View and bid on auctions"
- - "&eCreate Listing &7- Sell items at a fixed price"
- - "&eCreate Auction &7- Auction items to highest bidder"
- - "&eMy Listings &7- Manage your active listings"
- - "&eMy Auctions &7- Manage your active auctions"
- - "&eClaim Items &7- Collect unsold/won items"
- - "&eEarnings &7- Withdraw money from sales"
- - ""
- - "&7&oTip: All actions are done through GUIs!"
- - "&7&oJust click on buttons to navigate."
-
diff --git a/target/classes/lang/pt_PT.yml b/target/classes/lang/pt_PT.yml
deleted file mode 100644
index 019e495..0000000
--- a/target/classes/lang/pt_PT.yml
+++ /dev/null
@@ -1,448 +0,0 @@
-# ============================================
-# CommunityMarket Ficheiro de Idioma - Português (Portugal)
-# ============================================
-
-# Geral
-prefix: "&8[&6Mercado&8] &r"
-
-# Mensagens Gerais
-messages:
- no-permission: "&cNão tens permissão para fazer isso."
- player-only: "&cEste comando só pode ser usado por jogadores."
- reload-success: "&aConfiguração recarregada com sucesso!"
- economy-not-found: "&cNenhum plugin de economia encontrado! Mercado desativado."
-
- # Mensagens de Anúncios
- listing-created: "&aAnúncio criado com sucesso! ID: #{id}"
- listing-cancelled: "&aAnúncio cancelado. Item devolvido ao armazém."
- listing-expired: "&eO teu anúncio #{id} expirou. Item movido para o armazém."
- listing-purchased: "&aCompraste {item} x{amount} por {price}!"
- listing-sold: "&aO teu {item} x{amount} foi vendido a {buyer} por {price}!"
- listing-limit-reached: "&cAtingiste o número máximo de anúncios ({max})."
- listing-cooldown: "&cPor favor aguarda {time} antes de criar outro anúncio."
- listing-not-found: "&cAnúncio não encontrado ou já não está disponível."
- listing-own-item: "&cNão podes comprar o teu próprio anúncio."
- listing-insufficient-funds: "&cNão tens dinheiro suficiente. Necessário: {price}"
-
- # Mensagens de Leilões
- auction-created: "&aLeilão criado com sucesso! ID: #{id}"
- auction-cancelled: "&aLeilão cancelado. Item devolvido ao armazém."
- auction-ended-winner: "&aParabéns! Ganhaste o leilão por {item}! Pagaste: {price}"
- auction-ended-seller: "&aO teu leilão por {item} terminou! Vencedor: {winner}, Ganhaste: {price}"
- auction-ended-no-bids: "&eO teu leilão por {item} terminou sem licitações. Item movido para o armazém."
- auction-limit-reached: "&cAtingiste o número máximo de leilões ({max})."
- auction-not-found: "&cLeilão não encontrado ou já não está disponível."
- auction-own-item: "&cNão podes licitar no teu próprio leilão."
- auction-bid-placed: "&aFizeste uma licitação de {amount} em {item}!"
- auction-outbid: "&eForam feitas licitações superiores à tua em {item}! Nova licitação: {amount} por {bidder}"
- auction-bid-too-low: "&cLicitação muito baixa! Mínimo: {min}"
- auction-insufficient-funds: "&cNão tens dinheiro suficiente. Necessário: {price}"
- auction-buyout: "&aCompraste o leilão de {item} por {price}!"
- auction-extended: "&eLeilão prolongado por {seconds}s devido à proteção anti-snipe."
-
- # Mensagens de Reclamação
- claim-success: "&aItem reclamado com sucesso!"
- claim-empty: "&eNão tens itens para reclamar."
- claim-inventory-full: "&cO teu inventário está cheio! Por favor liberta espaço."
- claim-all-success: "&aReclamaste {count} itens!"
-
- # Mensagens de Ganhos
- earnings-withdrawn: "&aLevantaste {amount}! Novo saldo: {balance}"
- earnings-empty: "&eNão tens ganhos pendentes."
- earnings-balance: "&aOs teus ganhos pendentes: {amount}"
-
- # Validação de Itens
- invalid-item: "&cPor favor seleciona um item válido."
- item-no-longer-available: "&cO item selecionado já não está no teu inventário."
- item-changed: "&cO item selecionado foi alterado. Por favor seleciona novamente."
- quantity-changed: "&cA quantidade disponível foi alterada. Por favor verifica e tenta novamente."
- blacklisted-item: "&cEste tipo de item não é permitido no mercado."
- blacklisted-content: "&cEste item contém conteúdo bloqueado."
- invalid-price: "&cPreço inválido. Intervalo: {min} - {max}"
- invalid-amount: "&cQuantidade inválida."
- invalid-duration: "&cDuração inválida."
-
- # Mensagens de Admin
- admin-listing-removed: "&aAnúncio #{id} removido pelo admin."
- admin-auction-cancelled: "&aLeilão #{id} cancelado pelo admin."
- admin-reload: "&aConfiguração recarregada."
-
-# Títulos GUI (suportam códigos de cor)
-gui-titles:
- main-menu: "&8&lMercado Comunitário"
- browse-market: "&8&lExplorar Mercado &7(Página {page})"
- browse-auctions: "&8&lExplorar Leilões &7(Página {page})"
- create-listing: "&8&lCriar Anúncio"
- create-auction: "&8&lCriar Leilão"
- select-item-listing: "&8&lSelecionar Item para Vender"
- select-item-auction: "&8&lSelecionar Item para Leilão"
- quantity-select: "&8&lSelecionar Quantidade"
- my-listings: "&8&lOs Meus Anúncios"
- my-auctions: "&8&lOs Meus Leilões"
- claim-items: "&8&lReclamar Itens"
- earnings: "&8&lGanhos"
- confirm-purchase: "&8&lConfirmar Compra"
- confirm-bid: "&8&lConfirmar Licitação"
- confirm-cancel: "&8&lConfirmar Cancelamento"
- number-input: "&8&lIntroduzir Valor"
- admin-panel: "&8&lPainel de Admin"
- admin-listings: "&8&lTodos os Anúncios"
- admin-auctions: "&8&lTodos os Leilões"
- listing-details: "&8&lDetalhes do Anúncio"
- auction-details: "&8&lDetalhes do Leilão"
- filter-menu: "&8&lOpções de Filtro"
- sort-menu: "&8&lOpções de Ordenação"
- duration-select: "&8&lSelecionar Duração"
- help: "&8&lAjuda"
-
-# Nomes dos Botões
-buttons:
- # Menu Principal
- browse-market: "&aExplorar Mercado"
- browse-auctions: "&6Explorar Leilões"
- create-listing: "&eCriar Anúncio"
- create-auction: "&eCriar Leilão"
- my-listings: "&bOs Meus Anúncios"
- my-auctions: "&bOs Meus Leilões"
- claim-items: "&dReclamar Itens"
- earnings: "&aGanhos"
- help: "&fAjuda"
- admin: "&cPainel de Admin"
-
- # Navegação
- next-page: "&aPágina Seguinte →"
- previous-page: "&a← Página Anterior"
- back: "&cVoltar"
- close: "&cFechar"
-
- # Ações
- confirm: "&aConfirmar"
- cancel: "&cCancelar"
- buy: "&aComprar Agora"
- bid: "&6Fazer Licitação"
- buyout: "&eCompra Imediata"
- claim: "&aReclamar"
- claim-all: "&aReclamar Tudo"
- withdraw: "&aLevantar Tudo"
- remove: "&cRemover Anúncio"
- cancel-auction: "&cCancelar Leilão"
-
- # Entrada Numérica
- add-1: "&a+1"
- add-10: "&a+10"
- add-100: "&a+100"
- add-1000: "&a+1.000"
- subtract-1: "&c-1"
- subtract-10: "&c-10"
- subtract-100: "&c-100"
- subtract-1000: "&c-1.000"
- set-min: "&eDefinir Mín"
- set-max: "&eDefinir Máx"
- custom-amount: "&bValor Personalizado"
-
- # Filtros e Ordenação
- filter: "&eFiltro"
- sort: "&eOrdenar"
- search: "&ePesquisar"
- clear-filter: "&cLimpar Filtros"
-
- # Duração
- duration-1h: "&e1 Hora"
- duration-6h: "&e6 Horas"
- duration-12h: "&e12 Horas"
- duration-24h: "&e24 Horas"
- duration-48h: "&e48 Horas"
- duration-72h: "&e3 Dias"
- duration-168h: "&e7 Dias"
- duration-336h: "&e14 Dias"
-
- # Admin
- admin-view-listings: "&aVer Todos os Anúncios"
- admin-view-auctions: "&6Ver Todos os Leilões"
- admin-reload: "&eRecarregar Config"
-
-# Lore dos Botões (descrições)
-lore:
- browse-market:
- - "&7Explora todos os anúncios"
- - "&7de preço fixo dos jogadores."
- - ""
- - "&eClica para explorar!"
- browse-auctions:
- - "&7Explora todos os leilões ativos"
- - "&7e faz licitações."
- - ""
- - "&eClica para explorar!"
- create-listing:
- - "&7Vende itens a um preço fixo."
- - "&7Taxa: &f{tax}%"
- - ""
- - "&eClica para criar!"
- create-auction:
- - "&7Leiloa itens ao"
- - "&7maior licitador."
- - "&7Taxa: &f{tax}%"
- - ""
- - "&eClica para criar!"
- my-listings:
- - "&7Vê e gere os teus"
- - "&7anúncios ativos."
- - ""
- - "&7Ativos: &f{count}/{max}"
- - ""
- - "&eClica para ver!"
- my-auctions:
- - "&7Vê e gere os teus"
- - "&7leilões ativos."
- - ""
- - "&7Ativos: &f{count}/{max}"
- - ""
- - "&eClica para ver!"
- claim-items:
- - "&7Reclama itens de anúncios"
- - "&7expirados ou leilões ganhos."
- - ""
- - "&7Pendentes: &f{count}"
- - ""
- - "&eClica para reclamar!"
- earnings:
- - "&7Vê e levanta os teus"
- - "&7ganhos pendentes das vendas."
- - ""
- - "&7Pendente: &a{amount}"
- - ""
- - "&eClica para ver!"
- help:
- - "&7Aprende a usar o"
- - "&7Mercado Comunitário."
- - ""
- - "&eClica para ajuda!"
- admin:
- - "&cPainel de Admin"
- - "&7Gere anúncios e leilões."
- - ""
- - "&eClica para abrir!"
-
- # Info do Anúncio
- listing-info:
- - "&7Vendedor: &f{seller}"
- - "&7Preço: &a{price}"
- - "&7Quantidade: &f{amount}"
- - "&7Expira: &f{expires}"
- - ""
- - "&eClique esquerdo para comprar!"
-
- # Info do Leilão
- auction-info:
- - "&7Vendedor: &f{seller}"
- - "&7Licitação inicial: &a{start_price}"
- - "&7Licitação atual: &a{current_bid}"
- - "&7Licitador: &f{bidder}"
- - "&7Licitações: &f{bid_count}"
- - "&7Termina: &f{ends}"
- - ""
- - "&eClique esquerdo para licitar!"
- - "&eClique direito para compra imediata!"
-
- # Info do Meu Anúncio
- my-listing-info:
- - "&7Preço: &a{price}"
- - "&7Quantidade: &f{amount}"
- - "&7Criado: &f{created}"
- - "&7Expira: &f{expires}"
- - ""
- - "&cClica para cancelar"
-
- # Info do Meu Leilão
- my-auction-info:
- - "&7Licitação inicial: &a{start_price}"
- - "&7Licitação atual: &a{current_bid}"
- - "&7Licitador: &f{bidder}"
- - "&7Licitações: &f{bid_count}"
- - "&7Termina: &f{ends}"
- - ""
- - "&cClica para cancelar (sem licitações)"
-
- # Confirmar Compra
- confirm-purchase-info:
- - "&7Estás a comprar:"
- - "&f{item} x{amount}"
- - ""
- - "&7Preço: &a{price}"
- - "&7Taxa: &e{tax}"
- - "&7Total: &a{total}"
- - ""
- - "&aClica para confirmar!"
-
- # Confirmar Licitação
- confirm-bid-info:
- - "&7Estás a licitar em:"
- - "&f{item}"
- - ""
- - "&7A tua licitação: &a{bid}"
- - "&7Atual mais alta: &e{current}"
- - ""
- - "&aClica para confirmar!"
-
- # Reclamar Item
- claim-item-info:
- - "&7Razão: &f{reason}"
- - "&7De: &f{source}"
- - "&7Data: &f{date}"
- - ""
- - "&eClica para reclamar!"
-
- # Info de Ganhos
- earnings-info:
- - "&7Os teus ganhos pendentes"
- - "&7das vendas no mercado."
- - ""
- - "&7Total: &a{amount}"
- - ""
- - "&aClica para levantar!"
-
- # Info de Entrada Numérica
- current-value:
- - "&7Atual: &a{value}"
-
-# Opções de Filtro
-filters:
- all: "&fTodos os Itens"
- weapons: "&cArmas"
- armor: "&bArmadura"
- tools: "&eFerramentas"
- blocks: "&7Blocos"
- food: "&6Comida"
- potions: "&dPoções"
- materials: "&aMateriais"
- enchanted: "&5Itens Encantados"
- misc: "&8Diversos"
-
-# Opções de Ordenação
-sort:
- newest: "&aMais Recente"
- oldest: "&eMais Antigo"
- price-low: "&aPreço: Menor para Maior"
- price-high: "&cPreço: Maior para Menor"
- ending-soon: "&6A Terminar Em Breve"
- most-bids: "&bMais Licitações"
-
-# Formatos de Tempo
-time:
- expired: "&cExpirado"
- days: "{d}d"
- hours: "{h}h"
- minutes: "{m}m"
- seconds: "{s}s"
-
-# GUI de Seleção de Quantidade
-quantity-select:
- title: "&6&lSelecionar Quantidade"
- info-line-1: "&7Escolhe quantos itens"
- info-line-2: "&7queres vender."
- available: "&7Disponível: &f{amount}"
- selected: "&7Selecionado: &f{amount}"
- quantity-label: "Quantidade"
- minimum: "&7Mínimo: &f{amount}"
- maximum: "&7Máximo: &f{amount}"
- use-buttons: "&eUsa os botões para ajustar"
- click-adjust: "&7Clica: &e{amount}"
- set-minimum: "&6Definir Mínimo"
- set-maximum: "&6Definir Máximo"
- set-to: "&7Definir para: &f{amount}"
- back-lore: "&7Voltar à seleção de item"
- confirm-lore: "&7Quantidade: &a{amount}"
-
-# GUI de Seleção de Item
-item-selection:
- info-title: "&fSelecionar um Item"
- info-lore-listing: "&7Clica num item do teu|&7inventário para criar um &eAnúncio&7."
- info-lore-auction: "&7Clica num item do teu|&7inventário para criar um &6Leilão&7."
- blacklisted-note: "&7Itens bloqueados aparecem a vermelho."
- click-to-select: "&a► Clica para selecionar"
- blocked-title: "&c{material}"
- blocked-lore-1: "&7Este item não pode ser listado."
- blocked-lore-2: "&cBloqueado ou inválido."
- back-lore: "&7Voltar ao menu principal"
-
-# GUI de Criar Anúncio
-create-listing:
- info-title: "&6&lCriar Anúncio"
- info-lore-1: "&7Define um preço e duração"
- info-lore-2: "&7para o teu anúncio."
- tax-info: "&7Taxa: &f{tax}%"
- item-lore: "&7Quantidade: &f{amount}|&eEste item será listado"
- price-title: "&6Preço: {price}"
- price-tax: "&7Taxa ({percent}%): &c{amount}"
- price-earnings: "&7Recebes: &a{amount}"
- price-click: "&eClica para alterar preço"
- duration-title: "&eDuração: {duration}"
- duration-lore: "&7O anúncio expira após este tempo"
- duration-click: "&eClica para alterar duração"
- back-lore: "&7Voltar à seleção de item"
- confirm-item: "&7Item: &f{item} x{amount}"
- confirm-price: "&7Preço: &a{price}"
- confirm-earnings: "&7Recebes: &a{amount}"
- confirm-duration: "&7Duração: &e{duration}"
- confirm-click: "&aClica para criar anúncio!"
-
-# GUI de Criar Leilão
-create-auction:
- info-title: "&6&lCriar Leilão"
- info-lore-1: "&7Define preço inicial, compra imediata opcional,"
- info-lore-2: "&7e duração para o teu leilão."
- tax-info: "&7Taxa na venda: &f{tax}%"
- item-lore: "&7Quantidade: &f{amount}|&eEste item será leiloado"
- start-price-title: "&6Preço Inicial: {price}"
- start-price-lore-1: "&7Licitação mínima para iniciar"
- start-price-lore-2: "&7o leilão."
- start-price-click: "&eClica para alterar"
- buyout-title-set: "&bCompra Imediata: {price}"
- buyout-title-unset: "&bCompra Imediata: &7Não definido"
- buyout-lore-set-1: "&7Preço de compra instantânea."
- buyout-lore-set-2: "&eClique esquerdo para alterar"
- buyout-lore-set-3: "&cClique direito para remover"
- buyout-lore-unset-1: "&7Preço opcional de compra"
- buyout-lore-unset-2: "&7instantânea para o teu leilão."
- buyout-lore-unset-click: "&eClica para definir preço de compra imediata"
- duration-title: "&eDuração: {duration}"
- duration-lore: "&7O leilão termina após este tempo."
- duration-click: "&eClica para alterar duração"
- back-lore: "&7Voltar à seleção de item"
- confirm-item: "&7Item: &f{item} x{amount}"
- confirm-start: "&7Início: &a{price}"
- confirm-buyout: "&7Compra Imediata: &b{price}"
- confirm-buyout-none: "&7Compra Imediata: &7Nenhum"
- confirm-duration: "&7Duração: &e{duration}"
- confirm-click: "&aClica para criar leilão!"
-
-# GUI de Entrada Numérica
-number-input:
- display-title: "&6&l{value}"
- minimum: "&7Mínimo: &f{value}"
- maximum: "&7Máximo: &f{value}"
- use-buttons: "&eUsa os botões para ajustar"
- click-adjust: "&7Clica: &e{amount}"
- shift-click: "&7Shift-clica: &e{amount}"
- set-minimum: "&6Definir Mínimo"
- set-maximum: "&6Definir Máximo"
- set-to: "&7Definir para: &f{value}"
- cancel-lore: "&7Cancelar e voltar"
- confirm-lore: "&7Confirmar: &a{value}"
-
-# Conteúdo de Ajuda
-help:
- title: "&6&lAjuda do Mercado Comunitário"
- content:
- - "&eExplorar Mercado &7- Ver e comprar anúncios de preço fixo"
- - "&eExplorar Leilões &7- Ver e licitar em leilões"
- - "&eCriar Anúncio &7- Vender itens a um preço fixo"
- - "&eCriar Leilão &7- Leiloar itens ao maior licitador"
- - "&eOs Meus Anúncios &7- Gerir os teus anúncios ativos"
- - "&eOs Meus Leilões &7- Gerir os teus leilões ativos"
- - "&eReclamar Itens &7- Recolher itens não vendidos/ganhos"
- - "&eGanhos &7- Levantar dinheiro das vendas"
- - ""
- - "&7&oDica: Todas as ações são feitas através de GUIs!"
- - "&7&oBasta clicar nos botões para navegar."
-
diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml
deleted file mode 100644
index 844bcb7..0000000
--- a/target/classes/plugin.yml
+++ /dev/null
@@ -1,83 +0,0 @@
-name: CommunityMarket
-version: '1.0.0'
-main: pt.henrique.communityMarket.CommunityMarket
-api-version: '1.21'
-description: A GUI-only marketplace plugin for fixed-price listings and auctions
-author: Henrique
-website: https://github.com/henrique/CommunityMarket
-
-# Soft dependencies - plugin will detect and use these if available
-softdepend:
- - Vault
- - Essentials
-
-load: POSTWORLD
-
-commands:
- market:
- description: Opens the Community Market main menu
- usage: /
- aliases: [cmarket]
- permission: communitymarket.use
-
-permissions:
- communitymarket.*:
- description: Grants all CommunityMarket permissions
- default: op
- children:
- communitymarket.use: true
- communitymarket.sell: true
- communitymarket.auction: true
- communitymarket.buy: true
- communitymarket.bid: true
- communitymarket.claim: true
- communitymarket.withdraw: true
- communitymarket.admin: true
-
- communitymarket.use:
- description: Allows access to the market GUI
- default: true
-
- communitymarket.sell:
- description: Allows creating fixed-price listings
- default: true
-
- communitymarket.auction:
- description: Allows creating auctions
- default: true
-
- communitymarket.buy:
- description: Allows purchasing from the market
- default: true
-
- communitymarket.bid:
- description: Allows bidding on auctions
- default: true
-
- communitymarket.claim:
- description: Allows claiming items from storage
- default: true
-
- communitymarket.withdraw:
- description: Allows withdrawing earnings
- default: true
-
- communitymarket.admin:
- description: Allows access to admin functions
- default: op
- children:
- communitymarket.admin.viewall: true
- communitymarket.admin.remove: true
- communitymarket.admin.reload: true
-
- communitymarket.admin.viewall:
- description: Allows viewing all listings/auctions
- default: op
-
- communitymarket.admin.remove:
- description: Allows removing any listing or auction
- default: op
-
- communitymarket.admin.reload:
- description: Allows reloading configuration
- default: op
diff --git a/target/classes/pt/henrique/communityMarket/CommunityMarket.class b/target/classes/pt/henrique/communityMarket/CommunityMarket.class
deleted file mode 100644
index 08ff0e7..0000000
Binary files a/target/classes/pt/henrique/communityMarket/CommunityMarket.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/command/MarketCommand.class b/target/classes/pt/henrique/communityMarket/command/MarketCommand.class
deleted file mode 100644
index d14c080..0000000
Binary files a/target/classes/pt/henrique/communityMarket/command/MarketCommand.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/config/ConfigManager.class b/target/classes/pt/henrique/communityMarket/config/ConfigManager.class
deleted file mode 100644
index e35a8e1..0000000
Binary files a/target/classes/pt/henrique/communityMarket/config/ConfigManager.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/config/MessageManager.class b/target/classes/pt/henrique/communityMarket/config/MessageManager.class
deleted file mode 100644
index d65cc1b..0000000
Binary files a/target/classes/pt/henrique/communityMarket/config/MessageManager.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/db/DatabaseManager.class b/target/classes/pt/henrique/communityMarket/db/DatabaseManager.class
deleted file mode 100644
index f9f22d0..0000000
Binary files a/target/classes/pt/henrique/communityMarket/db/DatabaseManager.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/economy/EconomyManager$EconomyAdapter.class b/target/classes/pt/henrique/communityMarket/economy/EconomyManager$EconomyAdapter.class
deleted file mode 100644
index 054c48d..0000000
Binary files a/target/classes/pt/henrique/communityMarket/economy/EconomyManager$EconomyAdapter.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/economy/EconomyManager$EssentialsAdapter.class b/target/classes/pt/henrique/communityMarket/economy/EconomyManager$EssentialsAdapter.class
deleted file mode 100644
index 9579280..0000000
Binary files a/target/classes/pt/henrique/communityMarket/economy/EconomyManager$EssentialsAdapter.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/economy/EconomyManager$VaultAdapter.class b/target/classes/pt/henrique/communityMarket/economy/EconomyManager$VaultAdapter.class
deleted file mode 100644
index 5bd339e..0000000
Binary files a/target/classes/pt/henrique/communityMarket/economy/EconomyManager$VaultAdapter.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/economy/EconomyManager.class b/target/classes/pt/henrique/communityMarket/economy/EconomyManager.class
deleted file mode 100644
index 45b754f..0000000
Binary files a/target/classes/pt/henrique/communityMarket/economy/EconomyManager.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/AdminGui$AdminAuctionsGui.class b/target/classes/pt/henrique/communityMarket/gui/AdminGui$AdminAuctionsGui.class
deleted file mode 100644
index 12e28bd..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/AdminGui$AdminAuctionsGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/AdminGui$AdminListingsGui.class b/target/classes/pt/henrique/communityMarket/gui/AdminGui$AdminListingsGui.class
deleted file mode 100644
index 36848ad..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/AdminGui$AdminListingsGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/AdminGui.class b/target/classes/pt/henrique/communityMarket/gui/AdminGui.class
deleted file mode 100644
index 154db21..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/AdminGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/BrowseAuctionsGui$1.class b/target/classes/pt/henrique/communityMarket/gui/BrowseAuctionsGui$1.class
deleted file mode 100644
index 4d68a81..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/BrowseAuctionsGui$1.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/BrowseAuctionsGui.class b/target/classes/pt/henrique/communityMarket/gui/BrowseAuctionsGui.class
deleted file mode 100644
index 67a1a02..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/BrowseAuctionsGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/BrowseMarketGui$1.class b/target/classes/pt/henrique/communityMarket/gui/BrowseMarketGui$1.class
deleted file mode 100644
index e317f6c..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/BrowseMarketGui$1.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/BrowseMarketGui.class b/target/classes/pt/henrique/communityMarket/gui/BrowseMarketGui.class
deleted file mode 100644
index 8466800..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/BrowseMarketGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/ClaimGui$1.class b/target/classes/pt/henrique/communityMarket/gui/ClaimGui$1.class
deleted file mode 100644
index b49505f..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/ClaimGui$1.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/ClaimGui.class b/target/classes/pt/henrique/communityMarket/gui/ClaimGui.class
deleted file mode 100644
index 6617c12..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/ClaimGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/ConfirmationGui$ConfirmCallback.class b/target/classes/pt/henrique/communityMarket/gui/ConfirmationGui$ConfirmCallback.class
deleted file mode 100644
index 3b64abd..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/ConfirmationGui$ConfirmCallback.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/ConfirmationGui.class b/target/classes/pt/henrique/communityMarket/gui/ConfirmationGui.class
deleted file mode 100644
index a35cd01..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/ConfirmationGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/CreateAuctionGui.class b/target/classes/pt/henrique/communityMarket/gui/CreateAuctionGui.class
deleted file mode 100644
index 7f11da9..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/CreateAuctionGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/CreateListingGui.class b/target/classes/pt/henrique/communityMarket/gui/CreateListingGui.class
deleted file mode 100644
index bc110bb..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/CreateListingGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/EarningsGui.class b/target/classes/pt/henrique/communityMarket/gui/EarningsGui.class
deleted file mode 100644
index 6a5a6e1..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/EarningsGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/GuiManager.class b/target/classes/pt/henrique/communityMarket/gui/GuiManager.class
deleted file mode 100644
index 4e854ad..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/GuiManager.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/HelpGui.class b/target/classes/pt/henrique/communityMarket/gui/HelpGui.class
deleted file mode 100644
index a531317..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/HelpGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/ItemSelectionGui$SelectionMode.class b/target/classes/pt/henrique/communityMarket/gui/ItemSelectionGui$SelectionMode.class
deleted file mode 100644
index e1e708a..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/ItemSelectionGui$SelectionMode.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/ItemSelectionGui.class b/target/classes/pt/henrique/communityMarket/gui/ItemSelectionGui.class
deleted file mode 100644
index 6bf99d6..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/ItemSelectionGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/MainMenuGui.class b/target/classes/pt/henrique/communityMarket/gui/MainMenuGui.class
deleted file mode 100644
index 0a650c7..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/MainMenuGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/MarketGui$GuiType.class b/target/classes/pt/henrique/communityMarket/gui/MarketGui$GuiType.class
deleted file mode 100644
index e17d295..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/MarketGui$GuiType.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/MarketGui.class b/target/classes/pt/henrique/communityMarket/gui/MarketGui.class
deleted file mode 100644
index 36ea701..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/MarketGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/MyAuctionsGui.class b/target/classes/pt/henrique/communityMarket/gui/MyAuctionsGui.class
deleted file mode 100644
index d93c075..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/MyAuctionsGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/MyListingsGui.class b/target/classes/pt/henrique/communityMarket/gui/MyListingsGui.class
deleted file mode 100644
index 3f69f61..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/MyListingsGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/NumberInputGui$NumberInputCallback.class b/target/classes/pt/henrique/communityMarket/gui/NumberInputGui$NumberInputCallback.class
deleted file mode 100644
index c4fe151..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/NumberInputGui$NumberInputCallback.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/NumberInputGui.class b/target/classes/pt/henrique/communityMarket/gui/NumberInputGui.class
deleted file mode 100644
index cc3136d..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/NumberInputGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/QuantitySelectGui$QuantityCallback.class b/target/classes/pt/henrique/communityMarket/gui/QuantitySelectGui$QuantityCallback.class
deleted file mode 100644
index 1135df2..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/QuantitySelectGui$QuantityCallback.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/gui/QuantitySelectGui.class b/target/classes/pt/henrique/communityMarket/gui/QuantitySelectGui.class
deleted file mode 100644
index 7b39d2b..0000000
Binary files a/target/classes/pt/henrique/communityMarket/gui/QuantitySelectGui.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/listener/GuiListener$1.class b/target/classes/pt/henrique/communityMarket/listener/GuiListener$1.class
deleted file mode 100644
index d3d3890..0000000
Binary files a/target/classes/pt/henrique/communityMarket/listener/GuiListener$1.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/listener/GuiListener.class b/target/classes/pt/henrique/communityMarket/listener/GuiListener.class
deleted file mode 100644
index b6d82cc..0000000
Binary files a/target/classes/pt/henrique/communityMarket/listener/GuiListener.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/listener/PlayerListener.class b/target/classes/pt/henrique/communityMarket/listener/PlayerListener.class
deleted file mode 100644
index 0d9b212..0000000
Binary files a/target/classes/pt/henrique/communityMarket/listener/PlayerListener.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/model/Auction$AuctionStatus.class b/target/classes/pt/henrique/communityMarket/model/Auction$AuctionStatus.class
deleted file mode 100644
index 2723f9d..0000000
Binary files a/target/classes/pt/henrique/communityMarket/model/Auction$AuctionStatus.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/model/Auction.class b/target/classes/pt/henrique/communityMarket/model/Auction.class
deleted file mode 100644
index 456743c..0000000
Binary files a/target/classes/pt/henrique/communityMarket/model/Auction.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/model/Bid.class b/target/classes/pt/henrique/communityMarket/model/Bid.class
deleted file mode 100644
index 128fea0..0000000
Binary files a/target/classes/pt/henrique/communityMarket/model/Bid.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/model/ClaimItem$ClaimReason.class b/target/classes/pt/henrique/communityMarket/model/ClaimItem$ClaimReason.class
deleted file mode 100644
index 8f871f0..0000000
Binary files a/target/classes/pt/henrique/communityMarket/model/ClaimItem$ClaimReason.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/model/ClaimItem.class b/target/classes/pt/henrique/communityMarket/model/ClaimItem.class
deleted file mode 100644
index 16dc042..0000000
Binary files a/target/classes/pt/henrique/communityMarket/model/ClaimItem.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/model/Listing$ListingStatus.class b/target/classes/pt/henrique/communityMarket/model/Listing$ListingStatus.class
deleted file mode 100644
index f1e58f4..0000000
Binary files a/target/classes/pt/henrique/communityMarket/model/Listing$ListingStatus.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/model/Listing.class b/target/classes/pt/henrique/communityMarket/model/Listing.class
deleted file mode 100644
index 35634db..0000000
Binary files a/target/classes/pt/henrique/communityMarket/model/Listing.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/model/PendingEarnings.class b/target/classes/pt/henrique/communityMarket/model/PendingEarnings.class
deleted file mode 100644
index b5e85ed..0000000
Binary files a/target/classes/pt/henrique/communityMarket/model/PendingEarnings.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/AuctionService$BidResult.class b/target/classes/pt/henrique/communityMarket/service/AuctionService$BidResult.class
deleted file mode 100644
index 7515b19..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/AuctionService$BidResult.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/AuctionService$CancelResult.class b/target/classes/pt/henrique/communityMarket/service/AuctionService$CancelResult.class
deleted file mode 100644
index b59ef15..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/AuctionService$CancelResult.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/AuctionService.class b/target/classes/pt/henrique/communityMarket/service/AuctionService.class
deleted file mode 100644
index 77736f2..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/AuctionService.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/ClaimService$ClaimResult.class b/target/classes/pt/henrique/communityMarket/service/ClaimService$ClaimResult.class
deleted file mode 100644
index cd88d0d..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/ClaimService$ClaimResult.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/ClaimService.class b/target/classes/pt/henrique/communityMarket/service/ClaimService.class
deleted file mode 100644
index 0785264..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/ClaimService.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/EarningsService$WithdrawResult.class b/target/classes/pt/henrique/communityMarket/service/EarningsService$WithdrawResult.class
deleted file mode 100644
index caeda88..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/EarningsService$WithdrawResult.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/EarningsService.class b/target/classes/pt/henrique/communityMarket/service/EarningsService.class
deleted file mode 100644
index 159cc3a..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/EarningsService.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/ListingService$PurchaseResult.class b/target/classes/pt/henrique/communityMarket/service/ListingService$PurchaseResult.class
deleted file mode 100644
index 4e5fce8..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/ListingService$PurchaseResult.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/ListingService.class b/target/classes/pt/henrique/communityMarket/service/ListingService.class
deleted file mode 100644
index 6e0e8c2..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/ListingService.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/TransactionService$TransactionResult.class b/target/classes/pt/henrique/communityMarket/service/TransactionService$TransactionResult.class
deleted file mode 100644
index 4ea8986..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/TransactionService$TransactionResult.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/TransactionService$ValidationResult.class b/target/classes/pt/henrique/communityMarket/service/TransactionService$ValidationResult.class
deleted file mode 100644
index 9c7c550..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/TransactionService$ValidationResult.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/service/TransactionService.class b/target/classes/pt/henrique/communityMarket/service/TransactionService.class
deleted file mode 100644
index e8e46c5..0000000
Binary files a/target/classes/pt/henrique/communityMarket/service/TransactionService.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/task/AuctionTask.class b/target/classes/pt/henrique/communityMarket/task/AuctionTask.class
deleted file mode 100644
index cbb6099..0000000
Binary files a/target/classes/pt/henrique/communityMarket/task/AuctionTask.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/task/ExpiredListingTask.class b/target/classes/pt/henrique/communityMarket/task/ExpiredListingTask.class
deleted file mode 100644
index b92cf5e..0000000
Binary files a/target/classes/pt/henrique/communityMarket/task/ExpiredListingTask.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/util/InventoryUtil$ItemCategory.class b/target/classes/pt/henrique/communityMarket/util/InventoryUtil$ItemCategory.class
deleted file mode 100644
index f47c23b..0000000
Binary files a/target/classes/pt/henrique/communityMarket/util/InventoryUtil$ItemCategory.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/util/InventoryUtil.class b/target/classes/pt/henrique/communityMarket/util/InventoryUtil.class
deleted file mode 100644
index d5fbeb8..0000000
Binary files a/target/classes/pt/henrique/communityMarket/util/InventoryUtil.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/util/ItemBuilder.class b/target/classes/pt/henrique/communityMarket/util/ItemBuilder.class
deleted file mode 100644
index 37508ac..0000000
Binary files a/target/classes/pt/henrique/communityMarket/util/ItemBuilder.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/util/ItemSerializer.class b/target/classes/pt/henrique/communityMarket/util/ItemSerializer.class
deleted file mode 100644
index a03f75b..0000000
Binary files a/target/classes/pt/henrique/communityMarket/util/ItemSerializer.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/util/SoundUtil.class b/target/classes/pt/henrique/communityMarket/util/SoundUtil.class
deleted file mode 100644
index 3880429..0000000
Binary files a/target/classes/pt/henrique/communityMarket/util/SoundUtil.class and /dev/null differ
diff --git a/target/classes/pt/henrique/communityMarket/util/TextUtil.class b/target/classes/pt/henrique/communityMarket/util/TextUtil.class
deleted file mode 100644
index f88cdea..0000000
Binary files a/target/classes/pt/henrique/communityMarket/util/TextUtil.class and /dev/null differ
diff --git a/target/communitymarket-1.0.0.jar b/target/communitymarket-1.0.0.jar
deleted file mode 100644
index 03df477..0000000
Binary files a/target/communitymarket-1.0.0.jar and /dev/null differ
diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties
deleted file mode 100644
index dd5d5c3..0000000
--- a/target/maven-archiver/pom.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-artifactId=communitymarket
-groupId=pt.henrique
-version=1.0.0
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
deleted file mode 100644
index 395da8d..0000000
--- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
+++ /dev/null
@@ -1,67 +0,0 @@
-pt/henrique/communityMarket/economy/EconomyManager.class
-pt/henrique/communityMarket/util/TextUtil.class
-pt/henrique/communityMarket/config/MessageManager.class
-pt/henrique/communityMarket/model/PendingEarnings.class
-pt/henrique/communityMarket/gui/AdminGui$AdminListingsGui.class
-pt/henrique/communityMarket/model/Auction.class
-pt/henrique/communityMarket/listener/PlayerListener.class
-pt/henrique/communityMarket/economy/EconomyManager$EconomyAdapter.class
-pt/henrique/communityMarket/gui/MarketGui.class
-pt/henrique/communityMarket/service/AuctionService.class
-pt/henrique/communityMarket/util/ItemSerializer.class
-pt/henrique/communityMarket/service/EarningsService$WithdrawResult.class
-pt/henrique/communityMarket/gui/MainMenuGui.class
-pt/henrique/communityMarket/service/ListingService.class
-pt/henrique/communityMarket/gui/ConfirmationGui.class
-pt/henrique/communityMarket/gui/HelpGui.class
-pt/henrique/communityMarket/db/DatabaseManager.class
-pt/henrique/communityMarket/gui/QuantitySelectGui$QuantityCallback.class
-pt/henrique/communityMarket/service/TransactionService.class
-pt/henrique/communityMarket/task/AuctionTask.class
-pt/henrique/communityMarket/model/Bid.class
-pt/henrique/communityMarket/service/ClaimService.class
-pt/henrique/communityMarket/task/ExpiredListingTask.class
-pt/henrique/communityMarket/gui/NumberInputGui$NumberInputCallback.class
-pt/henrique/communityMarket/service/ClaimService$ClaimResult.class
-pt/henrique/communityMarket/gui/MyAuctionsGui.class
-pt/henrique/communityMarket/CommunityMarket.class
-pt/henrique/communityMarket/gui/ConfirmationGui$ConfirmCallback.class
-pt/henrique/communityMarket/model/ClaimItem$ClaimReason.class
-pt/henrique/communityMarket/gui/BrowseMarketGui.class
-pt/henrique/communityMarket/model/Auction$AuctionStatus.class
-pt/henrique/communityMarket/util/SoundUtil.class
-pt/henrique/communityMarket/gui/BrowseMarketGui$1.class
-pt/henrique/communityMarket/gui/CreateAuctionGui.class
-pt/henrique/communityMarket/gui/QuantitySelectGui.class
-pt/henrique/communityMarket/util/InventoryUtil.class
-pt/henrique/communityMarket/gui/AdminGui$AdminAuctionsGui.class
-pt/henrique/communityMarket/command/MarketCommand.class
-pt/henrique/communityMarket/listener/GuiListener$1.class
-pt/henrique/communityMarket/service/AuctionService$BidResult.class
-pt/henrique/communityMarket/gui/CreateListingGui.class
-pt/henrique/communityMarket/model/ClaimItem.class
-pt/henrique/communityMarket/gui/ClaimGui$1.class
-pt/henrique/communityMarket/util/ItemBuilder.class
-pt/henrique/communityMarket/gui/NumberInputGui.class
-pt/henrique/communityMarket/gui/AdminGui.class
-pt/henrique/communityMarket/gui/BrowseAuctionsGui.class
-pt/henrique/communityMarket/gui/ItemSelectionGui$SelectionMode.class
-pt/henrique/communityMarket/service/TransactionService$TransactionResult.class
-pt/henrique/communityMarket/service/EarningsService.class
-pt/henrique/communityMarket/service/TransactionService$ValidationResult.class
-pt/henrique/communityMarket/gui/BrowseAuctionsGui$1.class
-pt/henrique/communityMarket/model/Listing.class
-pt/henrique/communityMarket/service/AuctionService$CancelResult.class
-pt/henrique/communityMarket/gui/GuiManager.class
-pt/henrique/communityMarket/economy/EconomyManager$VaultAdapter.class
-pt/henrique/communityMarket/gui/ClaimGui.class
-pt/henrique/communityMarket/economy/EconomyManager$EssentialsAdapter.class
-pt/henrique/communityMarket/service/ListingService$PurchaseResult.class
-pt/henrique/communityMarket/gui/EarningsGui.class
-pt/henrique/communityMarket/config/ConfigManager.class
-pt/henrique/communityMarket/gui/MarketGui$GuiType.class
-pt/henrique/communityMarket/util/InventoryUtil$ItemCategory.class
-pt/henrique/communityMarket/gui/MyListingsGui.class
-pt/henrique/communityMarket/gui/ItemSelectionGui.class
-pt/henrique/communityMarket/model/Listing$ListingStatus.class
-pt/henrique/communityMarket/listener/GuiListener.class
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
deleted file mode 100644
index 4c3021e..0000000
--- a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
+++ /dev/null
@@ -1,42 +0,0 @@
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/CommunityMarket.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/command/MarketCommand.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/config/ConfigManager.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/config/MessageManager.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/db/DatabaseManager.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/economy/EconomyManager.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/gui/AdminGui.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/gui/BrowseAuctionsGui.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/gui/BrowseMarketGui.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/gui/ClaimGui.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/gui/ConfirmationGui.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/gui/CreateAuctionGui.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/gui/CreateListingGui.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/gui/EarningsGui.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/gui/GuiManager.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/gui/HelpGui.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/gui/ItemSelectionGui.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/gui/MainMenuGui.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/gui/MarketGui.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/gui/MyAuctionsGui.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/gui/MyListingsGui.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/gui/NumberInputGui.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/gui/QuantitySelectGui.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/listener/GuiListener.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/listener/PlayerListener.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/model/Auction.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/model/Bid.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/model/ClaimItem.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/model/Listing.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/model/PendingEarnings.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/service/AuctionService.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/service/ClaimService.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/service/EarningsService.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/service/ListingService.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/service/TransactionService.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/task/AuctionTask.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/task/ExpiredListingTask.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/util/InventoryUtil.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/util/ItemBuilder.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/util/ItemSerializer.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/util/SoundUtil.java
-/root/mc-plugins-audit/repos/communitymarket/src/main/java/pt/henrique/communityMarket/util/TextUtil.java
diff --git a/target/original-communitymarket-1.0.0.jar b/target/original-communitymarket-1.0.0.jar
deleted file mode 100644
index 03df477..0000000
Binary files a/target/original-communitymarket-1.0.0.jar and /dev/null differ