summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/net/uomc/mineshaft/MineshaftGiveResourcesCommand.java99
-rw-r--r--src/main/java/net/uomc/mineshaft/MineshaftLeaderBoardCommand.java102
-rw-r--r--src/main/java/net/uomc/mineshaft/Pickaxes.java2
-rw-r--r--src/main/java/net/uomc/mineshaft/Portal.java74
-rw-r--r--src/main/java/net/uomc/mineshaft/resources/market/MarketCommand.java6
5 files changed, 279 insertions, 4 deletions
diff --git a/src/main/java/net/uomc/mineshaft/MineshaftGiveResourcesCommand.java b/src/main/java/net/uomc/mineshaft/MineshaftGiveResourcesCommand.java
new file mode 100644
index 0000000..553bb76
--- /dev/null
+++ b/src/main/java/net/uomc/mineshaft/MineshaftGiveResourcesCommand.java
@@ -0,0 +1,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));
+ }
+
+}
diff --git a/src/main/java/net/uomc/mineshaft/MineshaftLeaderBoardCommand.java b/src/main/java/net/uomc/mineshaft/MineshaftLeaderBoardCommand.java
new file mode 100644
index 0000000..91c9ef6
--- /dev/null
+++ b/src/main/java/net/uomc/mineshaft/MineshaftLeaderBoardCommand.java
@@ -0,0 +1,102 @@
+package net.uomc.mineshaft;
+
+import static java.util.stream.Collectors.toMap;
+
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+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.events.message.MessageReceivedEvent;
+import net.uomc.mineshaft.resources.Resource;
+
+public class MineshaftLeaderBoardCommand extends DetailedCommand {
+
+ private Mineshaft bot;
+
+ public MineshaftLeaderBoardCommand(Mineshaft bot) {
+ setCommandDetails(
+ CommandDetails.from("leaderboard,lb,top,best", "Lists the most valuable users", "top [@user] [item]"));
+ this.bot = bot;
+ }
+
+ @Override
+ public void execute(MessageReceivedEvent e, CustomBot op, String[] args) {
+ if (args.length > 0) {
+ Resource resource = bot.getResourceManager().getResource(args[0]);
+ if (resource == null) {
+ if (args[0].equalsIgnoreCase("pickaxes") || args[0].equalsIgnoreCase("pickaxe")) {
+ bot.sendMessage(e, "Leaderboard", makeMessage(
+ bot.getPickaxes().getMembers(e.getGuild()), "pickaxe level",
+ entry -> {
+ String ench = "";
+ long level = bot.getPickaxes().getLevel(entry.getKey(), e.getGuild().getId());
+ long fortune = bot.getPickaxes().getFortune(entry.getKey(), e.getGuild().getId());
+ long efficiency = bot.getPickaxes().getEfficiency(entry.getKey(), e.getGuild().getId());
+
+ if (fortune > 0 || efficiency > 0) {
+ ench = String.format("(Eff%s,Fort%s)", efficiency, fortune);
+ }
+ return Pickaxes.pickaxeLevelToName(level) + ench ;
+ },
+ user -> bot.getPickaxes().getLevel(user, e.getGuild().getId()) + bot.getPickaxes().getEfficiency(user, e.getGuild().getId()) + bot.getPickaxes().getFortune(user, e.getGuild().getId())));
+ return;
+ }
+ if (args[0].equalsIgnoreCase("farm") || args[0].equalsIgnoreCase("farmlevel")) {
+ bot.sendMessage(e, "Leaderboard", makeMessage(
+ bot.getPickaxes().getMembers(e.getGuild()), "farm level",
+ entry -> PeelingUtils.amountToString(entry.getValue()),
+ user -> bot.getPickaxes().getFarmLevel(user, e.getGuild().getId())
+ ));
+ return;
+ }
+
+ op.sendErrorMessage(e, ":x: Please provide a valid resource!");
+ return;
+ }
+
+ bot.sendMessage(e, "Leaderboard", makeMessage(
+ resource.getMembers(e.getGuild()), resource.getSymbol(),
+ entry -> resource.prettyValue(entry.getValue()),
+ user -> resource.getValue(user, e.getGuild().getId())));
+ return;
+ }
+ bot.sendMessage(e, "Leaderboard", makeMessage(
+ bot.getResourceManager().getPrimaryResource().getMembers(e.getGuild()), "inventory value",
+ entry -> PeelingUtils.amountToString(entry.getValue()),
+ user -> bot.getResourceManager()
+ .getResources()
+ .stream()
+ .map(r -> r.getValue(user, e.getGuild().getId()) * r.getValue())
+ .reduce((long) 0, (a, b) -> a + b)));
+ }
+
+ public String makeMessage(List<String> members, String rankedBy,
+ Function<Entry<String, Long>, String> getValueString, Function<String, Long> getValueLong) {
+
+ AtomicInteger n = new AtomicInteger(0);
+
+ return "*ranked by " + rankedBy + "*\n\n" + String.join(
+ "\n", members.stream().collect(
+ toMap(
+ Function.identity(),
+ getValueLong))
+ .entrySet().stream()
+ .sorted(
+ (o1, o2) -> Long.compare(o2.getValue(), o1.getValue()))
+ .limit(10)
+ .map(
+ entry -> String.format(
+ "%d <@%s> **%s**",
+ n.incrementAndGet(),
+ entry.getKey(),
+ getValueString.apply(entry)))
+ .collect(Collectors.toList()));
+ }
+}
diff --git a/src/main/java/net/uomc/mineshaft/Pickaxes.java b/src/main/java/net/uomc/mineshaft/Pickaxes.java
index 16d6958..ca0fb34 100644
--- a/src/main/java/net/uomc/mineshaft/Pickaxes.java
+++ b/src/main/java/net/uomc/mineshaft/Pickaxes.java
@@ -23,7 +23,7 @@ public class Pickaxes {
private static final String EFFICIENCY_TABLE = "ench_efficiency";
private static final String DIMENSION_TABLE = "dimension";
- private static final String FARM_LEVEL_TABLE = "farm";
+ private static final String FARM_LEVEL_TABLE = "farms";
private String pickaxesDb;
diff --git a/src/main/java/net/uomc/mineshaft/Portal.java b/src/main/java/net/uomc/mineshaft/Portal.java
new file mode 100644
index 0000000..2d3df02
--- /dev/null
+++ b/src/main/java/net/uomc/mineshaft/Portal.java
@@ -0,0 +1,74 @@
+package net.uomc.mineshaft;
+
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Random;
+import java.util.stream.IntStream;
+import java.util.stream.LongStream;
+
+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.commands.cooldowns.CooldownCommand;
+import com.mouldycheerio.dbot.util.PeelingUtils;
+import com.vdurmont.emoji.EmojiParser;
+
+import net.dv8tion.jda.api.EmbedBuilder;
+import net.dv8tion.jda.api.entities.Member;
+import net.dv8tion.jda.api.entities.emoji.CustomEmoji;
+import net.dv8tion.jda.api.entities.emoji.Emoji;
+import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
+
+public class Portal extends CooldownCommand {
+
+ private static final String COMMAND_IMAGE = "https://minecraft.wiki/images/Nether_portal_%28animated%29.png?26915";
+ private static final String NETHER_IMAGE = "https://minecraft.wiki/images/thumb/The_Nether.png/600px-The_Nether.png?92e82";
+ private static final String OVERWORLD_IMAGE = "https://minecraft.wiki/images/thumb/Overworld_1.18.png/640px-Overworld_1.18.png?9499d";
+ private static final String COMMAND_TITLE = "Portal";
+ Mineshaft bot;
+
+ public Portal(Mineshaft bot) {
+ super(bot);
+ setCommandDetails(CommandDetails.from("portal", "go to the nether", "furnace"));
+ this.bot = bot;
+ setCooldown(2l * 1000l);
+ }
+
+ @Override
+ public boolean trigger(MessageReceivedEvent e) {
+
+ long furnaces = bot.getItem(e.getMember(), MineshaftItem.PORTAL);
+
+ if (furnaces < 1) {
+ bot.sendErrorMessage(e, ":x: You need to have at least **"
+ + bot.getItem(MineshaftItem.PORTAL).prettyValue(1)
+ + "** to use this!");
+ return false;
+ }
+
+ EmbedBuilder em = new EmbedBuilder();
+ em.setTitle(COMMAND_TITLE);
+ em.setColor(PeelingUtils.hex2Rgb("#8947e8"));
+ em.setThumbnail(COMMAND_IMAGE);
+
+ if (bot.getPickaxes().isNether(e.getMember())) {
+ bot.getPickaxes().setNether(e.getMember(), false);
+
+ em.setDescription("You go through the potal... everything is back to normal\n\n**You are now in the overworld**");
+ em.setImage(OVERWORLD_IMAGE);
+ } else {
+ bot.getPickaxes().setNether(e.getMember(), true);
+ em.setDescription("You go through the potal... things look different on this side...\n\n**You are now in the nether**");
+ em.setFooter(COMMAND_IMAGE);
+ em.setImage(NETHER_IMAGE);
+ em.setFooter(EmojiParser.parseToUnicode(":bulb:") + "Use " + bot.getPrefixManager().getPrefix(e.getGuild()) + "portal at any time to return");
+ }
+
+
+ e.getMessage().replyEmbeds(em.build()).queue();
+ return true;
+ }
+
+}
diff --git a/src/main/java/net/uomc/mineshaft/resources/market/MarketCommand.java b/src/main/java/net/uomc/mineshaft/resources/market/MarketCommand.java
index 7b4122a..2b69223 100644
--- a/src/main/java/net/uomc/mineshaft/resources/market/MarketCommand.java
+++ b/src/main/java/net/uomc/mineshaft/resources/market/MarketCommand.java
@@ -43,9 +43,9 @@ public class MarketCommand extends DetailedCommand {
e.getMessage().replyEmbeds(embedBuilder.build()).queue();
} else {
embedBuilder.setDescription(
- "Use `" + op.getPrefixManager().getPrefix(e.getGuild()) + "market buy [id]` to accept an offer\n"
-+ "Use `" + op.getPrefixManager().getPrefix(e.getGuild()) + "market sell` to create an offer\n"
- );
+ "Use `" + op.getPrefixManager().getPrefix(e.getGuild())
+ + "market buy [id]` to accept an offer\n" + "Use `"
+ + op.getPrefixManager().getPrefix(e.getGuild()) + "market sell` to create an offer\n");
e.getMessage().addReaction(Emoji.fromUnicode(EmojiParser.parseToUnicode(":white_check_mark:")))
.queue((r) -> {