summaryrefslogtreecommitdiff
path: root/src/main/java/net/uomc/mineshaft/resources/commands/MyResourcesCommand.java
blob: b172a1ed7baed87e90a196bcb18d3662e2e77866 (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
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);
    }

}