Merge branch 'v1.x.x' into v2.x.x-merging

# Conflicts:
#	build.gradle.kts
#	nms/nms-common/build.gradle.kts
#	nms/nms-common/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/ExternGuiTester.kt
#	nms/nms-paper/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/datapack/DataPackTester.kt
#	nms/nms-paper/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/scheduler/FoliaScheduler.kt
#	nms/v1_20R3/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/scheduler/FoliaScheduler.kt
#	nms/v1_21R6/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/versions/V1_21R6_PacketManager.kt
#	settings.gradle.kts
#	src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/GuiTesterSelector.kt
#	src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/PacketManager.kt
#	src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/PacketManagerSelector.kt
#	src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/PaperPacketManager.kt
#	src/main/kotlin/xyz/alexcrea/cuanvil/dependency/scheduler/FoliaScheduler.kt
This commit is contained in:
alexcrea 2025-12-30 01:18:00 +01:00
commit ff4be622f8
Signed by: alexcrea
GPG key ID: E346CD16413450E3
19 changed files with 1523 additions and 33 deletions

View file

@ -88,7 +88,10 @@ as low priority as I work for the plugin on my free time for free.
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.
Minecraft version 1.17 to 1.21.7 do not need any dependency. Other version need ProtocoLib enabled on your server for this feature. \ Minecraft version 1.18 to latest marked as supported do not need any ProtocoLib dependency. \
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.
Other version need ProtocoLib enabled on your server for this feature. \
You can also wait for an update of the plugin to support a newer version. You can also wait for an update of the plugin to support a newer version.
Please note that 1.16.5 to 1.17.1 are not officially supported. Run at your own risk. Please note that 1.16.5 to 1.17.1 are not officially supported. Run at your own risk.
@ -100,9 +103,7 @@ For information about the API, please refer to [the Wiki](https://github.com/ale
--- ---
### Default Plugin's Configurations ### Default Plugin's Configurations
For 1.18 to 1.20.6 use the [1.18 configurations](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.18)\ see [Here](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs)
For 1.21 to 1.21.8 use the [1.21 configurations](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21)\
From 1.21.9 use the [1.21.9 configurations](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21)
--- ---
Custom anvil [use bstat](https://bstats.org/plugin/bukkit/Unsafe%20Enchants%20Plus/20923) for metric. You can [disable it](https://bstats.org/getting-started) if you like. Custom anvil [use bstat](https://bstats.org/plugin/bukkit/Unsafe%20Enchants%20Plus/20923) for metric. You can [disable it](https://bstats.org/getting-started) if you like.

View file

@ -8,7 +8,7 @@ plugins {
kotlin("jvm") version "2.1.0" kotlin("jvm") version "2.1.0"
java java
id("org.jetbrains.dokka").version("1.9.20") id("org.jetbrains.dokka").version("1.9.20")
id("com.gradleup.shadow").version("9.0.0-beta16") id("com.gradleup.shadow").version("9.3.0")
// Maven publish // Maven publish
`maven-publish` `maven-publish`
signing signing
@ -31,6 +31,9 @@ repositories {
maven(url = "https://repo.nightexpressdev.com/releases") maven(url = "https://repo.nightexpressdev.com/releases")
} }
val reobfNMS = providers.gradleProperty("subprojects.reobfnms")
.get().split(",")
dependencies { dependencies {
// Paper // Paper
paperweight.paperDevBundle("1.21.10-R0.1-SNAPSHOT") paperweight.paperDevBundle("1.21.10-R0.1-SNAPSHOT")
@ -154,7 +157,8 @@ tasks {
filesMatching("plugin.yml") { filesMatching("plugin.yml") {
expand( expand(
"version" to effectiveVersion, "version" to effectiveVersion,
"libraries" to " \"org.jetbrains.kotlin:kotlin-stdlib:2.1.0\" " "libraries" to " \"org.jetbrains.kotlin:kotlin-stdlib:2.1.0\" " +
", \"net.kyori:adventure-platform-bukkit:4.4.1\""
) )
} }
@ -254,13 +258,9 @@ object Meta {
const val snapshot = "https://s01.oss.sonatype.org/content/repositories/snapshots/" const val snapshot = "https://s01.oss.sonatype.org/content/repositories/snapshots/"
} }
val disalowedDependency = setOf( val disallowedDependency = HashSet<String>()
"nms-common", "kotlin-stdlib", disallowedDependency.addAll(reobfNMS)
"v1_17R1", disallowedDependency.addAll(listOf("nms-common", "nms-paper", "kotlin-stdlib"))
"v1_18R1", "v1_18R2", "v1_19R1", "v1_19R2", "v1_19R3",
"v1_20R1", "v1_20R2", "v1_20R3", "v1_20R4",
"v1_21R1", "v1_21R2", "v1_21R3", "v1_21R4", "v1_21R5"
)
publishing { publishing {
repositories { repositories {
@ -328,7 +328,7 @@ publishing {
val artifactNode = ((child as Node).get("artifactId") as NodeList)[0] as Node val artifactNode = ((child as Node).get("artifactId") as NodeList)[0] as Node
val artifactID = artifactNode.value() as String val artifactID = artifactNode.value() as String
if(disalowedDependency.contains(artifactID)) { if(disallowedDependency.contains(artifactID)) {
toRemove.add(child) toRemove.add(child)
} }
} }

View file

@ -0,0 +1,6 @@
### Default Plugin's Configurations For 1.21.11
- [config.yml](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21.11/config.yml)
- [enchant_conflict.yml](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21.11/enchant_conflict.yml)
- [item_groups.yml](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21.11/item_groups.yml)
- [unit_repair_item.yml](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21.11/unit_repair_item.yml)
- [custom_recipes.yml](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21.11/custom_recipes.yml)

View file

@ -0,0 +1,427 @@
#
# 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 !
#
# 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 search for minimessage formating https://docs.papermc.io/adventure/minimessage/format/
# Note that only color and decoration tags are allowed for minimisage in the v1 version of this plugin
# but any global tag will be allowed later when v2 release
allow_color_code: false
allow_hexadecimal_color: false
allow_minimessage: 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
# Default limit to apply to any enchants missing from enchant_limits
#
# Valid values include 1 to 1000
default_limit: 5
# 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 1 - 255 for each enchantment
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
minecraft:density: 5
minecraft:breach: 4
minecraft:wind_burst: 3
minecraft:lunge: 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
minecraft:density:
item: 2
book: 1
minecraft:breach:
item: 4
book: 2
minecraft:wind_burst:
item: 4
book: 2
minecraft:lunge:
item: 2
book: 1
# 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)
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
use_cost: 0
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
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
# Whether to show debug logging
debug_log: false
# Whether to show verbose debug logging
debug_log_verbose: false
# In case something when wrong with CustomAnvil packet manager.
# If you see "missing class exception" or similar you may test this.
# If enabled and Protocolib absent or disabled "Replace to expensive" will not work.
# ProtocoLib may also be used if the server is in an "unsupported" version even if this option is disabled.
force_protocolib: false
configVersion: 1.15.5
lowMinecraftVersion: 1.21.11

View file

@ -0,0 +1,5 @@
# ----------------------------------------------------
# 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
# ----------------------------------------------------

View file

@ -0,0 +1,398 @@
#
# 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
- mace
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
- mace
- spears
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
- spears
restriction_looting:
enchantments:
- minecraft:looting
notAffectedGroups:
- enchanted_book
- swords
- spears
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
- mace
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
- minecraft:density
- minecraft:breach
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
restriction_density:
enchantments:
- minecraft:density
notAffectedGroups:
- mace
- enchanted_book
restriction_breach:
enchantments:
- minecraft:breach
notAffectedGroups:
- mace
- enchanted_book
restriction_wind_burst:
enchantments:
- minecraft:wind_burst
notAffectedGroups:
- mace
- enchanted_book
restriction_lunge:
enchantments:
- minecraft:lunge
notAffectedGroups:
- spears
- enchanted_book
# ----------------------------------------------------
# Bellow is for custom conflicts.
# This is also where conflict create from the gui will be placed.
# ----------------------------------------------------

View file

@ -0,0 +1,247 @@
#
# 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
- copper_sword
axes:
type: include
items:
- wooden_axe
- stone_axe
- iron_axe
- diamond_axe
- golden_axe
- netherite_axe
- copper_axe
melee_weapons:
type: include
groups:
- swords
- axes
- spears
helmets:
type: include
items:
- leather_helmet
- chainmail_helmet
- iron_helmet
- diamond_helmet
- golden_helmet
- netherite_helmet
- turtle_helmet
- copper_helmet
chestplate:
type: include
items:
- leather_chestplate
- chainmail_chestplate
- iron_chestplate
- diamond_chestplate
- golden_chestplate
- netherite_chestplate
- copper_chestplate
leggings:
type: include
items:
- leather_leggings
- chainmail_leggings
- iron_leggings
- diamond_leggings
- golden_leggings
- netherite_leggings
- copper_leggings
boots:
type: include
items:
- leather_boots
- chainmail_boots
- iron_boots
- diamond_boots
- golden_boots
- netherite_boots
- copper_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
- piglin_head
groups:
- armors
pickaxes:
type: include
items:
- wooden_pickaxe
- stone_pickaxe
- iron_pickaxe
- diamond_pickaxe
- golden_pickaxe
- netherite_pickaxe
- copper_pickaxe
shovels:
type: include
items:
- wooden_shovel
- stone_shovel
- iron_shovel
- diamond_shovel
- golden_shovel
- netherite_shovel
- copper_shovel
hoes:
type: include
items:
- wooden_hoe
- stone_hoe
- iron_hoe
- diamond_hoe
- golden_hoe
- netherite_hoe
- copper_hoe
tools:
type: include
groups:
- pickaxes
- shovels
- hoes
- 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
- brush
groups:
- melee_weapons
- tools
- armors
- trident
- bow
- crossbow
- fishing_rod
- shears
- mace
can_vanish:
type: include
items:
- compass
groups:
- wearable
- can_unbreak
mace:
type: include
items:
- mace
spears:
type: include
items:
- wooden_spear
- golden_spear
- stone_spear
- copper_spear
- iron_spear
- diamond_spear
- netherite_spear

View file

@ -0,0 +1,220 @@
#
# 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
diamond_spear: 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
netherite_spear: 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
golden_spear: 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
iron_spear: 0.25
cobblestone:
stone_sword: 0.25
stone_pickaxe: 0.25
stone_axe: 0.25
stone_shovel: 0.25
stone_hoe: 0.25
stone_spear: 0.25
cobbled_deepslate:
stone_sword: 0.25
stone_pickaxe: 0.25
stone_axe: 0.25
stone_shovel: 0.25
stone_hoe: 0.25
stone_spear: 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
wooden_spear: 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
wooden_spear: 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
wooden_spear: 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
wooden_spear: 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
wooden_spear: 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
wooden_spear: 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
wooden_spear: 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
wooden_spear: 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
wooden_spear: 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
wooden_spear: 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
wooden_spear: 0.25
breeze_rod:
mace: 0.25
copper_ingot:
copper_helmet: 0.25
copper_chestplate: 0.25
copper_leggings: 0.25
copper_boots: 0.25
copper_pickaxe: 0.25
copper_shovel: 0.25
copper_hoe: 0.25
copper_axe: 0.25
copper_sword: 0.25
copper_spear: 0.25

View file

@ -1,3 +1,5 @@
### Default Plugin's Configurations ### Default Plugin's Configurations
For 1.18 to 1.20.6 use [1.18 configurations](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.18) \ From 1.18 to 1.20.6 use [1.18 configurations](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.18) \
For 1.21 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.11 use [1.21.11 configurations](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21.11)

View file

@ -4,3 +4,6 @@ kotlin.code.style=official
signing.secretKeyRingFile=~/.gnupg/secring.gpg signing.secretKeyRingFile=~/.gnupg/secring.gpg
kotlin.daemon.jvmargs=-Xmx8G kotlin.daemon.jvmargs=-Xmx8G
# list of nms
subprojects.reobfnms=v1_17R1,v1_18R1,v1_18R2,v1_19R1,v1_19R2,v1_19R3,v1_20R1,v1_20R2,v1_20R3,v1_20R4,v1_21R1,v1_21R2,v1_21R3,v1_21R4,v1_21R5,v1_21R6,v1_21R7

View file

@ -31,7 +31,8 @@ public class UpdateHandler {
new Version(1, 6, 7), PUpdate_1_6_7::handleUpdate, new Version(1, 6, 7), PUpdate_1_6_7::handleUpdate,
new Version(1, 8, 0), PUpdate_1_8_0::handleUpdate, new Version(1, 8, 0), PUpdate_1_8_0::handleUpdate,
new Version(1, 11, 0), PUpdate_1_11_0::handleUpdate, new Version(1, 11, 0), PUpdate_1_11_0::handleUpdate,
new Version(1, 15, 5), PUpdate_1_15_5::handleUpdate new Version(1, 15, 5), PUpdate_1_15_5::handleUpdate,
new Version(1, 15, 6), PUpdate_1_15_6::handleUpdate
); );
private static final List<MCUpdate> mcUpdateMap = List.of( private static final List<MCUpdate> mcUpdateMap = List.of(
@ -70,7 +71,7 @@ public class UpdateHandler {
boolean hadUpdate = false; boolean hadUpdate = false;
for (MCUpdate mcUpdate : mcUpdateMap) { for (MCUpdate mcUpdate : mcUpdateMap) {
hadUpdate |= mcUpdate.handleUpdate(current); hadUpdate |= mcUpdate.handleUpdate(current, hadUpdate);
} }
if (hadUpdate) { if (hadUpdate) {

View file

@ -13,7 +13,7 @@ public abstract class MCUpdate {
this.version = version; this.version = version;
} }
public boolean handleUpdate(Version current){ public boolean handleUpdate(Version current, boolean hadUpdate){
// Test if we are running in this update version or better // Test if we are running in this update version or better
if(version.greaterThan(current)) if(version.greaterThan(current))
return false; return false;
@ -25,7 +25,9 @@ public abstract class MCUpdate {
if(this.version.lesserEqual(version)) return false; if(this.version.lesserEqual(version)) return false;
} }
CustomAnvil.instance.getLogger().info("Updating config to support " + version +" ..."); if(!hadUpdate){
CustomAnvil.instance.getLogger().info("Updating config to support minecraft " + current +" ...");
}
doUpdate(); doUpdate();
return true; return true;
} }

View file

@ -17,6 +17,7 @@ public class Update_1_21_11 extends MCUpdate{
var baseConfig = ConfigHolder.DEFAULT_CONFIG.getConfig(); var baseConfig = ConfigHolder.DEFAULT_CONFIG.getConfig();
var groupConfig = ConfigHolder.ITEM_GROUP_HOLDER.getConfig(); var groupConfig = ConfigHolder.ITEM_GROUP_HOLDER.getConfig();
var conflictConfig = ConfigHolder.CONFLICT_HOLDER.getConfig(); var conflictConfig = ConfigHolder.CONFLICT_HOLDER.getConfig();
var unitConfig = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig();
// Create spear group // Create spear group
groupConfig.set("spears.type", "include"); groupConfig.set("spears.type", "include");
@ -36,6 +37,28 @@ public class Update_1_21_11 extends MCUpdate{
addAbsentToList(conflictConfig, "restriction_knockback.notAffectedGroups", "spears"); addAbsentToList(conflictConfig, "restriction_knockback.notAffectedGroups", "spears");
addAbsentToList(conflictConfig, "restriction_fire_aspect.notAffectedGroups", "spears"); addAbsentToList(conflictConfig, "restriction_fire_aspect.notAffectedGroups", "spears");
// Unit repair for spears
unitConfig.set("gold_ingot.golden_spear", 0.25);
unitConfig.set("copper_ingot.copper_spear", 0.25);
unitConfig.set("iron_ingot.iron_spear", 0.25);
unitConfig.set("diamond.diamond_spear", 0.25);
unitConfig.set("netherite_ingot.netherite_spear", 0.25);
unitConfig.set("cobblestone.stone_spear", 0.25);
unitConfig.set("cobbled_deepslate.stone_spear", 0.25);
unitConfig.set("oak_planks.wooden_spear", 0.25);
unitConfig.set("spruce_planks.wooden_spear", 0.25);
unitConfig.set("birch_planks.wooden_spear", 0.25);
unitConfig.set("jungle_planks.wooden_spear", 0.25);
unitConfig.set("acacia_planks.wooden_spear", 0.25);
unitConfig.set("dark_oak_planks.wooden_spear", 0.25);
unitConfig.set("mangrove_planks.wooden_spear", 0.25);
unitConfig.set("cherry_planks.wooden_spear", 0.25);
unitConfig.set("bamboo_planks.wooden_spear", 0.25);
unitConfig.set("crimson_planks.wooden_spear", 0.25);
unitConfig.set("warped_planks.wooden_spear", 0.25);
// Create lunge enchant value and group // Create lunge enchant value and group
baseConfig.set("enchant_limits.minecraft:lunge", 3); baseConfig.set("enchant_limits.minecraft:lunge", 3);
baseConfig.set("enchant_values.minecraft:lunge.item", 2); baseConfig.set("enchant_values.minecraft:lunge.item", 2);
@ -51,6 +74,7 @@ public class Update_1_21_11 extends MCUpdate{
ConfigHolder.DEFAULT_CONFIG.saveToDisk(true); ConfigHolder.DEFAULT_CONFIG.saveToDisk(true);
ConfigHolder.ITEM_GROUP_HOLDER.saveToDisk(true); ConfigHolder.ITEM_GROUP_HOLDER.saveToDisk(true);
ConfigHolder.CONFLICT_HOLDER.saveToDisk(true); ConfigHolder.CONFLICT_HOLDER.saveToDisk(true);
ConfigHolder.UNIT_REPAIR_HOLDER.saveToDisk(true);
// imply reload of CONFLICT_HOLDER // imply reload of CONFLICT_HOLDER
// We also do not need to reload base config as there is no object related to it. // We also do not need to reload base config as there is no object related to it.

View file

@ -1,6 +1,6 @@
package xyz.alexcrea.cuanvil.update.minecraft; package xyz.alexcrea.cuanvil.update.minecraft;
import io.delilaheve.CustomAnvil; import org.bukkit.configuration.file.FileConfiguration;
import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.config.ConfigHolder;
import xyz.alexcrea.cuanvil.update.UpdateUtils; import xyz.alexcrea.cuanvil.update.UpdateUtils;
import xyz.alexcrea.cuanvil.update.Version; import xyz.alexcrea.cuanvil.update.Version;
@ -17,6 +17,7 @@ public class Update_1_21_9 extends MCUpdate{
protected void doUpdate() { protected void doUpdate() {
var baseConfig = ConfigHolder.DEFAULT_CONFIG.getConfig(); var baseConfig = ConfigHolder.DEFAULT_CONFIG.getConfig();
var groupConfig = ConfigHolder.ITEM_GROUP_HOLDER.getConfig(); var groupConfig = ConfigHolder.ITEM_GROUP_HOLDER.getConfig();
var unitConfig = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig();
// Add cooper items to groups // Add cooper items to groups
addAbsentToList(groupConfig, "helmets.items", "copper_helmet"); addAbsentToList(groupConfig, "helmets.items", "copper_helmet");
@ -30,16 +31,34 @@ public class Update_1_21_9 extends MCUpdate{
addAbsentToList(groupConfig, "axes.items", "copper_axe"); addAbsentToList(groupConfig, "axes.items", "copper_axe");
addAbsentToList(groupConfig, "swords.items", "copper_sword"); addAbsentToList(groupConfig, "swords.items", "copper_sword");
// Add unit repair
addCopperUnitRepair(unitConfig);
// Set version string as current // Set version string as current
baseConfig.set(UpdateUtils.MINECRAFT_VERSION_PATH, version.toString()); baseConfig.set(UpdateUtils.MINECRAFT_VERSION_PATH, version.toString());
// Save // Save
ConfigHolder.DEFAULT_CONFIG.saveToDisk(true); ConfigHolder.DEFAULT_CONFIG.saveToDisk(true);
ConfigHolder.ITEM_GROUP_HOLDER.saveToDisk(true); ConfigHolder.ITEM_GROUP_HOLDER.saveToDisk(true);
ConfigHolder.UNIT_REPAIR_HOLDER.saveToDisk(true);
// imply reload of CONFLICT_HOLDER // imply reload of CONFLICT_HOLDER
// We also do not need to reload base config as there is no object related to it. // We also do not need to reload base config as there is no object related to it.
ConfigHolder.ITEM_GROUP_HOLDER.reload(); ConfigHolder.ITEM_GROUP_HOLDER.reload();
} }
public static void addCopperUnitRepair(FileConfiguration unitConfig) {
// Add unit repair
unitConfig.set("copper_ingot.copper_helmet", 0.25);
unitConfig.set("copper_ingot.copper_chestplate", 0.25);
unitConfig.set("copper_ingot.copper_leggings", 0.25);
unitConfig.set("copper_ingot.copper_boots", 0.25);
unitConfig.set("copper_ingot.copper_pickaxe", 0.25);
unitConfig.set("copper_ingot.copper_shovel", 0.25);
unitConfig.set("copper_ingot.copper_hoe", 0.25);
unitConfig.set("copper_ingot.copper_axe", 0.25);
unitConfig.set("copper_ingot.copper_sword", 0.25);
}
} }

View file

@ -0,0 +1,27 @@
package xyz.alexcrea.cuanvil.update.plugin;
import org.bukkit.configuration.file.FileConfiguration;
import xyz.alexcrea.cuanvil.config.ConfigHolder;
import xyz.alexcrea.cuanvil.update.UpdateUtils;
import xyz.alexcrea.cuanvil.update.Version;
import xyz.alexcrea.cuanvil.update.minecraft.Update_1_21_9;
import javax.annotation.Nonnull;
import java.util.Set;
public class PUpdate_1_15_6 {
public static void handleUpdate(@Nonnull Set<ConfigHolder> toSave) {
// fix only needed for 1.21.9 and above
Version current = UpdateUtils.currentMinecraftVersion();
if (new Version(1, 21, 9).greaterThan(current)) return;
FileConfiguration unitConfig = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig();
// Add unit repair
Update_1_21_9.addCopperUnitRepair(unitConfig);
toSave.add(ConfigHolder.UNIT_REPAIR_HOLDER);
}
}

View file

@ -0,0 +1,54 @@
package xyz.alexcrea.cuanvil.dependency
import xyz.alexcrea.cuanvil.update.UpdateUtils
object MinecraftVersionUtil {
val craftbukkitVersion: String?
get() {
val versionParts = UpdateUtils.currentMinecraftVersionArray()
if (versionParts[0] != 1) return null
return when (versionParts[1]) {
17 -> when (versionParts[2]) {
0, 1 -> "1_17R1"
else -> null
}
18 -> when (versionParts[2]) {
0, 1 -> "1_18R1"
2 -> "1_18R2"
else -> null
}
19 -> when (versionParts[2]) {
0, 1, 2 -> "1_19R1"
3 -> "1_19R2"
4 -> "1_19R3"
else -> null
}
20 -> when (versionParts[2]) {
0, 1 -> "1_20R1"
2 -> "1_20R2"
3, 4 -> "1_20R3"
5, 6 -> "1_20R4"
else -> null
}
21 -> when (versionParts[2]) {
0, 1 -> "1_21R1"
2, 3 -> "1_21R2"
4 -> "1_21R3"
5 -> "1_21R4"
6, 7, 8 -> "1_21R5"
9, 10 -> "1_21R6"
11 -> "1_21R7"
else -> null
}
else -> null
}
}
}

View file

@ -0,0 +1,61 @@
package xyz.alexcrea.cuanvil.dependency.gui
import org.bukkit.inventory.InventoryView
import java.lang.reflect.Method
class GenericExternGuiTester: ExternGuiTester {
companion object {
private const val ANVIL_CLASS_NAME = "org.bukkit.craftbukkit.inventory.view.CraftAnvilView"
private const val INV_CLASS_NAME = "org.bukkit.craftbukkit.inventory.CraftInventoryView"
private const val HANDLE_METHOD_NAME = "getHandle"
}
var testExist = false
var inTesting = false
var testedClass: String? = null
lateinit var getHandleMethod: Method
override fun getContainerClass(view: InventoryView): Class<Any>? {
// In case we are in a test environment
if(!testExist) testClassExist()
if(inTesting) return view.javaClass //TEMPORARY
if(!testedClass.contentEquals(view.javaClass.name))
return null
val container = getHandleMethod.invoke(view)
return container.javaClass
}
fun tryFromClass(className: String) {
val clazz = Class.forName(className)
testedClass = className
getHandleMethod = clazz.getMethod(HANDLE_METHOD_NAME)
}
fun testClassExist() {
testExist = true
// We first try to get craft anvil interface,
// but is absent on old version so we try craft inventory view before
try {
tryFromClass(ANVIL_CLASS_NAME)
return
}
catch (_: ClassNotFoundException) {}
catch (_: NoSuchMethodException) {}
try {
tryFromClass(INV_CLASS_NAME)
return
}
catch (_: ClassNotFoundException) {}
catch (_: NoSuchMethodException) {}
inTesting = true
}
}

View file

@ -4,20 +4,12 @@ import xyz.alexcrea.cuanvil.update.UpdateUtils
object GuiTesterSelector { object GuiTesterSelector {
val spigotVersionString: String? val selectGuiTester: ExternGuiTester?
get() { get() {
val versionParts = UpdateUtils.currentMinecraftVersionArray() val versionParts = UpdateUtils.currentMinecraftVersionArray()
if (versionParts[0] != 1) return null if (versionParts[0] != 1) return null
return when (versionParts[1]) { return GenericExternGuiTester()
21 -> when (versionParts[2]) {
8 -> "1_21_R5"
9, 10 -> "1_21_R6"
else -> null
}
else -> null
}
} }
} }

View file

@ -213,7 +213,8 @@ class PrepareAnvilListener : Listener {
else if (useColor) it.displayName else if (useColor) it.displayName
else ChatColor.stripColor(it.displayName) else ChatColor.stripColor(it.displayName)
if (!displayName.contentEquals(renameText)) {
if (!displayName.contentEquals(renameText) && !(displayName == null && renameText == "")) {
it.setDisplayName(renameText) it.setDisplayName(renameText)
resultItem.itemMeta = it resultItem.itemMeta = it