add airbag enchant

This commit is contained in:
2024-10-29 20:08:10 +01:00
parent 16eae2bd58
commit 9f3960c649
5 changed files with 294 additions and 0 deletions
@@ -2,8 +2,16 @@ package me.youhavetrouble.enchantio;
import me.youhavetrouble.enchantio.enchants.*;
import me.youhavetrouble.enchantio.listeners.*;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.EntityEquipment;
import org.bukkit.inventory.EquipmentSlotGroup;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
@SuppressWarnings("UnstableApiUsage")
public final class Enchantio extends JavaPlugin {
@Override
@@ -26,6 +34,10 @@ public final class Enchantio extends JavaPlugin {
if (EnchantioConfig.ENCHANTS.containsKey(SmeltingEnchant.KEY)) {
getServer().getPluginManager().registerEvents(new SmeltingListener(), this);
}
if (EnchantioConfig.ENCHANTS.containsKey(AirbagEnchant.KEY)) {
getServer().getPluginManager().registerEvents(new AirbagListener(), this);
}
if (EnchantioConfig.ENCHANTS.containsKey(PanicEnchant.KEY)) {
getServer().getPluginManager().registerEvents(new PanicListener(), this);
}
@@ -37,4 +49,100 @@ public final class Enchantio extends JavaPlugin {
getLogger().severe("Enchantio is being disabled without a server shutdown. Server will be shut down to prevent issues.");
getServer().shutdown();
}
/**
* Returns highest enchantment level of the given enchantment on the given equipment.
* @param equipment The equipment to check for enchantments.
* @param enchantment The enchantment to check for.
* @return The highest level of the enchantment in the equipment.
*/
public static int getHighestEnchantLevel(
@NotNull EntityEquipment equipment,
@NotNull Enchantment enchantment
) {
int highestLevel = 0;
Set<EquipmentSlotGroup> equipmentSlotGroups = enchantment.getActiveSlotGroups();
if (equipmentSlotGroups.contains(EquipmentSlotGroup.ANY) || equipmentSlotGroups.contains(EquipmentSlotGroup.ARMOR) || equipmentSlotGroups.contains(EquipmentSlotGroup.FEET)) {
ItemStack boots = equipment.getBoots();
if (boots != null) {
highestLevel = Math.max(highestLevel, boots.getEnchantmentLevel(enchantment));
}
}
if (equipmentSlotGroups.contains(EquipmentSlotGroup.ANY) || equipmentSlotGroups.contains(EquipmentSlotGroup.ARMOR) || equipmentSlotGroups.contains(EquipmentSlotGroup.LEGS)) {
ItemStack leggings = equipment.getLeggings();
if (leggings != null) {
highestLevel = Math.max(highestLevel, leggings.getEnchantmentLevel(enchantment));
}
}
if (equipmentSlotGroups.contains(EquipmentSlotGroup.ANY) || equipmentSlotGroups.contains(EquipmentSlotGroup.ARMOR) || equipmentSlotGroups.contains(EquipmentSlotGroup.CHEST)) {
ItemStack chestplate = equipment.getChestplate();
if (chestplate != null) {
highestLevel = Math.max(highestLevel, chestplate.getEnchantmentLevel(enchantment));
}
}
if (equipmentSlotGroups.contains(EquipmentSlotGroup.ANY) || equipmentSlotGroups.contains(EquipmentSlotGroup.ARMOR) || equipmentSlotGroups.contains(EquipmentSlotGroup.HEAD)) {
ItemStack helmet = equipment.getHelmet();
if (helmet != null) {
highestLevel = Math.max(highestLevel, helmet.getEnchantmentLevel(enchantment));
}
}
if (equipmentSlotGroups.contains(EquipmentSlotGroup.ANY) || equipmentSlotGroups.contains(EquipmentSlotGroup.HAND) || equipmentSlotGroups.contains(EquipmentSlotGroup.MAINHAND)) {
highestLevel = Math.max(highestLevel, equipment.getItemInMainHand().getEnchantmentLevel(enchantment));
}
if (equipmentSlotGroups.contains(EquipmentSlotGroup.ANY) || equipmentSlotGroups.contains(EquipmentSlotGroup.HAND) || equipmentSlotGroups.contains(EquipmentSlotGroup.OFFHAND)) {
highestLevel = Math.max(highestLevel, equipment.getItemInOffHand().getEnchantmentLevel(enchantment));
}
return highestLevel;
}
/**
* Returns the sum of enchantment levels of the given enchantment on the given equipment.
* @param equipment The equipment to check for enchantments.
* @param enchantment The enchantment to check for.
* @return Sum of enchantment levels of the enchantment in the equipment.
*/
public static int getSumOfEnchantLevels(
@NotNull EntityEquipment equipment,
@NotNull Enchantment enchantment
) {
int level = 0;
Set<EquipmentSlotGroup> equipmentSlotGroups = enchantment.getActiveSlotGroups();
if (equipmentSlotGroups.contains(EquipmentSlotGroup.ANY) || equipmentSlotGroups.contains(EquipmentSlotGroup.ARMOR) || equipmentSlotGroups.contains(EquipmentSlotGroup.FEET)) {
ItemStack boots = equipment.getBoots();
if (boots != null) {
level += boots.getEnchantmentLevel(enchantment);
}
}
if (equipmentSlotGroups.contains(EquipmentSlotGroup.ANY) || equipmentSlotGroups.contains(EquipmentSlotGroup.ARMOR) || equipmentSlotGroups.contains(EquipmentSlotGroup.LEGS)) {
ItemStack leggings = equipment.getLeggings();
if (leggings != null) {
level += leggings.getEnchantmentLevel(enchantment);
}
}
if (equipmentSlotGroups.contains(EquipmentSlotGroup.ANY) || equipmentSlotGroups.contains(EquipmentSlotGroup.ARMOR) || equipmentSlotGroups.contains(EquipmentSlotGroup.CHEST)) {
ItemStack chestplate = equipment.getChestplate();
if (chestplate != null) {
level += chestplate.getEnchantmentLevel(enchantment);
}
}
if (equipmentSlotGroups.contains(EquipmentSlotGroup.ANY) || equipmentSlotGroups.contains(EquipmentSlotGroup.ARMOR) || equipmentSlotGroups.contains(EquipmentSlotGroup.HEAD)) {
ItemStack helmet = equipment.getHelmet();
if (helmet != null) {
level += helmet.getEnchantmentLevel(enchantment);
}
}
if (equipmentSlotGroups.contains(EquipmentSlotGroup.ANY) || equipmentSlotGroups.contains(EquipmentSlotGroup.HAND) || equipmentSlotGroups.contains(EquipmentSlotGroup.MAINHAND)) {
ItemStack mainHand = equipment.getItemInMainHand();
level += mainHand.getEnchantmentLevel(enchantment);
}
if (equipmentSlotGroups.contains(EquipmentSlotGroup.ANY) || equipmentSlotGroups.contains(EquipmentSlotGroup.HAND) || equipmentSlotGroups.contains(EquipmentSlotGroup.OFFHAND)) {
ItemStack offHand = equipment.getItemInOffHand();
level += offHand.getEnchantmentLevel(enchantment);
}
return level;
}
}