Some work around trying to reset advancements

only when a player starts an island.
This commit is contained in:
tastybento 2021-03-13 10:18:32 -08:00
parent 8dd34a32e6
commit 5e536dfa63
3 changed files with 103 additions and 2 deletions

View File

@ -293,6 +293,14 @@ public class Settings implements WorldSettings {
@ConfigEntry(path = "area.reset.on-join.ender-chest")
private boolean onJoinResetEnderChest = false;
@ConfigComment("Reset advancements.")
@ConfigEntry(path = "area.reset.on-join.reset-advancements")
private boolean onJoinResetAdvancements = true;
@ConfigComment("Grant these advancements")
@ConfigEntry(path = "area.reset.on-join.grant-advancements")
private List<String> onJoinGrantAdvancements = new ArrayList<>();
@ConfigComment("What the plugin should reset when the player leaves or is kicked from an area")
@ConfigComment("Reset Money - if this is true, will reset the player's money to the starting money")
@ConfigComment("Recommendation is that this is set to true, but if you run multi-worlds")
@ -322,6 +330,14 @@ public class Settings implements WorldSettings {
@ConfigEntry(path = "area.reset.on-leave.ender-chest")
private boolean onLeaveResetEnderChest = false;
@ConfigComment("Reset advancements.")
@ConfigEntry(path = "area.reset.on-leave.reset-advancements")
private boolean oLeaveResetAdvancements = false;
@ConfigComment("Grant these advancements")
@ConfigEntry(path = "area.reset.on-leave.grant-advancements")
private List<String> onLeaveGrantAdvancements = new ArrayList<>();
@ConfigComment("Toggles the automatic area creation upon the player's first login on your server.")
@ConfigComment("If set to true,")
@ConfigComment(" * Upon connecting to your server for the first time, the player will be told that")
@ -1662,4 +1678,60 @@ public class Settings implements WorldSettings {
public void setAllowStrongholds(boolean allowStrongholds) {
this.allowStrongholds = allowStrongholds;
}
/**
* @return the onJoinResetAdvancements
*/
public boolean isOnJoinResetAdvancements() {
return onJoinResetAdvancements;
}
/**
* @param onJoinResetAdvancements the onJoinResetAdvancements to set
*/
public void setOnJoinResetAdvancements(boolean onJoinResetAdvancements) {
this.onJoinResetAdvancements = onJoinResetAdvancements;
}
/**
* @return the onJoinGrantAdvancements
*/
public List<String> getOnJoinGrantAdvancements() {
return onJoinGrantAdvancements;
}
/**
* @param onJoinGrantAdvancements the onJoinGrantAdvancements to set
*/
public void setOnJoinGrantAdvancements(List<String> 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
*/
public List<String> getOnLeaveGrantAdvancements() {
return onLeaveGrantAdvancements;
}
/**
* @param onLeaveGrantAdvancements the onLeaveGrantAdvancements to set
*/
public void setOnLeaveGrantAdvancements(List<String> onLeaveGrantAdvancements) {
this.onLeaveGrantAdvancements = onLeaveGrantAdvancements;
}
}

View File

@ -13,9 +13,11 @@ 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.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;
@ -93,5 +95,24 @@ public class AdvancementListener implements Listener {
adv.getCriteria().forEach(player.getAdvancementProgress(adv)::awardCriteria);
}
}
@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());
}
}
}

View File

@ -348,6 +348,11 @@ area:
exp: true
# Reset Ender Chest - if true, the player's Ender Chest will be cleared.
ender-chest: false
# Reset advancements
reset-advancements: true
# Grant these advancements
grant-advancements:
- "minecraft/story:root": true
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
@ -366,6 +371,10 @@ area:
exp: false
# Reset Ender Chest - if true, the player's Ender Chest will be cleared.
ender-chest: false
# Reset advancements
reset-advancements: false
# Grant these advancements
grant-advancements: []
create-area-on-first-login:
# Toggles the automatic area creation upon the player's first login on your server.
# If set to true,
@ -417,8 +426,7 @@ area:
# Here are some examples of valid commands to execute:
# * "[SUDO] bbox version"
# * "boxadmin deaths set [player] 0"
on-join:
- advancement revoke [player] everything
on-join: []
# List of commands to run when a player leaves an area, resets his area or gets kicked from it.
# These commands are run by the console, unless otherwise stated using the [SUDO] prefix,
# in which case they are executed by the player.