If a problem occurs during the processing of the file
*/ - private void processFile(final BufferedReader br, final BiConsumerThe previously equipped armor piece, could be a piece of armor, {@link Material#AIR}, or null.
*/ public ItemStack getOldArmorPiece() { return oldArmorPiece; } + public void setOldArmorPiece(final ItemStack oldArmorPiece) { this.oldArmorPiece = oldArmorPiece; } /** - * Returns the newly equipped armor, could be a piece of armor, {@link Material#Air}, or null. + * Returns the newly equipped armor, could be a piece of armor, {@link Material#AIR}, or null. */ public ItemStack getNewArmorPiece() { return newArmorPiece; } + public void setNewArmorPiece(final ItemStack newArmorPiece) { this.newArmorPiece = newArmorPiece; } /** - * Gets the method used to either equip or unequip an armor piece. + * Gets the method used to either equip or un-equip an armor piece. */ - public EquipMethod getMethod() { + public ArmorChangeMethod getMethod() { return equipType; } - public enum EquipMethod { - /** - * When you shift click an armor piece to equip or unequip - */ - SHIFT_CLICK, - /** - * When you drag and drop the item to equip or unequip - */ - DRAG, - /** - * When you manually equip or unequip the item. Use to be DRAG - */ - PICK_DROP, - /** - * When you right click an armor piece in the hotbar without the inventory open to equip. - */ - HOTBAR, - /** - * When you press the hotbar slot number while hovering over the armor slot to equip or unequip - */ - HOTBAR_SWAP, - /** - * When in range of a dispenser that shoots an armor piece to equip.The item to update.
+ * @param metadataThe original metadata to store.
+ */ + public void updateOriginalMetadata(@NotNull ItemStack itemStack, @NotNull OriginalMetadata metadata) { + final ItemMeta meta = getOrCreateItemMeta(itemStack); + meta.getPersistentDataContainer().set(ORIGINAL_METADATA_KEY, new PersistentMetadata(), metadata); + itemStack.setItemMeta(meta); + } + + /** + * Gets the original metadata for the given item. + * + * @param itemStackThe item to get metadata for.
+ * @returnThe stored metadata, or null if none has been stored.
+ */ + public @Nullable OriginalMetadata getOriginalMetadata(@NotNull ItemStack itemStack) { + final @Nullable ItemMeta meta = itemStack.getItemMeta(); + return Objects.requireNonNull(meta, "Meta cannot be null for armored elytras!" + ).getPersistentDataContainer().get(ORIGINAL_METADATA_KEY, new PersistentMetadata()); + } + /** * Gets the real durability value as stored in the NBT of an armored elytra. * - * @param itemStack The item for which to retrieve the real durability. - * @param providedTier The armor tier of the armored elytra. If this is null, it will be retrieved from NBT. - * @return The real durability of the itemstack if the itemstack has the AE durability attribute, or -1 otherwise. + * @param itemStackThe item for which to retrieve the real durability.
+ * @param providedTierThe armor tier of the armored elytra. If this is null, it will be retrieved from NBT.
+ * @returnThe real durability of the item-stack if the item-stack has the AE durability attribute, or -1 otherwise.
*/ public int getRealDurability(ItemStack itemStack, @Nullable ArmorTier providedTier) { final @Nullable ItemMeta meta = itemStack.getItemMeta(); @@ -49,8 +77,8 @@ public class NBTEditor { } final @Nullable Integer realDurability = - Objects.requireNonNull(meta, "Meta cannot be null for armored elytras!") - .getPersistentDataContainer().get(DURABILITY_KEY, PersistentDataType.INTEGER); + Objects.requireNonNull(meta, "Meta cannot be null for armored elytras!" + ).getPersistentDataContainer().get(DURABILITY_KEY, PersistentDataType.INTEGER); return realDurability == null ? -1 : realDurability; } @@ -58,7 +86,7 @@ public class NBTEditor { /** * Updates the durability values of an item. * - * @param itemStack The itemstack to which the durability values will be applied. + * @param itemStack The item-stack to which the durability values will be applied. * @param realDurability The real durability to store in NBT. * @param displayDurability The durability value to display on the item. This is the durability value the client can * actually see.This only works if the item's meta is an instance of {@link Damageable}. @@ -74,6 +102,10 @@ public class NBTEditor { itemStack.setItemMeta(meta); } + //TODO: To be able to properly split the elytra from the armor, information of which metadata belongs to what needs + // to be stored. Notably, which item which enchantment belongs to. Which item the name and lore was taken from. + // Note that enchantments could be taken from both. + /** * Adds a given {@link ArmorTier} to an item. The item will be cloned. Note that setting the armor tier to {@link * ArmorTier#NONE} has no effect (besides making a copy of the item). @@ -127,18 +159,25 @@ public class NBTEditor { return returnedItem; } - void overwriteNBTValue(ItemMeta meta, Attribute attribute, double value, String modifierName) { + /** + * Overwrites the attribute modifier for the given attribute, on the chest slot + * + * @param metaThe metadata to edit
+ * @param attributeThe attribute to modify
+ * @param valueThe new value of the attribute
+ * @param modifierNameThe name of the attribute modifier
+ */ + private void overwriteNBTValue(ItemMeta meta, Attribute attribute, double value, String modifierName) { if (meta.hasAttributeModifiers()) { meta.removeAttributeModifier(attribute); } final AttributeModifier attributeModifier = new AttributeModifier(UUID.randomUUID(), modifierName, value, - AttributeModifier.Operation.ADD_NUMBER, - EquipmentSlot.CHEST); + AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.CHEST); meta.addAttributeModifier(attribute, attributeModifier); } - ArmorTier getArmorTier(@Nullable ItemMeta meta) { + private ArmorTier getArmorTier(@Nullable ItemMeta meta) { if (meta == null || !meta.hasAttributeModifiers()) { return ArmorTier.NONE; } @@ -215,13 +254,19 @@ public class NBTEditor { return rgb == null ? null : Color.fromRGB(rgb); } - static ItemMeta getOrCreateItemMeta(ItemStack item) { - final ItemMeta meta = item.hasItemMeta() ? - item.getItemMeta() : + /** + * Gets existing metadata, or creates new metadata for the given item + * + * @param itemThe item to get item meta for
+ * @returnThe existing or new item meta
+ */ + private static ItemMeta getOrCreateItemMeta(ItemStack item) { + final ItemMeta meta = item.hasItemMeta() ? item.getItemMeta() : Bukkit.getItemFactory().getItemMeta(item.getType()); if (meta == null) { throw new IllegalArgumentException("Tried to add armor to invalid item: " + item); } return meta; } + } diff --git a/src/main/java/net/knarcraft/armoredelytra/metadata/OriginalMetadata.java b/src/main/java/net/knarcraft/armoredelytra/metadata/OriginalMetadata.java new file mode 100644 index 0000000..a458550 --- /dev/null +++ b/src/main/java/net/knarcraft/armoredelytra/metadata/OriginalMetadata.java @@ -0,0 +1,166 @@ +package net.knarcraft.armoredelytra.metadata; + +import org.bukkit.enchantments.Enchantment; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.io.Serializable; +import java.util.HashSet; +import java.util.Set; + +/** + * An object for storing the original metadata for an armored elytra. + * + *The intended usage of this class is to keep track of the original metadata of the armor and the elytra for each + * armored elytra, to prevent problems when splitting them. If an armor used to upgrade the armored elytra has a custom + * name or lore, and none is stored already, the name and lore should be updated. Additionally, any enchantments found + * on armor used to upgrade the armored elytra should be combined with the original armor enchantments.
+ */ +public class OriginalMetadata implements Serializable { + + private SetThe stored armor enchantments.
+ */ + public @NotNull SetThe stored elytra enchantments.
+ */ + public @NotNull SetThe original elytra lore.
+ */ + public @Nullable String getElytraLore() { + return this.elytraLore; + } + + /** + * Gets the original name of this elytra. + * + * @returnThe original elytra name.
+ */ + public @Nullable String getElytraName() { + return this.elytraName; + } + + /** + * Gets the original lore of this armor. + * + * @returnThe original armor lore.
+ */ + public @Nullable String getArmorLore() { + return this.armorLore; + } + + /** + * Gets the original name of this armor. + * + * @returnThe original armor name.
+ */ + public @Nullable String getArmorName() { + return this.armorName; + } + + /** + * Sets the stored lore of this armored elytra's armor. + * + * @param armorLoreThe armor lore to store.
+ * @returnThis original metadata.
+ */ + public OriginalMetadata setArmorLore(@NotNull String armorLore) { + this.armorLore = armorLore; + return this; + } + + /** + * Sets the stored elytra lore of this armored elytra's elytra. + * + * @param elytraLoreThe elytra lore to store.
+ * @returnThis original metadata.
+ */ + public OriginalMetadata setElytraLore(@NotNull String elytraLore) { + this.elytraLore = elytraLore; + return this; + } + + /** + * Sets the stored elytra name of this armored elytra's elytra. + * + * @param elytraNameThe elytra name to store.
+ * @returnThis original metadata.
+ */ + public OriginalMetadata setElytraName(@NotNull String elytraName) { + this.elytraName = elytraName; + return this; + } + + /** + * Sets the stored armor name of this armored elytra's armor. + * + * @param armorNameThe armor name to store.
+ * @returnThis original metadata.
+ */ + public OriginalMetadata setArmorName(@NotNull String armorName) { + this.armorName = armorName; + return this; + } + + /** + * Sets the stored enchantments for this armored elytra's armor. + * + * @param armorEnchantmentsThe armor enchantments to store.
+ * @returnThis original metadata.
+ */ + public OriginalMetadata setArmorEnchantments(@NotNull SetThe elytra enchantments to store.
+ * @returnThis original metadata.
+ */ + public OriginalMetadata setElytraEnchantments(@NotNull SetThe purpose of this method is to combine enchantments for the original chestplate, and any chest-plates used + * to upgrade the armored elytra.
+ * + * @param enchantmentsThe enchantments to add
+ * @returnThis original metadata.
+ */ + public OriginalMetadata addArmorEnchantments(@NotNull SetThe ID of the plugin as identified in the SpigotMC resource link. For example, + * " + * https://www.spigotmc.org/resources/veinminer/12038/" would expect "12038" as a + * value. The value must be greater than 0
* @param versionScheme a custom version scheme parser. Cannot be null * @return the UpdateChecker instance */ - public static UpdateChecker init(final ArmoredElytra plugin, final int pluginID, final IVersionScheme versionScheme) { + public static UpdateChecker init(final ArmoredElytra plugin, final int pluginID, final VersionScheme versionScheme) { Preconditions.checkArgument(pluginID > 0, "Plugin ID must be greater than 0"); return (instance == null) ? instance = new UpdateChecker(plugin, pluginID, versionScheme) : instance; @@ -188,13 +156,14 @@ public final class UpdateChecker { * recommended after initialization). * * @param plugin the plugin for which to check updates. Cannot be null - * @param pluginID the ID of the plugin as identified in the SpigotMC resource link. For example, - * "https://www.spigotmc.org/resources/veinminer.12038/" would expect "12038" as a value. The - * value must be greater than 0 + * @param pluginIDThe ID of the plugin as identified in the SpigotMC resource link. For example, + * " + * https://www.spigotmc.org/resources/veinminer/12038/" would expect "12038" as a value. The + * value must be greater than 0
* @return the UpdateChecker instance */ public static UpdateChecker init(final ArmoredElytra plugin, final int pluginID) { - return init(plugin, pluginID, VERSION_SCHEME_DECIMAL); + return init(plugin, pluginID, new VersionScheme()); } /** @@ -219,137 +188,4 @@ public final class UpdateChecker { return instance != null; } - /** - * A functional interface to compare two version Strings with similar version schemes. - */ - @FunctionalInterface - public interface IVersionScheme { - - /** - * Compare two versions and return the higher of the two. If null is returned, it is assumed that at least one - * of the two versions are unsupported by this version scheme parser. - * - * @param first the first version to check - * @param second the second version to check - * @return the greater of the two versions. null if unsupported version schemes - */ - String compareVersions(String first, String second); - - } - - /** - * A constant reason for the result of {@link UpdateResult}. - */ - public enum UpdateReason { - - /** - * A new update is available for download. - *- * This is the only reason that requires an update. - */ - NEW_UPDATE, - - /** - * A successful connection to the SpiGet API could not be established. - */ - COULD_NOT_CONNECT, - - /** - * The JSON retrieved from SpiGet was invalid or malformed. - */ - INVALID_JSON, - - /** - * A 401 error was returned by the SpiGet API. - */ - UNAUTHORIZED_QUERY, - - /** - * The version of the plugin installed on the server is greater than the one uploaded to SpigotMC's resources - * section. - */ - UNRELEASED_VERSION, - - /** - * An unknown error occurred. - */ - UNKNOWN_ERROR, - - /** - * The plugin uses an unsupported version scheme, therefore a proper comparison between versions could not be - * made. - */ - UNSUPPORTED_VERSION_SCHEME, - - /** - * The plugin is up to date with the version released on SpigotMC's resources section. - */ - UP_TO_DATE - - } - - /** - * Represents a result for an update query performed by {@link UpdateChecker#requestUpdateCheck()}. - */ - public final class UpdateResult { - private final UpdateReason reason; - private final String newestVersion; - private final long age; - - { - lastResult = this; - } - - private UpdateResult(final UpdateReason reason, final String newestVersion, final long age) { - this.reason = reason; - this.newestVersion = newestVersion; - this.age = age; - } - - private UpdateResult(final UpdateReason reason) { - Preconditions - .checkArgument(reason != UpdateReason.NEW_UPDATE && reason != UpdateReason.UP_TO_DATE, - "Reasons that might require updates must also provide the latest version String"); - this.reason = reason; - newestVersion = plugin.getDescription().getVersion(); - age = -1; - } - - /** - * Gets the constant reason of this result. - * - * @return the reason - */ - public UpdateReason getReason() { - return reason; - } - - /** - * Checks whether or not this result requires the user to update. - * - * @return true if requires update, false otherwise - */ - public boolean requiresUpdate() { - return reason == UpdateReason.NEW_UPDATE; - } - - /** - * Gets the latest version of the plugin. This may be the currently installed version, it may not be. This - * depends entirely on the result of the update. - * - * @return the newest version of the plugin - */ - public String getNewestVersion() { - return newestVersion; - } - - /** - * Gets the number of seconds since the last update was released. - * - * @return The number of seconds since the last update was released or -1 if unavailable. - */ - public long getAge() { - return age; - } - } } diff --git a/src/main/java/nl/pim16aap2/armoredElytra/util/UpdateManager.java b/src/main/java/net/knarcraft/armoredelytra/update/UpdateManager.java similarity index 96% rename from src/main/java/nl/pim16aap2/armoredElytra/util/UpdateManager.java rename to src/main/java/net/knarcraft/armoredelytra/update/UpdateManager.java index acfb4b9..489ae81 100644 --- a/src/main/java/nl/pim16aap2/armoredElytra/util/UpdateManager.java +++ b/src/main/java/net/knarcraft/armoredelytra/update/UpdateManager.java @@ -1,6 +1,6 @@ -package nl.pim16aap2.armoredElytra.util; +package net.knarcraft.armoredelytra.update; -import nl.pim16aap2.armoredElytra.ArmoredElytra; +import net.knarcraft.armoredelytra.ArmoredElytra; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; @@ -76,4 +76,5 @@ public final class UpdateManager { } } } + } diff --git a/src/main/java/net/knarcraft/armoredelytra/update/UpdateReason.java b/src/main/java/net/knarcraft/armoredelytra/update/UpdateReason.java new file mode 100644 index 0000000..396242e --- /dev/null +++ b/src/main/java/net/knarcraft/armoredelytra/update/UpdateReason.java @@ -0,0 +1,52 @@ +package net.knarcraft.armoredelytra.update; + +/** + * A constant reason for the result of {@link UpdateResult}. + */ +public enum UpdateReason { + + /** + * A new update is available for download. + *
+ * This is the only reason that requires an update. + */ + NEW_UPDATE, + + /** + * A successful connection to the SpiGet API could not be established. + */ + COULD_NOT_CONNECT, + + /** + * The JSON retrieved from SpiGet was invalid or malformed. + */ + INVALID_JSON, + + /** + * A 401 error was returned by the SpiGet API. + */ + UNAUTHORIZED_QUERY, + + /** + * The version of the plugin installed on the server is greater than the one uploaded to SpigotMC's resources + * section. + */ + UNRELEASED_VERSION, + + /** + * An unknown error occurred. + */ + UNKNOWN_ERROR, + + /** + * The plugin uses an unsupported version scheme, therefore a proper comparison between versions could not be + * made. + */ + UNSUPPORTED_VERSION_SCHEME, + + /** + * The plugin is up-to-date with the version released on SpigotMC's resources section. + */ + UP_TO_DATE + +} diff --git a/src/main/java/net/knarcraft/armoredelytra/update/UpdateResult.java b/src/main/java/net/knarcraft/armoredelytra/update/UpdateResult.java new file mode 100644 index 0000000..09f916c --- /dev/null +++ b/src/main/java/net/knarcraft/armoredelytra/update/UpdateResult.java @@ -0,0 +1,67 @@ +package net.knarcraft.armoredelytra.update; + +import com.google.common.base.Preconditions; + +/** + * Represents a result for an update query performed by {@link UpdateChecker#requestUpdateCheck()}. + */ +public final class UpdateResult { + + private final UpdateReason reason; + private final String newestVersion; + private final long age; + + UpdateResult(UpdateChecker updateChecker, final UpdateReason reason, final String newestVersion, final long age) { + updateChecker.lastResult = this; + this.reason = reason; + this.newestVersion = newestVersion; + this.age = age; + } + + UpdateResult(UpdateChecker updateChecker, final UpdateReason reason) { + Preconditions + .checkArgument(reason != UpdateReason.NEW_UPDATE && reason != UpdateReason.UP_TO_DATE, + "Reasons that might require updates must also provide the latest version String"); + this.reason = reason; + newestVersion = updateChecker.plugin.getDescription().getVersion(); + age = -1; + } + + /** + * Gets the constant reason of this result. + * + * @return the reason + */ + public UpdateReason getReason() { + return reason; + } + + /** + * Checks whether this result requires the user to update. + * + * @return true if an update is required, false otherwise + */ + public boolean requiresUpdate() { + return reason == UpdateReason.NEW_UPDATE; + } + + /** + * Gets the latest version of the plugin. This may be the currently installed version, it may not be. This + * depends entirely on the result of the update. + * + * @return the newest version of the plugin + */ + public String getNewestVersion() { + return newestVersion; + } + + /** + * Gets the number of seconds since the last update was released. + * + * @return The number of seconds since the last update was released or -1 if unavailable. + */ + public long getAge() { + return age; + } + +} diff --git a/src/main/java/net/knarcraft/armoredelytra/update/VersionScheme.java b/src/main/java/net/knarcraft/armoredelytra/update/VersionScheme.java new file mode 100644 index 0000000..e47653a --- /dev/null +++ b/src/main/java/net/knarcraft/armoredelytra/update/VersionScheme.java @@ -0,0 +1,51 @@ +package net.knarcraft.armoredelytra.update; + +import org.apache.commons.lang.math.NumberUtils; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * A functional interface to compare two version Strings with similar version schemes. + */ +public class VersionScheme { + + private static final Pattern DECIMAL_SCHEME_PATTERN = Pattern.compile("\\d+(?:\\.\\d+)*"); + + /** + * Compare two versions and return the higher of the two. If null is returned, it is assumed that at least one + * of the two versions are unsupported by this version scheme parser. + * + * @param first the first version to check + * @param second the second version to check + * @return the greater of the two versions. null if unsupported version schemes + */ + String compareVersions(String first, String second) { + String[] firstSplit = splitVersionInfo(first), secondSplit = splitVersionInfo(second); + if (firstSplit == null || secondSplit == null) { + return null; + } + + for (int i = 0; i < Math.min(firstSplit.length, secondSplit.length); i++) { + int currentValue = NumberUtils.toInt(firstSplit[i]), newestValue = NumberUtils.toInt(secondSplit[i]); + + if (newestValue > currentValue) { + return second; + } else if (newestValue < currentValue) { + return first; + } + } + + return (secondSplit.length > firstSplit.length) ? second : first; + } + + private static String[] splitVersionInfo(String version) { + Matcher matcher = DECIMAL_SCHEME_PATTERN.matcher(version); + if (!matcher.find()) { + return null; + } + + return matcher.group().split("\\."); + } + +} diff --git a/src/main/java/nl/pim16aap2/armoredElytra/util/Util.java b/src/main/java/net/knarcraft/armoredelytra/util/GenericUtil.java similarity index 96% rename from src/main/java/nl/pim16aap2/armoredElytra/util/Util.java rename to src/main/java/net/knarcraft/armoredelytra/util/GenericUtil.java index 456c363..057c288 100644 --- a/src/main/java/nl/pim16aap2/armoredElytra/util/Util.java +++ b/src/main/java/net/knarcraft/armoredelytra/util/GenericUtil.java @@ -1,5 +1,6 @@ -package nl.pim16aap2.armoredElytra.util; +package net.knarcraft.armoredelytra.util; +import net.knarcraft.armoredelytra.property.ArmorTier; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; @@ -12,7 +13,7 @@ import java.io.StringWriter; import java.util.Locale; import java.util.Map; -public class Util { +public final class GenericUtil { public static String errorToString(Error e) { StringWriter sw = new StringWriter(); e.printStackTrace(new PrintWriter(sw)); @@ -27,7 +28,7 @@ public class Util { // Check if an item is broken or not. public static boolean isBroken(ItemStack item) { - return item.getDurability() >= item.getType().getMaxDurability(); + return ItemHelper.getDurability(item) >= ItemHelper.getMaxDurability(item); } // Get the armor tier from a chest plate. diff --git a/src/main/java/net/knarcraft/armoredelytra/util/ItemHelper.java b/src/main/java/net/knarcraft/armoredelytra/util/ItemHelper.java new file mode 100644 index 0000000..a673d2e --- /dev/null +++ b/src/main/java/net/knarcraft/armoredelytra/util/ItemHelper.java @@ -0,0 +1,117 @@ +package net.knarcraft.armoredelytra.util; + +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.Damageable; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.List; + +/** + * A helper class for getting information about items + */ +public final class ItemHelper { + + private ItemHelper() { + + } + + /** + * Gets whether the given item is repairable + * + * @param item
The item to check
+ * @returnTrue if the item is repairable
+ */ + public static boolean isRepairable(ItemStack item) { + return item.getItemMeta() instanceof Damageable && getMaxDurability(item) > 0; + } + + /** + * Gets the max durability of an item + * + * @param itemStackThe item to get the durability of
+ * @returnThe max durability of the item
+ */ + public static short getMaxDurability(ItemStack itemStack) { + return itemStack.getType().getMaxDurability(); + } + + /** + * Gets the current durability of the given item + * + * @param itemStackThe item to get the durability of
+ * @returnThe durability of the item
+ */ + public static short getDurability(ItemStack itemStack) { + Damageable damageable = (Damageable) itemStack.getItemMeta(); + int maxDurability = getMaxDurability(itemStack); + if (damageable != null) { + return (short) (maxDurability - damageable.getDamage()); + } else { + return (short) maxDurability; + } + } + + /** + * Gets the damage done to the given item + * + * @param itemStackThe damage done to the item
+ * @returnThe damage done to the item
+ */ + public static short getDamage(ItemStack itemStack) { + Damageable damageable = (Damageable) itemStack.getItemMeta(); + if (damageable != null) { + return (short) damageable.getDamage(); + } else { + return 0; + } + } + + /** + * Updates the damage done to an item + * + * @param itemThe item to update damage for
+ * @param newDamageThe new damage done
+ * @returnTrue if the damage was updated. False if not damageable.
+ */ + public static boolean updateDamage(ItemStack item, int newDamage) { + ItemMeta meta = item.getItemMeta(); + if (!(meta instanceof Damageable damageable)) { + return false; + } + damageable.setDamage(newDamage); + item.setItemMeta(meta); + return true; + } + + /** + * Gets a complete list of all reforge-able materials + * + * @returnA complete list of reforge-able materials
+ */ + public static ListThe material to check
+ * @param requireDamagedWhether only a damaged anvil should count
+ * @returnTrue if the given material is an anvil
+ */ + public static boolean isAnvil(Material material, boolean requireDamaged) { + boolean isDamagedAnvil = material == Material.CHIPPED_ANVIL || material == Material.DAMAGED_ANVIL; + boolean isAnvil = isDamagedAnvil || material == Material.ANVIL; + return (requireDamaged && isDamagedAnvil) || (!requireDamaged && isAnvil); + } + +} diff --git a/src/main/java/nl/pim16aap2/armoredElytra/handlers/LoginHandler.java b/src/main/java/nl/pim16aap2/armoredElytra/handlers/LoginHandler.java deleted file mode 100644 index f587249..0000000 --- a/src/main/java/nl/pim16aap2/armoredElytra/handlers/LoginHandler.java +++ /dev/null @@ -1,34 +0,0 @@ -package nl.pim16aap2.armoredElytra.handlers; - -import nl.pim16aap2.armoredElytra.ArmoredElytra; -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerLoginEvent; -import org.bukkit.scheduler.BukkitRunnable; - -public class LoginHandler implements Listener { - private final ArmoredElytra plugin; - private final String message; - - public LoginHandler(ArmoredElytra plugin, String message) { - this.plugin = plugin; - this.message = message; - } - - @EventHandler - public void onLogin(PlayerLoginEvent event) { - Player player = event.getPlayer(); - if (player.hasPermission("armoredElytra.admin")) - // Slight delay so the player actually receives the message; - { - new BukkitRunnable() { - @Override - public void run() { - plugin.messagePlayer(player, ChatColor.AQUA, message); - } - }.runTaskLater(plugin, 10); - } - } -} diff --git a/src/main/java/nl/pim16aap2/armoredElytra/lib/armorequip/DispenserArmorListener.java b/src/main/java/nl/pim16aap2/armoredElytra/lib/armorequip/DispenserArmorListener.java deleted file mode 100644 index 43abdd6..0000000 --- a/src/main/java/nl/pim16aap2/armoredElytra/lib/armorequip/DispenserArmorListener.java +++ /dev/null @@ -1,28 +0,0 @@ -package nl.pim16aap2.armoredElytra.lib.armorequip; - -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockDispenseArmorEvent; - -/** - * @author Arnah - * @since Feb 08, 2019 - */ -public class DispenserArmorListener implements Listener { - @EventHandler - public void dispenseArmorEvent(BlockDispenseArmorEvent event) { - ArmorType type = ArmorType.matchType(event.getItem()); - if (type != null) { - if (event.getTargetEntity() instanceof Player p) { - ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(p, ArmorEquipEvent.EquipMethod.DISPENSER, type, - null, event.getItem()); - Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent); - if (armorEquipEvent.isCancelled()) { - event.setCancelled(true); - } - } - } - } -} diff --git a/src/main/java/nl/pim16aap2/armoredElytra/util/AllowedToWearEnum.java b/src/main/java/nl/pim16aap2/armoredElytra/util/AllowedToWearEnum.java deleted file mode 100644 index f7151a1..0000000 --- a/src/main/java/nl/pim16aap2/armoredElytra/util/AllowedToWearEnum.java +++ /dev/null @@ -1,5 +0,0 @@ -package nl.pim16aap2.armoredElytra.util; - -public enum AllowedToWearEnum { - BROKEN, NOPERMISSION, ALLOWED -} diff --git a/src/main/resources/en_US.txt b/src/main/resources/en_US.txt index 77df85c..7186dad 100644 --- a/src/main/resources/en_US.txt +++ b/src/main/resources/en_US.txt @@ -1,7 +1,7 @@ # This file contains all the (partial) sentences used in this plugin. # You can change which file will be used in the config.yml. # The format is "key=value" (without quotation marks). You can modify the values, but not the keys. -# Order doesn't matter and you can use comments if you so desire. +# Order doesn't matter, and you can use comments if you so desire. # Please do note that white space does matter! (so spaces at the end of lines, for example). # The long names (without 'SHORT') are the names the elytras will have. TIER.Leather=&2Leather Armored Elytra diff --git a/src/main/resources/it_IT.txt b/src/main/resources/it_IT.txt index b19db70..0bc6bf1 100644 --- a/src/main/resources/it_IT.txt +++ b/src/main/resources/it_IT.txt @@ -1,7 +1,7 @@ # This file contains all the (partial) sentences used in this plugin. # You can change which file will be used in the config.yml. # The format is "key=value" (without quotation marks). You can modify the values, but not the keys. -# Order doesn't matter and you can use comments if you so desire. +# Order doesn't matter, and you can use comments if you so desire. # Please do note that white space does matter! (so spaces at the end of lines, for example). # The long names (without 'SHORT') are the names the elytras will have. TIER.Leather=&2Elytra corazzata di pelle diff --git a/src/main/resources/zh_TW.txt b/src/main/resources/zh_TW.txt index 87bfe05..a4f0286 100644 --- a/src/main/resources/zh_TW.txt +++ b/src/main/resources/zh_TW.txt @@ -1,7 +1,7 @@ # This file contains all the (partial) sentences used in this plugin. # You can change which file will be used in the config.yml. # The format is "key=value" (without quotation marks). You can modify the values, but not the keys. -# Order doesn't matter and you can use comments if you so desire. +# Order doesn't matter, and you can use comments if you so desire. # Please do note that white space does matter! (so spaces at the end of lines, for example). # The long names (without 'SHORT') are the names the elytras will have. TIER.Leather=&2皮革裝甲鞘翅 diff --git a/src/test/java/net/knarcraft/armoredelytra/util/GenericUtilTest.java b/src/test/java/net/knarcraft/armoredelytra/util/GenericUtilTest.java new file mode 100644 index 0000000..bd83c17 --- /dev/null +++ b/src/test/java/net/knarcraft/armoredelytra/util/GenericUtilTest.java @@ -0,0 +1,18 @@ +package net.knarcraft.armoredelytra.util; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class GenericUtilTest { + + @Test + void testSnakeToCamelCase() { + Assertions.assertEquals("testCase", GenericUtil.snakeToCamelCase("TeSt_Case")); + Assertions.assertEquals("testCase", GenericUtil.snakeToCamelCase("____test_case")); + Assertions.assertEquals("", GenericUtil.snakeToCamelCase("________")); + Assertions.assertEquals("testCase", GenericUtil.snakeToCamelCase("TeSt__Case____")); + Assertions.assertEquals("t", GenericUtil.snakeToCamelCase("_T_")); + Assertions.assertEquals("testcase", GenericUtil.snakeToCamelCase("TeStCase")); + } + +} diff --git a/src/test/java/nl/pim16aap2/armoredElytra/util/UtilTest.java b/src/test/java/nl/pim16aap2/armoredElytra/util/UtilTest.java deleted file mode 100644 index f054a77..0000000 --- a/src/test/java/nl/pim16aap2/armoredElytra/util/UtilTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package nl.pim16aap2.armoredElytra.util; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -class UtilTest { - @Test - void testSnakeToCamelCase() { - Assertions.assertEquals("testCase", Util.snakeToCamelCase("TeSt_Case")); - Assertions.assertEquals("testCase", Util.snakeToCamelCase("____test_case")); - Assertions.assertEquals("", Util.snakeToCamelCase("________")); - Assertions.assertEquals("testCase", Util.snakeToCamelCase("TeSt__Case____")); - Assertions.assertEquals("t", Util.snakeToCamelCase("_T_")); - Assertions.assertEquals("testcase", Util.snakeToCamelCase("TeStCase")); - } -}