@@ -4,17 +4,37 @@ import dev.zxq5.fantasysmp.events.*;
|
|||||||
import dev.zxq5.fantasysmp.groups.Commands;
|
import dev.zxq5.fantasysmp.groups.Commands;
|
||||||
import dev.zxq5.fantasysmp.groups.Team;
|
import dev.zxq5.fantasysmp.groups.Team;
|
||||||
import dev.zxq5.fantasysmp.items.*;
|
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.Warp;
|
||||||
import dev.zxq5.fantasysmp.warps.Warper;
|
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 org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public final class Fantasysmp extends JavaPlugin {
|
public final class Fantasysmp extends JavaPlugin {
|
||||||
|
private static JavaPlugin plugin;
|
||||||
|
public static NamespacedKey customItemKey;
|
||||||
|
public static Map<String, CustomItem> customItemMap;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
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);
|
getCommand("items").setExecutor(items);
|
||||||
|
|
||||||
|
registerListeners(new CustomItemHandler());
|
||||||
|
|
||||||
// Plugin startup logic
|
// Plugin startup logic
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -56,4 +76,18 @@ public final class Fantasysmp extends JavaPlugin {
|
|||||||
e.printStackTrace();
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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<String> 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,13 +1,18 @@
|
|||||||
package dev.zxq5.fantasysmp.items;
|
package dev.zxq5.fantasysmp.items;
|
||||||
|
|
||||||
|
import dev.zxq5.fantasysmp.Fantasysmp;
|
||||||
import dev.zxq5.fantasysmp.items.food.AppleCider;
|
import dev.zxq5.fantasysmp.items.food.AppleCider;
|
||||||
import dev.zxq5.fantasysmp.items.food.AppleJuice;
|
import dev.zxq5.fantasysmp.items.food.AppleJuice;
|
||||||
import dev.zxq5.fantasysmp.items.gear.*;
|
import dev.zxq5.fantasysmp.items.gear.*;
|
||||||
|
import dev.zxq5.fantasysmp.items.presets.CustomSet;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class Items implements CommandExecutor {
|
public class Items implements CommandExecutor {
|
||||||
|
private static Map<String, CustomSet> commandHandlers = new HashMap<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(org.bukkit.command.CommandSender sender, org.bukkit.command.Command command, String label, String[] args) {
|
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;
|
CommandExecutor handler;
|
||||||
switch (args[0]) {
|
|
||||||
case "witherite" -> handler = new WitheriteGear();
|
if(commandHandlers.containsKey(args[0])) {
|
||||||
case "lightning" -> handler = new LightningSword();
|
handler = commandHandlers.get(args[0]);
|
||||||
case "steven" -> handler = new StevensWrath();
|
} else {
|
||||||
case "blazing" -> handler = new BlazingGear();
|
return false;
|
||||||
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; }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
handler.onCommand(sender, command, label, args);
|
handler.onCommand(sender, command, label, args);
|
||||||
@@ -50,48 +49,25 @@ public class Items implements CommandExecutor {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Items(JavaPlugin plugin) {
|
public Items() {
|
||||||
|
new Witherite();
|
||||||
WitheriteGear witherite = new WitheriteGear();
|
new Blazing();
|
||||||
witherite.registerRecipes();
|
new Dragon();
|
||||||
witherite.registerEvents(plugin);
|
new TrueNetherite();
|
||||||
|
new Crimson();
|
||||||
LightningSword lightning = new LightningSword();
|
new Poseidon();
|
||||||
lightning.registerRecipes();
|
new Ender();
|
||||||
lightning.registerEvents(plugin);
|
new StevensWrath();
|
||||||
|
new LightningSword();
|
||||||
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);
|
|
||||||
|
|
||||||
AppleJuice appleJuice = new AppleJuice();
|
AppleJuice appleJuice = new AppleJuice();
|
||||||
appleJuice.registerEvents(plugin);
|
appleJuice.registerEvents(Fantasysmp.getPlugin());
|
||||||
|
|
||||||
AppleCider appleCider = new AppleCider();
|
AppleCider appleCider = new AppleCider();
|
||||||
appleCider.registerEvents(plugin);
|
appleCider.registerEvents(Fantasysmp.getPlugin());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void registerHandler(String command, CustomSet customSet) {
|
||||||
|
commandHandlers.put(command,customSet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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<Player> cooldown = new ArrayList<>();
|
||||||
|
public static Blazing instance;
|
||||||
|
public static int tier = 5;
|
||||||
|
|
||||||
|
private final ArrayList<DamageType> 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));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<Player> cooldown = new ArrayList<>();
|
|
||||||
|
|
||||||
private final ArrayList<DamageType> 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";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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<Player, ItemStack> gliding = new HashMap<>();
|
||||||
|
private ArrayList<Player> 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));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<Player> 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";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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<Player> 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));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<Player> 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,";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,34 +1,55 @@
|
|||||||
package dev.zxq5.fantasysmp.items.gear;
|
package dev.zxq5.fantasysmp.items.gear;
|
||||||
|
|
||||||
import dev.zxq5.fantasysmp.items.GenericGearSet;
|
import dev.zxq5.fantasysmp.Fantasysmp;
|
||||||
import dev.zxq5.fantasysmp.util.LoreChecker;
|
import dev.zxq5.fantasysmp.items.presets.*;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.NamespacedKey;
|
import org.bukkit.NamespacedKey;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.*;
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.entity.EntityPotionEffectEvent;
|
||||||
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.ShapedRecipe;
|
import org.bukkit.inventory.ShapedRecipe;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
import static org.bukkit.Bukkit.getServer;
|
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 LightningSword() {
|
||||||
public boolean onCommand(org.bukkit.command.CommandSender sender, org.bukkit.command.Command command, String label, String[] args) {
|
super(tier);
|
||||||
Player player = (Player) sender;
|
instance = this;
|
||||||
player.getInventory().addItem(this.getSword());
|
|
||||||
return true;
|
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
|
@Override
|
||||||
public void registerRecipes() {
|
public void registerRecipes() {
|
||||||
ItemStack sword = this.getSword();
|
ItemStack sword = Fantasysmp.customItemMap.get(swordId).getItem();
|
||||||
NamespacedKey swordKey = new NamespacedKey("fantasysmp.items", "lightning_sword");
|
NamespacedKey swordKey = new NamespacedKey("fantasysmp.items", swordId.toLowerCase());
|
||||||
ShapedRecipe swordRecipe = new ShapedRecipe(swordKey, sword);
|
ShapedRecipe swordRecipe = new ShapedRecipe(swordKey, sword);
|
||||||
swordRecipe.shape(" N ", " N ", " R ");
|
swordRecipe.shape(" N ", " N ", " R ");
|
||||||
swordRecipe.setIngredient('N', Material.NETHER_STAR);
|
swordRecipe.setIngredient('N', Material.NETHER_STAR);
|
||||||
@@ -36,22 +57,15 @@ public class LightningSword extends GenericGearSet implements Listener, CommandE
|
|||||||
getServer().addRecipe(swordRecipe);
|
getServer().addRecipe(swordRecipe);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@Override
|
||||||
public void onEntityDamageByEntity(org.bukkit.event.entity.EntityDamageByEntityEvent event) {
|
public void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent 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;
|
@Override
|
||||||
|
public void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {}
|
||||||
|
|
||||||
if (
|
@Override
|
||||||
player.isOnGround()
|
public void onHit(Player player, ItemStack itemStack, EntityDamageByEntityEvent event) {
|
||||||
|| player.getVelocity().getY() >= 0
|
if (player.isOnGround() || player.getVelocity().getY() >= 0 || player.isClimbing() || player.isInWater() || player.isInsideVehicle() || player.hasPotionEffect(PotionEffectType.BLINDNESS)
|
||||||
|| player.isClimbing()
|
|
||||||
|| player.isInWater()
|
|
||||||
|| player.isInsideVehicle()
|
|
||||||
|| player.hasPotionEffect(PotionEffectType.BLINDNESS)
|
|
||||||
) return;
|
) return;
|
||||||
|
|
||||||
|
|
||||||
@@ -63,43 +77,26 @@ public class LightningSword extends GenericGearSet implements Listener, CommandE
|
|||||||
world.strikeLightning(location);
|
world.strikeLightning(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@Override
|
||||||
public void onEntityDamage(org.bukkit.event.entity.EntityDamageEvent event) {
|
public void onArmourChange(Player player, ItemStack item, boolean active) {}
|
||||||
if (event.getEntity() instanceof Player player) {
|
|
||||||
if (!(event
|
@Override
|
||||||
|
public void onDamage(EntityDamageEvent event) {
|
||||||
|
if (!(event
|
||||||
.getDamageSource()
|
.getDamageSource()
|
||||||
.getDamageType()
|
.getDamageType()
|
||||||
.getKey()
|
.getKey()
|
||||||
.toString()
|
.toString()
|
||||||
.equals("minecraft:lightning_bolt")
|
.equals("minecraft:lightning_bolt")
|
||||||
)) return;
|
)) return;
|
||||||
|
|
||||||
if (LoreChecker.itemLoreContains(player.getInventory().getItemInMainHand(), this.sword.lore)) {
|
event.setCancelled(true);
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@Override
|
||||||
public void onEntityDeath(org.bukkit.event.entity.EntityDeathEvent event) {
|
public void onEffect(EntityPotionEffectEvent 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void init() {}
|
private static void registerItems() {
|
||||||
|
Fantasysmp.registerItems(new CustomSword(instance, getInstance().swordId));
|
||||||
public LightningSword() {
|
|
||||||
this.setTier5();
|
|
||||||
this.sword.name = "Lightning Sword";
|
|
||||||
this.sword.customItemModel = "lightning_sword";
|
|
||||||
this.sword.lore = "All who oppose shall be smitten.";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,45 +1,72 @@
|
|||||||
package dev.zxq5.fantasysmp.items.gear;
|
package dev.zxq5.fantasysmp.items.gear;
|
||||||
|
|
||||||
import dev.zxq5.fantasysmp.items.GenericGearSet;
|
import dev.zxq5.fantasysmp.Fantasysmp;
|
||||||
import dev.zxq5.fantasysmp.util.LoreChecker;
|
import dev.zxq5.fantasysmp.items.presets.*;
|
||||||
import org.bukkit.*;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.NamespacedKey;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
import org.bukkit.event.Listener;
|
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
|
import static org.bukkit.Bukkit.getServer;
|
||||||
public boolean onCommand(org.bukkit.command.CommandSender sender, org.bukkit.command.Command command, String label, String[] args) {
|
|
||||||
Player player = (Player) sender;
|
public class StevensWrath extends CustomSet {
|
||||||
player.getInventory().addItem(this.getSword());
|
public static StevensWrath instance;
|
||||||
return true;
|
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 static StevensWrath getInstance() {
|
||||||
public void onCraft(org.bukkit.event.inventory.PrepareItemCraftEvent event) {
|
if (instance == null) {
|
||||||
if (!event.getInventory().contains(Material.NETHERITE_BLOCK)) return;
|
instance = new StevensWrath();
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
if (!(
|
@Override
|
||||||
LoreChecker.itemLoreContains(player.getInventory().getItemInMainHand(), this.sword.lore)
|
public void registerRecipes() {
|
||||||
|| LoreChecker.itemLoreContains(player.getInventory().getItemInOffHand(), this.sword.lore)
|
RecipeChoice template = new RecipeChoice.MaterialChoice(Material.NETHERITE_UPGRADE_SMITHING_TEMPLATE);
|
||||||
)) return;
|
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();
|
Location location = event.getEntity().getLocation();
|
||||||
World world = location.getWorld();
|
World world = location.getWorld();
|
||||||
|
|
||||||
@@ -48,31 +75,26 @@ public class StevensWrath extends GenericGearSet implements Listener, CommandExe
|
|||||||
world.strikeLightning(location);
|
world.strikeLightning(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@Override
|
||||||
public void onEntityDamage(org.bukkit.event.entity.EntityDamageEvent event) {
|
public void onArmourChange(Player player, ItemStack item, boolean active) {}
|
||||||
if (event.getEntity() instanceof Player player) {
|
|
||||||
|
|
||||||
if (!(event
|
@Override
|
||||||
.getDamageSource()
|
public void onDamage(EntityDamageEvent event) {
|
||||||
.getDamageType()
|
if (!(event
|
||||||
.getKey()
|
.getDamageSource()
|
||||||
.toString()
|
.getDamageType()
|
||||||
.equals("minecraft:lightning_bolt")
|
.getKey()
|
||||||
)) return;
|
.toString()
|
||||||
|
.equals("minecraft:lightning_bolt")
|
||||||
|
)) return;
|
||||||
|
|
||||||
if (LoreChecker.itemLoreContains(player.getInventory().getItemInMainHand(), this.sword.lore) ||
|
event.setCancelled(true);
|
||||||
LoreChecker.itemLoreContains(player.getInventory().getItemInOffHand(), this.sword.lore)) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void init() {}
|
@Override
|
||||||
|
public void onEffect(EntityPotionEffectEvent event) {}
|
||||||
|
|
||||||
public StevensWrath() {
|
private static void registerItems() {
|
||||||
this.setTier6();
|
Fantasysmp.registerItems(new CustomSword(instance, getInstance().swordId));
|
||||||
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.";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<Player> 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";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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<String> getLore() {
|
||||||
|
return customSet.bootsLore;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomSet getSet() {
|
||||||
|
return customSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCustomModel() {
|
||||||
|
return customSet.bootsModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<Enchantment, Integer> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<String> getLore() {
|
||||||
|
return customSet.chestplateLore;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomSet getSet() {
|
||||||
|
return customSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCustomModel() {
|
||||||
|
return customSet.chestplateModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<Enchantment, Integer> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<String> getLore() {
|
||||||
|
return customSet.helmetLore;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomSet getSet() {
|
||||||
|
return customSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCustomModel() {
|
||||||
|
return customSet.helmetModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<Enchantment, Integer> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<String> getLore();
|
||||||
|
|
||||||
|
public abstract int getCustomModel();
|
||||||
|
|
||||||
|
public abstract Map<Enchantment, Integer> 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<String> 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<Enchantment, Integer> enchants = getEnchants();
|
||||||
|
|
||||||
|
enchants.forEach((en, lvl)-> {
|
||||||
|
itemStack.addUnsafeEnchantment(en, lvl);
|
||||||
|
});
|
||||||
|
|
||||||
|
return itemStack;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<Material> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<String> getLore() {
|
||||||
|
return customSet.leggingsLore;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomSet getSet() {
|
||||||
|
return customSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCustomModel() {
|
||||||
|
return customSet.leggingsModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<Enchantment, Integer> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<String> swordLore;
|
||||||
|
protected int swordModel;
|
||||||
|
|
||||||
|
protected String helmetId;
|
||||||
|
protected String helmetName;
|
||||||
|
protected Material helmetMaterial;
|
||||||
|
protected List<String> helmetLore;
|
||||||
|
protected int helmetModel;
|
||||||
|
|
||||||
|
protected String chestplateId;
|
||||||
|
protected String chestplateName;
|
||||||
|
protected Material chestplateMaterial;
|
||||||
|
protected List<String> chestplateLore;
|
||||||
|
protected int chestplateModel;
|
||||||
|
|
||||||
|
protected String leggingsId;
|
||||||
|
protected String leggingsName;
|
||||||
|
protected Material leggingsMaterial;
|
||||||
|
protected List<String> leggingsLore;
|
||||||
|
protected int leggingsModel;
|
||||||
|
|
||||||
|
protected String bootsId;
|
||||||
|
protected String bootsName;
|
||||||
|
protected Material bootsMaterial;
|
||||||
|
protected List<String> bootsLore;
|
||||||
|
protected int bootsModel;
|
||||||
|
|
||||||
|
protected Map<Enchantment, Integer> swordEnchants = new HashMap<>();
|
||||||
|
protected Map<Enchantment, Integer> helmetEnchants = new HashMap<>();
|
||||||
|
protected Map<Enchantment, Integer> chestplateEnchants = new HashMap<>();
|
||||||
|
protected Map<Enchantment, Integer> leggingsEnchants = new HashMap<>();
|
||||||
|
protected Map<Enchantment, Integer> 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<String> getSwordStats () {
|
||||||
|
List<String> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<String> getLore() {
|
||||||
|
return customSet.swordLore;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomSet getSet() {
|
||||||
|
return customSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCustomModel() {
|
||||||
|
return customSet.swordModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<Enchantment, Integer> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user