Completed 1.20.3 rewrite, awaiting bugfixing
This commit is contained in:
@@ -8,7 +8,6 @@ version = rootProject.version
|
|||||||
|
|
||||||
subprojects {
|
subprojects {
|
||||||
dependencies {
|
dependencies {
|
||||||
compileOnly(project(":eco-core:core-proxy"))
|
|
||||||
compileOnly(project(":eco-core:core-plugin"))
|
compileOnly(project(":eco-core:core-plugin"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package com.willfp.ecoenchants.proxy.v1_17_R1
|
package com.willfp.ecoenchants.proxy.v1_17_R1
|
||||||
|
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchant
|
import com.willfp.ecoenchants.enchant.EcoEnchant
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchants
|
import com.willfp.ecoenchants.enchant.VanillaEnchantmentData
|
||||||
import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData
|
|
||||||
import net.minecraft.world.item.enchantment.Enchantment
|
import net.minecraft.world.item.enchantment.Enchantment
|
||||||
import org.bukkit.NamespacedKey
|
import org.bukkit.NamespacedKey
|
||||||
import org.bukkit.craftbukkit.v1_17_R1.enchantments.CraftEnchantment
|
import org.bukkit.craftbukkit.v1_17_R1.enchantments.CraftEnchantment
|
||||||
|
|
||||||
|
|
||||||
class EcoCraftEnchantment(
|
class EcoCraftEnchantment(
|
||||||
target: Enchantment,
|
target: Enchantment,
|
||||||
private val data: VanillaEnchantmentData
|
private val data: VanillaEnchantmentData
|
||||||
@@ -21,7 +21,26 @@ class EcoCraftEnchantment(
|
|||||||
return data.conflicts?.contains(other.key) ?: super.conflictsWith(other)
|
return data.conflicts?.contains(other.key) ?: super.conflictsWith(other)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
fun register() {
|
fun register() {
|
||||||
EcoEnchants.register(this)
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("byKey")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
(get(null) as MutableMap<NamespacedKey, org.bukkit.enchantments.Enchantment>).apply { remove(key) }
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("byName")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
(get(null) as MutableMap<String, org.bukkit.enchantments.Enchantment>).apply { remove(name) }
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("acceptingNew")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
set(null, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment.registerEnchantment(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
package com.willfp.ecoenchants.proxy.v1_17_R1
|
package com.willfp.ecoenchants.proxy.v1_17_R1
|
||||||
|
|
||||||
import com.willfp.ecoenchants.proxy.proxies.EcoCraftEnchantmentManagerProxy
|
import com.willfp.ecoenchants.enchant.EcoCraftEnchantmentManagerProxy
|
||||||
import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData
|
import com.willfp.ecoenchants.enchant.VanillaEnchantmentData
|
||||||
import org.bukkit.NamespacedKey
|
|
||||||
import org.bukkit.enchantments.Enchantment
|
import org.bukkit.enchantments.Enchantment
|
||||||
|
|
||||||
class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy {
|
class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy {
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package com.willfp.ecoenchants.proxy.v1_18_R1
|
package com.willfp.ecoenchants.proxy.v1_18_R1
|
||||||
|
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchant
|
import com.willfp.ecoenchants.enchant.EcoEnchant
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchants
|
import com.willfp.ecoenchants.enchant.VanillaEnchantmentData
|
||||||
import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData
|
|
||||||
import net.minecraft.world.item.enchantment.Enchantment
|
import net.minecraft.world.item.enchantment.Enchantment
|
||||||
import org.bukkit.NamespacedKey
|
import org.bukkit.NamespacedKey
|
||||||
import org.bukkit.craftbukkit.v1_18_R1.enchantments.CraftEnchantment
|
import org.bukkit.craftbukkit.v1_18_R1.enchantments.CraftEnchantment
|
||||||
|
|
||||||
|
|
||||||
class EcoCraftEnchantment(
|
class EcoCraftEnchantment(
|
||||||
target: Enchantment,
|
target: Enchantment,
|
||||||
private val data: VanillaEnchantmentData
|
private val data: VanillaEnchantmentData
|
||||||
@@ -21,7 +21,26 @@ class EcoCraftEnchantment(
|
|||||||
return data.conflicts?.contains(other.key) ?: super.conflictsWith(other)
|
return data.conflicts?.contains(other.key) ?: super.conflictsWith(other)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
fun register() {
|
fun register() {
|
||||||
EcoEnchants.register(this)
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("byKey")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
(get(null) as MutableMap<NamespacedKey, org.bukkit.enchantments.Enchantment>).apply { remove(key) }
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("byName")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
(get(null) as MutableMap<String, org.bukkit.enchantments.Enchantment>).apply { remove(name) }
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("acceptingNew")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
set(null, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment.registerEnchantment(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
package com.willfp.ecoenchants.proxy.v1_18_R1
|
package com.willfp.ecoenchants.proxy.v1_18_R1
|
||||||
|
|
||||||
import com.willfp.ecoenchants.proxy.proxies.EcoCraftEnchantmentManagerProxy
|
import com.willfp.ecoenchants.enchant.EcoCraftEnchantmentManagerProxy
|
||||||
import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData
|
import com.willfp.ecoenchants.enchant.VanillaEnchantmentData
|
||||||
import org.bukkit.NamespacedKey
|
|
||||||
import org.bukkit.enchantments.Enchantment
|
import org.bukkit.enchantments.Enchantment
|
||||||
|
|
||||||
class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy {
|
class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy {
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package com.willfp.ecoenchants.proxy.v1_18_R2
|
package com.willfp.ecoenchants.proxy.v1_18_R2
|
||||||
|
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchant
|
import com.willfp.ecoenchants.enchant.EcoEnchant
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchants
|
import com.willfp.ecoenchants.enchant.VanillaEnchantmentData
|
||||||
import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData
|
|
||||||
import net.minecraft.world.item.enchantment.Enchantment
|
import net.minecraft.world.item.enchantment.Enchantment
|
||||||
import org.bukkit.NamespacedKey
|
import org.bukkit.NamespacedKey
|
||||||
import org.bukkit.craftbukkit.v1_18_R2.enchantments.CraftEnchantment
|
import org.bukkit.craftbukkit.v1_18_R2.enchantments.CraftEnchantment
|
||||||
|
|
||||||
|
|
||||||
class EcoCraftEnchantment(
|
class EcoCraftEnchantment(
|
||||||
target: Enchantment,
|
target: Enchantment,
|
||||||
private val data: VanillaEnchantmentData
|
private val data: VanillaEnchantmentData
|
||||||
@@ -21,7 +21,26 @@ class EcoCraftEnchantment(
|
|||||||
return data.conflicts?.contains(other.key) ?: super.conflictsWith(other)
|
return data.conflicts?.contains(other.key) ?: super.conflictsWith(other)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
fun register() {
|
fun register() {
|
||||||
EcoEnchants.register(this)
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("byKey")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
(get(null) as MutableMap<NamespacedKey, org.bukkit.enchantments.Enchantment>).apply { remove(key) }
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("byName")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
(get(null) as MutableMap<String, org.bukkit.enchantments.Enchantment>).apply { remove(name) }
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("acceptingNew")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
set(null, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment.registerEnchantment(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
package com.willfp.ecoenchants.proxy.v1_18_R2
|
package com.willfp.ecoenchants.proxy.v1_18_R2
|
||||||
|
|
||||||
import com.willfp.ecoenchants.proxy.proxies.EcoCraftEnchantmentManagerProxy
|
import com.willfp.ecoenchants.enchant.EcoCraftEnchantmentManagerProxy
|
||||||
import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData
|
import com.willfp.ecoenchants.enchant.VanillaEnchantmentData
|
||||||
import org.bukkit.NamespacedKey
|
|
||||||
import org.bukkit.enchantments.Enchantment
|
import org.bukkit.enchantments.Enchantment
|
||||||
|
|
||||||
class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy {
|
class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy {
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
package com.willfp.ecoenchants.proxy.v1_19_R1
|
package com.willfp.ecoenchants.proxy.v1_19_R1
|
||||||
|
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchant
|
import com.willfp.ecoenchants.enchant.EcoEnchant
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchants
|
import com.willfp.ecoenchants.enchant.VanillaEnchantmentData
|
||||||
import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData
|
|
||||||
import net.minecraft.world.item.enchantment.Enchantment
|
import net.minecraft.world.item.enchantment.Enchantment
|
||||||
|
import org.bukkit.NamespacedKey
|
||||||
import org.bukkit.craftbukkit.v1_19_R1.enchantments.CraftEnchantment
|
import org.bukkit.craftbukkit.v1_19_R1.enchantments.CraftEnchantment
|
||||||
|
|
||||||
|
|
||||||
class EcoCraftEnchantment(
|
class EcoCraftEnchantment(
|
||||||
target: Enchantment,
|
target: Enchantment,
|
||||||
private val data: VanillaEnchantmentData
|
private val data: VanillaEnchantmentData
|
||||||
@@ -20,7 +21,26 @@ class EcoCraftEnchantment(
|
|||||||
return data.conflicts?.contains(other.key) ?: super.conflictsWith(other)
|
return data.conflicts?.contains(other.key) ?: super.conflictsWith(other)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
fun register() {
|
fun register() {
|
||||||
EcoEnchants.register(this)
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("byKey")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
(get(null) as MutableMap<NamespacedKey, org.bukkit.enchantments.Enchantment>).apply { remove(key) }
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("byName")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
(get(null) as MutableMap<String, org.bukkit.enchantments.Enchantment>).apply { remove(name) }
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("acceptingNew")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
set(null, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment.registerEnchantment(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
package com.willfp.ecoenchants.proxy.v1_19_R1
|
package com.willfp.ecoenchants.proxy.v1_19_R1
|
||||||
|
|
||||||
import com.willfp.ecoenchants.proxy.proxies.EcoCraftEnchantmentManagerProxy
|
import com.willfp.ecoenchants.enchant.EcoCraftEnchantmentManagerProxy
|
||||||
import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData
|
import com.willfp.ecoenchants.enchant.VanillaEnchantmentData
|
||||||
import org.bukkit.NamespacedKey
|
|
||||||
import org.bukkit.enchantments.Enchantment
|
import org.bukkit.enchantments.Enchantment
|
||||||
|
|
||||||
class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy {
|
class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy {
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
package com.willfp.ecoenchants.proxy.v1_19_R2
|
package com.willfp.ecoenchants.proxy.v1_19_R2
|
||||||
|
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchant
|
import com.willfp.ecoenchants.enchant.EcoEnchant
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchants
|
import com.willfp.ecoenchants.enchant.VanillaEnchantmentData
|
||||||
import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData
|
|
||||||
import net.minecraft.world.item.enchantment.Enchantment
|
import net.minecraft.world.item.enchantment.Enchantment
|
||||||
|
import org.bukkit.NamespacedKey
|
||||||
import org.bukkit.craftbukkit.v1_19_R2.enchantments.CraftEnchantment
|
import org.bukkit.craftbukkit.v1_19_R2.enchantments.CraftEnchantment
|
||||||
|
|
||||||
|
|
||||||
class EcoCraftEnchantment(
|
class EcoCraftEnchantment(
|
||||||
target: Enchantment,
|
target: Enchantment,
|
||||||
private val data: VanillaEnchantmentData
|
private val data: VanillaEnchantmentData
|
||||||
@@ -20,7 +21,26 @@ class EcoCraftEnchantment(
|
|||||||
return data.conflicts?.contains(other.key) ?: super.conflictsWith(other)
|
return data.conflicts?.contains(other.key) ?: super.conflictsWith(other)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
fun register() {
|
fun register() {
|
||||||
EcoEnchants.register(this)
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("byKey")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
(get(null) as MutableMap<NamespacedKey, org.bukkit.enchantments.Enchantment>).apply { remove(key) }
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("byName")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
(get(null) as MutableMap<String, org.bukkit.enchantments.Enchantment>).apply { remove(name) }
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("acceptingNew")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
set(null, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment.registerEnchantment(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,8 @@
|
|||||||
package com.willfp.ecoenchants.proxy.v1_19_R2
|
package com.willfp.ecoenchants.proxy.v1_19_R2
|
||||||
|
|
||||||
import com.willfp.ecoenchants.proxy.proxies.EcoCraftEnchantmentManagerProxy
|
import com.willfp.ecoenchants.enchant.EcoCraftEnchantmentManagerProxy
|
||||||
import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData
|
import com.willfp.ecoenchants.enchant.VanillaEnchantmentData
|
||||||
import net.minecraft.core.Registry
|
|
||||||
import net.minecraft.core.registries.BuiltInRegistries
|
import net.minecraft.core.registries.BuiltInRegistries
|
||||||
import net.minecraft.core.registries.Registries
|
|
||||||
import org.bukkit.NamespacedKey
|
|
||||||
import org.bukkit.enchantments.Enchantment
|
import org.bukkit.enchantments.Enchantment
|
||||||
|
|
||||||
class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy {
|
class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy {
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
package com.willfp.ecoenchants.proxy.v1_19_R3
|
package com.willfp.ecoenchants.proxy.v1_19_R3
|
||||||
|
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchant
|
import com.willfp.ecoenchants.enchant.EcoEnchant
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchants
|
import com.willfp.ecoenchants.enchant.VanillaEnchantmentData
|
||||||
import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData
|
|
||||||
import net.minecraft.world.item.enchantment.Enchantment
|
import net.minecraft.world.item.enchantment.Enchantment
|
||||||
|
import org.bukkit.NamespacedKey
|
||||||
import org.bukkit.craftbukkit.v1_19_R3.enchantments.CraftEnchantment
|
import org.bukkit.craftbukkit.v1_19_R3.enchantments.CraftEnchantment
|
||||||
|
|
||||||
|
|
||||||
class EcoCraftEnchantment(
|
class EcoCraftEnchantment(
|
||||||
target: Enchantment,
|
target: Enchantment,
|
||||||
private val data: VanillaEnchantmentData
|
private val data: VanillaEnchantmentData
|
||||||
@@ -20,7 +21,26 @@ class EcoCraftEnchantment(
|
|||||||
return data.conflicts?.contains(other.key) ?: super.conflictsWith(other)
|
return data.conflicts?.contains(other.key) ?: super.conflictsWith(other)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
fun register() {
|
fun register() {
|
||||||
EcoEnchants.register(this)
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("byKey")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
(get(null) as MutableMap<NamespacedKey, org.bukkit.enchantments.Enchantment>).apply { remove(key) }
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("byName")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
(get(null) as MutableMap<String, org.bukkit.enchantments.Enchantment>).apply { remove(name) }
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("acceptingNew")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
set(null, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment.registerEnchantment(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,8 @@
|
|||||||
package com.willfp.ecoenchants.proxy.v1_19_R3
|
package com.willfp.ecoenchants.proxy.v1_19_R3
|
||||||
|
|
||||||
import com.willfp.ecoenchants.proxy.proxies.EcoCraftEnchantmentManagerProxy
|
import com.willfp.ecoenchants.enchant.EcoCraftEnchantmentManagerProxy
|
||||||
import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData
|
import com.willfp.ecoenchants.enchant.VanillaEnchantmentData
|
||||||
import net.minecraft.core.Registry
|
|
||||||
import net.minecraft.core.registries.BuiltInRegistries
|
import net.minecraft.core.registries.BuiltInRegistries
|
||||||
import net.minecraft.core.registries.Registries
|
|
||||||
import org.bukkit.NamespacedKey
|
|
||||||
import org.bukkit.enchantments.Enchantment
|
import org.bukkit.enchantments.Enchantment
|
||||||
|
|
||||||
class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy {
|
class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy {
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
package com.willfp.ecoenchants.proxy.v1_20_R1
|
package com.willfp.ecoenchants.proxy.v1_20_R1
|
||||||
|
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchant
|
import com.willfp.ecoenchants.enchant.EcoEnchant
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchants
|
import com.willfp.ecoenchants.enchant.VanillaEnchantmentData
|
||||||
import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData
|
|
||||||
import net.minecraft.world.item.enchantment.Enchantment
|
import net.minecraft.world.item.enchantment.Enchantment
|
||||||
|
import org.bukkit.NamespacedKey
|
||||||
import org.bukkit.craftbukkit.v1_20_R1.enchantments.CraftEnchantment
|
import org.bukkit.craftbukkit.v1_20_R1.enchantments.CraftEnchantment
|
||||||
|
|
||||||
|
|
||||||
class EcoCraftEnchantment(
|
class EcoCraftEnchantment(
|
||||||
target: Enchantment,
|
target: Enchantment,
|
||||||
private val data: VanillaEnchantmentData
|
private val data: VanillaEnchantmentData
|
||||||
@@ -20,7 +21,26 @@ class EcoCraftEnchantment(
|
|||||||
return data.conflicts?.contains(other.key) ?: super.conflictsWith(other)
|
return data.conflicts?.contains(other.key) ?: super.conflictsWith(other)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
fun register() {
|
fun register() {
|
||||||
EcoEnchants.register(this)
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("byKey")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
(get(null) as MutableMap<NamespacedKey, org.bukkit.enchantments.Enchantment>).apply { remove(key) }
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("byName")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
(get(null) as MutableMap<String, org.bukkit.enchantments.Enchantment>).apply { remove(name) }
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("acceptingNew")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
set(null, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment.registerEnchantment(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,8 @@
|
|||||||
package com.willfp.ecoenchants.proxy.v1_20_R1
|
package com.willfp.ecoenchants.proxy.v1_20_R1
|
||||||
|
|
||||||
import com.willfp.ecoenchants.proxy.proxies.EcoCraftEnchantmentManagerProxy
|
import com.willfp.ecoenchants.enchant.EcoCraftEnchantmentManagerProxy
|
||||||
import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData
|
import com.willfp.ecoenchants.enchant.VanillaEnchantmentData
|
||||||
import net.minecraft.core.Registry
|
|
||||||
import net.minecraft.core.registries.BuiltInRegistries
|
import net.minecraft.core.registries.BuiltInRegistries
|
||||||
import net.minecraft.core.registries.Registries
|
|
||||||
import org.bukkit.NamespacedKey
|
|
||||||
import org.bukkit.enchantments.Enchantment
|
import org.bukkit.enchantments.Enchantment
|
||||||
|
|
||||||
class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy {
|
class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy {
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
package com.willfp.ecoenchants.proxy.v1_20_R2
|
package com.willfp.ecoenchants.proxy.v1_20_R2
|
||||||
|
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchant
|
import com.willfp.ecoenchants.enchant.EcoEnchant
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchants
|
import com.willfp.ecoenchants.enchant.VanillaEnchantmentData
|
||||||
import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData
|
import com.willfp.ecoenchants.enchant.registration.legacy.LegacyDelegatedEnchantment
|
||||||
import net.minecraft.world.item.enchantment.Enchantment
|
import net.minecraft.world.item.enchantment.Enchantment
|
||||||
|
import org.bukkit.NamespacedKey
|
||||||
import org.bukkit.craftbukkit.v1_20_R2.enchantments.CraftEnchantment
|
import org.bukkit.craftbukkit.v1_20_R2.enchantments.CraftEnchantment
|
||||||
|
|
||||||
class EcoCraftEnchantment(
|
class EcoCraftEnchantment(
|
||||||
@@ -20,7 +21,26 @@ class EcoCraftEnchantment(
|
|||||||
return data.conflicts?.contains(other.key) ?: super.conflictsWith(other)
|
return data.conflicts?.contains(other.key) ?: super.conflictsWith(other)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
fun register() {
|
fun register() {
|
||||||
EcoEnchants.register(this)
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("byKey")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
(get(null) as MutableMap<NamespacedKey, org.bukkit.enchantments.Enchantment>).apply { remove(key) }
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("byName")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
(get(null) as MutableMap<String, org.bukkit.enchantments.Enchantment>).apply { remove(name) }
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment::class.java.getDeclaredField("acceptingNew")
|
||||||
|
.apply {
|
||||||
|
isAccessible = true
|
||||||
|
set(null, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
org.bukkit.enchantments.Enchantment.registerEnchantment(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.willfp.ecoenchants.proxy.v1_20_R2
|
package com.willfp.ecoenchants.proxy.v1_20_R2
|
||||||
|
|
||||||
import com.willfp.ecoenchants.proxy.proxies.EcoCraftEnchantmentManagerProxy
|
import com.willfp.ecoenchants.enchant.EcoCraftEnchantmentManagerProxy
|
||||||
import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData
|
import com.willfp.ecoenchants.enchant.VanillaEnchantmentData
|
||||||
import net.minecraft.core.registries.BuiltInRegistries
|
import net.minecraft.core.registries.BuiltInRegistries
|
||||||
import org.bukkit.enchantments.Enchantment
|
import org.bukkit.enchantments.Enchantment
|
||||||
|
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
package com.willfp.ecoenchants.proxy.v1_20_R3
|
|
||||||
|
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchant
|
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchants
|
|
||||||
import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData
|
|
||||||
import net.minecraft.world.item.enchantment.Enchantment
|
|
||||||
import org.bukkit.NamespacedKey
|
|
||||||
import org.bukkit.craftbukkit.v1_20_R3.enchantments.CraftEnchantment
|
|
||||||
|
|
||||||
class EcoCraftEnchantment(
|
|
||||||
target: Enchantment,
|
|
||||||
key: NamespacedKey,
|
|
||||||
private val data: VanillaEnchantmentData
|
|
||||||
) : CraftEnchantment(key, target) {
|
|
||||||
override fun getMaxLevel(): Int = data.maxLevel ?: super.getMaxLevel()
|
|
||||||
|
|
||||||
override fun conflictsWith(other: org.bukkit.enchantments.Enchantment): Boolean {
|
|
||||||
if (other is EcoEnchant) {
|
|
||||||
return other.conflictsWith(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
return data.conflicts?.contains(other.key) ?: super.conflictsWith(other)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun register() {
|
|
||||||
EcoEnchants.register(this)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
package com.willfp.ecoenchants.proxy.v1_20_R3
|
|
||||||
|
|
||||||
import com.willfp.ecoenchants.proxy.proxies.EcoCraftEnchantmentManagerProxy
|
|
||||||
import com.willfp.ecoenchants.proxy.v1_20_R3.EcoCraftEnchantment
|
|
||||||
import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData
|
|
||||||
import net.minecraft.core.registries.BuiltInRegistries
|
|
||||||
import org.bukkit.enchantments.Enchantment
|
|
||||||
|
|
||||||
class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy {
|
|
||||||
override fun registerNewCraftEnchantment(
|
|
||||||
enchantment: Enchantment,
|
|
||||||
data: VanillaEnchantmentData
|
|
||||||
) {
|
|
||||||
for (enchant in BuiltInRegistries.ENCHANTMENT) {
|
|
||||||
val key = org.bukkit.craftbukkit.v1_20_R3.util.CraftNamespacedKey.fromMinecraft(
|
|
||||||
BuiltInRegistries.ENCHANTMENT.getKey(enchant)
|
|
||||||
)
|
|
||||||
|
|
||||||
if (key.key != enchantment.key.key) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
EcoCraftEnchantment(enchant, key, data).register()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -4,6 +4,7 @@ import com.willfp.ecoenchants.enchant.EcoEnchant
|
|||||||
import com.willfp.ecoenchants.enchant.EcoEnchants
|
import com.willfp.ecoenchants.enchant.EcoEnchants
|
||||||
import com.willfp.ecoenchants.enchant.registration.modern.ModernEnchantmentRegistererProxy
|
import com.willfp.ecoenchants.enchant.registration.modern.ModernEnchantmentRegistererProxy
|
||||||
import com.willfp.ecoenchants.proxy.v1_20_R3.registration.DelegatedCraftEnchantment
|
import com.willfp.ecoenchants.proxy.v1_20_R3.registration.DelegatedCraftEnchantment
|
||||||
|
import com.willfp.ecoenchants.proxy.v1_20_R3.registration.ModifiedVanillaCraftEnchantment
|
||||||
import com.willfp.ecoenchants.proxy.v1_20_R3.registration.VanillaEcoEnchantsEnchantment
|
import com.willfp.ecoenchants.proxy.v1_20_R3.registration.VanillaEcoEnchantsEnchantment
|
||||||
import net.minecraft.core.MappedRegistry
|
import net.minecraft.core.MappedRegistry
|
||||||
import net.minecraft.core.Registry
|
import net.minecraft.core.Registry
|
||||||
@@ -29,8 +30,7 @@ class ModernEnchantmentRegisterer : ModernEnchantmentRegistererProxy {
|
|||||||
.get(Bukkit.getServer())
|
.get(Bukkit.getServer())
|
||||||
as HashMap<Class<*>, org.bukkit.Registry<*>>
|
as HashMap<Class<*>, org.bukkit.Registry<*>>
|
||||||
|
|
||||||
// Replace bukkit enchantment registry
|
override fun replaceRegistry() {
|
||||||
init {
|
|
||||||
val server = Bukkit.getServer() as CraftServer
|
val server = Bukkit.getServer() as CraftServer
|
||||||
|
|
||||||
registries[Enchantment::class.java] = CraftRegistry(
|
registries[Enchantment::class.java] = CraftRegistry(
|
||||||
@@ -40,7 +40,7 @@ class ModernEnchantmentRegisterer : ModernEnchantmentRegistererProxy {
|
|||||||
val enchant = EcoEnchants.getByID(key.key)
|
val enchant = EcoEnchants.getByID(key.key)
|
||||||
|
|
||||||
if (enchant == null) {
|
if (enchant == null) {
|
||||||
CraftEnchantment(key, registry)
|
ModifiedVanillaCraftEnchantment(key, registry)
|
||||||
} else {
|
} else {
|
||||||
DelegatedCraftEnchantment(enchant, registry)
|
DelegatedCraftEnchantment(enchant, registry)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package com.willfp.ecoenchants.proxy.v1_20_R3.registration
|
|||||||
import com.willfp.eco.util.StringUtils
|
import com.willfp.eco.util.StringUtils
|
||||||
import com.willfp.ecoenchants.display.getFormattedName
|
import com.willfp.ecoenchants.display.getFormattedName
|
||||||
import com.willfp.ecoenchants.enchant.EcoEnchant
|
import com.willfp.ecoenchants.enchant.EcoEnchant
|
||||||
import com.willfp.ecoenchants.enchants.wrap
|
|
||||||
import io.papermc.paper.enchantments.EnchantmentRarity
|
import io.papermc.paper.enchantments.EnchantmentRarity
|
||||||
import net.kyori.adventure.text.Component
|
import net.kyori.adventure.text.Component
|
||||||
import net.minecraft.world.item.enchantment.Enchantment
|
import net.minecraft.world.item.enchantment.Enchantment
|
||||||
@@ -65,7 +64,7 @@ class DelegatedCraftEnchantment(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun displayName(level: Int): Component {
|
override fun displayName(level: Int): Component {
|
||||||
return StringUtils.toComponent(this.wrap().getFormattedName(level))
|
return StringUtils.toComponent(enchant.getFormattedName(level))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun isTradeable(): Boolean {
|
override fun isTradeable(): Boolean {
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.willfp.ecoenchants.proxy.v1_20_R3.registration
|
||||||
|
|
||||||
|
import com.willfp.ecoenchants.enchant.vanillaEnchantmentData
|
||||||
|
import net.minecraft.world.item.enchantment.Enchantment
|
||||||
|
import org.bukkit.NamespacedKey
|
||||||
|
import org.bukkit.craftbukkit.v1_20_R3.enchantments.CraftEnchantment
|
||||||
|
|
||||||
|
class ModifiedVanillaCraftEnchantment(
|
||||||
|
key: NamespacedKey,
|
||||||
|
target: Enchantment
|
||||||
|
) : CraftEnchantment(key, target) {
|
||||||
|
override fun getMaxLevel(): Int = this.vanillaEnchantmentData?.maxLevel ?: super.getMaxLevel()
|
||||||
|
}
|
||||||
@@ -6,7 +6,6 @@ dependencies {
|
|||||||
include("*.jar")
|
include("*.jar")
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
compileOnly(project(":eco-core:core-proxy"))
|
|
||||||
compileOnly("io.papermc.paper:paper-api:1.19.3-R0.1-SNAPSHOT")
|
compileOnly("io.papermc.paper:paper-api:1.19.3-R0.1-SNAPSHOT")
|
||||||
compileOnly("net.essentialsx:EssentialsX:2.19.7")
|
compileOnly("net.essentialsx:EssentialsX:2.19.7")
|
||||||
compileOnly("commons-lang:commons-lang:2.6")
|
compileOnly("commons-lang:commons-lang:2.6")
|
||||||
|
|||||||
@@ -13,13 +13,11 @@ import com.willfp.ecoenchants.config.VanillaEnchantsYml
|
|||||||
import com.willfp.ecoenchants.display.DisplayCache
|
import com.willfp.ecoenchants.display.DisplayCache
|
||||||
import com.willfp.ecoenchants.display.EnchantDisplay
|
import com.willfp.ecoenchants.display.EnchantDisplay
|
||||||
import com.willfp.ecoenchants.display.EnchantSorter
|
import com.willfp.ecoenchants.display.EnchantSorter
|
||||||
|
import com.willfp.ecoenchants.enchant.EcoEnchantLevel
|
||||||
|
import com.willfp.ecoenchants.enchant.EcoEnchants
|
||||||
|
import com.willfp.ecoenchants.enchant.EnchantGUI
|
||||||
|
import com.willfp.ecoenchants.enchant.FoundEcoEnchantLevel
|
||||||
import com.willfp.ecoenchants.enchant.registration.EnchantmentRegisterer
|
import com.willfp.ecoenchants.enchant.registration.EnchantmentRegisterer
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchantLevel
|
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchants
|
|
||||||
import com.willfp.ecoenchants.enchants.EnchantGUI
|
|
||||||
import com.willfp.ecoenchants.enchants.FoundEcoEnchantLevel
|
|
||||||
import com.willfp.ecoenchants.enchants.LoreConversion
|
|
||||||
import com.willfp.ecoenchants.enchants.registerVanillaEnchants
|
|
||||||
import com.willfp.ecoenchants.integrations.EnchantRegistrations
|
import com.willfp.ecoenchants.integrations.EnchantRegistrations
|
||||||
import com.willfp.ecoenchants.integrations.plugins.CMIIntegration
|
import com.willfp.ecoenchants.integrations.plugins.CMIIntegration
|
||||||
import com.willfp.ecoenchants.integrations.plugins.EssentialsIntegration
|
import com.willfp.ecoenchants.integrations.plugins.EssentialsIntegration
|
||||||
@@ -40,6 +38,9 @@ import com.willfp.libreforge.registerSpecificRefreshFunction
|
|||||||
import org.bukkit.entity.Player
|
import org.bukkit.entity.Player
|
||||||
import org.bukkit.event.Listener
|
import org.bukkit.event.Listener
|
||||||
|
|
||||||
|
internal lateinit var plugin: EcoEnchantsPlugin
|
||||||
|
private set
|
||||||
|
|
||||||
class EcoEnchantsPlugin : LibreforgePlugin() {
|
class EcoEnchantsPlugin : LibreforgePlugin() {
|
||||||
val targetsYml = TargetsYml(this)
|
val targetsYml = TargetsYml(this)
|
||||||
val rarityYml = RarityYml(this)
|
val rarityYml = RarityYml(this)
|
||||||
@@ -51,7 +52,7 @@ class EcoEnchantsPlugin : LibreforgePlugin() {
|
|||||||
val enchantmentRegisterer: EnchantmentRegisterer = TODO()
|
val enchantmentRegisterer: EnchantmentRegisterer = TODO()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
instance = this
|
plugin = this
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun loadConfigCategories(): List<ConfigCategory> {
|
override fun loadConfigCategories(): List<ConfigCategory> {
|
||||||
@@ -88,8 +89,6 @@ class EcoEnchantsPlugin : LibreforgePlugin() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun handleReload() {
|
override fun handleReload() {
|
||||||
registerVanillaEnchants(this)
|
|
||||||
|
|
||||||
DisplayCache.reload()
|
DisplayCache.reload()
|
||||||
EnchantSorter.reload(this)
|
EnchantSorter.reload(this)
|
||||||
ExtraItemSupport.reload(this)
|
ExtraItemSupport.reload(this)
|
||||||
@@ -102,7 +101,7 @@ class EcoEnchantsPlugin : LibreforgePlugin() {
|
|||||||
EnchantingTableSupport(this),
|
EnchantingTableSupport(this),
|
||||||
LootSupport(this),
|
LootSupport(this),
|
||||||
AnvilSupport(this),
|
AnvilSupport(this),
|
||||||
LoreConversion(this),
|
//LoreConversion(this),
|
||||||
GrindstoneSupport(this)
|
GrindstoneSupport(this)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -127,11 +126,4 @@ class EcoEnchantsPlugin : LibreforgePlugin() {
|
|||||||
EnchantDisplay(this)
|
EnchantDisplay(this)
|
||||||
} else null
|
} else null
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
|
||||||
/** Instance of EcoEnchants. */
|
|
||||||
@JvmStatic
|
|
||||||
lateinit var instance: EcoEnchantsPlugin
|
|
||||||
private set
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,10 +4,8 @@ import com.willfp.eco.core.EcoPlugin
|
|||||||
import com.willfp.eco.core.command.impl.PluginCommand
|
import com.willfp.eco.core.command.impl.PluginCommand
|
||||||
import com.willfp.eco.util.StringUtils
|
import com.willfp.eco.util.StringUtils
|
||||||
import com.willfp.eco.util.savedDisplayName
|
import com.willfp.eco.util.savedDisplayName
|
||||||
import com.willfp.ecoenchants.enchants.wrap
|
import com.willfp.ecoenchants.display.getFormattedName
|
||||||
import com.willfp.ecoenchants.rarity.EnchantmentRarities
|
import com.willfp.ecoenchants.enchant.wrap
|
||||||
import com.willfp.ecoenchants.type.EnchantmentTypes
|
|
||||||
import org.bukkit.Bukkit
|
|
||||||
import org.bukkit.NamespacedKey
|
import org.bukkit.NamespacedKey
|
||||||
import org.bukkit.command.CommandSender
|
import org.bukkit.command.CommandSender
|
||||||
import org.bukkit.enchantments.Enchantment
|
import org.bukkit.enchantments.Enchantment
|
||||||
@@ -48,7 +46,7 @@ class CommandEnchant(plugin: EcoPlugin) : PluginCommand(
|
|||||||
|
|
||||||
sender.sendMessage(
|
sender.sendMessage(
|
||||||
plugin.langYml.getMessage("added-enchant", StringUtils.FormatOption.WITHOUT_PLACEHOLDERS)
|
plugin.langYml.getMessage("added-enchant", StringUtils.FormatOption.WITHOUT_PLACEHOLDERS)
|
||||||
.replace("%enchant%", enchant.wrap().displayName)
|
.replace("%enchant%", enchant.wrap().getFormattedName(0))
|
||||||
.replace("%player%", player.savedDisplayName)
|
.replace("%player%", player.savedDisplayName)
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
@@ -59,7 +57,7 @@ class CommandEnchant(plugin: EcoPlugin) : PluginCommand(
|
|||||||
|
|
||||||
sender.sendMessage(
|
sender.sendMessage(
|
||||||
plugin.langYml.getMessage("removed-enchant", StringUtils.FormatOption.WITHOUT_PLACEHOLDERS)
|
plugin.langYml.getMessage("removed-enchant", StringUtils.FormatOption.WITHOUT_PLACEHOLDERS)
|
||||||
.replace("%enchant%", enchant.wrap().displayName)
|
.replace("%enchant%", enchant.wrap().getFormattedName(0))
|
||||||
.replace("%player%", player.savedDisplayName)
|
.replace("%player%", player.savedDisplayName)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package com.willfp.ecoenchants.commands
|
|||||||
import com.willfp.eco.core.command.impl.PluginCommand
|
import com.willfp.eco.core.command.impl.PluginCommand
|
||||||
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchants
|
import com.willfp.ecoenchants.enchants.EcoEnchants
|
||||||
import com.willfp.ecoenchants.enchants.EnchantGUI
|
import com.willfp.ecoenchants.enchant.EnchantGUI
|
||||||
import org.bukkit.ChatColor
|
import org.bukkit.ChatColor
|
||||||
import org.bukkit.command.CommandSender
|
import org.bukkit.command.CommandSender
|
||||||
import org.bukkit.entity.Player
|
import org.bukkit.entity.Player
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package com.willfp.ecoenchants.commands
|
|||||||
|
|
||||||
import com.willfp.eco.core.EcoPlugin
|
import com.willfp.eco.core.EcoPlugin
|
||||||
import com.willfp.eco.core.command.impl.Subcommand
|
import com.willfp.eco.core.command.impl.Subcommand
|
||||||
import com.willfp.ecoenchants.enchants.EnchantGUI
|
import com.willfp.ecoenchants.enchant.EnchantGUI
|
||||||
import org.bukkit.command.CommandSender
|
import org.bukkit.command.CommandSender
|
||||||
import org.bukkit.entity.Player
|
import org.bukkit.entity.Player
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import com.willfp.eco.core.items.builder.EnchantedBookBuilder
|
|||||||
import com.willfp.eco.util.NumberUtils
|
import com.willfp.eco.util.NumberUtils
|
||||||
import com.willfp.eco.util.StringUtils
|
import com.willfp.eco.util.StringUtils
|
||||||
import com.willfp.ecoenchants.display.getFormattedName
|
import com.willfp.ecoenchants.display.getFormattedName
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchants
|
import com.willfp.ecoenchants.enchant.EcoEnchants
|
||||||
import com.willfp.ecoenchants.enchants.wrap
|
import com.willfp.ecoenchants.enchant.wrap
|
||||||
import com.willfp.ecoenchants.rarity.EnchantmentRarities
|
import com.willfp.ecoenchants.rarity.EnchantmentRarities
|
||||||
import com.willfp.ecoenchants.rarity.EnchantmentRarity
|
import com.willfp.ecoenchants.rarity.EnchantmentRarity
|
||||||
import com.willfp.ecoenchants.type.EnchantmentType
|
import com.willfp.ecoenchants.type.EnchantmentType
|
||||||
@@ -51,7 +51,7 @@ class CommandGiveRandomBook(plugin: EcoPlugin) : PluginCommand(
|
|||||||
val enchantment = EcoEnchants.values()
|
val enchantment = EcoEnchants.values()
|
||||||
.filter {
|
.filter {
|
||||||
when (filter) {
|
when (filter) {
|
||||||
is EnchantmentRarity -> it.enchantmentRarity == filter
|
is EnchantmentRarity -> it.rarity == filter
|
||||||
is EnchantmentType -> it.type == filter
|
is EnchantmentType -> it.type == filter
|
||||||
else -> true
|
else -> true
|
||||||
} && it.maxLevel >= minLevel
|
} && it.maxLevel >= minLevel
|
||||||
@@ -64,7 +64,7 @@ class CommandGiveRandomBook(plugin: EcoPlugin) : PluginCommand(
|
|||||||
val level = NumberUtils.randInt(minLevel, maxLevel.coerceAtMost(enchantment.maxLevel))
|
val level = NumberUtils.randInt(minLevel, maxLevel.coerceAtMost(enchantment.maxLevel))
|
||||||
|
|
||||||
val item = EnchantedBookBuilder()
|
val item = EnchantedBookBuilder()
|
||||||
.addStoredEnchantment(enchantment, level)
|
.addStoredEnchantment(enchantment.enchantment, level)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
DropQueue(player)
|
DropQueue(player)
|
||||||
@@ -75,7 +75,7 @@ class CommandGiveRandomBook(plugin: EcoPlugin) : PluginCommand(
|
|||||||
sender.sendMessage(
|
sender.sendMessage(
|
||||||
plugin.langYml.getMessage("gave-random-book", StringUtils.FormatOption.WITHOUT_PLACEHOLDERS)
|
plugin.langYml.getMessage("gave-random-book", StringUtils.FormatOption.WITHOUT_PLACEHOLDERS)
|
||||||
.replace("%player%", player.name)
|
.replace("%player%", player.name)
|
||||||
.replace("%enchantment%", enchantment.wrap().getFormattedName(level))
|
.replace("%enchantment%", enchantment.getFormattedName(level))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,9 +3,6 @@ package com.willfp.ecoenchants.config
|
|||||||
import com.willfp.eco.core.EcoPlugin
|
import com.willfp.eco.core.EcoPlugin
|
||||||
import com.willfp.eco.core.config.BaseConfig
|
import com.willfp.eco.core.config.BaseConfig
|
||||||
import com.willfp.eco.core.config.ConfigType
|
import com.willfp.eco.core.config.ConfigType
|
||||||
import com.willfp.eco.core.config.ExtendableConfig
|
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchant
|
|
||||||
import org.bukkit.enchantments.Enchantment
|
|
||||||
|
|
||||||
class TypesYml(plugin: EcoPlugin) : BaseConfig("types", plugin, true, ConfigType.YAML)
|
class TypesYml(plugin: EcoPlugin) : BaseConfig("types", plugin, true, ConfigType.YAML)
|
||||||
class TargetsYml(plugin: EcoPlugin) : BaseConfig("targets", plugin, true, ConfigType.YAML)
|
class TargetsYml(plugin: EcoPlugin) : BaseConfig("targets", plugin, true, ConfigType.YAML)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.willfp.ecoenchants.enchants
|
package com.willfp.ecoenchants.display
|
||||||
|
|
||||||
class DescriptionPlaceholder(
|
class DescriptionPlaceholder(
|
||||||
val id: String,
|
val id: String,
|
||||||
@@ -9,8 +9,8 @@ import com.willfp.eco.core.fast.fast
|
|||||||
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
||||||
import com.willfp.ecoenchants.commands.CommandToggleDescriptions.Companion.seesEnchantmentDescriptions
|
import com.willfp.ecoenchants.commands.CommandToggleDescriptions.Companion.seesEnchantmentDescriptions
|
||||||
import com.willfp.ecoenchants.display.EnchantSorter.sortForDisplay
|
import com.willfp.ecoenchants.display.EnchantSorter.sortForDisplay
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchant
|
import com.willfp.ecoenchants.enchant.EcoEnchant
|
||||||
import com.willfp.ecoenchants.enchants.wrap
|
import com.willfp.ecoenchants.enchant.wrap
|
||||||
import com.willfp.ecoenchants.target.EnchantmentTargets.isEnchantable
|
import com.willfp.ecoenchants.target.EnchantmentTargets.isEnchantable
|
||||||
import com.willfp.libreforge.ItemProvidedHolder
|
import com.willfp.libreforge.ItemProvidedHolder
|
||||||
import org.bukkit.Material
|
import org.bukkit.Material
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import com.willfp.eco.util.NumberUtils
|
|||||||
import com.willfp.eco.util.StringUtils
|
import com.willfp.eco.util.StringUtils
|
||||||
import com.willfp.eco.util.formatEco
|
import com.willfp.eco.util.formatEco
|
||||||
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchantLike
|
import com.willfp.ecoenchants.enchant.EcoEnchantLike
|
||||||
import org.bukkit.entity.Player
|
import org.bukkit.entity.Player
|
||||||
|
|
||||||
// This is an object to be able to invalidate the cache on reload
|
// This is an object to be able to invalidate the cache on reload
|
||||||
@@ -35,20 +35,18 @@ fun EcoEnchantLike.getFormattedName(
|
|||||||
level: Int,
|
level: Int,
|
||||||
showNotMet: Boolean = false
|
showNotMet: Boolean = false
|
||||||
): String {
|
): String {
|
||||||
val plugin = EcoEnchantsPlugin.instance
|
|
||||||
|
|
||||||
return DisplayCache.nameCache.get(DisplayableEnchant(this, level, showNotMet)) {
|
return DisplayCache.nameCache.get(DisplayableEnchant(this, level, showNotMet)) {
|
||||||
val numerals = plugin.configYml.getBool("display.numerals.enabled") &&
|
val numerals = plugin.configYml.getBool("display.numerals.enabled") &&
|
||||||
level <= plugin.configYml.getInt("display.numerals.threshold")
|
level <= plugin.configYml.getInt("display.numerals.threshold")
|
||||||
|
|
||||||
val typeFormat = this.type.format
|
val typeFormat = this.type.format
|
||||||
val name = this.unformattedDisplayName
|
val name = this.rawDisplayName
|
||||||
val number = if (numerals) NumberUtils.toNumeral(level) else level.toString()
|
val number = if (numerals) NumberUtils.toNumeral(level) else level.toString()
|
||||||
val dontShowNumber = (level == 1 && this.enchant.maxLevel == 1) || level < 1
|
val dontShowNumber = (level == 1 && this.enchantment.maxLevel == 1) || level < 1
|
||||||
|
|
||||||
val notMetFormat = if (showNotMet) plugin.configYml.getString("display.not-met.format") else ""
|
val notMetFormat = if (showNotMet) plugin.configYml.getString("display.not-met.format") else ""
|
||||||
|
|
||||||
if (plugin.configYml.getBool("display.above-max-level.enabled") && level > this.enchant.maxLevel) {
|
if (plugin.configYml.getBool("display.above-max-level.enabled") && level > this.enchantment.maxLevel) {
|
||||||
val format = plugin.configYml.getString("display.above-max-level.format")
|
val format = plugin.configYml.getString("display.above-max-level.format")
|
||||||
val levelOnly = plugin.configYml.getBool("display.above-max-level.level-only")
|
val levelOnly = plugin.configYml.getBool("display.above-max-level.level-only")
|
||||||
|
|
||||||
@@ -74,13 +72,11 @@ private val resetTags = arrayOf(
|
|||||||
)
|
)
|
||||||
|
|
||||||
fun EcoEnchantLike.getFormattedDescription(level: Int, player: Player? = null): List<String> {
|
fun EcoEnchantLike.getFormattedDescription(level: Int, player: Player? = null): List<String> {
|
||||||
val plugin = EcoEnchantsPlugin.instance
|
|
||||||
|
|
||||||
return DisplayCache.descriptionCache.get(DisplayableEnchant(this, level)) {
|
return DisplayCache.descriptionCache.get(DisplayableEnchant(this, level)) {
|
||||||
val descriptionFormat = plugin.configYml.getString("display.descriptions.format")
|
val descriptionFormat = plugin.configYml.getString("display.descriptions.format")
|
||||||
val wrap = plugin.configYml.getInt("display.descriptions.word-wrap")
|
val wrap = plugin.configYml.getInt("display.descriptions.word-wrap")
|
||||||
|
|
||||||
var description = descriptionFormat + this.getUnformattedDescription(level, player)
|
var description = descriptionFormat + this.getRawDescription(level, player)
|
||||||
|
|
||||||
// Replace reset tags with description format
|
// Replace reset tags with description format
|
||||||
for (tag in resetTags) {
|
for (tag in resetTags) {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.willfp.ecoenchants.display
|
package com.willfp.ecoenchants.display
|
||||||
|
|
||||||
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
||||||
import com.willfp.ecoenchants.enchants.wrap
|
import com.willfp.ecoenchants.enchant.wrap
|
||||||
import com.willfp.ecoenchants.rarity.EnchantmentRarities
|
import com.willfp.ecoenchants.rarity.EnchantmentRarities
|
||||||
import com.willfp.ecoenchants.rarity.EnchantmentRarity
|
import com.willfp.ecoenchants.rarity.EnchantmentRarity
|
||||||
import com.willfp.ecoenchants.type.EnchantmentType
|
import com.willfp.ecoenchants.type.EnchantmentType
|
||||||
@@ -41,13 +41,13 @@ fun List<EnchantmentSorter>.getSafely(index: Int) =
|
|||||||
|
|
||||||
object AlphabeticSorter : EnchantmentSorter {
|
object AlphabeticSorter : EnchantmentSorter {
|
||||||
override fun sort(enchantments: Collection<Enchantment>, children: List<EnchantmentSorter>): List<Enchantment> {
|
override fun sort(enchantments: Collection<Enchantment>, children: List<EnchantmentSorter>): List<Enchantment> {
|
||||||
return enchantments.sortedBy { ChatColor.stripColor(it.wrap().displayName) }
|
return enchantments.sortedBy { ChatColor.stripColor(it.wrap().getFormattedName(0)) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object LengthSorter : EnchantmentSorter {
|
object LengthSorter : EnchantmentSorter {
|
||||||
override fun sort(enchantments: Collection<Enchantment>, children: List<EnchantmentSorter>): List<Enchantment> {
|
override fun sort(enchantments: Collection<Enchantment>, children: List<EnchantmentSorter>): List<Enchantment> {
|
||||||
return enchantments.sortedBy { ChatColor.stripColor(it.wrap().displayName)!!.length }
|
return enchantments.sortedBy { ChatColor.stripColor(it.wrap().getFormattedName(0))!!.length }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,7 +93,7 @@ object RaritySorter : EnchantmentSorter {
|
|||||||
|
|
||||||
for (rarity in rarities) {
|
for (rarity in rarities) {
|
||||||
for (enchantment in children.getSafely(0).sort(enchantments, children.drop(1))) {
|
for (enchantment in children.getSafely(0).sort(enchantments, children.drop(1))) {
|
||||||
if (rarity != enchantment.wrap().enchantmentRarity) {
|
if (rarity != enchantment.wrap().rarity) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,16 @@ interface EcoEnchant : KRegistrable, EcoEnchantLike {
|
|||||||
*/
|
*/
|
||||||
val maxLevel: Int
|
val maxLevel: Int
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If this enchantment conflicts with all other enchantments.
|
||||||
|
*/
|
||||||
|
val conflictsWithEverything: Boolean
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The conflicts.
|
||||||
|
*/
|
||||||
|
val conflicts: Set<Enchantment>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The enchantment targets.
|
* The enchantment targets.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -8,8 +8,7 @@ import com.willfp.eco.core.placeholder.StaticPlaceholder
|
|||||||
import com.willfp.eco.core.placeholder.context.placeholderContext
|
import com.willfp.eco.core.placeholder.context.placeholderContext
|
||||||
import com.willfp.eco.util.NumberUtils
|
import com.willfp.eco.util.NumberUtils
|
||||||
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
||||||
import com.willfp.ecoenchants.enchants.DescriptionPlaceholder
|
import com.willfp.ecoenchants.display.DescriptionPlaceholder
|
||||||
import com.willfp.ecoenchants.enchants.wrap
|
|
||||||
import com.willfp.ecoenchants.mechanics.infiniteIfNegative
|
import com.willfp.ecoenchants.mechanics.infiniteIfNegative
|
||||||
import com.willfp.ecoenchants.rarity.EnchantmentRarity
|
import com.willfp.ecoenchants.rarity.EnchantmentRarity
|
||||||
import com.willfp.ecoenchants.type.EnchantmentType
|
import com.willfp.ecoenchants.type.EnchantmentType
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import com.willfp.ecoenchants.enchant.impl.hardcoded.EnchantmentPermanenceCurse
|
|||||||
import com.willfp.ecoenchants.enchant.impl.hardcoded.EnchantmentRepairing
|
import com.willfp.ecoenchants.enchant.impl.hardcoded.EnchantmentRepairing
|
||||||
import com.willfp.ecoenchants.enchant.impl.hardcoded.EnchantmentReplenish
|
import com.willfp.ecoenchants.enchant.impl.hardcoded.EnchantmentReplenish
|
||||||
import com.willfp.ecoenchants.enchant.impl.hardcoded.EnchantmentSoulbound
|
import com.willfp.ecoenchants.enchant.impl.hardcoded.EnchantmentSoulbound
|
||||||
import com.willfp.ecoenchants.enchants.sendPrompts
|
|
||||||
import com.willfp.ecoenchants.integrations.EnchantRegistrations
|
import com.willfp.ecoenchants.integrations.EnchantRegistrations
|
||||||
import com.willfp.ecoenchants.rarity.EnchantmentRarities
|
import com.willfp.ecoenchants.rarity.EnchantmentRarities
|
||||||
import com.willfp.ecoenchants.target.EnchantmentTargets
|
import com.willfp.ecoenchants.target.EnchantmentTargets
|
||||||
@@ -39,42 +38,46 @@ object EcoEnchants : RegistrableCategory<EcoEnchant>("enchant", "enchants") {
|
|||||||
override fun afterReload(plugin: LibreforgePlugin) {
|
override fun afterReload(plugin: LibreforgePlugin) {
|
||||||
plugin as EcoEnchantsPlugin
|
plugin as EcoEnchantsPlugin
|
||||||
|
|
||||||
sendPrompts(plugin)
|
|
||||||
registerHardcodedEnchantments(plugin)
|
registerHardcodedEnchantments(plugin)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun acceptConfig(plugin: LibreforgePlugin, id: String, config: Config) {
|
override fun acceptConfig(plugin: LibreforgePlugin, id: String, config: Config) {
|
||||||
plugin as EcoEnchantsPlugin
|
plugin as EcoEnchantsPlugin
|
||||||
|
|
||||||
val enchant = createEnchantment(plugin, id, config) ?: return
|
if (!config.has("effects")) {
|
||||||
|
return
|
||||||
registry.register(enchant)
|
|
||||||
plugin.enchantmentRegisterer.register(enchant)
|
|
||||||
EnchantRegistrations.registerEnchantments()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createEnchantment(plugin: LibreforgePlugin, id: String, config: Config): EcoEnchant? {
|
val enchant = LibreforgeEcoEnchant(
|
||||||
plugin as EcoEnchantsPlugin
|
|
||||||
|
|
||||||
if (config.has("effects")) {
|
|
||||||
// Libreforge
|
|
||||||
return LibreforgeEcoEnchant(
|
|
||||||
id,
|
id,
|
||||||
config,
|
config,
|
||||||
plugin
|
plugin
|
||||||
)
|
)
|
||||||
} else {
|
|
||||||
TODO()
|
doRegister(plugin, enchant)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun doRegister(plugin: EcoEnchantsPlugin, enchant: EcoEnchant) {
|
||||||
|
plugin.enchantmentRegisterer.register(enchant)
|
||||||
|
// Register delegated versions
|
||||||
|
registry.register(enchant.enchantment as EcoEnchant)
|
||||||
|
EnchantRegistrations.registerEnchantments()
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Register the hardcoded enchantments. */
|
|
||||||
private fun registerHardcodedEnchantments(
|
private fun registerHardcodedEnchantments(
|
||||||
plugin: EcoEnchantsPlugin
|
plugin: EcoEnchantsPlugin
|
||||||
) {
|
) {
|
||||||
EnchantmentPermanenceCurse(plugin)
|
val hardcodedEnchantments = listOf(
|
||||||
EnchantmentRepairing(plugin)
|
EnchantmentPermanenceCurse(plugin),
|
||||||
EnchantmentReplenish(plugin)
|
EnchantmentRepairing(plugin),
|
||||||
|
EnchantmentReplenish(plugin),
|
||||||
EnchantmentSoulbound(plugin)
|
EnchantmentSoulbound(plugin)
|
||||||
|
)
|
||||||
|
|
||||||
|
for (enchantment in hardcodedEnchantments) {
|
||||||
|
if (enchantment.isPresent) {
|
||||||
|
doRegister(plugin, enchantment)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.willfp.ecoenchants.enchants
|
package com.willfp.ecoenchants.enchant
|
||||||
|
|
||||||
import com.github.benmanes.caffeine.cache.Caffeine
|
import com.github.benmanes.caffeine.cache.Caffeine
|
||||||
import com.willfp.eco.core.config.base.LangYml
|
import com.willfp.eco.core.config.base.LangYml
|
||||||
@@ -73,7 +73,7 @@ object EnchantGUI {
|
|||||||
onRender { player, menu ->
|
onRender { player, menu ->
|
||||||
val atCaptive = menu.getCaptiveItem(player, captiveRow, captiveColumn)
|
val atCaptive = menu.getCaptiveItem(player, captiveRow, captiveColumn)
|
||||||
if (atCaptive.isEmpty || atCaptive == null || atCaptive.type == Material.BOOK) {
|
if (atCaptive.isEmpty || atCaptive == null || atCaptive.type == Material.BOOK) {
|
||||||
menu.setState(player, "enchants", EcoEnchants.values().sortForDisplay())
|
menu.setState(player, "enchants", EcoEnchants.values().map { it.enchantment }.sortForDisplay())
|
||||||
} else {
|
} else {
|
||||||
menu.setState(
|
menu.setState(
|
||||||
player,
|
player,
|
||||||
@@ -207,32 +207,32 @@ private val cachedEnchantmentSlots = Caffeine.newBuilder()
|
|||||||
private fun EcoEnchant.getInformationSlot(plugin: EcoEnchantsPlugin, player: Player): Slot {
|
private fun EcoEnchant.getInformationSlot(plugin: EcoEnchantsPlugin, player: Player): Slot {
|
||||||
return cachedEnchantmentSlots.get(this) {
|
return cachedEnchantmentSlots.get(this) {
|
||||||
val level = if (plugin.configYml.getBool("enchantinfo.item.show-max-level")) {
|
val level = if (plugin.configYml.getBool("enchantinfo.item.show-max-level")) {
|
||||||
enchant.maxLevel
|
it.maxLevel
|
||||||
} else {
|
} else {
|
||||||
1
|
1
|
||||||
}
|
}
|
||||||
|
|
||||||
slot(
|
slot(
|
||||||
EnchantedBookBuilder()
|
EnchantedBookBuilder()
|
||||||
.addStoredEnchantment(enchant, level)
|
.addStoredEnchantment(enchantment, level)
|
||||||
.addItemFlag(ItemFlag.HIDE_ENCHANTS)
|
.addItemFlag(ItemFlag.HIDE_ENCHANTS)
|
||||||
.setDisplayName(enchant.getFormattedName(level))
|
.setDisplayName(this.getFormattedName(level))
|
||||||
.addLoreLines(enchant.getFormattedDescription(level, player))
|
.addLoreLines(this.getFormattedDescription(level, player))
|
||||||
.addLoreLines {
|
.addLoreLines {
|
||||||
plugin.configYml.getStrings("enchantinfo.item.lore")
|
plugin.configYml.getStrings("enchantinfo.item.lore")
|
||||||
.map {
|
.map {
|
||||||
it.replace("%max_level%", enchant.maxLevel.toString())
|
it.replace("%max_level%", enchantment.maxLevel.toString())
|
||||||
.replace("%rarity%", enchant.enchantmentRarity.displayName)
|
.replace("%rarity%", this.rarity.displayName)
|
||||||
.replace(
|
.replace(
|
||||||
"%targets%",
|
"%targets%",
|
||||||
enchant.targets.joinToString(", ") { target -> target.displayName }
|
this.targets.joinToString(", ") { target -> target.displayName }
|
||||||
)
|
)
|
||||||
.replace(
|
.replace(
|
||||||
"%conflicts%",
|
"%conflicts%",
|
||||||
if (enchant.conflictsWithEverything) {
|
if (this.conflictsWithEverything) {
|
||||||
plugin.langYml.getFormattedString("all-conflicts")
|
plugin.langYml.getFormattedString("all-conflicts")
|
||||||
} else {
|
} else {
|
||||||
enchant.conflicts.joinToString(", ") { conflict ->
|
this.conflicts.joinToString(", ") { conflict ->
|
||||||
conflict.wrap().getFormattedName(0)
|
conflict.wrap().getFormattedName(0)
|
||||||
}.ifEmpty { plugin.langYml.getFormattedString("no-conflicts") }
|
}.ifEmpty { plugin.langYml.getFormattedString("no-conflicts") }
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.willfp.ecoenchants.enchant
|
package com.willfp.ecoenchants.enchant
|
||||||
|
|
||||||
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
|
||||||
import com.willfp.ecoenchants.enchant.impl.VanillaEcoEnchantLike
|
import com.willfp.ecoenchants.enchant.impl.VanillaEcoEnchantLike
|
||||||
|
import com.willfp.ecoenchants.plugin
|
||||||
import org.bukkit.NamespacedKey
|
import org.bukkit.NamespacedKey
|
||||||
import org.bukkit.enchantments.Enchantment
|
import org.bukkit.enchantments.Enchantment
|
||||||
|
|
||||||
@@ -14,7 +14,7 @@ fun Enchantment.wrap(): EcoEnchantLike {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return ecoEnchantLikes.getOrPut(this.key) {
|
return ecoEnchantLikes.getOrPut(this.key) {
|
||||||
VanillaEcoEnchantLike(this, EcoEnchantsPlugin.instance)
|
VanillaEcoEnchantLike(this, plugin)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package com.willfp.ecoenchants.enchant
|
||||||
|
|
||||||
|
import com.willfp.ecoenchants.plugin
|
||||||
|
import org.bukkit.NamespacedKey
|
||||||
|
import org.bukkit.enchantments.Enchantment
|
||||||
|
|
||||||
|
val Enchantment.vanillaEnchantmentData: VanillaEnchantmentData?
|
||||||
|
get() {
|
||||||
|
val vanilla = plugin.vanillaEnchantsYml.getSubsectionOrNull(key.key) ?: return null
|
||||||
|
|
||||||
|
return VanillaEnchantmentData(
|
||||||
|
vanilla.getIntOrNull("max-level"),
|
||||||
|
vanilla.getStringsOrNull("conflicts")?.map { NamespacedKey.minecraft(it) }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
interface EcoCraftEnchantmentManagerProxy {
|
||||||
|
fun registerNewCraftEnchantment(enchantment: Enchantment, data: VanillaEnchantmentData)
|
||||||
|
}
|
||||||
|
|
||||||
|
data class VanillaEnchantmentData(
|
||||||
|
val maxLevel: Int?,
|
||||||
|
val conflicts: Collection<NamespacedKey>?
|
||||||
|
)
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.willfp.ecoenchants.enchant.impl
|
package com.willfp.ecoenchants.enchant.impl
|
||||||
|
|
||||||
import com.willfp.eco.core.config.interfaces.Config
|
import com.willfp.eco.core.config.interfaces.Config
|
||||||
|
import com.willfp.eco.util.containsIgnoreCase
|
||||||
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
||||||
import com.willfp.ecoenchants.enchant.EcoEnchant
|
import com.willfp.ecoenchants.enchant.EcoEnchant
|
||||||
import com.willfp.ecoenchants.enchant.EcoEnchantLevel
|
import com.willfp.ecoenchants.enchant.EcoEnchantLevel
|
||||||
@@ -32,6 +33,14 @@ abstract class EcoEnchantBase(
|
|||||||
|
|
||||||
override val maxLevel = config.getInt("max-level")
|
override val maxLevel = config.getInt("max-level")
|
||||||
|
|
||||||
|
override val conflictsWithEverything: Boolean
|
||||||
|
get() = conflictIds.containsIgnoreCase("all")
|
||||||
|
|| conflictIds.containsIgnoreCase("everything")
|
||||||
|
|
||||||
|
override val conflicts = config.getStrings("conflicts")
|
||||||
|
.mapNotNull { Enchantment.getByKey(NamespacedKey.minecraft(it)) }
|
||||||
|
.toSet()
|
||||||
|
|
||||||
override val targets = config.getStrings("targets")
|
override val targets = config.getStrings("targets")
|
||||||
.mapNotNull { EnchantmentTargets[it] }
|
.mapNotNull { EnchantmentTargets[it] }
|
||||||
.toSet()
|
.toSet()
|
||||||
|
|||||||
@@ -12,11 +12,15 @@ abstract class HardcodedEcoEnchant(
|
|||||||
id: String,
|
id: String,
|
||||||
plugin: EcoEnchantsPlugin
|
plugin: EcoEnchantsPlugin
|
||||||
) : EcoEnchantBase(id, plugin) {
|
) : EcoEnchantBase(id, plugin) {
|
||||||
final override fun loadConfig(): Config {
|
private val file: File?
|
||||||
return File(plugin.dataFolder, "enchants")
|
get() = File(plugin.dataFolder, "enchants")
|
||||||
.walk()
|
.walk()
|
||||||
.firstOrNull { file -> file.nameWithoutExtension == id }
|
.firstOrNull { file -> file.nameWithoutExtension == id }
|
||||||
.readConfig(ConfigType.YAML)
|
|
||||||
|
val isPresent = file != null
|
||||||
|
|
||||||
|
final override fun loadConfig(): Config {
|
||||||
|
return file.readConfig(ConfigType.YAML)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createLevel(level: Int): EcoEnchantLevel {
|
override fun createLevel(level: Int): EcoEnchantLevel {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package com.willfp.ecoenchants.enchant.impl.hardcoded
|
|||||||
|
|
||||||
import com.willfp.eco.util.DurabilityUtils
|
import com.willfp.eco.util.DurabilityUtils
|
||||||
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchant
|
import com.willfp.ecoenchants.enchant.impl.HardcodedEcoEnchant
|
||||||
import com.willfp.ecoenchants.target.EnchantLookup.getActiveEnchantLevelInSlot
|
import com.willfp.ecoenchants.target.EnchantLookup.getActiveEnchantLevelInSlot
|
||||||
import com.willfp.ecoenchants.target.EnchantLookup.hasEnchantActive
|
import com.willfp.ecoenchants.target.EnchantLookup.hasEnchantActive
|
||||||
import com.willfp.libreforge.slot.impl.SlotTypeHands
|
import com.willfp.libreforge.slot.impl.SlotTypeHands
|
||||||
@@ -10,12 +10,11 @@ import org.bukkit.Bukkit
|
|||||||
|
|
||||||
class EnchantmentRepairing(
|
class EnchantmentRepairing(
|
||||||
plugin: EcoEnchantsPlugin
|
plugin: EcoEnchantsPlugin
|
||||||
) : EcoEnchant(
|
) : HardcodedEcoEnchant(
|
||||||
"repairing",
|
"repairing",
|
||||||
plugin,
|
plugin
|
||||||
force = false
|
|
||||||
) {
|
) {
|
||||||
override fun onInit() {
|
override fun onRegister() {
|
||||||
val frequency = config.getInt("frequency").toLong()
|
val frequency = config.getInt("frequency").toLong()
|
||||||
|
|
||||||
plugin.scheduler.runTimer(frequency, frequency) {
|
plugin.scheduler.runTimer(frequency, frequency) {
|
||||||
|
|||||||
@@ -2,7 +2,8 @@ package com.willfp.ecoenchants.enchant.impl.hardcoded
|
|||||||
|
|
||||||
import com.willfp.eco.core.EcoPlugin
|
import com.willfp.eco.core.EcoPlugin
|
||||||
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchant
|
import com.willfp.ecoenchants.enchant.EcoEnchant
|
||||||
|
import com.willfp.ecoenchants.enchant.impl.HardcodedEcoEnchant
|
||||||
import com.willfp.ecoenchants.target.EnchantLookup.hasEnchantActive
|
import com.willfp.ecoenchants.target.EnchantLookup.hasEnchantActive
|
||||||
import org.bukkit.Bukkit
|
import org.bukkit.Bukkit
|
||||||
import org.bukkit.Material
|
import org.bukkit.Material
|
||||||
@@ -17,13 +18,18 @@ import org.bukkit.inventory.ItemStack
|
|||||||
|
|
||||||
class EnchantmentReplenish(
|
class EnchantmentReplenish(
|
||||||
plugin: EcoEnchantsPlugin
|
plugin: EcoEnchantsPlugin
|
||||||
) : EcoEnchant(
|
) : HardcodedEcoEnchant(
|
||||||
"replenish",
|
"replenish",
|
||||||
plugin,
|
plugin
|
||||||
force = false
|
|
||||||
) {
|
) {
|
||||||
override fun onInit() {
|
private var handler = ReplenishHandler(this, plugin)
|
||||||
this.registerListener(ReplenishHandler(this, plugin))
|
|
||||||
|
override fun onRegister() {
|
||||||
|
plugin.eventManager.registerListener(handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onRemove() {
|
||||||
|
plugin.eventManager.unregisterListener(handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ReplenishHandler(
|
private class ReplenishHandler(
|
||||||
|
|||||||
@@ -9,7 +9,8 @@ import com.willfp.eco.core.drops.DropQueue
|
|||||||
import com.willfp.eco.core.fast.fast
|
import com.willfp.eco.core.fast.fast
|
||||||
import com.willfp.eco.core.items.Items
|
import com.willfp.eco.core.items.Items
|
||||||
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchant
|
import com.willfp.ecoenchants.enchant.impl.HardcodedEcoEnchant
|
||||||
|
import com.willfp.ecoenchants.enchant.EcoEnchant
|
||||||
import com.willfp.ecoenchants.target.EnchantLookup.getActiveEnchantLevelInSlot
|
import com.willfp.ecoenchants.target.EnchantLookup.getActiveEnchantLevelInSlot
|
||||||
import com.willfp.ecoenchants.target.EnchantLookup.hasEnchantActive
|
import com.willfp.ecoenchants.target.EnchantLookup.hasEnchantActive
|
||||||
import org.bukkit.entity.Player
|
import org.bukkit.entity.Player
|
||||||
@@ -24,13 +25,18 @@ import org.bukkit.persistence.PersistentDataType
|
|||||||
|
|
||||||
class EnchantmentSoulbound(
|
class EnchantmentSoulbound(
|
||||||
plugin: EcoEnchantsPlugin
|
plugin: EcoEnchantsPlugin
|
||||||
) : EcoEnchant(
|
) : HardcodedEcoEnchant(
|
||||||
"soulbound",
|
"soulbound",
|
||||||
plugin,
|
plugin
|
||||||
force = false
|
|
||||||
) {
|
) {
|
||||||
override fun onInit() {
|
private val handler = SoulboundHandler(plugin, this)
|
||||||
this.registerListener(SoulboundHandler(plugin, this))
|
|
||||||
|
override fun onRegister() {
|
||||||
|
plugin.eventManager.registerListener(handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onRemove() {
|
||||||
|
plugin.eventManager.unregisterListener(handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
private class SoulboundHandler(
|
private class SoulboundHandler(
|
||||||
@@ -92,7 +98,7 @@ class EnchantmentSoulbound(
|
|||||||
|
|
||||||
if (enchant.config.getBool("single-use")) {
|
if (enchant.config.getBool("single-use")) {
|
||||||
val meta = item.itemMeta
|
val meta = item.itemMeta
|
||||||
meta.removeEnchant(enchant)
|
meta.removeEnchant(enchant.enchantment)
|
||||||
item.itemMeta = meta
|
item.itemMeta = meta
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -139,7 +145,7 @@ class EnchantmentSoulbound(
|
|||||||
)
|
)
|
||||||
fun preventDroppingSoulboundItems(event: PlayerDeathEvent) {
|
fun preventDroppingSoulboundItems(event: PlayerDeathEvent) {
|
||||||
event.drops.removeIf { it.fast().persistentDataContainer.has(soulboundKey, PersistentDataType.INTEGER)
|
event.drops.removeIf { it.fast().persistentDataContainer.has(soulboundKey, PersistentDataType.INTEGER)
|
||||||
&& it.itemMeta.hasEnchant(enchant)
|
&& it.itemMeta.hasEnchant(enchant.enchantment)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package com.willfp.ecoenchants.enchant.registration.legacy
|
|||||||
import com.willfp.eco.util.StringUtils
|
import com.willfp.eco.util.StringUtils
|
||||||
import com.willfp.ecoenchants.display.getFormattedName
|
import com.willfp.ecoenchants.display.getFormattedName
|
||||||
import com.willfp.ecoenchants.enchant.EcoEnchant
|
import com.willfp.ecoenchants.enchant.EcoEnchant
|
||||||
import com.willfp.ecoenchants.enchants.wrap
|
import com.willfp.ecoenchants.enchant.wrap
|
||||||
import io.papermc.paper.enchantments.EnchantmentRarity
|
import io.papermc.paper.enchantments.EnchantmentRarity
|
||||||
import net.kyori.adventure.text.Component
|
import net.kyori.adventure.text.Component
|
||||||
import org.bukkit.enchantments.Enchantment
|
import org.bukkit.enchantments.Enchantment
|
||||||
|
|||||||
@@ -3,4 +3,8 @@ package com.willfp.ecoenchants.enchant.registration.modern
|
|||||||
import com.willfp.ecoenchants.enchant.registration.EnchantmentRegisterer
|
import com.willfp.ecoenchants.enchant.registration.EnchantmentRegisterer
|
||||||
|
|
||||||
interface ModernEnchantmentRegistererProxy : EnchantmentRegisterer {
|
interface ModernEnchantmentRegistererProxy : EnchantmentRegisterer {
|
||||||
|
/**
|
||||||
|
* Replace the bukkit enchantment registry with the new EcoEnchants one.
|
||||||
|
*/
|
||||||
|
fun replaceRegistry()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,336 +0,0 @@
|
|||||||
package com.willfp.ecoenchants.enchants
|
|
||||||
|
|
||||||
import com.github.benmanes.caffeine.cache.Caffeine
|
|
||||||
import com.willfp.eco.core.config.ConfigType
|
|
||||||
import com.willfp.eco.core.config.config
|
|
||||||
import com.willfp.eco.core.config.interfaces.Config
|
|
||||||
import com.willfp.eco.core.config.readConfig
|
|
||||||
import com.willfp.eco.core.fast.fast
|
|
||||||
import com.willfp.eco.core.placeholder.PlayerlessPlaceholder
|
|
||||||
import com.willfp.eco.core.placeholder.context.PlaceholderContext
|
|
||||||
import com.willfp.eco.core.placeholder.templates.SimpleInjectablePlaceholder
|
|
||||||
import com.willfp.eco.core.registry.KRegistrable
|
|
||||||
import com.willfp.eco.util.StringUtils
|
|
||||||
import com.willfp.eco.util.containsIgnoreCase
|
|
||||||
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
|
||||||
import com.willfp.ecoenchants.display.getFormattedName
|
|
||||||
import com.willfp.ecoenchants.mechanics.infiniteIfNegative
|
|
||||||
import com.willfp.ecoenchants.rarity.EnchantmentRarities
|
|
||||||
import com.willfp.ecoenchants.target.EnchantmentTargets
|
|
||||||
import com.willfp.ecoenchants.type.EnchantmentTypes
|
|
||||||
import com.willfp.libreforge.SilentViolationContext
|
|
||||||
import com.willfp.libreforge.ViolationContext
|
|
||||||
import com.willfp.libreforge.conditions.ConditionList
|
|
||||||
import com.willfp.libreforge.conditions.Conditions
|
|
||||||
import com.willfp.libreforge.effects.emptyEffectList
|
|
||||||
import com.willfp.libreforge.slot.SlotType
|
|
||||||
import net.kyori.adventure.text.Component
|
|
||||||
import org.bukkit.Bukkit
|
|
||||||
import org.bukkit.Material
|
|
||||||
import org.bukkit.NamespacedKey
|
|
||||||
import org.bukkit.enchantments.Enchantment
|
|
||||||
import org.bukkit.enchantments.EnchantmentTarget
|
|
||||||
import org.bukkit.entity.EntityCategory
|
|
||||||
import org.bukkit.event.Listener
|
|
||||||
import org.bukkit.inventory.EquipmentSlot
|
|
||||||
import org.bukkit.inventory.ItemStack
|
|
||||||
import org.bukkit.permissions.Permission
|
|
||||||
import org.bukkit.permissions.PermissionDefault
|
|
||||||
import java.io.File
|
|
||||||
import java.util.Objects
|
|
||||||
|
|
||||||
|
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
abstract class EcoEnchant(
|
|
||||||
override val id: String,
|
|
||||||
configProvider: (EcoEnchant) -> Config,
|
|
||||||
protected val plugin: EcoEnchantsPlugin
|
|
||||||
) : Enchantment(NamespacedKey.minecraft(id)), EcoEnchantLike, KRegistrable {
|
|
||||||
final override val config by lazy { configProvider(this) }
|
|
||||||
override val enchant by lazy { this }
|
|
||||||
|
|
||||||
private val levels = Caffeine.newBuilder()
|
|
||||||
.build<Int, EcoEnchantLevel>()
|
|
||||||
|
|
||||||
override val displayName = config.getFormattedString("display-name")
|
|
||||||
override val unformattedDisplayName = config.getString("display-name")
|
|
||||||
|
|
||||||
val conditions: ConditionList
|
|
||||||
|
|
||||||
val targets = config.getStrings("targets")
|
|
||||||
.mapNotNull { EnchantmentTargets[it] }
|
|
||||||
|
|
||||||
val slots: Set<SlotType>
|
|
||||||
get() = targets.map { it.slot }.toSet()
|
|
||||||
|
|
||||||
override val type = EnchantmentTypes[config.getString("type")] ?: EnchantmentTypes.values().first()
|
|
||||||
|
|
||||||
override val enchantmentRarity =
|
|
||||||
EnchantmentRarities[config.getString("rarity")] ?: EnchantmentRarities.values().first()
|
|
||||||
|
|
||||||
private val conflictNames = config.getStrings("conflicts")
|
|
||||||
|
|
||||||
private val _listeners = mutableListOf<Listener>()
|
|
||||||
|
|
||||||
val listeners: List<Listener>
|
|
||||||
get() = this._listeners
|
|
||||||
|
|
||||||
val conflictsWithEverything: Boolean
|
|
||||||
get() = conflictNames.containsIgnoreCase("all")
|
|
||||||
|| conflictNames.containsIgnoreCase("everything")
|
|
||||||
|
|
||||||
val conflicts: Collection<Enchantment>
|
|
||||||
get() = if (conflictsWithEverything) values().toList()
|
|
||||||
else conflictNames.mapNotNull { getByKey(NamespacedKey.minecraft(it)) }
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
config: Config,
|
|
||||||
plugin: EcoEnchantsPlugin
|
|
||||||
) : this(config.getString("id"), { config }, plugin)
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
id: String,
|
|
||||||
config: Config,
|
|
||||||
plugin: EcoEnchantsPlugin
|
|
||||||
) : this(id, { config }, plugin)
|
|
||||||
|
|
||||||
@JvmOverloads
|
|
||||||
constructor(
|
|
||||||
id: String,
|
|
||||||
plugin: EcoEnchantsPlugin,
|
|
||||||
force: Boolean = true
|
|
||||||
) : this(
|
|
||||||
id,
|
|
||||||
{
|
|
||||||
if (force) {
|
|
||||||
EnchantmentConfig(id, it::class.java, plugin)
|
|
||||||
} else {
|
|
||||||
val file = File(plugin.dataFolder, "enchants")
|
|
||||||
.walk()
|
|
||||||
.firstOrNull { file -> file.nameWithoutExtension == id }
|
|
||||||
|
|
||||||
file?.readConfig(ConfigType.YAML) ?: config {
|
|
||||||
"dont-register" to true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
plugin
|
|
||||||
)
|
|
||||||
|
|
||||||
init {
|
|
||||||
checkDependencies()
|
|
||||||
|
|
||||||
config.injectPlaceholders(
|
|
||||||
object : SimpleInjectablePlaceholder("level") {
|
|
||||||
override fun getValue(args: String, context: PlaceholderContext): String? {
|
|
||||||
return context.itemStack?.fast()?.getEnchantmentLevel(this@EcoEnchant)?.toString()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
PlayerlessPlaceholder(plugin, "${id}_name") {
|
|
||||||
this.getFormattedName(0, false)
|
|
||||||
}.register()
|
|
||||||
|
|
||||||
conditions = Conditions.compile(
|
|
||||||
config.getSubsections("conditions"),
|
|
||||||
if (plugin.isLoaded) ViolationContext(plugin, "Enchantment $id")
|
|
||||||
else SilentViolationContext
|
|
||||||
)
|
|
||||||
|
|
||||||
if (Bukkit.getPluginManager().getPermission("ecoenchants.fromtable.$id") == null) {
|
|
||||||
val permission = Permission(
|
|
||||||
"ecoenchants.fromtable.$id",
|
|
||||||
"Allows getting $id from an Enchanting Table",
|
|
||||||
PermissionDefault.TRUE
|
|
||||||
)
|
|
||||||
|
|
||||||
if (Bukkit.getPluginManager().getPermission("ecoenchants.fromtable.*") == null) {
|
|
||||||
Bukkit.getPluginManager().addPermission(
|
|
||||||
Permission(
|
|
||||||
"ecoenchants.fromtable.*",
|
|
||||||
"Allows getting all enchantments from an Enchanting Table",
|
|
||||||
PermissionDefault.TRUE
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
permission.addParent(
|
|
||||||
Bukkit.getPluginManager().getPermission("ecoenchants.fromtable.*")!!,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
|
|
||||||
Bukkit.getPluginManager().addPermission(permission)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Non-forced enchantments with deleted configs will have this as their entire config (see above),
|
|
||||||
// and that way the enchantment isn't registered.
|
|
||||||
if (!config.getBool("dont-register")) {
|
|
||||||
register()
|
|
||||||
if (plugin.isEnabled) {
|
|
||||||
doOnInit()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun checkDependencies() {
|
|
||||||
val missingPlugins = mutableSetOf<String>()
|
|
||||||
|
|
||||||
for (dependency in config.getStrings("dependencies")) {
|
|
||||||
if (!Bukkit.getPluginManager().plugins.map { it.name }.containsIgnoreCase(dependency)) {
|
|
||||||
missingPlugins += dependency
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (missingPlugins.isNotEmpty()) {
|
|
||||||
config.set("dont-register", true) // Just in case.
|
|
||||||
throw MissingDependencyException(missingPlugins)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun doOnInit() {
|
|
||||||
onInit()
|
|
||||||
}
|
|
||||||
|
|
||||||
protected open fun onInit() {
|
|
||||||
// Override when needed
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun register() {
|
|
||||||
EcoEnchants.addNewEnchant(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getLevel(level: Int): EcoEnchantLevel = levels.get(level) {
|
|
||||||
createLevel(it)
|
|
||||||
}
|
|
||||||
|
|
||||||
open fun createLevel(level: Int) =
|
|
||||||
EcoEnchantLevel(this, level, emptyEffectList(), conditions, plugin)
|
|
||||||
|
|
||||||
fun registerListener(listener: Listener) {
|
|
||||||
this.plugin.eventManager.registerListener(listener)
|
|
||||||
this._listeners += listener
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated(
|
|
||||||
message = "getName is a legacy Spigot API",
|
|
||||||
replaceWith = ReplaceWith("this.displayName(level)")
|
|
||||||
)
|
|
||||||
override fun getName(): String = this.id.uppercase()
|
|
||||||
|
|
||||||
override fun getMaxLevel(): Int = this.config.getInt("max-level")
|
|
||||||
|
|
||||||
override fun getStartLevel(): Int = 1
|
|
||||||
|
|
||||||
@Deprecated(
|
|
||||||
message = "getItemTargets is an incompatible Spigot API",
|
|
||||||
replaceWith = ReplaceWith("this.targets")
|
|
||||||
)
|
|
||||||
override fun getItemTarget(): EnchantmentTarget = EnchantmentTarget.ALL
|
|
||||||
|
|
||||||
val isEnchantable: Boolean = this.config.getBool("enchantable")
|
|
||||||
|
|
||||||
@Deprecated(
|
|
||||||
message = "Treasure enchantments do not exist in EcoEnchants",
|
|
||||||
replaceWith = ReplaceWith("this.isEnchantable")
|
|
||||||
)
|
|
||||||
override fun isTreasure(): Boolean = !isEnchantable
|
|
||||||
|
|
||||||
override fun isCursed(): Boolean {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
fun conflictsWithDirectly(other: Enchantment): Boolean {
|
|
||||||
return conflictNames.containsIgnoreCase(other.key.key) || conflictsWithEverything
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun conflictsWith(other: Enchantment): Boolean {
|
|
||||||
if (conflictsWithDirectly(other)) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
if (other !is EcoEnchant) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return other.conflictsWithDirectly(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun canEnchantItem(item: ItemStack): Boolean {
|
|
||||||
if (
|
|
||||||
item.fast().getEnchants(true).keys
|
|
||||||
.map { it.wrap() }
|
|
||||||
.count { it.type == this.type } >= this.type.limit
|
|
||||||
) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
if (item.fast().getEnchants(true).any { (enchant, _) -> enchant.conflictsWithDeep(this) }) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
if (item.fast().getEnchants(true).size >= plugin.configYml.getInt("anvil.enchant-limit").infiniteIfNegative()) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
if (item.type == Material.ENCHANTED_BOOK) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
return targets.any { it.matches(item) }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun displayName(level: Int): Component {
|
|
||||||
return StringUtils.toComponent(this.wrap().getFormattedName(level))
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun isTradeable(): Boolean = this.config.getBool("tradeable")
|
|
||||||
|
|
||||||
override fun isDiscoverable(): Boolean = this.config.getBool("discoverable")
|
|
||||||
|
|
||||||
@Deprecated(
|
|
||||||
message = "EcoEnchants do not have damage increase, this method is for sharpness/boa/smite",
|
|
||||||
replaceWith = ReplaceWith("0.0f")
|
|
||||||
)
|
|
||||||
override fun getDamageIncrease(level: Int, entityCategory: EntityCategory): Float = 0.0f
|
|
||||||
|
|
||||||
@Deprecated(
|
|
||||||
message = "getActiveSlots is an incompatible Paper API",
|
|
||||||
replaceWith = ReplaceWith("this.slots")
|
|
||||||
)
|
|
||||||
override fun getActiveSlots() = emptySet<EquipmentSlot>()
|
|
||||||
|
|
||||||
@Suppress("DeprecatedCallableAddReplaceWith")
|
|
||||||
@Deprecated(
|
|
||||||
message = "Enchant display overrides this system"
|
|
||||||
)
|
|
||||||
override fun translationKey(): String = "ecoenchants:enchantment.$id"
|
|
||||||
|
|
||||||
@Deprecated(
|
|
||||||
message = "EcoEnchants uses a custom system for enchantment rarity",
|
|
||||||
replaceWith = ReplaceWith("this.enchantRarity")
|
|
||||||
)
|
|
||||||
override fun getRarity(): io.papermc.paper.enchantments.EnchantmentRarity {
|
|
||||||
return io.papermc.paper.enchantments.EnchantmentRarity.RARE
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun equals(other: Any?): Boolean {
|
|
||||||
if (this === other) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
if (other !is EcoEnchant) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return other.id == this.id
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun hashCode(): Int {
|
|
||||||
return Objects.hash(id)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun toString(): String {
|
|
||||||
return "EcoEnchant{$key}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
package com.willfp.ecoenchants.enchants
|
|
||||||
|
|
||||||
import com.willfp.eco.core.EcoPlugin
|
|
||||||
import com.willfp.libreforge.Holder
|
|
||||||
import com.willfp.libreforge.conditions.ConditionList
|
|
||||||
import com.willfp.libreforge.effects.EffectList
|
|
||||||
import java.util.Objects
|
|
||||||
|
|
||||||
class EcoEnchantLevel(
|
|
||||||
val enchant: EcoEnchant,
|
|
||||||
val level: Int,
|
|
||||||
override val effects: EffectList,
|
|
||||||
override val conditions: ConditionList,
|
|
||||||
plugin: EcoPlugin
|
|
||||||
) : Holder {
|
|
||||||
override val id = plugin.createNamespacedKey("${enchant.id}_$level")
|
|
||||||
|
|
||||||
override fun equals(other: Any?): Boolean {
|
|
||||||
if (other !is EcoEnchantLevel) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.id == other.id
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun toString(): String {
|
|
||||||
return id.toString()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun hashCode(): Int {
|
|
||||||
return Objects.hash(this.id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
data class FoundEcoEnchantLevel(
|
|
||||||
val level: EcoEnchantLevel,
|
|
||||||
val activeLevel: Int
|
|
||||||
): Holder {
|
|
||||||
override val effects = level.effects
|
|
||||||
override val conditions = level.conditions
|
|
||||||
override val id = level.id
|
|
||||||
}
|
|
||||||
@@ -1,131 +0,0 @@
|
|||||||
package com.willfp.ecoenchants.enchants
|
|
||||||
|
|
||||||
import com.github.benmanes.caffeine.cache.Caffeine
|
|
||||||
import com.willfp.eco.core.config.interfaces.Config
|
|
||||||
import com.willfp.eco.core.fast.fast
|
|
||||||
import com.willfp.eco.core.placeholder.InjectablePlaceholder
|
|
||||||
import com.willfp.eco.core.placeholder.PlaceholderInjectable
|
|
||||||
import com.willfp.eco.core.placeholder.StaticPlaceholder
|
|
||||||
import com.willfp.eco.core.placeholder.context.placeholderContext
|
|
||||||
import com.willfp.eco.util.NumberUtils
|
|
||||||
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
|
||||||
import com.willfp.ecoenchants.mechanics.infiniteIfNegative
|
|
||||||
import com.willfp.ecoenchants.proxy.proxies.EcoCraftEnchantmentManagerProxy
|
|
||||||
import com.willfp.ecoenchants.rarity.EnchantmentRarities
|
|
||||||
import com.willfp.ecoenchants.rarity.EnchantmentRarity
|
|
||||||
import com.willfp.ecoenchants.type.EnchantmentType
|
|
||||||
import com.willfp.ecoenchants.type.EnchantmentTypes
|
|
||||||
import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData
|
|
||||||
import org.bukkit.Material
|
|
||||||
import org.bukkit.NamespacedKey
|
|
||||||
import org.bukkit.enchantments.Enchantment
|
|
||||||
import org.bukkit.entity.Player
|
|
||||||
import org.bukkit.inventory.ItemStack
|
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
interface EcoEnchantLike {
|
|
||||||
val config: Config
|
|
||||||
val type: EnchantmentType
|
|
||||||
val displayName: String
|
|
||||||
val unformattedDisplayName: String
|
|
||||||
val enchant: Enchantment
|
|
||||||
val enchantmentRarity: EnchantmentRarity
|
|
||||||
|
|
||||||
// Includes all extra logic not found in vanilla canEnchantItem
|
|
||||||
fun canEnchantItem(item: ItemStack): Boolean
|
|
||||||
// Java backwards compatibility
|
|
||||||
fun getUnformattedDescription(level: Int): String {
|
|
||||||
return getUnformattedDescription(level, null)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private val ecoEnchantLikes = Caffeine.newBuilder()
|
|
||||||
.build<NamespacedKey, EcoEnchantLike>()
|
|
||||||
|
|
||||||
fun Enchantment.wrap(): EcoEnchantLike {
|
|
||||||
if (this is EcoEnchant) {
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
return ecoEnchantLikes.get(this.key) {
|
|
||||||
VanillaEcoEnchantLike(this, EcoEnchantsPlugin.instance) // Jank
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun Enchantment.conflictsWithDeep(other: Enchantment): Boolean {
|
|
||||||
return this.conflictsWith(other) || other.conflictsWith(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
class VanillaEcoEnchantLike(
|
|
||||||
override val enchant: Enchantment,
|
|
||||||
private val plugin: EcoEnchantsPlugin
|
|
||||||
) : EcoEnchantLike {
|
|
||||||
override val config = plugin.vanillaEnchantsYml.getSubsection(enchant.key.key)
|
|
||||||
|
|
||||||
override val type: EnchantmentType =
|
|
||||||
EnchantmentTypes[plugin.vanillaEnchantsYml.getString("${enchant.key.key}.type")]
|
|
||||||
?: EnchantmentTypes.values().first()
|
|
||||||
|
|
||||||
override val enchantmentRarity: EnchantmentRarity =
|
|
||||||
EnchantmentRarities[plugin.vanillaEnchantsYml.getString("${enchant.key.key}.rarity")]
|
|
||||||
?: EnchantmentRarities.values().first()
|
|
||||||
|
|
||||||
override val displayName = plugin.vanillaEnchantsYml.getFormattedString("${enchant.key.key}.name")
|
|
||||||
override val unformattedDisplayName = plugin.vanillaEnchantsYml.getString("${enchant.key.key}.name")
|
|
||||||
|
|
||||||
override fun canEnchantItem(item: ItemStack): Boolean {
|
|
||||||
// Yes this code is copied from EcoEnchant, but I can't be bothered to abstract it properly
|
|
||||||
if (
|
|
||||||
item.fast().getEnchants(true).keys
|
|
||||||
.map { it.wrap() }
|
|
||||||
.count { it.type == this.type } >= this.type.limit
|
|
||||||
) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
if (item.fast().getEnchants(true).any { (enchant, _) -> enchant.conflictsWithDeep(this.enchant) }) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
if (item.fast().getEnchants(true).size >= plugin.configYml.getInt("anvil.enchant-limit").infiniteIfNegative()) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
if (item.type == Material.ENCHANTED_BOOK) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
return enchant.canEnchantItem(item)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun equals(other: Any?): Boolean {
|
|
||||||
if (other !is VanillaEcoEnchantLike) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.enchant == other.enchant
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun hashCode(): Int {
|
|
||||||
return Objects.hash(this.enchant)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private val enchantmentOptions = arrayOf(
|
|
||||||
"max-level",
|
|
||||||
"conflicts"
|
|
||||||
)
|
|
||||||
|
|
||||||
fun registerVanillaEnchants(plugin: EcoEnchantsPlugin) {
|
|
||||||
for (vanilla in plugin.vanillaEnchantsYml.getKeys(false)) {
|
|
||||||
if (enchantmentOptions.any { plugin.vanillaEnchantsYml.has("$vanilla.$it") }) {
|
|
||||||
plugin.getProxy(EcoCraftEnchantmentManagerProxy::class.java).registerNewCraftEnchantment(
|
|
||||||
Enchantment.getByKey(NamespacedKey.minecraft(vanilla))!!,
|
|
||||||
VanillaEnchantmentData(
|
|
||||||
plugin.vanillaEnchantsYml.getIntOrNull("$vanilla.max-level"),
|
|
||||||
plugin.vanillaEnchantsYml.getStringsOrNull("$vanilla.conflicts")
|
|
||||||
?.map { NamespacedKey.minecraft(it) }
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,127 +0,0 @@
|
|||||||
package com.willfp.ecoenchants.enchants
|
|
||||||
|
|
||||||
import com.willfp.eco.core.config.interfaces.Config
|
|
||||||
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
|
||||||
import com.willfp.ecoenchants.enchant.impl.hardcoded.EnchantmentPermanenceCurse
|
|
||||||
import com.willfp.ecoenchants.enchant.impl.hardcoded.EnchantmentRepairing
|
|
||||||
import com.willfp.ecoenchants.enchant.impl.hardcoded.EnchantmentReplenish
|
|
||||||
import com.willfp.ecoenchants.enchant.impl.hardcoded.EnchantmentSoulbound
|
|
||||||
import com.willfp.ecoenchants.integrations.EnchantRegistrations
|
|
||||||
import com.willfp.ecoenchants.rarity.EnchantmentRarities
|
|
||||||
import com.willfp.ecoenchants.target.EnchantmentTargets
|
|
||||||
import com.willfp.ecoenchants.type.EnchantmentTypes
|
|
||||||
import com.willfp.libreforge.loader.LibreforgePlugin
|
|
||||||
import com.willfp.libreforge.loader.configs.RegistrableCategory
|
|
||||||
import org.bukkit.NamespacedKey
|
|
||||||
import org.bukkit.enchantments.Enchantment
|
|
||||||
|
|
||||||
@Suppress("UNUSED")
|
|
||||||
object EcoEnchants : RegistrableCategory<EcoEnchant>("enchant", "enchants") {
|
|
||||||
override fun clear(plugin: LibreforgePlugin) {
|
|
||||||
for (enchant in values()) {
|
|
||||||
removeEnchant(enchant)
|
|
||||||
|
|
||||||
for (listener in enchant.listeners) {
|
|
||||||
plugin.eventManager.unregisterListener(listener)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun beforeReload(plugin: LibreforgePlugin) {
|
|
||||||
plugin as EcoEnchantsPlugin
|
|
||||||
|
|
||||||
EnchantmentRarities.update(plugin)
|
|
||||||
EnchantmentTargets.update(plugin)
|
|
||||||
EnchantmentTypes.update(plugin)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun afterReload(plugin: LibreforgePlugin) {
|
|
||||||
plugin as EcoEnchantsPlugin
|
|
||||||
|
|
||||||
sendPrompts(plugin)
|
|
||||||
registerHardcodedEnchantments(plugin)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun acceptConfig(plugin: LibreforgePlugin, id: String, config: Config) {
|
|
||||||
plugin as EcoEnchantsPlugin
|
|
||||||
|
|
||||||
if (config.has("effects")) {
|
|
||||||
try {
|
|
||||||
LibReforgeEcoEnchant(
|
|
||||||
id,
|
|
||||||
config,
|
|
||||||
plugin
|
|
||||||
)
|
|
||||||
} catch (e: MissingDependencyException) {
|
|
||||||
addPluginPrompt(plugin, e.plugins)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove [Enchantment] from EcoEnchants.
|
|
||||||
*
|
|
||||||
* @param enchant The [Enchantment] to remove.
|
|
||||||
*/
|
|
||||||
@JvmStatic
|
|
||||||
@Suppress("UNCHECKED_CAST", "DEPRECATION")
|
|
||||||
fun removeEnchant(enchant: Enchantment) {
|
|
||||||
if (enchant is EcoEnchant) {
|
|
||||||
registry.remove(enchant.id)
|
|
||||||
EnchantRegistrations.removeEnchant(enchant)
|
|
||||||
}
|
|
||||||
|
|
||||||
Enchantment::class.java.getDeclaredField("byKey")
|
|
||||||
.apply {
|
|
||||||
isAccessible = true
|
|
||||||
(get(null) as MutableMap<NamespacedKey, Enchantment>).apply { remove(enchant.key) }
|
|
||||||
}
|
|
||||||
|
|
||||||
Enchantment::class.java.getDeclaredField("byName")
|
|
||||||
.apply {
|
|
||||||
isAccessible = true
|
|
||||||
(get(null) as MutableMap<String, Enchantment>).apply { remove(enchant.name) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add new [EcoEnchant] to EcoEnchants.
|
|
||||||
*
|
|
||||||
* Only for internal use, enchants are automatically added in the
|
|
||||||
* constructor.
|
|
||||||
*
|
|
||||||
* @param enchant The [EcoEnchant] to add.
|
|
||||||
*/
|
|
||||||
internal fun addNewEnchant(enchant: EcoEnchant) {
|
|
||||||
register(enchant)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register a new [Enchantment] with the server.
|
|
||||||
*
|
|
||||||
* @param enchantment The [Enchantment] to add.
|
|
||||||
*/
|
|
||||||
@JvmStatic
|
|
||||||
fun register(enchantment: Enchantment) {
|
|
||||||
Enchantment::class.java.getDeclaredField("acceptingNew")
|
|
||||||
.apply {
|
|
||||||
isAccessible = true
|
|
||||||
set(null, true)
|
|
||||||
}
|
|
||||||
|
|
||||||
removeEnchant(enchantment)
|
|
||||||
|
|
||||||
Enchantment.registerEnchantment(enchantment)
|
|
||||||
EnchantRegistrations.registerEnchantments()
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Register the hardcoded enchantments. */
|
|
||||||
private fun registerHardcodedEnchantments(
|
|
||||||
plugin: EcoEnchantsPlugin
|
|
||||||
) {
|
|
||||||
EnchantmentPermanenceCurse(plugin)
|
|
||||||
EnchantmentRepairing(plugin)
|
|
||||||
EnchantmentReplenish(plugin)
|
|
||||||
EnchantmentSoulbound(plugin)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
package com.willfp.ecoenchants.enchants
|
|
||||||
|
|
||||||
import com.willfp.eco.core.EcoPlugin
|
|
||||||
import com.willfp.eco.core.config.ConfigType
|
|
||||||
import com.willfp.eco.core.config.ExtendableConfig
|
|
||||||
|
|
||||||
class EnchantmentConfig(
|
|
||||||
name: String,
|
|
||||||
source: Class<*>,
|
|
||||||
plugin: EcoPlugin
|
|
||||||
) : ExtendableConfig(
|
|
||||||
name,
|
|
||||||
true,
|
|
||||||
plugin,
|
|
||||||
source,
|
|
||||||
"enchants/",
|
|
||||||
ConfigType.YAML
|
|
||||||
)
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
package com.willfp.ecoenchants.enchants
|
|
||||||
|
|
||||||
import com.willfp.eco.core.config.interfaces.Config
|
|
||||||
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
|
||||||
import com.willfp.libreforge.SilentViolationContext
|
|
||||||
import com.willfp.libreforge.ViolationContext
|
|
||||||
import com.willfp.libreforge.effects.Effects
|
|
||||||
import com.willfp.libreforge.effects.emptyEffectList
|
|
||||||
|
|
||||||
class LibReforgeEcoEnchant(
|
|
||||||
id: String,
|
|
||||||
config: Config,
|
|
||||||
plugin: EcoEnchantsPlugin
|
|
||||||
) : EcoEnchant(
|
|
||||||
id,
|
|
||||||
config,
|
|
||||||
plugin
|
|
||||||
) {
|
|
||||||
private val effects = Effects.compile(
|
|
||||||
config.getSubsections("effects"),
|
|
||||||
if (plugin.isLoaded) ViolationContext(plugin, "Enchantment $id")
|
|
||||||
else SilentViolationContext
|
|
||||||
)
|
|
||||||
|
|
||||||
override fun createLevel(level: Int): EcoEnchantLevel =
|
|
||||||
EcoEnchantLevel(this, level, effects, conditions, plugin)
|
|
||||||
}
|
|
||||||
@@ -1,116 +0,0 @@
|
|||||||
package com.willfp.ecoenchants.enchants
|
|
||||||
|
|
||||||
import com.willfp.eco.core.EcoPlugin
|
|
||||||
import com.willfp.eco.core.fast.fast
|
|
||||||
import com.willfp.eco.util.NumberUtils
|
|
||||||
import org.bukkit.ChatColor
|
|
||||||
import org.bukkit.enchantments.Enchantment
|
|
||||||
import org.bukkit.event.EventHandler
|
|
||||||
import org.bukkit.event.Listener
|
|
||||||
import org.bukkit.event.inventory.InventoryOpenEvent
|
|
||||||
import org.bukkit.event.player.PlayerItemHeldEvent
|
|
||||||
import org.bukkit.inventory.BlockInventoryHolder
|
|
||||||
import org.bukkit.inventory.ItemStack
|
|
||||||
import org.bukkit.inventory.meta.EnchantmentStorageMeta
|
|
||||||
|
|
||||||
|
|
||||||
class LoreConversion(
|
|
||||||
private val plugin: EcoPlugin
|
|
||||||
) : Listener {
|
|
||||||
@EventHandler
|
|
||||||
fun loreConverter(event: PlayerItemHeldEvent) {
|
|
||||||
if (!plugin.configYml.getBool("lore-conversion.enabled")) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
convertLore(event.player.inventory.getItem(event.newSlot))
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
fun aggressiveLoreConverter(event: InventoryOpenEvent) {
|
|
||||||
if (!plugin.configYml.getBool("lore-conversion.enabled")) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (!plugin.configYml.getBool("lore-conversion.aggressive")) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
val inventory = event.inventory
|
|
||||||
|
|
||||||
if (inventory.holder !is BlockInventoryHolder) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
for (itemStack in inventory.contents) {
|
|
||||||
convertLore(itemStack)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun convertLore(itemStack: ItemStack?) {
|
|
||||||
if (itemStack == null) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
val meta = itemStack.itemMeta ?: return
|
|
||||||
|
|
||||||
val toAdd = mutableMapOf<Enchantment, Int>()
|
|
||||||
|
|
||||||
val lore = itemStack.fast().lore.toMutableList()
|
|
||||||
|
|
||||||
for (line in lore.toList()) {
|
|
||||||
val uncolored = ChatColor.stripColor(line) ?: continue
|
|
||||||
|
|
||||||
var enchant: EcoEnchant?
|
|
||||||
var level: Int
|
|
||||||
val split = uncolored.split(" ").toMutableList()
|
|
||||||
|
|
||||||
if (split.isEmpty()) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if (split.size == 1) {
|
|
||||||
enchant = EcoEnchants.getByName(split[0])
|
|
||||||
level = 1
|
|
||||||
} else {
|
|
||||||
val attemptFullLine = EcoEnchants.getByName(line)
|
|
||||||
if (attemptFullLine != null) {
|
|
||||||
enchant = attemptFullLine
|
|
||||||
level = 1
|
|
||||||
} else {
|
|
||||||
var levelString = split.last()
|
|
||||||
split.remove(levelString)
|
|
||||||
levelString = levelString.trim { it <= ' ' }
|
|
||||||
level = try {
|
|
||||||
NumberUtils.fromNumeral(levelString)
|
|
||||||
} catch (e: IllegalArgumentException) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
val enchantName = split.joinToString(" ")
|
|
||||||
enchant = EcoEnchants.getByName(enchantName)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (enchant == null) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
toAdd[enchant] = level
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (meta is EnchantmentStorageMeta) {
|
|
||||||
lore.clear()
|
|
||||||
for ((enchant, level) in toAdd) {
|
|
||||||
meta.addStoredEnchant(enchant, level, true)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
lore.clear()
|
|
||||||
for ((enchant, level) in toAdd) {
|
|
||||||
meta.addEnchant(enchant, level, true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
itemStack.itemMeta = meta
|
|
||||||
itemStack.fast().lore = lore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
package com.willfp.ecoenchants.enchants
|
|
||||||
|
|
||||||
import com.willfp.eco.core.EcoPlugin
|
|
||||||
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
|
||||||
|
|
||||||
class MissingDependencyException(
|
|
||||||
val plugins: Set<String>
|
|
||||||
) : Exception() {
|
|
||||||
override val message = "Missing the following plugins: ${plugins.joinToString(", ")}"
|
|
||||||
}
|
|
||||||
|
|
||||||
// Plugin names mapped to enchants that aren't installed.
|
|
||||||
private val prompts = mutableMapOf<String, Int>()
|
|
||||||
|
|
||||||
fun addPluginPrompt(plugin: EcoEnchantsPlugin, plugins: Set<String>) {
|
|
||||||
if (!plugin.isLoaded) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
for (pluginName in plugins) {
|
|
||||||
prompts[pluginName] = prompts.getOrDefault(pluginName, 0) + 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun sendPrompts(plugin: EcoPlugin) {
|
|
||||||
for ((pl, amount) in prompts) {
|
|
||||||
plugin.logger.apply {
|
|
||||||
warning("$amount enchantments were not loaded because they need $pl to be installed!")
|
|
||||||
warning("Either download $pl or delete the folder at /plugins/EcoEnchants/enchants/${pl.lowercase()} to remove this message")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
prompts.clear()
|
|
||||||
}
|
|
||||||
@@ -2,7 +2,7 @@ package com.willfp.ecoenchants.libreforge
|
|||||||
|
|
||||||
import com.willfp.eco.core.EcoPlugin
|
import com.willfp.eco.core.EcoPlugin
|
||||||
import com.willfp.eco.core.fast.fast
|
import com.willfp.eco.core.fast.fast
|
||||||
import com.willfp.ecoenchants.enchants.wrap
|
import com.willfp.ecoenchants.enchant.wrap
|
||||||
import com.willfp.ecoenchants.type.EnchantmentType
|
import com.willfp.ecoenchants.type.EnchantmentType
|
||||||
import com.willfp.libreforge.toDispatcher
|
import com.willfp.libreforge.toDispatcher
|
||||||
import com.willfp.libreforge.triggers.Trigger
|
import com.willfp.libreforge.triggers.Trigger
|
||||||
|
|||||||
@@ -4,9 +4,8 @@ import com.willfp.eco.core.EcoPlugin
|
|||||||
import com.willfp.eco.core.fast.fast
|
import com.willfp.eco.core.fast.fast
|
||||||
import com.willfp.eco.core.proxy.ProxyConstants
|
import com.willfp.eco.core.proxy.ProxyConstants
|
||||||
import com.willfp.eco.util.StringUtils
|
import com.willfp.eco.util.StringUtils
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchants
|
import com.willfp.ecoenchants.enchant.EcoEnchants
|
||||||
import com.willfp.ecoenchants.enchants.wrap
|
import com.willfp.ecoenchants.enchant.wrap
|
||||||
import com.willfp.ecoenchants.proxy.proxies.OpenInventoryProxy
|
|
||||||
import org.bukkit.ChatColor
|
import org.bukkit.ChatColor
|
||||||
import org.bukkit.Material
|
import org.bukkit.Material
|
||||||
import org.bukkit.Tag
|
import org.bukkit.Tag
|
||||||
@@ -35,6 +34,10 @@ fun Int.infiniteIfNegative() = if (this < 1) Int.MAX_VALUE else this
|
|||||||
|
|
||||||
private val FAIL = AnvilResult(null, null)
|
private val FAIL = AnvilResult(null, null)
|
||||||
|
|
||||||
|
interface OpenInventoryProxy {
|
||||||
|
fun getOpenInventory(player: Player): Any
|
||||||
|
}
|
||||||
|
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
class AnvilSupport(
|
class AnvilSupport(
|
||||||
private val plugin: EcoPlugin
|
private val plugin: EcoPlugin
|
||||||
@@ -155,7 +158,7 @@ class AnvilSupport(
|
|||||||
val permanenceCurse = EcoEnchants.getByID("permanence_curse")
|
val permanenceCurse = EcoEnchants.getByID("permanence_curse")
|
||||||
|
|
||||||
if (permanenceCurse != null) {
|
if (permanenceCurse != null) {
|
||||||
if (left.fast().getEnchants(true).containsKey(permanenceCurse)) {
|
if (left.fast().getEnchants(true).containsKey(permanenceCurse.enchantment)) {
|
||||||
return FAIL
|
return FAIL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ import com.willfp.eco.core.recipe.parts.EmptyTestableItem
|
|||||||
import com.willfp.eco.util.NumberUtils
|
import com.willfp.eco.util.NumberUtils
|
||||||
import com.willfp.eco.util.randDouble
|
import com.willfp.eco.util.randDouble
|
||||||
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchant
|
import com.willfp.ecoenchants.enchant.EcoEnchant
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchants
|
import com.willfp.ecoenchants.enchant.EcoEnchants
|
||||||
import com.willfp.ecoenchants.enchants.conflictsWithDeep
|
import com.willfp.ecoenchants.enchant.conflictsWithDeep
|
||||||
import org.bukkit.Bukkit
|
import org.bukkit.Bukkit
|
||||||
import org.bukkit.GameMode
|
import org.bukkit.GameMode
|
||||||
import org.bukkit.Material
|
import org.bukkit.Material
|
||||||
@@ -93,16 +93,16 @@ class EnchantingTableSupport(
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
val baseChance = enchantment.enchantmentRarity.tableChance * multiplier
|
val baseChance = enchantment.rarity.tableChance * multiplier
|
||||||
|
|
||||||
val chanceEvent = EnchantingTableChanceGenerateEvent(player, item, enchantment, baseChance)
|
val chanceEvent = EnchantingTableChanceGenerateEvent(player, item, enchantment.enchantment, baseChance)
|
||||||
Bukkit.getPluginManager().callEvent(chanceEvent)
|
Bukkit.getPluginManager().callEvent(chanceEvent)
|
||||||
|
|
||||||
if (NumberUtils.randFloat(0.0, 1.0) > chanceEvent.chance) {
|
if (NumberUtils.randFloat(0.0, 1.0) > chanceEvent.chance) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enchantment.enchantmentRarity.minimumLevel > cost) {
|
if (enchantment.rarity.minimumLevel > cost) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,7 +114,7 @@ class EnchantingTableSupport(
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
if (toAdd.any { (it, _) -> enchantment.conflictsWithDeep(it) }) {
|
if (toAdd.any { (it, _) -> enchantment.enchantment.conflictsWithDeep(it) }) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,7 +140,7 @@ class EnchantingTableSupport(
|
|||||||
|
|
||||||
multiplier /= this.plugin.configYml.getDouble("enchanting-table.reduction")
|
multiplier /= this.plugin.configYml.getDouble("enchanting-table.reduction")
|
||||||
|
|
||||||
toAdd[enchantment] = level
|
toAdd[enchantment.enchantment] = level
|
||||||
}
|
}
|
||||||
|
|
||||||
toAdd.forEach(event.enchantsToAdd::putIfAbsent)
|
toAdd.forEach(event.enchantsToAdd::putIfAbsent)
|
||||||
|
|||||||
@@ -2,32 +2,15 @@ package com.willfp.ecoenchants.mechanics
|
|||||||
|
|
||||||
import com.willfp.eco.core.EcoPlugin
|
import com.willfp.eco.core.EcoPlugin
|
||||||
import com.willfp.eco.core.fast.fast
|
import com.willfp.eco.core.fast.fast
|
||||||
import com.willfp.eco.util.StringUtils
|
import com.willfp.ecoenchants.enchant.wrap
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchants
|
|
||||||
import com.willfp.ecoenchants.enchants.wrap
|
|
||||||
import org.bukkit.ChatColor
|
|
||||||
import org.bukkit.Material
|
|
||||||
import org.bukkit.enchantments.Enchantment
|
import org.bukkit.enchantments.Enchantment
|
||||||
import org.bukkit.entity.EntityType
|
|
||||||
import org.bukkit.entity.ExperienceOrb
|
|
||||||
import org.bukkit.entity.Player
|
|
||||||
import org.bukkit.event.EventHandler
|
import org.bukkit.event.EventHandler
|
||||||
import org.bukkit.event.EventPriority
|
|
||||||
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.InventoryType
|
|
||||||
import org.bukkit.event.inventory.PrepareAnvilEvent
|
|
||||||
import org.bukkit.inventory.GrindstoneInventory
|
import org.bukkit.inventory.GrindstoneInventory
|
||||||
import org.bukkit.inventory.ItemStack
|
|
||||||
import org.bukkit.inventory.meta.Damageable
|
|
||||||
import org.bukkit.inventory.meta.EnchantmentStorageMeta
|
import org.bukkit.inventory.meta.EnchantmentStorageMeta
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import javax.swing.text.html.HTML.Tag.P
|
|
||||||
import kotlin.math.abs
|
|
||||||
import kotlin.math.max
|
import kotlin.math.max
|
||||||
import kotlin.math.min
|
|
||||||
import kotlin.math.pow
|
|
||||||
import kotlin.math.roundToInt
|
|
||||||
|
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
class GrindstoneSupport(
|
class GrindstoneSupport(
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ package com.willfp.ecoenchants.mechanics
|
|||||||
import com.willfp.eco.core.fast.fast
|
import com.willfp.eco.core.fast.fast
|
||||||
import com.willfp.eco.util.NumberUtils
|
import com.willfp.eco.util.NumberUtils
|
||||||
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchant
|
import com.willfp.ecoenchants.enchant.EcoEnchant
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchants
|
import com.willfp.ecoenchants.enchant.EcoEnchants
|
||||||
import com.willfp.ecoenchants.enchants.conflictsWithDeep
|
import com.willfp.ecoenchants.enchant.conflictsWithDeep
|
||||||
import com.willfp.ecoenchants.target.EnchantmentTargets.isEnchantable
|
import com.willfp.ecoenchants.target.EnchantmentTargets.isEnchantable
|
||||||
import org.bukkit.Material
|
import org.bukkit.Material
|
||||||
import org.bukkit.event.EventHandler
|
import org.bukkit.event.EventHandler
|
||||||
@@ -53,11 +53,11 @@ class LootSupport(
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NumberUtils.randFloat(0.0, 1.0) > enchantment.enchantmentRarity.lootChance * multiplier) {
|
if (NumberUtils.randFloat(0.0, 1.0) > enchantment.rarity.lootChance * multiplier) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enchants.any { (it, _) -> enchantment.conflictsWithDeep(it) }) {
|
if (enchants.any { (it, _) -> enchantment.enchantment.conflictsWithDeep(it) }) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,7 +80,7 @@ class LootSupport(
|
|||||||
|
|
||||||
multiplier /= this.plugin.configYml.getDouble("villager.reduction")
|
multiplier /= this.plugin.configYml.getDouble("villager.reduction")
|
||||||
|
|
||||||
enchants[enchantment] = level
|
enchants[enchantment.enchantment] = level
|
||||||
}
|
}
|
||||||
|
|
||||||
val meta = item.itemMeta
|
val meta = item.itemMeta
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ package com.willfp.ecoenchants.mechanics
|
|||||||
import com.willfp.eco.core.fast.fast
|
import com.willfp.eco.core.fast.fast
|
||||||
import com.willfp.eco.util.NumberUtils
|
import com.willfp.eco.util.NumberUtils
|
||||||
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchant
|
import com.willfp.ecoenchants.enchant.EcoEnchant
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchants
|
import com.willfp.ecoenchants.enchant.EcoEnchants
|
||||||
import com.willfp.ecoenchants.enchants.conflictsWithDeep
|
import com.willfp.ecoenchants.enchant.conflictsWithDeep
|
||||||
import com.willfp.ecoenchants.target.EnchantmentTargets.isEnchantable
|
import com.willfp.ecoenchants.target.EnchantmentTargets.isEnchantable
|
||||||
import org.bukkit.Material
|
import org.bukkit.Material
|
||||||
import org.bukkit.event.EventHandler
|
import org.bukkit.event.EventHandler
|
||||||
@@ -54,11 +54,11 @@ class VillagerSupport(
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NumberUtils.randFloat(0.0, 1.0) > enchantment.enchantmentRarity.villagerChance * multiplier) {
|
if (NumberUtils.randFloat(0.0, 1.0) > enchantment.rarity.villagerChance * multiplier) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enchants.any { (it, _) -> enchantment.conflictsWithDeep(it) }) {
|
if (enchants.any { (it, _) -> enchantment.enchantment.conflictsWithDeep(it) }) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,10 +85,10 @@ class VillagerSupport(
|
|||||||
if (result.type == Material.ENCHANTED_BOOK) {
|
if (result.type == Material.ENCHANTED_BOOK) {
|
||||||
// Only allow one enchantment
|
// Only allow one enchantment
|
||||||
enchants.clear()
|
enchants.clear()
|
||||||
enchants[enchantment] = level
|
enchants[enchantment.enchantment] = level
|
||||||
break
|
break
|
||||||
} else {
|
} else {
|
||||||
enchants[enchantment] = level
|
enchants[enchantment.enchantment] = level
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,9 +4,10 @@ import com.github.benmanes.caffeine.cache.Caffeine
|
|||||||
import com.willfp.eco.core.fast.fast
|
import com.willfp.eco.core.fast.fast
|
||||||
import com.willfp.eco.core.items.HashedItem
|
import com.willfp.eco.core.items.HashedItem
|
||||||
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchant
|
import com.willfp.ecoenchants.enchant.EcoEnchant
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchantLevel
|
import com.willfp.ecoenchants.enchant.EcoEnchantLevel
|
||||||
import com.willfp.ecoenchants.enchants.FoundEcoEnchantLevel
|
import com.willfp.ecoenchants.enchant.FoundEcoEnchantLevel
|
||||||
|
import com.willfp.ecoenchants.plugin
|
||||||
import com.willfp.libreforge.ItemProvidedHolder
|
import com.willfp.libreforge.ItemProvidedHolder
|
||||||
import com.willfp.libreforge.slot.SlotType
|
import com.willfp.libreforge.slot.SlotType
|
||||||
import com.willfp.libreforge.slot.SlotTypes
|
import com.willfp.libreforge.slot.SlotTypes
|
||||||
@@ -302,7 +303,7 @@ object EnchantLookup {
|
|||||||
|
|
||||||
// This is such a fucking disgusting way of implementing %active_level%,
|
// This is such a fucking disgusting way of implementing %active_level%,
|
||||||
// and it's probably quite slow too.
|
// and it's probably quite slow too.
|
||||||
return if (EcoEnchantsPlugin.instance.configYml.getBool("extra-placeholders.active-level")) {
|
return if (plugin.configYml.getBool("extra-placeholders.active-level")) {
|
||||||
found.map {
|
found.map {
|
||||||
val level = it.holder as EcoEnchantLevel
|
val level = it.holder as EcoEnchantLevel
|
||||||
|
|
||||||
|
|||||||
@@ -6,12 +6,11 @@ import com.willfp.eco.core.items.TestableItem
|
|||||||
import com.willfp.eco.core.recipe.parts.EmptyTestableItem
|
import com.willfp.eco.core.recipe.parts.EmptyTestableItem
|
||||||
import com.willfp.eco.core.registry.Registrable
|
import com.willfp.eco.core.registry.Registrable
|
||||||
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
||||||
|
import com.willfp.ecoenchants.plugin
|
||||||
import com.willfp.libreforge.slot.SlotType
|
import com.willfp.libreforge.slot.SlotType
|
||||||
import com.willfp.libreforge.slot.SlotTypes
|
import com.willfp.libreforge.slot.SlotTypes
|
||||||
import com.willfp.libreforge.slot.impl.SlotTypeAny
|
import com.willfp.libreforge.slot.impl.SlotTypeAny
|
||||||
import org.bukkit.entity.Player
|
|
||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
import java.lang.IllegalArgumentException
|
|
||||||
import java.util.Objects
|
import java.util.Objects
|
||||||
|
|
||||||
interface EnchantmentTarget : Registrable {
|
interface EnchantmentTarget : Registrable {
|
||||||
@@ -62,7 +61,7 @@ class ConfiguredEnchantmentTarget(
|
|||||||
|
|
||||||
internal object AllEnchantmentTarget : EnchantmentTarget {
|
internal object AllEnchantmentTarget : EnchantmentTarget {
|
||||||
override val id = "all"
|
override val id = "all"
|
||||||
override val displayName = EcoEnchantsPlugin.instance.langYml.getFormattedString("all")
|
override val displayName = plugin.langYml.getFormattedString("all")
|
||||||
override val slot = SlotTypeAny
|
override val slot = SlotTypeAny
|
||||||
override var items = emptyList<TestableItem>()
|
override var items = emptyList<TestableItem>()
|
||||||
private set
|
private set
|
||||||
|
|||||||
@@ -1,22 +1,20 @@
|
|||||||
package com.willfp.ecoenchants.target
|
package com.willfp.ecoenchants.target
|
||||||
|
|
||||||
import com.github.benmanes.caffeine.cache.Caffeine
|
import com.github.benmanes.caffeine.cache.Caffeine
|
||||||
import com.google.common.collect.ImmutableSet
|
|
||||||
import com.willfp.eco.core.items.HashedItem
|
import com.willfp.eco.core.items.HashedItem
|
||||||
import com.willfp.eco.core.registry.Registry
|
import com.willfp.eco.core.registry.Registry
|
||||||
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
import com.willfp.ecoenchants.EcoEnchantsPlugin
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchant
|
import com.willfp.ecoenchants.enchant.EcoEnchant
|
||||||
import com.willfp.ecoenchants.enchants.EcoEnchants
|
import com.willfp.ecoenchants.enchant.EcoEnchants
|
||||||
import com.willfp.ecoenchants.enchants.wrap
|
import com.willfp.ecoenchants.plugin
|
||||||
import org.bukkit.Material
|
import org.bukkit.Material
|
||||||
import org.bukkit.enchantments.Enchantment
|
|
||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
object EnchantmentTargets: Registry<EnchantmentTarget>() {
|
object EnchantmentTargets : Registry<EnchantmentTarget>() {
|
||||||
init {
|
init {
|
||||||
register(AllEnchantmentTarget)
|
register(AllEnchantmentTarget)
|
||||||
update(EcoEnchantsPlugin.instance)
|
update(plugin)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getForItem(item: ItemStack): List<EnchantmentTarget> {
|
private fun getForItem(item: ItemStack): List<EnchantmentTarget> {
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
group = "com.willfp"
|
|
||||||
version = rootProject.version
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
compileOnly("io.papermc.paper:paper-api:1.17.1-R0.1-SNAPSHOT")
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
package com.willfp.ecoenchants.proxy.proxies
|
|
||||||
|
|
||||||
import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData
|
|
||||||
import org.bukkit.NamespacedKey
|
|
||||||
import org.bukkit.enchantments.Enchantment
|
|
||||||
|
|
||||||
interface EcoCraftEnchantmentManagerProxy {
|
|
||||||
fun registerNewCraftEnchantment(enchantment: Enchantment, data: VanillaEnchantmentData)
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
package com.willfp.ecoenchants.proxy.proxies
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player
|
|
||||||
|
|
||||||
interface OpenInventoryProxy {
|
|
||||||
fun getOpenInventory(player: Player): Any
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
package com.willfp.ecoenchants.vanilla
|
|
||||||
|
|
||||||
import org.bukkit.NamespacedKey
|
|
||||||
|
|
||||||
data class VanillaEnchantmentData(
|
|
||||||
val maxLevel: Int?,
|
|
||||||
val conflicts: Collection<NamespacedKey>?
|
|
||||||
)
|
|
||||||
@@ -12,7 +12,6 @@ rootProject.name = "EcoEnchants"
|
|||||||
// Core
|
// Core
|
||||||
include(":eco-core")
|
include(":eco-core")
|
||||||
include(":eco-core:core-plugin")
|
include(":eco-core:core-plugin")
|
||||||
include(":eco-core:core-proxy")
|
|
||||||
include(":eco-core:core-nms")
|
include(":eco-core:core-nms")
|
||||||
include(":eco-core:core-nms:v1_17_R1")
|
include(":eco-core:core-nms:v1_17_R1")
|
||||||
include(":eco-core:core-nms:v1_18_R1")
|
include(":eco-core:core-nms:v1_18_R1")
|
||||||
|
|||||||
Reference in New Issue
Block a user