Add Bulk enchantment operation interface.

This commit is contained in:
alexcrea 2024-07-11 14:02:05 +02:00
parent 0fd12b4185
commit d3252eecbd
No known key found for this signature in database
GPG key ID: 43FD265DB0DBF91F
6 changed files with 136 additions and 2 deletions

View file

@ -0,0 +1,47 @@
package xyz.alexcrea.cuanvil.enchant.bulk;
import io.delilaheve.util.ItemUtil;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.api.EnchantmentApi;
import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
import java.util.Map;
public class BukkitEnchantBulkOperation implements BulkGetEnchantOperation, BulkCleanEnchantOperation {
@Override
public void bulkGet(@NotNull Map<CAEnchantment, Integer> enchantmentList, @NotNull ItemStack item, @NotNull ItemMeta meta) {
if (ItemUtil.INSTANCE.isEnchantedBook(item)) {
((EnchantmentStorageMeta)meta).getStoredEnchants().forEach((enchantment, level) ->
enchantmentList.put(EnchantmentApi.getByKey(enchantment.getKey()), level)
);
} else {
item.getEnchantments().forEach((enchantment, level) ->
enchantmentList.put(EnchantmentApi.getByKey(enchantment.getKey()), level)
);
}
}
@Override
public void bulkClear(@NotNull ItemStack item) {
if (item.getType() != Material.ENCHANTED_BOOK) {
item.getEnchantments().forEach((enchantment, leve) ->
item.removeEnchantment(enchantment)
);
}
}
@Override
public void bulkClear(@NotNull ItemStack item, @NotNull ItemMeta meta) {
if (item.getType() == Material.ENCHANTED_BOOK) {
EnchantmentStorageMeta bookMeta = (EnchantmentStorageMeta) meta;
bookMeta.getStoredEnchants().forEach((enchantment, leve) ->
bookMeta.removeStoredEnchant(enchantment)
);
}
}
}

View file

@ -0,0 +1,28 @@
package xyz.alexcrea.cuanvil.enchant.bulk;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
/**
* Bulk operation for clean enchantments operations.
*/
public interface BulkCleanEnchantOperation {
/**
* Bulk clear part of the enchantments from this item.
* The item can be edited freely. If you need the meta it is preferred to use {@link #bulkClear(ItemStack, ItemMeta)} if possible
* @param item The item to clear enchantment from.
*/
void bulkClear(@NotNull ItemStack item);
/**
* Bulk clear part of the enchantments from this item meta.
* Item should not be edited as meta will be applied later.
* If you need to edit the item and do not need the meta use {@link #bulkClear(ItemStack)}
* @param item The item source of the item meta. should not be edited.
* @param meta The item meta to clear enchantment from.
*/
void bulkClear(@NotNull ItemStack item, @NotNull ItemMeta meta);
}

View file

@ -0,0 +1,23 @@
package xyz.alexcrea.cuanvil.enchant.bulk;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
import java.util.Map;
/**
* Bulk operation for get enchantments operations.
*/
public interface BulkGetEnchantOperation {
/**
* Bulk get part of the stored enchantment of this item.
* @param enchantmentList Mutable map of collected enchantment. should b
* @param item The item to get enchantment from. Should not get edited.
* @param meta The item meta to get enchantment from. Should not get edited.
*/
void bulkGet(@NotNull Map<CAEnchantment, Integer> enchantmentList, @NotNull ItemStack item, @NotNull ItemMeta meta);
}

View file

@ -0,0 +1,37 @@
package xyz.alexcrea.cuanvil.enchant.bulk;
import me.athlaeos.enchantssquared.managers.CustomEnchantManager;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.dependency.DependencyManager;
import xyz.alexcrea.cuanvil.dependency.EnchantmentSquaredDependency;
import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
import java.util.Collections;
import java.util.Map;
public class EnchantSquaredBulkOperation implements BulkGetEnchantOperation, BulkCleanEnchantOperation {
@Override
public void bulkGet(@NotNull Map<CAEnchantment, Integer> enchantmentList, @NotNull ItemStack item, @NotNull ItemMeta meta) {
EnchantmentSquaredDependency enchantmentSquared = DependencyManager.INSTANCE.getEnchantmentSquaredCompatibility();
if(enchantmentSquared != null){
enchantmentSquared.getEnchantmentsSquared(item, enchantmentList);
}
}
@Override
public void bulkClear(@NotNull ItemStack item) {
EnchantmentSquaredDependency enchantmentSquared = DependencyManager.INSTANCE.getEnchantmentSquaredCompatibility();
if(enchantmentSquared != null){
CustomEnchantManager.getInstance().setItemEnchants(item, Collections.emptyMap());
}
}
@Override
public void bulkClear(@NotNull ItemStack item, @NotNull ItemMeta meta) {
// item meta is not preferred for enchantment squared clear
}
}