From 114109f6d407211cae7f1f236355e1a37c1763bf Mon Sep 17 00:00:00 2001 From: knighthat Date: Sat, 14 May 2022 21:59:30 -0500 Subject: [PATCH 1/5] fixing donate quest --- .../me/knighthat/apis/events/EventBase.java | 50 +++++++++ .../apis/events/instances/EnchantEvent.java | 19 ++++ .../events/instances/MoneyDonateEvent.java | 52 +++++++++ .../events/instances/ProjectileKillEvent.java | 37 ++++++ .../apis/events/instances/ShearEvent.java | 19 ++++ .../apis/events/instances/TameEvent.java | 19 ++++ .../instances/entity/CatchFishEvent.java | 33 ++++++ .../events/instances/entity/EntityEvent.java | 42 +++++++ .../instances/entity/KillPlayerEvent.java | 22 ++++ .../events/instances/entity/MilkCowEvent.java | 24 ++++ .../events/instances/entity/MobKillEvent.java | 23 ++++ .../instances/entity/NPCInteractEvent.java | 18 +++ .../instances/material/ConsumeEvent.java | 17 +++ .../instances/material/CraftingEvent.java | 24 ++++ .../instances/material/MaterialEvent.java | 42 +++++++ .../instances/material/block/BlockEvent.java | 35 ++++++ .../instances/material/block/BreakEvent.java | 20 ++++ .../instances/material/block/PlaceEvent.java | 19 ++++ .../wonka01/ServerQuests/gui/DonateMenu.java | 105 ++++++++++++++---- .../questcomponents/QuestController.java | 4 +- 20 files changed, 599 insertions(+), 25 deletions(-) create mode 100644 src/main/java/me/knighthat/apis/events/EventBase.java create mode 100644 src/main/java/me/knighthat/apis/events/instances/EnchantEvent.java create mode 100644 src/main/java/me/knighthat/apis/events/instances/MoneyDonateEvent.java create mode 100644 src/main/java/me/knighthat/apis/events/instances/ProjectileKillEvent.java create mode 100644 src/main/java/me/knighthat/apis/events/instances/ShearEvent.java create mode 100644 src/main/java/me/knighthat/apis/events/instances/TameEvent.java create mode 100644 src/main/java/me/knighthat/apis/events/instances/entity/CatchFishEvent.java create mode 100644 src/main/java/me/knighthat/apis/events/instances/entity/EntityEvent.java create mode 100644 src/main/java/me/knighthat/apis/events/instances/entity/KillPlayerEvent.java create mode 100644 src/main/java/me/knighthat/apis/events/instances/entity/MilkCowEvent.java create mode 100644 src/main/java/me/knighthat/apis/events/instances/entity/MobKillEvent.java create mode 100644 src/main/java/me/knighthat/apis/events/instances/entity/NPCInteractEvent.java create mode 100644 src/main/java/me/knighthat/apis/events/instances/material/ConsumeEvent.java create mode 100644 src/main/java/me/knighthat/apis/events/instances/material/CraftingEvent.java create mode 100644 src/main/java/me/knighthat/apis/events/instances/material/MaterialEvent.java create mode 100644 src/main/java/me/knighthat/apis/events/instances/material/block/BlockEvent.java create mode 100644 src/main/java/me/knighthat/apis/events/instances/material/block/BreakEvent.java create mode 100644 src/main/java/me/knighthat/apis/events/instances/material/block/PlaceEvent.java diff --git a/src/main/java/me/knighthat/apis/events/EventBase.java b/src/main/java/me/knighthat/apis/events/EventBase.java new file mode 100644 index 0000000..70c0f66 --- /dev/null +++ b/src/main/java/me/knighthat/apis/events/EventBase.java @@ -0,0 +1,50 @@ +package me.knighthat.apis.events; + +import lombok.Getter; +import lombok.NonNull; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import me.wonka01.ServerQuests.questcomponents.ActiveQuests; +import me.wonka01.ServerQuests.questcomponents.QuestController; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.Listener; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@Getter +public abstract class EventBase implements Listener { + + private final ServerQuests plugin; + private final ObjectiveType objectiveType; + + protected EventBase(ServerQuests plugin, @NonNull ObjectiveType objectiveType) { + + this.plugin = plugin; + this.objectiveType = objectiveType; + + plugin.getServer().getPluginManager().registerEvents(this, plugin); + } + + public abstract void event(T event); + + protected @NonNull ActiveQuests getActiveQuests() { + return plugin.config().getActiveQuests(); + } + + protected @NonNull List getControllers() { + + Stream result = getActiveQuests().getActiveQuestsList().stream(); + return result.filter(ins -> ins.getObjective().equals(this.objectiveType)).collect(Collectors.toList()); + } + + protected void update(@NonNull QuestController controller, @NonNull Player player, double amount) { + + controller.updateQuest(amount, player); + + if (controller.getQuestData().isGoalComplete()) + controller.endQuest(); + } +} diff --git a/src/main/java/me/knighthat/apis/events/instances/EnchantEvent.java b/src/main/java/me/knighthat/apis/events/instances/EnchantEvent.java new file mode 100644 index 0000000..21cbe61 --- /dev/null +++ b/src/main/java/me/knighthat/apis/events/instances/EnchantEvent.java @@ -0,0 +1,19 @@ +package me.knighthat.apis.events.instances; + +import lombok.NonNull; +import me.knighthat.apis.events.EventBase; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.event.enchantment.EnchantItemEvent; + +public class EnchantEvent extends EventBase { + + public EnchantEvent(ServerQuests plugin, @NonNull ObjectiveType objectiveType) { + super(plugin, objectiveType); + } + + @Override + public void event(EnchantItemEvent event) { + + } +} diff --git a/src/main/java/me/knighthat/apis/events/instances/MoneyDonateEvent.java b/src/main/java/me/knighthat/apis/events/instances/MoneyDonateEvent.java new file mode 100644 index 0000000..17c9510 --- /dev/null +++ b/src/main/java/me/knighthat/apis/events/instances/MoneyDonateEvent.java @@ -0,0 +1,52 @@ +package me.knighthat.apis.events.instances; + +import lombok.NonNull; +import me.knighthat.apis.events.EventBase; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import me.wonka01.ServerQuests.questcomponents.QuestController; +import net.milkbowl.vault.economy.Economy; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Range; + +public class MoneyDonateEvent extends EventBase { + + private final @NonNull Economy economy; + + public MoneyDonateEvent(ServerQuests plugin) { + super(plugin, ObjectiveType.GIVE_MONEY); + this.economy = plugin.getEconomy(); + } + + public boolean attemptToUpdate(@Range(from = 0, to = Long.MAX_VALUE) double amount, @NonNull Player player) { + + boolean canWithraw = false; + double money = amount; + + for (QuestController ctrl : super.getControllers()) { + + int goal = ctrl.getQuestData().getQuestGoal(); + double completed = ctrl.getQuestData().getAmountCompleted(); + + if (goal > 0 && (completed + amount) > goal) { + + money = amount - completed - goal; + economy.depositPlayer(player, completed + money - goal); + } + + super.update(ctrl, player, money); + canWithraw = true; + } + + if (canWithraw) + economy.withdrawPlayer(player, money); + + return canWithraw; + } + + @Deprecated + @Override + public void event(Event event) { + } +} diff --git a/src/main/java/me/knighthat/apis/events/instances/ProjectileKillEvent.java b/src/main/java/me/knighthat/apis/events/instances/ProjectileKillEvent.java new file mode 100644 index 0000000..7f62dd8 --- /dev/null +++ b/src/main/java/me/knighthat/apis/events/instances/ProjectileKillEvent.java @@ -0,0 +1,37 @@ +package me.knighthat.apis.events.instances; + +import lombok.NonNull; +import me.knighthat.apis.events.instances.entity.EntityEvent; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDeathEvent; + +public class ProjectileKillEvent extends EntityEvent { + + public ProjectileKillEvent(ServerQuests plugin, @NonNull ObjectiveType objectiveType) { + super(plugin, objectiveType); + } + + @Override + @EventHandler + public void event(EntityDeathEvent e) { + + LivingEntity entity = e.getEntity(); + + if (!(entity.getLastDamageCause() instanceof EntityDamageByEntityEvent)) + return; + + EntityDamageByEntityEvent event = (EntityDamageByEntityEvent) entity.getLastDamageCause(); + if (!(event.getDamager() instanceof Projectile)) return; + + Projectile projectile = (Projectile) event.getDamager(); + if (!(projectile.getShooter() instanceof Player)) return; + + attemptToUpdate((Player) projectile.getShooter(), entity); + } +} diff --git a/src/main/java/me/knighthat/apis/events/instances/ShearEvent.java b/src/main/java/me/knighthat/apis/events/instances/ShearEvent.java new file mode 100644 index 0000000..fc7c80a --- /dev/null +++ b/src/main/java/me/knighthat/apis/events/instances/ShearEvent.java @@ -0,0 +1,19 @@ +package me.knighthat.apis.events.instances; + +import lombok.NonNull; +import me.knighthat.apis.events.instances.entity.EntityEvent; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.event.player.PlayerShearEntityEvent; + +public class ShearEvent extends EntityEvent { + + public ShearEvent(ServerQuests plugin, @NonNull ObjectiveType objectiveType) { + super(plugin, objectiveType); + } + + @Override + public void event(PlayerShearEntityEvent event) { + + } +} diff --git a/src/main/java/me/knighthat/apis/events/instances/TameEvent.java b/src/main/java/me/knighthat/apis/events/instances/TameEvent.java new file mode 100644 index 0000000..b636a42 --- /dev/null +++ b/src/main/java/me/knighthat/apis/events/instances/TameEvent.java @@ -0,0 +1,19 @@ +package me.knighthat.apis.events.instances; + +import lombok.NonNull; +import me.knighthat.apis.events.instances.entity.EntityEvent; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.event.entity.EntityTameEvent; + +public class TameEvent extends EntityEvent { + + public TameEvent(ServerQuests plugin, @NonNull ObjectiveType objectiveType) { + super(plugin, objectiveType); + } + + @Override + public void event(EntityTameEvent event) { + + } +} diff --git a/src/main/java/me/knighthat/apis/events/instances/entity/CatchFishEvent.java b/src/main/java/me/knighthat/apis/events/instances/entity/CatchFishEvent.java new file mode 100644 index 0000000..05040d5 --- /dev/null +++ b/src/main/java/me/knighthat/apis/events/instances/entity/CatchFishEvent.java @@ -0,0 +1,33 @@ +package me.knighthat.apis.events.instances.entity; + +import me.knighthat.apis.events.EventBase; +import me.knighthat.apis.utils.Utils; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import me.wonka01.ServerQuests.questcomponents.QuestController; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerFishEvent; + +import java.util.List; + +public class CatchFishEvent extends EventBase { + + public CatchFishEvent(ServerQuests plugin) { + super(plugin, ObjectiveType.CATCH_FISH); + } + + @Override + @EventHandler + public void event(PlayerFishEvent event) { + + if (event.getCaught() == null || !event.getState().equals(PlayerFishEvent.State.CAUGHT_FISH)) + return; + + for (QuestController ctrl : super.getControllers()) { + + List entities = ctrl.getEventConstraints().getMobNames(); + if (entities.isEmpty() || Utils.contains(entities, event.getCaught().getType())) + super.update(ctrl, event.getPlayer(), 1); + } + } +} diff --git a/src/main/java/me/knighthat/apis/events/instances/entity/EntityEvent.java b/src/main/java/me/knighthat/apis/events/instances/entity/EntityEvent.java new file mode 100644 index 0000000..ef93dff --- /dev/null +++ b/src/main/java/me/knighthat/apis/events/instances/entity/EntityEvent.java @@ -0,0 +1,42 @@ +package me.knighthat.apis.events.instances.entity; + +import lombok.NonNull; +import me.knighthat.apis.events.EventBase; +import me.knighthat.apis.utils.Utils; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import me.wonka01.ServerQuests.questcomponents.QuestController; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Range; + +import java.util.List; + +public abstract class EntityEvent extends EventBase { + + protected EntityEvent(ServerQuests plugin, @NonNull ObjectiveType objectiveType) { + super(plugin, objectiveType); + } + + protected boolean attemptToUpdate(@NonNull HumanEntity player, @NonNull V value) { + return attemptToUpdate(player, value, 1); + } + + protected boolean attemptToUpdate(@NonNull HumanEntity player, @NonNull V value, + @Range(from = 0, to = Long.MAX_VALUE) int amount) { + + for (QuestController ctrl : super.getControllers()) { + + List materials = ctrl.getEventConstraints().getMobNames(); + if (materials.isEmpty() || Utils.contains(EntityType.values(), value)) { + + super.update(ctrl, (Player) player, amount); + return true; + } + } + + return false; + } +} diff --git a/src/main/java/me/knighthat/apis/events/instances/entity/KillPlayerEvent.java b/src/main/java/me/knighthat/apis/events/instances/entity/KillPlayerEvent.java new file mode 100644 index 0000000..6f81c7d --- /dev/null +++ b/src/main/java/me/knighthat/apis/events/instances/entity/KillPlayerEvent.java @@ -0,0 +1,22 @@ +package me.knighthat.apis.events.instances.entity; + +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.PlayerDeathEvent; + +public class KillPlayerEvent extends EntityEvent { + + public KillPlayerEvent(ServerQuests plugin) { + super(plugin, ObjectiveType.PLAYER_KILL); + } + + @Override + public void event(PlayerDeathEvent event) { + + Player killer = event.getEntity().getKiller(); + if (killer == null) return; + + super.attemptToUpdate(killer, event.getEntity().getType()); + } +} diff --git a/src/main/java/me/knighthat/apis/events/instances/entity/MilkCowEvent.java b/src/main/java/me/knighthat/apis/events/instances/entity/MilkCowEvent.java new file mode 100644 index 0000000..3035e77 --- /dev/null +++ b/src/main/java/me/knighthat/apis/events/instances/entity/MilkCowEvent.java @@ -0,0 +1,24 @@ +package me.knighthat.apis.events.instances.entity; + +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.Material; +import org.bukkit.entity.Cow; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; + +public class MilkCowEvent extends EntityEvent { + + public MilkCowEvent(ServerQuests plugin) { + super(plugin, ObjectiveType.MILK_COW); + } + + @Override + public void event(PlayerInteractAtEntityEvent event) { + + if (!(event.getRightClicked() instanceof Cow && + event.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.BUCKET))) + return; + + super.attemptToUpdate(event.getPlayer(), event.getRightClicked().getType()); + } +} diff --git a/src/main/java/me/knighthat/apis/events/instances/entity/MobKillEvent.java b/src/main/java/me/knighthat/apis/events/instances/entity/MobKillEvent.java new file mode 100644 index 0000000..995d870 --- /dev/null +++ b/src/main/java/me/knighthat/apis/events/instances/entity/MobKillEvent.java @@ -0,0 +1,23 @@ +package me.knighthat.apis.events.instances.entity; + +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDeathEvent; + +public class MobKillEvent extends EntityEvent { + + public MobKillEvent(ServerQuests plugin) { + super(plugin, ObjectiveType.MOB_KILL); + } + + @Override + public void event(EntityDeathEvent event) { + + Player killer = event.getEntity().getKiller(); + if (killer == null) + return; + + super.attemptToUpdate(killer, event.getEntityType()); + } +} diff --git a/src/main/java/me/knighthat/apis/events/instances/entity/NPCInteractEvent.java b/src/main/java/me/knighthat/apis/events/instances/entity/NPCInteractEvent.java new file mode 100644 index 0000000..9a3c4a8 --- /dev/null +++ b/src/main/java/me/knighthat/apis/events/instances/entity/NPCInteractEvent.java @@ -0,0 +1,18 @@ +package me.knighthat.apis.events.instances.entity; + +import lombok.NonNull; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; + +public class NPCInteractEvent extends EntityEvent { + + public NPCInteractEvent(ServerQuests plugin, @NonNull ObjectiveType objectiveType) { + super(plugin, objectiveType); + } + + @Override + public void event(PlayerInteractAtEntityEvent event) { + + } +} diff --git a/src/main/java/me/knighthat/apis/events/instances/material/ConsumeEvent.java b/src/main/java/me/knighthat/apis/events/instances/material/ConsumeEvent.java new file mode 100644 index 0000000..e4f76ee --- /dev/null +++ b/src/main/java/me/knighthat/apis/events/instances/material/ConsumeEvent.java @@ -0,0 +1,17 @@ +package me.knighthat.apis.events.instances.material; + +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.event.player.PlayerItemConsumeEvent; + +public class ConsumeEvent extends MaterialEvent { + + public ConsumeEvent(ServerQuests plugin) { + super(plugin, ObjectiveType.CONSUME_ITEM); + } + + @Override + public void event(PlayerItemConsumeEvent event) { + super.attemptToUpdate(event.getPlayer(), event.getItem().getType()); + } +} diff --git a/src/main/java/me/knighthat/apis/events/instances/material/CraftingEvent.java b/src/main/java/me/knighthat/apis/events/instances/material/CraftingEvent.java new file mode 100644 index 0000000..ba60a4f --- /dev/null +++ b/src/main/java/me/knighthat/apis/events/instances/material/CraftingEvent.java @@ -0,0 +1,24 @@ +package me.knighthat.apis.events.instances.material; + +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.inventory.CraftItemEvent; + +public class CraftingEvent extends MaterialEvent { + + public CraftingEvent(ServerQuests plugin) { + super(plugin, ObjectiveType.CRAFT_ITEM); + } + + @Override + @EventHandler + public void event(CraftItemEvent event) { + + int resultAmount = event.getRecipe().getResult().getAmount(); + Material resultType = event.getRecipe().getResult().getType(); + + super.attemptToUpdate(event.getWhoClicked(), resultType, resultAmount); + } +} diff --git a/src/main/java/me/knighthat/apis/events/instances/material/MaterialEvent.java b/src/main/java/me/knighthat/apis/events/instances/material/MaterialEvent.java new file mode 100644 index 0000000..e3de1b4 --- /dev/null +++ b/src/main/java/me/knighthat/apis/events/instances/material/MaterialEvent.java @@ -0,0 +1,42 @@ +package me.knighthat.apis.events.instances.material; + +import lombok.NonNull; +import me.knighthat.apis.events.EventBase; +import me.knighthat.apis.utils.Utils; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import me.wonka01.ServerQuests.questcomponents.QuestController; +import org.bukkit.Material; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Range; + +import java.util.List; + +public abstract class MaterialEvent extends EventBase { + + protected MaterialEvent(ServerQuests plugin, @NonNull ObjectiveType objectiveType) { + super(plugin, objectiveType); + } + + protected boolean attemptToUpdate(@NonNull HumanEntity player, @NonNull V value) { + return attemptToUpdate(player, value, 1); + } + + protected boolean attemptToUpdate(@NonNull HumanEntity player, @NonNull V value, + @Range(from = 0, to = Long.MAX_VALUE) int amount) { + + for (QuestController ctrl : super.getControllers()) { + + List materials = ctrl.getEventConstraints().getMaterialNames(); + if (materials.isEmpty() || Utils.contains(Material.values(), value)) { + + super.update(ctrl, (Player) player, amount); + return true; + } + } + + return false; + } +} diff --git a/src/main/java/me/knighthat/apis/events/instances/material/block/BlockEvent.java b/src/main/java/me/knighthat/apis/events/instances/material/block/BlockEvent.java new file mode 100644 index 0000000..759b536 --- /dev/null +++ b/src/main/java/me/knighthat/apis/events/instances/material/block/BlockEvent.java @@ -0,0 +1,35 @@ +package me.knighthat.apis.events.instances.material.block; + +import lombok.Getter; +import lombok.NonNull; +import me.knighthat.apis.events.instances.material.MaterialEvent; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.block.Block; +import org.bukkit.entity.HumanEntity; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.metadata.MetadataValue; + +@Getter +public abstract class BlockEvent extends MaterialEvent { + + private final @NonNull String state; + private final @NonNull MetadataValue metadata; + + protected BlockEvent(ServerQuests plugin, @NonNull ObjectiveType objectiveType, @NonNull String state) { + + super(plugin, objectiveType); + this.state = state; + this.metadata = new FixedMetadataValue(plugin, true); + } + + protected void attemptToUpdate(@NonNull org.bukkit.event.block.BlockEvent event, @NonNull HumanEntity breaker) { + + if (!event.getBlock().hasMetadata(state)) { + + Block block = event.getBlock(); + super.attemptToUpdate(breaker, block.getType()); + block.setMetadata(state, metadata); + } + } +} diff --git a/src/main/java/me/knighthat/apis/events/instances/material/block/BreakEvent.java b/src/main/java/me/knighthat/apis/events/instances/material/block/BreakEvent.java new file mode 100644 index 0000000..4ce7613 --- /dev/null +++ b/src/main/java/me/knighthat/apis/events/instances/material/block/BreakEvent.java @@ -0,0 +1,20 @@ +package me.knighthat.apis.events.instances.material.block; + +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.BlockBreakEvent; + +public class BreakEvent extends BlockEvent { + + + public BreakEvent(ServerQuests plugin) { + super(plugin, ObjectiveType.BLOCK_BREAK, "BROKEN"); + } + + @Override + @EventHandler + public void event(BlockBreakEvent event) { + super.attemptToUpdate(event, event.getPlayer()); + } +} diff --git a/src/main/java/me/knighthat/apis/events/instances/material/block/PlaceEvent.java b/src/main/java/me/knighthat/apis/events/instances/material/block/PlaceEvent.java new file mode 100644 index 0000000..c96f68d --- /dev/null +++ b/src/main/java/me/knighthat/apis/events/instances/material/block/PlaceEvent.java @@ -0,0 +1,19 @@ +package me.knighthat.apis.events.instances.material.block; + +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.BlockPlaceEvent; + +public class PlaceEvent extends BlockEvent { + + public PlaceEvent(ServerQuests plugin) { + super(plugin, ObjectiveType.BLOCK_PLACE, "PLACED"); + } + + @Override + @EventHandler + public void event(BlockPlaceEvent event) { + super.attemptToUpdate(event, event.getPlayer()); + } +} diff --git a/src/main/java/me/wonka01/ServerQuests/gui/DonateMenu.java b/src/main/java/me/wonka01/ServerQuests/gui/DonateMenu.java index 75e04a6..9991524 100644 --- a/src/main/java/me/wonka01/ServerQuests/gui/DonateMenu.java +++ b/src/main/java/me/wonka01/ServerQuests/gui/DonateMenu.java @@ -1,17 +1,27 @@ package me.wonka01.ServerQuests.gui; +import lombok.Getter; import lombok.NonNull; import me.knighthat.apis.menus.Menu; +import me.knighthat.apis.utils.Utils; import me.wonka01.ServerQuests.ServerQuests; -import me.wonka01.ServerQuests.events.GuiEvent; +import me.wonka01.ServerQuests.enums.ObjectiveType; import me.wonka01.ServerQuests.questcomponents.ActiveQuests; +import me.wonka01.ServerQuests.questcomponents.QuestController; +import me.wonka01.ServerQuests.questcomponents.QuestData; import org.bukkit.Material; +import org.bukkit.World; import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.ItemStack; +import java.util.ArrayList; +import java.util.List; + public class DonateMenu extends Menu { + @Getter private final int inputSlot = 22; private @NonNull Material borderItem; @@ -19,7 +29,7 @@ public DonateMenu(ServerQuests plugin, @NonNull Player owner) { super(plugin, owner, "donateMenu", 45); borderItem = Material.getMaterial(getPlugin().getConfig().getString("donateMenuItem")); - if(borderItem == null) { + if (borderItem == null) { borderItem = Material.DIAMOND_BLOCK; } } @@ -35,50 +45,97 @@ protected void setContents() { @Override protected void onItemClick(@NonNull InventoryClickEvent event) { - String cannotDonate = getPlugin().messages().message("cantDonateItem"); - GuiEvent handler = new GuiEvent(ActiveQuests.getActiveQuestsInstance()); - ItemStack atCursor = event.getCursor().clone(); - if (event.getRawSlot() > getSlots()) + if (event.getRawSlot() > getSlots()) { event.setCancelled(false); + return; + } - switch (event.getAction()) { + InventoryAction action = event.getAction(); + switch (action) { case PICKUP_ALL: case PICKUP_HALF: case PICKUP_ONE: case PICKUP_SOME: - if (event.getClickedInventory() != null) - if (!event.getClickedInventory().equals(getInventory())) - event.setCancelled(false); + if (getInventory().getItem(getInputSlot()) != null) + event.setCancelled(false); + break; + case PLACE_SOME: case PLACE_ALL: + case PLACE_ONE: - if (event.getCursor() != null) - if (handler.tryAddItemsToQuest(atCursor, getOwner())) { + if (event.getRawSlot() != inputSlot) + return; - getOwner().setItemOnCursor(new ItemStack(Material.AIR)); - } else { + ItemStack putDown = getInventory().getItem(getInputSlot()); + boolean isAcceptable = false; - getOwner().sendMessage(cannotDonate); - } - break; + for (QuestController ctrl : getControllers()) { - case PLACE_ONE: + QuestData data = ctrl.getQuestData(); + double total = data.getAmountCompleted() + putDown.getAmount(); + int goal = data.getQuestGoal(); - if (event.getCursor() != null) { - atCursor.setAmount(atCursor.getAmount() - 1); - if (handler.tryAddItemsToQuest(atCursor, getOwner())) { - getOwner().setItemOnCursor(atCursor); - } else { - getOwner().sendMessage(cannotDonate); + List requirements = ctrl.getEventConstraints().getMaterialNames(); + if (requirements.isEmpty() || Utils.contains(requirements, putDown)) { + + if (total > goal) { + + int diff = (int) total - goal; + + putDown.setAmount(putDown.getAmount() - diff); + getOwner().updateInventory(); + + ItemStack toCursor = event.getCursor().clone(); + toCursor.setAmount(toCursor.getAmount() + diff); + + getOwner().setItemOnCursor(toCursor); + } + + updateQuest(ctrl, putDown); + isAcceptable = true; } } + + if (!isAcceptable) { + + String cannotDonate = getPlugin().messages().message("cantDonateItem"); + getOwner().sendMessage(cannotDonate); + } default: break; } + } + + @Override + public @NonNull List getControllers() { + + List controllers = new ArrayList<>(); + + ActiveQuests activeQuests = getPlugin().config().getActiveQuests(); + for (QuestController ctrl : activeQuests.getActiveQuestsList()) + if (ctrl.getObjective().equals(ObjectiveType.GUI)) + controllers.add(ctrl); + + return controllers; + } + + private void updateQuest(@NonNull QuestController ctrl, @NonNull ItemStack item) { + + if (!isWorldAllowed(ctrl, getOwner().getWorld())) + return; + + if (ctrl.updateQuest(item.getAmount(), getOwner())) + ctrl.endQuest(); + } + + private boolean isWorldAllowed(@NonNull QuestController ctrl, @NonNull World world) { + List worlds = ctrl.getEventConstraints().getWorlds(); + return worlds.isEmpty() || Utils.contains(worlds, world.getName()); } } diff --git a/src/main/java/me/wonka01/ServerQuests/questcomponents/QuestController.java b/src/main/java/me/wonka01/ServerQuests/questcomponents/QuestController.java index 7ad0178..e0f1f9d 100644 --- a/src/main/java/me/wonka01/ServerQuests/questcomponents/QuestController.java +++ b/src/main/java/me/wonka01/ServerQuests/questcomponents/QuestController.java @@ -40,7 +40,7 @@ public QuestController(ServerQuests plugin, QuestData questData, QuestBar questB } } - public void updateQuest(double count, Player player) { + public boolean updateQuest(double count, Player player) { double amountToAdd = count; if (questData.hasGoal()) { @@ -53,6 +53,8 @@ public void updateQuest(double count, Player player) { playerComponent.savePlayerAction(player, amountToAdd); updateBossBar(); sendPlayerMessage(player); + + return getQuestData().isGoalComplete(); } public void endQuest() { From 752bc64c2afd4918e439eafdd8a67815e017207a Mon Sep 17 00:00:00 2001 From: knighthat Date: Sun, 15 May 2022 10:00:40 -0500 Subject: [PATCH 2/5] fixed Donate Quest accepts everything --- .../me/knighthat/apis/events/EventBase.java | 50 ----------- .../apis/events/instances/EnchantEvent.java | 19 ----- .../events/instances/MoneyDonateEvent.java | 52 ------------ .../events/instances/ProjectileKillEvent.java | 37 -------- .../apis/events/instances/ShearEvent.java | 19 ----- .../apis/events/instances/TameEvent.java | 19 ----- .../instances/entity/CatchFishEvent.java | 33 ------- .../events/instances/entity/EntityEvent.java | 42 --------- .../instances/entity/KillPlayerEvent.java | 22 ----- .../events/instances/entity/MilkCowEvent.java | 24 ------ .../events/instances/entity/MobKillEvent.java | 23 ----- .../instances/entity/NPCInteractEvent.java | 18 ---- .../instances/material/ConsumeEvent.java | 17 ---- .../instances/material/CraftingEvent.java | 24 ------ .../instances/material/MaterialEvent.java | 42 --------- .../instances/material/block/BlockEvent.java | 35 -------- .../instances/material/block/BreakEvent.java | 20 ----- .../instances/material/block/PlaceEvent.java | 19 ----- .../wonka01/ServerQuests/gui/DonateMenu.java | 85 +++++++++++++------ 19 files changed, 60 insertions(+), 540 deletions(-) delete mode 100644 src/main/java/me/knighthat/apis/events/EventBase.java delete mode 100644 src/main/java/me/knighthat/apis/events/instances/EnchantEvent.java delete mode 100644 src/main/java/me/knighthat/apis/events/instances/MoneyDonateEvent.java delete mode 100644 src/main/java/me/knighthat/apis/events/instances/ProjectileKillEvent.java delete mode 100644 src/main/java/me/knighthat/apis/events/instances/ShearEvent.java delete mode 100644 src/main/java/me/knighthat/apis/events/instances/TameEvent.java delete mode 100644 src/main/java/me/knighthat/apis/events/instances/entity/CatchFishEvent.java delete mode 100644 src/main/java/me/knighthat/apis/events/instances/entity/EntityEvent.java delete mode 100644 src/main/java/me/knighthat/apis/events/instances/entity/KillPlayerEvent.java delete mode 100644 src/main/java/me/knighthat/apis/events/instances/entity/MilkCowEvent.java delete mode 100644 src/main/java/me/knighthat/apis/events/instances/entity/MobKillEvent.java delete mode 100644 src/main/java/me/knighthat/apis/events/instances/entity/NPCInteractEvent.java delete mode 100644 src/main/java/me/knighthat/apis/events/instances/material/ConsumeEvent.java delete mode 100644 src/main/java/me/knighthat/apis/events/instances/material/CraftingEvent.java delete mode 100644 src/main/java/me/knighthat/apis/events/instances/material/MaterialEvent.java delete mode 100644 src/main/java/me/knighthat/apis/events/instances/material/block/BlockEvent.java delete mode 100644 src/main/java/me/knighthat/apis/events/instances/material/block/BreakEvent.java delete mode 100644 src/main/java/me/knighthat/apis/events/instances/material/block/PlaceEvent.java diff --git a/src/main/java/me/knighthat/apis/events/EventBase.java b/src/main/java/me/knighthat/apis/events/EventBase.java deleted file mode 100644 index 70c0f66..0000000 --- a/src/main/java/me/knighthat/apis/events/EventBase.java +++ /dev/null @@ -1,50 +0,0 @@ -package me.knighthat.apis.events; - -import lombok.Getter; -import lombok.NonNull; -import me.wonka01.ServerQuests.ServerQuests; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import me.wonka01.ServerQuests.questcomponents.ActiveQuests; -import me.wonka01.ServerQuests.questcomponents.QuestController; -import org.bukkit.entity.Player; -import org.bukkit.event.Event; -import org.bukkit.event.Listener; - -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -@Getter -public abstract class EventBase implements Listener { - - private final ServerQuests plugin; - private final ObjectiveType objectiveType; - - protected EventBase(ServerQuests plugin, @NonNull ObjectiveType objectiveType) { - - this.plugin = plugin; - this.objectiveType = objectiveType; - - plugin.getServer().getPluginManager().registerEvents(this, plugin); - } - - public abstract void event(T event); - - protected @NonNull ActiveQuests getActiveQuests() { - return plugin.config().getActiveQuests(); - } - - protected @NonNull List getControllers() { - - Stream result = getActiveQuests().getActiveQuestsList().stream(); - return result.filter(ins -> ins.getObjective().equals(this.objectiveType)).collect(Collectors.toList()); - } - - protected void update(@NonNull QuestController controller, @NonNull Player player, double amount) { - - controller.updateQuest(amount, player); - - if (controller.getQuestData().isGoalComplete()) - controller.endQuest(); - } -} diff --git a/src/main/java/me/knighthat/apis/events/instances/EnchantEvent.java b/src/main/java/me/knighthat/apis/events/instances/EnchantEvent.java deleted file mode 100644 index 21cbe61..0000000 --- a/src/main/java/me/knighthat/apis/events/instances/EnchantEvent.java +++ /dev/null @@ -1,19 +0,0 @@ -package me.knighthat.apis.events.instances; - -import lombok.NonNull; -import me.knighthat.apis.events.EventBase; -import me.wonka01.ServerQuests.ServerQuests; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import org.bukkit.event.enchantment.EnchantItemEvent; - -public class EnchantEvent extends EventBase { - - public EnchantEvent(ServerQuests plugin, @NonNull ObjectiveType objectiveType) { - super(plugin, objectiveType); - } - - @Override - public void event(EnchantItemEvent event) { - - } -} diff --git a/src/main/java/me/knighthat/apis/events/instances/MoneyDonateEvent.java b/src/main/java/me/knighthat/apis/events/instances/MoneyDonateEvent.java deleted file mode 100644 index 17c9510..0000000 --- a/src/main/java/me/knighthat/apis/events/instances/MoneyDonateEvent.java +++ /dev/null @@ -1,52 +0,0 @@ -package me.knighthat.apis.events.instances; - -import lombok.NonNull; -import me.knighthat.apis.events.EventBase; -import me.wonka01.ServerQuests.ServerQuests; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import me.wonka01.ServerQuests.questcomponents.QuestController; -import net.milkbowl.vault.economy.Economy; -import org.bukkit.entity.Player; -import org.bukkit.event.Event; -import org.jetbrains.annotations.Range; - -public class MoneyDonateEvent extends EventBase { - - private final @NonNull Economy economy; - - public MoneyDonateEvent(ServerQuests plugin) { - super(plugin, ObjectiveType.GIVE_MONEY); - this.economy = plugin.getEconomy(); - } - - public boolean attemptToUpdate(@Range(from = 0, to = Long.MAX_VALUE) double amount, @NonNull Player player) { - - boolean canWithraw = false; - double money = amount; - - for (QuestController ctrl : super.getControllers()) { - - int goal = ctrl.getQuestData().getQuestGoal(); - double completed = ctrl.getQuestData().getAmountCompleted(); - - if (goal > 0 && (completed + amount) > goal) { - - money = amount - completed - goal; - economy.depositPlayer(player, completed + money - goal); - } - - super.update(ctrl, player, money); - canWithraw = true; - } - - if (canWithraw) - economy.withdrawPlayer(player, money); - - return canWithraw; - } - - @Deprecated - @Override - public void event(Event event) { - } -} diff --git a/src/main/java/me/knighthat/apis/events/instances/ProjectileKillEvent.java b/src/main/java/me/knighthat/apis/events/instances/ProjectileKillEvent.java deleted file mode 100644 index 7f62dd8..0000000 --- a/src/main/java/me/knighthat/apis/events/instances/ProjectileKillEvent.java +++ /dev/null @@ -1,37 +0,0 @@ -package me.knighthat.apis.events.instances; - -import lombok.NonNull; -import me.knighthat.apis.events.instances.entity.EntityEvent; -import me.wonka01.ServerQuests.ServerQuests; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.entity.Projectile; -import org.bukkit.event.EventHandler; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDeathEvent; - -public class ProjectileKillEvent extends EntityEvent { - - public ProjectileKillEvent(ServerQuests plugin, @NonNull ObjectiveType objectiveType) { - super(plugin, objectiveType); - } - - @Override - @EventHandler - public void event(EntityDeathEvent e) { - - LivingEntity entity = e.getEntity(); - - if (!(entity.getLastDamageCause() instanceof EntityDamageByEntityEvent)) - return; - - EntityDamageByEntityEvent event = (EntityDamageByEntityEvent) entity.getLastDamageCause(); - if (!(event.getDamager() instanceof Projectile)) return; - - Projectile projectile = (Projectile) event.getDamager(); - if (!(projectile.getShooter() instanceof Player)) return; - - attemptToUpdate((Player) projectile.getShooter(), entity); - } -} diff --git a/src/main/java/me/knighthat/apis/events/instances/ShearEvent.java b/src/main/java/me/knighthat/apis/events/instances/ShearEvent.java deleted file mode 100644 index fc7c80a..0000000 --- a/src/main/java/me/knighthat/apis/events/instances/ShearEvent.java +++ /dev/null @@ -1,19 +0,0 @@ -package me.knighthat.apis.events.instances; - -import lombok.NonNull; -import me.knighthat.apis.events.instances.entity.EntityEvent; -import me.wonka01.ServerQuests.ServerQuests; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import org.bukkit.event.player.PlayerShearEntityEvent; - -public class ShearEvent extends EntityEvent { - - public ShearEvent(ServerQuests plugin, @NonNull ObjectiveType objectiveType) { - super(plugin, objectiveType); - } - - @Override - public void event(PlayerShearEntityEvent event) { - - } -} diff --git a/src/main/java/me/knighthat/apis/events/instances/TameEvent.java b/src/main/java/me/knighthat/apis/events/instances/TameEvent.java deleted file mode 100644 index b636a42..0000000 --- a/src/main/java/me/knighthat/apis/events/instances/TameEvent.java +++ /dev/null @@ -1,19 +0,0 @@ -package me.knighthat.apis.events.instances; - -import lombok.NonNull; -import me.knighthat.apis.events.instances.entity.EntityEvent; -import me.wonka01.ServerQuests.ServerQuests; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import org.bukkit.event.entity.EntityTameEvent; - -public class TameEvent extends EntityEvent { - - public TameEvent(ServerQuests plugin, @NonNull ObjectiveType objectiveType) { - super(plugin, objectiveType); - } - - @Override - public void event(EntityTameEvent event) { - - } -} diff --git a/src/main/java/me/knighthat/apis/events/instances/entity/CatchFishEvent.java b/src/main/java/me/knighthat/apis/events/instances/entity/CatchFishEvent.java deleted file mode 100644 index 05040d5..0000000 --- a/src/main/java/me/knighthat/apis/events/instances/entity/CatchFishEvent.java +++ /dev/null @@ -1,33 +0,0 @@ -package me.knighthat.apis.events.instances.entity; - -import me.knighthat.apis.events.EventBase; -import me.knighthat.apis.utils.Utils; -import me.wonka01.ServerQuests.ServerQuests; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import me.wonka01.ServerQuests.questcomponents.QuestController; -import org.bukkit.event.EventHandler; -import org.bukkit.event.player.PlayerFishEvent; - -import java.util.List; - -public class CatchFishEvent extends EventBase { - - public CatchFishEvent(ServerQuests plugin) { - super(plugin, ObjectiveType.CATCH_FISH); - } - - @Override - @EventHandler - public void event(PlayerFishEvent event) { - - if (event.getCaught() == null || !event.getState().equals(PlayerFishEvent.State.CAUGHT_FISH)) - return; - - for (QuestController ctrl : super.getControllers()) { - - List entities = ctrl.getEventConstraints().getMobNames(); - if (entities.isEmpty() || Utils.contains(entities, event.getCaught().getType())) - super.update(ctrl, event.getPlayer(), 1); - } - } -} diff --git a/src/main/java/me/knighthat/apis/events/instances/entity/EntityEvent.java b/src/main/java/me/knighthat/apis/events/instances/entity/EntityEvent.java deleted file mode 100644 index ef93dff..0000000 --- a/src/main/java/me/knighthat/apis/events/instances/entity/EntityEvent.java +++ /dev/null @@ -1,42 +0,0 @@ -package me.knighthat.apis.events.instances.entity; - -import lombok.NonNull; -import me.knighthat.apis.events.EventBase; -import me.knighthat.apis.utils.Utils; -import me.wonka01.ServerQuests.ServerQuests; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import me.wonka01.ServerQuests.questcomponents.QuestController; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.HumanEntity; -import org.bukkit.entity.Player; -import org.bukkit.event.Event; -import org.jetbrains.annotations.Range; - -import java.util.List; - -public abstract class EntityEvent extends EventBase { - - protected EntityEvent(ServerQuests plugin, @NonNull ObjectiveType objectiveType) { - super(plugin, objectiveType); - } - - protected boolean attemptToUpdate(@NonNull HumanEntity player, @NonNull V value) { - return attemptToUpdate(player, value, 1); - } - - protected boolean attemptToUpdate(@NonNull HumanEntity player, @NonNull V value, - @Range(from = 0, to = Long.MAX_VALUE) int amount) { - - for (QuestController ctrl : super.getControllers()) { - - List materials = ctrl.getEventConstraints().getMobNames(); - if (materials.isEmpty() || Utils.contains(EntityType.values(), value)) { - - super.update(ctrl, (Player) player, amount); - return true; - } - } - - return false; - } -} diff --git a/src/main/java/me/knighthat/apis/events/instances/entity/KillPlayerEvent.java b/src/main/java/me/knighthat/apis/events/instances/entity/KillPlayerEvent.java deleted file mode 100644 index 6f81c7d..0000000 --- a/src/main/java/me/knighthat/apis/events/instances/entity/KillPlayerEvent.java +++ /dev/null @@ -1,22 +0,0 @@ -package me.knighthat.apis.events.instances.entity; - -import me.wonka01.ServerQuests.ServerQuests; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import org.bukkit.entity.Player; -import org.bukkit.event.entity.PlayerDeathEvent; - -public class KillPlayerEvent extends EntityEvent { - - public KillPlayerEvent(ServerQuests plugin) { - super(plugin, ObjectiveType.PLAYER_KILL); - } - - @Override - public void event(PlayerDeathEvent event) { - - Player killer = event.getEntity().getKiller(); - if (killer == null) return; - - super.attemptToUpdate(killer, event.getEntity().getType()); - } -} diff --git a/src/main/java/me/knighthat/apis/events/instances/entity/MilkCowEvent.java b/src/main/java/me/knighthat/apis/events/instances/entity/MilkCowEvent.java deleted file mode 100644 index 3035e77..0000000 --- a/src/main/java/me/knighthat/apis/events/instances/entity/MilkCowEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package me.knighthat.apis.events.instances.entity; - -import me.wonka01.ServerQuests.ServerQuests; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import org.bukkit.Material; -import org.bukkit.entity.Cow; -import org.bukkit.event.player.PlayerInteractAtEntityEvent; - -public class MilkCowEvent extends EntityEvent { - - public MilkCowEvent(ServerQuests plugin) { - super(plugin, ObjectiveType.MILK_COW); - } - - @Override - public void event(PlayerInteractAtEntityEvent event) { - - if (!(event.getRightClicked() instanceof Cow && - event.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.BUCKET))) - return; - - super.attemptToUpdate(event.getPlayer(), event.getRightClicked().getType()); - } -} diff --git a/src/main/java/me/knighthat/apis/events/instances/entity/MobKillEvent.java b/src/main/java/me/knighthat/apis/events/instances/entity/MobKillEvent.java deleted file mode 100644 index 995d870..0000000 --- a/src/main/java/me/knighthat/apis/events/instances/entity/MobKillEvent.java +++ /dev/null @@ -1,23 +0,0 @@ -package me.knighthat.apis.events.instances.entity; - -import me.wonka01.ServerQuests.ServerQuests; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import org.bukkit.entity.Player; -import org.bukkit.event.entity.EntityDeathEvent; - -public class MobKillEvent extends EntityEvent { - - public MobKillEvent(ServerQuests plugin) { - super(plugin, ObjectiveType.MOB_KILL); - } - - @Override - public void event(EntityDeathEvent event) { - - Player killer = event.getEntity().getKiller(); - if (killer == null) - return; - - super.attemptToUpdate(killer, event.getEntityType()); - } -} diff --git a/src/main/java/me/knighthat/apis/events/instances/entity/NPCInteractEvent.java b/src/main/java/me/knighthat/apis/events/instances/entity/NPCInteractEvent.java deleted file mode 100644 index 9a3c4a8..0000000 --- a/src/main/java/me/knighthat/apis/events/instances/entity/NPCInteractEvent.java +++ /dev/null @@ -1,18 +0,0 @@ -package me.knighthat.apis.events.instances.entity; - -import lombok.NonNull; -import me.wonka01.ServerQuests.ServerQuests; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import org.bukkit.event.player.PlayerInteractAtEntityEvent; - -public class NPCInteractEvent extends EntityEvent { - - public NPCInteractEvent(ServerQuests plugin, @NonNull ObjectiveType objectiveType) { - super(plugin, objectiveType); - } - - @Override - public void event(PlayerInteractAtEntityEvent event) { - - } -} diff --git a/src/main/java/me/knighthat/apis/events/instances/material/ConsumeEvent.java b/src/main/java/me/knighthat/apis/events/instances/material/ConsumeEvent.java deleted file mode 100644 index e4f76ee..0000000 --- a/src/main/java/me/knighthat/apis/events/instances/material/ConsumeEvent.java +++ /dev/null @@ -1,17 +0,0 @@ -package me.knighthat.apis.events.instances.material; - -import me.wonka01.ServerQuests.ServerQuests; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import org.bukkit.event.player.PlayerItemConsumeEvent; - -public class ConsumeEvent extends MaterialEvent { - - public ConsumeEvent(ServerQuests plugin) { - super(plugin, ObjectiveType.CONSUME_ITEM); - } - - @Override - public void event(PlayerItemConsumeEvent event) { - super.attemptToUpdate(event.getPlayer(), event.getItem().getType()); - } -} diff --git a/src/main/java/me/knighthat/apis/events/instances/material/CraftingEvent.java b/src/main/java/me/knighthat/apis/events/instances/material/CraftingEvent.java deleted file mode 100644 index ba60a4f..0000000 --- a/src/main/java/me/knighthat/apis/events/instances/material/CraftingEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package me.knighthat.apis.events.instances.material; - -import me.wonka01.ServerQuests.ServerQuests; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import org.bukkit.Material; -import org.bukkit.event.EventHandler; -import org.bukkit.event.inventory.CraftItemEvent; - -public class CraftingEvent extends MaterialEvent { - - public CraftingEvent(ServerQuests plugin) { - super(plugin, ObjectiveType.CRAFT_ITEM); - } - - @Override - @EventHandler - public void event(CraftItemEvent event) { - - int resultAmount = event.getRecipe().getResult().getAmount(); - Material resultType = event.getRecipe().getResult().getType(); - - super.attemptToUpdate(event.getWhoClicked(), resultType, resultAmount); - } -} diff --git a/src/main/java/me/knighthat/apis/events/instances/material/MaterialEvent.java b/src/main/java/me/knighthat/apis/events/instances/material/MaterialEvent.java deleted file mode 100644 index e3de1b4..0000000 --- a/src/main/java/me/knighthat/apis/events/instances/material/MaterialEvent.java +++ /dev/null @@ -1,42 +0,0 @@ -package me.knighthat.apis.events.instances.material; - -import lombok.NonNull; -import me.knighthat.apis.events.EventBase; -import me.knighthat.apis.utils.Utils; -import me.wonka01.ServerQuests.ServerQuests; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import me.wonka01.ServerQuests.questcomponents.QuestController; -import org.bukkit.Material; -import org.bukkit.entity.HumanEntity; -import org.bukkit.entity.Player; -import org.bukkit.event.Event; -import org.jetbrains.annotations.Range; - -import java.util.List; - -public abstract class MaterialEvent extends EventBase { - - protected MaterialEvent(ServerQuests plugin, @NonNull ObjectiveType objectiveType) { - super(plugin, objectiveType); - } - - protected boolean attemptToUpdate(@NonNull HumanEntity player, @NonNull V value) { - return attemptToUpdate(player, value, 1); - } - - protected boolean attemptToUpdate(@NonNull HumanEntity player, @NonNull V value, - @Range(from = 0, to = Long.MAX_VALUE) int amount) { - - for (QuestController ctrl : super.getControllers()) { - - List materials = ctrl.getEventConstraints().getMaterialNames(); - if (materials.isEmpty() || Utils.contains(Material.values(), value)) { - - super.update(ctrl, (Player) player, amount); - return true; - } - } - - return false; - } -} diff --git a/src/main/java/me/knighthat/apis/events/instances/material/block/BlockEvent.java b/src/main/java/me/knighthat/apis/events/instances/material/block/BlockEvent.java deleted file mode 100644 index 759b536..0000000 --- a/src/main/java/me/knighthat/apis/events/instances/material/block/BlockEvent.java +++ /dev/null @@ -1,35 +0,0 @@ -package me.knighthat.apis.events.instances.material.block; - -import lombok.Getter; -import lombok.NonNull; -import me.knighthat.apis.events.instances.material.MaterialEvent; -import me.wonka01.ServerQuests.ServerQuests; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import org.bukkit.block.Block; -import org.bukkit.entity.HumanEntity; -import org.bukkit.metadata.FixedMetadataValue; -import org.bukkit.metadata.MetadataValue; - -@Getter -public abstract class BlockEvent extends MaterialEvent { - - private final @NonNull String state; - private final @NonNull MetadataValue metadata; - - protected BlockEvent(ServerQuests plugin, @NonNull ObjectiveType objectiveType, @NonNull String state) { - - super(plugin, objectiveType); - this.state = state; - this.metadata = new FixedMetadataValue(plugin, true); - } - - protected void attemptToUpdate(@NonNull org.bukkit.event.block.BlockEvent event, @NonNull HumanEntity breaker) { - - if (!event.getBlock().hasMetadata(state)) { - - Block block = event.getBlock(); - super.attemptToUpdate(breaker, block.getType()); - block.setMetadata(state, metadata); - } - } -} diff --git a/src/main/java/me/knighthat/apis/events/instances/material/block/BreakEvent.java b/src/main/java/me/knighthat/apis/events/instances/material/block/BreakEvent.java deleted file mode 100644 index 4ce7613..0000000 --- a/src/main/java/me/knighthat/apis/events/instances/material/block/BreakEvent.java +++ /dev/null @@ -1,20 +0,0 @@ -package me.knighthat.apis.events.instances.material.block; - -import me.wonka01.ServerQuests.ServerQuests; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import org.bukkit.event.EventHandler; -import org.bukkit.event.block.BlockBreakEvent; - -public class BreakEvent extends BlockEvent { - - - public BreakEvent(ServerQuests plugin) { - super(plugin, ObjectiveType.BLOCK_BREAK, "BROKEN"); - } - - @Override - @EventHandler - public void event(BlockBreakEvent event) { - super.attemptToUpdate(event, event.getPlayer()); - } -} diff --git a/src/main/java/me/knighthat/apis/events/instances/material/block/PlaceEvent.java b/src/main/java/me/knighthat/apis/events/instances/material/block/PlaceEvent.java deleted file mode 100644 index c96f68d..0000000 --- a/src/main/java/me/knighthat/apis/events/instances/material/block/PlaceEvent.java +++ /dev/null @@ -1,19 +0,0 @@ -package me.knighthat.apis.events.instances.material.block; - -import me.wonka01.ServerQuests.ServerQuests; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import org.bukkit.event.EventHandler; -import org.bukkit.event.block.BlockPlaceEvent; - -public class PlaceEvent extends BlockEvent { - - public PlaceEvent(ServerQuests plugin) { - super(plugin, ObjectiveType.BLOCK_PLACE, "PLACED"); - } - - @Override - @EventHandler - public void event(BlockPlaceEvent event) { - super.attemptToUpdate(event, event.getPlayer()); - } -} diff --git a/src/main/java/me/wonka01/ServerQuests/gui/DonateMenu.java b/src/main/java/me/wonka01/ServerQuests/gui/DonateMenu.java index 9991524..24af2c2 100644 --- a/src/main/java/me/wonka01/ServerQuests/gui/DonateMenu.java +++ b/src/main/java/me/wonka01/ServerQuests/gui/DonateMenu.java @@ -14,10 +14,14 @@ import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; +import org.bukkit.scheduler.BukkitRunnable; import java.util.ArrayList; import java.util.List; +import java.util.Map; public class DonateMenu extends Menu { @@ -35,7 +39,7 @@ public DonateMenu(ServerQuests plugin, @NonNull Player owner) { } @Override - protected void setContents() { + protected void setBorder() { ItemStack item = super.createItemStack(borderItem, " "); for (int slot = 0; slot < getSlots(); slot++) @@ -68,49 +72,80 @@ protected void onItemClick(@NonNull InventoryClickEvent event) { case PLACE_ALL: case PLACE_ONE: - if (event.getRawSlot() != inputSlot) + if (event.getRawSlot() != inputSlot) { return; + } else + event.setCancelled(false); + + new BukkitRunnable() { + @Override + public void run() { + + ItemStack putDown = getInventory().getItem(getInputSlot()); + boolean isAcceptable = false; + + for (QuestController ctrl : getControllers()) { - ItemStack putDown = getInventory().getItem(getInputSlot()); - boolean isAcceptable = false; + QuestData data = ctrl.getQuestData(); + double total = data.getAmountCompleted() + putDown.getAmount(); + int goal = data.getQuestGoal(); - for (QuestController ctrl : getControllers()) { + List requirements = ctrl.getEventConstraints().getMaterialNames(); + if (requirements.isEmpty() || Utils.contains(requirements, putDown.getType())) { - QuestData data = ctrl.getQuestData(); - double total = data.getAmountCompleted() + putDown.getAmount(); - int goal = data.getQuestGoal(); + int remaining = 0; - List requirements = ctrl.getEventConstraints().getMaterialNames(); - if (requirements.isEmpty() || Utils.contains(requirements, putDown)) { + if (total > goal) { - if (total > goal) { + int diff = (int) total - goal; + remaining = diff; - int diff = (int) total - goal; + ItemStack toCursor = event.getCursor().clone(); + toCursor.setAmount(toCursor.getAmount() + diff); - putDown.setAmount(putDown.getAmount() - diff); - getOwner().updateInventory(); + getOwner().setItemOnCursor(toCursor); + } - ItemStack toCursor = event.getCursor().clone(); - toCursor.setAmount(toCursor.getAmount() + diff); + updateQuest(ctrl, putDown); + isAcceptable = true; - getOwner().setItemOnCursor(toCursor); + putDown.setAmount(remaining); + getOwner().updateInventory(); + } } - updateQuest(ctrl, putDown); - isAcceptable = true; - } - } + if (!isAcceptable) { - if (!isAcceptable) { + String cannotDonate = getPlugin().messages().message("cantDonateItem"); + getOwner().sendMessage(cannotDonate); + } - String cannotDonate = getPlugin().messages().message("cantDonateItem"); - getOwner().sendMessage(cannotDonate); - } + } + }.runTaskLater(getPlugin(), 1); default: break; } } + @Override + protected void onClose(@NonNull InventoryCloseEvent event) { + + ItemStack leftover = getInventory().getItem(getInputSlot()); + if (leftover == null) return; + + PlayerInventory inventory = getOwner().getInventory(); + if (inventory.firstEmpty() > -1) { + + Map items = inventory.addItem(leftover); + items.forEach((slot, item) -> dropIt(item)); + } else + dropIt(leftover); + } + + private void dropIt(@NonNull ItemStack item) { + getOwner().getWorld().dropItemNaturally(getOwner().getLocation(), item); + } + @Override public @NonNull List getControllers() { From 1c85a108614ab04935e35d3e5e0b05b04964d2c7 Mon Sep 17 00:00:00 2001 From: knighthat Date: Sat, 21 May 2022 08:27:29 -0500 Subject: [PATCH 3/5] new EventAPI --- .../me/knighthat/apis/events/BlockEvent.java | 34 ++++++++++ .../me/knighthat/apis/events/EntityEvent.java | 40 ++++++++++++ .../me/knighthat/apis/events/EventBase.java | 64 +++++++++++++++++++ .../knighthat/apis/events/MaterialEvent.java | 40 ++++++++++++ .../ServerQuests/events/BreakEvent.java | 45 ------------- .../ServerQuests/events/CatchFishEvent.java | 32 ---------- .../events/ConsumeItemQuestEvent.java | 32 ---------- .../events/CraftItemQuestEvent.java | 34 ---------- .../events/EnchantItemQuestEvent.java | 35 ---------- .../wonka01/ServerQuests/events/GuiEvent.java | 40 ------------ .../ServerQuests/events/KillPlayerEvent.java | 32 ---------- .../ServerQuests/events/MilkCowEvent.java | 34 ---------- .../ServerQuests/events/MobKillEvent.java | 37 ----------- .../ServerQuests/events/MoneyQuest.java | 40 ------------ .../ServerQuests/events/NPCInteractEvent.java | 16 ----- .../ServerQuests/events/PlaceEvent.java | 44 ------------- .../events/ProjectileKillEvent.java | 48 -------------- .../ServerQuests/events/QuestListener.java | 41 ------------ .../ServerQuests/events/ShearEvent.java | 25 -------- .../ServerQuests/events/TameEvent.java | 27 -------- .../events/entities/CatchFishEvent.java | 29 +++++++++ .../events/entities/KillPlayerEvent.java | 23 +++++++ .../events/entities/MilkingEvent.java | 28 ++++++++ .../events/entities/MobKillEvent.java | 26 ++++++++ .../events/entities/NPCInteractEvent.java | 20 ++++++ .../events/entities/ProjectileKillEvent.java | 41 ++++++++++++ .../events/entities/ShearEvent.java | 20 ++++++ .../events/entities/TameEvent.java | 21 ++++++ .../events/materials/ConsumeEvent.java | 20 ++++++ .../events/materials/CraftingEvent.java | 25 ++++++++ .../events/materials/EnchantEvent.java | 20 ++++++ .../events/materials/blocks/BreakEvent.java | 21 ++++++ .../events/materials/blocks/PlaceEvent.java | 20 ++++++ 33 files changed, 492 insertions(+), 562 deletions(-) create mode 100644 src/main/java/me/knighthat/apis/events/BlockEvent.java create mode 100644 src/main/java/me/knighthat/apis/events/EntityEvent.java create mode 100644 src/main/java/me/knighthat/apis/events/EventBase.java create mode 100644 src/main/java/me/knighthat/apis/events/MaterialEvent.java delete mode 100644 src/main/java/me/wonka01/ServerQuests/events/BreakEvent.java delete mode 100644 src/main/java/me/wonka01/ServerQuests/events/CatchFishEvent.java delete mode 100644 src/main/java/me/wonka01/ServerQuests/events/ConsumeItemQuestEvent.java delete mode 100644 src/main/java/me/wonka01/ServerQuests/events/CraftItemQuestEvent.java delete mode 100644 src/main/java/me/wonka01/ServerQuests/events/EnchantItemQuestEvent.java delete mode 100644 src/main/java/me/wonka01/ServerQuests/events/GuiEvent.java delete mode 100644 src/main/java/me/wonka01/ServerQuests/events/KillPlayerEvent.java delete mode 100644 src/main/java/me/wonka01/ServerQuests/events/MilkCowEvent.java delete mode 100644 src/main/java/me/wonka01/ServerQuests/events/MobKillEvent.java delete mode 100644 src/main/java/me/wonka01/ServerQuests/events/MoneyQuest.java delete mode 100644 src/main/java/me/wonka01/ServerQuests/events/NPCInteractEvent.java delete mode 100644 src/main/java/me/wonka01/ServerQuests/events/PlaceEvent.java delete mode 100644 src/main/java/me/wonka01/ServerQuests/events/ProjectileKillEvent.java delete mode 100644 src/main/java/me/wonka01/ServerQuests/events/QuestListener.java delete mode 100644 src/main/java/me/wonka01/ServerQuests/events/ShearEvent.java delete mode 100644 src/main/java/me/wonka01/ServerQuests/events/TameEvent.java create mode 100644 src/main/java/me/wonka01/ServerQuests/events/entities/CatchFishEvent.java create mode 100644 src/main/java/me/wonka01/ServerQuests/events/entities/KillPlayerEvent.java create mode 100644 src/main/java/me/wonka01/ServerQuests/events/entities/MilkingEvent.java create mode 100644 src/main/java/me/wonka01/ServerQuests/events/entities/MobKillEvent.java create mode 100644 src/main/java/me/wonka01/ServerQuests/events/entities/NPCInteractEvent.java create mode 100644 src/main/java/me/wonka01/ServerQuests/events/entities/ProjectileKillEvent.java create mode 100644 src/main/java/me/wonka01/ServerQuests/events/entities/ShearEvent.java create mode 100644 src/main/java/me/wonka01/ServerQuests/events/entities/TameEvent.java create mode 100644 src/main/java/me/wonka01/ServerQuests/events/materials/ConsumeEvent.java create mode 100644 src/main/java/me/wonka01/ServerQuests/events/materials/CraftingEvent.java create mode 100644 src/main/java/me/wonka01/ServerQuests/events/materials/EnchantEvent.java create mode 100644 src/main/java/me/wonka01/ServerQuests/events/materials/blocks/BreakEvent.java create mode 100644 src/main/java/me/wonka01/ServerQuests/events/materials/blocks/PlaceEvent.java diff --git a/src/main/java/me/knighthat/apis/events/BlockEvent.java b/src/main/java/me/knighthat/apis/events/BlockEvent.java new file mode 100644 index 0000000..7b55cd4 --- /dev/null +++ b/src/main/java/me/knighthat/apis/events/BlockEvent.java @@ -0,0 +1,34 @@ +package me.knighthat.apis.events; + +import lombok.Getter; +import lombok.NonNull; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.block.Block; +import org.bukkit.entity.HumanEntity; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.metadata.MetadataValue; + +@Getter +public abstract class BlockEvent extends MaterialEvent { + + private final @NonNull String state; + private final @NonNull MetadataValue metadata; + + protected BlockEvent(ServerQuests plugin, @NonNull ObjectiveType objectiveType, @NonNull String state) { + + super(plugin, objectiveType); + this.state = state; + this.metadata = new FixedMetadataValue(plugin, true); + } + + protected void attemptToUpdate(@NonNull org.bukkit.event.block.BlockEvent event, @NonNull HumanEntity breaker) { + + if (!event.getBlock().hasMetadata(state)) { + + Block block = event.getBlock(); + super.attemptToUpdate(breaker, block.getType()); + block.setMetadata(state, metadata); + } + } +} diff --git a/src/main/java/me/knighthat/apis/events/EntityEvent.java b/src/main/java/me/knighthat/apis/events/EntityEvent.java new file mode 100644 index 0000000..9b6a1d0 --- /dev/null +++ b/src/main/java/me/knighthat/apis/events/EntityEvent.java @@ -0,0 +1,40 @@ +package me.knighthat.apis.events; + +import lombok.NonNull; +import me.knighthat.apis.utils.Utils; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import me.wonka01.ServerQuests.questcomponents.QuestController; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Range; + +import java.util.List; + +public abstract class EntityEvent extends EventBase { + + protected EntityEvent(ServerQuests plugin, @NonNull ObjectiveType objectiveType) { + super(plugin, objectiveType); + } + + protected boolean attemptToUpdate(@NonNull HumanEntity player, @NonNull V value) { + return attemptToUpdate(player, value, 1); + } + + protected boolean attemptToUpdate(@NonNull HumanEntity player, @NonNull V value, + @Range(from = 0, to = Long.MAX_VALUE) int amount) { + + for (QuestController ctrl : super.getControllers()) { + + List entities = ctrl.getEventConstraints().getMobNames(); + if (entities.isEmpty() || Utils.contains(entities, value)) { + + super.update(ctrl, (Player) player, amount); + return true; + } + } + + return false; + } +} diff --git a/src/main/java/me/knighthat/apis/events/EventBase.java b/src/main/java/me/knighthat/apis/events/EventBase.java new file mode 100644 index 0000000..7604bc7 --- /dev/null +++ b/src/main/java/me/knighthat/apis/events/EventBase.java @@ -0,0 +1,64 @@ +package me.knighthat.apis.events; + +import lombok.Getter; +import lombok.NonNull; +import me.knighthat.apis.utils.Utils; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import me.wonka01.ServerQuests.questcomponents.ActiveQuests; +import me.wonka01.ServerQuests.questcomponents.QuestController; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.Listener; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@Getter +public abstract class EventBase implements Listener { + + private final ServerQuests plugin; + private final ObjectiveType objectiveType; + + protected EventBase(ServerQuests plugin, @NonNull ObjectiveType objectiveType) { + + this.plugin = plugin; + this.objectiveType = objectiveType; + + plugin.getServer().getPluginManager().registerEvents(this, plugin); + } + + public abstract void event(T event); + + protected @NonNull ActiveQuests getActiveQuests() { + return plugin.config().getActiveQuests(); + } + + protected @NonNull List getControllers() { + + Stream result = getActiveQuests().getActiveQuestsList().stream(); + return result.filter(ins -> ins.getObjective().equals(this.objectiveType)).collect(Collectors.toList()); + } + + protected void update(@NonNull QuestController controller, @NonNull Player player, double amount) { + + if (!isWorldAllowed(controller, player.getWorld())) return; + + if (controller.updateQuest(amount, player)) + controller.endQuest(); + } + + private boolean isWorldAllowed(@NonNull QuestController controller, @NonNull World world) { + + List worlds = controller.getEventConstraints().getWorlds(); + return worlds.isEmpty() || Utils.contains(worlds, world.getName()); + } + + protected void update(@NonNull Player player) { + + for (QuestController ctrl : getControllers()) + update(ctrl, player, 1); + } +} diff --git a/src/main/java/me/knighthat/apis/events/MaterialEvent.java b/src/main/java/me/knighthat/apis/events/MaterialEvent.java new file mode 100644 index 0000000..46d69a5 --- /dev/null +++ b/src/main/java/me/knighthat/apis/events/MaterialEvent.java @@ -0,0 +1,40 @@ +package me.knighthat.apis.events; + +import lombok.NonNull; +import me.knighthat.apis.utils.Utils; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import me.wonka01.ServerQuests.questcomponents.QuestController; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Range; + +import java.util.List; + +public abstract class MaterialEvent extends EventBase { + + protected MaterialEvent(ServerQuests plugin, @NonNull ObjectiveType objectiveType) { + super(plugin, objectiveType); + } + + protected boolean attemptToUpdate(@NonNull HumanEntity player, @NonNull V value) { + return attemptToUpdate(player, value, 1); + } + + protected boolean attemptToUpdate(@NonNull HumanEntity player, @NonNull V value, + @Range(from = 0, to = Long.MAX_VALUE) int amount) { + + for (QuestController ctrl : super.getControllers()) { + + List materials = ctrl.getEventConstraints().getMaterialNames(); + if (materials.isEmpty() || Utils.contains(materials, value)) { + + super.update(ctrl, (Player) player, amount); + return true; + } + } + + return false; + } +} diff --git a/src/main/java/me/wonka01/ServerQuests/events/BreakEvent.java b/src/main/java/me/wonka01/ServerQuests/events/BreakEvent.java deleted file mode 100644 index f7f8c38..0000000 --- a/src/main/java/me/wonka01/ServerQuests/events/BreakEvent.java +++ /dev/null @@ -1,45 +0,0 @@ -package me.wonka01.ServerQuests.events; - -import me.knighthat.apis.utils.Utils; -import me.wonka01.ServerQuests.ServerQuests; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import me.wonka01.ServerQuests.questcomponents.ActiveQuests; -import me.wonka01.ServerQuests.questcomponents.QuestController; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.metadata.FixedMetadataValue; -import org.bukkit.metadata.MetadataValue; -import org.bukkit.plugin.java.JavaPlugin; - -import java.util.List; - -public class BreakEvent extends QuestListener implements Listener { - - private final String BROKEN = "BROKEN"; - private final MetadataValue meta = new FixedMetadataValue(JavaPlugin.getPlugin(ServerQuests.class), true); - - - public BreakEvent(ActiveQuests activeQuests) { - super(activeQuests); - } - - @EventHandler - public void onBlockBreakEvent(BlockBreakEvent event) { - if (event.getBlock().hasMetadata(BROKEN)) { - return; - } - - - List controllers = tryGetControllersOfEventType(ObjectiveType.BLOCK_BREAK); - for (QuestController controller : controllers) { - List materials = controller.getEventConstraints().getMaterialNames(); - - if (materials.isEmpty() || Utils.contains(materials, event.getBlock().getType())) { - event.getBlock().setMetadata(BROKEN, meta); - updateQuest(controller, event.getPlayer(), 1); - break; - } - } - } -} diff --git a/src/main/java/me/wonka01/ServerQuests/events/CatchFishEvent.java b/src/main/java/me/wonka01/ServerQuests/events/CatchFishEvent.java deleted file mode 100644 index a747a86..0000000 --- a/src/main/java/me/wonka01/ServerQuests/events/CatchFishEvent.java +++ /dev/null @@ -1,32 +0,0 @@ -package me.wonka01.ServerQuests.events; - -import me.knighthat.apis.utils.Utils; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import me.wonka01.ServerQuests.questcomponents.ActiveQuests; -import me.wonka01.ServerQuests.questcomponents.QuestController; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerFishEvent; - -import java.util.List; - -public class CatchFishEvent extends QuestListener implements Listener { - - public CatchFishEvent(ActiveQuests activeQuests) { - super(activeQuests); - } - - @EventHandler - public void onCatchFish(PlayerFishEvent event) { - if (event.getState() == PlayerFishEvent.State.CAUGHT_FISH) { - List controllers = tryGetControllersOfEventType(ObjectiveType.CATCH_FISH); - String fishName = event.getCaught().getName(); - - for (QuestController controller : controllers) { - List entities = controller.getEventConstraints().getMobNames(); - if(entities.isEmpty() || Utils.contains(entities, fishName)) - updateQuest(controller, event.getPlayer(), 1); - } - } - } -} diff --git a/src/main/java/me/wonka01/ServerQuests/events/ConsumeItemQuestEvent.java b/src/main/java/me/wonka01/ServerQuests/events/ConsumeItemQuestEvent.java deleted file mode 100644 index acdeced..0000000 --- a/src/main/java/me/wonka01/ServerQuests/events/ConsumeItemQuestEvent.java +++ /dev/null @@ -1,32 +0,0 @@ -package me.wonka01.ServerQuests.events; - -import me.knighthat.apis.utils.Utils; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import me.wonka01.ServerQuests.questcomponents.ActiveQuests; -import me.wonka01.ServerQuests.questcomponents.QuestController; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerItemConsumeEvent; - -import java.util.List; - -public class ConsumeItemQuestEvent extends QuestListener implements Listener { - - public ConsumeItemQuestEvent(ActiveQuests activeQuests) { - super(activeQuests); - } - - @EventHandler - public void onConsumeItem(PlayerItemConsumeEvent event) { - Player player = event.getPlayer(); - - List controllers = tryGetControllersOfEventType(ObjectiveType.CONSUME_ITEM); - for (QuestController controller : controllers) { - List materials = controller.getEventConstraints().getMaterialNames(); - - if (materials.isEmpty() || Utils.contains(materials, event.getItem().getType())) - updateQuest(controller, player, 1); - } - } -} diff --git a/src/main/java/me/wonka01/ServerQuests/events/CraftItemQuestEvent.java b/src/main/java/me/wonka01/ServerQuests/events/CraftItemQuestEvent.java deleted file mode 100644 index 5abaa5c..0000000 --- a/src/main/java/me/wonka01/ServerQuests/events/CraftItemQuestEvent.java +++ /dev/null @@ -1,34 +0,0 @@ -package me.wonka01.ServerQuests.events; - -import me.knighthat.apis.utils.Utils; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import me.wonka01.ServerQuests.questcomponents.ActiveQuests; -import me.wonka01.ServerQuests.questcomponents.QuestController; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.inventory.CraftItemEvent; - -import java.util.List; - -public class CraftItemQuestEvent extends QuestListener implements Listener { - - public CraftItemQuestEvent(ActiveQuests activeQuests) { - super(activeQuests); - } - - @EventHandler - public void onCraftItem(CraftItemEvent event) { - Player player = (Player) event.getWhoClicked(); - - int amount = event.getRecipe().getResult().getAmount(); - - List controllers = tryGetControllersOfEventType(ObjectiveType.CRAFT_ITEM); - for (QuestController controller : controllers) { - List materials = controller.getEventConstraints().getMaterialNames(); - - if (materials.isEmpty() || Utils.contains(materials, event.getRecipe().getResult().getType())) - updateQuest(controller, player, amount); - } - } -} diff --git a/src/main/java/me/wonka01/ServerQuests/events/EnchantItemQuestEvent.java b/src/main/java/me/wonka01/ServerQuests/events/EnchantItemQuestEvent.java deleted file mode 100644 index 527c9b0..0000000 --- a/src/main/java/me/wonka01/ServerQuests/events/EnchantItemQuestEvent.java +++ /dev/null @@ -1,35 +0,0 @@ -package me.wonka01.ServerQuests.events; - -import me.knighthat.apis.utils.Utils; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import me.wonka01.ServerQuests.questcomponents.ActiveQuests; -import me.wonka01.ServerQuests.questcomponents.QuestController; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.enchantment.EnchantItemEvent; - -import java.util.List; - -public class EnchantItemQuestEvent extends QuestListener implements Listener { - - public EnchantItemQuestEvent(ActiveQuests activeQuests) { - super(activeQuests); - } - - @EventHandler - public void onEnchantItem(EnchantItemEvent event) { - Player player = event.getEnchanter(); - - String materialName = event.getItem().getType().toString(); - - List controllers = tryGetControllersOfEventType(ObjectiveType.ENCHANT_ITEM); - for (QuestController controller : controllers) { - List materials = controller.getEventConstraints().getMaterialNames(); - - if (materials.isEmpty() || Utils.contains(materials, materialName)) { - updateQuest(controller, player, 1); - } - } - } -} diff --git a/src/main/java/me/wonka01/ServerQuests/events/GuiEvent.java b/src/main/java/me/wonka01/ServerQuests/events/GuiEvent.java deleted file mode 100644 index d69f986..0000000 --- a/src/main/java/me/wonka01/ServerQuests/events/GuiEvent.java +++ /dev/null @@ -1,40 +0,0 @@ -package me.wonka01.ServerQuests.events; - -import me.knighthat.apis.utils.Utils; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import me.wonka01.ServerQuests.questcomponents.ActiveQuests; -import me.wonka01.ServerQuests.questcomponents.QuestController; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; - -import java.util.List; - -public class GuiEvent extends QuestListener { - - public GuiEvent(ActiveQuests activeQuests) { - super(activeQuests); - } - - public boolean tryAddItemsToQuest(ItemStack itemsToAdd, Player player) { - List controllers = tryGetControllersOfEventType(ObjectiveType.GUI); - boolean isItemUsed = false; - for (QuestController controller : controllers) { - - List materials = controller.getEventConstraints().getMaterialNames(); - int goal = controller.getQuestData().getQuestGoal(); - int completed = controller.getQuestData().getQuestGoal(); - - if (materials.isEmpty() || Utils.contains(materials, itemsToAdd.getType())) { - if (goal > 0 && completed + itemsToAdd.getAmount() > goal) { - int difference = completed + itemsToAdd.getAmount() - goal; - ItemStack itemsToReturn = new ItemStack(itemsToAdd.getType(), difference); - player.getInventory().addItem(itemsToReturn); - } - - updateQuest(controller, player, itemsToAdd.getAmount()); - isItemUsed = true; - } - } - return isItemUsed; - } -} diff --git a/src/main/java/me/wonka01/ServerQuests/events/KillPlayerEvent.java b/src/main/java/me/wonka01/ServerQuests/events/KillPlayerEvent.java deleted file mode 100644 index 877ac01..0000000 --- a/src/main/java/me/wonka01/ServerQuests/events/KillPlayerEvent.java +++ /dev/null @@ -1,32 +0,0 @@ -package me.wonka01.ServerQuests.events; - -import me.wonka01.ServerQuests.enums.ObjectiveType; -import me.wonka01.ServerQuests.questcomponents.ActiveQuests; -import me.wonka01.ServerQuests.questcomponents.QuestController; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; - -import java.util.List; - -public class KillPlayerEvent extends QuestListener implements Listener { - - public KillPlayerEvent(ActiveQuests activeQuests) { - super(activeQuests); - } - - @EventHandler - public void onKillPlayer(PlayerDeathEvent event) { - - Player killer = event.getEntity().getKiller(); - if (killer == null) { - return; - } - - List controllers = tryGetControllersOfEventType(ObjectiveType.PLAYER_KILL); - for (QuestController controller : controllers) { - updateQuest(controller, killer, 1); - } - } -} diff --git a/src/main/java/me/wonka01/ServerQuests/events/MilkCowEvent.java b/src/main/java/me/wonka01/ServerQuests/events/MilkCowEvent.java deleted file mode 100644 index e32fead..0000000 --- a/src/main/java/me/wonka01/ServerQuests/events/MilkCowEvent.java +++ /dev/null @@ -1,34 +0,0 @@ -package me.wonka01.ServerQuests.events; - -import me.wonka01.ServerQuests.enums.ObjectiveType; -import me.wonka01.ServerQuests.questcomponents.ActiveQuests; -import me.wonka01.ServerQuests.questcomponents.QuestController; -import org.bukkit.Material; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerInteractEntityEvent; - -import java.util.List; - -public class MilkCowEvent extends QuestListener implements Listener { - - public MilkCowEvent(ActiveQuests activeQuests) { - super(activeQuests); - } - - @EventHandler - public void onPlayerMilkCow(PlayerInteractEntityEvent event) { - Player player = event.getPlayer(); - Entity cow = event.getRightClicked(); - if (!(cow instanceof Cow) || !(player.getInventory().getItemInMainHand().getType().equals(Material.BUCKET))) { - return; - } - List controllers = tryGetControllersOfEventType(ObjectiveType.MILK_COW); - for (QuestController controller : controllers) { - updateQuest(controller, player, 1); - } - } -} diff --git a/src/main/java/me/wonka01/ServerQuests/events/MobKillEvent.java b/src/main/java/me/wonka01/ServerQuests/events/MobKillEvent.java deleted file mode 100644 index 4158615..0000000 --- a/src/main/java/me/wonka01/ServerQuests/events/MobKillEvent.java +++ /dev/null @@ -1,37 +0,0 @@ -package me.wonka01.ServerQuests.events; - -import me.knighthat.apis.utils.Utils; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import me.wonka01.ServerQuests.questcomponents.ActiveQuests; -import me.wonka01.ServerQuests.questcomponents.QuestController; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDeathEvent; - -import java.util.List; - -public class MobKillEvent extends QuestListener implements Listener { - - public MobKillEvent(ActiveQuests activeQuests) { - super(activeQuests); - } - - @EventHandler - public void OnPlayerKillMob(EntityDeathEvent event) { - - LivingEntity entity = event.getEntity(); - Player killer = entity.getKiller(); - if (killer == null) { - return; - } - - List controllers = tryGetControllersOfEventType(ObjectiveType.MOB_KILL); - for (QuestController controller : controllers) { - List mobTypes = controller.getEventConstraints().getMobNames(); - if(mobTypes.isEmpty() || Utils.contains(mobTypes, entity.getType())) - updateQuest(controller, killer, 1); - } - } -} diff --git a/src/main/java/me/wonka01/ServerQuests/events/MoneyQuest.java b/src/main/java/me/wonka01/ServerQuests/events/MoneyQuest.java deleted file mode 100644 index 3443a6d..0000000 --- a/src/main/java/me/wonka01/ServerQuests/events/MoneyQuest.java +++ /dev/null @@ -1,40 +0,0 @@ -package me.wonka01.ServerQuests.events; - -import me.wonka01.ServerQuests.enums.ObjectiveType; -import me.wonka01.ServerQuests.questcomponents.ActiveQuests; -import me.wonka01.ServerQuests.questcomponents.QuestController; -import net.milkbowl.vault.economy.Economy; -import org.bukkit.entity.Player; - -import java.util.List; - -public class MoneyQuest extends QuestListener { - private Economy economy; - public MoneyQuest(ActiveQuests activeQuests, Economy economy) { - super(activeQuests); - this.economy = economy; - } - - public boolean tryAddItemsToQuest(double money, Player player) { - List controllers = tryGetControllersOfEventType(ObjectiveType.GIVE_MONEY); - boolean hasMoneyQuest = false; - double amountToAdd = money; - - for (QuestController controller : controllers) { - int goal = controller.getQuestData().getQuestGoal(); - double completed = controller.getQuestData().getAmountCompleted(); - if (goal > 0 && completed + (int)money > goal) { - amountToAdd = money - completed + goal; - double difference = completed + money - goal; - economy.depositPlayer(player, difference); - } - - updateQuest(controller, player, amountToAdd); - hasMoneyQuest = true; - } - if(hasMoneyQuest) { - economy.withdrawPlayer(player, amountToAdd); - } - return hasMoneyQuest; - } -} diff --git a/src/main/java/me/wonka01/ServerQuests/events/NPCInteractEvent.java b/src/main/java/me/wonka01/ServerQuests/events/NPCInteractEvent.java deleted file mode 100644 index 198a9ed..0000000 --- a/src/main/java/me/wonka01/ServerQuests/events/NPCInteractEvent.java +++ /dev/null @@ -1,16 +0,0 @@ -package me.wonka01.ServerQuests.events; - -import me.wonka01.ServerQuests.enums.ObjectiveType; -import me.wonka01.ServerQuests.questcomponents.ActiveQuests; -import org.bukkit.event.Listener; - -public class NPCInteractEvent extends QuestListener implements Listener { - - private final ObjectiveType TYPE = ObjectiveType.MOB_KILL; - - public NPCInteractEvent(ActiveQuests activeQuests) { - - super(activeQuests); - } - -} diff --git a/src/main/java/me/wonka01/ServerQuests/events/PlaceEvent.java b/src/main/java/me/wonka01/ServerQuests/events/PlaceEvent.java deleted file mode 100644 index 6351c5c..0000000 --- a/src/main/java/me/wonka01/ServerQuests/events/PlaceEvent.java +++ /dev/null @@ -1,44 +0,0 @@ -package me.wonka01.ServerQuests.events; - -import me.knighthat.apis.utils.Utils; -import me.wonka01.ServerQuests.ServerQuests; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import me.wonka01.ServerQuests.questcomponents.ActiveQuests; -import me.wonka01.ServerQuests.questcomponents.QuestController; -import org.bukkit.block.Block; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.metadata.FixedMetadataValue; -import org.bukkit.metadata.MetadataValue; -import org.bukkit.plugin.java.JavaPlugin; - -import java.util.List; - - -public class PlaceEvent extends QuestListener implements Listener { - - private final String PLACED = "PLACED"; - private final MetadataValue meta = new FixedMetadataValue(JavaPlugin.getPlugin(ServerQuests.class), true); - - public PlaceEvent(ActiveQuests activeQuests) { - super(activeQuests); - } - - @EventHandler - public void onBlockPlace(BlockPlaceEvent event) { - Block block = event.getBlock(); - if (block.hasMetadata(PLACED)) { - return; - } - - List controllers = tryGetControllersOfEventType(ObjectiveType.BLOCK_PLACE); - for (QuestController controller : controllers) { - List materials = controller.getEventConstraints().getMaterialNames(); - if (materials.isEmpty() || Utils.contains(materials, block.getType())) { - updateQuest(controller, event.getPlayer(), 1); - block.setMetadata(PLACED, meta); - } - } - } -} diff --git a/src/main/java/me/wonka01/ServerQuests/events/ProjectileKillEvent.java b/src/main/java/me/wonka01/ServerQuests/events/ProjectileKillEvent.java deleted file mode 100644 index b95b5b8..0000000 --- a/src/main/java/me/wonka01/ServerQuests/events/ProjectileKillEvent.java +++ /dev/null @@ -1,48 +0,0 @@ -package me.wonka01.ServerQuests.events; - -import me.knighthat.apis.utils.Utils; -import me.wonka01.ServerQuests.enums.ObjectiveType; -import me.wonka01.ServerQuests.questcomponents.ActiveQuests; -import me.wonka01.ServerQuests.questcomponents.QuestController; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.entity.Projectile; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDeathEvent; - -import java.util.List; - -public class ProjectileKillEvent extends QuestListener implements Listener { - - public ProjectileKillEvent(ActiveQuests activeQuests) { - super(activeQuests); - } - - @EventHandler - public void onProjectileKill(EntityDeathEvent event) { - if (!(event.getEntity().getLastDamageCause() instanceof EntityDamageByEntityEvent)) { - return; - } - - EntityDamageByEntityEvent damageEvent = (EntityDamageByEntityEvent) event.getEntity().getLastDamageCause(); - Entity damager = damageEvent.getDamager(); - - if (damager instanceof Projectile) { - Projectile projectile = (Projectile) damager; - if (projectile.getShooter() != null && projectile.getShooter() instanceof Player) { - Player player = (Player) projectile.getShooter(); - - List controllers = tryGetControllersOfEventType(ObjectiveType.PROJ_KILL); - for (QuestController controller : controllers) { - List entities = controller.getEventConstraints().getMobNames(); - if(entities.isEmpty() || Utils.contains(entities, event.getEntity().getType())) - updateQuest(controller, player, 1); - } - } - } - - } - -} diff --git a/src/main/java/me/wonka01/ServerQuests/events/QuestListener.java b/src/main/java/me/wonka01/ServerQuests/events/QuestListener.java deleted file mode 100644 index 7b96bd0..0000000 --- a/src/main/java/me/wonka01/ServerQuests/events/QuestListener.java +++ /dev/null @@ -1,41 +0,0 @@ -package me.wonka01.ServerQuests.events; - -import me.wonka01.ServerQuests.enums.ObjectiveType; -import me.wonka01.ServerQuests.questcomponents.ActiveQuests; -import me.wonka01.ServerQuests.questcomponents.QuestController; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.List; - -public abstract class QuestListener { - protected ActiveQuests activeQuests; - - public QuestListener(ActiveQuests activeQuests) { - this.activeQuests = activeQuests; - } - - protected void updateQuest(QuestController controller, Player player, double amount) { - if (!isEnabledInWorld(controller.getEventConstraints().getWorlds(), player.getWorld().getName())) { - return; - } - controller.updateQuest(amount, player); - if (controller.getQuestData().isGoalComplete()) { - controller.endQuest(); - } - } - - protected List tryGetControllersOfEventType(ObjectiveType type) { - List controllers = new ArrayList<>(); - for (QuestController controller : activeQuests.getActiveQuestsList()) { - if (controller.getObjective().equals(type)) { - controllers.add(controller); - } - } - return controllers; - } - - private boolean isEnabledInWorld(List worldList, String world) { - return worldList.isEmpty() || worldList.contains(world); - } -} diff --git a/src/main/java/me/wonka01/ServerQuests/events/ShearEvent.java b/src/main/java/me/wonka01/ServerQuests/events/ShearEvent.java deleted file mode 100644 index 8481c22..0000000 --- a/src/main/java/me/wonka01/ServerQuests/events/ShearEvent.java +++ /dev/null @@ -1,25 +0,0 @@ -package me.wonka01.ServerQuests.events; - -import me.wonka01.ServerQuests.enums.ObjectiveType; -import me.wonka01.ServerQuests.questcomponents.ActiveQuests; -import me.wonka01.ServerQuests.questcomponents.QuestController; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerShearEntityEvent; - -import java.util.List; - -public class ShearEvent extends QuestListener implements Listener { - - public ShearEvent(ActiveQuests activeQuests) { - super(activeQuests); - } - - @EventHandler - public void onSheer(PlayerShearEntityEvent shearEvent) { - List controllers = tryGetControllersOfEventType(ObjectiveType.SHEAR); - for (QuestController controller : controllers) { - updateQuest(controller, shearEvent.getPlayer(), 1); - } - } -} diff --git a/src/main/java/me/wonka01/ServerQuests/events/TameEvent.java b/src/main/java/me/wonka01/ServerQuests/events/TameEvent.java deleted file mode 100644 index 9632c34..0000000 --- a/src/main/java/me/wonka01/ServerQuests/events/TameEvent.java +++ /dev/null @@ -1,27 +0,0 @@ -package me.wonka01.ServerQuests.events; - -import me.wonka01.ServerQuests.enums.ObjectiveType; -import me.wonka01.ServerQuests.questcomponents.ActiveQuests; -import me.wonka01.ServerQuests.questcomponents.QuestController; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityTameEvent; - -import java.util.List; - -public class TameEvent extends QuestListener implements Listener { - public TameEvent(ActiveQuests activeQuests) { - super(activeQuests); - } - - @EventHandler - public void onTameEvent(EntityTameEvent tameEvent) { - if (tameEvent.getOwner() instanceof Player) { - List controllers = tryGetControllersOfEventType(ObjectiveType.TAME); - for (QuestController controller : controllers) { - updateQuest(controller, (Player) tameEvent.getOwner(), 1); - } - } - } -} diff --git a/src/main/java/me/wonka01/ServerQuests/events/entities/CatchFishEvent.java b/src/main/java/me/wonka01/ServerQuests/events/entities/CatchFishEvent.java new file mode 100644 index 0000000..13054d6 --- /dev/null +++ b/src/main/java/me/wonka01/ServerQuests/events/entities/CatchFishEvent.java @@ -0,0 +1,29 @@ +package me.wonka01.ServerQuests.events.entities; + +import me.knighthat.apis.events.EntityEvent; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.entity.Item; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerFishEvent; +import org.bukkit.inventory.ItemStack; + +public class CatchFishEvent extends EntityEvent { + + public CatchFishEvent(ServerQuests plugin) { + super(plugin, ObjectiveType.CATCH_FISH); + } + + @Override + @EventHandler + public void event(PlayerFishEvent event) { + + if (event.getCaught() == null || !event.getState().equals(PlayerFishEvent.State.CAUGHT_FISH)) + return; + + Item caught = (Item) event.getCaught(); + ItemStack converted = caught.getItemStack(); + + super.attemptToUpdate(event.getPlayer(), converted.getType()); + } +} diff --git a/src/main/java/me/wonka01/ServerQuests/events/entities/KillPlayerEvent.java b/src/main/java/me/wonka01/ServerQuests/events/entities/KillPlayerEvent.java new file mode 100644 index 0000000..ef34058 --- /dev/null +++ b/src/main/java/me/wonka01/ServerQuests/events/entities/KillPlayerEvent.java @@ -0,0 +1,23 @@ +package me.wonka01.ServerQuests.events.entities; + +import me.knighthat.apis.events.EntityEvent; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.PlayerDeathEvent; + +public class KillPlayerEvent extends EntityEvent { + + public KillPlayerEvent(ServerQuests plugin) { + super(plugin, ObjectiveType.PLAYER_KILL); + } + + @Override + public void event(PlayerDeathEvent event) { + + Player killer = event.getEntity().getKiller(); + if (killer == null) return; + + super.attemptToUpdate(killer, event.getEntity().getType()); + } +} diff --git a/src/main/java/me/wonka01/ServerQuests/events/entities/MilkingEvent.java b/src/main/java/me/wonka01/ServerQuests/events/entities/MilkingEvent.java new file mode 100644 index 0000000..41634c3 --- /dev/null +++ b/src/main/java/me/wonka01/ServerQuests/events/entities/MilkingEvent.java @@ -0,0 +1,28 @@ +package me.wonka01.ServerQuests.events.entities; + +import me.knighthat.apis.events.EntityEvent; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.Material; +import org.bukkit.entity.Cow; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; + +public class MilkingEvent extends EntityEvent { + + public MilkingEvent(ServerQuests plugin) { + super(plugin, ObjectiveType.MILK_COW); + } + + @Override + @EventHandler + public void event(PlayerInteractAtEntityEvent event) { + + + if (!(event.getRightClicked() instanceof Cow && + event.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.BUCKET))) + return; + + super.attemptToUpdate(event.getPlayer(), event.getRightClicked().getType()); + } +} diff --git a/src/main/java/me/wonka01/ServerQuests/events/entities/MobKillEvent.java b/src/main/java/me/wonka01/ServerQuests/events/entities/MobKillEvent.java new file mode 100644 index 0000000..dc273e7 --- /dev/null +++ b/src/main/java/me/wonka01/ServerQuests/events/entities/MobKillEvent.java @@ -0,0 +1,26 @@ +package me.wonka01.ServerQuests.events.entities; + +import me.knighthat.apis.events.EntityEvent; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDeathEvent; + +public class MobKillEvent extends EntityEvent { + + public MobKillEvent(ServerQuests plugin) { + super(plugin, ObjectiveType.MOB_KILL); + } + + @Override + @EventHandler + public void event(EntityDeathEvent event) { + + Player killer = event.getEntity().getKiller(); + if (killer == null) + return; + + super.attemptToUpdate(killer, event.getEntityType()); + } +} diff --git a/src/main/java/me/wonka01/ServerQuests/events/entities/NPCInteractEvent.java b/src/main/java/me/wonka01/ServerQuests/events/entities/NPCInteractEvent.java new file mode 100644 index 0000000..b7b8571 --- /dev/null +++ b/src/main/java/me/wonka01/ServerQuests/events/entities/NPCInteractEvent.java @@ -0,0 +1,20 @@ +package me.wonka01.ServerQuests.events.entities; + +import me.knighthat.apis.events.EntityEvent; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; + +public class NPCInteractEvent extends EntityEvent { + + public NPCInteractEvent(ServerQuests plugin) { + super(plugin, ObjectiveType.MOB_KILL); + } + + @Override + @EventHandler + public void event(PlayerInteractAtEntityEvent event) { + + } +} diff --git a/src/main/java/me/wonka01/ServerQuests/events/entities/ProjectileKillEvent.java b/src/main/java/me/wonka01/ServerQuests/events/entities/ProjectileKillEvent.java new file mode 100644 index 0000000..c6dfb02 --- /dev/null +++ b/src/main/java/me/wonka01/ServerQuests/events/entities/ProjectileKillEvent.java @@ -0,0 +1,41 @@ +package me.wonka01.ServerQuests.events.entities; + +import me.knighthat.apis.events.EntityEvent; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDeathEvent; + +public class ProjectileKillEvent extends EntityEvent { + + public ProjectileKillEvent(ServerQuests plugin) { + super(plugin, ObjectiveType.PROJ_KILL); + } + + @Override + @EventHandler + public void event(EntityDeathEvent event) { + + try { + + LivingEntity target = event.getEntity(); + + if (!target.getLastDamageCause().getCause().equals(EntityDamageEvent.DamageCause.PROJECTILE)) + return; + + EntityDamageByEntityEvent e = (EntityDamageByEntityEvent) target.getLastDamageCause(); + Projectile projectile = (Projectile) e.getDamager(); + if (!(projectile.getShooter() instanceof Player)) return; + + super.attemptToUpdate((HumanEntity) projectile.getShooter(), target.getType()); + + } catch (NullPointerException ignored) { + } + } +} diff --git a/src/main/java/me/wonka01/ServerQuests/events/entities/ShearEvent.java b/src/main/java/me/wonka01/ServerQuests/events/entities/ShearEvent.java new file mode 100644 index 0000000..69778b1 --- /dev/null +++ b/src/main/java/me/wonka01/ServerQuests/events/entities/ShearEvent.java @@ -0,0 +1,20 @@ +package me.wonka01.ServerQuests.events.entities; + +import me.knighthat.apis.events.EntityEvent; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerShearEntityEvent; + +public class ShearEvent extends EntityEvent { + + public ShearEvent(ServerQuests plugin) { + super(plugin, ObjectiveType.SHEAR); + } + + @Override + @EventHandler + public void event(PlayerShearEntityEvent event) { + super.update(event.getPlayer()); + } +} diff --git a/src/main/java/me/wonka01/ServerQuests/events/entities/TameEvent.java b/src/main/java/me/wonka01/ServerQuests/events/entities/TameEvent.java new file mode 100644 index 0000000..0ba0150 --- /dev/null +++ b/src/main/java/me/wonka01/ServerQuests/events/entities/TameEvent.java @@ -0,0 +1,21 @@ +package me.wonka01.ServerQuests.events.entities; + +import me.knighthat.apis.events.EntityEvent; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.entity.HumanEntity; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityTameEvent; + +public class TameEvent extends EntityEvent { + + public TameEvent(ServerQuests plugin) { + super(plugin, ObjectiveType.TAME); + } + + @Override + @EventHandler + public void event(EntityTameEvent event) { + super.attemptToUpdate((HumanEntity) event.getOwner(), event.getEntity().getType()); + } +} diff --git a/src/main/java/me/wonka01/ServerQuests/events/materials/ConsumeEvent.java b/src/main/java/me/wonka01/ServerQuests/events/materials/ConsumeEvent.java new file mode 100644 index 0000000..906c68d --- /dev/null +++ b/src/main/java/me/wonka01/ServerQuests/events/materials/ConsumeEvent.java @@ -0,0 +1,20 @@ +package me.wonka01.ServerQuests.events.materials; + +import me.knighthat.apis.events.MaterialEvent; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerItemConsumeEvent; + +public class ConsumeEvent extends MaterialEvent { + + public ConsumeEvent(ServerQuests plugin) { + super(plugin, ObjectiveType.CONSUME_ITEM); + } + + @Override + @EventHandler + public void event(PlayerItemConsumeEvent event) { + super.attemptToUpdate(event.getPlayer(), event.getItem().getType()); + } +} diff --git a/src/main/java/me/wonka01/ServerQuests/events/materials/CraftingEvent.java b/src/main/java/me/wonka01/ServerQuests/events/materials/CraftingEvent.java new file mode 100644 index 0000000..9c4a021 --- /dev/null +++ b/src/main/java/me/wonka01/ServerQuests/events/materials/CraftingEvent.java @@ -0,0 +1,25 @@ +package me.wonka01.ServerQuests.events.materials; + +import me.knighthat.apis.events.MaterialEvent; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.inventory.CraftItemEvent; + +public class CraftingEvent extends MaterialEvent { + + public CraftingEvent(ServerQuests plugin) { + super(plugin, ObjectiveType.CRAFT_ITEM); + } + + @Override + @EventHandler + public void event(CraftItemEvent event) { + + int resultAmount = event.getRecipe().getResult().getAmount(); + Material resultType = event.getRecipe().getResult().getType(); + + super.attemptToUpdate(event.getWhoClicked(), resultType, resultAmount); + } +} diff --git a/src/main/java/me/wonka01/ServerQuests/events/materials/EnchantEvent.java b/src/main/java/me/wonka01/ServerQuests/events/materials/EnchantEvent.java new file mode 100644 index 0000000..4bca674 --- /dev/null +++ b/src/main/java/me/wonka01/ServerQuests/events/materials/EnchantEvent.java @@ -0,0 +1,20 @@ +package me.wonka01.ServerQuests.events.materials; + +import me.knighthat.apis.events.MaterialEvent; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.event.EventHandler; +import org.bukkit.event.enchantment.EnchantItemEvent; + +public class EnchantEvent extends MaterialEvent { + + public EnchantEvent(ServerQuests plugin) { + super(plugin, ObjectiveType.ENCHANT_ITEM); + } + + @Override + @EventHandler + public void event(EnchantItemEvent event) { + super.attemptToUpdate(event.getEnchanter(), event.getItem().getType()); + } +} diff --git a/src/main/java/me/wonka01/ServerQuests/events/materials/blocks/BreakEvent.java b/src/main/java/me/wonka01/ServerQuests/events/materials/blocks/BreakEvent.java new file mode 100644 index 0000000..4b3412e --- /dev/null +++ b/src/main/java/me/wonka01/ServerQuests/events/materials/blocks/BreakEvent.java @@ -0,0 +1,21 @@ +package me.wonka01.ServerQuests.events.materials.blocks; + +import me.knighthat.apis.events.BlockEvent; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.BlockBreakEvent; + +public class BreakEvent extends BlockEvent { + + + public BreakEvent(ServerQuests plugin) { + super(plugin, ObjectiveType.BLOCK_BREAK, "BROKEN"); + } + + @Override + @EventHandler + public void event(BlockBreakEvent event) { + super.attemptToUpdate(event, event.getPlayer()); + } +} diff --git a/src/main/java/me/wonka01/ServerQuests/events/materials/blocks/PlaceEvent.java b/src/main/java/me/wonka01/ServerQuests/events/materials/blocks/PlaceEvent.java new file mode 100644 index 0000000..7aacdac --- /dev/null +++ b/src/main/java/me/wonka01/ServerQuests/events/materials/blocks/PlaceEvent.java @@ -0,0 +1,20 @@ +package me.wonka01.ServerQuests.events.materials.blocks; + +import me.knighthat.apis.events.BlockEvent; +import me.wonka01.ServerQuests.ServerQuests; +import me.wonka01.ServerQuests.enums.ObjectiveType; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.BlockPlaceEvent; + +public class PlaceEvent extends BlockEvent { + + public PlaceEvent(ServerQuests plugin) { + super(plugin, ObjectiveType.BLOCK_PLACE, "PLACED"); + } + + @Override + @EventHandler + public void event(BlockPlaceEvent event) { + super.attemptToUpdate(event, event.getPlayer()); + } +} From a6db60433287b2a20bf5b1385a85b723876de1c7 Mon Sep 17 00:00:00 2001 From: knighthat Date: Sat, 21 May 2022 08:29:24 -0500 Subject: [PATCH 4/5] Made DonateMenu work in 1.18 --- .../java/me/knighthat/apis/menus/Menu.java | 3 +- .../me/knighthat/apis/menus/MenuEvents.java | 10 +-- .../wonka01/ServerQuests/gui/DonateMenu.java | 89 +++++++++---------- 3 files changed, 47 insertions(+), 55 deletions(-) diff --git a/src/main/java/me/knighthat/apis/menus/Menu.java b/src/main/java/me/knighthat/apis/menus/Menu.java index 73cdefc..46e8997 100644 --- a/src/main/java/me/knighthat/apis/menus/Menu.java +++ b/src/main/java/me/knighthat/apis/menus/Menu.java @@ -3,11 +3,11 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NonNull; +import me.knighthat.apis.utils.Colorization; import me.wonka01.ServerQuests.ServerQuests; import me.wonka01.ServerQuests.questcomponents.ActiveQuests; import me.wonka01.ServerQuests.questcomponents.QuestController; import me.wonka01.ServerQuests.questcomponents.QuestData; -import me.knighthat.apis.utils.Colorization; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -45,6 +45,7 @@ protected Menu(ServerQuests plugin, @NonNull Player owner, @NonNull String title String title = plugin.messages().string(titlePath); this.inventory = Bukkit.createInventory(this, slots, title); + } protected void setBorder() { diff --git a/src/main/java/me/knighthat/apis/menus/MenuEvents.java b/src/main/java/me/knighthat/apis/menus/MenuEvents.java index 658d1a8..d3b44aa 100644 --- a/src/main/java/me/knighthat/apis/menus/MenuEvents.java +++ b/src/main/java/me/knighthat/apis/menus/MenuEvents.java @@ -12,15 +12,15 @@ public class MenuEvents implements Listener { @EventHandler public void inventoryClickEvent(InventoryClickEvent event) { - Inventory topInventory = event.getView().getTopInventory(); - if (topInventory.getHolder() instanceof Menu) { + Inventory clicked = event.getClickedInventory(); - Menu menu = (Menu) topInventory.getHolder(); + if (clicked.getHolder() instanceof Menu) { + + Menu menu = (Menu) clicked.getHolder(); event.setCancelled(true); - if (event.getCurrentItem() != null) - menu.onItemClick(event); + menu.onItemClick(event); } } diff --git a/src/main/java/me/wonka01/ServerQuests/gui/DonateMenu.java b/src/main/java/me/wonka01/ServerQuests/gui/DonateMenu.java index 24af2c2..33b3297 100644 --- a/src/main/java/me/wonka01/ServerQuests/gui/DonateMenu.java +++ b/src/main/java/me/wonka01/ServerQuests/gui/DonateMenu.java @@ -50,81 +50,72 @@ protected void setBorder() { @Override protected void onItemClick(@NonNull InventoryClickEvent event) { - if (event.getRawSlot() > getSlots()) { - event.setCancelled(false); - return; - } - InventoryAction action = event.getAction(); switch (action) { - case PICKUP_ALL: - case PICKUP_HALF: - case PICKUP_ONE: - case PICKUP_SOME: - - if (getInventory().getItem(getInputSlot()) != null) - event.setCancelled(false); - - break; - case PLACE_SOME: case PLACE_ALL: case PLACE_ONE: - if (event.getRawSlot() != inputSlot) { - return; - } else - event.setCancelled(false); + if (event.getSlot() == inputSlot) + new BukkitRunnable() { + @Override + public void run() { - new BukkitRunnable() { - @Override - public void run() { + ItemStack putDown = getInventory().getItem(getInputSlot()); + boolean isAcceptable = false; - ItemStack putDown = getInventory().getItem(getInputSlot()); - boolean isAcceptable = false; + for (QuestController ctrl : getControllers()) { - for (QuestController ctrl : getControllers()) { + QuestData data = ctrl.getQuestData(); + double total = data.getAmountCompleted() + putDown.getAmount(); + int goal = data.getQuestGoal(); - QuestData data = ctrl.getQuestData(); - double total = data.getAmountCompleted() + putDown.getAmount(); - int goal = data.getQuestGoal(); + List requirements = ctrl.getEventConstraints().getMaterialNames(); + if (requirements.isEmpty() || Utils.contains(requirements, putDown.getType())) { - List requirements = ctrl.getEventConstraints().getMaterialNames(); - if (requirements.isEmpty() || Utils.contains(requirements, putDown.getType())) { + int remaining = 0; - int remaining = 0; + if (total > goal) { - if (total > goal) { + int diff = (int) total - goal; + remaining = diff; - int diff = (int) total - goal; - remaining = diff; + ItemStack toCursor = event.getCursor().clone(); + toCursor.setAmount(toCursor.getAmount() + diff); - ItemStack toCursor = event.getCursor().clone(); - toCursor.setAmount(toCursor.getAmount() + diff); + getOwner().setItemOnCursor(toCursor); + } - getOwner().setItemOnCursor(toCursor); + updateQuest(ctrl, putDown); + isAcceptable = true; + + putDown.setAmount(remaining); + getOwner().updateInventory(); } + } - updateQuest(ctrl, putDown); - isAcceptable = true; + if (!isAcceptable) { - putDown.setAmount(remaining); - getOwner().updateInventory(); + String cannotDonate = getPlugin().messages().message("cantDonateItem"); + getOwner().sendMessage(cannotDonate); } - } - if (!isAcceptable) { - - String cannotDonate = getPlugin().messages().message("cantDonateItem"); - getOwner().sendMessage(cannotDonate); } + }.runTaskLater(getPlugin(), 3); + + case PICKUP_ALL: + case PICKUP_HALF: + case PICKUP_ONE: + case PICKUP_SOME: + if (event.getSlot() == inputSlot) { + break; + } else return; - } - }.runTaskLater(getPlugin(), 1); default: - break; + return; } + event.setCancelled(false); } @Override From d8fc25b49264233bfcbc2a09d95d5f7f8fc93cec Mon Sep 17 00:00:00 2001 From: knighthat Date: Sat, 21 May 2022 08:30:09 -0500 Subject: [PATCH 5/5] minor changes --- .../me/wonka01/ServerQuests/ServerQuests.java | 37 +++++++------ .../ServerQuests/commands/MoneyCommand.java | 52 +++++++++++++++++-- .../ServerQuests/enums/ObjectiveType.java | 2 +- 3 files changed, 70 insertions(+), 21 deletions(-) diff --git a/src/main/java/me/wonka01/ServerQuests/ServerQuests.java b/src/main/java/me/wonka01/ServerQuests/ServerQuests.java index 6a5cea9..5570394 100644 --- a/src/main/java/me/wonka01/ServerQuests/ServerQuests.java +++ b/src/main/java/me/wonka01/ServerQuests/ServerQuests.java @@ -7,13 +7,16 @@ import me.knighthat.apis.menus.MenuEvents; import me.wonka01.ServerQuests.commands.CommandManager; import me.wonka01.ServerQuests.configuration.JsonQuestSave; -import me.wonka01.ServerQuests.events.*; -import me.wonka01.ServerQuests.questcomponents.ActiveQuests; +import me.wonka01.ServerQuests.events.entities.*; +import me.wonka01.ServerQuests.events.materials.ConsumeEvent; +import me.wonka01.ServerQuests.events.materials.CraftingEvent; +import me.wonka01.ServerQuests.events.materials.EnchantEvent; +import me.wonka01.ServerQuests.events.materials.blocks.BreakEvent; +import me.wonka01.ServerQuests.events.materials.blocks.PlaceEvent; import me.wonka01.ServerQuests.questcomponents.bossbar.BarManager; import me.wonka01.placeholders.CommunityQuestsPlaceholders; import net.milkbowl.vault.economy.Economy; import org.bukkit.Bukkit; - import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; @@ -79,20 +82,22 @@ private boolean setupEconomy() { } private void registerQuestEvents() { - ActiveQuests activeQuests = config.getActiveQuests(); + + new MobKillEvent(this); + new BreakEvent(this); + new CraftingEvent(this); + new KillPlayerEvent(this); + new MilkingEvent(this); + new PlaceEvent(this); + new ProjectileKillEvent(this); + new ShearEvent(this); + new TameEvent(this); + new ConsumeEvent(this); + new CatchFishEvent(this); + new EnchantEvent(this); + new NPCInteractEvent(this); + getServer().getPluginManager().registerEvents(new BarManager(), this); - getServer().getPluginManager().registerEvents(new BreakEvent(activeQuests), this); - getServer().getPluginManager().registerEvents(new CatchFishEvent(activeQuests), this); - getServer().getPluginManager().registerEvents(new KillPlayerEvent(activeQuests), this); - getServer().getPluginManager().registerEvents(new MobKillEvent(activeQuests), this); - getServer().getPluginManager().registerEvents(new ProjectileKillEvent(activeQuests), this); - getServer().getPluginManager().registerEvents(new PlaceEvent(activeQuests), this); - getServer().getPluginManager().registerEvents(new ShearEvent(activeQuests), this); - getServer().getPluginManager().registerEvents(new TameEvent(activeQuests), this); - getServer().getPluginManager().registerEvents(new MilkCowEvent(activeQuests), this); - getServer().getPluginManager().registerEvents(new CraftItemQuestEvent(activeQuests), this); - getServer().getPluginManager().registerEvents(new ConsumeItemQuestEvent(activeQuests), this); - getServer().getPluginManager().registerEvents(new EnchantItemQuestEvent(activeQuests), this); } private void registerGuiEvents() { diff --git a/src/main/java/me/wonka01/ServerQuests/commands/MoneyCommand.java b/src/main/java/me/wonka01/ServerQuests/commands/MoneyCommand.java index ec8e4c3..1a67fc3 100644 --- a/src/main/java/me/wonka01/ServerQuests/commands/MoneyCommand.java +++ b/src/main/java/me/wonka01/ServerQuests/commands/MoneyCommand.java @@ -3,11 +3,18 @@ import lombok.NonNull; import me.knighthat.apis.commands.PluginCommand; import me.wonka01.ServerQuests.ServerQuests; -import me.wonka01.ServerQuests.events.MoneyQuest; +import me.wonka01.ServerQuests.enums.ObjectiveType; import me.wonka01.ServerQuests.questcomponents.ActiveQuests; +import me.wonka01.ServerQuests.questcomponents.QuestController; +import net.milkbowl.vault.economy.Economy; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Range; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class MoneyCommand extends PluginCommand { @@ -36,10 +43,9 @@ public void execute(@NonNull CommandSender sender, @NotNull @NonNull String[] ar } try { - double money = Double.parseDouble(args[1]); - MoneyQuest moneyQuest = new MoneyQuest(ActiveQuests.getActiveQuestsInstance(), getPlugin().getEconomy()); - if (!moneyQuest.tryAddItemsToQuest(money, player)) { + double money = Double.parseDouble(args[1]); + if (!deposit(money, player)) { String noActiveDonateQuests = getPlugin().messages().message("noActiveDonateQuests"); player.sendMessage(noActiveDonateQuests); } @@ -48,4 +54,42 @@ public void execute(@NonNull CommandSender sender, @NotNull @NonNull String[] ar player.sendMessage(message); } } + + private boolean deposit(@Range(from = 0, to = Long.MAX_VALUE) double amount, @NonNull Player player) { + + Economy economy = getPlugin().getEconomy(); + boolean canWithdraw = false; + double money = amount; + + for (QuestController ctrl : this.getControllers()) { + + int goal = ctrl.getQuestData().getQuestGoal(); + double completed = ctrl.getQuestData().getAmountCompleted(); + + if (goal > 0 && (completed + amount) > goal) { + + money = amount - completed - goal; + economy.depositPlayer(player, completed + money - goal); + } + + canWithdraw = true; + + if (ctrl.updateQuest(money, player)) + ctrl.endQuest(); + } + + if (canWithdraw) + economy.withdrawPlayer(player, money); + + + return canWithdraw; + } + + private @NonNull List getControllers() { + + ActiveQuests activeQuests = ActiveQuests.getActiveQuestsInstance(); + Stream result = activeQuests.getActiveQuestsList().stream(); + result = result.filter(ins -> ins.getObjective().equals(ObjectiveType.GIVE_MONEY)); + return result.collect(Collectors.toList()); + } } diff --git a/src/main/java/me/wonka01/ServerQuests/enums/ObjectiveType.java b/src/main/java/me/wonka01/ServerQuests/enums/ObjectiveType.java index 84ebe4f..10d9815 100644 --- a/src/main/java/me/wonka01/ServerQuests/enums/ObjectiveType.java +++ b/src/main/java/me/wonka01/ServerQuests/enums/ObjectiveType.java @@ -13,7 +13,7 @@ public enum ObjectiveType { PROJ_KILL("projectilekill", Material.BOW), BLOCK_PLACE("blockplace", Material.DIRT), SHEAR("shear", Material.SHEARS), - TAME("team", Material.BONE), + TAME("tame", Material.BONE), GUI("donate", Material.MILK_BUCKET), MILK_COW("milkcow", Material.CHEST), CRAFT_ITEM("craftitem", Material.CHAINMAIL_HELMET),