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>) {
|
fun ItemStack.setEnchantmentsUnsafe(enchantments: Map<CAEnchantment, Int>) {
|
||||||
CAEnchantment.clearEnchants(this)
|
CAEnchantment.clearEnchants(this)
|
||||||
|
|
||||||
//TODO maybe faster methode to add vanilla enchantment. maybe move this function to wrapped enchantment
|
|
||||||
enchantments.forEach { (enchantment, level) ->
|
enchantments.forEach { (enchantment, level) ->
|
||||||
enchantment.addEnchantmentUnsafe(this, level)
|
enchantment.addEnchantmentUnsafe(this, level)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -210,7 +210,7 @@ class EnchantConflictManager {
|
||||||
val newItem = item.clone()
|
val newItem = item.clone()
|
||||||
|
|
||||||
CAEnchantment.clearEnchants(newItem)
|
CAEnchantment.clearEnchants(newItem)
|
||||||
enchantments.forEach{//TODO maybe bulk add if possible
|
enchantments.forEach{
|
||||||
enchantment -> enchantment.key.addEnchantmentUnsafe(newItem, enchantment.value)
|
enchantment -> enchantment.key.addEnchantmentUnsafe(newItem, enchantment.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue