Work on mine quest

This commit is contained in:
2022-05-21 02:38:34 +02:00
parent 1ecf4508e8
commit 66316ff578
10 changed files with 204 additions and 55 deletions
@@ -1,8 +0,0 @@
package com.alttd.altitudequests.objects;
public enum GoalType {
TALK,
MONEY,
MINE,
WALK
}
@@ -0,0 +1,43 @@
package com.alttd.altitudequests.objects;
import net.kyori.adventure.text.Component;
import org.bukkit.Material;
import java.util.List;
public class MineQuestObject {
String internalName;
String name;
Material material;
int amount;
List<Component> pages;
public MineQuestObject(String internalName, String name, Material material, int amount, List<Component> pages) {
this.internalName = internalName;
this.name = name;
this.material = material;
this.amount = amount;
this.pages = pages;
}
public String getInternalName() {
return internalName;
}
public String getName() {
return name;
}
public Material getMaterial() {
return material;
}
public int getAmount() {
return amount;
}
public List<Component> getPages() {
return pages;
}
}
@@ -1,38 +1,52 @@
package com.alttd.altitudequests.objects;
import com.alttd.altitudequests.config.QuestsConfig;
import com.alttd.altitudequests.objects.quests.MineQuest;
import org.bukkit.entity.Player;
import java.util.HashMap;
import java.util.Random;
import java.util.UUID;
public abstract class Quest {
private static Quest dailyQuest = null;
private static final HashMap<UUID, Quest> dailyQuests = new HashMap<>();
private static Quest weeklyQuest = null;
private static final String[] possibleQuests;
private String name;
private GoalType goalType;
//TODO add all data every quest needs
static {
possibleQuests = new String[]{"MineQuest"};
}
public Quest(String name, GoalType goalType) {
this.name = name;
this.goalType = goalType;
public Quest() {
}
public static void createDailyQuest(Player player) {
Random random = new Random();
String questName = possibleQuests[random.nextInt(0, possibleQuests.length - 1)];
Quest quest = null;
switch (questName) {
case "MineQuest" -> {
quest = new MineQuest(QuestsConfig.MINE_QUESTS.get(random.nextInt(0, QuestsConfig.MINE_QUESTS.size() - 1)));
}
}
if (quest == null)
return; //TODO error
dailyQuests.put(player.getUniqueId(), quest);
}
public static Quest getDailyQuest(UUID uuid) {
if (!dailyQuests.containsKey(uuid))
dailyQuests.put(uuid, dailyQuest.initQuest());
if (!dailyQuests.containsKey(uuid)) {
return null;
}
return dailyQuests.get(uuid);
}
public static void setActiveDailyQuest(Quest newQuest) {
Quest.dailyQuest = newQuest;
}
public static void setActiveWeeklyQuest(Quest newQuest) {
Quest.weeklyQuest = newQuest;
}
public abstract boolean isDone();
public abstract Quest initQuest();
}
@@ -1,27 +1,44 @@
package com.alttd.altitudequests.objects.quests;
import com.alttd.altitudequests.objects.GoalType;
import com.alttd.altitudequests.config.QuestsConfig;
import com.alttd.altitudequests.objects.MineQuestObject;
import com.alttd.altitudequests.objects.Quest;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import java.util.Optional;
public class MineQuest extends Quest {
public MineQuest(String name, GoalType goalType) {
super(name, goalType);
int mined;
int turnedIn;
MineQuestObject mineQuestObject;
boolean isDone = false;
public MineQuest(MineQuestObject mineQuestObject) {
mined = 0;
turnedIn = 0;
this.mineQuestObject = mineQuestObject;
}
public MineQuest(int mined, int turnedIn, String internalName) {
this.mined = mined;
this.turnedIn = turnedIn;
Optional<MineQuestObject> any = QuestsConfig.MINE_QUESTS.stream().filter(object -> internalName.equals(object.getInternalName())).findAny();
if (any.isEmpty())
return; //TODO error
this.mineQuestObject = any.get();
}
@Override
public boolean isDone() {
return false;
return isDone;
}
@Override
public Quest initQuest() {
return new MineQuest("Mine", GoalType.MINE);
}
public void mine(Block block, Player player) {
public void mine(Block block) {
if (!isDone && !block.getType().equals(mineQuestObject.getMaterial()))
return;
mined += 1;
if (mined == mineQuestObject.getAmount())
isDone = true;
}
}