mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 16:16:17 +02:00
Automatic Enchantment Squared configuration.
This commit is contained in:
parent
6553122819
commit
fd1fb97174
6 changed files with 185 additions and 5 deletions
|
|
@ -53,6 +53,7 @@ public abstract class WrappedEnchantment {
|
||||||
* Get the default rarity of this enchant.
|
* Get the default rarity of this enchant.
|
||||||
* @return The default rarity of this enchant.
|
* @return The default rarity of this enchant.
|
||||||
*/
|
*/
|
||||||
|
@NotNull
|
||||||
public final EnchantmentRarity defaultRarity(){
|
public final EnchantmentRarity defaultRarity(){
|
||||||
return defaultRarity;
|
return defaultRarity;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -107,6 +107,9 @@ class CustomAnvil : JavaPlugin() {
|
||||||
// temporary: handle 1.21 update
|
// temporary: handle 1.21 update
|
||||||
Update_1_21.handleUpdate()
|
Update_1_21.handleUpdate()
|
||||||
|
|
||||||
|
// Handle custom enchant config
|
||||||
|
DependencyManager.handleConfigChanges()
|
||||||
|
|
||||||
// Load gui constants //TODO maybe something better later
|
// Load gui constants //TODO maybe something better later
|
||||||
MainConfigGui.getInstance().init(DependencyManager.packetManager)
|
MainConfigGui.getInstance().init(DependencyManager.packetManager)
|
||||||
GuiSharedConstant.loadConstants()
|
GuiSharedConstant.loadConstants()
|
||||||
|
|
|
||||||
|
|
@ -310,11 +310,9 @@ object ConfigOptions {
|
||||||
val enchantment = WrappedEnchantment.getByName(enchantmentName)
|
val enchantment = WrappedEnchantment.getByName(enchantmentName)
|
||||||
if(enchantment != null){
|
if(enchantment != null){
|
||||||
val rarity = enchantment.defaultRarity()
|
val rarity = enchantment.defaultRarity()
|
||||||
if(rarity != null){
|
|
||||||
return if(isFromBook) rarity.bookValue
|
return if(isFromBook) rarity.bookValue
|
||||||
else rarity.itemValue
|
else rarity.itemValue
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return DEFAULT_ENCHANT_VALUE
|
return DEFAULT_ENCHANT_VALUE
|
||||||
|
|
|
||||||
|
|
@ -26,4 +26,10 @@ object DependencyManager {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun handleConfigChanges() {
|
||||||
|
|
||||||
|
enchantmentSquaredCompatibility?.registerPluginConfiguration()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,30 @@
|
||||||
package xyz.alexcrea.cuanvil.dependency
|
package xyz.alexcrea.cuanvil.dependency
|
||||||
|
|
||||||
|
import io.delilaheve.CustomAnvil
|
||||||
import me.athlaeos.enchantssquared.enchantments.CustomEnchant
|
import me.athlaeos.enchantssquared.enchantments.CustomEnchant
|
||||||
import me.athlaeos.enchantssquared.managers.CustomEnchantManager
|
import me.athlaeos.enchantssquared.managers.CustomEnchantManager
|
||||||
import org.bukkit.NamespacedKey
|
import org.bukkit.NamespacedKey
|
||||||
import org.bukkit.event.inventory.PrepareAnvilEvent
|
import org.bukkit.event.inventory.PrepareAnvilEvent
|
||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
import org.bukkit.plugin.Plugin
|
import org.bukkit.plugin.Plugin
|
||||||
|
import xyz.alexcrea.cuanvil.config.ConfigHolder
|
||||||
import xyz.alexcrea.cuanvil.enchant.WrappedEnchantment
|
import xyz.alexcrea.cuanvil.enchant.WrappedEnchantment
|
||||||
import xyz.alexcrea.cuanvil.enchant.wrapped.EnchantSquaredEnchantment
|
import xyz.alexcrea.cuanvil.enchant.wrapped.EnchantSquaredEnchantment
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
import kotlin.collections.ArrayList
|
||||||
|
|
||||||
class EnchantmentSquaredDependency(private val enchantmentSquaredPlugin: Plugin) {
|
class EnchantmentSquaredDependency(private val enchantmentSquaredPlugin: Plugin) {
|
||||||
|
|
||||||
fun disableAnvilListener(){
|
fun disableAnvilListener(){
|
||||||
PrepareAnvilEvent.getHandlerList().unregister(this.enchantmentSquaredPlugin)
|
PrepareAnvilEvent.getHandlerList().unregister(this.enchantmentSquaredPlugin)
|
||||||
|
|
||||||
|
CustomAnvil.instance.logger.info("Enchantment Squared Detected !")
|
||||||
|
CustomAnvil.instance.logger.info("Please be aware that Custom Anvil is bypassing Enchantment Squared ")
|
||||||
|
CustomAnvil.instance.logger.info("\"compatible_with\", " +
|
||||||
|
"\"disable_anvil\", " +
|
||||||
|
"\"incompatible_vanilla_enchantments\", " +
|
||||||
|
"\"incompatible_custom_enchantments\", " +
|
||||||
|
"configuration values.")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun registerEnchantments(){
|
fun registerEnchantments(){
|
||||||
|
|
@ -44,4 +54,166 @@ class EnchantmentSquaredDependency(private val enchantmentSquaredPlugin: Plugin)
|
||||||
return WrappedEnchantment.getByKey(getKeyFromEnchant(enchant))!!
|
return WrappedEnchantment.getByKey(getKeyFromEnchant(enchant))!!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private val IS_READY_PATH = "enchantment_square_ready"
|
||||||
|
fun registerPluginConfiguration(){
|
||||||
|
val defaultConfig = ConfigHolder.DEFAULT_CONFIG.config
|
||||||
|
val isReady = defaultConfig.getBoolean(IS_READY_PATH, false)
|
||||||
|
if(isReady) return
|
||||||
|
|
||||||
|
CustomAnvil.instance.logger.info("Preparing configuration for Enchantment Squared...")
|
||||||
|
|
||||||
|
// Prepare enchantments
|
||||||
|
val esEnchantments = ArrayList<EnchantSquaredEnchantment>()
|
||||||
|
CustomEnchantManager.getInstance().allEnchants.forEach { (_, enchant) ->
|
||||||
|
esEnchantments.add(getWrappedEnchant(enchant) as EnchantSquaredEnchantment)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write default level limit and xp cost
|
||||||
|
for (enchantment in esEnchantments) {
|
||||||
|
defaultConfig["enchant_limits.${enchantment.key.key}"] = enchantment.defaultMaxLevel()
|
||||||
|
|
||||||
|
val rarity = enchantment.defaultRarity()
|
||||||
|
defaultConfig["enchant_values.${enchantment.key.key}.item"] = rarity.itemValue
|
||||||
|
defaultConfig["enchant_values.${enchantment.key.key}.book"] = rarity.bookValue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write groups and conflicts
|
||||||
|
writeMissingGroups()
|
||||||
|
writeMaterialRestriction(esEnchantments)
|
||||||
|
writeEnchantmentConflicts(esEnchantments)
|
||||||
|
|
||||||
|
// Set ready
|
||||||
|
defaultConfig[IS_READY_PATH] = true
|
||||||
|
|
||||||
|
// Save
|
||||||
|
ConfigHolder.DEFAULT_CONFIG.saveToDisk(true)
|
||||||
|
ConfigHolder.ITEM_GROUP_HOLDER.saveToDisk(true)
|
||||||
|
ConfigHolder.CONFLICT_HOLDER.saveToDisk(true)
|
||||||
|
|
||||||
|
// Reload
|
||||||
|
ConfigHolder.ITEM_GROUP_HOLDER.reload()
|
||||||
|
|
||||||
|
CustomAnvil.instance.logger.info("Enchantment Squared should now work as expected !")
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun writeMissingGroups(){
|
||||||
|
// Write group that do not exist on custom anvil.
|
||||||
|
// (Tools group regroup most of the tool items. I did not create a seperated group for theses)
|
||||||
|
val groupConfig = ConfigHolder.ITEM_GROUP_HOLDER.config
|
||||||
|
if(!groupConfig.isConfigurationSection("pickaxes")){
|
||||||
|
groupConfig["pickaxes.type"] = "include"
|
||||||
|
groupConfig["pickaxes.items"] = arrayOf("wooden_pickaxe", "stone_pickaxe", "iron_pickaxe", "diamond_pickaxe", "golden_pickaxe", "netherite_pickaxe")
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!groupConfig.isConfigurationSection("shovels")){
|
||||||
|
groupConfig["shovels.type"] = "include"
|
||||||
|
groupConfig["shovels.items"] = arrayOf("wooden_shovel", "stone_shovel", "iron_shovel", "diamond_shovel", "golden_shovel", "netherite_shovel")
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!groupConfig.isConfigurationSection("hoes")){
|
||||||
|
groupConfig["hoes.type"] = "include"
|
||||||
|
groupConfig["hoes.items"] = arrayOf("wooden_hoe", "stone_ho", "iron_hoe", "diamond_hoe", "golden_hoe", "netherite_hoe")
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!groupConfig.isConfigurationSection("shield")){
|
||||||
|
groupConfig["shield.type"] = "include"
|
||||||
|
groupConfig["shield.items"] = arrayOf("shield")
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!groupConfig.isConfigurationSection("elytra")){
|
||||||
|
groupConfig["elytra.type"] = "include"
|
||||||
|
groupConfig["elytra.items"] = arrayOf("elytra")
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!groupConfig.isConfigurationSection("trinkets")){
|
||||||
|
groupConfig["trinkets.type"] = "include"
|
||||||
|
groupConfig["trinkets.items"] = arrayOf("rotten_flesh")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun writeMaterialRestriction(esEnchantments: List<EnchantSquaredEnchantment>){
|
||||||
|
val conflictConfig = ConfigHolder.CONFLICT_HOLDER.config
|
||||||
|
for (enchantment in esEnchantments) {
|
||||||
|
val restrictionName = "restriction_${enchantment.key.key}"
|
||||||
|
if(!conflictConfig.isConfigurationSection(restrictionName)){
|
||||||
|
conflictConfig["$restrictionName.enchantments"] = listOf(enchantment.name)
|
||||||
|
|
||||||
|
// Get allowed groups
|
||||||
|
val listOfAllowed = ArrayList<String>()
|
||||||
|
listOfAllowed.add("enchanted_book") // enchanted book is allowed in any case.
|
||||||
|
|
||||||
|
for (esGroup in enchantment.enchant.compatibleItems) {
|
||||||
|
val caGroup = esGroupToCAGroup(esGroup)
|
||||||
|
if(caGroup == null){
|
||||||
|
CustomAnvil.instance.logger.info("Could not find equivalent custom anvil group for $esGroup")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
listOfAllowed.add(caGroup)
|
||||||
|
}
|
||||||
|
conflictConfig["$restrictionName.notAffectedGroups"] = listOfAllowed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun writeEnchantmentConflicts(esEnchantments: List<EnchantSquaredEnchantment>){
|
||||||
|
val otherEnchants = ArrayList<WrappedEnchantment>()
|
||||||
|
otherEnchants.addAll(WrappedEnchantment.values())
|
||||||
|
|
||||||
|
for (enchantment in esEnchantments) {
|
||||||
|
otherEnchants.remove(enchantment)
|
||||||
|
|
||||||
|
// find conflicting enchantment.
|
||||||
|
for (otherEnchant in otherEnchants) {
|
||||||
|
if(enchantment.enchant.conflictsWithEnchantment(otherEnchant.name)){
|
||||||
|
writeConflict(enchantment, otherEnchant)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun writeConflict(enchantment1: WrappedEnchantment, enchantment2: WrappedEnchantment){
|
||||||
|
val conflictConfig = ConfigHolder.CONFLICT_HOLDER.config
|
||||||
|
val conflictPath = "${enchantment1.name}_with_${enchantment2.name}_conflict"
|
||||||
|
|
||||||
|
if(!conflictConfig.isConfigurationSection(conflictPath)){
|
||||||
|
conflictConfig["$conflictPath.enchantments"] = listOf(enchantment1.name, enchantment2.name)
|
||||||
|
|
||||||
|
val empty: List<String> = Collections.emptyList()
|
||||||
|
conflictConfig["$conflictPath.notAffectedGroups"] = empty
|
||||||
|
|
||||||
|
conflictConfig["$conflictPath.maxEnchantmentBeforeConflict"] = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Transform an Enchantment Squared group to a Custom Anvil group
|
||||||
|
*/
|
||||||
|
private fun esGroupToCAGroup(esGroup: String): String? {
|
||||||
|
return when(esGroup){
|
||||||
|
"SWORDS" -> "swords"
|
||||||
|
"BOWS" -> "bow"
|
||||||
|
"CROSSBOWS" -> "crossbow"
|
||||||
|
"TRIDENTS" -> "trident"
|
||||||
|
"HELMETS" -> "helmets"
|
||||||
|
"CHESTPLATES" -> "chestplate"
|
||||||
|
"LEGGINGS" -> "leggings"
|
||||||
|
"BOOTS" -> "boots"
|
||||||
|
"SHEARS" -> "shears"
|
||||||
|
"FLINTANDSTEEL" -> "flint_and_steel"
|
||||||
|
"FISHINGROD" -> "fishing_rod"
|
||||||
|
"ELYTRA" -> "elytra"
|
||||||
|
"PICKAXES" -> "pickaxes" // not on this plugin by default
|
||||||
|
"AXES" -> "axes"
|
||||||
|
"SHOVELS" -> "shovels" // not on this plugin by default
|
||||||
|
"HOES" -> "hoes" // not on this plugin by default
|
||||||
|
"SHIELDS" -> "shield" // not on this plugin by default
|
||||||
|
"TRINKETS" -> "trinkets" // not the idea way as it will also allow non trinkets rotten flesh to be enchanted.
|
||||||
|
"ALL" -> "everything"
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,7 @@ class EnchantConflictManager {
|
||||||
conflict.addEnchantment(enchant)
|
conflict.addEnchantment(enchant)
|
||||||
}
|
}
|
||||||
if (conflict.getEnchants().size == 0) {
|
if (conflict.getEnchants().size == 0) {
|
||||||
if (!futureUse) {
|
if (!futureUse) { //TODO future use will be deprecated once the new update system is finished
|
||||||
CustomAnvil.instance.logger.warning("Conflict $conflictName do not have valid enchantment, it will not do anything")
|
CustomAnvil.instance.logger.warning("Conflict $conflictName do not have valid enchantment, it will not do anything")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue