Added support for Shearing and Bucket quests and fixed some minor things.

This commit is contained in:
once_a_fairy 2023-08-04 22:44:06 +02:00
parent e0d3251bc9
commit 8eb28ea5f6
7 changed files with 100 additions and 36 deletions

View File

@ -70,6 +70,8 @@ public final class AQuest extends JavaPlugin {
getServer().getPluginManager().registerEvents(new DonNotMessWithNPC(), this); getServer().getPluginManager().registerEvents(new DonNotMessWithNPC(), this);
getServer().getPluginManager().registerEvents(new DataLock(), this); getServer().getPluginManager().registerEvents(new DataLock(), this);
getServer().getPluginManager().registerEvents(new ItemCaught(), this); getServer().getPluginManager().registerEvents(new ItemCaught(), this);
getServer().getPluginManager().registerEvents(new PotionBrewingStarted(), this);
getServer().getPluginManager().registerEvents(new PotionBrewingFinished(), this);
// getServer().getMessenger().registerOutgoingPluginChannel(this, "aquest:player-data"); // getServer().getMessenger().registerOutgoingPluginChannel(this, "aquest:player-data");
// getServer().getMessenger().registerIncomingPluginChannel(this, "aquest:player-data", new PluginMessageListener()); // getServer().getMessenger().registerIncomingPluginChannel(this, "aquest:player-data", new PluginMessageListener());
} }

View File

@ -4,10 +4,7 @@ import com.alttd.altitudequests.AQuest;
import com.alttd.altitudequests.commands.SubCommand; import com.alttd.altitudequests.commands.SubCommand;
import com.alttd.altitudequests.config.MessagesConfig; import com.alttd.altitudequests.config.MessagesConfig;
import com.alttd.altitudequests.objects.Quest; import com.alttd.altitudequests.objects.Quest;
import com.alttd.altitudequests.objects.quests.BreedMobsQuest; import com.alttd.altitudequests.objects.quests.*;
import com.alttd.altitudequests.objects.quests.CollectDropsQuest;
import com.alttd.altitudequests.objects.quests.KillMobsQuest;
import com.alttd.altitudequests.objects.quests.MineQuest;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -17,8 +14,6 @@ import org.bukkit.scheduler.BukkitRunnable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class CommandSetQuest extends SubCommand { public class CommandSetQuest extends SubCommand {
@ -68,6 +63,7 @@ public class CommandSetQuest extends SubCommand {
case "collectdropsquest" -> res.addAll(CollectDropsQuest.getSubTypes()); case "collectdropsquest" -> res.addAll(CollectDropsQuest.getSubTypes());
case "killmobsquest" -> res.addAll(KillMobsQuest.getSubTypes()); case "killmobsquest" -> res.addAll(KillMobsQuest.getSubTypes());
case "minequest" -> res.addAll(MineQuest.getSubTypes()); case "minequest" -> res.addAll(MineQuest.getSubTypes());
case "otherquest" -> res.addAll(OtherQuest.getSubTypes());
default -> res.add("invalid quest type"); default -> res.add("invalid quest type");
} }
} }

View File

@ -157,10 +157,10 @@ public class QuestsConfig extends AbstractConfig {
public static List<OtherQuestObject> OTHER_QUEST = new ArrayList<>(); public static List<OtherQuestObject> OTHER_QUEST = new ArrayList<>();
public static String OTHER_QUEST_NAME = "<green>Other quest</green>"; public static String OTHER_QUEST_NAME = "<green>Other quest</green>";
public static String OTHER_STEP_1 = "Obtained";
public static String OTHER_STEP_2 = "Turned in";
public static String OTHER_TURN_IN = "<gold>Click here to turn in your <item></gold>"; public static String OTHER_TURN_IN = "<gold>Click here to turn in your <item></gold>";
public static List<String> OTHER_COMMANDS = List.of("broadcast <player> Finished their daily quest!"); public static List<String> OTHER_COMMANDS = List.of("broadcast <player> Finished their daily quest!");
public static Material item;
public static EntityType entityType;
private static void loadOtherQuests() { private static void loadOtherQuests() {
OTHER_QUEST.clear(); OTHER_QUEST.clear();
@ -172,11 +172,23 @@ public class QuestsConfig extends AbstractConfig {
Set<String> keys = configurationSection.getKeys(false); Set<String> keys = configurationSection.getKeys(false);
for (String key : keys) { for (String key : keys) {
try { try {
Material item = Material.valueOf(configurationSection.getString(key + ".item")); if (configurationSection.getString(key + ".item") == null) {
item = null;
}
else {
item = Material.valueOf(configurationSection.getString(key + ".item"));
}
if (configurationSection.getString(key + ".mob") == null) {
entityType = null;
}
else {
entityType = EntityType.valueOf(configurationSection.getString(key + ".mob"));
}
OTHER_QUEST.add(new OtherQuestObject(key, OTHER_QUEST.add(new OtherQuestObject(key,
configurationSection.getString(key + ".name"), configurationSection.getString(key + ".name"),
configurationSection.getString(key + ".category"), configurationSection.getString(key + ".category"),
item, item,
entityType,
configurationSection.getStringList(key + ".quest-pages"), configurationSection.getStringList(key + ".quest-pages"),
configurationSection.getStringList(key + ".done-pages"), configurationSection.getStringList(key + ".done-pages"),
configurationSection.getInt(key + ".amount-min"), configurationSection.getInt(key + ".amount-min"),
@ -191,8 +203,8 @@ public class QuestsConfig extends AbstractConfig {
} }
} }
OTHER_QUEST_NAME = config.getString("other.name", OTHER_QUEST_NAME); OTHER_QUEST_NAME = config.getString("other.name", OTHER_QUEST_NAME);
OTHER_STEP_1 = config.getString("other.step-1", OTHER_STEP_1); //OTHER_STEP_1 = config.getString("other.step-1", OTHER_STEP_1);
OTHER_STEP_2 = config.getString("other.step-2", OTHER_STEP_2); //OTHER_STEP_2 = config.getString("other.step-2", OTHER_STEP_2);
OTHER_TURN_IN = config.getString("other.turn-in", OTHER_TURN_IN); OTHER_TURN_IN = config.getString("other.turn-in", OTHER_TURN_IN);
OTHER_COMMANDS = config.getStringList("other.commands", OTHER_COMMANDS); OTHER_COMMANDS = config.getStringList("other.commands", OTHER_COMMANDS);
} }

View File

@ -2,27 +2,28 @@ package com.alttd.altitudequests.events;
import com.alttd.altitudequests.objects.Quest; import com.alttd.altitudequests.objects.Quest;
import com.alttd.altitudequests.objects.quests.CollectDropsQuest; import com.alttd.altitudequests.objects.quests.CollectDropsQuest;
import com.alttd.altitudequests.objects.quests.OtherQuest;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerBucketFillEvent; import org.bukkit.event.player.PlayerBucketEntityEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.util.List;
public class EntityBucketed implements Listener { public class EntityBucketed implements Listener {
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBucketFill(PlayerBucketFillEvent event) { public void onBucketFill(PlayerBucketEntityEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
Quest dailyQuest = Quest.getDailyQuest(player.getUniqueId()); Quest dailyQuest = Quest.getDailyQuest(player.getUniqueId());
if (dailyQuest == null || dailyQuest.isDone()) if (dailyQuest == null || dailyQuest.isDone())
return; return;
if (dailyQuest instanceof CollectDropsQuest collectDropsQuest) { if (dailyQuest instanceof OtherQuest otherQuest) {
ItemStack itemStack = event.getItemStack(); ItemStack itemStack = event.getEntityBucket();
if (itemStack != null) Entity entity = event.getEntity();
collectDropsQuest.collectDrops(List.of(itemStack)); if (itemStack != null && entity != null)
otherQuest.bucket(itemStack, entity);
} }
} }

View File

@ -1,15 +1,13 @@
package com.alttd.altitudequests.events; package com.alttd.altitudequests.events;
import com.alttd.altitudequests.objects.Quest; import com.alttd.altitudequests.objects.Quest;
import com.alttd.altitudequests.objects.quests.CollectDropsQuest; import com.alttd.altitudequests.objects.quests.OtherQuest;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerShearEntityEvent; import org.bukkit.event.player.PlayerShearEntityEvent;
import java.util.List;
public class EntitySheared implements Listener { public class EntitySheared implements Listener {
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
@ -18,8 +16,8 @@ public class EntitySheared implements Listener {
Quest dailyQuest = Quest.getDailyQuest(player.getUniqueId()); Quest dailyQuest = Quest.getDailyQuest(player.getUniqueId());
if (dailyQuest == null || dailyQuest.isDone()) if (dailyQuest == null || dailyQuest.isDone())
return; return;
if (dailyQuest instanceof CollectDropsQuest collectDropsQuest) { if (dailyQuest instanceof OtherQuest otherQuest) {
collectDropsQuest.collectDrops(List.of(event.getItem())); otherQuest.shear(event.getEntity());
} }
} }
} }

View File

@ -12,10 +12,14 @@ import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.bukkit.DyeColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Sheep;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory; import org.bukkit.inventory.PlayerInventory;
import org.bukkit.entity.Entity;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.SQLException; import java.sql.SQLException;
@ -101,8 +105,8 @@ public class OtherQuest extends Quest {
Placeholder.parsed("step_2_progress", getStep2() == getAmount() ? Placeholder.parsed("step_2_progress", getStep2() == getAmount() ?
"<green>" + getStep2() + "</green>" : "<red>" + getStep2() + "</red>"), "<green>" + getStep2() + "</green>" : "<red>" + getStep2() + "</red>"),
Placeholder.parsed("step_2_total", String.valueOf(getAmount())), Placeholder.parsed("step_2_total", String.valueOf(getAmount())),
Placeholder.unparsed("step_1", OtherQuestObject.getStep1()), Placeholder.unparsed("step_1", otherQuestObject.getStep1()),
Placeholder.unparsed("step_2", OtherQuestObject.getStep2()), Placeholder.unparsed("step_2", otherQuestObject.getStep2()),
Placeholder.unparsed("turn_in_text", QuestsConfig.OTHER_TURN_IN) Placeholder.unparsed("turn_in_text", QuestsConfig.OTHER_TURN_IN)
); );
Component turnInText = MiniMessage.miniMessage().deserialize(QuestsConfig.OTHER_TURN_IN, resolver); Component turnInText = MiniMessage.miniMessage().deserialize(QuestsConfig.OTHER_TURN_IN, resolver);
@ -145,7 +149,8 @@ public class OtherQuest extends Quest {
@Override @Override
public Component getDisplayName() { public Component getDisplayName() {
return MiniMessage.miniMessage().deserialize(QuestsConfig.OTHER_QUEST_NAME+"<green>: </green>"+OtherQuestObject.getCategory()); return MiniMessage.miniMessage().deserialize("<green>%s: </green>".formatted( otherQuestObject.getCategory()));
//return MiniMessage.miniMessage().deserialize("%s<green>: </green>%s".formatted(QuestsConfig.OTHER_QUEST_NAME, otherQuestObject.getCategory()));
} }
@Override @Override
@ -154,11 +159,36 @@ public class OtherQuest extends Quest {
} }
public void fish(ItemStack caughtItem){ public void fish(ItemStack caughtItem){
if (isDone() || !caughtItem.getType().equals(otherQuestObject.getMaterial()) ||getAmount() == getStep1()) if (isDone() || !caughtItem.getType().equals(otherQuestObject.getMaterial()) || getAmount() == getStep1()) {
return; return;
}
addStep1(1); addStep1(1);
checkDone(); checkDone();
} }
public void shear(Entity entity) {
if (isDone() || !entity.getType().equals(otherQuestObject.getEntity()) || getAmount() == getStep1()) {
return;
}
DyeColor color = getDyeColorFromItemStack(otherQuestObject.getMaterial());
if (entity instanceof Sheep) {
Sheep sheep = (Sheep) entity;
if (sheep.getColor() != color) {
return;
}
}
addStep1(1);
checkDone();
}
public void bucket(ItemStack bucket, Entity entity) {
if (isDone() || !entity.getType().equals(otherQuestObject.getEntity()) || getAmount() == getStep1()) {
return;
}
addStep1(1);
checkDone();
}
public void raid(){} public void raid(){}
public void collectDrops(List<ItemStack> drops) { public void collectDrops(List<ItemStack> drops) {
if (isDone() || getAmount() == getStep1()) if (isDone() || getAmount() == getStep1())
@ -173,7 +203,28 @@ public class OtherQuest extends Quest {
checkDone(); checkDone();
} }
public void brewingStarted(ItemStack ingredient, Location brewingStandLocation){
Logger.warning("Brewing Started");
}
public void brewingFinished(List <ItemStack> results, Location brewingStandLocation) {
Logger.warning("Brewing Finished");
}
public static List<String> getSubTypes() { public static List<String> getSubTypes() {
return QuestsConfig.OTHER_QUEST.stream().map(Variant::getInternalName).collect(Collectors.toList()); return QuestsConfig.OTHER_QUEST.stream().map(Variant::getInternalName).collect(Collectors.toList());
} }
public static DyeColor getDyeColorFromItemStack(Material material) {
if (material != null && material.name().contains("_WOOL")) {
String colorName = material.name().replace("_WOOL", "");
try {
return DyeColor.valueOf(colorName);
} catch (IllegalArgumentException ignored) {
// This will be thrown if the color name doesn't match the enum
}
}
return null;
}
} }

View File

@ -2,20 +2,23 @@ package com.alttd.altitudequests.objects.variants;
import com.alttd.altitudequests.objects.Variant; import com.alttd.altitudequests.objects.Variant;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.EntityType;
import java.util.List; import java.util.List;
public class OtherQuestObject extends Variant { public class OtherQuestObject extends Variant {
private final Material material; private final Material material;
private static String step1 = null; private final EntityType entity;
private static String step2 = null; private final String step1;
private static String category = null; private final String step2;
private final String category;
public OtherQuestObject(String internalName, String name, String category, Material item, public OtherQuestObject(String internalName, String name, String category, Material item, EntityType entity,
List<String> questPages, List<String> donePages, int min, int max, String step1, String step2) { List<String> questPages, List<String> donePages, int min, int max, String step1, String step2) {
super(internalName, name, questPages, donePages, min, max); super(internalName, name, questPages, donePages, min, max);
this.material = item; this.material = item;
this.entity = entity;
this.step1 = step1; this.step1 = step1;
this.step2 = step2; this.step2 = step2;
this.category = category; this.category = category;
@ -24,7 +27,8 @@ public class OtherQuestObject extends Variant {
public Material getMaterial() { public Material getMaterial() {
return material; return material;
} }
public static String getStep1() {return step1;} public EntityType getEntity() {return entity;}
public static String getStep2() {return step2;} public String getStep1() {return step1;}
public static String getCategory() {return category;} public String getStep2() {return step2;}
public String getCategory() {return category;}
} }