From b57f8fd545532c7168dc94e6857a1f3e798bb9dd Mon Sep 17 00:00:00 2001 From: TheGame Date: Thu, 11 Sep 2025 09:21:36 +0100 Subject: [PATCH] Recoded --- .../java/dev/zxq5/fantasysmp/Fantasysmp.java | 36 +- .../zxq5/fantasysmp/items/GenericGearSet.java | 357 ------------------ .../dev/zxq5/fantasysmp/items/ItemStats.java | 36 -- .../java/dev/zxq5/fantasysmp/items/Items.java | 78 ++-- .../zxq5/fantasysmp/items/gear/Blazing.java | 161 ++++++++ .../fantasysmp/items/gear/BlazingGear.java | 136 ------- .../zxq5/fantasysmp/items/gear/Crimson.java | 138 +++++++ .../fantasysmp/items/gear/CrimsonGear.java | 69 ---- .../zxq5/fantasysmp/items/gear/Dragon.java | 185 +++++++++ .../fantasysmp/items/gear/DragonGear.java | 175 --------- .../dev/zxq5/fantasysmp/items/gear/Ender.java | 123 ++++++ .../zxq5/fantasysmp/items/gear/EnderGear.java | 109 ------ .../fantasysmp/items/gear/LightningSword.java | 111 +++--- .../zxq5/fantasysmp/items/gear/Poseidon.java | 146 +++++++ .../fantasysmp/items/gear/PoseidonGear.java | 94 ----- .../fantasysmp/items/gear/StevensWrath.java | 128 ++++--- .../fantasysmp/items/gear/TrueNetherite.java | 127 +++++++ .../items/gear/TrueNetheriteGear.java | 52 --- .../zxq5/fantasysmp/items/gear/Witherite.java | 151 ++++++++ .../fantasysmp/items/gear/WitheriteGear.java | 171 --------- .../fantasysmp/items/presets/CustomBoots.java | 90 +++++ .../items/presets/CustomChestplate.java | 90 +++++ .../items/presets/CustomHelmet.java | 90 +++++ .../fantasysmp/items/presets/CustomItem.java | 69 ++++ .../items/presets/CustomItemHandler.java | 189 ++++++++++ .../items/presets/CustomLeggings.java | 90 +++++ .../fantasysmp/items/presets/CustomSet.java | 241 ++++++++++++ .../fantasysmp/items/presets/CustomSword.java | 87 +++++ .../java/dev/zxq5/fantasysmp/util/Common.java | 14 + 29 files changed, 2182 insertions(+), 1361 deletions(-) delete mode 100644 src/main/java/dev/zxq5/fantasysmp/items/GenericGearSet.java delete mode 100644 src/main/java/dev/zxq5/fantasysmp/items/ItemStats.java create mode 100644 src/main/java/dev/zxq5/fantasysmp/items/gear/Blazing.java delete mode 100644 src/main/java/dev/zxq5/fantasysmp/items/gear/BlazingGear.java create mode 100644 src/main/java/dev/zxq5/fantasysmp/items/gear/Crimson.java delete mode 100644 src/main/java/dev/zxq5/fantasysmp/items/gear/CrimsonGear.java create mode 100644 src/main/java/dev/zxq5/fantasysmp/items/gear/Dragon.java delete mode 100644 src/main/java/dev/zxq5/fantasysmp/items/gear/DragonGear.java create mode 100644 src/main/java/dev/zxq5/fantasysmp/items/gear/Ender.java delete mode 100644 src/main/java/dev/zxq5/fantasysmp/items/gear/EnderGear.java create mode 100644 src/main/java/dev/zxq5/fantasysmp/items/gear/Poseidon.java delete mode 100644 src/main/java/dev/zxq5/fantasysmp/items/gear/PoseidonGear.java create mode 100644 src/main/java/dev/zxq5/fantasysmp/items/gear/TrueNetherite.java delete mode 100644 src/main/java/dev/zxq5/fantasysmp/items/gear/TrueNetheriteGear.java create mode 100644 src/main/java/dev/zxq5/fantasysmp/items/gear/Witherite.java delete mode 100644 src/main/java/dev/zxq5/fantasysmp/items/gear/WitheriteGear.java create mode 100644 src/main/java/dev/zxq5/fantasysmp/items/presets/CustomBoots.java create mode 100644 src/main/java/dev/zxq5/fantasysmp/items/presets/CustomChestplate.java create mode 100644 src/main/java/dev/zxq5/fantasysmp/items/presets/CustomHelmet.java create mode 100644 src/main/java/dev/zxq5/fantasysmp/items/presets/CustomItem.java create mode 100644 src/main/java/dev/zxq5/fantasysmp/items/presets/CustomItemHandler.java create mode 100644 src/main/java/dev/zxq5/fantasysmp/items/presets/CustomLeggings.java create mode 100644 src/main/java/dev/zxq5/fantasysmp/items/presets/CustomSet.java create mode 100644 src/main/java/dev/zxq5/fantasysmp/items/presets/CustomSword.java create mode 100644 src/main/java/dev/zxq5/fantasysmp/util/Common.java diff --git a/src/main/java/dev/zxq5/fantasysmp/Fantasysmp.java b/src/main/java/dev/zxq5/fantasysmp/Fantasysmp.java index a27d449..7a2a913 100644 --- a/src/main/java/dev/zxq5/fantasysmp/Fantasysmp.java +++ b/src/main/java/dev/zxq5/fantasysmp/Fantasysmp.java @@ -4,17 +4,37 @@ import dev.zxq5.fantasysmp.events.*; import dev.zxq5.fantasysmp.groups.Commands; import dev.zxq5.fantasysmp.groups.Team; import dev.zxq5.fantasysmp.items.*; +import dev.zxq5.fantasysmp.items.presets.CustomItem; +import dev.zxq5.fantasysmp.items.presets.CustomItemHandler; import dev.zxq5.fantasysmp.warps.Warp; import dev.zxq5.fantasysmp.warps.Warper; +import org.bukkit.Bukkit; +import org.bukkit.NamespacedKey; +import org.bukkit.event.Listener; import org.bukkit.plugin.java.JavaPlugin; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + public final class Fantasysmp extends JavaPlugin { + private static JavaPlugin plugin; + public static NamespacedKey customItemKey; + public static Map customItemMap; @Override public void onEnable() { - Items items = new Items(this); + plugin = this; + + customItemKey = new NamespacedKey(this, "custom-item-key"); + customItemMap = new HashMap<>(); + + Items items = new Items(); getCommand("items").setExecutor(items); + + registerListeners(new CustomItemHandler()); + // Plugin startup logic try { @@ -56,4 +76,18 @@ public final class Fantasysmp extends JavaPlugin { e.printStackTrace(); } } + + + public static void registerItems(CustomItem... customItems) { + Arrays.asList(customItems).forEach(ci-> customItemMap.put(ci.getId(), ci)); + } + + private void registerListeners(Listener... listeners) { + Arrays.asList(listeners).forEach(l-> Bukkit.getPluginManager().registerEvents(l, this)); + } + + public static JavaPlugin getPlugin(){ + return plugin; + } + } diff --git a/src/main/java/dev/zxq5/fantasysmp/items/GenericGearSet.java b/src/main/java/dev/zxq5/fantasysmp/items/GenericGearSet.java deleted file mode 100644 index 5195f91..0000000 --- a/src/main/java/dev/zxq5/fantasysmp/items/GenericGearSet.java +++ /dev/null @@ -1,357 +0,0 @@ -package dev.zxq5.fantasysmp.items; - -import dev.zxq5.fantasysmp.util.LoreChecker; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.NamespacedKey; -import org.bukkit.attribute.Attribute; -import org.bukkit.attribute.AttributeModifier; -import org.bukkit.entity.Player; -import org.bukkit.event.Listener; -import org.bukkit.inventory.*; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.components.EquippableComponent; -import org.bukkit.plugin.Plugin; - -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -public abstract class GenericGearSet implements HasRecipes, Listener { - - protected ItemStats sword = new ItemStats(); - protected ItemStats helmet = new ItemStats(); - protected ItemStats chestplate = new ItemStats(); - protected ItemStats leggings = new ItemStats(); - protected ItemStats boots = new ItemStats(); - - protected static RecipeChoice NETHERITE_UPGRADE = new RecipeChoice.MaterialChoice(Material.NETHERITE_UPGRADE_SMITHING_TEMPLATE); - protected static RecipeChoice WITHER_SKULL = new RecipeChoice.MaterialChoice(Material.WITHER_SKELETON_SKULL); - - public void registerEvents(Plugin plugin) { - Bukkit.getServer().getPluginManager().registerEvents(this, plugin); - } - - public void setTier1() { - sword.setMaterial(Material.WOODEN_SWORD); - helmet.setMaterial(Material.LEATHER_HELMET); - chestplate.setMaterial(Material.LEATHER_CHESTPLATE); - leggings.setMaterial(Material.LEATHER_LEGGINGS); - boots.setMaterial(Material.LEATHER_BOOTS); - } - - public void setTier3() { - helmet.setMaterial(Material.IRON_HELMET); - chestplate.setMaterial(Material.IRON_CHESTPLATE); - leggings.setMaterial(Material.IRON_LEGGINGS); - boots.setMaterial(Material.IRON_BOOTS); - sword.setMaterial(Material.IRON_SWORD); - - sword.attackDamage = 6; - sword.attackSpeed = 1.6f; - helmet.armour = 2; - helmet.armourToughness = 0; - chestplate.armour = 6; - chestplate.armourToughness = 0; - leggings.armour = 5; - leggings.armourToughness = 0; - boots.armour = 2; - boots.armourToughness = 0; - } - - public void setTier4() { - helmet.setMaterial(Material.DIAMOND_HELMET); - chestplate.setMaterial(Material.DIAMOND_CHESTPLATE); - leggings.setMaterial(Material.DIAMOND_LEGGINGS); - boots.setMaterial(Material.DIAMOND_BOOTS); - sword.setMaterial(Material.DIAMOND_SWORD); - - sword.attackDamage = 7; - sword.attackSpeed = 1.6f; - helmet.armour = 3; - helmet.armourToughness = 2; - chestplate.armour = 8; - chestplate.armourToughness = 2; - leggings.armour = 6; - leggings.armourToughness = 2; - boots.armour = 3; - boots.armourToughness = 2; - } - - public void setTier5() { - helmet.setMaterial(Material.NETHERITE_HELMET); - chestplate.setMaterial(Material.NETHERITE_CHESTPLATE); - leggings.setMaterial(Material.NETHERITE_LEGGINGS); - boots.setMaterial(Material.NETHERITE_BOOTS); - sword.setMaterial(Material.NETHERITE_SWORD); - - sword.attackDamage = 8; - sword.attackSpeed = 1.6f; - helmet.armour = 3; - helmet.armourToughness = 3; - helmet.knockbackResistance = 0.1; - chestplate.armour = 8; - chestplate.armourToughness = 3; - chestplate.knockbackResistance = 0.1; - leggings.armour = 6; - leggings.armourToughness = 3; - leggings.knockbackResistance = 0.1; - boots.armour = 3; - boots.armourToughness = 3; - boots.knockbackResistance = 0.1; - } - - public void setTier6() { - helmet.setMaterial(Material.NETHERITE_HELMET); - chestplate.setMaterial(Material.NETHERITE_CHESTPLATE); - leggings.setMaterial(Material.NETHERITE_LEGGINGS); - boots.setMaterial(Material.NETHERITE_BOOTS); - sword.setMaterial(Material.NETHERITE_SWORD); - - sword.attackDamage = 10; - sword.attackSpeed = 1.6f; - helmet.armour = 3; - helmet.armourToughness = 5; - helmet.knockbackResistance = 0.1; - chestplate.armour = 8; - chestplate.armourToughness = 5; - chestplate.knockbackResistance = 0.1; - leggings.armour = 6; - leggings.armourToughness = 5; - leggings.knockbackResistance = 0.1; - boots.armour = 3; - boots.armourToughness = 5; - boots.knockbackResistance = 0.1; - } - - public boolean hasGear(Player player) { - return (LoreChecker.itemLoreContains(player.getInventory().getHelmet(), this.helmet.lore) - && LoreChecker.itemLoreContains(player.getInventory().getChestplate(), this.chestplate.lore) - && LoreChecker.itemLoreContains(player.getInventory().getLeggings(), this.leggings.lore) - && LoreChecker.itemLoreContains(player.getInventory().getBoots(), this.boots.lore) - ); - } - - // this must be overridden by the child class. - public static void init() {} - - public ItemStack getSword() { - ItemStack item = sword.material; - ItemMeta meta = item.getItemMeta(); - - meta.addAttributeModifier(Attribute.ATTACK_DAMAGE, new AttributeModifier( - NamespacedKey.minecraft("generic.attack_damage"), - sword.attackDamage, - AttributeModifier.Operation.ADD_NUMBER, - EquipmentSlotGroup.HAND - )); - - meta.addAttributeModifier(Attribute.ATTACK_SPEED, new AttributeModifier( - NamespacedKey.minecraft("generic.attack_speed"), - sword.attackSpeed - 4, - AttributeModifier.Operation.ADD_NUMBER, - EquipmentSlotGroup.HAND - )); - - meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); - meta.setDisplayName(sword.name); - - if (!sword.customItemModel.isEmpty()) meta.setItemModel(NamespacedKey.fromString("fantasysmp:" + sword.customItemModel)); - - ArrayList lore = new ArrayList<>(List.of(sword.lore)); - lore.add("\n"); - lore.add(ChatColor.GRAY + "When in Main Hand:" + ChatColor.RESET); - if (sword.attackDamage > 0) lore.add(ChatColor.GREEN + String.format(" %.1f Attack Damage", sword.attackDamage) + ChatColor.RESET); - if (sword.attackSpeed > 0) lore.add(ChatColor.GREEN + String.format(" %.1f Attack Speed", sword.attackSpeed) + ChatColor.RESET); - - meta.setLore(lore); - item.setItemMeta(meta); - return item; - } - - public ItemStack getHelmet() { - ItemStack item = helmet.material; - - ItemMeta meta = item.getItemMeta(); - meta.setDisplayName(helmet.name); - meta.setLore(new ArrayList<>(List.of(helmet.lore))); - - - meta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier( - UUID.randomUUID(), - "armour", - (double) helmet.armour, - AttributeModifier.Operation.ADD_NUMBER, - EquipmentSlotGroup.HEAD - )); - - meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier( - UUID.randomUUID(), - "armour_toughness", - helmet.armourToughness, - AttributeModifier.Operation.ADD_NUMBER, - EquipmentSlotGroup.HEAD - )); - - if (helmet.knockbackResistance != 0) { - meta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, new AttributeModifier( - UUID.randomUUID(), - "knockback_resistance", - helmet.knockbackResistance, - AttributeModifier.Operation.ADD_NUMBER, - EquipmentSlotGroup.HEAD - )); - } - if (!helmet.customItemModel.isEmpty()) meta.setItemModel(NamespacedKey.fromString("fantasysmp:" + helmet.customItemModel)); - EquippableComponent equippable = meta.getEquippable(); - equippable.setModel(NamespacedKey.fromString("fantasysmp:" + helmet.customEquipmentModel)); - equippable.setSlot(EquipmentSlot.HEAD); - meta.setEquippable(equippable); - - item.setItemMeta(meta); - return item; - } - - public ItemStack getChestplate() { - ItemStack item = chestplate.material; - - ItemMeta meta = item.getItemMeta(); - meta.setDisplayName(chestplate.name); - meta.setLore(new ArrayList<>(List.of(chestplate.lore))); - - meta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier( - UUID.randomUUID(), - "armour", - (double) chestplate.armour, - AttributeModifier.Operation.ADD_NUMBER, - EquipmentSlotGroup.CHEST - )); - - meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier( - UUID.randomUUID(), - "armour_toughness", - chestplate.armourToughness, - AttributeModifier.Operation.ADD_NUMBER, - EquipmentSlotGroup.CHEST - )); - - if (chestplate.knockbackResistance != 0) { - meta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, new AttributeModifier( - UUID.randomUUID(), - "knockback_resistance", - chestplate.knockbackResistance, - AttributeModifier.Operation.ADD_NUMBER, - EquipmentSlotGroup.CHEST - )); - } - - if (!chestplate.customItemModel.isEmpty()) meta.setItemModel(NamespacedKey.fromString("fantasysmp:" + chestplate.customItemModel)); - EquippableComponent equippable = meta.getEquippable(); - equippable.setModel(NamespacedKey.fromString("fantasysmp:" + chestplate.customEquipmentModel)); - equippable.setSlot(EquipmentSlot.CHEST); - meta.setEquippable(equippable); - - item.setItemMeta(meta); - return item; - } - - public ItemStack getLeggings() { - ItemStack item = leggings.material; - - ItemMeta meta = item.getItemMeta(); - meta.setDisplayName(leggings.name); - meta.setLore(new ArrayList<>(List.of(leggings.lore))); - - meta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier( - UUID.randomUUID(), - "armour", - (double) leggings.armour, - AttributeModifier.Operation.ADD_NUMBER, - EquipmentSlotGroup.LEGS - )); - - meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier( - UUID.randomUUID(), - "armour_toughness", - leggings.armourToughness, - AttributeModifier.Operation.ADD_NUMBER, - EquipmentSlotGroup.LEGS - )); - - if (leggings.knockbackResistance != 0) { - meta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, new AttributeModifier( - UUID.randomUUID(), - "knockback_resistance", - leggings.knockbackResistance, - AttributeModifier.Operation.ADD_NUMBER, - EquipmentSlotGroup.LEGS - )); - } - - if (!leggings.customItemModel.isEmpty()) meta.setItemModel(NamespacedKey.fromString("fantasysmp:" + leggings.customItemModel)); - EquippableComponent equippable = meta.getEquippable(); - equippable.setModel(NamespacedKey.fromString("fantasysmp:" + leggings.customEquipmentModel)); - equippable.setSlot(EquipmentSlot.LEGS); - meta.setEquippable(equippable); - - item.setItemMeta(meta); - return item; - } - - public ItemStack getBoots() { - ItemStack item = boots.material; - - ItemMeta meta = item.getItemMeta(); - meta.setDisplayName(boots.name); - meta.setLore(new ArrayList<>(List.of(boots.lore))); - - meta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier( - UUID.randomUUID(), - "armour", - (double) boots.armour, - AttributeModifier.Operation.ADD_NUMBER, - EquipmentSlotGroup.FEET - )); - - meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier( - UUID.randomUUID(), - "armour_toughness", - boots.armourToughness, - AttributeModifier.Operation.ADD_NUMBER, - EquipmentSlotGroup.FEET - )); - - if (boots.knockbackResistance != 0) { - meta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, new AttributeModifier( - UUID.randomUUID(), - "knockback_resistance", - boots.knockbackResistance, - AttributeModifier.Operation.ADD_NUMBER, - EquipmentSlotGroup.FEET - )); - } - - if (!boots.customItemModel.isEmpty()) meta.setItemModel(NamespacedKey.fromString("fantasysmp:" + boots.customItemModel)); - EquippableComponent equippable = meta.getEquippable(); - equippable.setModel(NamespacedKey.fromString("fantasysmp:" + boots.customEquipmentModel)); - equippable.setSlot(EquipmentSlot.FEET); - meta.setEquippable(equippable); - - item.setItemMeta(meta); - return item; - } -} - - - - - - - - - - - - - diff --git a/src/main/java/dev/zxq5/fantasysmp/items/ItemStats.java b/src/main/java/dev/zxq5/fantasysmp/items/ItemStats.java deleted file mode 100644 index 5acb73a..0000000 --- a/src/main/java/dev/zxq5/fantasysmp/items/ItemStats.java +++ /dev/null @@ -1,36 +0,0 @@ -package dev.zxq5.fantasysmp.items; - -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; - -public class ItemStats { - public double attackDamage; - public double attackSpeed; - public int durability; - public int armour; - public int armourToughness; - public double knockbackResistance ; - public String name; - public String lore; - public String customItemModel; - public String customEquipmentModel; - public ItemStack material; - - public ItemStats() { - this.attackDamage = 0; - this.attackSpeed = 0; - this.durability = 0; - this.armour = 0; - this.armourToughness = 0; - this.knockbackResistance = 0; - this.name = ""; - this.lore = ""; - this.customItemModel = ""; - this.customEquipmentModel = ""; - this.material = new ItemStack(Material.AIR); - } - - public void setMaterial(Material material) { - this.material = new ItemStack(material); - } -} diff --git a/src/main/java/dev/zxq5/fantasysmp/items/Items.java b/src/main/java/dev/zxq5/fantasysmp/items/Items.java index 96f0c03..295be29 100644 --- a/src/main/java/dev/zxq5/fantasysmp/items/Items.java +++ b/src/main/java/dev/zxq5/fantasysmp/items/Items.java @@ -1,13 +1,18 @@ package dev.zxq5.fantasysmp.items; +import dev.zxq5.fantasysmp.Fantasysmp; import dev.zxq5.fantasysmp.items.food.AppleCider; import dev.zxq5.fantasysmp.items.food.AppleJuice; import dev.zxq5.fantasysmp.items.gear.*; +import dev.zxq5.fantasysmp.items.presets.CustomSet; import org.bukkit.command.CommandExecutor; import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; + +import java.util.HashMap; +import java.util.Map; public class Items implements CommandExecutor { + private static Map commandHandlers = new HashMap<>(); @Override public boolean onCommand(org.bukkit.command.CommandSender sender, org.bukkit.command.Command command, String label, String[] args) { @@ -32,17 +37,11 @@ public class Items implements CommandExecutor { } CommandExecutor handler; - switch (args[0]) { - case "witherite" -> handler = new WitheriteGear(); - case "lightning" -> handler = new LightningSword(); - case "steven" -> handler = new StevensWrath(); - case "blazing" -> handler = new BlazingGear(); - case "dragon" -> handler = new DragonGear(); - case "trueneth" -> handler = new TrueNetheriteGear(); - case "ender" -> handler = new EnderGear(); - case "poseidon" -> handler = new PoseidonGear(); - case "crimson" -> handler = new CrimsonGear(); - default -> { return false; } + + if(commandHandlers.containsKey(args[0])) { + handler = commandHandlers.get(args[0]); + } else { + return false; } handler.onCommand(sender, command, label, args); @@ -50,48 +49,25 @@ public class Items implements CommandExecutor { return true; } - public Items(JavaPlugin plugin) { - - WitheriteGear witherite = new WitheriteGear(); - witherite.registerRecipes(); - witherite.registerEvents(plugin); - - LightningSword lightning = new LightningSword(); - lightning.registerRecipes(); - lightning.registerEvents(plugin); - - StevensWrath stevensWrath = new StevensWrath(); - stevensWrath.registerRecipes(); - stevensWrath.registerEvents(plugin); - - BlazingGear blazing = new BlazingGear(); - blazing.registerRecipes(); - blazing.registerEvents(plugin); - - DragonGear dragon = new DragonGear(); - dragon.registerRecipes(); - dragon.registerEvents(plugin); - - EnderGear ender = new EnderGear(); - ender.registerRecipes(); - ender.registerEvents(plugin); - - TrueNetheriteGear trueNetherite = new TrueNetheriteGear(); - trueNetherite.registerRecipes(); - trueNetherite.registerEvents(plugin); - - PoseidonGear poseidon = new PoseidonGear(); - poseidon.registerRecipes(); - poseidon.registerEvents(plugin); - - CrimsonGear crimson = new CrimsonGear(); - crimson.registerRecipes(); - crimson.registerEvents(plugin); + public Items() { + new Witherite(); + new Blazing(); + new Dragon(); + new TrueNetherite(); + new Crimson(); + new Poseidon(); + new Ender(); + new StevensWrath(); + new LightningSword(); AppleJuice appleJuice = new AppleJuice(); - appleJuice.registerEvents(plugin); + appleJuice.registerEvents(Fantasysmp.getPlugin()); AppleCider appleCider = new AppleCider(); - appleCider.registerEvents(plugin); + appleCider.registerEvents(Fantasysmp.getPlugin()); + } + + public static void registerHandler(String command, CustomSet customSet) { + commandHandlers.put(command,customSet); } } diff --git a/src/main/java/dev/zxq5/fantasysmp/items/gear/Blazing.java b/src/main/java/dev/zxq5/fantasysmp/items/gear/Blazing.java new file mode 100644 index 0000000..db18670 --- /dev/null +++ b/src/main/java/dev/zxq5/fantasysmp/items/gear/Blazing.java @@ -0,0 +1,161 @@ +package dev.zxq5.fantasysmp.items.gear; + +import dev.zxq5.fantasysmp.Fantasysmp; +import dev.zxq5.fantasysmp.items.presets.*; +import org.bukkit.*; +import org.bukkit.damage.DamageType; +import org.bukkit.entity.Player; +import org.bukkit.entity.SmallFireball; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityPotionEffectEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.RecipeChoice; +import org.bukkit.inventory.SmithingTransformRecipe; +import org.bukkit.plugin.java.JavaPlugin; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.bukkit.Bukkit.getServer; + +public class Blazing extends CustomSet { + private ArrayList cooldown = new ArrayList<>(); + public static Blazing instance; + public static int tier = 5; + + private final ArrayList damageTypes = new ArrayList<>(List.of( + DamageType.HOT_FLOOR, + DamageType.ON_FIRE, + DamageType.IN_FIRE, + DamageType.LAVA + )); + + public Blazing() { + super(tier); + instance = this; + + this.swordId = "BlazingSword"; + this.swordName = "&6Blazing Sword"; + this.swordLore = new ArrayList<>(Arrays.asList("A sword forged from molten lava and the essence of blazes.", "Applies &6flame effect" + ChatColor.RESET + "for 12 seconds.")); + this.swordLore.addAll(getSwordStats()); + this.swordModel = 14306; + + this.helmetId = "BlazingHelmet"; + this.helmetName = "&6Blazing Helmet"; + this.helmetLore = List.of("A helmet forged from molten lava and the essence of blazes", "&6Set Bonus: Fire Immunity"); + this.helmetModel = 14307; + + this.chestplateId = "BlazingChestplate"; + this.chestplateName = "&6Blazing Chestplate"; + this.chestplateLore = List.of("A chestplate forged from molten lava and the essence of blazes", "&6Set Bonus: Fire Immunity"); + this.chestplateModel = 14308; + + this.leggingsId = "BlazingLeggings"; + this.leggingsName = "&6Blazing Leggings"; + this.leggingsLore = List.of("Leggings forged from molten lava and the essence of blazes", "&6Set Bonus: Fire Immunity"); + this.leggingsModel = 14309; + + this.bootsId = "BlazingBoots"; + this.bootsName = "&6Blazing boots"; + this.bootsLore = List.of("Boots forged from molten lava and the essence of blazes", "&6Set Bonus: Fire Immunity"); + this.bootsModel = 14310; + + this.equipmentModel = "blazing"; + registerItems(); + registerRecipes(); + registerHandler(); + } + + public static Blazing getInstance() { + if (instance == null) { + instance = new Blazing(); + } + return instance; + } + + @Override + public void registerRecipes() { + RecipeChoice template = new RecipeChoice.MaterialChoice(Material.NETHERITE_UPGRADE_SMITHING_TEMPLATE); + RecipeChoice resource = new RecipeChoice.MaterialChoice(Material.BLAZE_ROD); + + RecipeChoice swordChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_SWORD); + RecipeChoice helmetChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_HELMET); + RecipeChoice chestplateChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_CHESTPLATE); + RecipeChoice leggingsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_LEGGINGS); + RecipeChoice bootsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_BOOTS); + + ItemStack sword = Fantasysmp.customItemMap.get(swordId).getItem(); + NamespacedKey swordKey = new NamespacedKey("fantasysmp.items", swordId.toLowerCase()); + SmithingTransformRecipe swordRecipe = new SmithingTransformRecipe(swordKey, sword, template, swordChoice, resource); + getServer().addRecipe(swordRecipe); + + ItemStack helmet = Fantasysmp.customItemMap.get(helmetId).getItem(); + NamespacedKey helmetKey = new NamespacedKey("fantasysmp.items", helmetId.toLowerCase()); + SmithingTransformRecipe helmetRecipe = new SmithingTransformRecipe(helmetKey, helmet, template, helmetChoice, resource); + getServer().addRecipe(helmetRecipe); + + ItemStack chestplate = Fantasysmp.customItemMap.get(chestplateId).getItem(); + NamespacedKey chestplateKey = new NamespacedKey("fantasysmp.items", chestplateId.toLowerCase()); + SmithingTransformRecipe chestplateRecipe = new SmithingTransformRecipe(chestplateKey, chestplate, template, chestplateChoice, resource); + getServer().addRecipe(chestplateRecipe); + + ItemStack leggings = Fantasysmp.customItemMap.get(leggingsId).getItem(); + NamespacedKey leggingsKey = new NamespacedKey("fantasysmp.items", leggingsId.toLowerCase()); + SmithingTransformRecipe leggingsRecipe = new SmithingTransformRecipe(leggingsKey, leggings, template, leggingsChoice, resource); + getServer().addRecipe(leggingsRecipe); + + ItemStack boots = Fantasysmp.customItemMap.get(bootsId).getItem(); + NamespacedKey bootsKey = new NamespacedKey("fantasysmp.items", bootsId.toLowerCase()); + SmithingTransformRecipe bootsRecipe = new SmithingTransformRecipe(bootsKey, boots, template, bootsChoice, resource); + getServer().addRecipe(bootsRecipe); + } + + @Override + public void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {} + + @Override + public void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event) { + JavaPlugin plugin = Fantasysmp.getPlugin(); + + cooldown.add(player); + Bukkit.getScheduler().runTaskLater(plugin, () -> cooldown.remove(player), 25); + + shootFireball(player); + Bukkit.getScheduler().runTaskLater(plugin, () -> shootFireball(player), 4); + Bukkit.getScheduler().runTaskLater(plugin, () -> shootFireball(player), 8); + } + + public void shootFireball(Player player) { + Location location = player.getLocation(); + World world = player.getWorld(); + SmallFireball fireball = player.launchProjectile(SmallFireball.class); + fireball.setIsIncendiary(false); + player.playSound(location, Sound.ENTITY_BLAZE_SHOOT, 1.0f, 1.0f); + world.spawnParticle(Particle.FLAME, location, 1); + } + + @Override + public void onArmourChange(Player player, ItemStack item, boolean active) {} + + @Override + public void onHit(Player player, ItemStack heldItem, EntityDamageByEntityEvent event) { + if (event.getEntity().getFireTicks() < 240) event.getEntity().setFireTicks(240); + } + + @Override + public void onDamage(EntityDamageEvent event) { + if (damageTypes.contains(event.getDamageSource().getDamageType())) event.setCancelled(true); + + event.getEntity().setFireTicks(0); + } + + @Override + public void onEffect(EntityPotionEffectEvent event) {} + + private static void registerItems() { + Fantasysmp.registerItems(new CustomSword(instance, getInstance().swordId), new CustomHelmet(instance, getInstance().helmetId), new CustomChestplate(instance, getInstance().chestplateId), new CustomLeggings(instance, getInstance().leggingsId), new CustomBoots(instance, getInstance().bootsId)); + } +} diff --git a/src/main/java/dev/zxq5/fantasysmp/items/gear/BlazingGear.java b/src/main/java/dev/zxq5/fantasysmp/items/gear/BlazingGear.java deleted file mode 100644 index 557f1a0..0000000 --- a/src/main/java/dev/zxq5/fantasysmp/items/gear/BlazingGear.java +++ /dev/null @@ -1,136 +0,0 @@ -package dev.zxq5.fantasysmp.items.gear; - -import dev.zxq5.fantasysmp.items.GenericGearSet; -import dev.zxq5.fantasysmp.util.LoreChecker; -import org.bukkit.*; -import org.bukkit.command.CommandExecutor; -import org.bukkit.damage.DamageType; -import org.bukkit.entity.Fireball; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.entity.SmallFireball; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.RecipeChoice; -import org.bukkit.inventory.SmithingTransformRecipe; -import org.bukkit.plugin.Plugin; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; -import org.bukkit.util.Vector; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import static org.bukkit.Bukkit.*; - -public class BlazingGear extends GenericGearSet implements Listener, CommandExecutor { - private ArrayList cooldown = new ArrayList<>(); - - private final ArrayList damageTypes = new ArrayList<>(List.of( - DamageType.HOT_FLOOR, - DamageType.ON_FIRE, - DamageType.IN_FIRE, - DamageType.LAVA - )); - - @Override - public boolean onCommand(org.bukkit.command.CommandSender sender, org.bukkit.command.Command command, String label, String[] args) { - Player player = (Player) sender; - player.getInventory().addItem(this.getSword()); - player.getInventory().addItem(this.getHelmet()); - player.getInventory().addItem(this.getChestplate()); - player.getInventory().addItem(this.getLeggings()); - player.getInventory().addItem(this.getBoots()); - - return true; - } - - @Override - public void registerRecipes() {} - - @EventHandler - public void onPlayerSetOnFire(org.bukkit.event.entity.EntityDamageEvent event) { - if (!(event.getEntity() instanceof Player player)) return; - - if (!(LoreChecker.itemLoreContains(player.getInventory().getHelmet(), this.helmet.lore))) return; - if (!(LoreChecker.itemLoreContains(player.getInventory().getChestplate(), this.chestplate.lore))) return; - if (!(LoreChecker.itemLoreContains(player.getInventory().getLeggings(), this.leggings.lore))) return; - if (!(LoreChecker.itemLoreContains(player.getInventory().getBoots(), this.boots.lore))) return; - - if (damageTypes.contains(event.getDamageSource().getDamageType())) event.setCancelled(true); - - player.setFireTicks(0); - } - - @EventHandler - public void onPlayerInteract(PlayerInteractEvent event) { - Player player = event.getPlayer(); - ItemStack item = event.getItem(); // Get the item the player interacted with - - if (!(event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK)) { - return; - } - - if (!(LoreChecker.itemLoreContains(item, this.sword.lore))) return; - if (cooldown.contains(player)) return; - - Plugin plugin = getPluginManager().getPlugin("fantasysmp"); - - cooldown.add(player); - Bukkit.getScheduler().runTaskLater(plugin, () -> cooldown.remove(player), 25); - - shootFireball(player); - Bukkit.getScheduler().runTaskLater(plugin, () -> shootFireball(player), 4); - Bukkit.getScheduler().runTaskLater(plugin, () -> shootFireball(player), 8); - } - - @EventHandler - public void onEntityDamageByEntity(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player player)) return; - if (!(LoreChecker.itemLoreContains(player.getInventory().getItemInMainHand(), this.sword.lore))) return; - if (event.getEntity().getFireTicks() < 240) event.getEntity().setFireTicks(240); - } - - public void shootFireball(Player player) { - Location location = player.getLocation(); - World world = player.getWorld(); - player.launchProjectile(SmallFireball.class); - player.playSound(location, Sound.ENTITY_BLAZE_SHOOT, 1.0f, 1.0f); - world.spawnParticle(Particle.FLAME, location, 1); - } - - public static void init() {} - - public BlazingGear() { - this.setTier4(); - this.sword.name = ChatColor.GOLD + "Blazing Sword" + ChatColor.RESET; - this.sword.customItemModel = "blazing_sword"; - - this.helmet.name = ChatColor.GOLD + "Blazing Helmet" + ChatColor.RESET; - this.helmet.customItemModel = "blazing_helmet"; - this.helmet.customEquipmentModel = "blazing"; - - this.chestplate.name = ChatColor.GOLD + "Blazing Chestplate" + ChatColor.RESET; - this.chestplate.customItemModel = "blazing_chestplate"; - this.chestplate.customEquipmentModel = "blazing"; - - this.leggings.name = ChatColor.GOLD + "Blazing Leggings" + ChatColor.RESET; - this.leggings.customItemModel = "blazing_leggings"; - this.leggings.customEquipmentModel = "blazing"; - - this.boots.name = ChatColor.GOLD + "Blazing Boots" + ChatColor.RESET; - this.boots.customItemModel = "blazing_boots"; - this.boots.customEquipmentModel = "blazing"; - - this.sword.lore = "Forged from molten lava and the essence of blazes"; - this.helmet.lore = "Forged from molten lava and the essence of blazes"; - this.chestplate.lore = "Forged from molten lava and the essence of blazes"; - this.leggings.lore = "Forged from molten lava and the essence of blazes"; - this.boots.lore = "Forged from molten lava and the essence of blazes"; - } -} diff --git a/src/main/java/dev/zxq5/fantasysmp/items/gear/Crimson.java b/src/main/java/dev/zxq5/fantasysmp/items/gear/Crimson.java new file mode 100644 index 0000000..1bdc7be --- /dev/null +++ b/src/main/java/dev/zxq5/fantasysmp/items/gear/Crimson.java @@ -0,0 +1,138 @@ +package dev.zxq5.fantasysmp.items.gear; + +import dev.zxq5.fantasysmp.Fantasysmp; +import dev.zxq5.fantasysmp.items.presets.*; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityPotionEffectEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.RecipeChoice; +import org.bukkit.inventory.SmithingTransformRecipe; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.bukkit.Bukkit.getServer; + +public class Crimson extends CustomSet { + public static Crimson instance; + public static int tier = 5; + private boolean setBonus = false; + + public Crimson() { + super(tier); + instance = this; + + this.swordId = "CrimsonSword"; + this.swordName = "&4Bloodlust"; + this.swordLore = new ArrayList<>(Arrays.asList("Live off the &4blood" + ChatColor.RESET + " of your enemies.", "Heal &41HP" + ChatColor.RESET + " after each hit.")); + this.swordLore.addAll(getSwordStats()); + this.swordModel = 14321; + + this.helmetId = "CrimsonHelmet"; + this.helmetName = "&4Crimson Helmet"; + this.helmetLore = List.of("A helmet that grants its wearer &4vampiric senses.","&4Set Bonus: Heal +1HP With Bloodlust"); + this.helmetModel = 14322; + + this.chestplateId = "CrimsonChestplate"; + this.chestplateName = "&4Crimson Chestplate"; + this.chestplateLore = List.of("A chestplate that grants its wearer &4vampiric senses.","&4Set Bonus: Heal +1HP With Bloodlust"); + this.chestplateModel = 14323; + + this.leggingsId = "CrimsonLeggings"; + this.leggingsName = "&4Crimson Leggings"; + this.leggingsLore = List.of("Leggings that grants its wearer &4vampiric senses.","&4Set Bonus: Heal +1HP With Bloodlust"); + this.leggingsModel = 14324; + + this.bootsId = "CrimsonBoots"; + this.bootsName = "&4Crimson boots"; + this.bootsLore = List.of("Boots that grants its wearer &4vampiric senses.","&4Set Bonus: Heal +1HP With Bloodlust"); + this.bootsModel = 14325; + + this.equipmentModel = "crimson"; + registerItems(); + registerRecipes(); + registerHandler(); + } + + public static Crimson getInstance() { + if (instance == null) { + instance = new Crimson(); + } + return instance; + } + + @Override + public void registerRecipes() { + RecipeChoice template = new RecipeChoice.MaterialChoice(Material.NETHERITE_UPGRADE_SMITHING_TEMPLATE); + RecipeChoice resource = new RecipeChoice.MaterialChoice(Material.ENCHANTED_GOLDEN_APPLE); + + RecipeChoice swordChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_SWORD); + RecipeChoice helmetChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_HELMET); + RecipeChoice chestplateChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_CHESTPLATE); + RecipeChoice leggingsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_LEGGINGS); + RecipeChoice bootsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_BOOTS); + + ItemStack sword = Fantasysmp.customItemMap.get(swordId).getItem(); + NamespacedKey swordKey = new NamespacedKey("fantasysmp.items", swordId.toLowerCase()); + SmithingTransformRecipe swordRecipe = new SmithingTransformRecipe(swordKey, sword, template, swordChoice, resource); + getServer().addRecipe(swordRecipe); + + ItemStack helmet = Fantasysmp.customItemMap.get(helmetId).getItem(); + NamespacedKey helmetKey = new NamespacedKey("fantasysmp.items", helmetId.toLowerCase()); + SmithingTransformRecipe helmetRecipe = new SmithingTransformRecipe(helmetKey, helmet, template, helmetChoice, resource); + getServer().addRecipe(helmetRecipe); + + ItemStack chestplate = Fantasysmp.customItemMap.get(chestplateId).getItem(); + NamespacedKey chestplateKey = new NamespacedKey("fantasysmp.items", chestplateId.toLowerCase()); + SmithingTransformRecipe chestplateRecipe = new SmithingTransformRecipe(chestplateKey, chestplate, template, chestplateChoice, resource); + getServer().addRecipe(chestplateRecipe); + + ItemStack leggings = Fantasysmp.customItemMap.get(leggingsId).getItem(); + NamespacedKey leggingsKey = new NamespacedKey("fantasysmp.items", leggingsId.toLowerCase()); + SmithingTransformRecipe leggingsRecipe = new SmithingTransformRecipe(leggingsKey, leggings, template, leggingsChoice, resource); + getServer().addRecipe(leggingsRecipe); + + ItemStack boots = Fantasysmp.customItemMap.get(bootsId).getItem(); + NamespacedKey bootsKey = new NamespacedKey("fantasysmp.items", bootsId.toLowerCase()); + SmithingTransformRecipe bootsRecipe = new SmithingTransformRecipe(bootsKey, boots, template, bootsChoice, resource); + getServer().addRecipe(bootsRecipe); + } + + @Override + public void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {} + + @Override + public void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {} + + @Override + public void onHit(Player player, ItemStack itemStack, EntityDamageByEntityEvent event) { + player.setHealth(Math.min(player.getHealth() + 1, player.getMaxHealth())); + + if(setBonus) { + player.setHealth( Math.min(player.getHealth() + 1, player.getMaxHealth()) ); + player.setFoodLevel( Math.min(player.getFoodLevel() + 1, 20) ); + } + } + + @Override + public void onArmourChange(Player player, ItemStack item, boolean active) { + setBonus = active; + } + + @Override + public void onDamage(EntityDamageEvent event) {} + + @Override + public void onEffect(EntityPotionEffectEvent event) {} + + private static void registerItems() { + Fantasysmp.registerItems(new CustomSword(instance, getInstance().swordId), new CustomHelmet(instance, getInstance().helmetId), new CustomChestplate(instance, getInstance().chestplateId), new CustomLeggings(instance, getInstance().leggingsId), new CustomBoots(instance, getInstance().bootsId)); + } +} diff --git a/src/main/java/dev/zxq5/fantasysmp/items/gear/CrimsonGear.java b/src/main/java/dev/zxq5/fantasysmp/items/gear/CrimsonGear.java deleted file mode 100644 index 8e6ca49..0000000 --- a/src/main/java/dev/zxq5/fantasysmp/items/gear/CrimsonGear.java +++ /dev/null @@ -1,69 +0,0 @@ -package dev.zxq5.fantasysmp.items.gear; - -import dev.zxq5.fantasysmp.items.GenericGearSet; -import dev.zxq5.fantasysmp.util.LoreChecker; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandExecutor; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; - -public class CrimsonGear extends GenericGearSet implements CommandExecutor, Listener { - @Override - public boolean onCommand(org.bukkit.command.CommandSender sender, org.bukkit.command.Command command, String label, String[] args) { - Player player = (Player) sender; - - player.getInventory().addItem(this.getSword()); - player.getInventory().addItem(this.getHelmet()); - player.getInventory().addItem(this.getChestplate()); - player.getInventory().addItem(this.getLeggings()); - player.getInventory().addItem(this.getBoots()); - return true; - } - - @EventHandler - public void onEntityDamageByEntity(org.bukkit.event.entity.EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player player)) return; - if (!(LoreChecker.itemLoreContains(player.getInventory().getItemInMainHand(), this.sword.lore))) return; - - player.setHealth( Math.min(player.getHealth() + 1, player.getMaxHealth()) ); - - if (!(LoreChecker.itemLoreContains(player.getInventory().getHelmet(), this.helmet.lore))) return; - if (!(LoreChecker.itemLoreContains(player.getInventory().getChestplate(), this.chestplate.lore))) return; - if (!(LoreChecker.itemLoreContains(player.getInventory().getLeggings(), this.leggings.lore))) return; - if (!(LoreChecker.itemLoreContains(player.getInventory().getBoots(), this.boots.lore))) return; - - player.setHealth( Math.min(player.getHealth() + 1, player.getMaxHealth()) ); - player.setFoodLevel( Math.min(player.getFoodLevel() + 1, 20) ); - } - - @Override - public void registerRecipes() {} - - public CrimsonGear() { - this.setTier5(); - this.sword.name = ChatColor.DARK_RED + "Bloodlust" + ChatColor.RESET; - this.sword.customItemModel = "crimson_sword"; - this.sword.lore = "Live off the blood of your enemies."; - - this.helmet.name = ChatColor.DARK_RED + "Crimson Helmet" + ChatColor.RESET; - this.helmet.customItemModel = "crimson_helmet"; - this.helmet.customEquipmentModel = "crimson"; - this.helmet.lore = "A helmet that grants its wearer vampiric senses."; - - this.chestplate.name = ChatColor.DARK_RED + "Crimson Chestplate" + ChatColor.RESET; - this.chestplate.customItemModel = "crimson_chestplate"; - this.chestplate.customEquipmentModel = "crimson"; - this.chestplate.lore = "A chestplate that strengthens the heart of the wearer."; - - this.leggings.name = ChatColor.DARK_RED + "Crimson Leggings" + ChatColor.RESET; - this.leggings.customItemModel = "crimson_leggings"; - this.leggings.customEquipmentModel = "crimson"; - this.leggings.lore = "Leggings that enhance the wearer's speed and agility."; - - this.boots.name = ChatColor.DARK_RED + "Crimson Boots" + ChatColor.RESET; - this.boots.customItemModel = "crimson_boots"; - this.boots.customEquipmentModel = "crimson"; - this.boots.lore = "Boots that allow the wearer to move silently and swiftly."; - } -} diff --git a/src/main/java/dev/zxq5/fantasysmp/items/gear/Dragon.java b/src/main/java/dev/zxq5/fantasysmp/items/gear/Dragon.java new file mode 100644 index 0000000..f008fd0 --- /dev/null +++ b/src/main/java/dev/zxq5/fantasysmp/items/gear/Dragon.java @@ -0,0 +1,185 @@ +package dev.zxq5.fantasysmp.items.gear; + +import dev.zxq5.fantasysmp.Fantasysmp; +import dev.zxq5.fantasysmp.items.presets.*; +import org.bukkit.*; +import org.bukkit.damage.DamageType; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityPotionEffectEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.RecipeChoice; +import org.bukkit.inventory.SmithingTransformRecipe; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.util.Vector; + +import java.util.*; + +import static org.bukkit.Bukkit.getServer; + +public class Dragon extends CustomSet { + private Map gliding = new HashMap<>(); + private ArrayList cooldown = new ArrayList<>(); + public static Dragon instance; + public static int tier = 5; + + public Dragon() { + super(tier); + instance = this; + + this.swordId = "DragonSword"; + this.swordName = "&5Dragon Sword"; + this.swordMaterial = Material.NETHERITE_SWORD; + this.swordLore = new ArrayList<>(Arrays.asList("")); + this.swordLore.addAll(getSwordStats()); + this.swordModel = 14311; + + this.helmetId = "DragonHelmet"; + this.helmetName = "&5Dragon Helmet"; + this.helmetLore = List.of("&5Set Bonus: "); + this.helmetModel = 14312; + + this.chestplateId = "DragonChestplate"; + this.chestplateName = "&5Dragon Chestplate"; + this.chestplateLore = List.of("&5Set Bonus: "); + this.chestplateModel = 14313; + + this.leggingsId = "DragonLeggings"; + this.leggingsName = "&5Dragon Leggings"; + this.leggingsLore = List.of("&5Set Bonus: "); + this.leggingsModel = 14314; + + this.bootsId = "DragonBoots"; + this.bootsName = "&5Dragon boots"; + this.bootsLore = List.of("&5Set Bonus: "); + this.bootsModel = 14315; + + this.equipmentModel = "dragon"; + registerItems(); + registerRecipes(); + registerHandler(); + } + + public static Dragon getInstance() { + if (instance == null) { + instance = new Dragon(); + } + return instance; + } + + @Override + public void registerRecipes() { + RecipeChoice template = new RecipeChoice.MaterialChoice(Material.NETHERITE_UPGRADE_SMITHING_TEMPLATE); + RecipeChoice resource = new RecipeChoice.MaterialChoice(Material.ELYTRA); + + RecipeChoice swordChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_SWORD); + RecipeChoice helmetChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_HELMET); + RecipeChoice chestplateChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_CHESTPLATE); + RecipeChoice leggingsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_LEGGINGS); + RecipeChoice bootsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_BOOTS); + + ItemStack sword = Fantasysmp.customItemMap.get(swordId).getItem(); + NamespacedKey swordKey = new NamespacedKey("fantasysmp.items", swordId.toLowerCase()); + SmithingTransformRecipe swordRecipe = new SmithingTransformRecipe(swordKey, sword, template, swordChoice, resource); + getServer().addRecipe(swordRecipe); + + ItemStack helmet = Fantasysmp.customItemMap.get(helmetId).getItem(); + NamespacedKey helmetKey = new NamespacedKey("fantasysmp.items", helmetId.toLowerCase()); + SmithingTransformRecipe helmetRecipe = new SmithingTransformRecipe(helmetKey, helmet, template, helmetChoice, resource); + getServer().addRecipe(helmetRecipe); + + ItemStack chestplate = Fantasysmp.customItemMap.get(chestplateId).getItem(); + NamespacedKey chestplateKey = new NamespacedKey("fantasysmp.items", chestplateId.toLowerCase()); + SmithingTransformRecipe chestplateRecipe = new SmithingTransformRecipe(chestplateKey, chestplate, template, chestplateChoice, resource); + getServer().addRecipe(chestplateRecipe); + + ItemStack leggings = Fantasysmp.customItemMap.get(leggingsId).getItem(); + NamespacedKey leggingsKey = new NamespacedKey("fantasysmp.items", leggingsId.toLowerCase()); + SmithingTransformRecipe leggingsRecipe = new SmithingTransformRecipe(leggingsKey, leggings, template, leggingsChoice, resource); + getServer().addRecipe(leggingsRecipe); + + ItemStack boots = Fantasysmp.customItemMap.get(bootsId).getItem(); + NamespacedKey bootsKey = new NamespacedKey("fantasysmp.items", bootsId.toLowerCase()); + SmithingTransformRecipe bootsRecipe = new SmithingTransformRecipe(bootsKey, boots, template, bootsChoice, resource); + getServer().addRecipe(bootsRecipe); + } + + @Override + public void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {} + + @Override + public void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event) { + if (cooldown.contains(player)) return; + + Location location = player.getLocation(); + Vector direction = location.getDirection(); + + player.setVelocity(direction.multiply(2.0)); + player.playSound(location, Sound.ENTITY_ENDER_DRAGON_FLAP, 1.0f, 1.0f); + World world = player.getWorld(); + world.spawnParticle(Particle.DRAGON_BREATH, location, 100); + + cooldown.add(player); + Bukkit.getScheduler().scheduleSyncDelayedTask( + Objects.requireNonNull(Fantasysmp.getPlugin()), + () -> cooldown.remove(player), + 25 + ); + } + + @Override + public void onHit(Player player, ItemStack itemStack, EntityDamageByEntityEvent event) { + if (!(player.isFlying() || player.isGliding())) return; + + double baseDamage = event.getDamage(); + double newDamage = baseDamage * Math.min(Math.max(player.getVelocity().length(), 1.0), 2.0); + + event.setDamage(newDamage); + } + + @Override + public void onArmourChange(Player player, ItemStack item, boolean active) { + if(active) { + ItemMeta itemMeta = item.getItemMeta(); + itemMeta.setGlider(true); + item.setItemMeta(itemMeta); + gliding.put(player, item); + }else if (gliding.containsKey(player)) { + item = gliding.get(player); + gliding.remove(player); + if(item.hasItemMeta()) { + ItemMeta itemMeta = item.getItemMeta(); + itemMeta.setGlider(false); + item.setItemMeta(itemMeta); + } + } + } + + @Override + public void onDamage(EntityDamageEvent event) { + if (!(event.getDamageSource().getDamageType() == DamageType.FLY_INTO_WALL)) return; + + event.setCancelled(true); + } + + @Override + public void onEffect(EntityPotionEffectEvent event) { + if (event.getNewEffect() == null) return; + + if (event.getNewEffect().getType() != PotionEffectType.LEVITATION) { + return; + } + try { + event.setCancelled(true); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static void registerItems() { + Fantasysmp.registerItems(new CustomSword(instance, getInstance().swordId), new CustomHelmet(instance, getInstance().helmetId), new CustomChestplate(instance, getInstance().chestplateId), new CustomLeggings(instance, getInstance().leggingsId), new CustomBoots(instance, getInstance().bootsId)); + } +} diff --git a/src/main/java/dev/zxq5/fantasysmp/items/gear/DragonGear.java b/src/main/java/dev/zxq5/fantasysmp/items/gear/DragonGear.java deleted file mode 100644 index dea0df8..0000000 --- a/src/main/java/dev/zxq5/fantasysmp/items/gear/DragonGear.java +++ /dev/null @@ -1,175 +0,0 @@ -package dev.zxq5.fantasysmp.items.gear; - -import dev.zxq5.fantasysmp.items.GenericGearSet; -import dev.zxq5.fantasysmp.items.ItemStats; -import dev.zxq5.fantasysmp.util.LoreChecker; -import org.bukkit.*; -import org.bukkit.attribute.Attribute; -import org.bukkit.attribute.AttributeModifier; -import org.bukkit.command.CommandExecutor; -import org.bukkit.damage.DamageType; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.*; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.components.EquippableComponent; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; -import org.bukkit.util.Vector; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.UUID; - -import static org.bukkit.Bukkit.broadcastMessage; -import static org.bukkit.Bukkit.getServer; - -public class DragonGear extends GenericGearSet implements Listener, CommandExecutor { - private ArrayList cooldown = new ArrayList<>(); - - @Override - public boolean onCommand(org.bukkit.command.CommandSender sender, org.bukkit.command.Command command, String label, String[] args) { - Player player = (Player) sender; - player.getInventory().addItem(this.getSword()); - player.getInventory().addItem(this.getHelmet()); - player.getInventory().addItem(this.getChestplate()); - player.getInventory().addItem(this.getLeggings()); - player.getInventory().addItem(this.getBoots()); - - return true; - } - - @Override - public void registerRecipes() {} - - @EventHandler - public void onEntityPotionEffectEvent(org.bukkit.event.entity.EntityPotionEffectEvent event) { - if (event.getEntity() instanceof Player player) { - if (event.getNewEffect() == null) return; - - if (event.getNewEffect().getType() != PotionEffectType.LEVITATION) { - return; - } - - try { - if (LoreChecker.itemLoreContains(player.getInventory().getHelmet(), this.helmet.lore) - && LoreChecker.itemLoreContains(player.getInventory().getChestplate(), this.chestplate.lore) - && LoreChecker.itemLoreContains(player.getInventory().getLeggings(), this.leggings.lore) - && LoreChecker.itemLoreContains(player.getInventory().getBoots(), this.boots.lore) - ) { - event.setCancelled(true); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - } - - @EventHandler - public void onEntityDamage(org.bukkit.event.entity.EntityDamageEvent event) { - // check if fall damage - if (!(event.getEntity() instanceof Player player)) return; - if (!(LoreChecker.itemLoreContains(player.getInventory().getHelmet(), this.helmet.lore) - && LoreChecker.itemLoreContains(player.getInventory().getChestplate(), this.chestplate.lore) - && LoreChecker.itemLoreContains(player.getInventory().getLeggings(), this.leggings.lore) - && LoreChecker.itemLoreContains(player.getInventory().getBoots(), this.boots.lore) - )) return; - if (!(event.getDamageSource().getDamageType() == DamageType.FLY_INTO_WALL)) return; - - event.setCancelled(true); - } - - @EventHandler - public void onEntityDamageByEntity(org.bukkit.event.entity.EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player player)) return; - if (!(LoreChecker.itemLoreContains(player.getInventory().getItemInMainHand(), this.sword.lore))) return; - if (!(player.isFlying() || player.isGliding())) return; - - double baseDamage = event.getDamage(); - double newDamage = baseDamage * Math.min(Math.max(player.getVelocity().length(), 1.0), 2.0); - - broadcastMessage("damage " + baseDamage); - broadcastMessage("velocity " + player.getVelocity().length()); - broadcastMessage("new damage " + newDamage); - - event.setDamage(newDamage); - } - - @EventHandler - public void onPlayerInteract(PlayerInteractEvent event) { - Player player = event.getPlayer(); - ItemStack item = event.getItem(); // Get the item the player interacted with - - if (!(event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK)) { - return; - } - - if (!(LoreChecker.itemLoreContains(item, this.sword.lore))) return; - if (cooldown.contains(player)) return; - - Location location = player.getLocation(); - Vector direction = location.getDirection(); - - player.setVelocity(direction.multiply(2.0)); - player.playSound(location, Sound.ENTITY_ENDER_DRAGON_FLAP, 1.0f, 1.0f); - World world = player.getWorld(); - world.spawnParticle(Particle.DRAGON_BREATH, location, 100); - - cooldown.add(player); - Bukkit.getScheduler().scheduleSyncDelayedTask( - Objects.requireNonNull(Bukkit.getPluginManager().getPlugin("fantasysmp")), - () -> cooldown.remove(player), - 25 - ); - } - - @Override - public ItemStack getHelmet() { -// helmet.setMaterial(Material.DRAGON_HEAD); - return super.getHelmet(); - } - - @Override - public ItemStack getChestplate() { - chestplate.setMaterial(Material.ELYTRA); - ItemStack item = super.getChestplate(); - item.addUnsafeEnchantment(Enchantment.PROTECTION, 4); - return item; - } - - public static void init() {} - - public DragonGear() { - this.setTier5(); - this.sword.name = ChatColor.DARK_PURPLE + "Dragon Sword" + ChatColor.RESET; - this.sword.customItemModel = "dragon_sword"; - - this.helmet.name = ChatColor.DARK_PURPLE + "Dragon Helmet" + ChatColor.RESET; - this.helmet.customItemModel = "dragon_helmet"; - this.helmet.customEquipmentModel = "dragon"; - - this.chestplate.name = ChatColor.DARK_PURPLE + "Dragon Chestplate" + ChatColor.RESET; - this.chestplate.customItemModel = "dragon_chestplate"; - this.chestplate.customEquipmentModel = "dragon"; - - this.leggings.name = ChatColor.DARK_PURPLE + "Dragon Leggings" + ChatColor.RESET; - this.leggings.customItemModel = "dragon_leggings"; - this.leggings.customEquipmentModel = "dragon"; - - this.boots.name = ChatColor.DARK_PURPLE + "Dragon Boots" + ChatColor.RESET; - this.boots.customItemModel = "dragon_boots"; - this.boots.customEquipmentModel = "dragon"; - - this.sword.lore = "A blade forged from dragon scales and chorus fruit"; - this.helmet.lore = "Forged from dragon scales and chorus fruit"; - this.chestplate.lore = "Forged from dragon scales and chorus fruit"; - this.leggings.lore = "Forged from dragon scales and chorus fruit"; - this.boots.lore = "Forged from dragon scales and chorus fruit"; - } -} diff --git a/src/main/java/dev/zxq5/fantasysmp/items/gear/Ender.java b/src/main/java/dev/zxq5/fantasysmp/items/gear/Ender.java new file mode 100644 index 0000000..6527e05 --- /dev/null +++ b/src/main/java/dev/zxq5/fantasysmp/items/gear/Ender.java @@ -0,0 +1,123 @@ +package dev.zxq5.fantasysmp.items.gear; + +import dev.zxq5.fantasysmp.Fantasysmp; +import dev.zxq5.fantasysmp.items.presets.*; +import org.bukkit.*; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityPotionEffectEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.util.Vector; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +public class Ender extends CustomSet { + private ArrayList cooldown = new ArrayList<>(); + public static Ender instance; + public static int tier = 4; + + public Ender() { + super(tier); + instance = this; + + this.swordId = "EnderSword"; + this.swordName = "&3Ender Sword"; + this.swordLore = new ArrayList<>(Arrays.asList("A sword forged from the essence of ender pearls,")); + this.swordLore.addAll(getSwordStats()); + this.swordModel = 14331; + + this.helmetId = "EnderHelmet"; + this.helmetName = "&3Ender Helmet"; + this.helmetLore = List.of("A helmet forged from the essence of ender pearls,", "&3Set Bonus: "); + this.helmetModel = 14332; + + this.chestplateId = "EnderChestplate"; + this.chestplateName = "&3Ender Chestplate"; + this.chestplateLore = List.of("A chestplate forged from the essence of ender pearls,", "&3Set Bonus: "); + this.chestplateModel = 14333; + + this.leggingsId = "PoseidonLeggings"; + this.leggingsName = "&3Ender Leggings"; + this.leggingsLore = List.of("Leggings forged from the essence of ender pearls,", "&3Set Bonus: "); + this.leggingsModel = 14334; + + this.bootsId = "EnderBoots"; + this.bootsName = "&3Ender boots"; + this.bootsLore = List.of("Boots forged from the essence of ender pearls,", "&3Set Bonus: "); + this.bootsModel = 14335; + + this.equipmentModel = "ender"; + registerItems(); + registerRecipes(); + registerHandler(); + } + + public static Ender getInstance() { + if (instance == null) { + instance = new Ender(); + } + return instance; + } + + @Override + public void registerRecipes() {} + + @Override + public void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {} + + @Override + public void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event) { + if (cooldown.contains(player)) return; + + Location old_location = player.getLocation(); + World world = player.getWorld(); + Vector direction = old_location.getDirection(); + + Block block = player.getTargetBlock(null, 64); + + if (block.getType() == Material.AIR || block.getType() == Material.CAVE_AIR) { + return; + } + + player.playSound(old_location, Sound.ENTITY_ENDERMAN_TELEPORT, 1.0f, 1.0f); + world.spawnParticle(Particle.PORTAL, old_location, 100); + + Location new_location = block.getLocation(); + new_location.setPitch(old_location.getPitch()); + new_location.setYaw(old_location.getYaw()); + player.setVelocity(new Vector(player.getVelocity().getX(), 0, player.getVelocity().getZ())); + player.teleport(new_location); + + player.playSound(new_location, Sound.ENTITY_ENDERMAN_TELEPORT, 1.0f, 1.0f); + world.spawnParticle(Particle.PORTAL, new_location, 100); + + cooldown.add(player); + Bukkit.getScheduler().scheduleSyncDelayedTask( + Objects.requireNonNull(Fantasysmp.getPlugin()), + () -> cooldown.remove(player), + 25 + ); + } + + @Override + public void onHit(Player player, ItemStack itemStack, EntityDamageByEntityEvent event) {} + + @Override + public void onArmourChange(Player player, ItemStack item, boolean active) {} + + @Override + public void onDamage(EntityDamageEvent event) {} + + @Override + public void onEffect(EntityPotionEffectEvent event) {} + + private static void registerItems() { + Fantasysmp.registerItems(new CustomSword(instance, getInstance().swordId), new CustomHelmet(instance, getInstance().helmetId), new CustomChestplate(instance, getInstance().chestplateId), new CustomLeggings(instance, getInstance().leggingsId), new CustomBoots(instance, getInstance().bootsId)); + } +} diff --git a/src/main/java/dev/zxq5/fantasysmp/items/gear/EnderGear.java b/src/main/java/dev/zxq5/fantasysmp/items/gear/EnderGear.java deleted file mode 100644 index 3b1fe5a..0000000 --- a/src/main/java/dev/zxq5/fantasysmp/items/gear/EnderGear.java +++ /dev/null @@ -1,109 +0,0 @@ -package dev.zxq5.fantasysmp.items.gear; - -import dev.zxq5.fantasysmp.items.GenericGearSet; -import dev.zxq5.fantasysmp.util.LoreChecker; -import org.bukkit.*; -import org.bukkit.block.Block; -import org.bukkit.command.CommandExecutor; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.*; -import org.bukkit.util.Vector; - -import java.util.ArrayList; -import java.util.Objects; - -public class EnderGear extends GenericGearSet implements Listener, CommandExecutor { - private ArrayList cooldown = new ArrayList<>(); - - @Override - public boolean onCommand(org.bukkit.command.CommandSender sender, org.bukkit.command.Command command, String label, String[] args) { - Player player = (Player) sender; - player.getInventory().addItem(this.getSword()); - player.getInventory().addItem(this.getHelmet()); - player.getInventory().addItem(this.getChestplate()); - player.getInventory().addItem(this.getLeggings()); - player.getInventory().addItem(this.getBoots()); - - return true; - } - - @Override - public void registerRecipes() {} - - @EventHandler - public void onPlayerInteract(PlayerInteractEvent event) { - Player player = event.getPlayer(); - ItemStack item = event.getItem(); // Get the item the player interacted with - - if (!(event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK)) { - return; - } - - if (!(LoreChecker.itemLoreContains(item, this.sword.lore))) return; - if (cooldown.contains(player)) return; - - Location old_location = player.getLocation(); - World world = player.getWorld(); - Vector direction = old_location.getDirection(); - // find nearest block in that direction - - Block block = player.getTargetBlock(null, 64); - - if (block.getType() == Material.AIR || block.getType() == Material.CAVE_AIR) { - return; - } - - player.playSound(old_location, Sound.ENTITY_ENDERMAN_TELEPORT, 1.0f, 1.0f); - world.spawnParticle(Particle.PORTAL, old_location, 100); - - Location new_location = block.getLocation(); - new_location.setPitch(old_location.getPitch()); - new_location.setYaw(old_location.getYaw()); - player.setVelocity(new Vector(player.getVelocity().getX(), 0, player.getVelocity().getZ())); - player.teleport(new_location); - - player.playSound(new_location, Sound.ENTITY_ENDERMAN_TELEPORT, 1.0f, 1.0f); - world.spawnParticle(Particle.PORTAL, new_location, 100); - - cooldown.add(player); - Bukkit.getScheduler().scheduleSyncDelayedTask( - Objects.requireNonNull(Bukkit.getPluginManager().getPlugin("fantasysmp")), - () -> cooldown.remove(player), - 25 - ); - } - - public static void init() {} - - public EnderGear() { - this.setTier4(); - this.sword.name = ChatColor.DARK_AQUA + "Ender Sword" + ChatColor.RESET; - this.sword.customItemModel = "ender_sword"; - - this.helmet.name = ChatColor.DARK_AQUA + "Ender Helmet" + ChatColor.RESET; - this.helmet.customItemModel = "ender_helmet"; - this.helmet.customEquipmentModel = "ender"; - - this.chestplate.name = ChatColor.DARK_AQUA + "Ender Chestplate" + ChatColor.RESET; - this.chestplate.customItemModel = "ender_chestplate"; - this.chestplate.customEquipmentModel = "ender"; - - this.leggings.name = ChatColor.DARK_AQUA + "Ender Leggings" + ChatColor.RESET; - this.leggings.customItemModel = "ender_leggings"; - this.leggings.customEquipmentModel = "ender"; - - this.boots.name = ChatColor.DARK_AQUA + "Ender Boots" + ChatColor.RESET; - this.boots.customItemModel = "ender_boots"; - this.boots.customEquipmentModel = "ender"; - - this.sword.lore = "A sword forged from the essence of ender pearls,"; - this.helmet.lore = "A helmet forged from the essence of ender pearls,"; - this.chestplate.lore = "A chestplate forged from the essence of ender pearls,"; - this.leggings.lore = "Leggings forged from the essence of ender pearls,"; - this.boots.lore = "Boots forged from the essence of ender pearls,"; - } -} diff --git a/src/main/java/dev/zxq5/fantasysmp/items/gear/LightningSword.java b/src/main/java/dev/zxq5/fantasysmp/items/gear/LightningSword.java index 194de83..d882b6c 100644 --- a/src/main/java/dev/zxq5/fantasysmp/items/gear/LightningSword.java +++ b/src/main/java/dev/zxq5/fantasysmp/items/gear/LightningSword.java @@ -1,34 +1,55 @@ package dev.zxq5.fantasysmp.items.gear; -import dev.zxq5.fantasysmp.items.GenericGearSet; -import dev.zxq5.fantasysmp.util.LoreChecker; +import dev.zxq5.fantasysmp.Fantasysmp; +import dev.zxq5.fantasysmp.items.presets.*; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.World; -import org.bukkit.command.CommandExecutor; -import org.bukkit.entity.*; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityPotionEffectEvent; +import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.potion.PotionEffectType; +import java.util.ArrayList; +import java.util.Arrays; + import static org.bukkit.Bukkit.getServer; -public class LightningSword extends GenericGearSet implements Listener, CommandExecutor { +public class LightningSword extends CustomSet { + public static LightningSword instance; + public static int tier = 6; - @Override - public boolean onCommand(org.bukkit.command.CommandSender sender, org.bukkit.command.Command command, String label, String[] args) { - Player player = (Player) sender; - player.getInventory().addItem(this.getSword()); - return true; + public LightningSword() { + super(tier); + instance = this; + + this.swordId = "LightningSword"; + this.swordName = "&1Lightning Sword"; + this.swordLore = new ArrayList<>(Arrays.asList("&1All who oppose shall be smitten.")); + this.swordLore.addAll(getSwordStats()); + this.swordModel = 14337; + + registerItems(); + registerRecipes(); + registerHandler(); + } + + public static LightningSword getInstance() { + if (instance == null) { + instance = new LightningSword(); + } + return instance; } @Override public void registerRecipes() { - ItemStack sword = this.getSword(); - NamespacedKey swordKey = new NamespacedKey("fantasysmp.items", "lightning_sword"); + ItemStack sword = Fantasysmp.customItemMap.get(swordId).getItem(); + NamespacedKey swordKey = new NamespacedKey("fantasysmp.items", swordId.toLowerCase()); ShapedRecipe swordRecipe = new ShapedRecipe(swordKey, sword); swordRecipe.shape(" N ", " N ", " R "); swordRecipe.setIngredient('N', Material.NETHER_STAR); @@ -36,22 +57,15 @@ public class LightningSword extends GenericGearSet implements Listener, CommandE getServer().addRecipe(swordRecipe); } - @EventHandler - public void onEntityDamageByEntity(org.bukkit.event.entity.EntityDamageByEntityEvent event) { - // checks that it is a player that is performing the attack. - if (!(event.getDamager() instanceof org.bukkit.entity.Player player)) { - return; - } + @Override + public void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {} - if (!( LoreChecker.itemLoreContains(player.getInventory().getItemInMainHand(), this.sword.lore) )) return; + @Override + public void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {} - if ( - player.isOnGround() - || player.getVelocity().getY() >= 0 - || player.isClimbing() - || player.isInWater() - || player.isInsideVehicle() - || player.hasPotionEffect(PotionEffectType.BLINDNESS) + @Override + public void onHit(Player player, ItemStack itemStack, EntityDamageByEntityEvent event) { + if (player.isOnGround() || player.getVelocity().getY() >= 0 || player.isClimbing() || player.isInWater() || player.isInsideVehicle() || player.hasPotionEffect(PotionEffectType.BLINDNESS) ) return; @@ -63,43 +77,26 @@ public class LightningSword extends GenericGearSet implements Listener, CommandE world.strikeLightning(location); } - @EventHandler - public void onEntityDamage(org.bukkit.event.entity.EntityDamageEvent event) { - if (event.getEntity() instanceof Player player) { - if (!(event + @Override + public void onArmourChange(Player player, ItemStack item, boolean active) {} + + @Override + public void onDamage(EntityDamageEvent event) { + if (!(event .getDamageSource() .getDamageType() .getKey() .toString() .equals("minecraft:lightning_bolt") - )) return; + )) return; - if (LoreChecker.itemLoreContains(player.getInventory().getItemInMainHand(), this.sword.lore)) { - event.setCancelled(true); - return; - } - } + event.setCancelled(true); } - @EventHandler - public void onEntityDeath(org.bukkit.event.entity.EntityDeathEvent event) { - if (event.getEntity() instanceof Mob mob) { - if ( - event.getDamageSource().getDamageType().getKey().toString().equals("minecraft:lightning_bolt") - || event.getDamageSource().getDamageType().getKey().toString().equals("minecraft:on_fire") - ) { - Entity e = event.getEntity(); - ((ExperienceOrb) e.getLocation().getWorld().spawn(e.getLocation(), ExperienceOrb.class)).setExperience(10); - } - } - } + @Override + public void onEffect(EntityPotionEffectEvent event) {} - public static void init() {} - - public LightningSword() { - this.setTier5(); - this.sword.name = "Lightning Sword"; - this.sword.customItemModel = "lightning_sword"; - this.sword.lore = "All who oppose shall be smitten."; + private static void registerItems() { + Fantasysmp.registerItems(new CustomSword(instance, getInstance().swordId)); } } diff --git a/src/main/java/dev/zxq5/fantasysmp/items/gear/Poseidon.java b/src/main/java/dev/zxq5/fantasysmp/items/gear/Poseidon.java new file mode 100644 index 0000000..94f3b58 --- /dev/null +++ b/src/main/java/dev/zxq5/fantasysmp/items/gear/Poseidon.java @@ -0,0 +1,146 @@ +package dev.zxq5.fantasysmp.items.gear; + +import dev.zxq5.fantasysmp.Fantasysmp; +import dev.zxq5.fantasysmp.items.presets.*; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityPotionEffectEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.RecipeChoice; +import org.bukkit.inventory.SmithingTransformRecipe; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.bukkit.Bukkit.getServer; + +public class Poseidon extends CustomSet { + public static Poseidon instance; + public static int tier = 5; + + public Poseidon() { + super(tier); + instance = this; + + this.swordId = "PoseidonSword"; + this.swordName = "&4Poseidon's Fury"; + this.swordMaterial = Material.TRIDENT; + this.swordLore = new ArrayList<>(Arrays.asList("A powerful trident imbued with the power of the &4ocean.")); + this.swordAttackDamage = 10; + this.swordAttackSpeed = 1.2f; + this.swordLore.addAll(getSwordStats()); + this.swordModel = 14326; + this.swordEnchants.put(Enchantment.RIPTIDE, 5); + + this.helmetId = "PoseidonHelmet"; + this.helmetName = "&bPoseidon's Crown"; + this.helmetLore = List.of("A helmet granted to those who harness the &bpower of the ocean.","&bSet Bonus: "); + this.helmetModel = 14327; + this.helmetEnchants.put(Enchantment.AQUA_AFFINITY, 3); + + this.chestplateId = "PoseidonChestplate"; + this.chestplateName = "&bPoseidon's Chestplate"; + this.chestplateLore = List.of("A chestplate granted to those who harness the &bpower of the ocean.","&bSet Bonus: "); + this.chestplateModel = 14328; + + this.leggingsId = "PoseidonLeggings"; + this.leggingsName = "&bPoseidon's Leggings"; + this.leggingsLore = List.of("Leggings granted to those who harness the &bpower of the ocean.","&bSet Bonus: "); + this.leggingsModel = 14329; + + this.bootsId = "PoseidonBoots"; + this.bootsName = "&bPoseidon's boots"; + this.bootsLore = List.of("Boots granted to those who harness the &bpower of the ocean.","&bSet Bonus: "); + this.bootsModel = 14330; + this.bootsEnchants.put(Enchantment.DEPTH_STRIDER, 5); + + this.equipmentModel = "poseidon"; + Bukkit.getScheduler().scheduleSyncRepeatingTask(Fantasysmp.getPlugin(), this::checkPlayerAir, 0, 20); + registerItems(); + registerRecipes(); + registerHandler(); + } + + public static Poseidon getInstance() { + if (instance == null) { + instance = new Poseidon(); + } + return instance; + } + + public void checkPlayerAir() { + for (Player player : Bukkit.getOnlinePlayers()) { + if (CustomItemHandler.getSet(player) == this) { + if (player.getRemainingAir() < player.getMaximumAir()) { + player.setRemainingAir(player.getMaximumAir()); + } + } + } + } + + @Override + public void registerRecipes() { + RecipeChoice template = new RecipeChoice.MaterialChoice(Material.NETHERITE_UPGRADE_SMITHING_TEMPLATE); + RecipeChoice resource = new RecipeChoice.MaterialChoice(Material.HEART_OF_THE_SEA); + + RecipeChoice swordChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_SWORD); + RecipeChoice helmetChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_HELMET); + RecipeChoice chestplateChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_CHESTPLATE); + RecipeChoice leggingsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_LEGGINGS); + RecipeChoice bootsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_BOOTS); + + ItemStack sword = Fantasysmp.customItemMap.get(swordId).getItem(); + NamespacedKey swordKey = new NamespacedKey("fantasysmp.items", swordId.toLowerCase()); + SmithingTransformRecipe swordRecipe = new SmithingTransformRecipe(swordKey, sword, template, swordChoice, resource); + getServer().addRecipe(swordRecipe); + + ItemStack helmet = Fantasysmp.customItemMap.get(helmetId).getItem(); + NamespacedKey helmetKey = new NamespacedKey("fantasysmp.items", helmetId.toLowerCase()); + SmithingTransformRecipe helmetRecipe = new SmithingTransformRecipe(helmetKey, helmet, template, helmetChoice, resource); + getServer().addRecipe(helmetRecipe); + + ItemStack chestplate = Fantasysmp.customItemMap.get(chestplateId).getItem(); + NamespacedKey chestplateKey = new NamespacedKey("fantasysmp.items", chestplateId.toLowerCase()); + SmithingTransformRecipe chestplateRecipe = new SmithingTransformRecipe(chestplateKey, chestplate, template, chestplateChoice, resource); + getServer().addRecipe(chestplateRecipe); + + ItemStack leggings = Fantasysmp.customItemMap.get(leggingsId).getItem(); + NamespacedKey leggingsKey = new NamespacedKey("fantasysmp.items", leggingsId.toLowerCase()); + SmithingTransformRecipe leggingsRecipe = new SmithingTransformRecipe(leggingsKey, leggings, template, leggingsChoice, resource); + getServer().addRecipe(leggingsRecipe); + + ItemStack boots = Fantasysmp.customItemMap.get(bootsId).getItem(); + NamespacedKey bootsKey = new NamespacedKey("fantasysmp.items", bootsId.toLowerCase()); + SmithingTransformRecipe bootsRecipe = new SmithingTransformRecipe(bootsKey, boots, template, bootsChoice, resource); + getServer().addRecipe(bootsRecipe); + } + + @Override + public void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {} + + @Override + public void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {} + + @Override + public void onHit(Player player, ItemStack itemStack, EntityDamageByEntityEvent event) {} + + @Override + public void onArmourChange(Player player, ItemStack item, boolean active) {} + + @Override + public void onDamage(EntityDamageEvent event) {} + + @Override + public void onEffect(EntityPotionEffectEvent event) {} + + private static void registerItems() { + Fantasysmp.registerItems(new CustomSword(instance, getInstance().swordId), new CustomHelmet(instance, getInstance().helmetId), new CustomChestplate(instance, getInstance().chestplateId), new CustomLeggings(instance, getInstance().leggingsId), new CustomBoots(instance, getInstance().bootsId)); + } +} diff --git a/src/main/java/dev/zxq5/fantasysmp/items/gear/PoseidonGear.java b/src/main/java/dev/zxq5/fantasysmp/items/gear/PoseidonGear.java deleted file mode 100644 index 8ac0818..0000000 --- a/src/main/java/dev/zxq5/fantasysmp/items/gear/PoseidonGear.java +++ /dev/null @@ -1,94 +0,0 @@ -package dev.zxq5.fantasysmp.items.gear; - -import dev.zxq5.fantasysmp.items.GenericGearSet; -import dev.zxq5.fantasysmp.items.ItemStats; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.command.CommandExecutor; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -import static org.bukkit.Bukkit.getPluginManager; - -public class PoseidonGear extends GenericGearSet implements CommandExecutor, Listener { - @Override - public boolean onCommand(org.bukkit.command.CommandSender sender, org.bukkit.command.Command command, String label, String[] args) { - Player player = (Player) sender; - - player.getInventory().addItem(this.getTrident()); - player.getInventory().addItem(this.getHelmet()); - player.getInventory().addItem(this.getChestplate()); - player.getInventory().addItem(this.getLeggings()); - player.getInventory().addItem(this.getBoots()); - return true; - } - - public ItemStack getTrident() { - ItemStack item = super.getSword(); - item.addUnsafeEnchantment(Enchantment.RIPTIDE, 5); - return item; - } - - public ItemStack getHelmet() { - ItemStack item = super.getHelmet(); - item.addUnsafeEnchantment(Enchantment.AQUA_AFFINITY, 3); - return item; - } - - public ItemStack getBoots() { - ItemStack item = super.getBoots(); - item.addUnsafeEnchantment(Enchantment.DEPTH_STRIDER, 5); - return item; - } - - @Override - public void registerRecipes() { - Bukkit.getScheduler().scheduleSyncRepeatingTask(getPluginManager().getPlugin("fantasysmp"), this::checkPlayerAir, 0, 20); - } - - public void checkPlayerAir() { - // any players wearing the armour will never run out of breath - for (Player player : Bukkit.getOnlinePlayers()) { - if (this.hasGear(player)) { - if (player.getRemainingAir() < player.getMaximumAir()) { - player.setRemainingAir(player.getMaximumAir()); - } - } - } - } - - public PoseidonGear() { - this.setTier5(); - this.sword.setMaterial(Material.TRIDENT); - this.sword.attackDamage = 10; - this.sword.attackSpeed = 1.2f; - this.sword.name = ChatColor.AQUA + "Poseidon's Fury" + ChatColor.RESET; - this.sword.lore = "A powerful trident imbued with the power of the ocean."; - this.sword.customItemModel = "poseidons_trident"; - - this.helmet.name = ChatColor.AQUA + "Poseidon's Crown" + ChatColor.RESET; - this.helmet.lore = "A helmet granted to those who harness the power of the ocean."; - this.helmet.customItemModel = "poseidons_helmet"; - this.helmet.customEquipmentModel = "poseidon"; - - this.chestplate.name = ChatColor.AQUA + "Poseidon's Chestplate" + ChatColor.RESET; - this.chestplate.lore = "A chestplate granted to those who harness the power of the ocean."; - this.chestplate.customItemModel = "poseidons_chestplate"; - this.chestplate.customEquipmentModel = "poseidon"; - - this.leggings.name = ChatColor.AQUA + "Poseidon's Leggings" + ChatColor.RESET; - this.leggings.lore = "Leggings granted to those who harness the power of the ocean."; - this.leggings.customItemModel = "poseidons_leggings"; - this.leggings.customEquipmentModel = "poseidon"; - - this.boots.name = ChatColor.AQUA + "Poseidon's Boots" + ChatColor.RESET; - this.boots.lore = "Boots granted to those who harness the power of the ocean."; - this.boots.customItemModel = "poseidons_boots"; - this.boots.customEquipmentModel = "poseidon"; - } -} diff --git a/src/main/java/dev/zxq5/fantasysmp/items/gear/StevensWrath.java b/src/main/java/dev/zxq5/fantasysmp/items/gear/StevensWrath.java index 3369a31..2cb9b7a 100644 --- a/src/main/java/dev/zxq5/fantasysmp/items/gear/StevensWrath.java +++ b/src/main/java/dev/zxq5/fantasysmp/items/gear/StevensWrath.java @@ -1,45 +1,72 @@ package dev.zxq5.fantasysmp.items.gear; -import dev.zxq5.fantasysmp.items.GenericGearSet; -import dev.zxq5.fantasysmp.util.LoreChecker; -import org.bukkit.*; -import org.bukkit.command.CommandExecutor; +import dev.zxq5.fantasysmp.Fantasysmp; +import dev.zxq5.fantasysmp.items.presets.*; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.World; import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityPotionEffectEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.RecipeChoice; +import org.bukkit.inventory.SmithingTransformRecipe; -public class StevensWrath extends GenericGearSet implements Listener, CommandExecutor { +import java.util.ArrayList; +import java.util.Arrays; - @Override - public boolean onCommand(org.bukkit.command.CommandSender sender, org.bukkit.command.Command command, String label, String[] args) { - Player player = (Player) sender; - player.getInventory().addItem(this.getSword()); - return true; +import static org.bukkit.Bukkit.getServer; + +public class StevensWrath extends CustomSet { + public static StevensWrath instance; + public static int tier = 6; + + public StevensWrath() { + super(tier); + instance = this; + + this.swordId = "StevensWrath"; + this.swordName = "&5Steven's Wrath"; + this.swordLore = new ArrayList<>(Arrays.asList("All who oppose the mighty Steven shall face his wrath of lightning.")); + this.swordLore.addAll(getSwordStats()); + this.swordModel = 14336; + + registerItems(); + registerRecipes(); + registerHandler(); } - @EventHandler - public void onCraft(org.bukkit.event.inventory.PrepareItemCraftEvent event) { - if (!event.getInventory().contains(Material.NETHERITE_BLOCK)) return; - if (!event.getInventory().contains(new LightningSword().getSword())) return; - event.getInventory().setResult(new StevensWrath().getSword()); - } - - @Override - public void registerRecipes() {} - - @EventHandler - public void onEntityDamageByEntity(org.bukkit.event.entity.EntityDamageByEntityEvent event) { - - // checks that it is a player that is performing the attack. - if (!(event.getDamager() instanceof org.bukkit.entity.Player player)) { - return; + public static StevensWrath getInstance() { + if (instance == null) { + instance = new StevensWrath(); } + return instance; + } - if (!( - LoreChecker.itemLoreContains(player.getInventory().getItemInMainHand(), this.sword.lore) - || LoreChecker.itemLoreContains(player.getInventory().getItemInOffHand(), this.sword.lore) - )) return; + @Override + public void registerRecipes() { + RecipeChoice template = new RecipeChoice.MaterialChoice(Material.NETHERITE_UPGRADE_SMITHING_TEMPLATE); + RecipeChoice resource = new RecipeChoice.MaterialChoice(Material.NETHERITE_BLOCK); + RecipeChoice swordChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_SWORD); + + ItemStack sword = Fantasysmp.customItemMap.get(swordId).getItem(); + NamespacedKey swordKey = new NamespacedKey("fantasysmp.items", swordId.toLowerCase()); + SmithingTransformRecipe swordRecipe = new SmithingTransformRecipe(swordKey, sword, template, swordChoice, resource); + getServer().addRecipe(swordRecipe); + } + + @Override + public void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {} + + @Override + public void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {} + + @Override + public void onHit(Player player, ItemStack itemStack, EntityDamageByEntityEvent event) { Location location = event.getEntity().getLocation(); World world = location.getWorld(); @@ -48,31 +75,26 @@ public class StevensWrath extends GenericGearSet implements Listener, CommandExe world.strikeLightning(location); } - @EventHandler - public void onEntityDamage(org.bukkit.event.entity.EntityDamageEvent event) { - if (event.getEntity() instanceof Player player) { + @Override + public void onArmourChange(Player player, ItemStack item, boolean active) {} - if (!(event - .getDamageSource() - .getDamageType() - .getKey() - .toString() - .equals("minecraft:lightning_bolt") - )) return; + @Override + public void onDamage(EntityDamageEvent event) { + if (!(event + .getDamageSource() + .getDamageType() + .getKey() + .toString() + .equals("minecraft:lightning_bolt") + )) return; - if (LoreChecker.itemLoreContains(player.getInventory().getItemInMainHand(), this.sword.lore) || - LoreChecker.itemLoreContains(player.getInventory().getItemInOffHand(), this.sword.lore)) { - event.setCancelled(true); - } - } + event.setCancelled(true); } - public static void init() {} + @Override + public void onEffect(EntityPotionEffectEvent event) {} - public StevensWrath() { - this.setTier6(); - this.sword.name = ChatColor.LIGHT_PURPLE + "Stevens Wrath" + ChatColor.RESET; - this.sword.customItemModel = "stevens_wrath"; - this.sword.lore = ChatColor.LIGHT_PURPLE + "All who oppose the mighty Steven shall face his wrath of lightning."; + private static void registerItems() { + Fantasysmp.registerItems(new CustomSword(instance, getInstance().swordId)); } } diff --git a/src/main/java/dev/zxq5/fantasysmp/items/gear/TrueNetherite.java b/src/main/java/dev/zxq5/fantasysmp/items/gear/TrueNetherite.java new file mode 100644 index 0000000..fe839ca --- /dev/null +++ b/src/main/java/dev/zxq5/fantasysmp/items/gear/TrueNetherite.java @@ -0,0 +1,127 @@ +package dev.zxq5.fantasysmp.items.gear; + +import dev.zxq5.fantasysmp.Fantasysmp; +import dev.zxq5.fantasysmp.items.presets.*; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityPotionEffectEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.RecipeChoice; +import org.bukkit.inventory.SmithingTransformRecipe; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.bukkit.Bukkit.getServer; + +public class TrueNetherite extends CustomSet { + public static TrueNetherite instance; + public static int tier = 6; + + public TrueNetherite() { + super(tier); + instance = this; + + this.swordId = "TrueNetheriteSword"; + this.swordName = "&fTrue Netherite Sword"; + this.swordLore = new ArrayList<>(Arrays.asList("")); + this.swordLore.addAll(getSwordStats()); + this.swordModel = 14316; + + this.helmetId = "TrueNetheriteHelmet"; + this.helmetName = "&fTrue Netherite Helmet"; + this.helmetLore = List.of("&fSet Bonus: "); + this.helmetModel = 14317; + + this.chestplateId = "TrueNetheriteChestplate"; + this.chestplateName = "&fTrueNetherite Chestplate"; + this.chestplateLore = List.of("&fSet Bonus: "); + this.chestplateModel = 14318; + + this.leggingsId = "TrueNetheriteLeggings"; + this.leggingsName = "&fTrueNetherite Leggings"; + this.leggingsLore = List.of("&fSet Bonus: "); + this.leggingsModel = 14319; + + this.bootsId = "TrueNetheriteBoots"; + this.bootsName = "&fTrue Netherite boots"; + this.bootsLore = List.of("&fSet Bonus: "); + this.bootsModel = 14320; + + this.equipmentModel = "true_netherite"; + registerItems(); + registerRecipes(); + registerHandler(); + } + + public static TrueNetherite getInstance() { + if (instance == null) { + instance = new TrueNetherite(); + } + return instance; + } + + @Override + public void registerRecipes() { + RecipeChoice template = new RecipeChoice.MaterialChoice(Material.NETHERITE_UPGRADE_SMITHING_TEMPLATE); + RecipeChoice resource = new RecipeChoice.MaterialChoice(Material.NETHER_STAR); + + RecipeChoice swordChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_SWORD); + RecipeChoice helmetChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_HELMET); + RecipeChoice chestplateChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_CHESTPLATE); + RecipeChoice leggingsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_LEGGINGS); + RecipeChoice bootsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_BOOTS); + + ItemStack sword = Fantasysmp.customItemMap.get(swordId).getItem(); + NamespacedKey swordKey = new NamespacedKey("fantasysmp.items", swordId.toLowerCase()); + SmithingTransformRecipe swordRecipe = new SmithingTransformRecipe(swordKey, sword, template, swordChoice, resource); + getServer().addRecipe(swordRecipe); + + ItemStack helmet = Fantasysmp.customItemMap.get(helmetId).getItem(); + NamespacedKey helmetKey = new NamespacedKey("fantasysmp.items", helmetId.toLowerCase()); + SmithingTransformRecipe helmetRecipe = new SmithingTransformRecipe(helmetKey, helmet, template, helmetChoice, resource); + getServer().addRecipe(helmetRecipe); + + ItemStack chestplate = Fantasysmp.customItemMap.get(chestplateId).getItem(); + NamespacedKey chestplateKey = new NamespacedKey("fantasysmp.items", chestplateId.toLowerCase()); + SmithingTransformRecipe chestplateRecipe = new SmithingTransformRecipe(chestplateKey, chestplate, template, chestplateChoice, resource); + getServer().addRecipe(chestplateRecipe); + + ItemStack leggings = Fantasysmp.customItemMap.get(leggingsId).getItem(); + NamespacedKey leggingsKey = new NamespacedKey("fantasysmp.items", leggingsId.toLowerCase()); + SmithingTransformRecipe leggingsRecipe = new SmithingTransformRecipe(leggingsKey, leggings, template, leggingsChoice, resource); + getServer().addRecipe(leggingsRecipe); + + ItemStack boots = Fantasysmp.customItemMap.get(bootsId).getItem(); + NamespacedKey bootsKey = new NamespacedKey("fantasysmp.items", bootsId.toLowerCase()); + SmithingTransformRecipe bootsRecipe = new SmithingTransformRecipe(bootsKey, boots, template, bootsChoice, resource); + getServer().addRecipe(bootsRecipe); + } + + @Override + public void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {} + + @Override + public void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {} + + @Override + public void onHit(Player player, ItemStack itemStack, EntityDamageByEntityEvent event) {} + + @Override + public void onArmourChange(Player player, ItemStack item, boolean active) {} + + @Override + public void onDamage(EntityDamageEvent event) {} + + @Override + public void onEffect(EntityPotionEffectEvent event) {} + + private static void registerItems() { + Fantasysmp.registerItems(new CustomSword(instance, getInstance().swordId), new CustomHelmet(instance, getInstance().helmetId), new CustomChestplate(instance, getInstance().chestplateId), new CustomLeggings(instance, getInstance().leggingsId), new CustomBoots(instance, getInstance().bootsId)); + } +} diff --git a/src/main/java/dev/zxq5/fantasysmp/items/gear/TrueNetheriteGear.java b/src/main/java/dev/zxq5/fantasysmp/items/gear/TrueNetheriteGear.java deleted file mode 100644 index 147b35a..0000000 --- a/src/main/java/dev/zxq5/fantasysmp/items/gear/TrueNetheriteGear.java +++ /dev/null @@ -1,52 +0,0 @@ -package dev.zxq5.fantasysmp.items.gear; - -import dev.zxq5.fantasysmp.items.GenericGearSet; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandExecutor; -import org.bukkit.entity.Player; -import org.bukkit.event.Listener; - -public class TrueNetheriteGear extends GenericGearSet implements CommandExecutor, Listener { - @Override - public boolean onCommand(org.bukkit.command.CommandSender sender, org.bukkit.command.Command command, String label, String[] args) { - Player player = (Player) sender; - - player.getInventory().addItem(this.getSword()); - player.getInventory().addItem(this.getHelmet()); - player.getInventory().addItem(this.getChestplate()); - player.getInventory().addItem(this.getLeggings()); - player.getInventory().addItem(this.getBoots()); - return true; - } - - @Override - public void registerRecipes() {} - - public TrueNetheriteGear() { - this.setTier6(); - this.sword.name = ChatColor.WHITE + "True Netherite Sword" + ChatColor.RESET; - this.sword.lore = "A sword forged with the skulls of wither skeletons."; - this.sword.customItemModel = "true_netherite_sword"; - this.sword.lore = "Destruction awaits."; - - this.helmet.name = ChatColor.WHITE + "True Netherite Helmet" + ChatColor.RESET; - this.helmet.lore = "A helmet forged with the skulls of wither skeletons."; - this.helmet.customItemModel = "true_netherite_helmet"; - this.helmet.customEquipmentModel = "true_netherite"; - - this.chestplate.name = ChatColor.WHITE + "True Netherite Chestplate" + ChatColor.RESET; - this.chestplate.lore = "A chestplate forged with the skulls of wither skeletons."; - this.chestplate.customItemModel = "true_netherite_chestplate"; - this.chestplate.customEquipmentModel = "true_netherite"; - - this.leggings.name = ChatColor.WHITE + "True Netherite Leggings" + ChatColor.RESET; - this.leggings.lore = "Leggings forged with the skulls of wither skeletons."; - this.leggings.customItemModel = "true_netherite_leggings"; - this.leggings.customEquipmentModel = "true_netherite"; - - this.boots.name = ChatColor.WHITE + "True Netherite Boots" + ChatColor.RESET; - this.boots.lore = "Boots forged with the skulls of wither skeletons."; - this.boots.customItemModel = "true_netherite_boots"; - this.boots.customEquipmentModel = "true_netherite"; - } -} diff --git a/src/main/java/dev/zxq5/fantasysmp/items/gear/Witherite.java b/src/main/java/dev/zxq5/fantasysmp/items/gear/Witherite.java new file mode 100644 index 0000000..b90b701 --- /dev/null +++ b/src/main/java/dev/zxq5/fantasysmp/items/gear/Witherite.java @@ -0,0 +1,151 @@ +package dev.zxq5.fantasysmp.items.gear; + +import dev.zxq5.fantasysmp.Fantasysmp; +import dev.zxq5.fantasysmp.items.presets.*; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityPotionEffectEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.RecipeChoice; +import org.bukkit.inventory.SmithingTransformRecipe; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.bukkit.Bukkit.getServer; + +public class Witherite extends CustomSet { + public static Witherite instance; + public static int tier = 5; + + public Witherite() { + super(tier); + instance = this; + + this.swordId = "WitheriteSword"; + this.swordName = "&0Witherite Sword"; + this.swordLore = new ArrayList<>(Arrays.asList("A sword forged with the skulls of wither skeletons.", "Applies &0wither effect" + ChatColor.RESET + "for 5 seconds.")); + this.swordLore.addAll(getSwordStats()); + this.swordModel = 14301; + + this.helmetId = "WitheriteHelmet"; + this.helmetName = "&0Witherite Helmet"; + this.helmetLore = List.of("A helmet forged with the skulls of wither skeletons.", "&0Set Bonus: Wither Immunity"); + this.helmetModel = 14302; + + this.chestplateId = "WitheriteChestplate"; + this.chestplateName = "&0Witherite Chestplate"; + this.chestplateLore = List.of("A chestplate forged with the skulls of wither skeletons.", "&0Set Bonus: Wither Immunity"); + this.chestplateModel = 14303; + + this.leggingsId = "WitheriteLeggings"; + this.leggingsName = "&0Witherite Leggings"; + this.leggingsLore = List.of("Leggings forged with the skulls of wither skeletons.", "&0Set Bonus: Wither Immunity"); + this.leggingsModel = 14304; + + this.bootsId = "WitheriteBoots"; + this.bootsName = "&0Witherite boots"; + this.bootsLore = List.of("Boots forged with the skulls of wither skeletons.", "&0Set Bonus: Wither Immunity"); + this.bootsModel = 14305; + + this.equipmentModel = "witherite"; + registerItems(); + registerRecipes(); + registerHandler(); + } + + public static Witherite getInstance() { + if (instance == null) { + instance = new Witherite(); + } + return instance; + } + + @Override + public void registerRecipes() { + RecipeChoice template = new RecipeChoice.MaterialChoice(Material.NETHERITE_UPGRADE_SMITHING_TEMPLATE); + RecipeChoice resource = new RecipeChoice.MaterialChoice(Material.WITHER_SKELETON_SKULL); + + RecipeChoice swordChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_SWORD); + RecipeChoice helmetChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_HELMET); + RecipeChoice chestplateChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_CHESTPLATE); + RecipeChoice leggingsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_LEGGINGS); + RecipeChoice bootsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_BOOTS); + + ItemStack sword = Fantasysmp.customItemMap.get(swordId).getItem(); + NamespacedKey swordKey = new NamespacedKey("fantasysmp.items", swordId.toLowerCase()); + SmithingTransformRecipe swordRecipe = new SmithingTransformRecipe(swordKey, sword, template, swordChoice, resource); + getServer().addRecipe(swordRecipe); + + ItemStack helmet = Fantasysmp.customItemMap.get(helmetId).getItem(); + NamespacedKey helmetKey = new NamespacedKey("fantasysmp.items", helmetId.toLowerCase()); + SmithingTransformRecipe helmetRecipe = new SmithingTransformRecipe(helmetKey, helmet, template, helmetChoice, resource); + getServer().addRecipe(helmetRecipe); + + ItemStack chestplate = Fantasysmp.customItemMap.get(chestplateId).getItem(); + NamespacedKey chestplateKey = new NamespacedKey("fantasysmp.items", chestplateId.toLowerCase()); + SmithingTransformRecipe chestplateRecipe = new SmithingTransformRecipe(chestplateKey, chestplate, template, chestplateChoice, resource); + getServer().addRecipe(chestplateRecipe); + + ItemStack leggings = Fantasysmp.customItemMap.get(leggingsId).getItem(); + NamespacedKey leggingsKey = new NamespacedKey("fantasysmp.items", leggingsId.toLowerCase()); + SmithingTransformRecipe leggingsRecipe = new SmithingTransformRecipe(leggingsKey, leggings, template, leggingsChoice, resource); + getServer().addRecipe(leggingsRecipe); + + ItemStack boots = Fantasysmp.customItemMap.get(bootsId).getItem(); + NamespacedKey bootsKey = new NamespacedKey("fantasysmp.items", bootsId.toLowerCase()); + SmithingTransformRecipe bootsRecipe = new SmithingTransformRecipe(bootsKey, boots, template, bootsChoice, resource); + getServer().addRecipe(bootsRecipe); + } + + @Override + public void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {} + + @Override + public void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event) { + + } + + @Override + public void onHit(Player player, ItemStack itemStack, EntityDamageByEntityEvent event) { + PotionEffect effect = new PotionEffect( + PotionEffectType.WITHER, + 20 * 5, + 1 + ); + effect.apply((LivingEntity) event.getEntity()); + } + + @Override + public void onArmourChange(Player player, ItemStack item, boolean active) {} + + @Override + public void onDamage(EntityDamageEvent event) {} + + @Override + public void onEffect(EntityPotionEffectEvent event) { + if (event.getNewEffect() == null) return; + + if (event.getNewEffect().getType() != PotionEffectType.WITHER) { + return; + } + try { + event.setCancelled(true); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static void registerItems() { + Fantasysmp.registerItems(new CustomSword(instance, getInstance().swordId), new CustomHelmet(instance, getInstance().helmetId), new CustomChestplate(instance, getInstance().chestplateId), new CustomLeggings(instance, getInstance().leggingsId), new CustomBoots(instance, getInstance().bootsId)); + } +} diff --git a/src/main/java/dev/zxq5/fantasysmp/items/gear/WitheriteGear.java b/src/main/java/dev/zxq5/fantasysmp/items/gear/WitheriteGear.java deleted file mode 100644 index e16094d..0000000 --- a/src/main/java/dev/zxq5/fantasysmp/items/gear/WitheriteGear.java +++ /dev/null @@ -1,171 +0,0 @@ -package dev.zxq5.fantasysmp.items.gear; - -import dev.zxq5.fantasysmp.items.GenericGearSet; -import dev.zxq5.fantasysmp.util.LoreChecker; -import org.bukkit.*; -import org.bukkit.command.CommandExecutor; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.entity.WitherSkull; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.RecipeChoice; -import org.bukkit.inventory.SmithingTransformRecipe; -import org.bukkit.potion.PotionEffect; - -import java.util.ArrayList; -import java.util.Objects; - -import static org.bukkit.Bukkit.broadcastMessage; -import static org.bukkit.Bukkit.getServer; - -public class WitheriteGear extends GenericGearSet implements Listener, CommandExecutor { - private ArrayList cooldown = new ArrayList<>(); - - @Override - public boolean onCommand(org.bukkit.command.CommandSender sender, org.bukkit.command.Command command, String label, String[] args) { - Player player = (Player) sender; - player.getInventory().addItem(this.getSword()); - player.getInventory().addItem(this.getHelmet()); - player.getInventory().addItem(this.getChestplate()); - player.getInventory().addItem(this.getLeggings()); - player.getInventory().addItem(this.getBoots()); - - return true; - } - - @Override - public void registerRecipes() { - ItemStack sword = this.getSword(); - NamespacedKey swordKey = new NamespacedKey("fantasysmp.items", "witherite_sword"); - RecipeChoice swordChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_SWORD); - SmithingTransformRecipe swordRecipe = new SmithingTransformRecipe(swordKey, sword, NETHERITE_UPGRADE, swordChoice, WITHER_SKULL); - getServer().addRecipe(swordRecipe); - - ItemStack helmet = this.getHelmet(); - NamespacedKey helmetKey = new NamespacedKey("fantasysmp.items", "witherite_helmet"); - RecipeChoice helmetChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_HELMET); - SmithingTransformRecipe helmetRecipe = new SmithingTransformRecipe(helmetKey, helmet, NETHERITE_UPGRADE, helmetChoice, WITHER_SKULL); - getServer().addRecipe(helmetRecipe); - - ItemStack chestplate = this.getChestplate(); - NamespacedKey chestplateKey = new NamespacedKey("fantasysmp.items", "witherite_chestplate"); - RecipeChoice chestplateChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_CHESTPLATE); - SmithingTransformRecipe chestplateRecipe = new SmithingTransformRecipe(chestplateKey, chestplate, NETHERITE_UPGRADE, chestplateChoice, WITHER_SKULL); - getServer().addRecipe(chestplateRecipe); - - ItemStack leggings = this.getLeggings(); - NamespacedKey leggingsKey = new NamespacedKey("fantasysmp.items", "witherite_leggings"); - RecipeChoice leggingsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_LEGGINGS); - SmithingTransformRecipe leggingsRecipe = new SmithingTransformRecipe(leggingsKey, leggings, NETHERITE_UPGRADE, leggingsChoice, WITHER_SKULL); - getServer().addRecipe(leggingsRecipe); - - ItemStack boots = this.getBoots(); - NamespacedKey bootsKey = new NamespacedKey("fantasysmp.items", "witherite_boots"); - RecipeChoice bootsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_BOOTS); - SmithingTransformRecipe bootsRecipe = new SmithingTransformRecipe(bootsKey, boots, NETHERITE_UPGRADE, bootsChoice, WITHER_SKULL); - getServer().addRecipe(bootsRecipe); - } - - @EventHandler - public void onEntityDamageByEntity(org.bukkit.event.entity.EntityDamageByEntityEvent event) { - - // checks that it is a player that is performing the attack. - if (!(event.getDamager() instanceof org.bukkit.entity.Player player)) { - return; - } - - if (!LoreChecker.itemLoreContains(player.getInventory().getItemInMainHand(), this.sword.lore)) { - return; - } - - PotionEffect effect = new PotionEffect( - org.bukkit.potion.PotionEffectType.WITHER, - 20 * 5, - 1 - ); - effect.apply((LivingEntity) event.getEntity()); - - } - - @EventHandler - public void onPlayerInteract(PlayerInteractEvent event) { - Player player = event.getPlayer(); - ItemStack item = event.getItem(); // Get the item the player interacted with - - if (!(event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK)) { - return; - } - - if (!(LoreChecker.itemLoreContains(item, this.sword.lore))) return; - if (cooldown.contains(player)) return; - - Location location = player.getLocation(); - player.launchProjectile(WitherSkull.class); - player.playSound(location, Sound.ENTITY_WITHER_SHOOT, 1.0f, 1.0f); - World world = player.getWorld(); - world.spawnParticle(Particle.SOUL_FIRE_FLAME, location, 1); - - cooldown.add(player); - Bukkit.getScheduler().scheduleSyncDelayedTask( - Objects.requireNonNull(Bukkit.getPluginManager().getPlugin("fantasysmp")), - () -> cooldown.remove(player), - 25 - ); - } - - @EventHandler - public void onEntityPotionEffectEvent(org.bukkit.event.entity.EntityPotionEffectEvent event) { - if (event.getEntity() instanceof Player player) { - if (event.getNewEffect() == null) return; - - if (event.getNewEffect().getType() != org.bukkit.potion.PotionEffectType.WITHER) { - return; - } - - try { - if (LoreChecker.itemLoreContains(player.getInventory().getHelmet(), this.helmet.lore) - && LoreChecker.itemLoreContains(player.getInventory().getChestplate(), this.chestplate.lore) - && LoreChecker.itemLoreContains(player.getInventory().getLeggings(), this.leggings.lore) - && LoreChecker.itemLoreContains(player.getInventory().getBoots(), this.boots.lore) - ) { - event.setCancelled(true); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - } - - public static void init() {} - - public WitheriteGear() { - this.setTier5(); - this.sword.name = ChatColor.BLACK + "Witherite Sword" + ChatColor.RESET; - this.sword.lore = "A sword forged with the skulls of wither skeletons."; - this.sword.customItemModel = "witherite_sword"; - - this.helmet.name = ChatColor.BLACK + "Witherite Helmet" + ChatColor.RESET; - this.helmet.lore = "A helmet forged with the skulls of wither skeletons."; - this.helmet.customItemModel = "witherite_helmet"; - this.helmet.customEquipmentModel = "witherite"; - - this.chestplate.name = ChatColor.BLACK + "Witherite Chestplate" + ChatColor.RESET; - this.chestplate.lore = "A chestplate forged with the skulls of wither skeletons."; - this.chestplate.customItemModel = "witherite_chestplate"; - this.chestplate.customEquipmentModel = "witherite"; - - this.leggings.name = ChatColor.BLACK + "Witherite Leggings" + ChatColor.RESET; - this.leggings.lore = "Leggings forged with the skulls of wither skeletons."; - this.leggings.customItemModel = "witherite_leggings"; - this.leggings.customEquipmentModel = "witherite"; - - this.boots.name = ChatColor.BLACK + "Witherite Boots" + ChatColor.RESET; - this.boots.lore = "Boots forged with the skulls of wither skeletons."; - this.boots.customItemModel = "witherite_boots"; - this.boots.customEquipmentModel = "witherite"; - } -} diff --git a/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomBoots.java b/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomBoots.java new file mode 100644 index 0000000..843d1c3 --- /dev/null +++ b/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomBoots.java @@ -0,0 +1,90 @@ +package dev.zxq5.fantasysmp.items.presets; + +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.EquipmentSlotGroup; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.components.EquippableComponent; + +import java.util.List; +import java.util.Map; +import java.util.UUID; + +public class CustomBoots extends CustomItem { + public CustomSet customSet; + + public CustomBoots(CustomSet customSet, String id) { + super(id); + this.customSet = customSet; + } + + @Override + public String getName() { + return customSet.bootsName; + } + + @Override + public Material getMaterial() { + return customSet.bootsMaterial; + } + + @Override + public List getLore() { + return customSet.bootsLore; + } + + public CustomSet getSet() { + return customSet; + } + + @Override + public int getCustomModel() { + return customSet.bootsModel; + } + + @Override + public Map getEnchants() { + return customSet.bootsEnchants; + } + + public ItemMeta setStats(ItemMeta itemMeta) { + itemMeta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier( + UUID.randomUUID(), + "armour", + customSet.bootsArmour, + AttributeModifier.Operation.ADD_NUMBER, + EquipmentSlotGroup.FEET + )); + + itemMeta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier( + UUID.randomUUID(), + "armour_toughness", + customSet.bootsToughness, + AttributeModifier.Operation.ADD_NUMBER, + EquipmentSlotGroup.FEET + )); + + if (customSet.bootsResistance != 0) { + itemMeta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, new AttributeModifier( + UUID.randomUUID(), + "knockback_resistance", + customSet.bootsResistance, + AttributeModifier.Operation.ADD_NUMBER, + EquipmentSlotGroup.FEET + )); + } + + if(customSet.equipmentModel != null) { + EquippableComponent equippable = itemMeta.getEquippable(); + equippable.setModel(NamespacedKey.fromString("fantasysmp:" + customSet.equipmentModel)); + equippable.setSlot(EquipmentSlot.FEET); + itemMeta.setEquippable(equippable); + } + + return itemMeta; + } +} diff --git a/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomChestplate.java b/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomChestplate.java new file mode 100644 index 0000000..7763e00 --- /dev/null +++ b/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomChestplate.java @@ -0,0 +1,90 @@ +package dev.zxq5.fantasysmp.items.presets; + +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.EquipmentSlotGroup; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.components.EquippableComponent; + +import java.util.List; +import java.util.Map; +import java.util.UUID; + +public class CustomChestplate extends CustomItem { + public CustomSet customSet; + + public CustomChestplate(CustomSet customSet, String id) { + super(id); + this.customSet = customSet; + } + + @Override + public String getName() { + return customSet.chestplateName; + } + + @Override + public Material getMaterial() { + return customSet.chestplateMaterial; + } + + @Override + public List getLore() { + return customSet.chestplateLore; + } + + public CustomSet getSet() { + return customSet; + } + + @Override + public int getCustomModel() { + return customSet.chestplateModel; + } + + @Override + public Map getEnchants() { + return customSet.chestplateEnchants; + } + + public ItemMeta setStats(ItemMeta itemMeta) { + itemMeta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier( + UUID.randomUUID(), + "armour", + customSet.chestplateArmour, + AttributeModifier.Operation.ADD_NUMBER, + EquipmentSlotGroup.CHEST + )); + + itemMeta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier( + UUID.randomUUID(), + "armour_toughness", + customSet.chestplateToughness, + AttributeModifier.Operation.ADD_NUMBER, + EquipmentSlotGroup.CHEST + )); + + if (customSet.chestplateResistance != 0) { + itemMeta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, new AttributeModifier( + UUID.randomUUID(), + "knockback_resistance", + customSet.chestplateResistance, + AttributeModifier.Operation.ADD_NUMBER, + EquipmentSlotGroup.CHEST + )); + } + + if(customSet.equipmentModel != null) { + EquippableComponent equippable = itemMeta.getEquippable(); + equippable.setModel(NamespacedKey.fromString("fantasysmp:" + customSet.equipmentModel)); + equippable.setSlot(EquipmentSlot.CHEST); + itemMeta.setEquippable(equippable); + } + + return itemMeta; + } +} diff --git a/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomHelmet.java b/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomHelmet.java new file mode 100644 index 0000000..0f5691d --- /dev/null +++ b/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomHelmet.java @@ -0,0 +1,90 @@ +package dev.zxq5.fantasysmp.items.presets; + +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.EquipmentSlotGroup; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.components.EquippableComponent; + +import java.util.List; +import java.util.Map; +import java.util.UUID; + +public class CustomHelmet extends CustomItem { + public CustomSet customSet; + + public CustomHelmet(CustomSet customSet, String id) { + super(id); + this.customSet = customSet; + } + + @Override + public String getName() { + return customSet.helmetName; + } + + @Override + public Material getMaterial() { + return customSet.helmetMaterial; + } + + @Override + public List getLore() { + return customSet.helmetLore; + } + + public CustomSet getSet() { + return customSet; + } + + @Override + public int getCustomModel() { + return customSet.helmetModel; + } + + @Override + public Map getEnchants() { + return customSet.helmetEnchants; + } + + public ItemMeta setStats(ItemMeta itemMeta) { + itemMeta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier( + UUID.randomUUID(), + "armour", + customSet.helmetArmour, + AttributeModifier.Operation.ADD_NUMBER, + EquipmentSlotGroup.HEAD + )); + + itemMeta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier( + UUID.randomUUID(), + "armour_toughness", + customSet.helmetToughness, + AttributeModifier.Operation.ADD_NUMBER, + EquipmentSlotGroup.HEAD + )); + + if (customSet.helmetResistance != 0) { + itemMeta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, new AttributeModifier( + UUID.randomUUID(), + "knockback_resistance", + customSet.helmetResistance, + AttributeModifier.Operation.ADD_NUMBER, + EquipmentSlotGroup.HEAD + )); + } + + if(customSet.equipmentModel != null) { + EquippableComponent equippable = itemMeta.getEquippable(); + equippable.setModel(NamespacedKey.fromString("fantasysmp:" + customSet.equipmentModel)); + equippable.setSlot(EquipmentSlot.HEAD); + itemMeta.setEquippable(equippable); + } + + return itemMeta; + } +} diff --git a/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomItem.java b/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomItem.java new file mode 100644 index 0000000..8f27af2 --- /dev/null +++ b/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomItem.java @@ -0,0 +1,69 @@ +package dev.zxq5.fantasysmp.items.presets; + +import dev.zxq5.fantasysmp.Fantasysmp; +import dev.zxq5.fantasysmp.util.Common; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataContainer; +import org.bukkit.persistence.PersistentDataType; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + + +public abstract class CustomItem { + private final String id; + + public CustomItem(String id) { + this.id = id; + } + + public abstract String getName(); + + public abstract Material getMaterial(); + + public abstract List getLore(); + + public abstract int getCustomModel(); + + public abstract Map getEnchants(); + + public abstract ItemMeta setStats(ItemMeta itemMeta); + + public String getId() { + return this.id; + }; + + public ItemStack getItem() { + ItemStack itemStack = new ItemStack(getMaterial(), 1); + ItemMeta itemMeta = itemStack.getItemMeta(); + PersistentDataContainer container = itemMeta.getPersistentDataContainer(); + + itemMeta.setDisplayName(Common.colorize(getName())); + List lore = new ArrayList<>(); + getLore().forEach(l-> lore.add(Common.colorize(l))); + itemMeta.setLore(lore); + + itemMeta = setStats(itemMeta); + + int customModel = getCustomModel(); + + if(customModel != 0) { + itemMeta.setCustomModelData(customModel); + } + + container.set(Fantasysmp.customItemKey, PersistentDataType.STRING, getId()); + itemStack.setItemMeta(itemMeta); + + Map enchants = getEnchants(); + + enchants.forEach((en, lvl)-> { + itemStack.addUnsafeEnchantment(en, lvl); + }); + + return itemStack; + } +} diff --git a/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomItemHandler.java b/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomItemHandler.java new file mode 100644 index 0000000..c23d401 --- /dev/null +++ b/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomItemHandler.java @@ -0,0 +1,189 @@ +package dev.zxq5.fantasysmp.items.presets; + +import dev.zxq5.fantasysmp.Fantasysmp; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.*; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.entity.EntityPotionEffectEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.persistence.PersistentDataType; + +import java.util.Arrays; +import java.util.List; + +public class CustomItemHandler implements Listener { + private List ArmourPieces = Arrays.asList( + Material.LEATHER_HELMET, Material.CHAINMAIL_HELMET, Material.IRON_HELMET, Material.GOLDEN_HELMET, Material.DIAMOND_HELMET, Material.NETHERITE_HELMET, + Material.CARVED_PUMPKIN, Material.PLAYER_HEAD, Material.SKELETON_SKULL, Material.ZOMBIE_HEAD, Material.CREEPER_HEAD, Material.WITHER_SKELETON_SKULL, Material.TURTLE_HELMET, Material.DRAGON_HEAD, Material.PIGLIN_HEAD, + Material.LEATHER_CHESTPLATE, Material.CHAINMAIL_CHESTPLATE, Material.IRON_CHESTPLATE, Material.GOLDEN_CHESTPLATE, Material.DIAMOND_CHESTPLATE, Material.NETHERITE_CHESTPLATE, Material.ELYTRA, + Material.LEATHER_LEGGINGS, Material.CHAINMAIL_LEGGINGS, Material.IRON_LEGGINGS, Material.GOLDEN_LEGGINGS, Material.DIAMOND_LEGGINGS, Material.NETHERITE_LEGGINGS, + Material.LEATHER_BOOTS, Material.CHAINMAIL_BOOTS, Material.IRON_BOOTS, Material.GOLDEN_BOOTS, Material.DIAMOND_BOOTS, Material.NETHERITE_BOOTS + ); + private static CustomSet active = null; + + @EventHandler(priority = EventPriority.MONITOR) + public void onPlayerInteract(PlayerInteractEvent event) { + Player player = event.getPlayer(); + ItemStack heldItem = player.getInventory().getItemInMainHand(); + + if ((event.getAction().equals(Action.LEFT_CLICK_BLOCK) || event.getAction().equals(Action.LEFT_CLICK_AIR)) && isCustomItem(heldItem)) { + CustomItem customItem = Fantasysmp.customItemMap.get(getItemId(heldItem)); + if(customItem instanceof CustomSword customSword) { + customSword.handleLeftClick(player, heldItem, event); + } + } + + if ((event.getAction().equals(Action.RIGHT_CLICK_BLOCK) || event.getAction().equals(Action.RIGHT_CLICK_AIR)) && isCustomItem(heldItem)) { + CustomItem customItem = Fantasysmp.customItemMap.get(getItemId(heldItem)); + if(customItem instanceof CustomSword customSword) { + customSword.handleRightClick(player, heldItem, event); + } + if(ArmourPieces.contains(heldItem.getType())) { + Bukkit.getScheduler().runTaskLater(Fantasysmp.getPlugin(), () -> onArmourChange(player), 0); + } + } + } + + @EventHandler + public void onHit(EntityDamageByEntityEvent event) { + if (!(event.getDamager() instanceof Player player)) return; + if (!(event.getEntity() instanceof LivingEntity target)) return; + + ItemStack heldItem = player.getInventory().getItemInMainHand(); + + if (isCustomItem(heldItem)){ + CustomItem customItem = Fantasysmp.customItemMap.get(getItemId(heldItem)); + if(customItem instanceof CustomSword customSword) { + customSword.onHit(player, heldItem, event); + } + } + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent event) { + int slot = event.getSlot(); + + HumanEntity humanEntity = event.getWhoClicked(); + if(humanEntity instanceof Player player) { + + if (slot >= 36 && slot <= 39) { + Bukkit.getScheduler().runTaskLater(Fantasysmp.getPlugin(), () -> onArmourChange(player), 0); + return; + } + + ItemStack item = event.getCurrentItem(); + + if (isCustomItem(item)) { + CustomItem customItem = Fantasysmp.customItemMap.get(getItemId(item)); + + if (customItem instanceof CustomHelmet || customItem instanceof CustomChestplate || customItem instanceof CustomLeggings || customItem instanceof CustomBoots) { + Bukkit.getScheduler().runTaskLater(Fantasysmp.getPlugin(), () -> onArmourChange(player), 0); + } + } + } + } + + public void onArmourChange(Player player) { + + CustomSet customSet = getSet(player); + + if(customSet == null && active != null) { + active.onArmourChange(player, null, false); + active = null; + } + + if(customSet != null) { + active = customSet; + active.onArmourChange(player, player.getInventory().getChestplate(), true); + } + } + + @EventHandler + public void onDamage(EntityDamageEvent event) { + if (!(event.getEntity() instanceof Player player)) return; + + ItemStack heldItem = player.getInventory().getItemInMainHand(); + + if (isCustomItem(heldItem)) { + + if (getItemId(heldItem).equals("StevensWrath") || getItemId(heldItem).equals("LightningSword")) { + CustomItem customItem = Fantasysmp.customItemMap.get(getItemId(heldItem)); + + if (customItem instanceof CustomSword customSword) { + CustomSet customSet = customSword.getSet(); + customSet.onDamage(event); + } + } + } else { + CustomSet customSet = getSet(player); + + if (customSet == null) return; + + customSet.onDamage(event); + } + } + + @EventHandler + public void onEffect(EntityPotionEffectEvent event) { + if (!(event.getEntity() instanceof Player player)) return; + + CustomSet customSet = getSet(player); + + if (customSet == null) return; + + customSet.onEffect(event); + } + + @EventHandler + public void onDeath(EntityDeathEvent event) { + if (event.getEntity() instanceof Mob mob) { + if (event.getDamageSource().getDamageType().getKey().toString().equals("minecraft:lightning_bolt") || event.getDamageSource().getDamageType().getKey().toString().equals("minecraft:on_fire")) { + Entity e = event.getEntity(); + ((ExperienceOrb) e.getLocation().getWorld().spawn(e.getLocation(), ExperienceOrb.class)).setExperience(10); + } + } + } + + private static boolean isCustomItem(ItemStack itemStack) { + if(itemStack == null){ + return false; + } + return (itemStack.hasItemMeta() && itemStack.getItemMeta().getPersistentDataContainer().has(Fantasysmp.customItemKey, PersistentDataType.STRING)); + } + + private static String getItemId(ItemStack itemStack) { + return itemStack.getItemMeta().getPersistentDataContainer().get(Fantasysmp.customItemKey, PersistentDataType.STRING); + } + + public static CustomSet getSet(Player player) { + ItemStack helmet = player.getInventory().getHelmet(); + ItemStack chestplate = player.getInventory().getChestplate(); + ItemStack leggings = player.getInventory().getLeggings(); + ItemStack boots = player.getInventory().getBoots(); + + if (isCustomItem(helmet) && isCustomItem(chestplate) && isCustomItem(leggings) && isCustomItem(boots)) { + CustomItem customHelmet = Fantasysmp.customItemMap.get(getItemId(helmet)); + CustomItem customChestplate = Fantasysmp.customItemMap.get(getItemId(chestplate)); + CustomItem customLeggings = Fantasysmp.customItemMap.get(getItemId(leggings)); + CustomItem customBoots = Fantasysmp.customItemMap.get(getItemId(boots)); + + if ((customHelmet instanceof CustomHelmet custHelmet) && (customChestplate instanceof CustomChestplate custChestplate) && (customLeggings instanceof CustomLeggings custLeggings) && (customBoots instanceof CustomBoots custBoots)) { + CustomSet customSet = custHelmet.getSet(); + + if(customSet.equals(custChestplate.getSet()) && customSet.equals(custLeggings.getSet()) && customSet.equals(custBoots.getSet())) { + return customSet; + } + } + } + return null; + } +} diff --git a/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomLeggings.java b/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomLeggings.java new file mode 100644 index 0000000..089656b --- /dev/null +++ b/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomLeggings.java @@ -0,0 +1,90 @@ +package dev.zxq5.fantasysmp.items.presets; + +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.EquipmentSlotGroup; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.components.EquippableComponent; + +import java.util.List; +import java.util.Map; +import java.util.UUID; + +public class CustomLeggings extends CustomItem { + public CustomSet customSet; + + public CustomLeggings(CustomSet customSet, String id) { + super(id); + this.customSet = customSet; + } + + @Override + public String getName() { + return customSet.leggingsName; + } + + @Override + public Material getMaterial() { + return customSet.leggingsMaterial; + } + + @Override + public List getLore() { + return customSet.leggingsLore; + } + + public CustomSet getSet() { + return customSet; + } + + @Override + public int getCustomModel() { + return customSet.leggingsModel; + } + + @Override + public Map getEnchants() { + return customSet.leggingsEnchants; + } + + public ItemMeta setStats(ItemMeta itemMeta) { + itemMeta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier( + UUID.randomUUID(), + "armour", + customSet.leggingsArmour, + AttributeModifier.Operation.ADD_NUMBER, + EquipmentSlotGroup.LEGS + )); + + itemMeta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier( + UUID.randomUUID(), + "armour_toughness", + customSet.leggingsToughness, + AttributeModifier.Operation.ADD_NUMBER, + EquipmentSlotGroup.LEGS + )); + + if (customSet.leggingsResistance != 0) { + itemMeta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, new AttributeModifier( + UUID.randomUUID(), + "knockback_resistance", + customSet.leggingsResistance, + AttributeModifier.Operation.ADD_NUMBER, + EquipmentSlotGroup.LEGS + )); + } + + if(customSet.equipmentModel != null) { + EquippableComponent equippable = itemMeta.getEquippable(); + equippable.setModel(NamespacedKey.fromString("fantasysmp:" + customSet.equipmentModel)); + equippable.setSlot(EquipmentSlot.LEGS); + itemMeta.setEquippable(equippable); + } + + return itemMeta; + } +} diff --git a/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomSet.java b/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomSet.java new file mode 100644 index 0000000..62266bf --- /dev/null +++ b/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomSet.java @@ -0,0 +1,241 @@ +package dev.zxq5.fantasysmp.items.presets; + +import dev.zxq5.fantasysmp.Fantasysmp; +import dev.zxq5.fantasysmp.items.Items; +import org.bukkit.Material; +import org.bukkit.command.CommandExecutor; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityPotionEffectEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public abstract class CustomSet implements CommandExecutor { + protected double swordAttackDamage; + protected double swordAttackSpeed; + protected String equipmentModel; + + protected double helmetArmour; + protected double helmetToughness; + protected double helmetResistance; + + protected double chestplateArmour; + protected double chestplateToughness; + protected double chestplateResistance; + + protected double leggingsArmour; + protected double leggingsToughness; + protected double leggingsResistance; + + protected double bootsArmour; + protected double bootsToughness; + protected double bootsResistance; + + protected String swordId; + protected String swordName; + protected Material swordMaterial; + protected List swordLore; + protected int swordModel; + + protected String helmetId; + protected String helmetName; + protected Material helmetMaterial; + protected List helmetLore; + protected int helmetModel; + + protected String chestplateId; + protected String chestplateName; + protected Material chestplateMaterial; + protected List chestplateLore; + protected int chestplateModel; + + protected String leggingsId; + protected String leggingsName; + protected Material leggingsMaterial; + protected List leggingsLore; + protected int leggingsModel; + + protected String bootsId; + protected String bootsName; + protected Material bootsMaterial; + protected List bootsLore; + protected int bootsModel; + + protected Map swordEnchants = new HashMap<>(); + protected Map helmetEnchants = new HashMap<>(); + protected Map chestplateEnchants = new HashMap<>(); + protected Map leggingsEnchants = new HashMap<>(); + protected Map bootsEnchants = new HashMap<>(); + + public boolean onCommand(org.bukkit.command.CommandSender sender, org.bukkit.command.Command command, String label, String[] args) { + Player player = (Player) sender; + if(swordId != null) player.getInventory().addItem(Fantasysmp.customItemMap.get(swordId).getItem()); + if(helmetId != null) player.getInventory().addItem(Fantasysmp.customItemMap.get(helmetId).getItem()); + if(chestplateId != null) player.getInventory().addItem(Fantasysmp.customItemMap.get(chestplateId).getItem()); + if(leggingsId != null) player.getInventory().addItem(Fantasysmp.customItemMap.get(leggingsId).getItem()); + if(bootsId != null) player.getInventory().addItem(Fantasysmp.customItemMap.get(bootsId).getItem()); + + return true; + } + + public abstract void registerRecipes(); + + public abstract void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event); + + public abstract void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event); + + public abstract void onHit(Player player, ItemStack itemStack, EntityDamageByEntityEvent event); + + public abstract void onArmourChange(Player player, ItemStack item, boolean active); + + public abstract void onDamage(EntityDamageEvent event); + + public abstract void onEffect(EntityPotionEffectEvent event); + + public CustomSet(int tier) { + switch (tier) { + case 2: + tier2(); + break; + case 3: + tier3(); + break; + case 4: + tier4(); + break; + case 5: + tier5(); + break; + case 6: + tier6(); + break; + default: + tier1(); + break; + } + } + + public void tier1() {} + + public void tier2() {} + + public void tier3() { + swordAttackDamage = 6; + swordAttackSpeed = 1.6f; + + helmetArmour = 2; + helmetToughness = 0; + + chestplateArmour = 6; + chestplateToughness = 0; + + leggingsArmour = 5; + leggingsToughness = 0; + + bootsArmour = 2; + bootsToughness = 0; + + swordMaterial = Material.IRON_SWORD; + helmetMaterial = Material.IRON_HELMET; + chestplateMaterial = Material.IRON_CHESTPLATE; + leggingsMaterial = Material.IRON_LEGGINGS; + bootsMaterial = Material.IRON_BOOTS; + } + + public void tier4() { + swordAttackDamage = 8; + swordAttackSpeed = 1.6; + + helmetArmour = 3; + helmetToughness = 2; + + chestplateArmour = 8; + chestplateToughness = 2; + + leggingsArmour = 6; + leggingsToughness = 2; + + bootsArmour = 3; + bootsToughness = 2; + + swordMaterial = Material.DIAMOND_SWORD; + helmetMaterial = Material.DIAMOND_HELMET; + chestplateMaterial = Material.DIAMOND_CHESTPLATE; + leggingsMaterial = Material.DIAMOND_LEGGINGS; + bootsMaterial = Material.DIAMOND_BOOTS; + } + + public void tier5() { + swordAttackDamage = 8; + swordAttackSpeed = 1.6f; + + helmetArmour = 3; + helmetToughness = 3; + helmetResistance = 0.1; + + chestplateArmour = 8; + chestplateToughness = 3; + chestplateResistance = 0.1; + + leggingsArmour = 6; + leggingsToughness = 3; + leggingsResistance = 0.1; + + bootsArmour = 3; + bootsToughness = 3; + bootsResistance = 0.1; + + swordMaterial = Material.NETHERITE_SWORD; + helmetMaterial = Material.NETHERITE_HELMET; + chestplateMaterial = Material.NETHERITE_CHESTPLATE; + leggingsMaterial = Material.NETHERITE_LEGGINGS; + bootsMaterial = Material.NETHERITE_BOOTS; + } + + public void tier6() { + swordAttackDamage = 10; + swordAttackSpeed = 1.6f; + + helmetArmour = 3; + helmetToughness = 5; + helmetResistance = 0.1; + + chestplateArmour = 8; + chestplateToughness = 5; + chestplateResistance = 0.1; + + leggingsArmour = 6; + leggingsToughness = 5; + leggingsResistance = 0.1; + + bootsArmour = 3; + bootsToughness = 5; + bootsResistance = 0.1; + + swordMaterial = Material.NETHERITE_SWORD; + helmetMaterial = Material.NETHERITE_HELMET; + chestplateMaterial = Material.NETHERITE_CHESTPLATE; + leggingsMaterial = Material.NETHERITE_LEGGINGS; + bootsMaterial = Material.NETHERITE_BOOTS; + } + + public List getSwordStats () { + List swordStats = new ArrayList<>(); + swordStats.add("\n"); + swordStats.add("&7When in Main Hand:"); + swordStats.add(String.format("&2 %.1f Attack Damage", swordAttackDamage)); + swordStats.add(String.format("&2 %.1f Attack Speed", swordAttackSpeed)); + return swordStats; + } + + public void registerHandler() { + Items.registerHandler(getClass().getSimpleName().toLowerCase(), this); + } +} diff --git a/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomSword.java b/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomSword.java new file mode 100644 index 0000000..4f2d826 --- /dev/null +++ b/src/main/java/dev/zxq5/fantasysmp/items/presets/CustomSword.java @@ -0,0 +1,87 @@ +package dev.zxq5.fantasysmp.items.presets; + +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.EquipmentSlotGroup; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.List; +import java.util.Map; + +public class CustomSword extends CustomItem { + public CustomSet customSet; + + public CustomSword(CustomSet customSet, String id) { + super(id); + this.customSet = customSet; + } + + @Override + public String getName() { + return customSet.swordName; + } + + @Override + public Material getMaterial() { + return customSet.swordMaterial; + } + + @Override + public List getLore() { + return customSet.swordLore; + } + + public CustomSet getSet() { + return customSet; + } + + @Override + public int getCustomModel() { + return customSet.swordModel; + } + + @Override + public Map getEnchants() { + return customSet.swordEnchants; + } + + public void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event) { + customSet.handleLeftClick(player, itemStack, event); + } + + public void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event) { + customSet.handleRightClick(player, itemStack, event); + } + + public void onHit(Player player, ItemStack itemStack, EntityDamageByEntityEvent event) { + customSet.onHit(player,itemStack, event); + } + + public ItemMeta setStats(ItemMeta itemMeta) { + itemMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, new AttributeModifier( + NamespacedKey.minecraft("generic.attack_damage"), + customSet.swordAttackDamage - 1, + AttributeModifier.Operation.ADD_NUMBER, + EquipmentSlotGroup.HAND + )); + + itemMeta.addAttributeModifier(Attribute.ATTACK_SPEED, new AttributeModifier( + NamespacedKey.minecraft("generic.attack_speed"), + customSet.swordAttackSpeed - 4, + AttributeModifier.Operation.ADD_NUMBER, + EquipmentSlotGroup.HAND + )); + + itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + + return itemMeta; + } +} diff --git a/src/main/java/dev/zxq5/fantasysmp/util/Common.java b/src/main/java/dev/zxq5/fantasysmp/util/Common.java new file mode 100644 index 0000000..c59722e --- /dev/null +++ b/src/main/java/dev/zxq5/fantasysmp/util/Common.java @@ -0,0 +1,14 @@ +package dev.zxq5.fantasysmp.util; + +import org.bukkit.ChatColor; + +public class Common { + + private Common(){ + + } + + public static String colorize(String string) { + return ChatColor.translateAlternateColorCodes('&', string); + } +}