diff --git a/api/build.gradle.kts b/api/build.gradle.kts index 98131a6..a25ff33 100644 --- a/api/build.gradle.kts +++ b/api/build.gradle.kts @@ -3,11 +3,11 @@ plugins { } dependencies { - compileOnly("org.projectlombok:lombok:1.18.30") - annotationProcessor("org.projectlombok:lombok:1.18.30") + compileOnly("org.projectlombok:lombok:1.18.34") + annotationProcessor("org.projectlombok:lombok:1.18.34") - testCompileOnly("org.projectlombok:lombok:1.18.30") - testAnnotationProcessor("org.projectlombok:lombok:1.18.30") + testCompileOnly("org.projectlombok:lombok:1.18.34") + testAnnotationProcessor("org.projectlombok:lombok:1.18.34") } afterEvaluate { diff --git a/api/src/main/java/kr/toxicity/healthbar/api/healthbar/HealthBarUpdaterGroup.java b/api/src/main/java/kr/toxicity/healthbar/api/healthbar/HealthBarUpdaterGroup.java index ed7c46c..3221a6a 100644 --- a/api/src/main/java/kr/toxicity/healthbar/api/healthbar/HealthBarUpdaterGroup.java +++ b/api/src/main/java/kr/toxicity/healthbar/api/healthbar/HealthBarUpdaterGroup.java @@ -2,7 +2,6 @@ import kr.toxicity.healthbar.api.entity.HealthBarEntity; import kr.toxicity.healthbar.api.player.HealthBarPlayer; -import kr.toxicity.healthbar.api.trigger.HealthBarTrigger; import org.jetbrains.annotations.NotNull; import java.util.Collection; @@ -27,5 +26,5 @@ default void remove() { updaters.clear(); } - void addHealthBar(@NotNull HealthBar healthBar, @NotNull HealthBarTrigger trigger); + void addHealthBar(@NotNull HealthBarData data); } diff --git a/api/src/main/java/kr/toxicity/healthbar/api/mob/MobConfiguration.java b/api/src/main/java/kr/toxicity/healthbar/api/mob/MobConfiguration.java index ca0651b..23523ee 100644 --- a/api/src/main/java/kr/toxicity/healthbar/api/mob/MobConfiguration.java +++ b/api/src/main/java/kr/toxicity/healthbar/api/mob/MobConfiguration.java @@ -13,6 +13,7 @@ public interface MobConfiguration extends HealthBarConfiguration { Set types(); double height(); boolean blacklist(); + boolean ignoreDefault(); @NotNull @Unmodifiable Set healthBars(); diff --git a/build.gradle.kts b/build.gradle.kts index 299e38a..db014ec 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -29,6 +29,8 @@ allprojects { maven("https://jitpack.io/") maven("https://repo.alessiodp.com/releases/") maven("https://repo.extendedclip.com/content/repositories/placeholderapi/") + maven("https://maven.citizensnpcs.co/repo/") + maven("https://repo.alessiodp.com/releases/") } dependencies { implementation("org.bstats:bstats-bukkit:3.0.2") @@ -83,6 +85,8 @@ val dist = getApiDependencyProject("dist").spigot() .dependency("io.lumine:Mythic-Dist:5.6.2") .dependency("me.clip:placeholderapi:2.11.6") .dependency("com.github.toxicity188:BetterHud:beta-26") + .dependency("net.citizensnpcs:citizens-main:2.0.33-SNAPSHOT") + .dependency("net.byteflux:libby-bukkit:1.3.0") .also { it.tasks.processResources { filteringCharset = Charsets.UTF_8.name() diff --git a/dist/src/main/kotlin/kr/toxicity/healthbar/compatibility/CitizensCompatibility.kt b/dist/src/main/kotlin/kr/toxicity/healthbar/compatibility/CitizensCompatibility.kt new file mode 100644 index 0000000..7e58477 --- /dev/null +++ b/dist/src/main/kotlin/kr/toxicity/healthbar/compatibility/CitizensCompatibility.kt @@ -0,0 +1,19 @@ +package kr.toxicity.healthbar.compatibility + +import kr.toxicity.healthbar.api.placeholder.PlaceholderContainer +import kr.toxicity.healthbar.util.placeholder +import net.citizensnpcs.api.CitizensAPI +import java.util.function.Function + +class CitizensCompatibility: Compatibility { + override fun accept() { + PlaceholderContainer.BOOL.addPlaceholder("citizens_npc", placeholder(0) { + Function { + val entity = it.entity.entity() + CitizensAPI.getNPCRegistries().any { r -> + r.isNPC(entity) + } + } + }) + } +} \ No newline at end of file diff --git a/dist/src/main/kotlin/kr/toxicity/healthbar/healthbar/HealthBarImpl.kt b/dist/src/main/kotlin/kr/toxicity/healthbar/healthbar/HealthBarImpl.kt index 28a726d..cb636ee 100644 --- a/dist/src/main/kotlin/kr/toxicity/healthbar/healthbar/HealthBarImpl.kt +++ b/dist/src/main/kotlin/kr/toxicity/healthbar/healthbar/HealthBarImpl.kt @@ -12,7 +12,6 @@ import kr.toxicity.healthbar.api.renderer.HealthBarRenderer import kr.toxicity.healthbar.manager.ConfigManagerImpl import kr.toxicity.healthbar.manager.LayoutManagerImpl import kr.toxicity.healthbar.util.* -import org.bukkit.Location import org.bukkit.configuration.ConfigurationSection import org.bukkit.util.Vector import java.util.ArrayList diff --git a/dist/src/main/kotlin/kr/toxicity/healthbar/healthbar/HealthBarUpdaterGroupImpl.kt b/dist/src/main/kotlin/kr/toxicity/healthbar/healthbar/HealthBarUpdaterGroupImpl.kt index 24ad3e1..2916519 100644 --- a/dist/src/main/kotlin/kr/toxicity/healthbar/healthbar/HealthBarUpdaterGroupImpl.kt +++ b/dist/src/main/kotlin/kr/toxicity/healthbar/healthbar/HealthBarUpdaterGroupImpl.kt @@ -1,12 +1,10 @@ package kr.toxicity.healthbar.healthbar import kr.toxicity.healthbar.api.entity.HealthBarEntity -import kr.toxicity.healthbar.api.healthbar.HealthBar import kr.toxicity.healthbar.api.healthbar.HealthBarData import kr.toxicity.healthbar.api.healthbar.HealthBarUpdater import kr.toxicity.healthbar.api.healthbar.HealthBarUpdaterGroup import kr.toxicity.healthbar.api.player.HealthBarPlayer -import kr.toxicity.healthbar.api.trigger.HealthBarTrigger import java.util.UUID import java.util.concurrent.ConcurrentHashMap @@ -20,15 +18,9 @@ class HealthBarUpdaterGroupImpl( override fun updaters(): Collection = updaters.values - override fun addHealthBar(healthBar: HealthBar, trigger: HealthBarTrigger) { - updaters.computeIfAbsent(healthBar.uuid()) { - val data = HealthBarData( - healthBar, - trigger, - player, - entity - ) - HealthBarUpdaterImpl(this, healthBar.createRenderer(data)) + override fun addHealthBar(data: HealthBarData) { + updaters.computeIfAbsent(data.healthBar.uuid()) { + HealthBarUpdaterImpl(this, data.healthBar.createRenderer(data)) }.updateTick() } } \ No newline at end of file diff --git a/dist/src/main/kotlin/kr/toxicity/healthbar/manager/CompatibilityManager.kt b/dist/src/main/kotlin/kr/toxicity/healthbar/manager/CompatibilityManager.kt index 1ceaee7..113cab5 100644 --- a/dist/src/main/kotlin/kr/toxicity/healthbar/manager/CompatibilityManager.kt +++ b/dist/src/main/kotlin/kr/toxicity/healthbar/manager/CompatibilityManager.kt @@ -2,6 +2,7 @@ package kr.toxicity.healthbar.manager import kr.toxicity.healthbar.compatibility.MythicMobsCompatibility import kr.toxicity.healthbar.compatibility.PlaceholderAPICompatibility +import kr.toxicity.healthbar.compatibility.CitizensCompatibility import kr.toxicity.healthbar.pack.PackResource import kr.toxicity.healthbar.util.PLUGIN import kr.toxicity.hud.api.BetterHud @@ -20,6 +21,9 @@ object CompatibilityManager: BetterHealthBerManager { }, "PlaceholderAPI" to { PlaceholderAPICompatibility() + }, + "Citizens" to { + CitizensCompatibility() } ) diff --git a/dist/src/main/kotlin/kr/toxicity/healthbar/mob/MobConfigurationImpl.kt b/dist/src/main/kotlin/kr/toxicity/healthbar/mob/MobConfigurationImpl.kt index ce82a32..9aa6605 100644 --- a/dist/src/main/kotlin/kr/toxicity/healthbar/mob/MobConfigurationImpl.kt +++ b/dist/src/main/kotlin/kr/toxicity/healthbar/mob/MobConfigurationImpl.kt @@ -13,6 +13,7 @@ class MobConfigurationImpl( private val types = section.getStringList("type").toSet() private val height = section.getDouble("height") private val blacklist = section.getBoolean("blacklist") + private val ignoreDefault = section.getBoolean("ignore-default") private val healthBars = section.getStringList("healthbars").map { HealthBarManagerImpl.healthBar(it).ifNull("Unable to find this health bar: $it") }.toSet() @@ -21,5 +22,6 @@ class MobConfigurationImpl( override fun path(): String = path override fun height(): Double = height override fun blacklist(): Boolean = blacklist + override fun ignoreDefault(): Boolean = ignoreDefault override fun healthBars(): Set = healthBars } \ No newline at end of file diff --git a/dist/src/main/kotlin/kr/toxicity/healthbar/player/HealthBarPlayerImpl.kt b/dist/src/main/kotlin/kr/toxicity/healthbar/player/HealthBarPlayerImpl.kt index c42b0bf..9147dd9 100644 --- a/dist/src/main/kotlin/kr/toxicity/healthbar/player/HealthBarPlayerImpl.kt +++ b/dist/src/main/kotlin/kr/toxicity/healthbar/player/HealthBarPlayerImpl.kt @@ -2,6 +2,7 @@ package kr.toxicity.healthbar.player import kr.toxicity.healthbar.api.entity.HealthBarEntity import kr.toxicity.healthbar.api.healthbar.HealthBar +import kr.toxicity.healthbar.api.healthbar.HealthBarData import kr.toxicity.healthbar.api.healthbar.HealthBarUpdaterGroup import kr.toxicity.healthbar.api.player.HealthBarPlayer import kr.toxicity.healthbar.api.trigger.HealthBarTrigger @@ -61,10 +62,17 @@ class HealthBarPlayerImpl( entity.mob()?.let { if (it.configuration().blacklist()) return } + val data = HealthBarData( + healthBar, + trigger, + this, + entity + ) + if (!healthBar.condition().apply(data)) return synchronized(updaterMap) { updaterMap.computeIfAbsent(entity.entity().uniqueId) { HealthBarUpdaterGroupImpl(this, entity) - }.addHealthBar(healthBar, trigger) + }.addHealthBar(data) } } diff --git a/dist/src/main/resources/plugin.yml b/dist/src/main/resources/plugin.yml index 6520ae3..eaa3f0e 100644 --- a/dist/src/main/resources/plugin.yml +++ b/dist/src/main/resources/plugin.yml @@ -15,6 +15,7 @@ softdepend: - ModelEngine - MythicMobs - PlaceholderAPI + - Citizens commands: healthbar: aliases: hb diff --git a/nms/v1_19_R3/src/main/kotlin/kr/toxicity/healthbar/nms/v1_19_R3/NMSImpl.kt b/nms/v1_19_R3/src/main/kotlin/kr/toxicity/healthbar/nms/v1_19_R3/NMSImpl.kt index c163f1d..1288f4a 100644 --- a/nms/v1_19_R3/src/main/kotlin/kr/toxicity/healthbar/nms/v1_19_R3/NMSImpl.kt +++ b/nms/v1_19_R3/src/main/kotlin/kr/toxicity/healthbar/nms/v1_19_R3/NMSImpl.kt @@ -314,7 +314,7 @@ class NMSImpl: NMS { val types = adapt.mob()?.configuration()?.types() val packet = PacketTrigger(trigger, handle) set.filter { - it.isDefault || (types != null && it.applicableTypes().any { t -> + (adapt.mob()?.configuration()?.ignoreDefault() != true && it.isDefault) || (types != null && it.applicableTypes().any { t -> types.contains(t) }) }.forEach { diff --git a/nms/v1_20_R1/src/main/kotlin/kr/toxicity/healthbar/nms/v1_20_R1/NMSImpl.kt b/nms/v1_20_R1/src/main/kotlin/kr/toxicity/healthbar/nms/v1_20_R1/NMSImpl.kt index 1c9b46d..a792761 100644 --- a/nms/v1_20_R1/src/main/kotlin/kr/toxicity/healthbar/nms/v1_20_R1/NMSImpl.kt +++ b/nms/v1_20_R1/src/main/kotlin/kr/toxicity/healthbar/nms/v1_20_R1/NMSImpl.kt @@ -320,7 +320,7 @@ class NMSImpl: NMS { val types = adapt.mob()?.configuration()?.types() val packet = PacketTrigger(trigger, handle) set.filter { - it.isDefault || (types != null && it.applicableTypes().any { t -> + (adapt.mob()?.configuration()?.ignoreDefault() != true && it.isDefault) || (types != null && it.applicableTypes().any { t -> types.contains(t) }) }.forEach { diff --git a/nms/v1_20_R2/src/main/kotlin/kr/toxicity/healthbar/nms/v1_20_R2/NMSImpl.kt b/nms/v1_20_R2/src/main/kotlin/kr/toxicity/healthbar/nms/v1_20_R2/NMSImpl.kt index cb25752..7267544 100644 --- a/nms/v1_20_R2/src/main/kotlin/kr/toxicity/healthbar/nms/v1_20_R2/NMSImpl.kt +++ b/nms/v1_20_R2/src/main/kotlin/kr/toxicity/healthbar/nms/v1_20_R2/NMSImpl.kt @@ -316,7 +316,7 @@ class NMSImpl: NMS { val types = adapt.mob()?.configuration()?.types() val packet = PacketTrigger(trigger, handle) set.filter { - it.isDefault || (types != null && it.applicableTypes().any { t -> + (adapt.mob()?.configuration()?.ignoreDefault() != true && it.isDefault) || (types != null && it.applicableTypes().any { t -> types.contains(t) }) }.forEach { diff --git a/nms/v1_20_R3/src/main/kotlin/kr/toxicity/healthbar/nms/v1_20_R3/NMSImpl.kt b/nms/v1_20_R3/src/main/kotlin/kr/toxicity/healthbar/nms/v1_20_R3/NMSImpl.kt index 27bc9fd..4e167b8 100644 --- a/nms/v1_20_R3/src/main/kotlin/kr/toxicity/healthbar/nms/v1_20_R3/NMSImpl.kt +++ b/nms/v1_20_R3/src/main/kotlin/kr/toxicity/healthbar/nms/v1_20_R3/NMSImpl.kt @@ -316,7 +316,7 @@ class NMSImpl: NMS { val types = adapt.mob()?.configuration()?.types() val packet = PacketTrigger(trigger, handle) set.filter { - it.isDefault || (types != null && it.applicableTypes().any { t -> + (adapt.mob()?.configuration()?.ignoreDefault() != true && it.isDefault) || (types != null && it.applicableTypes().any { t -> types.contains(t) }) }.forEach { diff --git a/nms/v1_20_R4/src/main/kotlin/kr/toxicity/healthbar/nms/v1_20_R4/NMSImpl.kt b/nms/v1_20_R4/src/main/kotlin/kr/toxicity/healthbar/nms/v1_20_R4/NMSImpl.kt index f2541e4..72c2096 100644 --- a/nms/v1_20_R4/src/main/kotlin/kr/toxicity/healthbar/nms/v1_20_R4/NMSImpl.kt +++ b/nms/v1_20_R4/src/main/kotlin/kr/toxicity/healthbar/nms/v1_20_R4/NMSImpl.kt @@ -316,7 +316,7 @@ class NMSImpl: NMS { val types = adapt.mob()?.configuration()?.types() val packet = PacketTrigger(trigger, handle) set.filter { - it.isDefault || (types != null && it.applicableTypes().any { t -> + (adapt.mob()?.configuration()?.ignoreDefault() != true && it.isDefault) || (types != null && it.applicableTypes().any { t -> types.contains(t) }) }.forEach { diff --git a/nms/v1_21_R1/src/main/kotlin/kr/toxicity/healthbar/nms/v1_21_R1/NMSImpl.kt b/nms/v1_21_R1/src/main/kotlin/kr/toxicity/healthbar/nms/v1_21_R1/NMSImpl.kt index f6872da..ff22ebe 100644 --- a/nms/v1_21_R1/src/main/kotlin/kr/toxicity/healthbar/nms/v1_21_R1/NMSImpl.kt +++ b/nms/v1_21_R1/src/main/kotlin/kr/toxicity/healthbar/nms/v1_21_R1/NMSImpl.kt @@ -328,7 +328,7 @@ class NMSImpl: NMS { val types = adapt.mob()?.configuration()?.types() val packet = PacketTrigger(trigger, handle) set.filter { - it.isDefault || (types != null && it.applicableTypes().any { t -> + (adapt.mob()?.configuration()?.ignoreDefault() != true && it.isDefault) || (types != null && it.applicableTypes().any { t -> types.contains(t) }) }.forEach {