deVaultEconomy icon

deVaultEconomy -----

A basic example that works with the deVaultify API to provide /pay /bal and etc.



This plugin requires your server to have my deVaultify plugin as well or it will not work.

As simple as it sounds, keeps track of players currency via deVaultify and allows commands to be used to check player balances, admin deposit into a players balance, pay other players. (the deVaultify plugin will store the player-balances in its plugin folder)

This is an example plugin created to show that deVaultify does work as is in its earliest stages. (deVaultify - not-a-vault API)

[​IMG]

Update: 0.0.2: (deVaultify 0.0.9) no change to the commands but a change to showcase deVaultify's latest features such as multi-currency and tracking via Event to have auto conversions, such as 100 Bronze instantly converting to 1 silver and 100 silver to 1 gold.

0.0.3: Active, in post source not updated to reflect it yet.
Now features a sellhand to make the economy part possible for real.
Setting and Deleting sell prices requires a restart to take effect (for now) even though there are in game commands (for admins/etc) to do such.

With 0.0.3 active players will be able to make money from their resources and the economy can start to be really used.

Next update: Likely a "/playershop" to sell items (the players sell them not the server it will list player shops to open) and "/auction" to allow players to sell items via bids.

commands
/pay <playername>
/bal or /balance
/deposit
/sellhand
/setsellprice <item/block> <price> <currencyType>
/deletesellprice <item/block>

permissions:
devault.balance
devault.pay
devault.deposit (admin command allows giving player currency directly)
devault.sellhand
devault.deletesellprice (admin command) [deletes the /sellhand value]
devault.setsellprice (admin command) [sets the /sellhandvalue]

This is a working example for if a plugin dev wants to use deVaultify, this is to show the API working/being used on a basic level.

Current Classes and code from update 0.0.2:
POM
Code (Text):
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.partakith</groupId>
  <artifactId>deVaultEconomy</artifactId>
  <version>0.0.2-SNAPSHOT</version>
  <name>deVaultEconomy</name>
  <packaging>jar</packaging>

  <repositories>
    <repository>
      <id>spigot-repo</id>
      <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
    </repository>
  <repository>
    <id>github</id>
    <url>https://maven.pkg.github.com/partakithware/devaultify</url>
  </repository>
  </repositories>

  <dependencies>
    <dependency>
      <groupId>org.spigotmc</groupId>
      <artifactId>spigot-api</artifactId>
      <version>1.21.4-R0.1-SNAPSHOT</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.github.partakithware</groupId>
        <artifactId>devaultify</artifactId>
        <version>0.0.8</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.10.1</version>
        <configuration>
          <source>17</source>
          <target>17</target>
        </configuration>
      </plugin>
    </plugins>
      <resources>
    <resource>
      <directory>src/main/resources</directory>
      <includes>
        <include>plugin.yml</include>
      </includes>
    </resource>
       <resource>
      <directory>src/</directory>
      <includes>
        <include>config.yml</include>
        <include>player-balance.yml</include>
      </includes>
    </resource>
  </resources>
  </build>
</project>
 
deVaultEconomy.java
Code (Text):
package com.partakith;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

import com.github.partakithware.deVaultAPI;
import com.github.partakithware.BalanceManager;


public class deVaultEconomy extends JavaPlugin {

    @Override
    public void onEnable() {
        getLogger().info("deVaultEconomy enabled.");

        // Register listeners for currency conversion
        getServer().getPluginManager().registerEvents(new BronzeToSilverListener(this), this);
        getServer().getPluginManager().registerEvents(new SilverToGoldListener(this), this);

        // Save balances every 5 minutes (6000 ticks)
        getServer().getScheduler().runTaskTimer(this, () -> {
            BalanceManager.saveBalances();
            getLogger().info("Auto-saved player balances.");
        }, 6000L, 6000L);
    }

    @Override
    public void onDisable() {
        getLogger().info("deVaultEconomy disabled.");
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        String cmd = command.getName().toLowerCase();

        if (cmd.equals("bal") || cmd.equals("balance")) {
            if (!(sender instanceof Player)) {
                sender.sendMessage("This command is for players only.");
                return true;
            }
            Player player = (Player) sender;
            if (!player.hasPermission("devault.balance")) {
                player.sendMessage("§cYou do not have permission to view your balance.");
                return true;
            }
            double gold = deVaultAPI.getBalance(player, "gold");
            double silver = deVaultAPI.getBalance(player, "silver");
            double bronze = deVaultAPI.getBalance(player, "bronze");
            sender.sendMessage("§a--- Your Balances ---");
            sender.sendMessage("§6Gold: §e" + gold);
            sender.sendMessage("§6Silver: §e" + silver);
            sender.sendMessage("§6Bronze: §e" + bronze);
            sender.sendMessage("§a----------------------");
            return true;
        }

        if (cmd.equals("pay")) {
            if (!(sender instanceof Player)) {
                sender.sendMessage("This command is for players only.");
                return true;
            }
            Player senderPlayer = (Player) sender;
            if (!senderPlayer.hasPermission("devault.pay")) {
                senderPlayer.sendMessage("§cYou do not have permission to use /pay.");
                return true;
            }
            if (args.length != 3) {
                senderPlayer.sendMessage("§cUsage: /pay <player> <amount> <currency>");
                return true;
            }

            Player target = Bukkit.getPlayerExact(args[0]);
            if (target == null || !target.isOnline()) {
                senderPlayer.sendMessage("§cPlayer not found.");
                return true;
            }

            if (target.equals(senderPlayer)) {
                senderPlayer.sendMessage("§cYou can't pay yourself.");
                return true;
            }

            double amount;
            try {
                amount = Double.parseDouble(args[1]);
                if (amount <= 0) throw new NumberFormatException();
            } catch (NumberFormatException e) {
                senderPlayer.sendMessage("§cPlease enter a valid positive amount.");
                return true;
            }

            String currency = args[2].toLowerCase();

            if (!deVaultAPI.withdraw(senderPlayer, amount, currency)) {
                senderPlayer.sendMessage("§cYou do not have enough " + currency + ".");
                return true;
            }

            deVaultAPI.deposit(target, amount, currency);
            senderPlayer.sendMessage("§aYou paid §6" + target.getName() + " §a" + amount + " " + currency);
            target.sendMessage("§aYou received §6" + amount + " " + currency + " §afrom §e" + senderPlayer.getName());

            return true;
        }

        if (cmd.equals("deposit")) {
            if (!sender.hasPermission("devault.deposit")) {
                sender.sendMessage("§cYou do not have permission to use /deposit.");
                return true;
            }

            if (args.length != 3) {
                sender.sendMessage("§cUsage: /deposit <player> <amount> <currency>");
                return true;
            }

            Player target = Bukkit.getPlayerExact(args[0]);
            if (target == null || !target.isOnline()) {
                sender.sendMessage("§cPlayer not found.");
                return true;
            }

            double amount;
            try {
                amount = Double.parseDouble(args[1]);
                if (amount <= 0) throw new NumberFormatException();
            } catch (NumberFormatException e) {
                sender.sendMessage("§cPlease enter a valid positive amount.");
                return true;
            }

            String currency = args[2].toLowerCase();

            deVaultAPI.deposit(target, amount, currency);
            sender.sendMessage("§aDeposited §6" + amount + " " + currency + " §ato §e" + target.getName());
            target.sendMessage("§aYou received §6" + amount + " " + currency + " §afrom admin.");
            return true;
        }

        return false;
    }
}
BronzeToSilverListener.java
Code (Text):
package com.partakith;

import com.github.partakithware.deVaultAPI;
import com.github.partakithware.PlayerDepositEvent;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.HashMap;
import java.util.UUID;

public class BronzeToSilverListener implements Listener {

    private final JavaPlugin plugin;

    public BronzeToSilverListener(JavaPlugin plugin) {
        this.plugin = plugin;
    }

    @EventHandler
    public void onBronzeDeposit(PlayerDepositEvent event) {
        if (event.getCurrency().equalsIgnoreCase("bronze") && event.getNewBalance() >= 100) {
            Player player = event.getPlayer();
            double bronzeBalance = event.getNewBalance();
            int silverToGive = (int) (bronzeBalance / 100);
            double bronzeToRemove = silverToGive * 100;

            if (silverToGive > 0) {
                UUID playerUUID = player.getUniqueId();
                    deVaultAPI.withdraw(player, bronzeToRemove, "bronze");

                    deVaultAPI.deposit(player, silverToGive, "silver");


                    plugin.getLogger().info("Converted " + bronzeToRemove + " bronze into " + silverToGive + " silver for " + player.getName());
                    player.sendMessage("§aConverted §6" + bronzeToRemove + " §abronze into §6" + silverToGive + " §asilver.");
                } else {
                    plugin.getLogger().warning("Could not remove bronze from " + player.getName() + " to convert to silver.");
                    player.sendMessage("§cCould not convert bronze to silver. Insufficient bronze.");
                }
            }
        }
    }
SilverToGoldListener.java
Code (Text):
package com.partakith;

import com.github.partakithware.deVaultAPI;
import com.github.partakithware.PlayerDepositEvent;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.HashMap;
import java.util.UUID;

public class SilverToGoldListener implements Listener {

    private final JavaPlugin plugin;

    public SilverToGoldListener(JavaPlugin plugin) {
        this.plugin = plugin;
    }

    @EventHandler
    public void onSilverDeposit(PlayerDepositEvent event) {
        if (event.getCurrency().equalsIgnoreCase("silver") && event.getNewBalance() >= 100) {
            Player player = event.getPlayer();
            double silverBalance = event.getNewBalance();
            int goldToGive = (int) (silverBalance / 100);
            double silverToRemove = goldToGive * 100;

            if (goldToGive > 0) {
                UUID playerUUID = player.getUniqueId();
                deVaultAPI.withdraw(player, silverToRemove, "silver");
 
                    deVaultAPI.deposit(player, goldToGive, "gold");
 
                    plugin.getLogger().info("Converted " + silverToRemove + " silver into " + goldToGive + " gold for " + player.getName());
                    player.sendMessage("§aConverted §6" + silverToRemove + " §asilver into §6" + goldToGive + " §agold.");
                } else {
                    plugin.getLogger().warning("Could not remove silver from " + player.getName() + " to convert to gold.");
                    player.sendMessage("§cCould not convert silver to gold. Insufficient silver.");
                }
            }
        }
    }

This is updated to showcase new features as deVaultify gets updated.

If you would like to test it out and want to quickly get deVaultify, you can click the link via the box on the right-hand side of this page to see more plugins created by me.

With future updates I will create a way to edit messages via the config.yml and other settings too, until it slowly has more desired features!
Resource Information
Author:
----------
Total Downloads: 31
First Release: May 5, 2025
Last Update: May 9, 2025
Category: ---------------
All-Time Rating:
0 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings