mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 16:16:17 +02:00
Add Bulk enchantment operation interface.
This commit is contained in:
parent
0fd12b4185
commit
d3252eecbd
6 changed files with 136 additions and 2 deletions
|
|
@ -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)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
@ -29,7 +29,6 @@ object ItemUtil {
|
|||
fun ItemStack.setEnchantmentsUnsafe(enchantments: Map<CAEnchantment, Int>) {
|
||||
CAEnchantment.clearEnchants(this)
|
||||
|
||||
//TODO maybe faster methode to add vanilla enchantment. maybe move this function to wrapped enchantment
|
||||
enchantments.forEach { (enchantment, level) ->
|
||||
enchantment.addEnchantmentUnsafe(this, level)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -210,7 +210,7 @@ class EnchantConflictManager {
|
|||
val newItem = item.clone()
|
||||
|
||||
CAEnchantment.clearEnchants(newItem)
|
||||
enchantments.forEach{//TODO maybe bulk add if possible
|
||||
enchantments.forEach{
|
||||
enchantment -> enchantment.key.addEnchantmentUnsafe(newItem, enchantment.value)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue