mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 16:16:17 +02:00
Renamed WrappedEnchantment to CAEnchantment (CustomAnvilEnchantment).
created an interface out of CAEnchantment and moved the implementation to CAEnchantmentBase.
This commit is contained in:
parent
fa4752ea67
commit
dafe595c5b
20 changed files with 575 additions and 463 deletions
228
src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantment.java
Normal file
228
src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantment.java
Normal file
|
|
@ -0,0 +1,228 @@
|
|||
package xyz.alexcrea.cuanvil.enchant;
|
||||
|
||||
import io.delilaheve.util.ItemUtil;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import xyz.alexcrea.cuanvil.dependency.DependencyManager;
|
||||
import xyz.alexcrea.cuanvil.dependency.EnchantmentSquaredDependency;
|
||||
import xyz.alexcrea.cuanvil.group.ConflictType;
|
||||
import xyz.alexcrea.cuanvil.group.EnchantConflictGroup;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Represent an enchantment compatible with Custom Anvil.
|
||||
* One issue with custom anvil is: it does not handle well duplicate key name (ignoring namespace) as the plugin was coded with vanilla enchantment in head
|
||||
*/
|
||||
public interface CAEnchantment {
|
||||
|
||||
|
||||
/**
|
||||
* Get the default rarity of this enchant.
|
||||
* @return The default rarity of this enchant.
|
||||
*/
|
||||
@NotNull
|
||||
EnchantmentRarity defaultRarity();
|
||||
|
||||
/**
|
||||
* Get the enchantment key.
|
||||
* @return The enchantment key.
|
||||
*/
|
||||
@NotNull
|
||||
NamespacedKey getKey();
|
||||
|
||||
/**
|
||||
* Get the enchantment name.
|
||||
* @return The enchantment name.
|
||||
*/
|
||||
@NotNull
|
||||
String getName();
|
||||
|
||||
/**
|
||||
* Get the default maximum level of this enchantment.
|
||||
* @return The default maximum level of this enchantment.
|
||||
*/
|
||||
int defaultMaxLevel();
|
||||
|
||||
/**
|
||||
* Check if the enchantment have specialised group operation.
|
||||
* @return If the enchantment is optimised for group operation.
|
||||
*/
|
||||
boolean isOptimised();
|
||||
|
||||
/**
|
||||
* Check if the player is allowed to use this enchantment.
|
||||
* @param player The player to test.
|
||||
* @return If the player is allowed to use this enchantment.
|
||||
*/
|
||||
boolean isAllowed(@NotNull HumanEntity player);
|
||||
|
||||
void addConflict(@NotNull EnchantConflictGroup conflict);
|
||||
void removeConflict(@NotNull EnchantConflictGroup conflict);
|
||||
|
||||
void clearConflict();
|
||||
|
||||
@NotNull Set<EnchantConflictGroup> getConflicts();
|
||||
|
||||
@NotNull ConflictType testConflict();
|
||||
|
||||
/**
|
||||
* Get current level of the enchantment.
|
||||
* @param item Item to search the level for.
|
||||
*/
|
||||
int getLevel(@NotNull ItemStack item);
|
||||
|
||||
/**
|
||||
* Get current level of the enchantment.
|
||||
* @param item Item to search the level for.
|
||||
* @param meta Meta of the provided item. It will not be changed and not be set on the item.
|
||||
* @return Current leve of this enchantment on item. or 0 if absent.
|
||||
*/
|
||||
int getLevel(@NotNull ItemStack item, @NotNull ItemMeta meta);
|
||||
|
||||
/**
|
||||
* Check if this enchantment is present on the provided level.
|
||||
* @param item The item to set the enchantment level.
|
||||
* @return If the enchantment have been found.
|
||||
*/
|
||||
boolean isEnchantmentPresent(@NotNull ItemStack item);
|
||||
|
||||
/**
|
||||
* Check if this enchantment is present on the provided level.
|
||||
* @param item The item to set the enchantment level.
|
||||
* @param meta Meta of the provided item. It will not be changed and not be set on the item.
|
||||
* @return If the enchantment have been found.
|
||||
*/
|
||||
boolean isEnchantmentPresent(@NotNull ItemStack item, @NotNull ItemMeta meta);
|
||||
|
||||
/**
|
||||
* Force add an enchantment at the provided level.
|
||||
* @param item The item to set the enchantment level.
|
||||
* @param level The level to set the enchantment to.
|
||||
*/
|
||||
void addEnchantmentUnsafe(@NotNull ItemStack item, int level);
|
||||
|
||||
/**
|
||||
* Remove this enchantment from the provided ItemStack.
|
||||
* @param item The item to remove the enchantment.
|
||||
*/
|
||||
void removeFrom(@NotNull ItemStack item);
|
||||
|
||||
// Static functions
|
||||
/**
|
||||
* Clear every enchantment from this item.
|
||||
* @param item Item to be cleared from enchantments.
|
||||
*/
|
||||
static void clearEnchants(@NotNull ItemStack item){
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
if(meta == null) return;
|
||||
|
||||
// Clean Vanilla enchants
|
||||
if (ItemUtil.INSTANCE.isEnchantedBook(item)) {
|
||||
EnchantmentStorageMeta bookMeta = (EnchantmentStorageMeta) meta;
|
||||
bookMeta.getStoredEnchants().forEach(
|
||||
(enchantment, leve) -> bookMeta.removeStoredEnchant(enchantment)
|
||||
);
|
||||
} else {
|
||||
item.getEnchantments().forEach(
|
||||
(enchantment, leve) -> item.removeEnchantment(enchantment)
|
||||
);
|
||||
}
|
||||
|
||||
// Clean Enchant Squared enchants
|
||||
EnchantmentSquaredDependency enchantmentSquared = DependencyManager.INSTANCE.getEnchantmentSquaredCompatibility();
|
||||
if(enchantmentSquared != null){
|
||||
enchantmentSquared.clearEnchantments(item);
|
||||
}
|
||||
|
||||
// Clean unoptimised enchants
|
||||
for (CAEnchantment enchant : CAEnchantmentRegistry.getInstance().unoptimisedValues()) {
|
||||
if(enchant.isEnchantmentPresent(item)){
|
||||
enchant.removeFrom(item);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get enchantments of an item.
|
||||
* @param item Item to get enchantment from.
|
||||
* @return A map of the set enchantments and there's respective levels.
|
||||
*/
|
||||
static Map<CAEnchantment, Integer> getEnchants(@NotNull ItemStack item){
|
||||
Map<CAEnchantment, Integer> enchantments = new HashMap<>();
|
||||
CAEnchantmentRegistry registry = CAEnchantmentRegistry.getInstance();
|
||||
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
if(meta == null) return enchantments;
|
||||
|
||||
// Vanilla optimised get
|
||||
if (ItemUtil.INSTANCE.isEnchantedBook(item)) {
|
||||
((EnchantmentStorageMeta)meta).getStoredEnchants().forEach(
|
||||
(enchantment, level) -> enchantments.put(registry.getByKey(enchantment.getKey()), level)
|
||||
);
|
||||
} else {
|
||||
item.getEnchantments().forEach(
|
||||
(enchantment, level) -> enchantments.put(registry.getByKey(enchantment.getKey()), level)
|
||||
);
|
||||
}
|
||||
|
||||
// Enchants Squared get
|
||||
EnchantmentSquaredDependency enchantmentSquared = DependencyManager.INSTANCE.getEnchantmentSquaredCompatibility();
|
||||
if(enchantmentSquared != null){
|
||||
enchantmentSquared.getEnchantmentsSquared(item, enchantments);
|
||||
}
|
||||
|
||||
// Unoptimised enchantment get
|
||||
findEnchantsFromSelectedList(item, meta, enchantments, registry.unoptimisedValues());
|
||||
|
||||
return enchantments;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Find enchantments of an item. only test the enchantment from the list.
|
||||
* @param item Item to get enchantment from.
|
||||
* @param meta Meta of the provided item.
|
||||
* @param enchantments Map of enchantment to complete.
|
||||
* @param enchantmentToTest Enchantment to test
|
||||
*/
|
||||
static void findEnchantsFromSelectedList(
|
||||
@NotNull ItemStack item,
|
||||
@NotNull ItemMeta meta,
|
||||
@NotNull Map<CAEnchantment, Integer> enchantments,
|
||||
@NotNull Collection<CAEnchantment> enchantmentToTest){
|
||||
|
||||
for (CAEnchantment enchantment : enchantmentToTest) {
|
||||
if(enchantment.isEnchantmentPresent(item, meta)){
|
||||
enchantments.put(enchantment, enchantment.getLevel(item, meta));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an array of all the registered enchantments.
|
||||
* @return Array of enchantment.
|
||||
*/
|
||||
static @Nullable CAEnchantment getByKey(@NotNull NamespacedKey key){
|
||||
return CAEnchantmentRegistry.getInstance().getByKey(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a list of all the unoptimised enchantments.
|
||||
* @return List of enchantment.
|
||||
*/
|
||||
static @Nullable CAEnchantment getByName(@NotNull String name){
|
||||
return CAEnchantmentRegistry.getInstance().getByName(name);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
package xyz.alexcrea.cuanvil.enchant;
|
||||
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import xyz.alexcrea.cuanvil.group.ConflictType;
|
||||
import xyz.alexcrea.cuanvil.group.EnchantConflictGroup;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public abstract class CAEnchantmentBase implements CAEnchantment {
|
||||
|
||||
@NotNull
|
||||
private final NamespacedKey key;
|
||||
@NotNull
|
||||
private final String name;
|
||||
@NotNull
|
||||
private final EnchantmentRarity defaultRarity;
|
||||
private final int defaultMaxLevel;
|
||||
|
||||
private final Set<EnchantConflictGroup> conflicts;
|
||||
|
||||
/**
|
||||
* Constructor of Wrapped Enchantment.
|
||||
* @param key The enchantment's key.
|
||||
* @param defaultRarity Default rarity the enchantment should be.
|
||||
* @param defaultMaxLevel Default max level the enchantment can be applied with.
|
||||
*/
|
||||
protected CAEnchantmentBase(
|
||||
@NotNull NamespacedKey key,
|
||||
@Nullable EnchantmentRarity defaultRarity,
|
||||
int defaultMaxLevel){
|
||||
this.key = key;
|
||||
this.name = key.getKey();
|
||||
this.defaultMaxLevel = defaultMaxLevel;
|
||||
|
||||
if(defaultRarity == null) this.defaultRarity = EnchantmentRarity.COMMON;
|
||||
else this.defaultRarity = defaultRarity;
|
||||
|
||||
this.conflicts = new HashSet<>();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public final EnchantmentRarity defaultRarity(){
|
||||
return defaultRarity;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public final NamespacedKey getKey(){
|
||||
return key;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public final String getName(){
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final int defaultMaxLevel(){
|
||||
return defaultMaxLevel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOptimised(){
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAllowed(@NotNull HumanEntity player){
|
||||
return true;
|
||||
}
|
||||
|
||||
public int getLevel(@NotNull ItemStack item){
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
if(meta == null) return 0;
|
||||
return getLevel(item, meta);
|
||||
}
|
||||
|
||||
public boolean isEnchantmentPresent(@NotNull ItemStack item){
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
if(meta == null) return false;
|
||||
return isEnchantmentPresent(item, meta);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addConflict(@NotNull EnchantConflictGroup conflict){
|
||||
this.conflicts.add(conflict);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeConflict(@NotNull EnchantConflictGroup conflict){
|
||||
this.conflicts.remove(conflict);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearConflict(){
|
||||
this.conflicts.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Set<EnchantConflictGroup> getConflicts() {
|
||||
return conflicts;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull ConflictType testConflict() {
|
||||
return ConflictType.NO_CONFLICT;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,131 @@
|
|||
package xyz.alexcrea.cuanvil.enchant;
|
||||
|
||||
import io.delilaheve.CustomAnvil;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import xyz.alexcrea.cuanvil.dependency.DependencyManager;
|
||||
import xyz.alexcrea.cuanvil.enchant.wrapped.CAVanillaEnchantment;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
|
||||
public class CAEnchantmentRegistry {
|
||||
|
||||
private static final CAEnchantmentRegistry instance = new CAEnchantmentRegistry();
|
||||
public static CAEnchantmentRegistry getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
// Register enchantment functions
|
||||
private final HashMap<NamespacedKey, CAEnchantment> byKeyMap;
|
||||
private final HashMap<String, CAEnchantment> byNameMap;
|
||||
private final List<CAEnchantment> unoptimisedValues;
|
||||
|
||||
private CAEnchantmentRegistry() {
|
||||
byKeyMap = new HashMap<>();
|
||||
byNameMap = new HashMap<>();
|
||||
unoptimisedValues = new ArrayList<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* This should only be called on main of custom anvil.
|
||||
* If called more than one time, chance of thing being broken will be high.
|
||||
*/
|
||||
public void registerStartupEnchantments(){
|
||||
for (Enchantment enchantment : Enchantment.values()) {
|
||||
register(new CAVanillaEnchantment(enchantment));
|
||||
}
|
||||
|
||||
if(DependencyManager.INSTANCE.getEnchantmentSquaredCompatibility() != null){
|
||||
DependencyManager.INSTANCE.getEnchantmentSquaredCompatibility().registerEnchantments();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Can be used to register new enchantment.
|
||||
* <p>
|
||||
* No guarantee that the enchantment will be present on the config gui if registered late.
|
||||
* (By late I mean after custom anvil startup.)
|
||||
* @param enchantment The enchantment to be registered.
|
||||
*/
|
||||
public void register(@NotNull CAEnchantment enchantment){
|
||||
if(byKeyMap.containsKey(enchantment.getKey())){
|
||||
CustomAnvil.instance.getLogger().log(Level.WARNING,
|
||||
"Duplicate registered enchantment. This should NOT happen.",
|
||||
new IllegalStateException(enchantment.getKey()+" enchantment was already registered"));
|
||||
return;
|
||||
}
|
||||
if(byNameMap.containsKey(enchantment.getName())){
|
||||
CustomAnvil.instance.getLogger().log(Level.WARNING,
|
||||
"Duplicate registered enchantment name. There will have issue. " +
|
||||
"\nI hope this do not happen to you on a production server. If it do, there is probably a plugin trying to register an enchantment with the same name than another one",
|
||||
new IllegalStateException(enchantment.getKey()+" enchantment name was already registered"));
|
||||
}
|
||||
|
||||
byKeyMap.put(enchantment.getKey(), enchantment);
|
||||
byNameMap.put(enchantment.getName(), enchantment);
|
||||
|
||||
if(!enchantment.isOptimised()){
|
||||
unoptimisedValues.add(enchantment);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Can be used to unregister new enchantment.
|
||||
* Please be cautious with this function.
|
||||
* It should probably rarely be used.
|
||||
* <p>
|
||||
* No guarantee that the enchantment will absent if the config guis if unregistered late.
|
||||
* (By late I mean after custom anvil startup.)
|
||||
* @param enchantment The enchantment to be unregistered.
|
||||
*/
|
||||
public void unregister(@NotNull CAEnchantment enchantment){
|
||||
byKeyMap.remove(enchantment.getKey());
|
||||
byNameMap.remove(enchantment.getName());
|
||||
|
||||
unoptimisedValues.remove(enchantment);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the enchantment by the provided key.
|
||||
* @param key Key to fetch.
|
||||
* @return Registered enchantment. null if absent.
|
||||
*/
|
||||
public @Nullable CAEnchantment getByKey(@NotNull NamespacedKey key){
|
||||
return byKeyMap.get(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the enchantment by the provided name.
|
||||
* @param name Name to fetch.
|
||||
* @return Registered enchantment. null if absent.
|
||||
*/
|
||||
public @Nullable CAEnchantment getByName(@NotNull String name){
|
||||
return byNameMap.get(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an array of all the registered enchantments.
|
||||
* @return Array of enchantment.
|
||||
*/
|
||||
@NotNull
|
||||
public Collection<CAEnchantment> values() {
|
||||
return byKeyMap.values();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a list of all the unoptimised enchantments.
|
||||
* @return List of enchantment.
|
||||
*/
|
||||
@NotNull
|
||||
public List<CAEnchantment> unoptimisedValues() {
|
||||
return unoptimisedValues;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,370 +0,0 @@
|
|||
package xyz.alexcrea.cuanvil.enchant;
|
||||
|
||||
import io.delilaheve.CustomAnvil;
|
||||
import io.delilaheve.util.ItemUtil;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import xyz.alexcrea.cuanvil.dependency.DependencyManager;
|
||||
import xyz.alexcrea.cuanvil.dependency.EnchantmentSquaredDependency;
|
||||
import xyz.alexcrea.cuanvil.enchant.wrapped.VanillaEnchantment;
|
||||
import xyz.alexcrea.cuanvil.group.AbstractMaterialGroup;
|
||||
import xyz.alexcrea.cuanvil.group.ConflictType;
|
||||
import xyz.alexcrea.cuanvil.group.EnchantConflictGroup;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.logging.Level;
|
||||
|
||||
/**
|
||||
* Represent any enchantment.
|
||||
* One issue with the plugin is: it does not handle well duplicate key name (ignoring namespace) as the plugin was coded with vanilla enchantment in head
|
||||
*/
|
||||
public abstract class WrappedEnchantment {
|
||||
|
||||
@NotNull
|
||||
private final NamespacedKey key;
|
||||
@NotNull
|
||||
private final String name;
|
||||
@NotNull
|
||||
private final EnchantmentRarity defaultRarity;
|
||||
private final int defaultMaxLevel;
|
||||
|
||||
private final Set<EnchantConflictGroup> conflicts;
|
||||
|
||||
/**
|
||||
* Constructor of Wrapped Enchantment.
|
||||
* @param key The enchantment's key.
|
||||
* @param defaultRarity Default rarity the enchantment should be.
|
||||
* @param defaultMaxLevel Default max level the enchantment can be applied with.
|
||||
*/
|
||||
protected WrappedEnchantment(
|
||||
@NotNull NamespacedKey key,
|
||||
@Nullable EnchantmentRarity defaultRarity,
|
||||
int defaultMaxLevel){
|
||||
this.key = key;
|
||||
this.name = key.getKey();
|
||||
this.defaultMaxLevel = defaultMaxLevel;
|
||||
|
||||
if(defaultRarity == null) this.defaultRarity = EnchantmentRarity.COMMON;
|
||||
else this.defaultRarity = defaultRarity;
|
||||
|
||||
this.conflicts = new HashSet<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the default rarity of this enchant.
|
||||
* @return The default rarity of this enchant.
|
||||
*/
|
||||
@NotNull
|
||||
public final EnchantmentRarity defaultRarity(){
|
||||
return defaultRarity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the enchantment key.
|
||||
* @return The enchantment key.
|
||||
*/
|
||||
@NotNull
|
||||
public final NamespacedKey getKey(){
|
||||
return key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the enchantment name.
|
||||
* @return The enchantment name.
|
||||
*/
|
||||
@NotNull
|
||||
public final String getName(){
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the default maximum level of this enchantment.
|
||||
* @return The default maximum level of this enchantment.
|
||||
*/
|
||||
public final int defaultMaxLevel(){return defaultMaxLevel;}
|
||||
|
||||
/**
|
||||
* Check if the enchantment have specialised group operation.
|
||||
* @return If the enchantment is optimised for group operation.
|
||||
*/
|
||||
protected boolean isOptimised(){
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the player is allowed to use this enchantment.
|
||||
* @param player The player to test.
|
||||
* @return If the player is allowed to use this enchantment.
|
||||
*/
|
||||
public boolean isAllowed(@NotNull HumanEntity player){
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get current level of the enchantment.
|
||||
* @param item Item to search the level for.
|
||||
*/
|
||||
public int getLevel(@NotNull ItemStack item){
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
if(meta == null) return 0;
|
||||
return getLevel(item, meta);
|
||||
}
|
||||
|
||||
public void addConflict(@NotNull EnchantConflictGroup conflict){
|
||||
this.conflicts.add(conflict);
|
||||
}
|
||||
public void removeConflict(@NotNull EnchantConflictGroup conflict){
|
||||
this.conflicts.remove(conflict);
|
||||
}
|
||||
|
||||
public void clearConflict(){
|
||||
this.conflicts.clear();
|
||||
}
|
||||
|
||||
public @NotNull Set<EnchantConflictGroup> getConflicts() {
|
||||
return conflicts;
|
||||
}
|
||||
|
||||
public @NotNull ConflictType testConflict() {
|
||||
return ConflictType.NO_CONFLICT;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get current level of the enchantment.
|
||||
* @param item Item to search the level for.
|
||||
* @param meta Meta of the provided item. It will not be changed and not be set on the item.
|
||||
* @return Current leve of this enchantment on item. or 0 if absent.
|
||||
*/
|
||||
public abstract int getLevel(@NotNull ItemStack item, @NotNull ItemMeta meta);
|
||||
|
||||
/**
|
||||
* Check if this enchantment is present on the provided level.
|
||||
* @param item The item to set the enchantment level.
|
||||
* @return If the enchantment have been found.
|
||||
*/
|
||||
public boolean isEnchantmentPresent(@NotNull ItemStack item){
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
if(meta == null) return false;
|
||||
return isEnchantmentPresent(item, meta);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if this enchantment is present on the provided level.
|
||||
* @param item The item to set the enchantment level.
|
||||
* @param meta Meta of the provided item. It will not be changed and not be set on the item.
|
||||
* @return If the enchantment have been found.
|
||||
*/
|
||||
public abstract boolean isEnchantmentPresent(@NotNull ItemStack item, @NotNull ItemMeta meta);
|
||||
|
||||
/**
|
||||
* Force add an enchantment at the provided level.
|
||||
* @param item The item to set the enchantment level.
|
||||
* @param level The level to set the enchantment to.
|
||||
*/
|
||||
public abstract void addEnchantmentUnsafe(@NotNull ItemStack item, int level);
|
||||
|
||||
/**
|
||||
* Remove this enchantment from the provided ItemStack.
|
||||
* @param item The item to remove the enchantment.
|
||||
*/
|
||||
public abstract void removeFrom(@NotNull ItemStack item);
|
||||
|
||||
// Static functions
|
||||
/**
|
||||
* Clear every enchantment from this item.
|
||||
* @param item Item to be cleared from enchantments.
|
||||
*/
|
||||
public static void clearEnchants(@NotNull ItemStack item){
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
if(meta == null) return;
|
||||
|
||||
// Clean Vanilla enchants
|
||||
if (ItemUtil.INSTANCE.isEnchantedBook(item)) {
|
||||
EnchantmentStorageMeta bookMeta = (EnchantmentStorageMeta) meta;
|
||||
bookMeta.getStoredEnchants().forEach(
|
||||
(enchantment, leve) -> bookMeta.removeStoredEnchant(enchantment)
|
||||
);
|
||||
} else {
|
||||
item.getEnchantments().forEach(
|
||||
(enchantment, leve) -> item.removeEnchantment(enchantment)
|
||||
);
|
||||
}
|
||||
|
||||
// Clean Enchant Squared enchants
|
||||
EnchantmentSquaredDependency enchantmentSquared = DependencyManager.INSTANCE.getEnchantmentSquaredCompatibility();
|
||||
if(enchantmentSquared != null){
|
||||
enchantmentSquared.clearEnchantments(item);
|
||||
}
|
||||
|
||||
// Clean unoptimised enchants
|
||||
for (WrappedEnchantment enchant : unoptimisedValues()) {
|
||||
if(enchant.isEnchantmentPresent(item)){
|
||||
enchant.removeFrom(item);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get enchantments of an item.
|
||||
* @param item Item to get enchantment from.
|
||||
* @return A map of the set enchantments and there's respective levels.
|
||||
*/
|
||||
public static Map<WrappedEnchantment, Integer> getEnchants(@NotNull ItemStack item){
|
||||
Map<WrappedEnchantment, Integer> enchantments = new HashMap<>();
|
||||
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
if(meta == null) return enchantments;
|
||||
|
||||
// Vanilla optimised get
|
||||
if (ItemUtil.INSTANCE.isEnchantedBook(item)) {
|
||||
((EnchantmentStorageMeta)meta).getStoredEnchants().forEach(
|
||||
(enchantment, level) -> enchantments.put(getByKey(enchantment.getKey()), level)
|
||||
);
|
||||
} else {
|
||||
item.getEnchantments().forEach(
|
||||
(enchantment, level) -> enchantments.put(getByKey(enchantment.getKey()), level)
|
||||
);
|
||||
}
|
||||
|
||||
// Enchants Squared get
|
||||
EnchantmentSquaredDependency enchantmentSquared = DependencyManager.INSTANCE.getEnchantmentSquaredCompatibility();
|
||||
if(enchantmentSquared != null){
|
||||
enchantmentSquared.getEnchantmentsSquared(item, enchantments);
|
||||
}
|
||||
|
||||
// Unoptimised enchantment get
|
||||
findEnchantsFromSelectedList(item, meta, enchantments, unoptimisedValues());
|
||||
|
||||
return enchantments;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Find enchantments of an item. only test the enchantment from the list.
|
||||
* @param item Item to get enchantment from.
|
||||
* @param meta Meta of the provided item.
|
||||
* @param enchantments Map of enchantment to complete.
|
||||
* @param enchantmentToTest Enchantment to test
|
||||
*/
|
||||
private static void findEnchantsFromSelectedList(
|
||||
@NotNull ItemStack item,
|
||||
@NotNull ItemMeta meta,
|
||||
@NotNull Map<WrappedEnchantment, Integer> enchantments,
|
||||
@NotNull Collection<WrappedEnchantment> enchantmentToTest){
|
||||
|
||||
for (WrappedEnchantment enchantment : enchantmentToTest) {
|
||||
if(enchantment.isEnchantmentPresent(item, meta)){
|
||||
enchantments.put(enchantment, enchantment.getLevel(item, meta));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Register enchantment functions
|
||||
private static final HashMap<NamespacedKey, WrappedEnchantment> BY_KEY = new HashMap<>();
|
||||
private static final HashMap<String, WrappedEnchantment> BY_NAME = new HashMap<>();
|
||||
private static final List<WrappedEnchantment> UNOPTIMISED_ENCHANTMENT = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* This should only be called on main of custom anvil.
|
||||
* If called more than one time, chance of thing being broken will be high.
|
||||
*/
|
||||
public static void registerEnchantments(){
|
||||
for (Enchantment enchantment : Enchantment.values()) {
|
||||
register(new VanillaEnchantment(enchantment));
|
||||
}
|
||||
|
||||
if(DependencyManager.INSTANCE.getEnchantmentSquaredCompatibility() != null){
|
||||
DependencyManager.INSTANCE.getEnchantmentSquaredCompatibility().registerEnchantments();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Can be used to register new enchantment.
|
||||
* <p>
|
||||
* No guarantee that the enchantment will be present on the config gui if registered late.
|
||||
* (By late I mean after custom anvil startup.)
|
||||
* @param enchantment The enchantment to be registered.
|
||||
*/
|
||||
public static void register(@NotNull WrappedEnchantment enchantment){
|
||||
if(BY_KEY.containsKey(enchantment.getKey())){
|
||||
CustomAnvil.instance.getLogger().log(Level.WARNING,
|
||||
"Duplicate registered enchantment. This should NOT happen.",
|
||||
new IllegalStateException(enchantment.getKey()+" enchantment was already registered"));
|
||||
return;
|
||||
}
|
||||
if(BY_NAME.containsKey(enchantment.getName())){
|
||||
CustomAnvil.instance.getLogger().log(Level.WARNING,
|
||||
"Duplicate registered enchantment name. There will have issue. " +
|
||||
"\nI hope this do not happen to you on a production server. If it do, there is probably a plugin trying to register an enchantment with the same name than another one",
|
||||
new IllegalStateException(enchantment.getKey()+" enchantment name was already registered"));
|
||||
}
|
||||
|
||||
BY_KEY.put(enchantment.getKey(), enchantment);
|
||||
BY_NAME.put(enchantment.getName(), enchantment);
|
||||
|
||||
if(!enchantment.isOptimised()){
|
||||
UNOPTIMISED_ENCHANTMENT.add(enchantment);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Can be used to unregister new enchantment.
|
||||
* Please be cautious with this function.
|
||||
* It should probably rarely be used.
|
||||
* <p>
|
||||
* No guarantee that the enchantment will absent if the config guis if unregistered late.
|
||||
* (By late I mean after custom anvil startup.)
|
||||
* @param enchantment The enchantment to be unregistered.
|
||||
*/
|
||||
public static void unregister(@NotNull WrappedEnchantment enchantment){
|
||||
BY_KEY.remove(enchantment.getKey());
|
||||
BY_NAME.remove(enchantment.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the enchantment by the provided key.
|
||||
* @param key Key to fetch.
|
||||
* @return Registered enchantment. null if absent.
|
||||
*/
|
||||
public static @Nullable WrappedEnchantment getByKey(@NotNull NamespacedKey key){
|
||||
return BY_KEY.get(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the enchantment by the provided name.
|
||||
* @param name Name to fetch.
|
||||
* @return Registered enchantment. null if absent.
|
||||
*/
|
||||
public static @Nullable WrappedEnchantment getByName(@NotNull String name){
|
||||
return BY_NAME.get(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an array of all the registered enchantments.
|
||||
* @return Array of enchantment.
|
||||
*/
|
||||
@NotNull
|
||||
public static WrappedEnchantment[] values() {
|
||||
return BY_KEY.values().toArray(new WrappedEnchantment[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a list of all the unoptimised enchantments.
|
||||
* @return List of enchantment.
|
||||
*/
|
||||
@NotNull
|
||||
private static List<WrappedEnchantment> unoptimisedValues() {
|
||||
return UNOPTIMISED_ENCHANTMENT;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -8,16 +8,16 @@ 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.enchant.CAEnchantmentBase;
|
||||
import xyz.alexcrea.cuanvil.enchant.EnchantmentRarity;
|
||||
import xyz.alexcrea.cuanvil.enchant.WrappedEnchantment;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
public class EnchantSquaredEnchantment extends WrappedEnchantment {
|
||||
public class CAEnchantSquaredEnchantment extends CAEnchantmentBase {
|
||||
|
||||
public final @NotNull CustomEnchant enchant;
|
||||
public EnchantSquaredEnchantment(@NotNull CustomEnchant enchant) {
|
||||
public CAEnchantSquaredEnchantment(@NotNull CustomEnchant enchant) {
|
||||
super(Objects.requireNonNull(
|
||||
Objects.requireNonNull(DependencyManager.INSTANCE.getEnchantmentSquaredCompatibility()).getKeyFromEnchant(enchant)),
|
||||
EnchantmentRarity.COMMON,
|
||||
|
|
@ -27,7 +27,7 @@ public class EnchantSquaredEnchantment extends WrappedEnchantment {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected boolean isOptimised() {
|
||||
public boolean isOptimised() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -6,17 +6,17 @@ 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.enchant.CAEnchantmentBase;
|
||||
import xyz.alexcrea.cuanvil.enchant.EnchantmentProperties;
|
||||
import xyz.alexcrea.cuanvil.enchant.EnchantmentRarity;
|
||||
import xyz.alexcrea.cuanvil.enchant.WrappedEnchantment;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public class VanillaEnchantment extends WrappedEnchantment {
|
||||
public class CAVanillaEnchantment extends CAEnchantmentBase {
|
||||
|
||||
private final @NotNull Enchantment enchantment;
|
||||
|
||||
public VanillaEnchantment(@NotNull Enchantment enchantment){
|
||||
public CAVanillaEnchantment(@NotNull Enchantment enchantment){
|
||||
super(enchantment.getKey(),
|
||||
getRarity(enchantment),
|
||||
enchantment.getMaxLevel());
|
||||
|
|
@ -25,7 +25,7 @@ public class VanillaEnchantment extends WrappedEnchantment {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected boolean isOptimised() {
|
||||
public boolean isOptimised() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -1,15 +1,15 @@
|
|||
package xyz.alexcrea.cuanvil.gui.config;
|
||||
|
||||
import xyz.alexcrea.cuanvil.enchant.WrappedEnchantment;
|
||||
import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
public interface SelectEnchantmentContainer {
|
||||
|
||||
Set<WrappedEnchantment> getSelectedEnchantments();
|
||||
Set<CAEnchantment> getSelectedEnchantments();
|
||||
|
||||
boolean setSelectedEnchantments(Set<WrappedEnchantment> enchantments);
|
||||
boolean setSelectedEnchantments(Set<CAEnchantment> enchantments);
|
||||
|
||||
Set<WrappedEnchantment> illegalEnchantments();
|
||||
Set<CAEnchantment> illegalEnchantments();
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package xyz.alexcrea.cuanvil.gui.config.global;
|
|||
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
|
||||
import com.github.stefvanschie.inventoryframework.pane.util.Pattern;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import xyz.alexcrea.cuanvil.enchant.WrappedEnchantment;
|
||||
import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
|
||||
import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui;
|
||||
import xyz.alexcrea.cuanvil.gui.config.list.SettingGuiListConfigGui;
|
||||
import xyz.alexcrea.cuanvil.gui.config.settings.SettingGui;
|
||||
|
|
@ -19,7 +19,7 @@ import java.util.function.Consumer;
|
|||
*
|
||||
* @param <T> Type of the factory of the type of setting the gui should edit.
|
||||
*/
|
||||
public abstract class AbstractEnchantConfigGui<T extends SettingGui.SettingGuiFactory> extends SettingGuiListConfigGui<WrappedEnchantment, T> implements ValueUpdatableGui {
|
||||
public abstract class AbstractEnchantConfigGui<T extends SettingGui.SettingGuiFactory> extends SettingGuiListConfigGui<CAEnchantment, T> implements ValueUpdatableGui {
|
||||
|
||||
/**
|
||||
* Constructor for a gui displaying available enchantment to edit a enchantment setting.
|
||||
|
|
@ -36,7 +36,7 @@ public abstract class AbstractEnchantConfigGui<T extends SettingGui.SettingGuiFa
|
|||
}
|
||||
|
||||
@Override
|
||||
protected Collection<WrappedEnchantment> getEveryDisplayableInstanceOfGeneric() {
|
||||
protected Collection<CAEnchantment> getEveryDisplayableInstanceOfGeneric() {
|
||||
return GuiSharedConstant.SORTED_ENCHANTMENT_LIST;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,14 +5,17 @@ import org.bukkit.Material;
|
|||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
||||
import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
|
||||
import xyz.alexcrea.cuanvil.enchant.EnchantmentProperties;
|
||||
import xyz.alexcrea.cuanvil.enchant.EnchantmentRarity;
|
||||
import xyz.alexcrea.cuanvil.enchant.WrappedEnchantment;
|
||||
import xyz.alexcrea.cuanvil.gui.config.settings.EnchantCostSettingsGui;
|
||||
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems;
|
||||
import xyz.alexcrea.cuanvil.util.CasedStringUtil;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
* Global Config gui for enchantment cost settings.
|
||||
|
|
@ -36,7 +39,7 @@ public class EnchantCostConfigGui extends AbstractEnchantConfigGui<EnchantCostSe
|
|||
}
|
||||
|
||||
@Override
|
||||
public EnchantCostSettingsGui.EnchantCostSettingFactory createFactory(WrappedEnchantment enchant) {
|
||||
public EnchantCostSettingsGui.EnchantCostSettingFactory createFactory(CAEnchantment enchant) {
|
||||
String key = enchant.getKey().getKey().toLowerCase(Locale.ENGLISH);
|
||||
String prettyKey = CasedStringUtil.snakeToUpperSpacedCase(key);
|
||||
|
||||
|
|
@ -59,7 +62,7 @@ public class EnchantCostConfigGui extends AbstractEnchantConfigGui<EnchantCostSe
|
|||
}
|
||||
|
||||
@Override
|
||||
public GuiItem itemFromFactory(WrappedEnchantment enchantment, EnchantCostSettingsGui.EnchantCostSettingFactory factory) {
|
||||
public GuiItem itemFromFactory(CAEnchantment enchantment, EnchantCostSettingsGui.EnchantCostSettingFactory factory) {
|
||||
// Get item properties
|
||||
int itemCost = factory.getConfiguredValue();
|
||||
int bookCost = factory.getConfiguredBookValue();
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package xyz.alexcrea.cuanvil.gui.config.global;
|
|||
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
|
||||
import org.bukkit.Material;
|
||||
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
||||
import xyz.alexcrea.cuanvil.enchant.WrappedEnchantment;
|
||||
import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
|
||||
import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui;
|
||||
import xyz.alexcrea.cuanvil.util.CasedStringUtil;
|
||||
|
||||
|
|
@ -32,7 +32,7 @@ public class EnchantLimitConfigGui extends AbstractEnchantConfigGui<IntSettingsG
|
|||
}
|
||||
|
||||
@Override
|
||||
public IntSettingsGui.IntSettingFactory createFactory(WrappedEnchantment enchant) {
|
||||
public IntSettingsGui.IntSettingFactory createFactory(CAEnchantment enchant) {
|
||||
String key = enchant.getKey().getKey().toLowerCase(Locale.ROOT);
|
||||
String prettyKey = CasedStringUtil.snakeToUpperSpacedCase(key);
|
||||
|
||||
|
|
@ -47,7 +47,7 @@ public class EnchantLimitConfigGui extends AbstractEnchantConfigGui<IntSettingsG
|
|||
}
|
||||
|
||||
@Override
|
||||
public GuiItem itemFromFactory(WrappedEnchantment enchantment, IntSettingsGui.IntSettingFactory inventoryFactory) {
|
||||
public GuiItem itemFromFactory(CAEnchantment enchantment, IntSettingsGui.IntSettingFactory inventoryFactory) {
|
||||
return inventoryFactory.getItem(
|
||||
Material.ENCHANTED_BOOK,
|
||||
inventoryFactory.getTitle());
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import org.bukkit.inventory.ItemStack;
|
|||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
||||
import xyz.alexcrea.cuanvil.enchant.WrappedEnchantment;
|
||||
import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
|
||||
import xyz.alexcrea.cuanvil.group.AbstractMaterialGroup;
|
||||
import xyz.alexcrea.cuanvil.group.EnchantConflictGroup;
|
||||
import xyz.alexcrea.cuanvil.group.EnchantConflictManager;
|
||||
|
|
@ -118,7 +118,7 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl
|
|||
EnchantConflictManager manager = ConfigHolder.CONFLICT_HOLDER.getConflictManager();
|
||||
|
||||
// Remove from enchantment
|
||||
for (WrappedEnchantment enchantment : this.enchantConflict.getEnchants()) {
|
||||
for (CAEnchantment enchantment : this.enchantConflict.getEnchants()) {
|
||||
enchantment.removeConflict(this.enchantConflict);
|
||||
}
|
||||
manager.conflictList.remove(this.enchantConflict);
|
||||
|
|
@ -164,12 +164,12 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl
|
|||
// Prepare enchantment lore
|
||||
ArrayList<String> enchantLore = new ArrayList<>();
|
||||
enchantLore.add("\u00A77Allow you to select a list of \u00A75Enchantments \u00A77that this conflict should include");
|
||||
Set<WrappedEnchantment> enchants = getSelectedEnchantments();
|
||||
Set<CAEnchantment> enchants = getSelectedEnchantments();
|
||||
if (enchants.isEmpty()) {
|
||||
enchantLore.add("\u00A77There is no included enchantment for this conflict.");
|
||||
} else {
|
||||
enchantLore.add("\u00A77List of included enchantment for this conflict:");
|
||||
Iterator<WrappedEnchantment> enchantIterator = enchants.iterator();
|
||||
Iterator<CAEnchantment> enchantIterator = enchants.iterator();
|
||||
|
||||
boolean greaterThanMax = enchants.size() > 5;
|
||||
int maxindex = (greaterThanMax ? 4 : enchants.size());
|
||||
|
|
@ -243,12 +243,12 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl
|
|||
// Select enchantment container methods
|
||||
|
||||
@Override
|
||||
public Set<WrappedEnchantment> getSelectedEnchantments() {
|
||||
public Set<CAEnchantment> getSelectedEnchantments() {
|
||||
return this.enchantConflict.getEnchants();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setSelectedEnchantments(Set<WrappedEnchantment> enchantments) {
|
||||
public boolean setSelectedEnchantments(Set<CAEnchantment> enchantments) {
|
||||
if (!this.shouldWork) {
|
||||
CustomAnvil.instance.getLogger().info("Trying to save " + enchantConflict + " enchants but sub config is destroyed");
|
||||
return false;
|
||||
|
|
@ -260,7 +260,7 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl
|
|||
// Save on file configuration
|
||||
String[] enchantKeys = new String[enchantments.size()];
|
||||
int index = 0;
|
||||
for (WrappedEnchantment enchantment : enchantments) {
|
||||
for (CAEnchantment enchantment : enchantments) {
|
||||
enchantKeys[index++] = enchantment.getKey().getKey();
|
||||
}
|
||||
ConfigHolder.CONFLICT_HOLDER.getConfig().set(enchantConflict + ".enchantments", enchantKeys);
|
||||
|
|
@ -280,7 +280,7 @@ public class EnchantConflictSubSettingGui extends MappedToListSubSettingGui impl
|
|||
}
|
||||
|
||||
@Override
|
||||
public Set<WrappedEnchantment> illegalEnchantments() {
|
||||
public Set<CAEnchantment> illegalEnchantments() {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,8 @@ import org.bukkit.inventory.ItemStack;
|
|||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
||||
import xyz.alexcrea.cuanvil.enchant.WrappedEnchantment;
|
||||
import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
|
||||
import xyz.alexcrea.cuanvil.enchant.CAEnchantmentRegistry;
|
||||
import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui;
|
||||
import xyz.alexcrea.cuanvil.gui.config.SelectEnchantmentContainer;
|
||||
import xyz.alexcrea.cuanvil.gui.config.list.SettingGuiListConfigGui;
|
||||
|
|
@ -22,14 +23,13 @@ import xyz.alexcrea.cuanvil.util.CasedStringUtil;
|
|||
|
||||
import java.util.*;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class EnchantSelectSettingGui extends SettingGuiListConfigGui<WrappedEnchantment, EnchantSelectSettingGui.DummyFactory> implements SettingGui {
|
||||
public class EnchantSelectSettingGui extends SettingGuiListConfigGui<CAEnchantment, EnchantSelectSettingGui.DummyFactory> implements SettingGui {
|
||||
|
||||
private final SelectEnchantmentContainer enchantContainer;
|
||||
|
||||
private final Set<WrappedEnchantment> selectedEnchant;
|
||||
private final Set<CAEnchantment> selectedEnchant;
|
||||
private final GuiItem saveItem;
|
||||
|
||||
private boolean displayUnselected;
|
||||
|
|
@ -62,19 +62,19 @@ public class EnchantSelectSettingGui extends SettingGuiListConfigGui<WrappedEnch
|
|||
}
|
||||
|
||||
@Override
|
||||
protected Collection<WrappedEnchantment> getEveryDisplayableInstanceOfGeneric() {
|
||||
Stream<WrappedEnchantment> toDisplayStream;
|
||||
protected Collection<CAEnchantment> getEveryDisplayableInstanceOfGeneric() {
|
||||
Stream<CAEnchantment> toDisplayStream;
|
||||
if(this.displayUnselected){
|
||||
toDisplayStream = Arrays.stream(WrappedEnchantment.values());
|
||||
toDisplayStream = CAEnchantmentRegistry.getInstance().values().stream();
|
||||
}else{
|
||||
toDisplayStream = this.selectedEnchant.stream();
|
||||
}
|
||||
Set<WrappedEnchantment> illegalEnchantments = this.enchantContainer.illegalEnchantments();
|
||||
Set<CAEnchantment> illegalEnchantments = this.enchantContainer.illegalEnchantments();
|
||||
|
||||
|
||||
return toDisplayStream
|
||||
.filter(enchantment -> !illegalEnchantments.contains(enchantment))
|
||||
.collect(Collectors.toList());
|
||||
.toList();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -84,7 +84,7 @@ public class EnchantSelectSettingGui extends SettingGuiListConfigGui<WrappedEnch
|
|||
}
|
||||
|
||||
@Override
|
||||
protected GuiItem itemFromFactory(WrappedEnchantment enchantment, DummyFactory factory) {
|
||||
protected GuiItem itemFromFactory(CAEnchantment enchantment, DummyFactory factory) {
|
||||
boolean isIn = this.selectedEnchant.contains(enchantment);
|
||||
|
||||
Material usedMaterial;
|
||||
|
|
@ -151,7 +151,7 @@ public class EnchantSelectSettingGui extends SettingGuiListConfigGui<WrappedEnch
|
|||
item.setItemMeta(meta);
|
||||
}
|
||||
|
||||
private Consumer<InventoryClickEvent> getEnchantItemConsumer(WrappedEnchantment enchant, GuiItem guiItem) {
|
||||
private Consumer<InventoryClickEvent> getEnchantItemConsumer(CAEnchantment enchant, GuiItem guiItem) {
|
||||
return event -> {
|
||||
event.setCancelled(true);
|
||||
|
||||
|
|
@ -180,7 +180,7 @@ public class EnchantSelectSettingGui extends SettingGuiListConfigGui<WrappedEnch
|
|||
|
||||
@Override
|
||||
public boolean hadChange() {
|
||||
Set<WrappedEnchantment> baseGroup = this.enchantContainer.getSelectedEnchantments();
|
||||
Set<CAEnchantment> baseGroup = this.enchantContainer.getSelectedEnchantments();
|
||||
return baseGroup.size() != this.selectedEnchant.size() ||
|
||||
!baseGroup.containsAll(this.selectedEnchant);
|
||||
}
|
||||
|
|
@ -209,7 +209,7 @@ public class EnchantSelectSettingGui extends SettingGuiListConfigGui<WrappedEnch
|
|||
return null;
|
||||
}
|
||||
@Override
|
||||
protected DummyFactory createFactory(WrappedEnchantment generic) {
|
||||
protected DummyFactory createFactory(CAEnchantment generic) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,20 +7,18 @@ import com.github.stefvanschie.inventoryframework.pane.util.Pattern;
|
|||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import xyz.alexcrea.cuanvil.enchant.WrappedEnchantment;
|
||||
import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
|
||||
import xyz.alexcrea.cuanvil.enchant.CAEnchantmentRegistry;
|
||||
import xyz.alexcrea.cuanvil.gui.config.MainConfigGui;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
public class GuiSharedConstant {
|
||||
|
||||
public static final List<WrappedEnchantment> SORTED_ENCHANTMENT_LIST;
|
||||
public static final List<CAEnchantment> SORTED_ENCHANTMENT_LIST;
|
||||
|
||||
static {
|
||||
SORTED_ENCHANTMENT_LIST = Arrays.asList(WrappedEnchantment.values());
|
||||
SORTED_ENCHANTMENT_LIST = new ArrayList<>(CAEnchantmentRegistry.getInstance().values());
|
||||
SORTED_ENCHANTMENT_LIST.sort(Comparator.comparing(ench -> ench.getKey().getKey()));
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue