summaryrefslogtreecommitdiff
path: root/src/main/java/net/uomc/mineshaft/PickaxeCommand.java
blob: 31ac11c5004b764b9e914b97bf12f467b8117e64 (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
100
101
102
103
104
105
package net.uomc.mineshaft;

import java.util.HashMap;
import java.util.Map;

import com.mouldycheerio.dbot.CustomBot;
import com.mouldycheerio.dbot.commands.CommandDetails;
import com.mouldycheerio.dbot.commands.CommandFail;
import com.mouldycheerio.dbot.commands.DetailedCommand;
import com.mouldycheerio.dbot.util.PeelingUtils;

import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;

public class PickaxeCommand extends DetailedCommand {

    private Mineshaft bot;

    public PickaxeCommand(Mineshaft b) {
        setCommandDetails(CommandDetails.from("pickaxe,pick", "", "pickaxe [user]"));
        this.bot = b;
    }

    @Override
    public void execute(MessageReceivedEvent e, CustomBot b, String[] args) throws CommandFail  {
        if (args.length > 0 && "upgrade".equalsIgnoreCase(args[0])) {
            int level = bot.getPickaxes().getPickaxeLevel(e.getMember());
            Map<MineshaftItem, Long> upgradeCost = upgradeCost(e.getMember());

            if (level >= bot.getPickaxes().getMaPickaxeLevel()) {
                bot.sendErrorMessage(e, ":x: Your pickaxe is already at the maximum level");
                return;
            }

            if (!bot.hasItems(e.getMember(), upgradeCost)) {
                bot.sendErrorMessage(e,
                        ":x: You need **" + String.join(",", bot.createItemList(bot.getMissingIngredients(e.getMember(), upgradeCost)).split("\n")) + "** to upgrade!"
                        );
                return;
            }

            bot.removeItems(e.getMember(), upgradeCost);
            bot.getPickaxes().setLevel(e.getMember(), level + 1);
            String pickName = bot.getPickaxes().getPickaxeName(e.getMember());
            bot.sendSuccessMessage(e, "Your pickaxe has been upgraded to a **" + pickName + " Pickaxe**");
            return;
        }

        String pickName = bot.getPickaxes().getPickaxeName(e.getMember());
        String nextPick = bot.getPickaxes().getNextPickaxeName(e.getMember());
        String pickImage = bot.getPickaxes().getPickaxeImage(e.getMember());
        int fortune = bot.getPickaxes().getPickaxeFortune(e.getMember());
        int efficiency = bot.getPickaxes().getPickaxeEfficiency(e.getMember());

        Member target = PeelingUtils.getSingleMentionFromArgs(e);
        String p1 = target.equals(e.getMember()) ? "You currently have" : String.format("%s currently has", e.getMember().getEffectiveName());
        String p2 = target.equals(e.getMember()) ? "Your pickaxe" : String.format("%s's pickaxe", e.getMember().getEffectiveName());


        Map<MineshaftItem, Long> upgradeCost = upgradeCost(target);

        String upgradeString = "\n\nTo upgrade to a **" + nextPick + " Pickaxe **, use `" + bot.getCommandController().getPrefix() + "pickaxe upgrade`.\nUpgrade cost: **" + String.join(",", bot.createItemList(upgradeCost).split("\n")) + "**";
        if (!target.equals(e.getMember())){
            upgradeString = "";
        }

        String enchants = String.format("\n%s ", p2) + bot.getEnchantCommand().getPickaxeEnchantmentsString(fortune, efficiency);

        EmbedBuilder em = new EmbedBuilder();
        em.setTitle(p2);
        em.setDescription(p1 + " a **" + pickName + " Pickaxe**" + enchants + upgradeString);
        em.setThumbnail(pickImage);

        e.getMessage().replyEmbeds(em.build()).queue();
    }

    private Map<MineshaftItem, Long> upgradeCost(Member m) {
        Map<MineshaftItem, Long> cost = new HashMap<>();

        int level = bot.getPickaxes().getPickaxeLevel(m);

        switch ((int) level) {
            case 0:
                cost.put(MineshaftItem.COPPER, 16l);
            break;

            case 1:
                cost.put(MineshaftItem.IRON, 32l);
                break;
            case 2:
                cost.put(MineshaftItem.GOLD, 64l);
                break;
            case 3:
                cost.put(MineshaftItem.DIAMOND, 32l);
                break;
            case 4:
                cost.put(MineshaftItem.NETHERITE, 128l);
                break;
        }

        return cost;
    }
}