Added quest support for harvesting plants.

This commit is contained in:
once_a_fairy 2023-07-10 17:33:48 +02:00
parent 4e2aa4258d
commit 241dce0537
4 changed files with 37 additions and 6 deletions

View File

@ -33,6 +33,8 @@ public class QuestsConfig extends AbstractConfig {
public static String MINE_STEP_2 = "Turned in";
public static String MINE_TURN_IN = "<gold>Click here to turn in your <block></gold>";
public static List<String> MINE_COMMANDS = List.of("broadcast <player> 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<String> 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"),

View File

@ -22,5 +22,4 @@ public class MineBlocks implements Listener {
if (quest instanceof MineQuest mineQuest)
mineQuest.mine(event.getBlock());
}
}

View File

@ -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() ?
"<green>" + getStep1() + "</green>" : "<red>" + getStep1() + "</red>"),
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();

View File

@ -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<String> questPages, List<String> 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;
}
}