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 #2 from ReefRealm/bountysystem
Browse files Browse the repository at this point in the history
Add bounty system to SkyPVP module
  • Loading branch information
mathiasclari authored Dec 25, 2023
2 parents 4c1ceb5 + cf449e6 commit c81a0c1
Show file tree
Hide file tree
Showing 6 changed files with 214 additions and 9 deletions.
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.bounty.commands.BountyCommand;
import net.reefrealm.reefrealmskypvp.economy.command.CoinsCommand;
import net.reefrealm.reefrealmskypvp.launcher.LaunchpadSystem;
import net.reefrealm.reefrealmskypvp.manager.CommandManager;
Expand All @@ -17,6 +18,7 @@ public static void registerCommands(ReefRealmSkyPVP plugin) {
//registeredCommand(new LanguageCommand("language"), plugin);
registeredCommand(new SetSpawnCommand("setspawn"), plugin);
registeredCommand(new CoinsCommand("coins"), plugin);
registeredCommand(new BountyCommand("bounty"), plugin);
}


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
package net.reefrealm.reefrealmskypvp.bounty.commands;

import net.reefrealm.reefrealmskypvp.data.MySQL;
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.List;

public class BountyCommand extends CommandManager implements TabCompleter {
public BountyCommand(String commandName) {
super("bounty");
}

@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) {
// /bounty
int bounty = MySQL.getBounty(player.getUniqueId().toString());
player.sendMessage("You have a bounty of " + bounty + ".");
} else {
switch (args[0].toLowerCase()) {
case "remove":
if (args.length == 2) {
if (!player.hasPermission("reefrealmskypvp.bounty.remove")) {
player.sendMessage("You do not have permission to use this command.");
return;
}
// /bounty remove <player>
Player target = Bukkit.getPlayer(args[1]);
if (target == null) {
player.sendMessage("That player is not online.");
return;
}
if (!MySQL.checkifBountyExist(target.getUniqueId().toString())) {
player.sendMessage("That player does not have a bounty.");
return;
}
MySQL.removeBountyfromExistance(target.getUniqueId().toString());
player.sendMessage("Removed " + target.getName() + "'s bounty.");
} else {
player.sendMessage("Invalid command. Use /bounty, /bounty add <player> <value>, /bounty remove <player>, or /bounty set <player> <value>.");
}
break;
case "set":
if (args.length == 3) {
if (!player.hasPermission("reefrealmskypvp.bounty.set")) {
player.sendMessage("You do not have permission to use this command.");
return;
}
// /bounty 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;
}
if (MySQL.getCoins(player.getUniqueId().toString()) < value) {
player.sendMessage("You do not have enough coins to set that bounty.");
return;
}
if (MySQL.checkifBountyExist(target.getUniqueId().toString())) {
MySQL.setBounty(target.getUniqueId().toString(), value);
MySQL.removeCoins(player.getUniqueId().toString(), value);
player.sendMessage("Created " + target.getName() + "'s bounty to " + value + ".");
}
MySQL.createBounty(target.getUniqueId().toString(), value);
MySQL.removeCoins(player.getUniqueId().toString(), value);
player.sendMessage("Set " + target.getName() + "'s bounty to " + value + ".");
} else {
player.sendMessage("Invalid command. Use /bounty, /bounty add <player> <value>, /bounty remove <player>, or /bounty set <player> <value>.");
}
break;
default:
player.sendMessage("Invalid command. Use /bounty, /bounty add <player> <value>, /bounty remove <player>, or /bounty set <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 "/bounty ", suggest the subcommands
List<String> suggestions = new ArrayList<>();
if (sender.hasPermission("reefrealmskypvp.bounty.remove")) {
suggestions.add("remove");
}
if (sender.hasPermission("reefrealmskypvp.bounty.set")) {
suggestions.add("set");
}
return suggestions;
} else if (args.length == 2) {
// If the player has typed "/bounty <subcommand> ", suggest online player names
if ((args[0].equalsIgnoreCase("remove") && sender.hasPermission("reefrealmskypvp.bounty.remove")) ||
(args[0].equalsIgnoreCase("set") && sender.hasPermission("reefrealmskypvp.bounty.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;
}
}
71 changes: 71 additions & 0 deletions src/main/java/net/reefrealm/reefrealmskypvp/data/MySQL.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,18 @@ public static void createTables() {
"`coins` INT DEFAULT 0,\n"+
" PRIMARY KEY (`id`));";

String query2 = "CREATE TABLE IF NOT EXISTS `ReefRealm_SkyPVP_Bountys` (\n" +
" `id` INT NOT NULL AUTO_INCREMENT,\n" +
" `uuid` VARCHAR(36) NOT NULL,\n" +
" `bounty` INT DEFAULT 0,\n"+
" PRIMARY KEY (`id`));";

Statement stmt = null;
try {
stmt = connection.createStatement();
// executing the queries
stmt.executeUpdate(query1);
stmt.executeUpdate(query2);
} catch (SQLException e) {
e.printStackTrace();
} finally {
Expand Down Expand Up @@ -351,4 +358,68 @@ public static void removeCoins(String playerUUID, int amount) {
}
}

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

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

public static boolean checkifBountyExist(String playerUUID){
Connection connection = GetConnection();
String query = "SELECT * FROM ReefRealm_SkyPVP_Bountys WHERE uuid = ?";
if (!userExists(playerUUID)) {
return true;
}
return false;
}

public static void createBounty(String playerUUID, int amount) {
Connection connection = GetConnection();
if (getBounty(playerUUID) == 0) {
String query = "INSERT INTO ReefRealm_SkyPVP_Bountys (uuid, bounty) VALUES (?, ?)";
try (PreparedStatement statement = connection.prepareStatement(query)) {
statement.setString(1, playerUUID);
statement.setInt(2, amount);
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
} else {
setBounty(playerUUID, amount);
}
}

public static void removeBountyfromExistance(String playerUUID) {
Connection connection = GetConnection();
String query = "DELETE FROM ReefRealm_SkyPVP_Bountys WHERE uuid = ?";
try (PreparedStatement statement = connection.prepareStatement(query)) {
statement.setString(1, playerUUID);
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}

}

This file was deleted.

12 changes: 12 additions & 0 deletions src/main/java/net/reefrealm/reefrealmskypvp/stats/SkyPVPStats.java
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ public void onPlayerDeath(PlayerDeathEvent event) {
MySQL.incrementKills(killer.getUniqueId().toString());
MySQL.incrementKillStreak(killer.getUniqueId().toString());
MySQL.calculateKD(killer.getUniqueId().toString());
MySQL.addCoins(killer.getUniqueId().toString(), 50);
checkAndClaimBounty(player, killer);
Random random = new Random();
int randomInt = random.nextInt(150);
Component xpMessage = miniMessage.deserialize("<#6A6177>[<#2BCD7E>■<#6A6177>] <#6A6177>You received:<#0E98C1> "+ "<hover:show_text:'<#6A6177>Reward for killing <#C1260E>"+player.getName()+"'>"+randomInt+"xp<#6A6177>!");
Expand All @@ -85,4 +87,14 @@ public void onPlayerDeath(PlayerDeathEvent event) {
// Remove the player's UUID from the lastDamager map
lastDamager.remove(player.getUniqueId());
}


private void checkAndClaimBounty(Player killedPlayer, Player killer) {
String killedPlayerUUID = killedPlayer.getUniqueId().toString();
int bounty = MySQL.getBounty(killedPlayerUUID);
if (bounty > 0) {
MySQL.addCoins(killer.getUniqueId().toString(), bounty);
MySQL.removeBountyfromExistance(killedPlayerUUID);
}
}
}
2 changes: 2 additions & 0 deletions src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@ commands:
description: Sets the spawn point for the world
coins:
description: Shows your current coins
bounty:
description: Shows your current bounty

0 comments on commit c81a0c1

Please sign in to comment.