mirror of
https://github.com/BentoBoxWorld/Boxed.git
synced 2025-02-26 02:51:31 +01:00
Clears and sets advancements programaticaly.
https://github.com/BentoBoxWorld/Boxed/issues/7
This commit is contained in:
parent
5e536dfa63
commit
d7a52d2103
4
pom.xml
4
pom.xml
@ -59,13 +59,13 @@
|
||||
<powermock.version>2.0.2</powermock.version>
|
||||
<!-- More visible way how to change dependency versions -->
|
||||
<spigot.version>1.16.5-R0.1-SNAPSHOT</spigot.version>
|
||||
<bentobox.version>1.16.0</bentobox.version>
|
||||
<bentobox.version>1.16.1-SNAPSHOT</bentobox.version>
|
||||
<!-- Revision variable removes warning about dynamic version -->
|
||||
<revision>${build.version}-SNAPSHOT</revision>
|
||||
<!-- Do not change unless you want different name for local builds. -->
|
||||
<build.number>-LOCAL</build.number>
|
||||
<!-- This allows to change between versions. -->
|
||||
<build.version>1.0.1</build.version>
|
||||
<build.version>1.0.2</build.version>
|
||||
|
||||
<sonar.projectKey>BentoBoxWorld_Boxed</sonar.projectKey>
|
||||
<sonar.organization>bentobox-world</sonar.organization>
|
||||
|
@ -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<String> 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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<String> list) {
|
||||
if (!user.isOnline()) {
|
||||
return;
|
||||
}
|
||||
if (clear) {
|
||||
// Clear advancements
|
||||
Iterator<Advancement> 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<Advancement> 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);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user