summaryrefslogtreecommitdiff
path: root/src/main/java/net/uomc/mineshaft/crafting
diff options
context:
space:
mode:
authordavidovski <david@davidovski.xyz>2025-10-15 04:01:15 +0100
committerdavidovski <david@davidovski.xyz>2025-10-15 04:01:15 +0100
commitdc825ad776f9fe9f763267874f6fa70c4870fc46 (patch)
treed8d2bcf26b180f2c1abbab4e0dc1929dd88e05ab /src/main/java/net/uomc/mineshaft/crafting
parent10b327e9f6441a8863227ce3e075a5a587654065 (diff)
v5
Diffstat (limited to 'src/main/java/net/uomc/mineshaft/crafting')
-rw-r--r--src/main/java/net/uomc/mineshaft/crafting/Crafting.java68
-rw-r--r--src/main/java/net/uomc/mineshaft/crafting/CraftingRecipe.java21
2 files changed, 84 insertions, 5 deletions
diff --git a/src/main/java/net/uomc/mineshaft/crafting/Crafting.java b/src/main/java/net/uomc/mineshaft/crafting/Crafting.java
index 5bbef1c..6e2f670 100644
--- a/src/main/java/net/uomc/mineshaft/crafting/Crafting.java
+++ b/src/main/java/net/uomc/mineshaft/crafting/Crafting.java
@@ -19,6 +19,7 @@ import net.uomc.mineshaft.resources.Resource;
import net.uomc.mineshaft.Mineshaft;
import net.uomc.mineshaft.MineshaftItem;
import net.dv8tion.jda.api.EmbedBuilder;
+import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
@@ -45,6 +46,7 @@ public class Crafting extends DetailedCommand {
addRecipe(
CraftingRecipe.make(MineshaftItem.BOOKSHELF)
.addIngredient(MineshaftItem.BOOK, 3)
+ .setUnlockCondition((m) -> bot.getItem(m, MineshaftItem.BOOK) > 0)
.setBuyMessage("**+1 enchanting table level**")
);
@@ -53,6 +55,56 @@ public class Crafting extends DetailedCommand {
.addIngredient(MineshaftItem.COAL, 800l)
.setBuyMessage("Use `" + bot.getCommandController().getPrefix() + "furnace` to get free ores")
);
+
+ addRecipe(
+ CraftingRecipe.make(MineshaftItem.PORTAL)
+ .addIngredient(MineshaftItem.OBSIDIAN, 10l)
+ .setUnlockCondition((m) -> bot.getItem(m, MineshaftItem.OBSIDIAN) > 0)
+ .setBuyMessage("You can now use your `" + bot.getCommandController().getPrefix() + "portal`")
+ );
+
+ addRecipe(
+ CraftingRecipe.make(MineshaftItem.WOOL)
+ .addIngredient(MineshaftItem.STRING, 4l)
+ .setUnlockCondition((m) -> bot.getItem(m, MineshaftItem.STRING) > 0)
+ );
+
+ addRecipe(
+ CraftingRecipe.make(MineshaftItem.BED)
+ .addIngredient(MineshaftItem.WOOL, 3l)
+ .setUnlockCondition((m) -> bot.getItem(m, MineshaftItem.STRING) > 0)
+ );
+
+ addRecipe(
+ CraftingRecipe.make(MineshaftItem.VILLAGER)
+ .addIngredient(MineshaftItem.EMERALD, 64l)
+ .addIngredient(MineshaftItem.BED, 1l)
+ .setUnlockCondition((m) -> bot.getItem(m, MineshaftItem.BED) > 0 && bot.getItem(m, MineshaftItem.EMERALD) > 0)
+ .setBuyMessage("You are now able to `" + bot.getCommandController().getPrefix() + "trade` with the wandering trader")
+ );
+
+ addRecipe(
+ CraftingRecipe.make(MineshaftItem.COMPOSTER)
+ .addIngredient(MineshaftItem.IRON, 14l)
+ .setUnlockCondition((m) ->
+ bot.getItem(m, MineshaftItem.FISH) > 0
+ || bot.getItem(m, MineshaftItem.POTATO) > 0
+ || bot.getItem(m, MineshaftItem.CARROT) > 0
+ || bot.getItem(m, MineshaftItem.CANE) > 0)
+ .setBuyMessage("You are now able to `" + bot.getCommandController().getPrefix() + "compost` your items")
+ );
+
+ addRecipe(
+ CraftingRecipe.make(MineshaftItem.PAPER)
+ .addIngredient(MineshaftItem.CANE, 3l)
+ .setUnlockCondition((m) -> bot.getItem(m, MineshaftItem.CANE) > 0)
+ );
+
+ addRecipe(
+ CraftingRecipe.make(MineshaftItem.BOOK)
+ .addIngredient(MineshaftItem.PAPER, 27l)
+ .setUnlockCondition((m) -> bot.getItem(m, MineshaftItem.PAPER) > 0)
+ );
}
@@ -72,9 +124,9 @@ public class Crafting extends DetailedCommand {
return;
}
- String description = "This is your crafting table. Craft an item with `" + b.getPrefixManager().getPrefix(e.getGuild()) + "craft [item]`\n\n";
+ String description = "This is your crafting table. Craft an item with `" + b.getPrefixManager().getPrefix(e.getGuild()) + "craft [item] [amount]`\n\n";
- description += getCraftingRecipesList();
+ description += getCraftingRecipesList(e.getMember());
EmbedBuilder em = new EmbedBuilder();
em.setTitle(COMMAND_TITLE);
@@ -82,13 +134,19 @@ public class Crafting extends DetailedCommand {
em.setThumbnail(COMMAND_IMAGE);
em.setColor(PeelingUtils.hex2Rgb("#93764c"));
- em.setFooter(EmojiParser.parseToUnicode(":bulb:") + "View your inventory with " +b.getPrefixManager().getPrefix(e.getGuild()) + "inv");
+ if (bot.getItem(e.getMember(), MineshaftItem.DIAMOND) < 1) {
+ em.setFooter(EmojiParser.parseToUnicode(":bulb:") + "View your inventory with " +b.getPrefixManager().getPrefix(e.getGuild()) + "inv");
+ } else {
+ em.setFooter(EmojiParser.parseToUnicode(":bulb:") + "Come back once you have more items to unlock more recipes!");
+ }
e.getMessage().replyEmbeds(em.build()).queue();
}
- public String getCraftingRecipesList() {
- return getRecipes().stream().map(recipe -> {
+ public String getCraftingRecipesList(Member member) {
+ return getRecipes().stream()
+ .filter(r -> r.isUnlocked(member))
+ .map(recipe -> {
Resource r = bot.getItem(recipe.getItem());
return "**" + r.getPrettyName() + "**\n"
diff --git a/src/main/java/net/uomc/mineshaft/crafting/CraftingRecipe.java b/src/main/java/net/uomc/mineshaft/crafting/CraftingRecipe.java
index cb4892e..5f624a0 100644
--- a/src/main/java/net/uomc/mineshaft/crafting/CraftingRecipe.java
+++ b/src/main/java/net/uomc/mineshaft/crafting/CraftingRecipe.java
@@ -3,6 +3,11 @@ package net.uomc.mineshaft.crafting;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
+import java.util.function.BiFunction;
+import java.util.function.Function;
+
+import net.dv8tion.jda.api.entities.Member;
+import net.uomc.mineshaft.Mineshaft;
import net.uomc.mineshaft.MineshaftItem;
public class CraftingRecipe {
@@ -11,6 +16,7 @@ public class CraftingRecipe {
Map<MineshaftItem, Long> ingredients;
String buyMessage;
+ Function<Member, Boolean> unlockCondition;
private CraftingRecipe(MineshaftItem item, long quantity, Map<MineshaftItem, Long> ingredients) {
this.item = item;
@@ -41,13 +47,28 @@ public class CraftingRecipe {
}
public String getBuyMessage() {
+ if (buyMessage == null)
+ return "";
return buyMessage;
}
+ public boolean isUnlocked(Member m) {
+ if (unlockCondition == null)
+ return true;
+
+ return unlockCondition.apply(m);
+ }
+
public CraftingRecipe setBuyMessage(String message) {
buyMessage = message;
return this;
}
+
+ public CraftingRecipe setUnlockCondition(Function<Member, Boolean> function) {
+ this.unlockCondition = function;
+ return this;
+ }
+
public Map<MineshaftItem, Long> getMissingIngredients(Map<MineshaftItem, Long> items) {
return getMissingIngredients(items, 1);
}