diff options
| author | davidovski <david@davidovski.xyz> | 2025-10-11 04:55:51 +0100 |
|---|---|---|
| committer | davidovski <david@davidovski.xyz> | 2025-10-11 04:55:51 +0100 |
| commit | 10b327e9f6441a8863227ce3e075a5a587654065 (patch) | |
| tree | 5e94ecc91290febacf5181d3596563a7a24bd010 /src/main/java/net/uomc/mineshaft/EnchantCommand.java | |
v0.3.1
Diffstat (limited to 'src/main/java/net/uomc/mineshaft/EnchantCommand.java')
| -rw-r--r-- | src/main/java/net/uomc/mineshaft/EnchantCommand.java | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/src/main/java/net/uomc/mineshaft/EnchantCommand.java b/src/main/java/net/uomc/mineshaft/EnchantCommand.java new file mode 100644 index 0000000..f85c92b --- /dev/null +++ b/src/main/java/net/uomc/mineshaft/EnchantCommand.java @@ -0,0 +1,132 @@ +package net.uomc.mineshaft; + +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 com.vdurmont.emoji.EmojiParser; + +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; + +public class EnchantCommand extends DetailedCommand { + + private static final String COMMAND_IMAGE = "https://minecraft.wiki/images/Enchanting_Table.gif"; + private static final double MIN_DISCOUNT = 0.4; + private static final double MAX_BOOKSHELVES = 24; + private static final String COMMAND_TITLE = "Enchanting Table"; + Mineshaft bot; + + public EnchantCommand(Mineshaft bot) { + setCommandDetails(CommandDetails.from("enchant,enchanting,ench,etable,enchantingtable", "", "enchant")); + this.bot = bot; + } + + @Override + public void execute(MessageReceivedEvent e, CustomBot b, String[] args) throws CommandFail { + + long ench_tables = bot.getItem(e.getMember(), MineshaftItem.ENCHANTING_TABLE); + + if (ench_tables < 1) { + b.sendErrorMessage(e, ":x: You need to have at least **" + + bot.getItem(MineshaftItem.ENCHANTING_TABLE).prettyValue(1) + + "** to use this!"); + return; + } + + if (args.length > 0) { + enchant(e, args); + return; + } + + int fortune = bot.getPickaxes().getPickaxeFortune(e.getMember()); + long bookshelves = bot.getItem(e.getMember(), MineshaftItem.BOOKSHELF); + String bookshelfDiscountPercent = "-" + (int) Math.ceil((1 -bookshelfDiscount(bookshelves))*100) + "%"; + long xpLevel = getXpLevel(fortune, bookshelves); + long lapisLevel = getLapisLevel(fortune, bookshelves); + + long xpLevelNormal = getXpLevel(fortune, 0); + long lapisLevelNormal = getLapisLevel(fortune, 0); + + String curr = ""; + if (fortune > 0) { + curr = "Your pickaxe has **Fortune " + Pickaxes.getRomanNumber(fortune) + "**\n\n"; + } + + String description = curr + "Enchant your pickaxe with `" + b.getPrefixManager().getPrefix(e.getGuild()) + "enchant fortune`\n\n"; + + description += "**Cost:**\n"; + + if (bookshelves > 0) + description += "~~" + PeelingUtils.amountToString(lapisLevelNormal) + "~~ "; + + description += "**" + bot.getItem(MineshaftItem.LAPIS).prettyValue(lapisLevel) + "**"; + description += "\n"; + + if (bookshelves > 0) + description += "~~" + PeelingUtils.amountToString(xpLevelNormal) + "~~ "; + + description += "**" + bot.getItem(MineshaftItem.XP).prettyValue(xpLevel) + "**"; + + if (bookshelves > 0) { + description += "\n\nYour "; + description += bot.getItem(MineshaftItem.BOOKSHELF).prettyValue(bookshelves); + description += " are giving you a **" + bookshelfDiscountPercent + "** discount!"; + } + + EmbedBuilder em = new EmbedBuilder(); + em.setTitle(COMMAND_TITLE); + em.setDescription(description); + em.setThumbnail(COMMAND_IMAGE); + em.setColor(PeelingUtils.hex2Rgb("#0a0711")); + + if (bookshelves == 0) { + em.setFooter(EmojiParser.parseToUnicode(":bulb:") + "Bookshelves give you a discount on your enchantments"); + } + + e.getMessage().replyEmbeds(em.build()).queue(); + } + + private long getLapisLevel(int fortune, long bookshelves) { + return (long) (Math.pow(2, fortune + 4) * bookshelfDiscount(bookshelves)); + } + + private double bookshelfDiscount(long bookshelves) { + double b = Math.min(bookshelves, MAX_BOOKSHELVES); + return MIN_DISCOUNT + Math.log10( 1.0 + (9.0 * ((MAX_BOOKSHELVES - b) / MAX_BOOKSHELVES))) * MIN_DISCOUNT; + } + + private long getXpLevel(int fortune, long bookshelves) { + return (long) (15000l * Math.pow(fortune + 1, 2) * bookshelfDiscount(bookshelves)); + } + + private void enchant(MessageReceivedEvent e, String[] args) { + int fortune = bot.getPickaxes().getPickaxeFortune(e.getMember()); + long bookshelves = bot.getItem(e.getMember(), MineshaftItem.BOOKSHELF); + long xpLevel = getXpLevel(fortune, bookshelves); + long lapisLevel = getLapisLevel(fortune, bookshelves); + + long memberLapis = bot.getItem(e.getMember(), MineshaftItem.LAPIS); + long memberXp = bot.getItem(e.getMember(), MineshaftItem.XP); + + if (memberLapis < lapisLevel) { + bot.sendErrorMessage(e, ":x: You need " + bot.getItem(MineshaftItem.LAPIS).prettyValue(lapisLevel - memberLapis) + " more lapis!" ); + return; + } + + if (memberXp < xpLevel) { + bot.sendErrorMessage(e, ":x: You need " + bot.getItem(MineshaftItem.XP).prettyValue(xpLevel - memberXp) + " more xp!" ); + return; + } + + bot.removeItem(e.getMember(), MineshaftItem.LAPIS, lapisLevel); + bot.removeItem(e.getMember(), MineshaftItem.XP, xpLevel); + int level = bot.getPickaxes().incrementFortune(e.getMember()); + + bot.sendSuccessMessage(e, ":white_check_mark: You enchanted your pickaxe. Now it has **Fortune " + Pickaxes.getRomanNumber(level) + "**"); + + } + +} |
