diff --git a/.gitignore b/.gitignore index 9ede845..4c59a71 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ build/ out/ .idea/ libs/ +run/ \ No newline at end of file diff --git a/README.md b/README.md index 23e865b..0af72de 100644 --- a/README.md +++ b/README.md @@ -3,32 +3,35 @@ image

-ItemEconomy II is a fork of [ItemEconomy](https://modrinth.com/plugin/itemeconomy), keeping it updated to later versions of Minecraft and adding new features. +**ItemEconomy II** is a fork of [ItemEconomy](https://modrinth.com/plugin/itemeconomy), keeping it updated to later versions of Minecraft and adding new features. This PaperMC plugin integrates with VaultUnlocked to provide a unique, item-based economy system for your Minecraft server. Instead of relying solely on virtual balances, players use in-game items as physical currency, adding a layer of immersion and realism to your economy. -Features: -- **Item-Based Currency:** Set any Minecraft item as your server's currency (default: diamonds). +ItemEconomy is as powerful as you need and as simple as you want, with every feature being optional. + +## Features +- **Item-Based Currency:** Set any Minecraft item as your server's currency (diamonds by default). - **VaultUnlocked Integration:** Fully compatible with VaultUnlocked, enabling seamless interaction with other economy-based plugins. - **Simple logic:** Just checks if the user has the item/how many when queried. - **Customizable Formatting:** Define how your currency is displayed, including singular and plural forms. - **Ender Chest support:** Items on Ender Chests are counted in the user balance. - **Built-int optional balance and pay commands** with support for permissions. +- **Translation support** with per-user language and per-language currency name. -## Configuration Example: -```yaml -item: diamond # Define the item to be used as currency. -singular: diamond # Singular form of the currency. -plural: diamonds # Plural form of the currency. -format: "{} $" # {} will be replaced with the amount and $ either with singular or plural -ender_chest: balance # Either none or balance -commands: true # Disabling this will disable /balance and /pay -``` - -This configuration will use diamonds as the currency, displayed as {amount} {name}, e.g., "5 diamonds" or "1 diamond". - -## Usage: +## Configuration +An updated example configuration file is available [here](https://github.com/adrianvic/ItemEconomy/blob/main/src/main/resources/config.yml). +## Usage - Players can earn, trade, and store the configured item as physical currency. -- Integrates seamlessly with Vault-compatible plugins for shops, auctions, and more. +- Once they spend the currency, that amount of the item will be subtracted from their inventory. - Administrators can customize the item and formatting to match their server's theme. + +## Commands +
+
/balance
+
Prints player balance, permission is `iteco.balance` but is allowed by default. Requires permission `iteco.balance.others` to specify other user.
+
/pay
+
Transfers money from your account to another player's, permission is `iteco.pay` but is allowed by default.
+
/itecoreload
+
Reloads the plugin configuration, requires permission `iteco.reload`.
+
diff --git a/build.gradle.kts b/build.gradle.kts index bbc19a2..35e0edf 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -106,4 +106,4 @@ tasks.withType { tasks.runServer { minecraftVersion("1.21") -} +} \ No newline at end of file diff --git a/src/main/java/io/github/adrianvic/itemeconomy/Main.java b/src/main/java/io/github/adrianvic/itemeconomy/Main.java index bb524d2..3b999ee 100644 --- a/src/main/java/io/github/adrianvic/itemeconomy/Main.java +++ b/src/main/java/io/github/adrianvic/itemeconomy/Main.java @@ -122,12 +122,24 @@ public class Main extends JavaPlugin { } public static void addItems(Player player, Material type, int amount) { - HashMap invOverflow = getInventory(player, InventoryID.INVENTORY).addItem(new ItemStack(type, amount)); - HashMap echestOverflow = getInventory(player, InventoryID.ENDER_CHEST).addItem(new ItemStack(type, invOverflow.values() + if (amount <= 0) return; + + HashMap invOverflow = + getInventory(player, InventoryID.INVENTORY) + .addItem(new ItemStack(type, amount)); + + int overflowAmount = invOverflow.values() .stream() .mapToInt(ItemStack::getAmount) - .sum())); + .sum(); + if (overflowAmount <= 0) { + return; + } + + HashMap echestOverflow = + getInventory(player, InventoryID.ENDER_CHEST) + .addItem(new ItemStack(type, overflowAmount)); for (ItemStack overflow : echestOverflow.values()) { player.getWorld().dropItemNaturally(player.getLocation(), overflow); diff --git a/src/main/java/io/github/adrianvic/itemeconomy/Messages.java b/src/main/java/io/github/adrianvic/itemeconomy/Messages.java index d9ee83c..33102ce 100644 --- a/src/main/java/io/github/adrianvic/itemeconomy/Messages.java +++ b/src/main/java/io/github/adrianvic/itemeconomy/Messages.java @@ -17,7 +17,11 @@ public enum Messages { PAY_COULD_NOT_REALIZE_TRANSACTION("pay-could-not-realize-transaction"), PAY_COULD_NOT_FIND_TARGET("pay-could-not-find-target"), PAY_NOT_ENOUGH_MONEY("pay-not-enough-money"), - PAY_INVALID_AMOUNT("pay-invalid-amount"); + PAY_INVALID_AMOUNT("pay-invalid-amount"), + RELOADING("reloading"), + RELOAD_ERROR("reload-error"), + RELOAD_FINISHED("reload-finished"); + private final String path; Messages(String path) { this.path = path; } diff --git a/src/main/java/io/github/adrianvic/itemeconomy/commands/Reload.java b/src/main/java/io/github/adrianvic/itemeconomy/commands/Reload.java index 804e6ed..b0d8514 100644 --- a/src/main/java/io/github/adrianvic/itemeconomy/commands/Reload.java +++ b/src/main/java/io/github/adrianvic/itemeconomy/commands/Reload.java @@ -2,20 +2,28 @@ package io.github.adrianvic.itemeconomy.commands; import io.github.adrianvic.itemeconomy.Config; import io.github.adrianvic.itemeconomy.Main; +import io.github.adrianvic.itemeconomy.Messages; import io.github.adrianvic.itemeconomy.UnrealConfig; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.NotNull; +import java.util.Locale; + public class Reload implements CommandExecutor { @Override public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String @NotNull [] strings) { + Locale locale = Utils.localeOrDefault(commandSender); try { + commandSender.sendMessage("[ECONOMY] %s".formatted(Messages.RELOADING.get(locale))); Config.loadConfig(new UnrealConfig(Main.getInstance(), Main.getInstance().getDataFolder(), "config.yml")); + commandSender.sendMessage("[ECONOMY] %s".formatted(Messages.RELOAD_FINISHED.get(locale))); return true; } catch (Exception e) { + commandSender.sendMessage("[ECONOMY] %s".formatted(Messages.RELOAD_ERROR.get(locale))); + e.printStackTrace(); return false; } } diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index 8dde12e..77e17f5 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -7,4 +7,7 @@ pay-received=pay-received pay-could-not-realize-transaction=pay-could-not-realize-transaction pay-could-not-find-target=pay-could-not-find-target pay-not-enough-money=pay-not-enough-money -pay-invalid-amount=pay-invalid-amount \ No newline at end of file +pay-invalid-amount=pay-invalid-amount +reloading=reloading +reload-error=reload-error +reload-finished=reload-finished \ No newline at end of file diff --git a/src/main/resources/messages_en.properties b/src/main/resources/messages_en.properties index 06b8422..95f9873 100644 --- a/src/main/resources/messages_en.properties +++ b/src/main/resources/messages_en.properties @@ -7,4 +7,7 @@ pay-received=You received %s from %s. pay-could-not-realize-transaction=Could not realize transaction: %s pay-could-not-find-target=Could not find target player. pay-not-enough-money=You don't have enough money. -pay-invalid-amount=The amount you tried to pay is not valid. \ No newline at end of file +pay-invalid-amount=The amount you tried to pay is not valid. +reloading=Reloading... +reload-error=An error occurred while reloading the config, please check your logs. +reload-finished=Reload complete. \ No newline at end of file diff --git a/src/main/resources/messages_pt.properties b/src/main/resources/messages_pt.properties index 8b624b1..e11dc4c 100644 --- a/src/main/resources/messages_pt.properties +++ b/src/main/resources/messages_pt.properties @@ -7,4 +7,7 @@ pay-received=Voc pay-could-not-realize-transaction=Não foi possível realizar a transação: %s pay-could-not-find-target=Não foi possível encontrar o jogador-alvo. pay-not-enough-money=Você não tem dinheiro suficiente. -pay-invalid-amount=A quantidade que você tentou enviar é inválida. \ No newline at end of file +pay-invalid-amount=A quantidade que você tentou enviar é inválida. +reloading=Recarregando... +reload-error=Ocorreu um erro ao recarregar, por favor, verifique seu registro. +reload-finished=Carregamento completo. \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index e78d2d1..75cefe8 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ name: ItemEconomy main: io.github.adrianvic.itemeconomy.Main -version: 1.2 +version: 1.3.1 depend: [Vault] api-version: '1.21' commands: