Merge pull request 'master-customAdvancements' (#4) from master-customAdvancements into master
Reviewed-on: #4 Reviewed-by: Elias Müller <elias@elias-mueller.com>
This commit is contained in:
		| @@ -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"; | ||||
| } | ||||
| @@ -1,23 +1,62 @@ | ||||
| package eu.mhsl.craftattack.spawn.appliances.customAdvancements; | ||||
|  | ||||
| import eu.mhsl.craftattack.spawn.Main; | ||||
| 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.NamespacedKey; | ||||
| import org.bukkit.advancement.Advancement; | ||||
| import org.bukkit.entity.Player; | ||||
| import org.bukkit.event.Listener; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| import java.util.Objects; | ||||
| import java.util.UUID; | ||||
|  | ||||
| public class CustomAdvancements extends Appliance { | ||||
|     public void grantAdvancement(String advancementName, Player player) { | ||||
|         player.getAdvancementProgress(Objects.requireNonNull(Bukkit.getAdvancement(Objects.requireNonNull(NamespacedKey.fromString("custom_advancements:craftattack/" + advancementName))))).awardCriteria("criteria"); | ||||
|     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 { | ||||
|             NamespacedKey namespacedKey = Objects.requireNonNull(NamespacedKey.fromString("custom_advancements:craftattack/" + advancementName), "NamespacedKey is invalid!"); | ||||
|             Advancement advancement = Objects.requireNonNull(Bukkit.getAdvancement(namespacedKey), "The advancement does not exist!"); | ||||
|             player.getAdvancementProgress(advancement).awardCriteria("criteria"); | ||||
|         } catch (Exception e) { | ||||
|             Main.logger().info("Advancement " + advancementName + " not found! (is Custom Advancements data pack loaded?)"); | ||||
|             throw e; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     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())); | ||||
|     } | ||||
|  | ||||
|     private void addPendingAdvancement(UUID receiver, String advancement) { | ||||
|         pendingAdvancements.add(new PendingAdvancement(receiver, advancement)); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @NotNull | ||||
|     protected List<Listener> listeners() { | ||||
|         return List.of(new CustomAdvancementsDamageEntityListener()); | ||||
|         return List.of( | ||||
|             new CustomAdvancementsListener(), | ||||
|             new ApplyPendingAdvancementsListener() | ||||
|         ); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,19 +0,0 @@ | ||||
| package eu.mhsl.craftattack.spawn.appliances.customAdvancements; | ||||
|  | ||||
| import eu.mhsl.craftattack.spawn.appliance.ApplianceListener; | ||||
| import org.bukkit.Material; | ||||
| import org.bukkit.entity.Player; | ||||
| import org.bukkit.event.EventHandler; | ||||
| import org.bukkit.event.entity.EntityDamageByEntityEvent; | ||||
|  | ||||
| public class CustomAdvancementsDamageEntityListener extends ApplianceListener<CustomAdvancements> { | ||||
|     @EventHandler | ||||
|     public void onEntityDamageEntity(EntityDamageByEntityEvent event) { | ||||
|         if(!(event.getEntity() instanceof Player damaged)) return; | ||||
|         if(!(event.getDamager() instanceof Player damager)) return; | ||||
|         if(!damager.getInventory().getItemInMainHand().getType().equals(Material.AIR)) return; | ||||
|         if(!damaged.hasPermission("admin")) return; | ||||
|  | ||||
|         getAppliance().grantAdvancement("search_trouble", damager); | ||||
|     } | ||||
| } | ||||
| @@ -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()); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,48 @@ | ||||
| package eu.mhsl.craftattack.spawn.appliances.customAdvancements.listener; | ||||
|  | ||||
| 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 org.bukkit.Material; | ||||
| import org.bukkit.entity.Player; | ||||
| import org.bukkit.event.EventHandler; | ||||
| import org.bukkit.event.entity.EntityDamageByEntityEvent; | ||||
| import org.bukkit.event.inventory.CraftItemEvent; | ||||
| import org.bukkit.event.player.PlayerChangedWorldEvent; | ||||
| import org.bukkit.inventory.ItemStack; | ||||
|  | ||||
| public class CustomAdvancementsListener extends ApplianceListener<CustomAdvancements> { | ||||
|     @EventHandler | ||||
|     public void onEntityDamageEntity(EntityDamageByEntityEvent event) { | ||||
|         if(!(event.getEntity() instanceof Player damaged)) return; | ||||
|         if(!(event.getDamager() instanceof Player damager)) return; | ||||
|         if(!damager.getInventory().getItemInMainHand().getType().equals(Material.AIR)) return; | ||||
|         if(!damaged.hasPermission("admin")) return; | ||||
|  | ||||
|         getAppliance().grantAdvancement(Advancements.searchTrouble, damager.getUniqueId()); | ||||
|     } | ||||
|  | ||||
|     @EventHandler | ||||
|     public void onCraftItem(CraftItemEvent event) { | ||||
|         ItemStack result = event.getInventory().getResult(); | ||||
|         if(result == null) return; | ||||
|         if(!(event.getView().getPlayer() instanceof Player player)) return; | ||||
|  | ||||
|         if(result.getType() == Material.RED_SHULKER_BOX) { | ||||
|             getAppliance().grantAdvancement(Advancements.fleischerchest, player.getUniqueId()); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         if(result.getItemMeta().itemName().equals(Component.text("98fdf0ae-c3ab-4ef7-ae25-efd518d600de"))) { | ||||
|             getAppliance().grantAdvancement(Advancements.craftPixelblock, player.getUniqueId()); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @EventHandler | ||||
|     public void onChangeWorld(PlayerChangedWorldEvent event) { | ||||
|         if(!event.getPlayer().getWorld().getName().startsWith("plugins/PixelBlocks/worlds")) return; | ||||
|  | ||||
|         getAppliance().grantAdvancement(Advancements.usePixelblock, event.getPlayer().getUniqueId()); | ||||
|     } | ||||
| } | ||||
| @@ -5,6 +5,8 @@ import eu.mhsl.craftattack.spawn.Main; | ||||
| import eu.mhsl.craftattack.spawn.api.HttpServer; | ||||
| import eu.mhsl.craftattack.spawn.appliance.Appliance; | ||||
| 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.listener.ApplyPendingRewardsListener; | ||||
| import eu.mhsl.craftattack.spawn.util.IteratorUtil; | ||||
| @@ -172,12 +174,19 @@ public class Event extends Appliance { | ||||
|             memorialItem.setItemMeta(meta); | ||||
|             Reward memorial = new Reward(uuid, memorialItem); | ||||
|  | ||||
|             Main.instance().getAppliance(CustomAdvancements.class).grantAdvancement(Advancements.participateEvent, uuid); | ||||
|  | ||||
|             if(Bukkit.getPlayer(uuid) == null) { | ||||
|                 pendingRewards.add(memorial); | ||||
|                 return; | ||||
|             } | ||||
|             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) { | ||||
|   | ||||
| @@ -11,8 +11,8 @@ public class FleischerchestCraftItemListener extends ApplianceListener<Fleischer | ||||
|     public void onPrepareItemCraft(PrepareItemCraftEvent event) { | ||||
|         ItemStack result = event.getInventory().getResult(); | ||||
|         if(result == null) return; | ||||
|         if(result.getType() == Material.RED_SHULKER_BOX) { | ||||
|             getAppliance().renameItem(event.getInventory().getResult()); | ||||
|         } | ||||
|         if(result.getType() != Material.RED_SHULKER_BOX) return; | ||||
|  | ||||
|         getAppliance().renameItem(event.getInventory().getResult()); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,7 +1,10 @@ | ||||
| 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.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.ProjectStartCommand; | ||||
| 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(); | ||||
|     } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user