summaryrefslogtreecommitdiff
path: root/src/main/java/net/uomc/mineshaft/resources/commands
diff options
context:
space:
mode:
authordavidovski <david@davidovski.xyz>2025-10-11 04:55:51 +0100
committerdavidovski <david@davidovski.xyz>2025-10-11 04:55:51 +0100
commit10b327e9f6441a8863227ce3e075a5a587654065 (patch)
tree5e94ecc91290febacf5181d3596563a7a24bd010 /src/main/java/net/uomc/mineshaft/resources/commands
v0.3.1
Diffstat (limited to 'src/main/java/net/uomc/mineshaft/resources/commands')
-rw-r--r--src/main/java/net/uomc/mineshaft/resources/commands/CreateResourceCommand.java44
-rw-r--r--src/main/java/net/uomc/mineshaft/resources/commands/GiveResourcesCommand.java85
-rw-r--r--src/main/java/net/uomc/mineshaft/resources/commands/LeaderBoardCommand.java50
-rw-r--r--src/main/java/net/uomc/mineshaft/resources/commands/ListResourcesCommand.java31
-rw-r--r--src/main/java/net/uomc/mineshaft/resources/commands/MyResourcesCommand.java53
-rw-r--r--src/main/java/net/uomc/mineshaft/resources/commands/RemoveResourceCommand.java46
-rw-r--r--src/main/java/net/uomc/mineshaft/resources/commands/ResourceCommand.java17
-rw-r--r--src/main/java/net/uomc/mineshaft/resources/commands/SetPrimaryResourceCommand.java47
-rw-r--r--src/main/java/net/uomc/mineshaft/resources/commands/ValuesCommand.java45
9 files changed, 418 insertions, 0 deletions
diff --git a/src/main/java/net/uomc/mineshaft/resources/commands/CreateResourceCommand.java b/src/main/java/net/uomc/mineshaft/resources/commands/CreateResourceCommand.java
new file mode 100644
index 0000000..a9f0dc6
--- /dev/null
+++ b/src/main/java/net/uomc/mineshaft/resources/commands/CreateResourceCommand.java
@@ -0,0 +1,44 @@
+package net.uomc.mineshaft.resources.commands;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.mouldycheerio.dbot.CustomBot;
+import com.mouldycheerio.dbot.commands.CommandDetails;
+import com.mouldycheerio.dbot.util.PeelingUtils;
+
+import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
+import net.uomc.mineshaft.resources.Resource;
+import net.uomc.mineshaft.resources.ResourceManager;
+
+public class CreateResourceCommand extends ResourceCommand {
+ private List<String> questions;
+
+ public CreateResourceCommand(ResourceManager resourceManager) {
+ super(resourceManager);
+ setCommandDetails(CommandDetails.hidden("createItem"));
+
+ questions = new ArrayList<String>();
+ questions.add("What is the name of this item?");
+ questions.add("What is the symbol for this item?");
+ }
+
+ @Override
+ public void execute(MessageReceivedEvent e, CustomBot op, String[] args) {
+ String ownerid = op.getConfig().getString("ownerid");
+ if (ownerid.equals(e.getAuthor().getId())) {
+ PeelingUtils.askQuestions(e, questions, (responses) -> {
+ String name = responses.get(0);
+ String symbol = responses.get(1);
+
+ Resource resource = new Resource(name, symbol, 1, getResourceManager());
+ getResourceManager().addResource(resource);
+
+ op.sendMessage(e, "Items", ":white_check_mark: added **" + name + "** to the list of items");
+ });
+ } else {
+ op.sendErrorMessage(e, ":x: this command is not intended for you");
+ }
+ }
+
+}
diff --git a/src/main/java/net/uomc/mineshaft/resources/commands/GiveResourcesCommand.java b/src/main/java/net/uomc/mineshaft/resources/commands/GiveResourcesCommand.java
new file mode 100644
index 0000000..a98a452
--- /dev/null
+++ b/src/main/java/net/uomc/mineshaft/resources/commands/GiveResourcesCommand.java
@@ -0,0 +1,85 @@
+package net.uomc.mineshaft.resources.commands;
+
+import static java.lang.Math.abs;
+
+import java.util.Optional;
+
+import com.mouldycheerio.dbot.CustomBot;
+import com.mouldycheerio.dbot.commands.CommandDetails;
+import com.mouldycheerio.dbot.util.PeelingUtils;
+
+import net.dv8tion.jda.api.entities.Member;
+import net.dv8tion.jda.api.entities.User;
+import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
+import net.uomc.mineshaft.resources.Resource;
+import net.uomc.mineshaft.resources.ResourceManager;
+
+public class GiveResourcesCommand extends ResourceCommand {
+
+ private String usage;
+
+ public GiveResourcesCommand(ResourceManager resourceManager) {
+ super(resourceManager);
+ setCommandDetails(CommandDetails.from("give,trade", "Give a user an item", "give [@user] [quantity] [item]"));
+ usage = "\n`" + getCommandDetails().getUsage() + "`";
+
+ }
+
+ @Override
+ public void execute(MessageReceivedEvent e, CustomBot op, String[] args) {
+ if (args.length > 1) {
+ String usermention = args[0];
+ String quantitystring = args[1];
+ String resourcename = getResourceManager().getPrimaryResourceName();
+ if (args.length > 2) {
+ resourcename = args[2];
+ }
+
+ boolean generate = false;
+ String ownerid = op.getConfig().getString("ownerid");
+ if (ownerid.equals(e.getAuthor().getId())) {
+ if (args.length > 3) {
+ if (args[3].equals("generate")) {
+ generate = true;
+ }
+ }
+ }
+ Optional<Member> mentionToUser = PeelingUtils.mentionToMember(usermention, e.getGuild());
+ if (mentionToUser.isPresent()) {
+ Member member = mentionToUser.get();
+ try {
+ long quantity = Long.parseLong(quantitystring);
+ quantity = abs(quantity);
+
+ Resource resource = getResourceManager().getResource(resourcename);
+ if (resource != null) {
+
+ if (!generate && quantity > resource.get(e.getMember())) {
+ op.sendErrorMessage(e,":x: You do not have enough " + resource.getName() + "!");
+ } else {
+ if (!generate) {
+ resource.increment(e.getMember(), -quantity);
+ }
+ resource.increment(member, quantity);
+ op.sendSuccessMessage(e, ":white_check_mark: You gave " + member.getAsMention() + " " + resource.prettyValue(quantity));
+ }
+ } else {
+ op.sendErrorMessage(e, ":x: Please provide a valid resource!" + usage);
+
+ }
+
+ } catch (NumberFormatException ex) {
+ op.sendErrorMessage(e,":x: Please provide a valid quantity!" + usage);
+
+ }
+
+ } else {
+ op.sendErrorMessage(e, ":x: That user was not found!" + usage);
+ }
+ } else {
+ op.sendErrorMessage(e, ":x: Invalid usage!" + usage);
+
+ }
+ }
+
+}
diff --git a/src/main/java/net/uomc/mineshaft/resources/commands/LeaderBoardCommand.java b/src/main/java/net/uomc/mineshaft/resources/commands/LeaderBoardCommand.java
new file mode 100644
index 0000000..a001577
--- /dev/null
+++ b/src/main/java/net/uomc/mineshaft/resources/commands/LeaderBoardCommand.java
@@ -0,0 +1,50 @@
+package net.uomc.mineshaft.resources.commands;
+
+import static java.util.stream.Collectors.toMap;
+
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import com.mouldycheerio.dbot.CustomBot;
+import com.mouldycheerio.dbot.commands.CommandDetails;
+import com.mouldycheerio.dbot.util.PeelingUtils;
+
+import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
+import net.uomc.mineshaft.resources.ResourceManager;
+
+public class LeaderBoardCommand extends ResourceCommand {
+
+ public LeaderBoardCommand(ResourceManager resourceManager) {
+ super(resourceManager);
+ setCommandDetails(
+ CommandDetails.from("leaderboard,lb,top,best", "Lists the most valuable users", "top [@user]"));
+
+ }
+
+ @Override
+ public void execute(MessageReceivedEvent e, CustomBot op, String[] args) {
+ AtomicInteger n = new AtomicInteger(0);
+ op.sendMessage(
+ e, "Most Valuable Players", "*ranked by inventory value*\n\n" + String.join(
+ "\n", getResourceManager().getPrimaryResource().getMembers(e.getGuild()).stream().collect(
+ toMap(
+ Function.identity(),
+ user -> getResourceManager()
+ .getResources()
+ .stream()
+ .map(r -> r.getValue(user, e.getGuild().getId()) * r.getValue())
+ .reduce((long) 0, (a, b) -> a + b)))
+ .entrySet().stream()
+ .sorted(
+ (o1, o2) -> Long.compare(o2.getValue(), o1.getValue()))
+ .limit(10)
+ .map(
+ entry -> String.format(
+ "%d <@%s> (**%s**)",
+ n.incrementAndGet(),
+ entry.getKey(),
+ PeelingUtils.amountToString(entry.getValue())))
+ .collect(Collectors.toList())));
+ }
+}
diff --git a/src/main/java/net/uomc/mineshaft/resources/commands/ListResourcesCommand.java b/src/main/java/net/uomc/mineshaft/resources/commands/ListResourcesCommand.java
new file mode 100644
index 0000000..cb6c33a
--- /dev/null
+++ b/src/main/java/net/uomc/mineshaft/resources/commands/ListResourcesCommand.java
@@ -0,0 +1,31 @@
+package net.uomc.mineshaft.resources.commands;
+
+import java.util.List;
+
+import com.mouldycheerio.dbot.CustomBot;
+import com.mouldycheerio.dbot.commands.CommandDetails;
+
+import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
+import net.uomc.mineshaft.resources.Resource;
+import net.uomc.mineshaft.resources.ResourceManager;
+
+public class ListResourcesCommand extends ResourceCommand {
+
+ public ListResourcesCommand(ResourceManager resourceManager) {
+ super(resourceManager);
+ setCommandDetails(CommandDetails.hidden("listItems"));
+
+ }
+
+ @Override
+ public void execute(MessageReceivedEvent e, CustomBot op, String[] args) {
+ List<Resource> resources = getResourceManager().listResources();
+ StringBuilder stringBuilder = new StringBuilder();
+ resources.forEach(r -> {
+ stringBuilder.append(r.getSymbol() + " " + r.getName() + "\n");
+ });
+
+ op.sendMessage(e, "Available Items", stringBuilder.toString());
+ }
+
+}
diff --git a/src/main/java/net/uomc/mineshaft/resources/commands/MyResourcesCommand.java b/src/main/java/net/uomc/mineshaft/resources/commands/MyResourcesCommand.java
new file mode 100644
index 0000000..b172a1e
--- /dev/null
+++ b/src/main/java/net/uomc/mineshaft/resources/commands/MyResourcesCommand.java
@@ -0,0 +1,53 @@
+package net.uomc.mineshaft.resources.commands;
+
+import java.util.List;
+
+import com.mouldycheerio.dbot.CustomBot;
+import com.mouldycheerio.dbot.commands.CommandDetails;
+import com.mouldycheerio.dbot.util.PeelingUtils;
+
+import net.dv8tion.jda.api.entities.Member;
+import net.dv8tion.jda.api.entities.User;
+import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
+import net.uomc.mineshaft.resources.Resource;
+import net.uomc.mineshaft.resources.ResourceManager;
+
+public class MyResourcesCommand extends ResourceCommand {
+
+ public MyResourcesCommand(ResourceManager resourceManager) {
+ super(resourceManager);
+ setCommandDetails(CommandDetails.from("items,inventory,inv,i", "Lists your current inventory of items", "inventory [@user]"));
+
+ }
+
+ @Override
+ public void execute(MessageReceivedEvent e, CustomBot op, String[] args) {
+ List<Resource> resources = getResourceManager().listResources();
+
+ Member member = PeelingUtils.getSingleMentionFromArgs(e);
+ boolean your = member.equals(e.getMember());
+ StringBuilder stringBuilder = new StringBuilder();
+ resources.stream().sorted((r1, r2) -> (int)(r1.get(member) - r2.get(member))).forEach(r -> {
+ long l = r.get(member);
+ if (l != 0) {
+ String v = r.prettyValue(l);
+ stringBuilder.append("**" + v + "** " + r.getName());
+ stringBuilder.append("\n");
+ }
+ });
+ String name = (your ? "Your" : member.getEffectiveName() + "'s");
+ if (stringBuilder.length() == 0)
+ stringBuilder.append(name + "inventory is empty");
+
+ op.sendMessage(e, name + " Inventory", stringBuilder.toString() + "\n*Total value: " + PeelingUtils.amountToString(calculateInventoryValue(member)) + "*");
+ }
+
+ public long calculateInventoryValue(Member member) {
+ return getResourceManager()
+ .getResources()
+ .stream()
+ .map(r -> r.get(member) * r.getValue())
+ .reduce((long) 0, (a, b) -> a + b);
+ }
+
+}
diff --git a/src/main/java/net/uomc/mineshaft/resources/commands/RemoveResourceCommand.java b/src/main/java/net/uomc/mineshaft/resources/commands/RemoveResourceCommand.java
new file mode 100644
index 0000000..2fadf27
--- /dev/null
+++ b/src/main/java/net/uomc/mineshaft/resources/commands/RemoveResourceCommand.java
@@ -0,0 +1,46 @@
+package net.uomc.mineshaft.resources.commands;
+
+import com.mouldycheerio.dbot.CustomBot;
+import com.mouldycheerio.dbot.commands.Command;
+import com.mouldycheerio.dbot.commands.CommandDetails;
+import com.mouldycheerio.dbot.util.PeelingUtils;
+
+import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
+import net.uomc.mineshaft.resources.ResourceManager;
+
+public class RemoveResourceCommand extends ResourceCommand implements Command {
+
+ public RemoveResourceCommand(ResourceManager resourceManager) {
+ super(resourceManager);
+ setCommandDetails(CommandDetails.hidden("removeItem"));
+ }
+
+ @Override
+ public void execute(MessageReceivedEvent e, CustomBot op, String[] args) {
+ String ownerid = op.getConfig().getString("ownerid");
+ if (ownerid.equals(e.getAuthor().getId())) {
+ if (args.length > 0) {
+ String name = args[0];
+ PeelingUtils.askQuestion(e, "Are you sure you want to delete **" + name + "**?\n(warning: all userdata will be lost)\nSend `confirm` to proceed", r -> {
+ if (r.equalsIgnoreCase("confirm")) {
+ boolean removeResource = getResourceManager().removeResource(name);
+ if (removeResource) {
+ op.sendMessage(e, "removed", "removed the item **" + name + "** from the list of items");
+
+ } else {
+ op.sendMessage(e, "not found", ":x: the item **" + name + "** was not found");
+ }
+ } else {
+ op.sendMessage(e, "cancelled", ":x: operation cancelled");
+
+ }
+ });
+ } else {
+ op.sendMessage(e, "incorrect usage", ":x: usage: `.removeResource [name]`");
+ }
+ } else {
+ op.sendMessage(e, "missing permissions", ":x: this command is not intended for you");
+ }
+ }
+
+}
diff --git a/src/main/java/net/uomc/mineshaft/resources/commands/ResourceCommand.java b/src/main/java/net/uomc/mineshaft/resources/commands/ResourceCommand.java
new file mode 100644
index 0000000..9d99e0e
--- /dev/null
+++ b/src/main/java/net/uomc/mineshaft/resources/commands/ResourceCommand.java
@@ -0,0 +1,17 @@
+package net.uomc.mineshaft.resources.commands;
+
+import com.mouldycheerio.dbot.commands.DetailedCommand;
+
+import net.uomc.mineshaft.resources.ResourceManager;
+
+public abstract class ResourceCommand extends DetailedCommand {
+ private ResourceManager resourceManager;
+
+ public ResourceCommand(ResourceManager resourceManager) {
+ this.resourceManager = resourceManager;
+ }
+
+ public ResourceManager getResourceManager() {
+ return resourceManager;
+ }
+}
diff --git a/src/main/java/net/uomc/mineshaft/resources/commands/SetPrimaryResourceCommand.java b/src/main/java/net/uomc/mineshaft/resources/commands/SetPrimaryResourceCommand.java
new file mode 100644
index 0000000..6515d06
--- /dev/null
+++ b/src/main/java/net/uomc/mineshaft/resources/commands/SetPrimaryResourceCommand.java
@@ -0,0 +1,47 @@
+package net.uomc.mineshaft.resources.commands;
+
+import com.mouldycheerio.dbot.CustomBot;
+import com.mouldycheerio.dbot.commands.CommandDetails;
+import com.mouldycheerio.dbot.util.PeelingUtils;
+
+import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
+import net.uomc.mineshaft.resources.Resource;
+import net.uomc.mineshaft.resources.ResourceManager;
+
+public class SetPrimaryResourceCommand extends ResourceCommand {
+
+ public SetPrimaryResourceCommand(ResourceManager resourceManager) {
+ super(resourceManager);
+ setCommandDetails(CommandDetails.hidden("setPrimaryItem"));
+ }
+
+ @Override
+ public void execute(MessageReceivedEvent e, CustomBot op, String[] args) {
+ String ownerid = op.getConfig().getString("ownerid");
+ if (ownerid.equals(e.getAuthor().getId())) {
+ if (args.length > 0) {
+ Resource resource = getResourceManager().getResource(args[0]);
+ if (resource != null) {
+ PeelingUtils.askQuestion(e, "This will reset all users balance for this item, type `confirm` to continue", r -> {
+ if (r.equals("confirm")) {
+ getResourceManager().setPrimaryResource(resource.getName());
+
+ e.getGuild().loadMembers().onSuccess(members -> {
+ members.forEach(m -> getResourceManager().getPrimaryResource().set(m, 0));
+ });
+
+ op.sendMessage(e, "primary item", "Set **" + resource.getName() + "** to the primary item");
+ }
+ });
+ } else {
+ op.sendErrorMessage(e, "This item was not found");
+ }
+ } else {
+ op.sendMessage(e, "primary resource", "This will be the default item that will be used for trading\nUsage: `.setPrimaryResource [item name]`");
+ }
+ } else {
+ op.sendErrorMessage(e, ":x: this command is not intended for you");
+ }
+ }
+
+}
diff --git a/src/main/java/net/uomc/mineshaft/resources/commands/ValuesCommand.java b/src/main/java/net/uomc/mineshaft/resources/commands/ValuesCommand.java
new file mode 100644
index 0000000..c094d83
--- /dev/null
+++ b/src/main/java/net/uomc/mineshaft/resources/commands/ValuesCommand.java
@@ -0,0 +1,45 @@
+package net.uomc.mineshaft.resources.commands;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import com.mouldycheerio.dbot.CustomBot;
+import com.mouldycheerio.dbot.commands.CommandDetails;
+import com.mouldycheerio.dbot.commands.CommandFail;
+
+import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
+import net.uomc.mineshaft.resources.Resource;
+import net.uomc.mineshaft.resources.ResourceManager;
+
+public class ValuesCommand extends ResourceCommand {
+
+ public ValuesCommand(ResourceManager resourceManager) {
+ super(resourceManager);
+ setCommandDetails(CommandDetails.from("marketValue,values,prices", "Show estimated market values of all the items"));
+ }
+
+ @Override
+ public void execute(MessageReceivedEvent e, CustomBot b, String[] args) throws CommandFail {
+ long total = getResourceManager().getPrimaryResource().total();
+
+ List<Resource> resources = new ArrayList<Resource>(getResourceManager().getResources());
+ Collections.sort(resources, (r1, r2) -> Long.compare(r2.getValue(),r1.getValue()));
+
+ StringBuilder stringBuilder = new StringBuilder();
+ resources.forEach((r) -> {
+ long v = r.getValue();
+ stringBuilder.append("**1** " + r.getName() + r.getSymbol() + " : ");
+ if (v < 0) {
+ stringBuilder.append("**???**");
+ } else {
+ stringBuilder.append("**" + getResourceManager().getPrimaryResource().prettyValue(v) + "**");
+ }
+ stringBuilder.append("\n");
+ });
+
+ b.sendMessage(e, "Estimated Market Values", stringBuilder.toString());
+ }
+
+
+}