Skip to content
This repository has been archived by the owner on Jan 24, 2024. It is now read-only.

Commit

Permalink
Merge pull request #1 from ReefRealm/coinsystem
Browse files Browse the repository at this point in the history
Add coins system to SkyPVP module
  • Loading branch information
mathiasclari authored Dec 25, 2023
2 parents 2cbaf4d + 37e3fb2 commit 4c1ceb5
Show file tree
Hide file tree
Showing 7 changed files with 240 additions and 10 deletions.
4 changes: 4 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,10 @@
<id>placeholderapi</id>
<url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
</repository>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>

<dependencies>
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/net/reefrealm/reefrealmskypvp/Loader.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package net.reefrealm.reefrealmskypvp;

import net.reefrealm.reefrealmskypvp.economy.command.CoinsCommand;
import net.reefrealm.reefrealmskypvp.launcher.LaunchpadSystem;
import net.reefrealm.reefrealmskypvp.manager.CommandManager;
import net.reefrealm.reefrealmskypvp.placeholders.StatsPlaceholderExpansion;
Expand All @@ -15,6 +16,7 @@ public class Loader implements Listener {
public static void registerCommands(ReefRealmSkyPVP plugin) {
//registeredCommand(new LanguageCommand("language"), plugin);
registeredCommand(new SetSpawnCommand("setspawn"), plugin);
registeredCommand(new CoinsCommand("coins"), plugin);
}


Expand Down
51 changes: 51 additions & 0 deletions src/main/java/net/reefrealm/reefrealmskypvp/data/MySQL.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ public static void createTables() {
"`killstreak` INT DEFAULT 0,\n"+
"`score` INT DEFAULT 0,\n"+
"`level` INT DEFAULT 0,\n"+
"`coins` INT DEFAULT 0,\n"+
" PRIMARY KEY (`id`));";

Statement stmt = null;
Expand Down Expand Up @@ -300,4 +301,54 @@ public static void setLevel(String playerUUID, int level) {
}
}

public static void addCoins(String playerUUID, int amount){
Connection connection = GetConnection();
String query = "UPDATE ReefRealm_SkyPVP_Stats SET coins = coins + ? WHERE uuid = ?";
try (PreparedStatement statement = connection.prepareStatement(query)){
statement.setInt(1, amount);
statement.setString(2, playerUUID);
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}

public static void overrideCoinsAmount(String playerUUID, int amount){
Connection connection = GetConnection();
String query = "UPDATE ReefRealm_SkyPVP_Stats SET coins = ? WHERE uuid = ?";
try(PreparedStatement statement = connection.prepareStatement(query)){
statement.setInt(1, amount);
statement.setString(2, playerUUID);
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}


}

public static int getCoins(String playerUUID) {
Connection connection = GetConnection();
String query = "SELECT coins FROM ReefRealm_SkyPVP_Stats WHERE uuid = ?";
try (PreparedStatement statement = connection.prepareStatement(query)) {
statement.setString(1, playerUUID);
ResultSet resultSet = statement.executeQuery();
if (resultSet.next()) {
return resultSet.getInt("coins");
}
} catch (SQLException e) {
e.printStackTrace();
}
return 0;
}

public static void removeCoins(String playerUUID, int amount) {
int currentCoins = getCoins(playerUUID);
if (currentCoins >= amount) {
overrideCoinsAmount(playerUUID, currentCoins - amount);
} else {
overrideCoinsAmount(playerUUID, 0);
}
}

}
Original file line number Diff line number Diff line change
@@ -1,12 +1,24 @@
package net.reefrealm.reefrealmskypvp.economy;

public class CoinsSystem {

/*TODO
- Add coins command
- Add coins top command
- Add coins pay command
- Add coins give command
- Add coins take command
*/
}
import net.reefrealm.reefrealmskypvp.data.MySQL;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;

import java.util.UUID;

public class CoinsSystem{

public static void addCoins(Player player, int coins){
MySQL.addCoins(player.getUniqueId().toString(), coins);
}

public static void overWriteCoins(Player player, int coins){
MySQL.overrideCoinsAmount(player.getUniqueId().toString(), coins);
}

public static void removeCoins(Player player, int coins){
MySQL.removeCoins(player.getUniqueId().toString(), coins);
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
package net.reefrealm.reefrealmskypvp.economy.command;

import net.reefrealm.reefrealmskypvp.data.MySQL;
import net.reefrealm.reefrealmskypvp.economy.CoinsSystem;
import net.reefrealm.reefrealmskypvp.manager.CommandManager;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class CoinsCommand extends CommandManager implements TabCompleter {
public CoinsCommand(String commandName) {
super("coins");
}

@Override
public void execute(CommandSender sender, String[] args) {
if (!(sender instanceof Player)) {
sender.sendMessage("This command can only be run by a player.");
return;
}

Player player = (Player) sender;

if (args.length == 0) {
// /coins
int coins = MySQL.getCoins(player.getUniqueId().toString());
player.sendMessage("You have " + coins + " coins.");
} else {
switch (args[0].toLowerCase()) {
case "remove":
if (args.length == 3) {
if (!player.hasPermission("reefrealmskypvp.coins.remove")) {
player.sendMessage("You do not have permission to use this command.");
return;
}
// /coins remove <player> <value>
Player target = Bukkit.getPlayer(args[1]);
if (target == null) {
player.sendMessage("That player is not online.");
return;
}

int value;
try {
value = Integer.parseInt(args[2]);
} catch (NumberFormatException e) {
player.sendMessage("Invalid number.");
return;
}

CoinsSystem.removeCoins(target, value);
player.sendMessage("Removed " + value + " coins from " + target.getName() + ".");
} else {
player.sendMessage("Invalid usage. Use /coins remove <player> <value>.");
}
break;
case "set":
if (args.length == 3) {
if (!player.hasPermission("reefrealmskypvp.coins.set")) {
player.sendMessage("You do not have permission to use this command.");
return;
}
// /coins set <player> <value>
Player target = Bukkit.getPlayer(args[1]);
if (target == null) {
player.sendMessage("That player is not online.");
return;
}

int value;
try {
value = Integer.parseInt(args[2]);
} catch (NumberFormatException e) {
player.sendMessage("Invalid number.");
return;
}

CoinsSystem.overWriteCoins(target, value);
player.sendMessage("Set " + target.getName() + "'s coins to " + value + ".");
} else {
player.sendMessage("Invalid usage. Use /coins set <player> <value>.");
}
break;
case "add":
if (args.length == 3) {
if (!player.hasPermission("reefrealmskypvp.coins.add")) {
player.sendMessage("You do not have permission to use this command.");
return;
}
// /coins add <player> <value>
Player target = Bukkit.getPlayer(args[1]);
if (target == null) {
player.sendMessage("That player is not online.");
return;
}

int value;
try {
value = Integer.parseInt(args[2]);
} catch (NumberFormatException e) {
player.sendMessage("Invalid number.");
return;
}

CoinsSystem.addCoins(target, value);
player.sendMessage("Added " + value + " coins to " + target.getName() + ".");
} else {
player.sendMessage("Invalid usage. Use /coins add <player> <value>.");
}
break;
default:
player.sendMessage("Invalid command. Use /coins, /coins remove <player> <value>, /coins set <player> <value>, or /coins add <player> <value>.");
break;
}
}
}

@Override
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) {
if (args.length == 1) {
// If the player has only typed "/coins ", suggest the subcommands
List<String> suggestions = new ArrayList<>();
if (sender.hasPermission("reefrealmskypvp.coins.add")) {
suggestions.add("add");
}
if (sender.hasPermission("reefrealmskypvp.coins.remove")) {
suggestions.add("remove");
}
if (sender.hasPermission("reefrealmskypvp.coins.set")) {
suggestions.add("set");
}
return suggestions;
} else if (args.length == 2) {
// If the player has typed "/coins <subcommand> ", suggest online player names
if ((args[0].equalsIgnoreCase("add") && sender.hasPermission("reefrealmskypvp.coins.add")) ||
(args[0].equalsIgnoreCase("remove") && sender.hasPermission("reefrealmskypvp.coins.remove")) ||
(args[0].equalsIgnoreCase("set") && sender.hasPermission("reefrealmskypvp.coins.set"))) {
List<String> playerNames = new ArrayList<>();
for (Player player : Bukkit.getOnlinePlayers()) {
playerNames.add(player.getName());
}
return playerNames;
}
}
// If the player has typed anything else, don't suggest anything
return null;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ public String onPlaceholderRequest(Player player, String identifier) {
return String.format("%.1f%%", percentage);
case "killstreak":
return String.valueOf(MySQL.getKillStreak(player.getUniqueId().toString()));
case "coins":
return String.valueOf(MySQL.getCoins(player.getUniqueId().toString()));
default:
return null;
}
Expand Down
2 changes: 2 additions & 0 deletions src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,5 @@ api-version: '1.20'
commands:
setspawn:
description: Sets the spawn point for the world
coins:
description: Shows your current coins

0 comments on commit 4c1ceb5

Please sign in to comment.