Skip to content

Commit

Permalink
Manual fire nether and end advancements
Browse files Browse the repository at this point in the history
Use locale for advancement announcements.
  • Loading branch information
tastybento committed Feb 22, 2021
1 parent 78aeeec commit ae02b79
Show file tree
Hide file tree
Showing 3 changed files with 986 additions and 8 deletions.
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
package world.bentobox.boxed.listeners;

import java.util.Spliterator;
import java.util.Spliterators;
import java.util.stream.StreamSupport;

import org.bukkit.Bukkit;
import org.bukkit.Sound;
import org.bukkit.advancement.Advancement;
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.TeleportCause;

import world.bentobox.bentobox.api.localization.TextVariables;
import world.bentobox.bentobox.api.user.User;
Expand All @@ -18,30 +27,71 @@
public class AdvancementListener implements Listener {

private Boxed addon;
private final Advancement netherAdvancement;
private final Advancement endAdvancement;
private final Advancement netherRoot;
private final Advancement endRoot;


/**
* @param addon
*/
public AdvancementListener(Boxed addon) {
this.addon = addon;
this.netherAdvancement = getAdvancement("minecraft:story/enter_the_nether");
this.endAdvancement = getAdvancement("minecraft:story/enter_the_end");
this.netherRoot = getAdvancement("minecraft:nether/root");
this.endRoot = getAdvancement("minecraft:end/root");
}


private Advancement getAdvancement(String string) {
return StreamSupport.stream(
Spliterators.spliteratorUnknownSize(Bukkit.advancementIterator(), Spliterator.ORDERED), false)
.filter(a -> a.getKey().toString().equals(string))
.findFirst().orElse(null);
}


@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onAdvancement(PlayerAdvancementDoneEvent e) {
if (e.getPlayer().getWorld().equals(addon.getOverWorld())) {
if (Util.sameWorld(e.getPlayer().getWorld(), addon.getOverWorld())) {
int score = addon.getAdvManager().addAvancement(e.getPlayer(), e.getAdvancement());
if (score != 0) {
User user = User.getInstance(e.getPlayer());
e.getPlayer().playSound(e.getPlayer().getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1F, 2F);
String adv = Util.prettifyText(e.getAdvancement().getKey().getKey().substring(e.getAdvancement().getKey().getKey().lastIndexOf("/") + 1, e.getAdvancement().getKey().getKey().length()));

user.sendMessage("boxed.completed", TextVariables.NAME, adv);
user.sendMessage("boxed.size-changed", TextVariables.NUMBER, String.valueOf(score));
Bukkit.getScheduler().runTask(addon.getPlugin(), () -> {
e.getPlayer().playSound(e.getPlayer().getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1F, 2F);
String adv = user.getTranslation("boxed.advancements." + e.getAdvancement().getKey().toString());
if (adv.isEmpty()) {
adv = Util.prettifyText(e.getAdvancement().getKey().getKey().substring(e.getAdvancement().getKey().getKey().lastIndexOf("/") + 1, e.getAdvancement().getKey().getKey().length()));
}
user.sendMessage("boxed.completed", TextVariables.NAME, adv);
user.sendMessage("boxed.size-changed", TextVariables.NUMBER, String.valueOf(score));
});
}
}
}

@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onPortal(PlayerPortalEvent e) {
if (!Util.sameWorld(e.getPlayer().getWorld(), addon.getOverWorld())) {
return;
}
if (e.getCause().equals(TeleportCause.NETHER_PORTAL)) {
giveAdv(e.getPlayer(), netherAdvancement);
giveAdv(e.getPlayer(), netherRoot);

} else if (e.getCause().equals(TeleportCause.END_PORTAL)) {
giveAdv(e.getPlayer(), endAdvancement);
giveAdv(e.getPlayer(), endRoot);
}
}


private void giveAdv(Player player, Advancement adv) {
if (adv != null && !player.getAdvancementProgress(adv).isDone()) {
adv.getCriteria().forEach(player.getAdvancementProgress(adv)::awardCriteria);
}
}

}
4 changes: 2 additions & 2 deletions src/main/resources/advancements.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ advancements:
'minecraft:end/kill_dragon': 1
'minecraft:end/levitate': 1
'minecraft:end/respawn_dragon': 1
'minecraft:end/root': 1
'minecraft:end/root': 0
'minecraft:husbandry/balanced_diet': 1
'minecraft:husbandry/bred_all_animals': 1
'minecraft:husbandry/breed_an_animal': 1
Expand Down Expand Up @@ -59,7 +59,7 @@ advancements:
'minecraft:nether/obtain_crying_obsidian': 1
'minecraft:nether/return_to_sender': 1
'minecraft:nether/ride_strider': 1
'minecraft:nether/root': 1
'minecraft:nether/root': 0
'minecraft:nether/summon_wither': 1
'minecraft:nether/uneasy_alliance': 1
'minecraft:nether/use_lodestone': 1
Expand Down

0 comments on commit ae02b79

Please sign in to comment.