From 80a695cea2494f531c813045ce3a50e18f498f47 Mon Sep 17 00:00:00 2001 From: josemarcellio Date: Thu, 26 Sep 2024 00:24:21 +0800 Subject: Add BedWars1058 dedicated task types --- .../quests/bukkit/BukkitQuestsPlugin.java | 8 +++ .../type/dependent/BedWars1058BedBreakTask.java | 69 +++++++++++++++++++++ .../type/dependent/BedWars1058FinalKillTask.java | 68 +++++++++++++++++++++ .../type/dependent/BedWars1058LoseTask.java | 71 ++++++++++++++++++++++ .../type/dependent/BedWars1058WinTask.java | 71 ++++++++++++++++++++++ bukkit/src/main/resources/plugin.yml | 1 + 6 files changed, 288 insertions(+) create mode 100644 bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BedWars1058BedBreakTask.java create mode 100644 bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BedWars1058FinalKillTask.java create mode 100644 bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BedWars1058LoseTask.java create mode 100644 bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BedWars1058WinTask.java (limited to 'bukkit/src') diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java index bafe5381..d2f26d23 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java @@ -131,6 +131,10 @@ import com.leonardobishop.quests.bukkit.tasktype.type.dependent.VotingPluginVote import com.leonardobishop.quests.bukkit.tasktype.type.dependent.ZNPCsPlusDeliverTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.ZNPCsPlusInteractTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.uSkyBlockLevelTaskType; +import com.leonardobishop.quests.bukkit.tasktype.type.dependent.BedWars1058BedBreakTask; +import com.leonardobishop.quests.bukkit.tasktype.type.dependent.BedWars1058FinalKillTask; +import com.leonardobishop.quests.bukkit.tasktype.type.dependent.BedWars1058WinTask; +import com.leonardobishop.quests.bukkit.tasktype.type.dependent.BedWars1058LoseTask; import com.leonardobishop.quests.bukkit.util.CompatUtils; import com.leonardobishop.quests.bukkit.util.FormatUtils; import com.leonardobishop.quests.bukkit.util.LogHistory; @@ -501,6 +505,10 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { taskTypeManager.registerTaskType(() -> new VotingPluginVoteType(this), () -> CompatUtils.isPluginEnabled("VotingPlugin")); // not tested taskTypeManager.registerTaskType(() -> new ZNPCsPlusDeliverTaskType(this), () -> CompatUtils.isPluginEnabled("ZNPCsPlus")); taskTypeManager.registerTaskType(() -> new ZNPCsPlusInteractTaskType(this), () -> CompatUtils.isPluginEnabled("ZNPCsPlus")); + taskTypeManager.registerTaskType(() -> new BedWars1058BedBreakTask(this), () -> CompatUtils.isPluginEnabled("BedWars1058")); + taskTypeManager.registerTaskType(() -> new BedWars1058FinalKillTask(this), () -> CompatUtils.isPluginEnabled("BedWars1058")); + taskTypeManager.registerTaskType(() -> new BedWars1058WinTask(this), () -> CompatUtils.isPluginEnabled("BedWars1058")); + taskTypeManager.registerTaskType(() -> new BedWars1058LoseTask(this), () -> CompatUtils.isPluginEnabled("BedWars1058")); // Register task types with enabled specific version plugin compatibility requirement taskTypeManager.registerTaskType(() -> new IridiumSkyblockValueTaskType(this), () -> { // TODO FIX diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BedWars1058BedBreakTask.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BedWars1058BedBreakTask.java new file mode 100644 index 00000000..600ce31e --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BedWars1058BedBreakTask.java @@ -0,0 +1,69 @@ +package com.leonardobishop.quests.bukkit.tasktype.type.dependent; + +import com.andrei1058.bedwars.api.events.player.PlayerBedBreakEvent; +import com.google.common.collect.HashBasedTable; +import com.google.common.collect.Table; +import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; +import com.leonardobishop.quests.bukkit.item.QuestItem; +import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType; +import com.leonardobishop.quests.bukkit.util.TaskUtils; +import com.leonardobishop.quests.bukkit.util.constraint.TaskConstraintSet; +import com.leonardobishop.quests.common.player.QPlayer; +import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress; +import com.leonardobishop.quests.common.quest.Quest; +import com.leonardobishop.quests.common.quest.Task; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; + +public final class BedWars1058BedBreakTask extends BukkitTaskType { + + private final BukkitQuestsPlugin plugin; + private final Table fixedQuestItemCache = HashBasedTable.create(); + + public BedWars1058BedBreakTask(BukkitQuestsPlugin plugin) { + super("bedwars1058_bedbreak", TaskUtils.TASK_ATTRIBUTION_STRING, "Break a set amount of beds in BedWars1058."); + this.plugin = plugin; + + super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount")); + super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount")); + } + + @Override + public void onReady() { + fixedQuestItemCache.clear(); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerBedBreak(PlayerBedBreakEvent event) { + Player player = event.getPlayer(); + + QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId()); + if (qPlayer == null) { + return; + } + + for (TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(player, qPlayer, this, TaskConstraintSet.ALL)) { + Quest quest = pendingTask.quest(); + Task task = pendingTask.task(); + TaskProgress taskProgress = pendingTask.taskProgress(); + + super.debug("Player break a bed in BedWars", quest.getId(), task.getId(), player.getUniqueId()); + + Runnable increment = () -> { + int progress = TaskUtils.incrementIntegerTaskProgress(taskProgress); + super.debug("Incrementing task progress (now " + progress + ")", quest.getId(), task.getId(), player.getUniqueId()); + + int amount = (int) task.getConfigValue("amount"); + if (progress >= amount) { + super.debug("Marking task as complete", quest.getId(), task.getId(), player.getUniqueId()); + taskProgress.setCompleted(true); + } + + TaskUtils.sendTrackAdvancement(player, quest, task, pendingTask, amount); + }; + + increment.run(); + } + } +} diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BedWars1058FinalKillTask.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BedWars1058FinalKillTask.java new file mode 100644 index 00000000..5bfb441e --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BedWars1058FinalKillTask.java @@ -0,0 +1,68 @@ +package com.leonardobishop.quests.bukkit.tasktype.type.dependent; + +import com.andrei1058.bedwars.api.events.player.PlayerKillEvent; +import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; +import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType; +import com.leonardobishop.quests.bukkit.util.TaskUtils; +import com.leonardobishop.quests.bukkit.util.constraint.TaskConstraintSet; +import com.leonardobishop.quests.common.player.QPlayer; +import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress; +import com.leonardobishop.quests.common.quest.Quest; +import com.leonardobishop.quests.common.quest.Task; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +public final class BedWars1058FinalKillTask extends BukkitTaskType implements Listener { + + private final BukkitQuestsPlugin plugin; + + public BedWars1058FinalKillTask(BukkitQuestsPlugin plugin) { + super("bedwars1058_finalkill", TaskUtils.TASK_ATTRIBUTION_STRING, "Get a final kill in BedWars1058."); + this.plugin = plugin; + + super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount")); + super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount")); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerKill(PlayerKillEvent event) { + Player killer = event.getKiller(); + if (killer == null) { + return; + } + + if (!event.getCause().isFinalKill()) { + return; + } + + QPlayer qPlayer = plugin.getPlayerManager().getPlayer(killer.getUniqueId()); + if (qPlayer == null) { + return; + } + + for (TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(killer, qPlayer, this, TaskConstraintSet.ALL)) { + Quest quest = pendingTask.quest(); + Task task = pendingTask.task(); + TaskProgress taskProgress = pendingTask.taskProgress(); + + super.debug("Player got a final kill", quest.getId(), task.getId(), killer.getUniqueId()); + + Runnable increment = () -> { + int progress = TaskUtils.incrementIntegerTaskProgress(taskProgress); + super.debug("Incrementing task progress (now " + progress + ")", quest.getId(), task.getId(), killer.getUniqueId()); + + int amount = (int) task.getConfigValue("amount"); + if (progress >= amount) { + super.debug("Marking task as complete", quest.getId(), task.getId(), killer.getUniqueId()); + taskProgress.setCompleted(true); + } + + TaskUtils.sendTrackAdvancement(killer, quest, task, pendingTask, amount); + }; + + increment.run(); + } + } +} diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BedWars1058LoseTask.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BedWars1058LoseTask.java new file mode 100644 index 00000000..55b30a98 --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BedWars1058LoseTask.java @@ -0,0 +1,71 @@ +package com.leonardobishop.quests.bukkit.tasktype.type.dependent; + +import com.andrei1058.bedwars.api.events.gameplay.GameEndEvent; +import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; +import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType; +import com.leonardobishop.quests.bukkit.util.TaskUtils; +import com.leonardobishop.quests.bukkit.util.constraint.TaskConstraintSet; +import com.leonardobishop.quests.common.player.QPlayer; +import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress; +import com.leonardobishop.quests.common.quest.Quest; +import com.leonardobishop.quests.common.quest.Task; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +import java.util.UUID; + +public final class BedWars1058LoseTask extends BukkitTaskType implements Listener { + + private final BukkitQuestsPlugin plugin; + + public BedWars1058LoseTask(BukkitQuestsPlugin plugin) { + super("bedwars1058_lose", TaskUtils.TASK_ATTRIBUTION_STRING, "Lose a game of BedWars in BedWars1058."); + this.plugin = plugin; + + super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount")); + super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount")); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onGameEnd(GameEndEvent event) { + + for (UUID uuid : event.getLosers()) { + Player player = Bukkit.getPlayer(uuid); + + if (player == null) { + return; + } + + QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId()); + if (qPlayer == null) { + return; + } + + for (TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(player, qPlayer, this, TaskConstraintSet.ALL)) { + Quest quest = pendingTask.quest(); + Task task = pendingTask.task(); + TaskProgress taskProgress = pendingTask.taskProgress(); + + super.debug("Player lost a BedWars game", quest.getId(), task.getId(), player.getUniqueId()); + + Runnable increment = () -> { + int progress = TaskUtils.incrementIntegerTaskProgress(taskProgress); + super.debug("Incrementing task progress (now " + progress + ")", quest.getId(), task.getId(), player.getUniqueId()); + + int amount = (int) task.getConfigValue("amount"); + if (progress >= amount) { + super.debug("Marking task as complete", quest.getId(), task.getId(), player.getUniqueId()); + taskProgress.setCompleted(true); + } + + TaskUtils.sendTrackAdvancement(player, quest, task, pendingTask, amount); + }; + + increment.run(); + } + } + } +} diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BedWars1058WinTask.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BedWars1058WinTask.java new file mode 100644 index 00000000..8e2a445f --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BedWars1058WinTask.java @@ -0,0 +1,71 @@ +package com.leonardobishop.quests.bukkit.tasktype.type.dependent; + +import com.andrei1058.bedwars.api.events.gameplay.GameEndEvent; +import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; +import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType; +import com.leonardobishop.quests.bukkit.util.TaskUtils; +import com.leonardobishop.quests.bukkit.util.constraint.TaskConstraintSet; +import com.leonardobishop.quests.common.player.QPlayer; +import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress; +import com.leonardobishop.quests.common.quest.Quest; +import com.leonardobishop.quests.common.quest.Task; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +import java.util.UUID; + +public final class BedWars1058WinTask extends BukkitTaskType implements Listener { + + private final BukkitQuestsPlugin plugin; + + public BedWars1058WinTask(BukkitQuestsPlugin plugin) { + super("bedwars1058_win", TaskUtils.TASK_ATTRIBUTION_STRING, "Win a game of BedWars in BedWars1058."); + this.plugin = plugin; + + super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount")); + super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount")); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onGameEnd(GameEndEvent event) { + + for (UUID uuid : event.getWinners()) { + Player player = Bukkit.getPlayer(uuid); + + if (player == null) { + return; + } + + QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId()); + if (qPlayer == null) { + return; + } + + for (TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(player, qPlayer, this, TaskConstraintSet.ALL)) { + Quest quest = pendingTask.quest(); + Task task = pendingTask.task(); + TaskProgress taskProgress = pendingTask.taskProgress(); + + super.debug("Player won a BedWars game", quest.getId(), task.getId(), player.getUniqueId()); + + Runnable increment = () -> { + int progress = TaskUtils.incrementIntegerTaskProgress(taskProgress); + super.debug("Incrementing task progress (now " + progress + ")", quest.getId(), task.getId(), player.getUniqueId()); + + int amount = (int) task.getConfigValue("amount"); + if (progress >= amount) { + super.debug("Marking task as complete", quest.getId(), task.getId(), player.getUniqueId()); + taskProgress.setCompleted(true); + } + + TaskUtils.sendTrackAdvancement(player, quest, task, pendingTask, amount); + }; + + increment.run(); + } + } + } +} diff --git a/bukkit/src/main/resources/plugin.yml b/bukkit/src/main/resources/plugin.yml index 43ff65f8..95fcac3f 100644 --- a/bukkit/src/main/resources/plugin.yml +++ b/bukkit/src/main/resources/plugin.yml @@ -34,6 +34,7 @@ softdepend: - VotingPlugin - WildStacker - ZNPCsPlus +- BedWars1058 prefix: Quests api-version: "1.13" # allows new API features but Quests will still work pre-1.13 folia-supported: true -- cgit v1.2.3-70-g09d2