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 argList = Arrays.asList(args); Optional memberMention = argList.stream().filter(s -> s.startsWith("<@")).findFirst(); if (memberMention.isEmpty()) { op.sendErrorMessage(e, ":x: Invalid usage!" + usage); return; } Optional 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 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 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)); } }