diff --git a/src/main/java/eu/mhsl/craftattack/spawn/Main.java b/src/main/java/eu/mhsl/craftattack/spawn/Main.java index 1558e88..e8b8aee 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/Main.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/Main.java @@ -4,6 +4,8 @@ import eu.mhsl.craftattack.spawn.aggregates.displayName.DisplayName; import eu.mhsl.craftattack.spawn.api.HttpServer; import eu.mhsl.craftattack.spawn.appliance.Appliance; import eu.mhsl.craftattack.spawn.appliances.adminMarker.AdminMarker; +import eu.mhsl.craftattack.spawn.appliances.customAdvancements.CustomAdvancements; +import eu.mhsl.craftattack.spawn.appliances.fleischerchest.Fleischerchest; import eu.mhsl.craftattack.spawn.appliances.kick.Kick; import eu.mhsl.craftattack.spawn.appliances.chatMessages.ChatMessages; import eu.mhsl.craftattack.spawn.appliances.outlawed.Outlawed; @@ -55,7 +57,9 @@ public final class Main extends JavaPlugin { new PanicBan(), new Outlawed(), new DisplayName(), - new Debug() + new Debug(), + new Fleischerchest(), + new CustomAdvancements() ); Bukkit.getLogger().info("Loading appliances..."); diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancements.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancements.java new file mode 100644 index 0000000..861013c --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancements.java @@ -0,0 +1,22 @@ +package eu.mhsl.craftattack.spawn.appliances.customAdvancements; + +import eu.mhsl.craftattack.spawn.appliance.Appliance; +import org.bukkit.Bukkit; +import org.bukkit.NamespacedKey; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.Objects; + +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"); + } + + @Override + protected @NotNull List eventHandlers() { + return List.of(new CustomAdvancementsDamageEntityListener()); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancementsDamageEntityListener.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancementsDamageEntityListener.java new file mode 100644 index 0000000..0b890ef --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancementsDamageEntityListener.java @@ -0,0 +1,20 @@ +package eu.mhsl.craftattack.spawn.appliances.customAdvancements; + +import eu.mhsl.craftattack.spawn.appliance.ApplianceListener; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +public class CustomAdvancementsDamageEntityListener extends ApplianceListener { + @EventHandler + public void onEntityDamageEntity(EntityDamageByEntityEvent event) { + Entity damaged = event.getEntity(); + if(!(damaged instanceof Player)) return; + Entity damager = event.getDamager(); + if(!(damager instanceof Player)) return; + if(damaged.hasPermission("admin")) { + getAppliance().grantAdvancement("search_trouble", (Player) damager); + } + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/fleischerchest/Fleischerchest.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/fleischerchest/Fleischerchest.java new file mode 100644 index 0000000..8e0356b --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/fleischerchest/Fleischerchest.java @@ -0,0 +1,24 @@ +package eu.mhsl.craftattack.spawn.appliances.fleischerchest; + +import eu.mhsl.craftattack.spawn.appliance.Appliance; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.TextColor; +import org.bukkit.event.Listener; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class Fleischerchest extends Appliance { + public void renameItem(ItemStack item) { + ItemMeta meta = item.getItemMeta(); + meta.displayName(Component.text("Fleischerchest").color(TextColor.color(235, 20, 28))); + item.setItemMeta(meta); + } + + @Override + protected @NotNull List eventHandlers() { + return List.of(new FleischerchestCraftItemListener()); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/fleischerchest/FleischerchestCraftItemListener.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/fleischerchest/FleischerchestCraftItemListener.java new file mode 100644 index 0000000..964bb90 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/fleischerchest/FleischerchestCraftItemListener.java @@ -0,0 +1,18 @@ +package eu.mhsl.craftattack.spawn.appliances.fleischerchest; + +import eu.mhsl.craftattack.spawn.appliance.ApplianceListener; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.inventory.PrepareItemCraftEvent; +import org.bukkit.inventory.ItemStack; + +public class FleischerchestCraftItemListener extends ApplianceListener { + @EventHandler + 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()); + } + } +}