diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index a50cacd..befd510 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -26,7 +26,7 @@ jobs: contents: write env: - MODRINTH_VERSIONS: '["1.18.x", "1.19.x", "1.20.x", "1.21.x", "26.1.x", "26.2.x"]' + MODRINTH_VERSIONS: '["1.21.x", "26.1.x", "26.2.x"]' MODRINTH_PLATFORMS: '["spigot", "paper", "purpur", "folia"]' steps: diff --git a/README.md b/README.md index 9d9e678..49895bb 100644 --- a/README.md +++ b/README.md @@ -72,10 +72,9 @@ See the [Compatibility list](https://github.com/alexcrea/CustomAnvil/blob/v1.x.x One of the configurations allow displaying price about 40 and removing Too Expensive. \ By how the minecraft client work: price above 40 can only be displayed green, even if the player does not own enough experience level. -spigot version 1.18 to 1.21.11 do not need any ProtocoLib dependency. (26.1.0 or above requires it) \ -Any recent paper version also are supported for this feature. -But you should wait for update for new version containing new enchantable item or new enchantments if any of this got added. -Else it is, likely, fine to use the current version you are ussing on a new paper version +You do not need Protocolib unless you are using spigot above in 26.1 or above \ + +But you should wait for update or announcement for new version containing new enchantable item or new enchantments. ### For custom enchantment plugin developers For information about the API, please refer to [the Wiki](https://github.com/alexcrea/CustomAnvil/wiki) \ diff --git a/defaultconfigs/1.18/README.md b/defaultconfigs/1.18/README.md deleted file mode 100644 index d390f3f..0000000 --- a/defaultconfigs/1.18/README.md +++ /dev/null @@ -1,6 +0,0 @@ -### Default Plugin's Configurations For 1.18 to 1.20.6 -- [config.yml](https://github.com/alexcrea/CustomAnvil/blob/master/defaultconfigs/1.18/config.yml) -- [enchant_conflict.yml](https://github.com/alexcrea/CustomAnvil/blob/master/defaultconfigs/1.18/enchant_conflict.yml) -- [item_groups.yml](https://github.com/alexcrea/CustomAnvil/blob/master/defaultconfigs/1.18/item_groups.yml) -- [unit_repair_item.yml](https://github.com/alexcrea/CustomAnvil/blob/master/defaultconfigs/1.18/unit_repair_item.yml) -- [custom_recipes.yml](https://github.com/alexcrea/CustomAnvil/blob/master/defaultconfigs/1.18/custom_recipes.yml) diff --git a/defaultconfigs/1.18/config.yml b/defaultconfigs/1.18/config.yml deleted file mode 100644 index b5ad3b0..0000000 --- a/defaultconfigs/1.18/config.yml +++ /dev/null @@ -1,466 +0,0 @@ -# -# It is recommended that you use /configanvil to edit theses config. -# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes ! -# - -# What service of metric should custom anvil use -# Custom anvil collect generic information like server minecraft version, type, etc... -# It can also collect error information if error is happening (currently faststats only) -# It can also be disabled -# Please refer to README for public metric link -# Possible options: auto, bstat, faststats, disabled (auto by default) -metric_type: auto - -# Allow to report errors made caused by this plugin (only for faststats) -# This allows me to fix potentials issue that I'm not aware of -# Accept true or false (true by default) -metric_collect_errors: true - -# All anvil cost will be capped to limit_repair_value if enabled. -# -# In other words: -# For any anvil cost greater than limit_repair_value, Cost will be set to limit_repair_value. -limit_repair_cost: false - -# Max cost value the Anvil can get to. -# -# Valid values include 0 to 1000. -# Cost will be displayed as "Too Expensive": -# - If Cost is above 39 -# - And replace_too_expensive is disabled (false) -limit_repair_value: 39 - -# Whether the anvil's cost limit should be removed entirely. -# -# The anvil will still visually display "Too Expensive" if "replace_too_expensive" is disabled -# However, the action will be completable if xp requirement is meet. -remove_repair_limit: false - -# Whenever anvil cost is above 39 should display the true price and not "Too Expensive". -# -# However, when bypassing "Too Expensive", anvil price will be displayed as Green. -# If the action is not completable, the cost will still be displayed as "Too expensive". -# That mean you also need to change other settings like remove_repair_limit or limit_repair_cost. -# -# Require ProtocoLib. -replace_too_expensive: false - -# XP Level amount added to the anvil when the item is repaired by another item of the same type -# -# Valid values include 0 to 1000 -item_repair_cost: 2 - -# XP Level amount added to the anvil when the item is renamed -# -# Valid values include 0 to 1000 -item_rename_cost: 1 - -# XP Level amount added to the anvil when the item is repaired by an "unit" -# For example: a Diamond on a Diamond Sword -# What's considered unit for what can be edited on the unit repair configuration. -# -# Valid values include 0 to 1000 -unit_repair_cost: 1 - -# XP Level amount added to the anvil when a sacrifice enchantment -# conflict with one of the left item enchantment -# -# Valid values include 0 to 1000 -sacrifice_illegal_enchant_cost: 1 - -# Allow using color code and hexadecimal color. -# -# Color code are prefixed by "&" and hexadecimal color by "#". -# Color code will not be applied if it colors nothing. "&&" can be used to write "&". -# For minimessage see minimessage formating https://docs.papermc.io/adventure/minimessage/format/ -allow_color_code: false -allow_hexadecimal_color: false -allow_minimessage: false - -# This enables restricting color code for player having specific permission -# It requires allow_color_code enabled for... obvious reasons -# -# For example: if player want to use "&aHello" it will be required that the player has -# the permission "ca.color.code.a" as he used the color code "a" -# In general permission to give to the player is "ca.color.code.[code]" -# where [code] is the color code you wish to allow the player -# -# It is kinda of useless when minimessage is supported as players would be able to bypass -# that using the equivalent minimessage tag -per_color_code_permission: false - -# Toggle if color should only be applicable if the player a certain permission. -# -# permission are "ca.color.code" for use of color code and "ca.color.hex" for use of hexadecimal color. -permission_needed_for_color: true - -# Xp cost if the player use color in the items name on rename. -# -# Valid values include 0 to 1000. -use_of_color_cost: 0 - -# Dialogue rename menu make use of dialog menu to allow bigger rename -# You can also change the maximum size and set it to -1 or less for maximum -# -# This feature only work on paper 1.21.7 or later -# -# At the moment only english is available for this menu... sorry ! -# -# CustomAnvil use "ca.rename.dialog" when permission -enable_dialog_rename: false -dialog_rename_max_size: 256 -permission_needed_for_dialog_rename: false - -# This allows custom anvil to not "guess" the text used for rename but store it in the item -# It will make item stackable only and only if it had used the same rename text -# -# For practical reason. this only work when dialog rename is enabled -dialog_rename_keep_user_text: true - -# Override limits for specific enchants -# -# Enchantments not listed here will use the value of default_limit -# -# Overrides provided default from aqua_affinity to depth_strider won't change effect with extra levels -# -# Valid range of 0 - 255 for each enchantment -# -1 mean keep default -enchant_limits: - minecraft:aqua_affinity: 1 - minecraft:binding_curse: 1 - minecraft:channeling: 1 - minecraft:flame: 1 - minecraft:infinity: 1 - minecraft:mending: 1 - minecraft:multishot: 1 - minecraft:silk_touch: 1 - minecraft:vanishing_curse: 1 - minecraft:depth_strider: 3 # anything more than 3 is treated as 3 by the game - minecraft:protection: 4 - minecraft:fire_protection: 4 - minecraft:blast_protection: 4 - minecraft:projectile_protection: 4 - minecraft:feather_falling: 4 - minecraft:thorns: 3 - minecraft:respiration: 3 - minecraft:sharpness: 5 - minecraft:smite: 5 - minecraft:bane_of_arthropods: 5 - minecraft:knockback: 2 - minecraft:fire_aspect: 2 - minecraft:looting: 3 - minecraft:sweeping: 3 - minecraft:sweeping_edge: 3 - minecraft:efficiency: 5 - minecraft:unbreaking: 3 - minecraft:fortune: 3 - minecraft:power: 5 - minecraft:punch: 2 - minecraft:luck_of_the_sea: 3 - minecraft:lure: 3 - minecraft:frost_walker: 2 - minecraft:impaling: 5 - minecraft:riptide: 3 - minecraft:loyalty: 3 - minecraft:piercing: 4 - minecraft:quick_charge: 3 - minecraft:soul_speed: 3 - minecraft:swift_sneak: 3 - -# Multipliers used to calculate the enchantment's value in repair/combining -# -# Values here are pulled from the fandom wiki: -# https://minecraft.fandom.com/wiki/Anvil_mechanics#Costs_for_combining_enchantments -# -# If an enchantment is missing values here, or is less than 0, it will default to 0 -# -# Calculated as: [Enchantment lvl] * [multiplier] -# -# With default values protection 4 would have a value of 4 when -# coming from either a book (4 * 1) or an item (4 * 1) -enchant_values: - minecraft:aqua_affinity: - item: 4 - book: 2 - minecraft:bane_of_arthropods: - item: 2 - book: 1 - minecraft:binding_curse: - item: 8 - book: 4 - minecraft:blast_protection: - item: 4 - book: 2 - minecraft:channeling: - item: 8 - book: 4 - minecraft:depth_strider: - item: 4 - book: 2 - minecraft:efficiency: - item: 1 - book: 1 - minecraft:flame: - item: 4 - book: 2 - minecraft:feather_falling: - item: 2 - book: 1 - minecraft:fire_aspect: - item: 4 - book: 2 - minecraft:fire_protection: - item: 2 - book: 1 - minecraft:fortune: - item: 4 - book: 2 - minecraft:frost_walker: - item: 4 - book: 2 - minecraft:impaling: - item: 4 - book: 2 - minecraft:infinity: - item: 8 - book: 4 - minecraft:knockback: - item: 2 - book: 1 - minecraft:looting: - item: 4 - book: 2 - minecraft:loyalty: - item: 1 - book: 1 - minecraft:luck_of_the_sea: - item: 4 - book: 2 - minecraft:lure: - item: 4 - book: 2 - minecraft:mending: - item: 4 - book: 2 - minecraft:multishot: - item: 4 - book: 2 - minecraft:piercing: - item: 1 - book: 1 - minecraft:power: - item: 1 - book: 1 - minecraft:projectile_protection: - item: 2 - book: 1 - minecraft:protection: - item: 1 - book: 1 - minecraft:punch: - item: 4 - book: 2 - minecraft:quick_charge: - item: 2 - book: 1 - minecraft:respiration: - item: 4 - book: 2 - minecraft:riptide: - item: 4 - book: 2 - minecraft:silk_touch: - item: 8 - book: 4 - minecraft:sharpness: - item: 1 - book: 1 - minecraft:smite: - item: 2 - book: 1 - minecraft:soul_speed: - item: 8 - book: 4 - minecraft:swift_sneak: - item: 8 - book: 4 - minecraft:sweeping: - item: 4 - book: 2 - minecraft:sweeping_edge: - item: 4 - book: 2 - minecraft:thorns: - item: 8 - book: 4 - minecraft:unbreaking: - item: 2 - book: 1 - minecraft:vanishing_curse: - item: 8 - book: 4 - -# Disable enchantment merging for level above the set value -# Enchantment merging is when, for example, 2 unbreaking II book combine to give sharpness III -# But Enchantment above this value can still be applied. following the previous example, we could still apply a unbreaking III book to a sword -# Even if disable-merge-over of unbreaking is set to 2 -# -1 mean enchantment merge for this enchantment is not disabled. default to -1 if absent. -disable-merge-over: - # Sharpness is set to -1. it equivalent to it not being set to anything (and work as vanilla on default configuration) - minecraft:sharpness: -1 - # If uncommented. 2 unbreaking II book would not give an unbreaking III book. but unbreaking III book can still be applied - #minecraft:unbreaking: 2 - -# The maximum number of enchantment an item can get. -1 for infinity -# Use eco enchant enchant_limit if present by default unless "default" is not equal to -1 -enchantment_count_limit: - default: -1 - # Limit for specific items. example bellow is an example with stick - # Per item enchantment limit override eco enchant enchant_limit and default limit - items: - stick: -1 - -# Settings for lore modification -lore_edit: - book_and_quil: - # Permission is ca.lore_edit.book - use_permission: true - append: - # If adding lore using book & quil is enabled - enabled: false - # Cost used every time - fixed_cost: 1 - # Cost used for every lore line added - per_line_cost: 0 - # Use left item vanilla cost penalty if any - shared_increase: false - # Increase shared left item cost penalty - shared_additive: false - # If adding the lore consume the book & quil - do_consume: false - # Allow using color code and hexadecimal color when editing lore via book & quil - # - # Color code are prefixed by "&" and hexadecimal color by "#" - # Color code will not be applied if it colors nothing. "&&" can be used to write "&" - # For minimessage see minimessage formating https://docs.papermc.io/adventure/minimessage/format/ - # - # Note that currently minimessage would disable hex code when adding color - allow_color_code: true - allow_hexadecimal_color: false - allow_minimessage: true - - remove: - # If removing lore using book & quil is enabled - enabled: false - # Cost used every time - fixed_cost: 1 - # Cost used for every lore line removed - per_line_cost: 0 - # Use left item vanilla cost penalty if any - shared_increase: false - # Increase shared left item cost penalty - shared_additive: false - # If removing the lore consume the book & quil - do_consume: false - # Cost of replacing colors - remove_color_cost: 0 - # Allowed some color and tags to be reverted to plain text - # Custom anvil will prioritise format that result is a smaller resulting text - # Note that not allowing certain format will lead to some lost of color or tags. - # If configuration are exact as append appending this book should result in the exact same color - # - # Color code will be prefixed by "&" and hexadecimal color by "#". - # If color code is allowed, "&" in the text will get converted to "&&" - # For minimessage see minimessage formating https://docs.papermc.io/adventure/minimessage/format/ - allow_color_code: true - allow_hexadecimal_color: false - allow_minimessage: true - - paper: - # Permission is ca.lore_edit.paper - use_permission: true - # what order should the lines should get added/removed (start/end, if invalid or not present will be end) - order: end - - append_line: - # If adding lore line using paper is enabled - enabled: false - # Cost used every time - fixed_cost: 1 - # Use left item vanilla cost penalty if any - shared_increase: false - # Increase shared left item cost penalty - shared_additive: false - # If adding the lore line consume the paper - do_consume: false - # Allow using color code and hexadecimal color when editing lore via book & quil - # - # Color code are prefixed by "&" and hexadecimal color by "#" - # Color code will not be applied if it colors nothing. "&&" can be used to write "&" - # For minimessage see minimessage formating https://docs.papermc.io/adventure/minimessage/format/ - # - # Note that currently minimessage would disable hex code when adding color - allow_color_code: true - allow_hexadecimal_color: false - allow_minimessage: true - color_use_cost: 0 - - remove_line: - # If removing lore line using paper is enabled - enabled: false - # Cost used every time - fixed_cost: 1 - # Use left item vanilla cost penalty if any - shared_increase: false - # Increase shared left item cost penalty - shared_additive: false - # If removing the lore line consume the paper - do_consume: false - # Cost of replacing colors - remove_color_cost: 0 - # Allowed some color and tags to be reverted to plain text - # Custom anvil will prioritise format that result is a smaller resulting text - # Note that not allowing certain format will lead to some lost of color or tags. - # If configuration are exact as append appending this paper should result in the exact same color - # - # Color code will be prefixed by "&" and hexadecimal color by "#". - # If color code is allowed, "&" in the text will get converted to "&&" - # For minimessage see minimessage formating https://docs.papermc.io/adventure/minimessage/format/ - allow_color_code: true - allow_hexadecimal_color: false - allow_minimessage: true - -# Allow to replace the xp cost by a monetary cost -# If enabled it will not be bound to the experience level limits -# -# It also requires to enable dialog rename (set "enable_dialog_rename: false" a bit higher) -# If dialog rename permission is enabled and player do not have the permission merge will fall back to vanilla xp cost -# -# If you are using custom craft I recommend using Linear Xp Cost with Exact Linear Xp as normal Xp Cost will act "weird" -# But Linear Xp will act as 1$ time global multiplier. In other word: like you expect -# -# As this feature require dialog rename, it can only be enabled starting with paper 1.21.6 and later -monetary_cost: - enabled: false - # If using vault unlocked this allow to specify what currency should be used for anvil usage - # default being the default currency - currency: default - # multiply the anvil cost by a value to allow to have price a big bigger than like 40 - multipliers: - # global multipliers. all usage type will be multiplied by this value - global: 1.0 - # usage specific type. it will only apply for specific xp "reason" - enchantment: 1.0 # related to enchantments level - repair: 1.0 # for repairing via unit repair (per unit) - rename: 1.0 # for renaming the item - lore_edit: 1.0 # for changing the lore of the item (only if lore edit is enabled) - work_penalty: 1.0 # for work penalty (aka use penalty) - recipe: 1.0 # for custom anvil recipe cost - -# Whether to show debug logging -debug_log: false - -# Whether to show verbose debug logging -debug_log_verbose: false - -configVersion: 1.11.0 diff --git a/defaultconfigs/1.18/custom_recipes.yml b/defaultconfigs/1.18/custom_recipes.yml deleted file mode 100644 index 57c2220..0000000 --- a/defaultconfigs/1.18/custom_recipes.yml +++ /dev/null @@ -1,5 +0,0 @@ -# ---------------------------------------------------- -# This config file is to store custom craft -# It is recommended to use the in game config editor for this configuration. -# /customanvilconfig With ca.config.edit permission -# ---------------------------------------------------- diff --git a/defaultconfigs/1.18/enchant_conflict.yml b/defaultconfigs/1.18/enchant_conflict.yml deleted file mode 100644 index 45d62c3..0000000 --- a/defaultconfigs/1.18/enchant_conflict.yml +++ /dev/null @@ -1,247 +0,0 @@ -# -# It is recommended that you use /configanvil to edit theses config. -# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes ! -# - -# material conflicts -# -# If you want to edit this file: -# - A conflict will apply to every item except if in one of the notAffectedGroups group -# - the conflict will count only if the user try to combine at least as -# many conflicting enchantment as "maxEnchantmentBeforeConflict" -# -# -# ---------------------------------------------------- -# These restriction are about not allowing enchantment -# on illegal items -# ---------------------------------------------------- - -restriction_aqua_affinity: - enchantments: [ minecraft:aqua_affinity ] - notAffectedGroups: [ enchanted_book, helmets ] - -restriction_bane_of_arthropods: - enchantments: [ minecraft:bane_of_arthropods ] - notAffectedGroups: [ enchanted_book, melee_weapons ] - -restriction_blast_protection: - enchantments: [ minecraft:blast_protection ] - notAffectedGroups: [ enchanted_book, armors ] - -restriction_channeling: - enchantments: [ minecraft:channeling ] - notAffectedGroups: [ enchanted_book, trident ] - -restriction_binding_curse: - enchantments: [ minecraft:binding_curse ] - notAffectedGroups: [ enchanted_book, wearable ] - -restriction_vanishing_curse: - enchantments: [ minecraft:vanishing_curse ] - notAffectedGroups: [ enchanted_book, can_vanish ] - -restriction_depth_strider: - enchantments: [ minecraft:depth_strider ] - notAffectedGroups: [ enchanted_book, boots ] - -restriction_efficiency: - enchantments: [ minecraft:efficiency ] - notAffectedGroups: [ enchanted_book, tools, shears ] - -restriction_feather_falling: - enchantments: [ minecraft:feather_falling ] - notAffectedGroups: [ enchanted_book, boots ] - -restriction_fire_aspect: - enchantments: [ minecraft:fire_aspect ] - notAffectedGroups: [ enchanted_book, swords ] - -restriction_fire_protection: - enchantments: [ minecraft:fire_protection ] - notAffectedGroups: [ enchanted_book, armors ] - -restriction_flame: - enchantments: [ minecraft:flame ] - notAffectedGroups: [ enchanted_book, bow ] - -restriction_fortune: - enchantments: [ minecraft:fortune ] - notAffectedGroups: [ enchanted_book, tools ] - -restriction_frost_walker: - enchantments: [ minecraft:frost_walker ] - notAffectedGroups: [ enchanted_book, boots ] - -restriction_impaling: - enchantments: [ minecraft:impaling ] - notAffectedGroups: [ enchanted_book, trident ] - -restriction_infinity: - enchantments: [ minecraft:infinity ] - notAffectedGroups: [ enchanted_book, bow ] - -restriction_knockback: - enchantments: [ minecraft:knockback ] - notAffectedGroups: [ enchanted_book, swords ] - -restriction_looting: - enchantments: [ minecraft:looting ] - notAffectedGroups: [ enchanted_book, swords ] - -restriction_loyalty: - enchantments: [ minecraft:loyalty ] - notAffectedGroups: [ enchanted_book, trident ] - -restriction_luck_of_the_sea: - enchantments: [ minecraft:luck_of_the_sea ] - notAffectedGroups: [ enchanted_book, fishing_rod ] - -restriction_lure: - enchantments: [ minecraft:lure ] - notAffectedGroups: [ enchanted_book, fishing_rod ] - -restriction_mending: - enchantments: [ minecraft:mending ] - notAffectedGroups: [ enchanted_book, can_unbreak ] - -restriction_minecraft_multishot: - enchantments: [ minecraft:multishot ] - notAffectedGroups: [ enchanted_book, crossbow ] - -restriction_piercing: - enchantments: [ minecraft:piercing ] - notAffectedGroups: [ enchanted_book, crossbow ] - -restriction_power: - enchantments: [ minecraft:power ] - notAffectedGroups: [ enchanted_book, bow ] - -restriction_projectile_protection: - enchantments: [ minecraft:projectile_protection ] - notAffectedGroups: [ enchanted_book, armors ] - -restriction_protection: - enchantments: [ minecraft:protection ] - notAffectedGroups: [ enchanted_book, armors ] - -restriction_punch: - enchantments: [ minecraft:punch ] - notAffectedGroups: [ enchanted_book, bow ] - -restriction_quick_charge: - enchantments: [ minecraft:quick_charge ] - notAffectedGroups: [ enchanted_book, crossbow ] - -restriction_respiration: - enchantments: [ minecraft:respiration ] - notAffectedGroups: [ enchanted_book, helmets ] - -restriction_riptide: - enchantments: [ minecraft:riptide ] - notAffectedGroups: [ enchanted_book, trident ] - -restriction_sharpness: - enchantments: [ minecraft:sharpness ] - notAffectedGroups: [ enchanted_book, melee_weapons ] - -restriction__silk_touch: - enchantments: [ minecraft:silk_touch ] - notAffectedGroups: [ enchanted_book, tools ] - -restriction_smite: - enchantments: [ minecraft:smite ] - notAffectedGroups: [ enchanted_book, melee_weapons ] - -restriction_soul_speed: - enchantments: [ minecraft:soul_speed ] - notAffectedGroups: [ enchanted_book, boots ] - -restriction_sweeping_edge: - enchantments: [ minecraft:sweeping, minecraft:sweeping_edge ] - notAffectedGroups: [ enchanted_book, swords ] - -# Do not exist in 1.18, that mean useInFuture will be set to true -# useInFuture set to true also mean it will not warn if there is an issue -restriction_swift_sneak: - useInFuture: true - enchantments: [ minecraft:swift_sneak ] - notAffectedGroups: [ enchanted_book, leggings ] - -restriction_thorns: - enchantments: [ minecraft:thorns ] - notAffectedGroups: [ enchanted_book, armors ] - -restriction__unbreaking: - enchantments: [ minecraft:unbreaking ] - notAffectedGroups: [ enchanted_book, can_unbreak ] - -# ---------------------------------------------------- -# Now we have conflicts about enchantment Incompatibility -# We just filtered what item enchantments can be applied -# notAffectedGroups is empty as we don't want anything to not respect theses rules -# maxEnchantmentBeforeConflict is set to 1 to only have 1 on those enchantment available -# ---------------------------------------------------- - -sword_enchant_conflict: - enchantments: - - minecraft:bane_of_arthropods - - minecraft:smite - - minecraft:sharpness - notAffectedGroups: [ ] - maxEnchantmentBeforeConflict: 1 - -protection_enchant_conflict: - enchantments: - - minecraft:blast_protection - - minecraft:fire_protection - - minecraft:projectile_protection - - minecraft:protection - notAffectedGroups: [ ] - maxEnchantmentBeforeConflict: 1 - -trident_conflict1: - enchantments: - - minecraft:channeling - - minecraft:riptide - notAffectedGroups: [ ] - maxEnchantmentBeforeConflict: 1 - -trident_conflict2: - enchantments: - - minecraft:loyalty - - minecraft:riptide - notAffectedGroups: [ ] - maxEnchantmentBeforeConflict: 1 - -boot_conflict: - enchantments: - - minecraft:depth_strider - - minecraft:frost_walker - notAffectedGroups: [ ] - maxEnchantmentBeforeConflict: 1 - -tool_conflict: - enchantments: - - minecraft:fortune - - minecraft:silk_touch - notAffectedGroups: [ ] - maxEnchantmentBeforeConflict: 1 - -bow_conflict: - enchantments: - - minecraft:mending - - minecraft:infinity - notAffectedGroups: [ ] - maxEnchantmentBeforeConflict: 1 - -crossbow_conflict: - enchantments: - - minecraft:multishot - - minecraft:piercing - notAffectedGroups: [ ] - maxEnchantmentBeforeConflict: 1 - -# ---------------------------------------------------- -# Bellow is for custom conflicts. -# This is also where conflict create from the gui will be placed. -# ---------------------------------------------------- diff --git a/defaultconfigs/1.18/item_groups.yml b/defaultconfigs/1.18/item_groups.yml deleted file mode 100644 index 3c1eb5d..0000000 --- a/defaultconfigs/1.18/item_groups.yml +++ /dev/null @@ -1,210 +0,0 @@ -# -# It is recommended that you use /configanvil to edit theses config. -# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes ! -# - -# Please note this config use spigot material names. -# It should match minecraft name in most case, maybe every case, but I can't be sure -# In case there an issue with material name, you can found them here: -# https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html - -# An empty Exclude group exclude nothing, so it contain everything -everything: - type: exclude - -# An empty include group will include nothing -nothing: - type: include - -# This group is an example of a group including only stone and polished granite -example_include: - type: include - items: - - stone - - polished_granite - -# This group contain everything except polished granite and elements of example_include -example_exclude: - type: exclude - items: - - polished_granite - groups: - - example_include - -# Default configuration should be vanilla enchantment conflict group -# there may have error, if you find one you can fix it ! -# https://minecraft.fandom.com/wiki/Enchanting - -swords: - type: include - items: - - wooden_sword - - stone_sword - - iron_sword - - diamond_sword - - golden_sword - - netherite_sword - -axes: - type: include - items: - - wooden_axe - - stone_axe - - iron_axe - - diamond_axe - - golden_axe - - netherite_axe - -melee_weapons: - type: include - groups: - - swords - - axes - -helmets: - type: include - items: - - leather_helmet - - chainmail_helmet - - iron_helmet - - diamond_helmet - - golden_helmet - - netherite_helmet - - turtle_helmet - -chestplate: - type: include - items: - - leather_chestplate - - chainmail_chestplate - - iron_chestplate - - diamond_chestplate - - golden_chestplate - - netherite_chestplate - -leggings: - type: include - items: - - leather_leggings - - chainmail_leggings - - iron_leggings - - diamond_leggings - - golden_leggings - - netherite_leggings - -boots: - type: include - items: - - leather_boots - - chainmail_boots - - iron_boots - - diamond_boots - - golden_boots - - netherite_boots - -armors: - type: include - groups: - - helmets - - chestplate - - leggings - - boots - -wearable: - type: include - items: - - elytra - - carved_pumpkin - - skeleton_skull - - wither_skeleton_skull - - zombie_head - - player_head - - creeper_head - - dragon_head - # do not exist in 1.18 but exist in future update - - piglin_head - groups: - - armors - -tools: - type: include - items: - - wooden_pickaxe - - stone_pickaxe - - iron_pickaxe - - diamond_pickaxe - - golden_pickaxe - - netherite_pickaxe - - wooden_shovel - - stone_shovel - - iron_shovel - - diamond_shovel - - golden_shovel - - netherite_shovel - - wooden_hoe - - stone_hoe - - iron_hoe - - diamond_hoe - - golden_hoe - - netherite_hoe - groups: - - axes - -enchanted_book: - type: include - items: - - enchanted_book - -trident: - type: include - items: - - trident - -bow: - type: include - items: - - bow - -crossbow: - type: include - items: - - crossbow - -fishing_rod: - type: include - items: - - fishing_rod - -shears: - type: include - items: - - shears - -can_unbreak: - type: include - items: - - elytra - - flint_and_steel - - shield - - carrot_on_a_stick - - warped_fungus_on_a_stick - # do not exist in 1.18 but exist in future update - - brush - groups: - - melee_weapons - - tools - - armors - - trident - - bow - - crossbow - - fishing_rod - - shears - -can_vanish: - type: include - items: - - compass - groups: - - wearable - - can_unbreak - diff --git a/defaultconfigs/1.18/unit_repair_item.yml b/defaultconfigs/1.18/unit_repair_item.yml deleted file mode 100644 index 2902cce..0000000 --- a/defaultconfigs/1.18/unit_repair_item.yml +++ /dev/null @@ -1,190 +0,0 @@ -# -# It is recommended that you use /configanvil to edit theses config. -# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes ! -# - -# Unit repair configuration -# -# This configuration is to make custom unit repair -# A unit repair is, for example, a diamond to repair a diamond sword -# In vanilla, a unit repair 25% of object durability -# you can make a custom value here -# -# Item name should NOT combine caps and no caps (example: Stone) - -# Default value if the config is an invalid value (value <= 0 ) -# If value > 1 it will be treated as being = 1 -default_repair_amount: 0.25 - -# You can add custom unit repair -# The example bellow make a shield repaired by 10% by sticks - -#stick: -# shield: 0.10 - - -# Vanilla unit repair group is bellow -diamond: - diamond_helmet: 0.25 - diamond_chestplate: 0.25 - diamond_leggings: 0.25 - diamond_boots: 0.25 - diamond_sword: 0.25 - diamond_pickaxe: 0.25 - diamond_axe: 0.25 - diamond_shovel: 0.25 - diamond_hoe: 0.25 - -netherite_ingot: - netherite_helmet: 0.25 - netherite_chestplate: 0.25 - netherite_leggings: 0.25 - netherite_boots: 0.25 - netherite_sword: 0.25 - netherite_pickaxe: 0.25 - netherite_axe: 0.25 - netherite_shovel: 0.25 - netherite_hoe: 0.25 - -gold_ingot: - golden_helmet: 0.25 - golden_chestplate: 0.25 - golden_leggings: 0.25 - golden_boots: 0.25 - golden_sword: 0.25 - golden_pickaxe: 0.25 - golden_axe: 0.25 - golden_shovel: 0.25 - golden_hoe: 0.25 - -iron_ingot: - iron_helmet: 0.25 - iron_chestplate: 0.25 - iron_leggings: 0.25 - iron_boots: 0.25 - iron_sword: 0.25 - iron_pickaxe: 0.25 - iron_axe: 0.25 - iron_shovel: 0.25 - iron_hoe: 0.25 - -cobblestone: - stone_sword: 0.25 - stone_pickaxe: 0.25 - stone_axe: 0.25 - stone_shovel: 0.25 - stone_hoe: 0.25 - -cobbled_deepslate: - stone_sword: 0.25 - stone_pickaxe: 0.25 - stone_axe: 0.25 - stone_shovel: 0.25 - stone_hoe: 0.25 - -blackstone: - stone_sword: 0.25 - stone_pickaxe: 0.25 - stone_axe: 0.25 - stone_shovel: 0.25 - stone_hoe: 0.25 - -leather: - leather_helmet: 0.25 - leather_chestplate: 0.25 - leather_leggings: 0.25 - leather_boots: 0.25 - -phantom_membrane: - elytra: 0.25 - -scute: - turtle_helmet: 0.25 - -oak_planks: - wooden_sword: 0.25 - wooden_pickaxe: 0.25 - wooden_axe: 0.25 - wooden_shovel: 0.25 - wooden_hoe: 0.25 - shield: 0.25 - -spruce_planks: - wooden_sword: 0.25 - wooden_pickaxe: 0.25 - wooden_axe: 0.25 - wooden_shovel: 0.25 - wooden_hoe: 0.25 - shield: 0.25 - -birch_planks: - wooden_sword: 0.25 - wooden_pickaxe: 0.25 - wooden_axe: 0.25 - wooden_shovel: 0.25 - wooden_hoe: 0.25 - shield: 0.25 - -jungle_planks: - wooden_sword: 0.25 - wooden_pickaxe: 0.25 - wooden_axe: 0.25 - wooden_shovel: 0.25 - wooden_hoe: 0.25 - shield: 0.25 - -acacia_planks: - wooden_sword: 0.25 - wooden_pickaxe: 0.25 - wooden_axe: 0.25 - wooden_shovel: 0.25 - wooden_hoe: 0.25 - shield: 0.25 - -dark_oak_planks: - wooden_sword: 0.25 - wooden_pickaxe: 0.25 - wooden_axe: 0.25 - wooden_shovel: 0.25 - wooden_hoe: 0.25 - shield: 0.25 - -mangrove_planks: - wooden_sword: 0.25 - wooden_pickaxe: 0.25 - wooden_axe: 0.25 - wooden_shovel: 0.25 - wooden_hoe: 0.25 - shield: 0.25 - -cherry_planks: - wooden_sword: 0.25 - wooden_pickaxe: 0.25 - wooden_axe: 0.25 - wooden_shovel: 0.25 - wooden_hoe: 0.25 - shield: 0.25 - -bamboo_planks: - wooden_sword: 0.25 - wooden_pickaxe: 0.25 - wooden_axe: 0.25 - wooden_shovel: 0.25 - wooden_hoe: 0.25 - shield: 0.25 - -crimson_planks: - wooden_sword: 0.25 - wooden_pickaxe: 0.25 - wooden_axe: 0.25 - wooden_shovel: 0.25 - wooden_hoe: 0.25 - shield: 0.25 - -warped_planks: - wooden_sword: 0.25 - wooden_pickaxe: 0.25 - wooden_axe: 0.25 - wooden_shovel: 0.25 - wooden_hoe: 0.25 - shield: 0.25 diff --git a/defaultconfigs/README.md b/defaultconfigs/README.md index daa2088..e4f40d2 100644 --- a/defaultconfigs/README.md +++ b/defaultconfigs/README.md @@ -1,5 +1,4 @@ ### Default Plugin's Configurations -From 1.18 to 1.20.6 use [1.18 configurations](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.18) \ From 1.21 to 1.21.8 use [1.21 configurations](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21) \ From 1.21.9 to 1.21.10 use [1.21.9 configurations](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21.9) \ From 1.21.11 use [1.21.11 configurations](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21.11) diff --git a/impl/LegacyEcoEnchant/build.gradle.kts b/impl/LegacyEcoEnchant/build.gradle.kts index 83057a7..3c3f1ae 100644 --- a/impl/LegacyEcoEnchant/build.gradle.kts +++ b/impl/LegacyEcoEnchant/build.gradle.kts @@ -8,6 +8,6 @@ plugins { // Imitate needed class and method to support legacy version of EcoEnchant dependencies { // Spigot api - compileOnly("org.spigotmc:spigot-api:1.18-R0.1-SNAPSHOT") + compileOnly("org.spigotmc:spigot-api:1.21-R0.1-SNAPSHOT") } \ No newline at end of file diff --git a/nms/nms-common/build.gradle.kts b/nms/nms-common/build.gradle.kts index 950d807..46f684d 100644 --- a/nms/nms-common/build.gradle.kts +++ b/nms/nms-common/build.gradle.kts @@ -21,8 +21,8 @@ repositories { // Set target version tasks.withType().configureEach { - sourceCompatibility = "16" - targetCompatibility = "16" + sourceCompatibility = "21" + targetCompatibility = "21" options.encoding = "UTF-8" } @@ -30,6 +30,6 @@ tasks.withType().configureEach { kotlin { compilerOptions { apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2) - jvmTarget.set(JvmTarget.JVM_16) + jvmTarget.set(JvmTarget.JVM_21) } } diff --git a/nms/nms-paper/build.gradle.kts b/nms/nms-paper/build.gradle.kts index d0e12a7..19033be 100644 --- a/nms/nms-paper/build.gradle.kts +++ b/nms/nms-paper/build.gradle.kts @@ -21,8 +21,8 @@ repositories { // Set target version tasks.withType().configureEach { - sourceCompatibility = "18" - targetCompatibility = "18" + sourceCompatibility = "21" + targetCompatibility = "21" options.encoding = "UTF-8" } @@ -30,6 +30,6 @@ tasks.withType().configureEach { kotlin { compilerOptions { apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2) - jvmTarget.set(JvmTarget.JVM_18) + jvmTarget.set(JvmTarget.JVM_21) } } diff --git a/nms/nms-paper/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/datapack/DataPackTester.kt b/nms/nms-paper/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/datapack/DataPackTester.kt index 9003fdf..221dd2f 100644 --- a/nms/nms-paper/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/datapack/DataPackTester.kt +++ b/nms/nms-paper/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/datapack/DataPackTester.kt @@ -2,37 +2,19 @@ package xyz.alexcrea.cuanvil.dependency.datapack import io.papermc.paper.datapack.Datapack import org.bukkit.Bukkit -import org.bukkit.packs.DataPack import java.util.* object DataPackTester { - val legacyNames: List - get() = Bukkit.getDataPackManager().dataPacks - .stream().filter { obj -> obj.isEnabled } - .map { pack -> pack.key.key } - .toList() val enabledPacks: List get() { - try { - // will throw error if do not exist - Bukkit::class.java.getDeclaredMethod("getDatapackManager") - - return Bukkit.getDatapackManager().enabledPacks + return try { + Bukkit.getDatapackManager().enabledPacks .stream().map { obj: Datapack -> obj.name } .toList() - } catch (e: NoSuchMethodException) { - try { - DataPack::class.java.getDeclaredMethod("getKey") - } catch (e: NoSuchMethodException) { - System.err.println("Could not find compatible datapack manager") - System.err.println("If you are using a datapack that should be compatible with CustomAnvil. It will not get detected...") - return emptyList() - } - return legacyNames - } catch (e: Exception){ + } catch (_: Exception){ // Assume cause UnimplementedOperationException on mock server - return Collections.emptyList() + Collections.emptyList() } } } diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/EnchantmentRarity.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/EnchantmentRarity.java index 3718f39..7ad3269 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/enchant/EnchantmentRarity.java +++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/EnchantmentRarity.java @@ -1,6 +1,6 @@ package xyz.alexcrea.cuanvil.enchant; -// because spigot (1.18) do not look like to provide access to enchantment rarity I need to do it myself... +// because spigot (1.21) do not look like to provide access to enchantment rarity I need to do it myself... public class EnchantmentRarity { public static final EnchantmentRarity NO_RARITY = new EnchantmentRarity(0, 0); diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/command/DiagnosticExecutor.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/command/DiagnosticExecutor.kt index 6318a67..85b50f3 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/command/DiagnosticExecutor.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/command/DiagnosticExecutor.kt @@ -1,6 +1,5 @@ package xyz.alexcrea.cuanvil.command -import com.github.stefvanschie.inventoryframework.inventoryview.interface_.InventoryViewUtil import io.delilaheve.CustomAnvil import net.md_5.bungee.api.chat.ClickEvent import net.md_5.bungee.api.chat.HoverEvent @@ -16,8 +15,6 @@ import org.bukkit.entity.HumanEntity import org.bukkit.entity.Player import org.bukkit.event.inventory.InventoryType import org.bukkit.event.inventory.PrepareAnvilEvent -import org.bukkit.inventory.AnvilInventory -import org.bukkit.inventory.InventoryView import org.bukkit.inventory.ItemStack import org.bukkit.inventory.meta.Damageable import org.bukkit.inventory.meta.EnchantmentStorageMeta @@ -263,7 +260,7 @@ class DiagnosticExecutor: CASubCommand() { } fun simulateAnvil(player: Player, stb: StringBuilder, left: ItemStack?, right: ItemStack?, result: ItemStack?) { - var invView: InventoryView + var invView: AnvilView var event: PrepareAnvilEvent try { val fakeInv = Bukkit.createInventory(player, InventoryType.ANVIL) @@ -275,42 +272,40 @@ class DiagnosticExecutor: CASubCommand() { val anvilTypeField = menuTypeClazz.getField("ANVIL") val anvilType = anvilTypeField.get(null) val createMethod = anvilType.javaClass.getMethod("create", HumanEntity::class.java) - invView = createMethod.invoke(anvilType, player) as InventoryView + invView = createMethod.invoke(anvilType, player) as AnvilView player.openInventory(invView) - val anvilViewClass = Class.forName("org.bukkit.inventory.view.AnvilView") - val constructor = PrepareAnvilEvent::class.java.getConstructor(anvilViewClass, ItemStack::class.java) + val constructor = PrepareAnvilEvent::class.java.getConstructor(AnvilView::class.java, ItemStack::class.java) event = constructor.newInstance(invView, result) } - val fakeInv = InventoryViewUtil.getInstance().getTopInventory(invView) as AnvilInventory - fakeInv.setItem(0, left) - fakeInv.setItem(1, right) + invView.setItem(0, left) + invView.setItem(1, right) - val xp = fakeInv.repairCost - val maxXp = fakeInv.maximumRepairCost - val mergeResult = fakeInv.getItem(2) + val xp = invView.repairCost + val maxXp = invView.maximumRepairCost + val mergeResult = invView.getItem(2) stb.append("\n${if(result == mergeResult) "E" else "Une"}xpected Result") PrepareAnvilListener().anvilCombineCheck(event) // Now we check if item and xp same stb.append("\nXP/Max XP: ") - .append(if(fakeInv.repairCost == xp) "Correct" else "Incorrect") + .append(if(invView.repairCost == xp) "Correct" else "Incorrect") .append("/") - .append(if(fakeInv.maximumRepairCost == maxXp) "Correct" else "Incorrect") - .append(" (${fakeInv.repairCost} $xp|${fakeInv.maximumRepairCost} $maxXp)") + .append(if(invView.maximumRepairCost == maxXp) "Correct" else "Incorrect") + .append(" (${invView.repairCost} $xp|${invView.maximumRepairCost} $maxXp)") .append("\nMerge result: ") - .append(if(fakeInv.getItem(2) == mergeResult) "Correct" else "Incorrect") + .append(if(invView.getItem(2) == mergeResult) "Correct" else "Incorrect") PrepareAnvilListener.IS_EMPTY_TEST = true Bukkit.getPluginManager().callEvent(event) stb.append("\nNull result test: ") .append(if(event.result == null) "Correct" else "Incorrect") - fakeInv.setItem(0, null) - fakeInv.setItem(1, null) - fakeInv.setItem(2, null) + invView.setItem(0, null) + invView.setItem(1, null) + invView.setItem(2, null) player.closeInventory() } diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt index b730a0e..6a6950c 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt @@ -15,6 +15,7 @@ import org.bukkit.inventory.Inventory import org.bukkit.inventory.InventoryView import org.bukkit.inventory.ItemStack import xyz.alexcrea.cuanvil.anvil.AnvilCost +import org.bukkit.inventory.view.AnvilView import xyz.alexcrea.cuanvil.anvil.AnvilUseType import xyz.alexcrea.cuanvil.api.event.listener.CAClickResultBypassEvent import xyz.alexcrea.cuanvil.api.event.listener.CAEarlyPreAnvilBypassEvent @@ -164,9 +165,9 @@ object DependencyManager { ) } - private fun logExceptionAndClear(target: CommandSender, inventory: Inventory, e: Exception) { + private fun logExceptionAndClear(target: CommandSender, view: AnvilView, e: Exception) { // Just in case to avoid illegal items - inventory.setItem(ANVIL_OUTPUT_SLOT, null) + view.setItem(ANVIL_OUTPUT_SLOT, null) logException(target, e) } @@ -177,7 +178,7 @@ object DependencyManager { try { return earlyUnsafeTryEventPreAnvilBypass(event, player) } catch (e: Exception) { - logExceptionAndClear(event.view.player, event.inventory, e) + logExceptionAndClear(event.view.player, event.view, e) return true } } @@ -203,7 +204,7 @@ object DependencyManager { try { return unsafeTryEventPreAnvilBypass(event, player) } catch (e: Exception) { - logExceptionAndClear(event.view.player, event.inventory, e) + logExceptionAndClear(event.view.player, event.view, e) return true } } @@ -257,16 +258,16 @@ object DependencyManager { } // Return true if should bypass (either by a dependency or error) - fun tryClickAnvilResultBypass(event: InventoryClickEvent, inventory: AnvilInventory): Boolean { + fun tryClickAnvilResultBypass(event: InventoryClickEvent, view: AnvilView): Boolean { try { - return unsafeTryClickAnvilResultBypass(event, inventory) + return unsafeTryClickAnvilResultBypass(event, view) } catch (e: Exception) { - logExceptionAndClear(event.view.player, event.inventory, e) + logExceptionAndClear(event.view.player, event.view, e) return true } } - private fun unsafeTryClickAnvilResultBypass(event: InventoryClickEvent, inventory: AnvilInventory): Boolean { + private fun unsafeTryClickAnvilResultBypass(event: InventoryClickEvent, view: AnvilView): Boolean { // Run the event val bypassEvent = CAClickResultBypassEvent(event) Bukkit.getPluginManager().callEvent(bypassEvent) @@ -274,10 +275,10 @@ object DependencyManager { var bypass = bypassEvent.isCancelled // Test if disenchantment used event click - if (!bypass && (disenchantmentCompatibility?.testAnvilResult(event, inventory) == true)) bypass = true + if (!bypass && (disenchantmentCompatibility?.testAnvilResult(event, view) == true)) bypass = true // Test if haven bag used event click - if (!bypass && (havenBagsCompatibility?.testAnvilResult(event, inventory) == true)) bypass = true + if (!bypass && (havenBagsCompatibility?.testAnvilResult(event, view) == true)) bypass = true // Test if disenchantment used event click if (!bypass && (excellentEnchantsCompatibility?.testAnvilResult(event) == true)) bypass = true @@ -287,10 +288,10 @@ object DependencyManager { } // Test if the inventory is a gui(version specific) - if (!bypass && externGuiTester.testIfGui(event.view)) bypass = true + if (!bypass && externGuiTester.testIfGui(view)) bypass = true // Test if in an ax player warp rating gui - if (!bypass && (axPlayerWarpsCompatibility?.testIfGui(event.view.player) == true)) bypass = true + if (!bypass && (axPlayerWarpsCompatibility?.testIfGui(view.player) == true)) bypass = true return bypass } diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/MinecraftVersionUtil.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/MinecraftVersionUtil.kt index cbd2209..3e9f2ac 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/MinecraftVersionUtil.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/MinecraftVersionUtil.kt @@ -10,32 +10,6 @@ object MinecraftVersionUtil { if (version.major != 1) return null return when (version.minor) { - 17 -> when (version.patch) { - 0, 1 -> "1_17R1" - else -> null - } - - 18 -> when (version.patch) { - 0, 1 -> "1_18R1" - 2 -> "1_18R2" - else -> null - } - - 19 -> when (version.patch) { - 0, 1, 2 -> "1_19R1" - 3 -> "1_19R2" - 4 -> "1_19R3" - else -> null - } - - 20 -> when (version.patch) { - 0, 1 -> "1_20R1" - 2 -> "1_20R2" - 3, 4 -> "1_20R3" - 5, 6 -> "1_20R4" - else -> null - } - 21 -> when (version.patch) { 0, 1 -> "1_21R1" 2, 3 -> "1_21R2" @@ -46,6 +20,7 @@ object MinecraftVersionUtil { 11 -> "1_21R7" else -> null } + //TODO need to continue updating that for anvil gui test dependency.... else -> null } diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/DisenchantmentDependency.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/DisenchantmentDependency.kt index 690b384..8b9e78e 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/DisenchantmentDependency.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/DisenchantmentDependency.kt @@ -12,8 +12,8 @@ import org.bukkit.entity.Player import org.bukkit.event.Listener import org.bukkit.event.inventory.InventoryClickEvent import org.bukkit.event.inventory.PrepareAnvilEvent -import org.bukkit.inventory.AnvilInventory import org.bukkit.inventory.ItemStack +import org.bukkit.inventory.view.AnvilView import xyz.alexcrea.cuanvil.anvil.AnvilCost import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener import xyz.alexcrea.cuanvil.util.MetricsUtil.trackError @@ -59,14 +59,14 @@ class DisenchantmentDependency { DisenchantEvent.onEvent(event) if (event.result != null) { CustomAnvil.log("Detected pre anvil item extract bypass.") - AnvilXpUtil.setAnvilInvCost(event.inventory, event.view, player, AnvilCost(event.inventory.repairCost)) + AnvilXpUtil.setAnvilInvCost(event.view, player, AnvilCost(event.view.repairCost)) return true } ShatterEvent.onEvent(event) if (event.result != null) { CustomAnvil.log("Detected pre anvil split enchant bypass.") - AnvilXpUtil.setAnvilInvCost(event.inventory, event.view, player, AnvilCost(event.inventory.repairCost)) + AnvilXpUtil.setAnvilInvCost(event.view, player, AnvilCost(event.view.repairCost)) return true } @@ -74,18 +74,18 @@ class DisenchantmentDependency { return false } - fun testAnvilResult(event: InventoryClickEvent, inventory: AnvilInventory): Boolean { - val previousResultSlot = inventory.getItem(PrepareAnvilListener.ANVIL_OUTPUT_SLOT)?.clone() + fun testAnvilResult(event: InventoryClickEvent, view: AnvilView): Boolean { + val previousResultSlot = view.getItem(PrepareAnvilListener.ANVIL_OUTPUT_SLOT)?.clone() // Test event if change the result DisenchantClickEvent.onEvent(event) - if (!testAnvilInventoryChange(inventory, previousResultSlot) || event.isCancelled) { + if (!testAnvilChange(view, previousResultSlot) || event.isCancelled) { CustomAnvil.log("Detected anvil click item extract bypass.") return true } ShatterClickEvent.onEvent(event) - if (!testAnvilInventoryChange(inventory, previousResultSlot) || event.isCancelled) { + if (!testAnvilChange(view, previousResultSlot) || event.isCancelled) { CustomAnvil.log("Detected anvil click split enchant bypass.") return true } @@ -93,8 +93,8 @@ class DisenchantmentDependency { return false } - private fun testAnvilInventoryChange(inventory: AnvilInventory, previous: ItemStack?): Boolean { - val currentResult = inventory.getItem(PrepareAnvilListener.ANVIL_OUTPUT_SLOT) + private fun testAnvilChange(view: AnvilView, previous: ItemStack?): Boolean { + val currentResult = view.getItem(PrepareAnvilListener.ANVIL_OUTPUT_SLOT) return currentResult == previous } diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/HavenBagsDependency.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/HavenBagsDependency.kt index 6f30497..b9c3ce6 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/HavenBagsDependency.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/HavenBagsDependency.kt @@ -4,7 +4,7 @@ import io.delilaheve.CustomAnvil import org.bukkit.entity.Player import org.bukkit.event.inventory.InventoryClickEvent import org.bukkit.event.inventory.PrepareAnvilEvent -import org.bukkit.inventory.AnvilInventory +import org.bukkit.inventory.view.AnvilView import org.bukkit.plugin.RegisteredListener import valorless.havenbags.HavenBags import valorless.havenbags.features.BagSkin @@ -54,14 +54,14 @@ class HavenBagsDependency { bagSkin.onPrepareAnvil(event) if (event.result != null) { CustomAnvil.log("Detected pre anvil heaven bag anvil skin.") - AnvilXpUtil.setAnvilInvCost(event.inventory, event.view, player, AnvilCost(event.inventory.repairCost)) + AnvilXpUtil.setAnvilInvCost(event.view, player, AnvilCost(event.view.repairCost)) return true } bagUpgrade.onPrepareAnvil(event) if (event.result != null) { CustomAnvil.log("Detected pre anvil heaven bag anvil upgrade.") - AnvilXpUtil.setAnvilInvCost(event.inventory, event.view, player, AnvilCost(event.inventory.repairCost)) + AnvilXpUtil.setAnvilInvCost(event.view, player, AnvilCost(event.view.repairCost)) return true } @@ -69,8 +69,8 @@ class HavenBagsDependency { return false } - fun testAnvilResult(event: InventoryClickEvent, inventory: AnvilInventory): Boolean { - val result = inventory.getItem(PrepareAnvilListener.ANVIL_OUTPUT_SLOT)?.clone() + fun testAnvilResult(event: InventoryClickEvent, view: AnvilView): Boolean { + val result = view.getItem(PrepareAnvilListener.ANVIL_OUTPUT_SLOT)?.clone() if (HavenBags.IsBag(result)) { CustomAnvil.log("Detected anvil click haven bag bypass.") diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilCloseListener.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilCloseListener.kt index d707b56..85b9414 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilCloseListener.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilCloseListener.kt @@ -5,7 +5,7 @@ import org.bukkit.entity.Player import org.bukkit.event.EventHandler import org.bukkit.event.Listener import org.bukkit.event.inventory.InventoryCloseEvent -import org.bukkit.inventory.AnvilInventory +import org.bukkit.inventory.view.AnvilView import xyz.alexcrea.cuanvil.dependency.packet.PacketManager import xyz.alexcrea.cuanvil.util.dialog.AnvilRenameDialogUtil @@ -14,7 +14,7 @@ class AnvilCloseListener(private val packetManager: PacketManager) : Listener { @EventHandler fun onAnvilClose(event: InventoryCloseEvent){ val player = event.player - if(event.inventory !is AnvilInventory) return + if(event.view !is AnvilView) return if(player is Player && GameMode.CREATIVE != player.gameMode){ packetManager.setInstantBuild(player, false) } diff --git a/src/main/resources/enchant_conflict.yml b/src/main/resources/enchant_conflict.yml index 45d62c3..479273e 100644 --- a/src/main/resources/enchant_conflict.yml +++ b/src/main/resources/enchant_conflict.yml @@ -160,10 +160,7 @@ restriction_sweeping_edge: enchantments: [ minecraft:sweeping, minecraft:sweeping_edge ] notAffectedGroups: [ enchanted_book, swords ] -# Do not exist in 1.18, that mean useInFuture will be set to true -# useInFuture set to true also mean it will not warn if there is an issue restriction_swift_sneak: - useInFuture: true enchantments: [ minecraft:swift_sneak ] notAffectedGroups: [ enchanted_book, leggings ] diff --git a/src/main/resources/item_groups.yml b/src/main/resources/item_groups.yml index 8a62f3d..0f3cd06 100644 --- a/src/main/resources/item_groups.yml +++ b/src/main/resources/item_groups.yml @@ -121,7 +121,6 @@ wearable: - player_head - creeper_head - dragon_head - # do not exist in 1.18 but exist in future update - piglin_head groups: - armors diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index dab9997..9ee330f 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,7 +4,7 @@ prefix: "Custom Anvil" version: ${version} folia-supported: true description: Allow to customise anvil mechanics -api-version: 1.16 +api-version: 1.21 load: POSTWORLD authors: [ DelilahEve, alexcrea ] libraries: [${libraries}]