From 241dce0537475d0b34ec0a479806cf7fe2ec50b5 Mon Sep 17 00:00:00 2001 From: once_a_fairy Date: Mon, 10 Jul 2023 17:33:48 +0200 Subject: [PATCH] Added quest support for harvesting plants. --- .../altitudequests/config/QuestsConfig.java | 12 +++++++++- .../altitudequests/events/MineBlocks.java | 1 - .../objects/quests/MineQuest.java | 23 ++++++++++++++++--- .../objects/variants/MineQuestObject.java | 7 +++++- 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/alttd/altitudequests/config/QuestsConfig.java b/src/main/java/com/alttd/altitudequests/config/QuestsConfig.java index b93be60..baf3c01 100644 --- a/src/main/java/com/alttd/altitudequests/config/QuestsConfig.java +++ b/src/main/java/com/alttd/altitudequests/config/QuestsConfig.java @@ -33,6 +33,8 @@ public class QuestsConfig extends AbstractConfig { public static String MINE_STEP_2 = "Turned in"; public static String MINE_TURN_IN = "Click here to turn in your "; public static List MINE_COMMANDS = List.of("broadcast Finished their daily quest!"); + public static Material material; + public static Material turnInMaterial; private static void loadMineQuests() { MINE_QUESTS.clear(); @@ -44,10 +46,18 @@ public class QuestsConfig extends AbstractConfig { Set keys = configurationSection.getKeys(false); for (String key : keys) { try { - Material material = Material.valueOf(configurationSection.getString(key + ".material")); + material = Material.valueOf(configurationSection.getString(key + ".material")); + if (configurationSection.getString(key + ".turnInMaterial") == null) { + turnInMaterial = material; + } + else { + turnInMaterial = Material.valueOf(configurationSection.getString(key + ".turnInMaterial")); + } + MINE_QUESTS.add(new MineQuestObject(key, configurationSection.getString(key + ".name"), material, + turnInMaterial, configurationSection.getStringList(key + ".quest-pages"), configurationSection.getStringList(key + ".done-pages"), configurationSection.getInt(key + ".amount-min"), diff --git a/src/main/java/com/alttd/altitudequests/events/MineBlocks.java b/src/main/java/com/alttd/altitudequests/events/MineBlocks.java index 7fce06d..01d1262 100644 --- a/src/main/java/com/alttd/altitudequests/events/MineBlocks.java +++ b/src/main/java/com/alttd/altitudequests/events/MineBlocks.java @@ -22,5 +22,4 @@ public class MineBlocks implements Listener { if (quest instanceof MineQuest mineQuest) mineQuest.mine(event.getBlock()); } - } diff --git a/src/main/java/com/alttd/altitudequests/objects/quests/MineQuest.java b/src/main/java/com/alttd/altitudequests/objects/quests/MineQuest.java index 5674b2d..dcdfbcd 100644 --- a/src/main/java/com/alttd/altitudequests/objects/quests/MineQuest.java +++ b/src/main/java/com/alttd/altitudequests/objects/quests/MineQuest.java @@ -13,6 +13,8 @@ import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import org.bukkit.block.Block; +import org.bukkit.block.data.BlockData; +import org.bukkit.block.data.Ageable; import org.bukkit.entity.Player; import org.bukkit.inventory.PlayerInventory; @@ -91,7 +93,7 @@ public class MineQuest extends Quest { @Override public TagResolver getTagResolvers() { TagResolver resolver = TagResolver.resolver( - Placeholder.unparsed("block", Utilities.formatName(mineQuestObject.getMaterial().name())), + Placeholder.unparsed("block", Utilities.formatName(mineQuestObject.getTurnInMaterial().name())), Placeholder.parsed("step_1_progress", getStep1() == getAmount() ? "" + getStep1() + "" : "" + getStep1() + ""), Placeholder.parsed("step_1_total", String.valueOf(getAmount())), @@ -121,7 +123,7 @@ public class MineQuest extends Quest { Arrays.stream(inventory.getContents()) .filter(Objects::nonNull) - .filter(itemStack -> itemStack.getType().equals(mineQuestObject.getMaterial())) + .filter(itemStack -> itemStack.getType().equals(mineQuestObject.getTurnInMaterial())) .forEach(itemStack -> { if (ref.tmpAmount == 0) return; @@ -149,8 +151,23 @@ public class MineQuest extends Quest { return QuestsConfig.MINE_COMMANDS; } + public boolean checkBlock(Block block) { //this can probably be simplified but I didn't realy know how + + BlockData blockData = block.getBlockData(); + + if (!block.getType().equals(mineQuestObject.getMaterial())) { + return true; + } + else if (blockData instanceof Ageable) { + Ageable ageable = (Ageable) blockData; + if (ageable.getAge() != ageable.getMaximumAge()) { + return true; + } + } + return false; + } public void mine(Block block) { - if (isDone() || !block.getType().equals(mineQuestObject.getMaterial()) || getAmount() == getStep1()) + if (isDone() || checkBlock(block) || getAmount() == getStep1()) return; addStep1(1); checkDone(); diff --git a/src/main/java/com/alttd/altitudequests/objects/variants/MineQuestObject.java b/src/main/java/com/alttd/altitudequests/objects/variants/MineQuestObject.java index 273542d..8301fae 100644 --- a/src/main/java/com/alttd/altitudequests/objects/variants/MineQuestObject.java +++ b/src/main/java/com/alttd/altitudequests/objects/variants/MineQuestObject.java @@ -8,14 +8,19 @@ import java.util.List; public class MineQuestObject extends Variant { private final Material material; + private final Material turnInMaterial; - public MineQuestObject(String internalName, String name, Material material, + public MineQuestObject(String internalName, String name, Material material, Material turnInMaterial, List questPages, List donePages, int min, int max) { super(internalName, name, questPages, donePages, min, max); this.material = material; + this.turnInMaterial = turnInMaterial; } public Material getMaterial() { return material; } + public Material getTurnInMaterial() { + return turnInMaterial; + } }