From a728d6a0f53481e4ef5946693d47a297c1504fbe Mon Sep 17 00:00:00 2001 From: ZockerAxel Date: Thu, 2 Jun 2022 22:23:34 +0200 Subject: [PATCH] Add Advancement Grant and Revoke Events --- .../event/AdvancementGrantEvent.java | 102 ++++++++++++++++++ .../event/AdvancementRevokeEvent.java | 61 +++++++++++ .../manager/AdvancementManager.java | 35 ++++-- 3 files changed, 191 insertions(+), 7 deletions(-) create mode 100644 src/eu/endercentral/crazy_advancements/event/AdvancementGrantEvent.java create mode 100644 src/eu/endercentral/crazy_advancements/event/AdvancementRevokeEvent.java diff --git a/src/eu/endercentral/crazy_advancements/event/AdvancementGrantEvent.java b/src/eu/endercentral/crazy_advancements/event/AdvancementGrantEvent.java new file mode 100644 index 0000000..080c463 --- /dev/null +++ b/src/eu/endercentral/crazy_advancements/event/AdvancementGrantEvent.java @@ -0,0 +1,102 @@ +package eu.endercentral.crazy_advancements.event; + +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import eu.endercentral.crazy_advancements.advancement.Advancement; +import eu.endercentral.crazy_advancements.advancement.AdvancementFlag; +import eu.endercentral.crazy_advancements.manager.AdvancementManager; + +public class AdvancementGrantEvent extends Event { + + public static final HandlerList handlers = new HandlerList(); + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + + private final AdvancementManager manager; + private final Advancement advancement; + private final Player player; + private boolean showToast; + private boolean displayMessage; + + public AdvancementGrantEvent(AdvancementManager manager, Advancement advancement, Player player) { + this.manager = manager; + this.advancement = advancement; + this.player = player; + this.showToast = advancement.hasFlag(AdvancementFlag.SHOW_TOAST); + this.displayMessage = advancement.hasFlag(AdvancementFlag.DISPLAY_MESSAGE); + } + + /** + * Gets the Manager + * + * @return The Manager this event has been fired from + */ + public AdvancementManager getManager() { + return manager; + } + + /** + * Gets the Advancement + * + * @return The Advancement that has been granted + */ + public Advancement getAdvancement() { + return advancement; + } + + /** + * Gets the Player + * + * @return Reciever + */ + public Player getPlayer() { + return player; + } + + /** + * Gets whether a toast will be shown + * + * @return true if a toast will be shown + */ + public boolean isShowToast() { + return showToast; + } + + /** + * Sets if a toast will be shown + * + * @param showToast Whether toast should be shown + */ + public void setShowToast(boolean showToast) { + this.showToast = showToast; + } + + /** + * Gets whether a message will be displayed + * + * @return true if a message will be displayed + */ + public boolean isDisplayMessage() { + return displayMessage; + } + + /** + * Sets if a message will be displayed + * + * @param displayMessage Whethere message should be displayed + */ + public void setDisplayMessage(boolean displayMessage) { + this.displayMessage = displayMessage; + } + +} \ No newline at end of file diff --git a/src/eu/endercentral/crazy_advancements/event/AdvancementRevokeEvent.java b/src/eu/endercentral/crazy_advancements/event/AdvancementRevokeEvent.java new file mode 100644 index 0000000..267b477 --- /dev/null +++ b/src/eu/endercentral/crazy_advancements/event/AdvancementRevokeEvent.java @@ -0,0 +1,61 @@ +package eu.endercentral.crazy_advancements.event; + +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import eu.endercentral.crazy_advancements.advancement.Advancement; +import eu.endercentral.crazy_advancements.manager.AdvancementManager; + +public class AdvancementRevokeEvent extends Event { + + public static final HandlerList handlers = new HandlerList(); + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + + private final AdvancementManager manager; + private final Advancement advancement; + private final Player player; + + public AdvancementRevokeEvent(AdvancementManager manager, Advancement advancement, Player player) { + this.manager = manager; + this.advancement = advancement; + this.player = player; + } + + /** + * Gets the Manager + * + * @return The Manager this event has been fired from + */ + public AdvancementManager getManager() { + return manager; + } + + /** + * Gets the Advancement + * + * @return The Advancement that has been granted + */ + public Advancement getAdvancement() { + return advancement; + } + + /** + * Gets the Player + * + * @return Reciever + */ + public Player getPlayer() { + return player; + } + +} \ No newline at end of file diff --git a/src/eu/endercentral/crazy_advancements/manager/AdvancementManager.java b/src/eu/endercentral/crazy_advancements/manager/AdvancementManager.java index f8029e7..3c43360 100644 --- a/src/eu/endercentral/crazy_advancements/manager/AdvancementManager.java +++ b/src/eu/endercentral/crazy_advancements/manager/AdvancementManager.java @@ -27,13 +27,14 @@ import eu.endercentral.crazy_advancements.NameKey; import eu.endercentral.crazy_advancements.advancement.Advancement; import eu.endercentral.crazy_advancements.advancement.AdvancementDisplay; -import eu.endercentral.crazy_advancements.advancement.AdvancementFlag; import eu.endercentral.crazy_advancements.advancement.AdvancementReward; import eu.endercentral.crazy_advancements.advancement.criteria.CriteriaType; import eu.endercentral.crazy_advancements.advancement.progress.AdvancementProgress; import eu.endercentral.crazy_advancements.advancement.progress.GenericResult; import eu.endercentral.crazy_advancements.advancement.progress.GrantCriteriaResult; import eu.endercentral.crazy_advancements.advancement.progress.SetCriteriaResult; +import eu.endercentral.crazy_advancements.event.AdvancementGrantEvent; +import eu.endercentral.crazy_advancements.event.AdvancementRevokeEvent; import eu.endercentral.crazy_advancements.packet.AdvancementsPacket; import eu.endercentral.crazy_advancements.packet.PacketConverter; import eu.endercentral.crazy_advancements.save.CriteriaData; @@ -445,10 +446,13 @@ public GenericResult grantAdvancement(Player player, Advancement advancement) { GenericResult result = progress.grant(); if(result == GenericResult.CHANGED) { - if(advancement.hasFlag(AdvancementFlag.SHOW_TOAST)) { + AdvancementGrantEvent event = new AdvancementGrantEvent(this, advancement, player); + Bukkit.getPluginManager().callEvent(event); + + if(event.isShowToast()) { advancement.displayToast(player); } - if(advancement.hasFlag(AdvancementFlag.DISPLAY_MESSAGE)) { + if(event.isDisplayMessage()) { advancement.displayMessageToEverybody(player); } AdvancementReward reward = advancement.getReward(); @@ -490,6 +494,9 @@ public GenericResult revokeAdvancement(Player player, Advancement advancement) { GenericResult result = progress.revoke(); if(result == GenericResult.CHANGED) { + AdvancementRevokeEvent event = new AdvancementRevokeEvent(this, advancement, player); + Bukkit.getPluginManager().callEvent(event); + updateVisibility(player); updateProgress(player, advancement); } @@ -527,10 +534,13 @@ public GrantCriteriaResult grantCriteria(Player player, Advancement advancement, switch(result) { case COMPLETED: - if(advancement.hasFlag(AdvancementFlag.SHOW_TOAST)) { + AdvancementGrantEvent event = new AdvancementGrantEvent(this, advancement, player); + Bukkit.getPluginManager().callEvent(event); + + if(event.isShowToast()) { advancement.displayToast(player); } - if(advancement.hasFlag(AdvancementFlag.DISPLAY_MESSAGE)) { + if(event.isDisplayMessage()) { advancement.displayMessageToEverybody(player); } AdvancementReward reward = advancement.getReward(); @@ -578,6 +588,9 @@ public GenericResult revokeCriteria(Player player, Advancement advancement, Stri GenericResult result = progress.revokeCriteria(criteria); if(result == GenericResult.CHANGED) { + AdvancementRevokeEvent event = new AdvancementRevokeEvent(this, advancement, player); + Bukkit.getPluginManager().callEvent(event); + updateVisibility(player); updateProgress(player, advancement); } @@ -614,14 +627,18 @@ public GenericResult revokeCriteria(UUID uuid, Advancement advancement, String.. public SetCriteriaResult setCriteriaProgress(Player player, Advancement advancement, int criteriaProgress) { if(advancement.getCriteria().getType() == CriteriaType.NUMBER) { AdvancementProgress progress = advancement.getProgress(player); + boolean doneBefore = progress.isDone(); SetCriteriaResult result = progress.setCriteriaProgress(criteriaProgress); switch(result) { case COMPLETED: - if(advancement.hasFlag(AdvancementFlag.SHOW_TOAST)) { + AdvancementGrantEvent event = new AdvancementGrantEvent(this, advancement, player); + Bukkit.getPluginManager().callEvent(event); + + if(event.isShowToast()) { advancement.displayToast(player); } - if(advancement.hasFlag(AdvancementFlag.DISPLAY_MESSAGE)) { + if(event.isDisplayMessage()) { advancement.displayMessageToEverybody(player); } AdvancementReward reward = advancement.getReward(); @@ -630,6 +647,10 @@ public SetCriteriaResult setCriteriaProgress(Player player, Advancement advancem } updateVisibility(player); case CHANGED: + if(doneBefore) { + AdvancementRevokeEvent revokeEvent = new AdvancementRevokeEvent(this, advancement, player); + Bukkit.getPluginManager().callEvent(revokeEvent); + } updateProgress(player, advancement); break; default: