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>
|
<powermock.version>2.0.2</powermock.version>
|
||||||
<!-- More visible way how to change dependency versions -->
|
<!-- More visible way how to change dependency versions -->
|
||||||
<spigot.version>1.16.5-R0.1-SNAPSHOT</spigot.version>
|
<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 variable removes warning about dynamic version -->
|
||||||
<revision>${build.version}-SNAPSHOT</revision>
|
<revision>${build.version}-SNAPSHOT</revision>
|
||||||
<!-- Do not change unless you want different name for local builds. -->
|
<!-- Do not change unless you want different name for local builds. -->
|
||||||
<build.number>-LOCAL</build.number>
|
<build.number>-LOCAL</build.number>
|
||||||
<!-- This allows to change between versions. -->
|
<!-- 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.projectKey>BentoBoxWorld_Boxed</sonar.projectKey>
|
||||||
<sonar.organization>bentobox-world</sonar.organization>
|
<sonar.organization>bentobox-world</sonar.organization>
|
||||||
|
@ -332,7 +332,7 @@ public class Settings implements WorldSettings {
|
|||||||
|
|
||||||
@ConfigComment("Reset advancements.")
|
@ConfigComment("Reset advancements.")
|
||||||
@ConfigEntry(path = "area.reset.on-leave.reset-advancements")
|
@ConfigEntry(path = "area.reset.on-leave.reset-advancements")
|
||||||
private boolean oLeaveResetAdvancements = false;
|
private boolean onLeaveResetAdvancements = false;
|
||||||
|
|
||||||
@ConfigComment("Grant these advancements")
|
@ConfigComment("Grant these advancements")
|
||||||
@ConfigEntry(path = "area.reset.on-leave.grant-advancements")
|
@ConfigEntry(path = "area.reset.on-leave.grant-advancements")
|
||||||
@ -1707,20 +1707,6 @@ public class Settings implements WorldSettings {
|
|||||||
this.onJoinGrantAdvancements = onJoinGrantAdvancements;
|
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
|
* @return the onLeaveGrantAdvancements
|
||||||
*/
|
*/
|
||||||
@ -1734,4 +1720,19 @@ public class Settings implements WorldSettings {
|
|||||||
public void setOnLeaveGrantAdvancements(List<String> onLeaveGrantAdvancements) {
|
public void setOnLeaveGrantAdvancements(List<String> onLeaveGrantAdvancements) {
|
||||||
this.onLeaveGrantAdvancements = 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;
|
package world.bentobox.boxed.listeners;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Spliterator;
|
import java.util.Spliterator;
|
||||||
import java.util.Spliterators;
|
import java.util.Spliterators;
|
||||||
import java.util.stream.StreamSupport;
|
import java.util.stream.StreamSupport;
|
||||||
@ -7,17 +9,19 @@ import java.util.stream.StreamSupport;
|
|||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.advancement.Advancement;
|
import org.bukkit.advancement.Advancement;
|
||||||
|
import org.bukkit.advancement.AdvancementProgress;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.PlayerAdvancementDoneEvent;
|
import org.bukkit.event.player.PlayerAdvancementDoneEvent;
|
||||||
import org.bukkit.event.player.PlayerPortalEvent;
|
import org.bukkit.event.player.PlayerPortalEvent;
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
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.localization.TextVariables;
|
||||||
import world.bentobox.bentobox.api.metadata.MetaDataValue;
|
|
||||||
import world.bentobox.bentobox.api.user.User;
|
import world.bentobox.bentobox.api.user.User;
|
||||||
import world.bentobox.bentobox.util.Util;
|
import world.bentobox.bentobox.util.Util;
|
||||||
import world.bentobox.boxed.Boxed;
|
import world.bentobox.boxed.Boxed;
|
||||||
@ -96,23 +100,59 @@ public class AdvancementListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||||
public void onFirstTime(PlayerTeleportEvent e) {
|
public void onTeamJoinTime(TeamJoinedEvent e) {
|
||||||
User user = User.getInstance(e.getPlayer());
|
User user = User.getInstance(e.getPlayerUUID());
|
||||||
boolean firstTime = user.getMetaData("Boxed-first-time").map(MetaDataValue::asBoolean).orElse(true);
|
if (addon.getSettings().isOnJoinResetAdvancements() && user.isOnline()
|
||||||
if (firstTime
|
&& addon.getOverWorld().equals(Util.getWorld(user.getWorld()))) {
|
||||||
&& e.getTo() != null
|
// Clear and set advancements
|
||||||
&& e.getTo().getWorld() != null
|
clearAndSetAdv(user, addon.getSettings().isOnJoinResetAdvancements(), addon.getSettings().getOnJoinGrantAdvancements());
|
||||||
&& 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 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
|
reset-advancements: true
|
||||||
# Grant these advancements
|
# Grant these advancements
|
||||||
grant-advancements:
|
grant-advancements:
|
||||||
- "minecraft/story:root": true
|
- minecraft:story/root
|
||||||
on-leave:
|
on-leave:
|
||||||
# What the plugin should reset when the player leaves or is kicked from an area
|
# 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
|
# Reset Money - if this is true, will reset the player's money to the starting money
|
||||||
|
Loading…
Reference in New Issue
Block a user