diff --git a/pom.xml b/pom.xml
index 8249006..285ff5e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -59,13 +59,13 @@
2.0.2
1.16.5-R0.1-SNAPSHOT
- 1.16.0
+ 1.16.1-SNAPSHOT
${build.version}-SNAPSHOT
-LOCAL
- 1.0.1
+ 1.0.2
BentoBoxWorld_Boxed
bentobox-world
diff --git a/src/main/java/world/bentobox/boxed/Settings.java b/src/main/java/world/bentobox/boxed/Settings.java
index 010b779..7727631 100644
--- a/src/main/java/world/bentobox/boxed/Settings.java
+++ b/src/main/java/world/bentobox/boxed/Settings.java
@@ -332,7 +332,7 @@ public class Settings implements WorldSettings {
@ConfigComment("Reset advancements.")
@ConfigEntry(path = "area.reset.on-leave.reset-advancements")
- private boolean oLeaveResetAdvancements = false;
+ private boolean onLeaveResetAdvancements = false;
@ConfigComment("Grant these advancements")
@ConfigEntry(path = "area.reset.on-leave.grant-advancements")
@@ -1707,20 +1707,6 @@ public class Settings implements WorldSettings {
this.onJoinGrantAdvancements = onJoinGrantAdvancements;
}
- /**
- * @return the oLeaveResetAdvancements
- */
- public boolean isoLeaveResetAdvancements() {
- return oLeaveResetAdvancements;
- }
-
- /**
- * @param oLeaveResetAdvancements the oLeaveResetAdvancements to set
- */
- public void setoLeaveResetAdvancements(boolean oLeaveResetAdvancements) {
- this.oLeaveResetAdvancements = oLeaveResetAdvancements;
- }
-
/**
* @return the onLeaveGrantAdvancements
*/
@@ -1734,4 +1720,19 @@ public class Settings implements WorldSettings {
public void setOnLeaveGrantAdvancements(List onLeaveGrantAdvancements) {
this.onLeaveGrantAdvancements = onLeaveGrantAdvancements;
}
+
+ /**
+ * @return the onLeaveResetAdvancements
+ */
+ public boolean isOnLeaveResetAdvancements() {
+ return onLeaveResetAdvancements;
+ }
+
+ /**
+ * @param onLeaveResetAdvancements the onLeaveResetAdvancements to set
+ */
+ public void setOnLeaveResetAdvancements(boolean onLeaveResetAdvancements) {
+ this.onLeaveResetAdvancements = onLeaveResetAdvancements;
+ }
+
}
diff --git a/src/main/java/world/bentobox/boxed/listeners/AdvancementListener.java b/src/main/java/world/bentobox/boxed/listeners/AdvancementListener.java
index c170d56..dce7417 100644
--- a/src/main/java/world/bentobox/boxed/listeners/AdvancementListener.java
+++ b/src/main/java/world/bentobox/boxed/listeners/AdvancementListener.java
@@ -1,5 +1,7 @@
package world.bentobox.boxed.listeners;
+import java.util.Iterator;
+import java.util.List;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.stream.StreamSupport;
@@ -7,17 +9,19 @@ import java.util.stream.StreamSupport;
import org.bukkit.Bukkit;
import org.bukkit.Sound;
import org.bukkit.advancement.Advancement;
+import org.bukkit.advancement.AdvancementProgress;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerAdvancementDoneEvent;
import org.bukkit.event.player.PlayerPortalEvent;
-import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
+import world.bentobox.bentobox.api.events.island.IslandNewIslandEvent;
+import world.bentobox.bentobox.api.events.team.TeamJoinedEvent;
+import world.bentobox.bentobox.api.events.team.TeamLeaveEvent;
import world.bentobox.bentobox.api.localization.TextVariables;
-import world.bentobox.bentobox.api.metadata.MetaDataValue;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.util.Util;
import world.bentobox.boxed.Boxed;
@@ -96,23 +100,59 @@ public class AdvancementListener implements Listener {
}
}
- @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
- public void onFirstTime(PlayerTeleportEvent e) {
- User user = User.getInstance(e.getPlayer());
- boolean firstTime = user.getMetaData("Boxed-first-time").map(MetaDataValue::asBoolean).orElse(true);
- if (firstTime
- && e.getTo() != null
- && e.getTo().getWorld() != null
- && addon.getOverWorld().equals(Util.getWorld(e.getTo().getWorld()))
- && addon.getIslands().hasIsland(addon.getOverWorld(), user) // Owner of island
- ) {
- // Clear advancements
- addon.getPlugin().logDebug("Clear advancements");
- // Add meta data
- user.putMetaData("Boxed-first-time", new MetaDataValue(false));
- addon.getPlayers().save(user.getUniqueId());
+ @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
+ public void onTeamJoinTime(TeamJoinedEvent e) {
+ User user = User.getInstance(e.getPlayerUUID());
+ if (addon.getSettings().isOnJoinResetAdvancements() && user.isOnline()
+ && addon.getOverWorld().equals(Util.getWorld(user.getWorld()))) {
+ // Clear and set advancements
+ clearAndSetAdv(user, addon.getSettings().isOnJoinResetAdvancements(), addon.getSettings().getOnJoinGrantAdvancements());
+
}
}
+
+ @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
+ public void onTeamLeaveTime(TeamLeaveEvent e) {
+ User user = User.getInstance(e.getPlayerUUID());
+ if (addon.getSettings().isOnJoinResetAdvancements() && user.isOnline()
+ && addon.getOverWorld().equals(Util.getWorld(user.getWorld()))) {
+ // Clear and set advancements
+ clearAndSetAdv(user, addon.getSettings().isOnLeaveResetAdvancements(), addon.getSettings().getOnLeaveGrantAdvancements());
+
+ }
+ }
+
+ @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
+ public void onFirstTime(IslandNewIslandEvent e) {
+ clearAndSetAdv(User.getInstance(e.getPlayerUUID()), addon.getSettings().isOnJoinResetAdvancements(), addon.getSettings().getOnJoinGrantAdvancements());
+ }
+
+ private void clearAndSetAdv(User user, boolean clear, List list) {
+ if (!user.isOnline()) {
+ return;
+ }
+ if (clear) {
+ // Clear advancements
+ Iterator it = Bukkit.advancementIterator();
+ while (it.hasNext()) {
+ Advancement a = it.next();
+ AdvancementProgress p = user.getPlayer().getAdvancementProgress(a);
+ p.getAwardedCriteria().forEach(p::revokeCriteria);
+ }
+ }
+ // Grant advancements
+ list.forEach(k -> {
+ Iterator it = Bukkit.advancementIterator();
+ while (it.hasNext()) {
+ Advancement a = it.next();
+ if (a.getKey().toString().equals(k)) {
+ // Award
+ a.getCriteria().forEach(user.getPlayer().getAdvancementProgress(a)::awardCriteria);
+ }
+ }
+ });
+
+ }
}
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 117868e..8711146 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -352,7 +352,7 @@ area:
reset-advancements: true
# Grant these advancements
grant-advancements:
- - "minecraft/story:root": true
+ - minecraft:story/root
on-leave:
# What the plugin should reset when the player leaves or is kicked from an area
# Reset Money - if this is true, will reset the player's money to the starting money