Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions .github/workflows/maven.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,15 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: '17'
java-version: '21'
distribution: 'temurin'
cache: maven
- run: mvn clean install
- run: mvn clean install -U
- run: mkdir artifact && cp target/*.jar artifact
- uses: actions/upload-artifact@v3
- uses: actions/upload-artifact@v4
with:
name: Package
path: artifact
33 changes: 25 additions & 8 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>com.wasteofplastic</groupId>
<artifactId>mwmoney</artifactId>
<version>3.1</version>
<version>3.2</version>

<name>MultiWorldMoney</name>
<description>MultiWorldMoney is a plugin that enables money to be kept separately across worlds</description>
Expand All @@ -26,7 +26,7 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>17</java.version>
<java.version>21</java.version>
<powermock.version>1.7.4</powermock.version>
</properties>

Expand All @@ -45,12 +45,29 @@
</repository>
</repositories>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.github.multiversecore</groupId>
<artifactId>multiverse-core</artifactId>
<version>9999.0.0-IGNORED</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<!-- Spigot API -->
<dependency>
<groupId>io.papermc.paper</groupId>
<artifactId>paper-api</artifactId>
<version>1.20.2-R0.1-SNAPSHOT</version>
<version>1.21.8-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<!-- Vault -->
Expand All @@ -62,9 +79,9 @@
</dependency>
<!-- Multiverse -->
<dependency>
<groupId>com.github.multiversecore</groupId>
<groupId>org.mvplugins.multiverse.core</groupId>
<artifactId>multiverse-core</artifactId>
<version>4.3.12</version>
<version>5.1.2</version>
<scope>provided</scope>
<exclusions>
<exclusion>
Expand Down Expand Up @@ -121,7 +138,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>3.3.1</version>
<version>3.3.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
Expand All @@ -131,15 +148,15 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<version>3.12.1</version>
<configuration>
<release>17</release>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.1.2</version>
<version>3.2.5</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
Expand Down
249 changes: 56 additions & 193 deletions src/main/java/com/wasteofplastic/multiworldmoney/AdminCommands.java
Original file line number Diff line number Diff line change
@@ -1,219 +1,82 @@
package com.wasteofplastic.multiworldmoney;

import java.util.List;
import java.util.UUID;

import net.milkbowl.vault.economy.Economy;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.mvplugins.multiverse.core.MultiverseCoreApi;
import org.mvplugins.multiverse.core.world.MultiverseWorld;

import com.onarandombox.MultiverseCore.api.MultiverseWorld;

import net.milkbowl.vault.economy.EconomyResponse;

class AdminCommands implements CommandExecutor {
import java.util.UUID;

public class AdminCommands implements CommandExecutor {
private final MultiWorldMoney plugin;

/**
* @param plugin - plugin
*/
public AdminCommands(MultiWorldMoney plugin) {
this.plugin = plugin;
}

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender instanceof Player) {
// Check permission
if (plugin.getVh().checkPerm((Player) sender, "mwm.admin")) {
sender.sendMessage(ChatColor.RED + Lang.error + " " + ChatColor.DARK_RED + Lang.noPermission);
return true;
}
if (!sender.hasPermission("mwm.admin")) {
sender.sendMessage(ChatColor.RED + "You don't have permission to use this command.");
return true;
}
switch (args.length) {
case 1:
if (args[0].equalsIgnoreCase("reload")) {
plugin.reloadConfig();
plugin.loadGroups();
plugin.reloadLocale();
sender.sendMessage(ChatColor.GREEN + Lang.reloaded);
return true;
} else {
printHelp(sender);
return true;
}
case 4:
// Check player name
UUID targetUUID = plugin.getPlayers().getUUID(args[1]);
Player target= plugin.getServer().getPlayer(targetUUID);
if (targetUUID == null || target == null) {
sender.sendMessage(ChatColor.RED + Lang.error + " " + ChatColor.DARK_RED + Lang.noPlayer);
return true;
}
// Check amount
double amount;
try {
amount = Double.valueOf(args[2]);
} catch (Exception e) {
sender.sendMessage(ChatColor.RED + Lang.error + " " + ChatColor.DARK_RED + Lang.unknownAmount);
return true;
}
// Round down to 2 dp's
amount = plugin.roundDown(amount, 2);
// Check world
World world = plugin.getServer().getWorld(args[3]);
if (world == null) {
// Try MV
if (plugin.getCore() != null) {
MultiverseWorld mvWorld = plugin.getCore().getMVWorldManager().getMVWorld(args[3]);
if (mvWorld == null) {
sender.sendMessage(ChatColor.RED + Lang.error + " " + ChatColor.DARK_RED + Lang.unknownWorld);
return true;
} else {
// Found
world = mvWorld.getCBWorld();
}
} else {
// No luck
sender.sendMessage(ChatColor.RED + Lang.error + " " + ChatColor.DARK_RED + Lang.unknownWorld);
return true;
}
}
// Get group worlds
List<World> groupWorlds = plugin.getGroupWorlds(world);
if (args[0].equalsIgnoreCase("set")) {
if (groupWorlds.contains(target.getWorld())) {
// Set
double oldBalance = plugin.roundDown(plugin.getVh().getEcon().getBalance(target), 2);
if (oldBalance > amount) {
EconomyResponse er = plugin.getVh().getEcon().withdrawPlayer(target, oldBalance - amount);
if (!er.transactionSuccess()) {
// Cannot set
sender.sendMessage(ChatColor.RED + Lang.error + " " + ChatColor.DARK_RED + er.errorMessage);
return true;
}
} else if (oldBalance < amount) {
EconomyResponse er = plugin.getVh().getEcon().depositPlayer(target, amount - oldBalance);
if (!er.transactionSuccess()) {
// Cannot set
sender.sendMessage(ChatColor.RED + Lang.error + " " + ChatColor.DARK_RED + er.errorMessage);
return true;
}
}
} else {
if (amount < 0D) {
// It will - see if loans are allowed
double balance = plugin.getVh().getEcon().getBalance(target) - amount;
// Try to withdraw an amount and see what happens
EconomyResponse er = plugin.getVh().getEcon().withdrawPlayer(target, balance);
if (er.transactionSuccess()) {
// Put it back
plugin.getVh().getEcon().depositPlayer(target, balance);
} else {
sender.sendMessage(ChatColor.RED + Lang.error + " " + ChatColor.DARK_RED + er.errorMessage);
return true;
}
}
plugin.getPlayers().setBalance(target, world, amount);
}
if (!sender.equals(target)) {
sender.sendMessage(ChatColor.GREEN + ((Lang.setBalanceTo
.replace("[name]", target.getName()))
.replace("[amount]", plugin.getVh().getEcon().format(amount)))
.replace("[world]", plugin.getWorldName(world)));
}
target.sendMessage(ChatColor.GREEN + (Lang.yourBalanceSetTo
.replace("[amount]", plugin.getVh().getEcon().format(amount)))
.replace("[world]", plugin.getWorldName(world)));
return true;
} else if (args[0].equalsIgnoreCase("take")) {
if (amount < 0D) {
sender.sendMessage(ChatColor.RED + Lang.error + " " + ChatColor.DARK_RED + Lang.amountPositive);
return true;
}
if (groupWorlds.contains(target.getWorld())) {
// Same group - let the economy handle any loan issues
EconomyResponse er = plugin.getVh().getEcon().withdrawPlayer(target, amount);
if (!er.transactionSuccess()) {
// Cannot set
sender.sendMessage(ChatColor.RED + Lang.error + " " + ChatColor.DARK_RED + er.errorMessage);
return true;
}
} else {
// Not in the same group
// Check to see if loans are allowed
// Check to see if this will result in a negative balance
if (amount > plugin.getPlayers().getBalance(target, world)) {
// It will - see if loans are allowed
double balance = plugin.getVh().getEcon().getBalance(target) + amount - plugin.getPlayers().getBalance(target, world);
// Try to withdraw an amount and see what happens
EconomyResponse er = plugin.getVh().getEcon().withdrawPlayer(target, balance);
if (er.transactionSuccess()) {
// Put it back
plugin.getVh().getEcon().depositPlayer(target, balance);
} else {
sender.sendMessage(ChatColor.RED + Lang.error + " " + ChatColor.DARK_RED + er.errorMessage);
return true;
}
}
plugin.getPlayers().withdraw(target, world, amount);
}
if (!sender.equals(target)) {
sender.sendMessage(ChatColor.GREEN + ((Lang.withdrew
.replace("[name]", target.getName()))
.replace("[amount]", plugin.getVh().getEcon().format(amount)))
.replace("[world]", plugin.getWorldName(world)));
}
target.sendMessage(ChatColor.GREEN + (Lang.reduceBalance
.replace("[amount]", plugin.getVh().getEcon().format(amount)))
.replace("[world]", plugin.getWorldName(world)));
return true;
} else if (args[0].equalsIgnoreCase("give")) {
if (amount < 0D) {
sender.sendMessage(ChatColor.RED + Lang.error + " " + ChatColor.DARK_RED + Lang.amountPositive);
return true;
}
// Check which world the player is in
if (groupWorlds.contains(target.getWorld())) {
EconomyResponse er = plugin.getVh().getEcon().depositPlayer(target, amount);
if (!er.transactionSuccess()) {
// Cannot set
sender.sendMessage(ChatColor.RED + Lang.error + " " + ChatColor.DARK_RED + er.errorMessage);
return true;
}
} else {
plugin.getPlayers().deposit(target, world, amount);
}
if (!sender.equals(target)) {
sender.sendMessage(ChatColor.GREEN + ((Lang.deposited
.replace("[name]", target.getName()))
.replace("[amount]", plugin.getVh().getEcon().format(amount)))
.replace("[world]", plugin.getWorldName(world)));
}
target.sendMessage(ChatColor.GREEN + (Lang.increasedBalance
.replace("[amount]", plugin.getVh().getEcon().format(amount)))
.replace("[world]", plugin.getWorldName(world)));
return true;
}
return false;
default:
// Print help
printHelp(sender);

if (args.length < 3) {
sender.sendMessage(ChatColor.RED + "Usage: /mvm <give|take|set> <player> <amount>");
return true;
}
}

private void printHelp(CommandSender sender) {
sender.sendMessage("/mwm reload - " + Lang.reloadHelp);
sender.sendMessage("/mwm set " + Lang.playerHelp + " " + Lang.balanceHelp + " " + Lang.worldHelp + " - " + Lang.setHelp);
sender.sendMessage("/mwm take " + Lang.playerHelp + " " + Lang.amountHelp + " " + Lang.worldHelp + " - " + Lang.takeHelp);
sender.sendMessage("/mwm give " + Lang.playerHelp + " " + Lang.balanceHelp + " " + Lang.worldHelp + " - " + Lang.giveHelp);
}
String action = args[0].toLowerCase();
Player target = Bukkit.getPlayer(args[1]);
double amount;

try {
amount = Double.parseDouble(args[2]);
} catch (NumberFormatException e) {
sender.sendMessage(ChatColor.RED + "Invalid amount: " + args[2]);
return true;
}

// Round amount
amount = plugin.roundToTwoDecimals(amount);

if (target == null) {
sender.sendMessage(ChatColor.RED + "Player not found: " + args[1]);
return true;
}

UUID uuid = target.getUniqueId();
World world = target.getWorld();

switch (action) {
case "give":
plugin.getVh().deposit(uuid, world, amount);
sender.sendMessage(ChatColor.GREEN + "Gave $" + amount + " to " + target.getName());
break;
case "take":
double currentBalance = plugin.getVh().getBalance(uuid, world);
if (currentBalance < amount) {
sender.sendMessage(ChatColor.RED + target.getName() + " does not have enough money.");
return true;
}
plugin.getVh().withdraw(uuid, world, amount);
sender.sendMessage(ChatColor.GREEN + "Took $" + amount + " from " + target.getName());
break;
case "set":
plugin.getVh().set(uuid, world, amount);
sender.sendMessage(ChatColor.GREEN + "Set " + target.getName() + "'s balance to $" + amount);
break;
default:
sender.sendMessage(ChatColor.RED + "Unknown action: " + action);
break;
}

return true;
}
}
Loading
Loading