mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 08:14:00 +02:00
progress on 1.21 transition
This commit is contained in:
parent
922a7a0ed1
commit
ef5585fd42
23 changed files with 62 additions and 1239 deletions
2
.github/workflows/gradle.yml
vendored
2
.github/workflows/gradle.yml
vendored
|
|
@ -26,7 +26,7 @@ jobs:
|
||||||
contents: write
|
contents: write
|
||||||
|
|
||||||
env:
|
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"]'
|
MODRINTH_PLATFORMS: '["spigot", "paper", "purpur", "folia"]'
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
|
|
||||||
|
|
@ -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. \
|
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.
|
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) \
|
You do not need Protocolib unless you are using spigot above in 26.1 or above \
|
||||||
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.
|
But you should wait for update or announcement for new version containing new enchantable item or new enchantments.
|
||||||
Else it is, likely, fine to use the current version you are ussing on a new paper version
|
|
||||||
|
|
||||||
### For custom enchantment plugin developers
|
### For custom enchantment plugin developers
|
||||||
For information about the API, please refer to [the Wiki](https://github.com/alexcrea/CustomAnvil/wiki) \
|
For information about the API, please refer to [the Wiki](https://github.com/alexcrea/CustomAnvil/wiki) \
|
||||||
|
|
|
||||||
|
|
@ -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)
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
# ----------------------------------------------------
|
|
||||||
|
|
@ -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.
|
|
||||||
# ----------------------------------------------------
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
### Default Plugin's Configurations
|
### 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 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.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)
|
From 1.21.11 use [1.21.11 configurations](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21.11)
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,6 @@ plugins {
|
||||||
// Imitate needed class and method to support legacy version of EcoEnchant
|
// Imitate needed class and method to support legacy version of EcoEnchant
|
||||||
dependencies {
|
dependencies {
|
||||||
// Spigot api
|
// Spigot api
|
||||||
compileOnly("org.spigotmc:spigot-api:1.18-R0.1-SNAPSHOT")
|
compileOnly("org.spigotmc:spigot-api:1.21-R0.1-SNAPSHOT")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -21,8 +21,8 @@ repositories {
|
||||||
|
|
||||||
// Set target version
|
// Set target version
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
tasks.withType<JavaCompile>().configureEach {
|
||||||
sourceCompatibility = "16"
|
sourceCompatibility = "21"
|
||||||
targetCompatibility = "16"
|
targetCompatibility = "21"
|
||||||
|
|
||||||
options.encoding = "UTF-8"
|
options.encoding = "UTF-8"
|
||||||
}
|
}
|
||||||
|
|
@ -30,6 +30,6 @@ tasks.withType<JavaCompile>().configureEach {
|
||||||
kotlin {
|
kotlin {
|
||||||
compilerOptions {
|
compilerOptions {
|
||||||
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2)
|
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2)
|
||||||
jvmTarget.set(JvmTarget.JVM_16)
|
jvmTarget.set(JvmTarget.JVM_21)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,8 +21,8 @@ repositories {
|
||||||
|
|
||||||
// Set target version
|
// Set target version
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
tasks.withType<JavaCompile>().configureEach {
|
||||||
sourceCompatibility = "18"
|
sourceCompatibility = "21"
|
||||||
targetCompatibility = "18"
|
targetCompatibility = "21"
|
||||||
|
|
||||||
options.encoding = "UTF-8"
|
options.encoding = "UTF-8"
|
||||||
}
|
}
|
||||||
|
|
@ -30,6 +30,6 @@ tasks.withType<JavaCompile>().configureEach {
|
||||||
kotlin {
|
kotlin {
|
||||||
compilerOptions {
|
compilerOptions {
|
||||||
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2)
|
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2)
|
||||||
jvmTarget.set(JvmTarget.JVM_18)
|
jvmTarget.set(JvmTarget.JVM_21)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,37 +2,19 @@ package xyz.alexcrea.cuanvil.dependency.datapack
|
||||||
|
|
||||||
import io.papermc.paper.datapack.Datapack
|
import io.papermc.paper.datapack.Datapack
|
||||||
import org.bukkit.Bukkit
|
import org.bukkit.Bukkit
|
||||||
import org.bukkit.packs.DataPack
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
object DataPackTester {
|
object DataPackTester {
|
||||||
val legacyNames: List<String>
|
|
||||||
get() = Bukkit.getDataPackManager().dataPacks
|
|
||||||
.stream().filter { obj -> obj.isEnabled }
|
|
||||||
.map { pack -> pack.key.key }
|
|
||||||
.toList()
|
|
||||||
|
|
||||||
val enabledPacks: List<String>
|
val enabledPacks: List<String>
|
||||||
get() {
|
get() {
|
||||||
try {
|
return try {
|
||||||
// will throw error if do not exist
|
Bukkit.getDatapackManager().enabledPacks
|
||||||
Bukkit::class.java.getDeclaredMethod("getDatapackManager")
|
|
||||||
|
|
||||||
return Bukkit.getDatapackManager().enabledPacks
|
|
||||||
.stream().map { obj: Datapack -> obj.name }
|
.stream().map { obj: Datapack -> obj.name }
|
||||||
.toList()
|
.toList()
|
||||||
} catch (e: NoSuchMethodException) {
|
} catch (_: Exception){
|
||||||
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){
|
|
||||||
// Assume cause UnimplementedOperationException on mock server
|
// Assume cause UnimplementedOperationException on mock server
|
||||||
return Collections.emptyList()
|
Collections.emptyList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
package xyz.alexcrea.cuanvil.enchant;
|
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 class EnchantmentRarity {
|
||||||
|
|
||||||
public static final EnchantmentRarity NO_RARITY = new EnchantmentRarity(0, 0);
|
public static final EnchantmentRarity NO_RARITY = new EnchantmentRarity(0, 0);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package xyz.alexcrea.cuanvil.command
|
package xyz.alexcrea.cuanvil.command
|
||||||
|
|
||||||
import com.github.stefvanschie.inventoryframework.inventoryview.interface_.InventoryViewUtil
|
|
||||||
import io.delilaheve.CustomAnvil
|
import io.delilaheve.CustomAnvil
|
||||||
import net.md_5.bungee.api.chat.ClickEvent
|
import net.md_5.bungee.api.chat.ClickEvent
|
||||||
import net.md_5.bungee.api.chat.HoverEvent
|
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.entity.Player
|
||||||
import org.bukkit.event.inventory.InventoryType
|
import org.bukkit.event.inventory.InventoryType
|
||||||
import org.bukkit.event.inventory.PrepareAnvilEvent
|
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.ItemStack
|
||||||
import org.bukkit.inventory.meta.Damageable
|
import org.bukkit.inventory.meta.Damageable
|
||||||
import org.bukkit.inventory.meta.EnchantmentStorageMeta
|
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?) {
|
fun simulateAnvil(player: Player, stb: StringBuilder, left: ItemStack?, right: ItemStack?, result: ItemStack?) {
|
||||||
var invView: InventoryView
|
var invView: AnvilView
|
||||||
var event: PrepareAnvilEvent
|
var event: PrepareAnvilEvent
|
||||||
try {
|
try {
|
||||||
val fakeInv = Bukkit.createInventory(player, InventoryType.ANVIL)
|
val fakeInv = Bukkit.createInventory(player, InventoryType.ANVIL)
|
||||||
|
|
@ -275,42 +272,40 @@ class DiagnosticExecutor: CASubCommand() {
|
||||||
val anvilTypeField = menuTypeClazz.getField("ANVIL")
|
val anvilTypeField = menuTypeClazz.getField("ANVIL")
|
||||||
val anvilType = anvilTypeField.get(null)
|
val anvilType = anvilTypeField.get(null)
|
||||||
val createMethod = anvilType.javaClass.getMethod("create", HumanEntity::class.java)
|
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)
|
player.openInventory(invView)
|
||||||
|
|
||||||
val anvilViewClass = Class.forName("org.bukkit.inventory.view.AnvilView")
|
val constructor = PrepareAnvilEvent::class.java.getConstructor(AnvilView::class.java, ItemStack::class.java)
|
||||||
val constructor = PrepareAnvilEvent::class.java.getConstructor(anvilViewClass, ItemStack::class.java)
|
|
||||||
event = constructor.newInstance(invView, result)
|
event = constructor.newInstance(invView, result)
|
||||||
}
|
}
|
||||||
|
|
||||||
val fakeInv = InventoryViewUtil.getInstance().getTopInventory(invView) as AnvilInventory
|
invView.setItem(0, left)
|
||||||
fakeInv.setItem(0, left)
|
invView.setItem(1, right)
|
||||||
fakeInv.setItem(1, right)
|
|
||||||
|
|
||||||
val xp = fakeInv.repairCost
|
val xp = invView.repairCost
|
||||||
val maxXp = fakeInv.maximumRepairCost
|
val maxXp = invView.maximumRepairCost
|
||||||
val mergeResult = fakeInv.getItem(2)
|
val mergeResult = invView.getItem(2)
|
||||||
stb.append("\n${if(result == mergeResult) "E" else "Une"}xpected Result")
|
stb.append("\n${if(result == mergeResult) "E" else "Une"}xpected Result")
|
||||||
|
|
||||||
PrepareAnvilListener().anvilCombineCheck(event)
|
PrepareAnvilListener().anvilCombineCheck(event)
|
||||||
// Now we check if item and xp same
|
// Now we check if item and xp same
|
||||||
stb.append("\nXP/Max XP: ")
|
stb.append("\nXP/Max XP: ")
|
||||||
.append(if(fakeInv.repairCost == xp) "Correct" else "Incorrect")
|
.append(if(invView.repairCost == xp) "Correct" else "Incorrect")
|
||||||
.append("/")
|
.append("/")
|
||||||
.append(if(fakeInv.maximumRepairCost == maxXp) "Correct" else "Incorrect")
|
.append(if(invView.maximumRepairCost == maxXp) "Correct" else "Incorrect")
|
||||||
.append(" (${fakeInv.repairCost} $xp|${fakeInv.maximumRepairCost} $maxXp)")
|
.append(" (${invView.repairCost} $xp|${invView.maximumRepairCost} $maxXp)")
|
||||||
.append("\nMerge result: ")
|
.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
|
PrepareAnvilListener.IS_EMPTY_TEST = true
|
||||||
Bukkit.getPluginManager().callEvent(event)
|
Bukkit.getPluginManager().callEvent(event)
|
||||||
stb.append("\nNull result test: ")
|
stb.append("\nNull result test: ")
|
||||||
.append(if(event.result == null) "Correct" else "Incorrect")
|
.append(if(event.result == null) "Correct" else "Incorrect")
|
||||||
|
|
||||||
fakeInv.setItem(0, null)
|
invView.setItem(0, null)
|
||||||
fakeInv.setItem(1, null)
|
invView.setItem(1, null)
|
||||||
fakeInv.setItem(2, null)
|
invView.setItem(2, null)
|
||||||
player.closeInventory()
|
player.closeInventory()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import org.bukkit.inventory.Inventory
|
||||||
import org.bukkit.inventory.InventoryView
|
import org.bukkit.inventory.InventoryView
|
||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilCost
|
import xyz.alexcrea.cuanvil.anvil.AnvilCost
|
||||||
|
import org.bukkit.inventory.view.AnvilView
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilUseType
|
import xyz.alexcrea.cuanvil.anvil.AnvilUseType
|
||||||
import xyz.alexcrea.cuanvil.api.event.listener.CAClickResultBypassEvent
|
import xyz.alexcrea.cuanvil.api.event.listener.CAClickResultBypassEvent
|
||||||
import xyz.alexcrea.cuanvil.api.event.listener.CAEarlyPreAnvilBypassEvent
|
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
|
// Just in case to avoid illegal items
|
||||||
inventory.setItem(ANVIL_OUTPUT_SLOT, null)
|
view.setItem(ANVIL_OUTPUT_SLOT, null)
|
||||||
|
|
||||||
logException(target, e)
|
logException(target, e)
|
||||||
}
|
}
|
||||||
|
|
@ -177,7 +178,7 @@ object DependencyManager {
|
||||||
try {
|
try {
|
||||||
return earlyUnsafeTryEventPreAnvilBypass(event, player)
|
return earlyUnsafeTryEventPreAnvilBypass(event, player)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
logExceptionAndClear(event.view.player, event.inventory, e)
|
logExceptionAndClear(event.view.player, event.view, e)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -203,7 +204,7 @@ object DependencyManager {
|
||||||
try {
|
try {
|
||||||
return unsafeTryEventPreAnvilBypass(event, player)
|
return unsafeTryEventPreAnvilBypass(event, player)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
logExceptionAndClear(event.view.player, event.inventory, e)
|
logExceptionAndClear(event.view.player, event.view, e)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -257,16 +258,16 @@ object DependencyManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return true if should bypass (either by a dependency or error)
|
// 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 {
|
try {
|
||||||
return unsafeTryClickAnvilResultBypass(event, inventory)
|
return unsafeTryClickAnvilResultBypass(event, view)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
logExceptionAndClear(event.view.player, event.inventory, e)
|
logExceptionAndClear(event.view.player, event.view, e)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun unsafeTryClickAnvilResultBypass(event: InventoryClickEvent, inventory: AnvilInventory): Boolean {
|
private fun unsafeTryClickAnvilResultBypass(event: InventoryClickEvent, view: AnvilView): Boolean {
|
||||||
// Run the event
|
// Run the event
|
||||||
val bypassEvent = CAClickResultBypassEvent(event)
|
val bypassEvent = CAClickResultBypassEvent(event)
|
||||||
Bukkit.getPluginManager().callEvent(bypassEvent)
|
Bukkit.getPluginManager().callEvent(bypassEvent)
|
||||||
|
|
@ -274,10 +275,10 @@ object DependencyManager {
|
||||||
var bypass = bypassEvent.isCancelled
|
var bypass = bypassEvent.isCancelled
|
||||||
|
|
||||||
// Test if disenchantment used event click
|
// 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
|
// 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
|
// Test if disenchantment used event click
|
||||||
if (!bypass && (excellentEnchantsCompatibility?.testAnvilResult(event) == true)) bypass = true
|
if (!bypass && (excellentEnchantsCompatibility?.testAnvilResult(event) == true)) bypass = true
|
||||||
|
|
@ -287,10 +288,10 @@ object DependencyManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test if the inventory is a gui(version specific)
|
// 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
|
// 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
|
return bypass
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,32 +10,6 @@ object MinecraftVersionUtil {
|
||||||
if (version.major != 1) return null
|
if (version.major != 1) return null
|
||||||
|
|
||||||
return when (version.minor) {
|
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) {
|
21 -> when (version.patch) {
|
||||||
0, 1 -> "1_21R1"
|
0, 1 -> "1_21R1"
|
||||||
2, 3 -> "1_21R2"
|
2, 3 -> "1_21R2"
|
||||||
|
|
@ -46,6 +20,7 @@ object MinecraftVersionUtil {
|
||||||
11 -> "1_21R7"
|
11 -> "1_21R7"
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
|
//TODO need to continue updating that for anvil gui test dependency....
|
||||||
|
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,8 @@ import org.bukkit.entity.Player
|
||||||
import org.bukkit.event.Listener
|
import org.bukkit.event.Listener
|
||||||
import org.bukkit.event.inventory.InventoryClickEvent
|
import org.bukkit.event.inventory.InventoryClickEvent
|
||||||
import org.bukkit.event.inventory.PrepareAnvilEvent
|
import org.bukkit.event.inventory.PrepareAnvilEvent
|
||||||
import org.bukkit.inventory.AnvilInventory
|
|
||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
|
import org.bukkit.inventory.view.AnvilView
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilCost
|
import xyz.alexcrea.cuanvil.anvil.AnvilCost
|
||||||
import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener
|
import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener
|
||||||
import xyz.alexcrea.cuanvil.util.MetricsUtil.trackError
|
import xyz.alexcrea.cuanvil.util.MetricsUtil.trackError
|
||||||
|
|
@ -59,14 +59,14 @@ class DisenchantmentDependency {
|
||||||
DisenchantEvent.onEvent(event)
|
DisenchantEvent.onEvent(event)
|
||||||
if (event.result != null) {
|
if (event.result != null) {
|
||||||
CustomAnvil.log("Detected pre anvil item extract bypass.")
|
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
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
ShatterEvent.onEvent(event)
|
ShatterEvent.onEvent(event)
|
||||||
if (event.result != null) {
|
if (event.result != null) {
|
||||||
CustomAnvil.log("Detected pre anvil split enchant bypass.")
|
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
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -74,18 +74,18 @@ class DisenchantmentDependency {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
fun testAnvilResult(event: InventoryClickEvent, inventory: AnvilInventory): Boolean {
|
fun testAnvilResult(event: InventoryClickEvent, view: AnvilView): Boolean {
|
||||||
val previousResultSlot = inventory.getItem(PrepareAnvilListener.ANVIL_OUTPUT_SLOT)?.clone()
|
val previousResultSlot = view.getItem(PrepareAnvilListener.ANVIL_OUTPUT_SLOT)?.clone()
|
||||||
|
|
||||||
// Test event if change the result
|
// Test event if change the result
|
||||||
DisenchantClickEvent.onEvent(event)
|
DisenchantClickEvent.onEvent(event)
|
||||||
if (!testAnvilInventoryChange(inventory, previousResultSlot) || event.isCancelled) {
|
if (!testAnvilChange(view, previousResultSlot) || event.isCancelled) {
|
||||||
CustomAnvil.log("Detected anvil click item extract bypass.")
|
CustomAnvil.log("Detected anvil click item extract bypass.")
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
ShatterClickEvent.onEvent(event)
|
ShatterClickEvent.onEvent(event)
|
||||||
if (!testAnvilInventoryChange(inventory, previousResultSlot) || event.isCancelled) {
|
if (!testAnvilChange(view, previousResultSlot) || event.isCancelled) {
|
||||||
CustomAnvil.log("Detected anvil click split enchant bypass.")
|
CustomAnvil.log("Detected anvil click split enchant bypass.")
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
@ -93,8 +93,8 @@ class DisenchantmentDependency {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun testAnvilInventoryChange(inventory: AnvilInventory, previous: ItemStack?): Boolean {
|
private fun testAnvilChange(view: AnvilView, previous: ItemStack?): Boolean {
|
||||||
val currentResult = inventory.getItem(PrepareAnvilListener.ANVIL_OUTPUT_SLOT)
|
val currentResult = view.getItem(PrepareAnvilListener.ANVIL_OUTPUT_SLOT)
|
||||||
|
|
||||||
return currentResult == previous
|
return currentResult == previous
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import io.delilaheve.CustomAnvil
|
||||||
import org.bukkit.entity.Player
|
import org.bukkit.entity.Player
|
||||||
import org.bukkit.event.inventory.InventoryClickEvent
|
import org.bukkit.event.inventory.InventoryClickEvent
|
||||||
import org.bukkit.event.inventory.PrepareAnvilEvent
|
import org.bukkit.event.inventory.PrepareAnvilEvent
|
||||||
import org.bukkit.inventory.AnvilInventory
|
import org.bukkit.inventory.view.AnvilView
|
||||||
import org.bukkit.plugin.RegisteredListener
|
import org.bukkit.plugin.RegisteredListener
|
||||||
import valorless.havenbags.HavenBags
|
import valorless.havenbags.HavenBags
|
||||||
import valorless.havenbags.features.BagSkin
|
import valorless.havenbags.features.BagSkin
|
||||||
|
|
@ -54,14 +54,14 @@ class HavenBagsDependency {
|
||||||
bagSkin.onPrepareAnvil(event)
|
bagSkin.onPrepareAnvil(event)
|
||||||
if (event.result != null) {
|
if (event.result != null) {
|
||||||
CustomAnvil.log("Detected pre anvil heaven bag anvil skin.")
|
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
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
bagUpgrade.onPrepareAnvil(event)
|
bagUpgrade.onPrepareAnvil(event)
|
||||||
if (event.result != null) {
|
if (event.result != null) {
|
||||||
CustomAnvil.log("Detected pre anvil heaven bag anvil upgrade.")
|
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
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -69,8 +69,8 @@ class HavenBagsDependency {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
fun testAnvilResult(event: InventoryClickEvent, inventory: AnvilInventory): Boolean {
|
fun testAnvilResult(event: InventoryClickEvent, view: AnvilView): Boolean {
|
||||||
val result = inventory.getItem(PrepareAnvilListener.ANVIL_OUTPUT_SLOT)?.clone()
|
val result = view.getItem(PrepareAnvilListener.ANVIL_OUTPUT_SLOT)?.clone()
|
||||||
|
|
||||||
if (HavenBags.IsBag(result)) {
|
if (HavenBags.IsBag(result)) {
|
||||||
CustomAnvil.log("Detected anvil click haven bag bypass.")
|
CustomAnvil.log("Detected anvil click haven bag bypass.")
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import org.bukkit.entity.Player
|
||||||
import org.bukkit.event.EventHandler
|
import org.bukkit.event.EventHandler
|
||||||
import org.bukkit.event.Listener
|
import org.bukkit.event.Listener
|
||||||
import org.bukkit.event.inventory.InventoryCloseEvent
|
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.dependency.packet.PacketManager
|
||||||
import xyz.alexcrea.cuanvil.util.dialog.AnvilRenameDialogUtil
|
import xyz.alexcrea.cuanvil.util.dialog.AnvilRenameDialogUtil
|
||||||
|
|
||||||
|
|
@ -14,7 +14,7 @@ class AnvilCloseListener(private val packetManager: PacketManager) : Listener {
|
||||||
@EventHandler
|
@EventHandler
|
||||||
fun onAnvilClose(event: InventoryCloseEvent){
|
fun onAnvilClose(event: InventoryCloseEvent){
|
||||||
val player = event.player
|
val player = event.player
|
||||||
if(event.inventory !is AnvilInventory) return
|
if(event.view !is AnvilView) return
|
||||||
if(player is Player && GameMode.CREATIVE != player.gameMode){
|
if(player is Player && GameMode.CREATIVE != player.gameMode){
|
||||||
packetManager.setInstantBuild(player, false)
|
packetManager.setInstantBuild(player, false)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -160,10 +160,7 @@ restriction_sweeping_edge:
|
||||||
enchantments: [ minecraft:sweeping, minecraft:sweeping_edge ]
|
enchantments: [ minecraft:sweeping, minecraft:sweeping_edge ]
|
||||||
notAffectedGroups: [ enchanted_book, swords ]
|
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:
|
restriction_swift_sneak:
|
||||||
useInFuture: true
|
|
||||||
enchantments: [ minecraft:swift_sneak ]
|
enchantments: [ minecraft:swift_sneak ]
|
||||||
notAffectedGroups: [ enchanted_book, leggings ]
|
notAffectedGroups: [ enchanted_book, leggings ]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -121,7 +121,6 @@ wearable:
|
||||||
- player_head
|
- player_head
|
||||||
- creeper_head
|
- creeper_head
|
||||||
- dragon_head
|
- dragon_head
|
||||||
# do not exist in 1.18 but exist in future update
|
|
||||||
- piglin_head
|
- piglin_head
|
||||||
groups:
|
groups:
|
||||||
- armors
|
- armors
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ prefix: "Custom Anvil"
|
||||||
version: ${version}
|
version: ${version}
|
||||||
folia-supported: true
|
folia-supported: true
|
||||||
description: Allow to customise anvil mechanics
|
description: Allow to customise anvil mechanics
|
||||||
api-version: 1.16
|
api-version: 1.21
|
||||||
load: POSTWORLD
|
load: POSTWORLD
|
||||||
authors: [ DelilahEve, alexcrea ]
|
authors: [ DelilahEve, alexcrea ]
|
||||||
libraries: [${libraries}]
|
libraries: [${libraries}]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue