summaryrefslogtreecommitdiff
path: root/src/main/java/net/uomc/mineshaft/PickaxeCommand.java
blob: a81ccd1b4e3dedfa78a9bcf4048de28dc1429a37 (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;
import net.uomc.mineshaft.blacksmith.Pickaxe;

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])) {
            Pickaxe pick = bot.getPickaxe(e.getMember());
            int level = pick.getLevel();
            Map<MineshaftItem, Long> upgradeCost = upgradeCost(pick);

            if (level >= pick.getMaxLevel()) {
                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);
            pick.setLevel(level + 1);
            String pickName = pick.getName();
            bot.sendSuccessMessage(e, "Your pickaxe has been upgraded to a **" + pickName + " Pickaxe**");
            return;
        }

        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());

        Pickaxe pick = bot.getPickaxe(target);
        String pickName = pick.getName();
        String nextPick = pick.getNextName();
        String pickImage = pick.getImage();

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

        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) + pick.getEnchantmentString();

        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(Pickaxe pick) {
        Map<MineshaftItem, Long> cost = new HashMap<>();

        int level = pick.getLevel();

        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;
    }
}