master-customAdvancements #4

Merged
MineTec merged 3 commits from master-customAdvancements into master 2024-10-05 16:40:52 +00:00
6 changed files with 85 additions and 9 deletions
Showing only changes of commit da33e6e592 - Show all commits

View File

@ -0,0 +1,11 @@
package eu.mhsl.craftattack.spawn.appliances.customAdvancements;
public class Advancements {
public static String searchTrouble = "search_trouble";
public static String fleischerchest = "fleischerchest";
public static String craftPixelblock = "craft_pixelblock";
public static String usePixelblock = "use_pixelblock";
public static String start = "start";
public static String winner = "winner";
public static String participateEvent = "participate_event";
}

View File

@ -2,27 +2,60 @@ package eu.mhsl.craftattack.spawn.appliances.customAdvancements;
import eu.mhsl.craftattack.spawn.Main; import eu.mhsl.craftattack.spawn.Main;
import eu.mhsl.craftattack.spawn.appliance.Appliance; import eu.mhsl.craftattack.spawn.appliance.Appliance;
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.listener.ApplyPendingAdvancementsListener;
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.listener.CustomAdvancementsListener;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.bukkit.advancement.Advancement;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.UUID;
public class CustomAdvancements extends Appliance { public class CustomAdvancements extends Appliance {
public void grantAdvancement(String advancementName, Player player) { record PendingAdvancement(UUID receiver, String advancement) {
}
private final List<PendingAdvancement> pendingAdvancements = new ArrayList<>();
public void grantAdvancement(String advancementName, UUID playerUUID) {
Player player = Bukkit.getPlayer(playerUUID);
if(player == null) {
addPendingAdvancement(playerUUID, advancementName);
return;
}
try { try {
player.getAdvancementProgress(Objects.requireNonNull(Bukkit.getAdvancement(Objects.requireNonNull(NamespacedKey.fromString("custom_advancements:craftattack/" + advancementName))))).awardCriteria("criteria"); NamespacedKey namespacedKey = Objects.requireNonNull(NamespacedKey.fromString("custom_advancements:craftattack/" + advancementName));
Advancement advancement = Objects.requireNonNull(Bukkit.getAdvancement(namespacedKey));
player.getAdvancementProgress(advancement).awardCriteria("criteria");
} catch (Exception e) { } catch (Exception e) {
Main.logger().info("Custom Advancements Datapack not found!"); Main.logger().info("Custom Advancements Datapack not found!");
} }
} }
public void applyPendingAdvancements(Player player) {
if(this.pendingAdvancements.isEmpty()) return;
List<PendingAdvancement> grantedAdvancements = pendingAdvancements.stream()
.filter(pendingAdvancement -> pendingAdvancement.receiver.equals(player.getUniqueId())).toList();
this.pendingAdvancements.removeAll(grantedAdvancements);
grantedAdvancements.forEach(pendingAdvancement -> grantAdvancement(pendingAdvancement.advancement(), player.getUniqueId()));
}
public void addPendingAdvancement(UUID receiver, String advancement) {
Pupsi marked this conversation as resolved
Review

sollte private sein, wenn grantAdvancement entscheidet ob es pending ist oder nicht

sollte private sein, wenn grantAdvancement entscheidet ob es pending ist oder nicht
pendingAdvancements.add(new PendingAdvancement(receiver, advancement));
}
@Override @Override
@NotNull @NotNull
protected List<Listener> listeners() { protected List<Listener> listeners() {
return List.of(new CustomAdvancementsDamageEntityListener()); return List.of(
new CustomAdvancementsListener(),
new ApplyPendingAdvancementsListener()
);
} }
} }

View File

@ -0,0 +1,13 @@
package eu.mhsl.craftattack.spawn.appliances.customAdvancements.listener;
import eu.mhsl.craftattack.spawn.appliance.ApplianceListener;
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.CustomAdvancements;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerJoinEvent;
public class ApplyPendingAdvancementsListener extends ApplianceListener<CustomAdvancements> {
@EventHandler
public void onJoin(PlayerJoinEvent event) {
getAppliance().applyPendingAdvancements(event.getPlayer());
}
}

View File

@ -1,6 +1,8 @@
package eu.mhsl.craftattack.spawn.appliances.customAdvancements; package eu.mhsl.craftattack.spawn.appliances.customAdvancements.listener;
import eu.mhsl.craftattack.spawn.appliance.ApplianceListener; import eu.mhsl.craftattack.spawn.appliance.ApplianceListener;
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.Advancements;
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.CustomAdvancements;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -10,7 +12,7 @@ import org.bukkit.event.inventory.CraftItemEvent;
import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerChangedWorldEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
public class CustomAdvancementsDamageEntityListener extends ApplianceListener<CustomAdvancements> { public class CustomAdvancementsListener extends ApplianceListener<CustomAdvancements> {
@EventHandler @EventHandler
public void onEntityDamageEntity(EntityDamageByEntityEvent event) { public void onEntityDamageEntity(EntityDamageByEntityEvent event) {
if(!(event.getEntity() instanceof Player damaged)) return; if(!(event.getEntity() instanceof Player damaged)) return;
@ -18,7 +20,7 @@ public class CustomAdvancementsDamageEntityListener extends ApplianceListener<Cu
if(!damager.getInventory().getItemInMainHand().getType().equals(Material.AIR)) return; if(!damager.getInventory().getItemInMainHand().getType().equals(Material.AIR)) return;
if(!damaged.hasPermission("admin")) return; if(!damaged.hasPermission("admin")) return;
getAppliance().grantAdvancement("search_trouble", damager); getAppliance().grantAdvancement(Advancements.searchTrouble, damager.getUniqueId());
} }
@EventHandler @EventHandler
@ -28,12 +30,13 @@ public class CustomAdvancementsDamageEntityListener extends ApplianceListener<Cu
if(!(event.getView().getPlayer() instanceof Player player)) return; if(!(event.getView().getPlayer() instanceof Player player)) return;
if(result.getType() == Material.RED_SHULKER_BOX) { if(result.getType() == Material.RED_SHULKER_BOX) {
getAppliance().grantAdvancement("fleischerchest", player); // getAppliance().grantAdvancement(Advancements.fleischerchest, player.getUniqueId());
getAppliance().addPendingAdvancement(player.getUniqueId(), Advancements.fleischerchest);
} else if( } else if(
result.getItemMeta().itemName().equals(Component.text("98fdf0ae-c3ab-4ef7-ae25-efd518d600de")) result.getItemMeta().itemName().equals(Component.text("98fdf0ae-c3ab-4ef7-ae25-efd518d600de"))
&& result.getItemMeta().getEnchantmentGlintOverride() && result.getItemMeta().getEnchantmentGlintOverride()
) { ) {
getAppliance().grantAdvancement("craft_pixelblock", player); getAppliance().grantAdvancement(Advancements.craftPixelblock, player.getUniqueId());
} }
} }
@ -41,6 +44,6 @@ public class CustomAdvancementsDamageEntityListener extends ApplianceListener<Cu
public void onChangeWorld(PlayerChangedWorldEvent event) { public void onChangeWorld(PlayerChangedWorldEvent event) {
if(!event.getPlayer().getWorld().getName().startsWith("plugins/PixelBlocks/worlds")) return; if(!event.getPlayer().getWorld().getName().startsWith("plugins/PixelBlocks/worlds")) return;
getAppliance().grantAdvancement("use_pixelblock", event.getPlayer()); getAppliance().grantAdvancement(Advancements.usePixelblock, event.getPlayer().getUniqueId());
} }
} }

View File

@ -5,6 +5,8 @@ import eu.mhsl.craftattack.spawn.Main;
import eu.mhsl.craftattack.spawn.api.HttpServer; import eu.mhsl.craftattack.spawn.api.HttpServer;
import eu.mhsl.craftattack.spawn.appliance.Appliance; import eu.mhsl.craftattack.spawn.appliance.Appliance;
import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.Advancements;
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.CustomAdvancements;
import eu.mhsl.craftattack.spawn.appliances.event.command.*; import eu.mhsl.craftattack.spawn.appliances.event.command.*;
import eu.mhsl.craftattack.spawn.appliances.event.listener.ApplyPendingRewardsListener; import eu.mhsl.craftattack.spawn.appliances.event.listener.ApplyPendingRewardsListener;
import eu.mhsl.craftattack.spawn.util.IteratorUtil; import eu.mhsl.craftattack.spawn.util.IteratorUtil;
@ -172,12 +174,19 @@ public class Event extends Appliance {
memorialItem.setItemMeta(meta); memorialItem.setItemMeta(meta);
Reward memorial = new Reward(uuid, memorialItem); Reward memorial = new Reward(uuid, memorialItem);
Main.instance().getAppliance(CustomAdvancements.class).grantAdvancement(Advancements.participateEvent, uuid);
if(Bukkit.getPlayer(uuid) == null) { if(Bukkit.getPlayer(uuid) == null) {
pendingRewards.add(memorial); pendingRewards.add(memorial);
return; return;
} }
giveReward(memorial); giveReward(memorial);
}); });
rewardConfiguration.rewards.keySet().stream()
.max(Comparator.comparing(rewardConfiguration.rewards::get))
.ifPresent(uuid -> Main.instance().getAppliance(CustomAdvancements.class)
.grantAdvancement(Advancements.winner, uuid));
} }
private void giveReward(Reward reward) { private void giveReward(Reward reward) {

View File

@ -1,7 +1,10 @@
package eu.mhsl.craftattack.spawn.appliances.projectStart; package eu.mhsl.craftattack.spawn.appliances.projectStart;
import eu.mhsl.craftattack.spawn.Main;
import eu.mhsl.craftattack.spawn.appliance.Appliance; import eu.mhsl.craftattack.spawn.appliance.Appliance;
import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.Advancements;
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.CustomAdvancements;
import eu.mhsl.craftattack.spawn.appliances.projectStart.command.ProjectStartCancelCommand; import eu.mhsl.craftattack.spawn.appliances.projectStart.command.ProjectStartCancelCommand;
import eu.mhsl.craftattack.spawn.appliances.projectStart.command.ProjectStartCommand; import eu.mhsl.craftattack.spawn.appliances.projectStart.command.ProjectStartCommand;
import eu.mhsl.craftattack.spawn.appliances.projectStart.command.ProjectStartResetCommand; import eu.mhsl.craftattack.spawn.appliances.projectStart.command.ProjectStartResetCommand;
@ -140,6 +143,10 @@ public class ProjectStart extends Appliance {
) )
); );
Bukkit.getOnlinePlayers().forEach(
player -> Main.instance().getAppliance(CustomAdvancements.class).grantAdvancement(Advancements.start, player.getUniqueId())
);
blockCycle.reset(); blockCycle.reset();
} }