summaryrefslogtreecommitdiff
path: root/src/main/java/net/uomc/mineshaft/MineshaftGiveResourcesCommand.java
diff options
context:
space:
mode:
authordavidovski <david@davidovski.xyz>2025-10-17 18:47:36 +0100
committerdavidovski <david@davidovski.xyz>2025-10-17 18:47:36 +0100
commitda9ece80133a33aff456d30854adc095b8f303ab (patch)
treeb14c5ba37cebb6a4c70d824e686f01640b4bf52c /src/main/java/net/uomc/mineshaft/MineshaftGiveResourcesCommand.java
parentdc825ad776f9fe9f763267874f6fa70c4870fc46 (diff)
v0.5.1
Diffstat (limited to 'src/main/java/net/uomc/mineshaft/MineshaftGiveResourcesCommand.java')
-rw-r--r--src/main/java/net/uomc/mineshaft/MineshaftGiveResourcesCommand.java99
1 files changed, 99 insertions, 0 deletions
diff --git a/src/main/java/net/uomc/mineshaft/MineshaftGiveResourcesCommand.java b/src/main/java/net/uomc/mineshaft/MineshaftGiveResourcesCommand.java
new file mode 100644
index 0000000..553bb76
--- /dev/null
+++ b/src/main/java/net/uomc/mineshaft/MineshaftGiveResourcesCommand.java
@@ -0,0 +1,99 @@
+package net.uomc.mineshaft;
+
+import static java.lang.Math.abs;
+
+import java.util.List;
+import java.util.Arrays;
+import java.util.Optional;
+
+import com.mouldycheerio.dbot.CustomBot;
+import com.mouldycheerio.dbot.commands.CommandDetails;
+import com.mouldycheerio.dbot.commands.DetailedCommand;
+import com.mouldycheerio.dbot.util.PeelingUtils;
+
+import net.dv8tion.jda.api.entities.Member;
+import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
+import net.uomc.mineshaft.resources.Resource;
+
+public class MineshaftGiveResourcesCommand extends DetailedCommand {
+
+ private String usage;
+ private Mineshaft bot;
+
+ public MineshaftGiveResourcesCommand(Mineshaft bot) {
+ this.bot = bot;
+ setCommandDetails(CommandDetails.from("give", "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 < 3) {
+ op.sendErrorMessage(e, ":x: Invalid usage!" + usage);
+ return;
+ }
+ List<String> argList = Arrays.asList(args);
+
+ Optional<String> memberMention = argList.stream().filter(s -> s.startsWith("<@")).findFirst();
+
+ if (memberMention.isEmpty()) {
+ op.sendErrorMessage(e, ":x: Invalid usage!" + usage);
+ return;
+ }
+
+ Optional<Long> quantity = argList.stream().filter(s -> PeelingUtils.isLong(s)).map(s -> Long.parseLong(s))
+ .findFirst();
+ if (quantity.isEmpty()) {
+ op.sendErrorMessage(e, ":x: Invalid usage!" + usage);
+ return;
+ }
+ Optional<String> resourceName = argList.stream().filter(s -> !s.startsWith("<@") && !PeelingUtils.isLong(s))
+ .findFirst();
+ if (resourceName.isEmpty()) {
+ op.sendErrorMessage(e, ":x: Invalid usage!" + usage);
+ return;
+ }
+
+ boolean generate = argList.stream().filter(s -> "generate".equals(s)).findFirst().isPresent();
+
+ if (!e.getMember().getId().equals(op.getOwnerID())){
+ generate = false;
+ }
+
+ Optional<Member> mentionToUser = PeelingUtils.mentionToMember(memberMention.get(), e.getGuild());
+
+ if (!mentionToUser.isPresent()) {
+ op.sendErrorMessage(e, ":x: That user was not found!" + usage);
+ return;
+ }
+
+ Member member = mentionToUser.get();
+ long q = abs(quantity.get());
+
+ Resource resource = bot.getResourceManager().getResource(resourceName.get());
+ if (resource == null) {
+ op.sendErrorMessage(e, ":x: Please provide a valid resource!" + usage);
+ return;
+ }
+
+ if (!generate && q > resource.get(e.getMember())) {
+ op.sendErrorMessage(e, ":x: You do not have enough " + resource.getName() + "!");
+ return;
+ }
+
+ if (bot.getPickaxes().isNether(member) != bot.getPickaxes().isNether(e.getMember())) {
+ op.sendErrorMessage(e, ":x: You can't give items to players in other dimensions!");
+ return;
+ }
+
+ if (!generate) {
+ resource.increment(e.getMember(), -q);
+ }
+
+ resource.increment(member, q);
+ op.sendSuccessMessage(e,
+ ":white_check_mark: You gave " + member.getAsMention() + " " + resource.prettyValue(q));
+ }
+
+}