summaryrefslogtreecommitdiff
path: root/src/main/java/net/uomc/mineshaft/MineshaftGiveResourcesCommand.java
blob: 553bb76ae8081a7dca64b48b22be6863166e8c13 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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));
    }

}