11package me.arasple.mc.trhologram.hologram
22
33import io.izzel.taboolib.internal.apache.lang3.math.NumberUtils
4+ import io.izzel.taboolib.util.Strings
45import io.izzel.taboolib.util.lite.Sounds
56import me.arasple.mc.trhologram.TrHologram
67import me.arasple.mc.trhologram.action.ActionGroups
@@ -30,13 +31,22 @@ class Hologram(var loadedFrom: String?, val id: String, var loc: Location, var c
3031
3132 val HOLOGRAMS : MutableMap <String , MutableList <Hologram >> = mutableMapOf ()
3233
34+ fun createHologram (plugin : Plugin , id : String , loc : Location , contents : List <String >): Hologram {
35+ return createHologram(plugin, null , id, loc, contents, mutableListOf (), null , null )
36+ }
37+
38+ fun createHologram (plugin : Plugin , id : String , loc : Location , contents : List <String >, actions : MutableList <ActionGroups >): Hologram {
39+ return createHologram(plugin, null , id, loc, contents, actions, null , null )
40+ }
41+
3342 fun createHologram (plugin : Plugin , id : String , loc : Location , contents : List <String >, actions : MutableList <ActionGroups >, condition : String? , distance : String? ): Hologram {
3443 return createHologram(plugin, null , id, loc, contents, actions, condition, distance)
3544 }
3645
3746 fun createHologram (plugin : Plugin , file : File ? , id : String , loc : Location , contents : List <String >, actions : MutableList <ActionGroups >, condition : String? , distance : String? ): Hologram {
3847 val path = if (file == null || ! file.exists()) null else file.path
39- val holo = Hologram (path, id, loc, contents, actions, condition!! , distance!! , NumberUtils .toDouble(distance, - 1.0 ))
48+ val holo = Hologram (path, id, loc, contents, actions, condition ? : " " , distance
49+ ? : " " , NumberUtils .toDouble(distance, - 1.0 ))
4050 HOLOGRAMS .putIfAbsent(plugin.name, mutableListOf ())
4151 HOLOGRAMS [plugin.name]?.add(holo)
4252 return holo
@@ -46,6 +56,26 @@ class Hologram(var loadedFrom: String?, val id: String, var loc: Location, var c
4656 return HOLOGRAMS .getOrDefault(TrHologram .getPlugin().name, mutableListOf ())
4757 }
4858
59+ fun display (player : Player ) {
60+ HOLOGRAMS .values.forEach { list ->
61+ list.forEach { hologram ->
62+ if (hologram.isVisible(player) && ! hologram.viewers.contains(player)) {
63+ hologram.display(player)
64+ } else if (! hologram.isVisible(player) && hologram.viewers.contains(player)) {
65+ hologram.destroy(player)
66+ }
67+ }
68+ }
69+ }
70+
71+ fun destroy (player : Player ) {
72+ HOLOGRAMS .values.forEach { list ->
73+ list.forEach { hologram ->
74+ hologram.removeViewer(player)
75+ }
76+ }
77+ }
78+
4979 }
5080
5181 fun display (vararg players : Player ) {
@@ -90,7 +120,7 @@ class Hologram(var loadedFrom: String?, val id: String, var loc: Location, var c
90120 return false
91121 }
92122 val distance = if (finalViewDistance > 0 ) finalViewDistance else NumberUtils .toDouble(JavaScript .run (player, viewDistance).toString(), - 1.0 ).coerceAtMost(70.0 )
93- return player.location.distance(loc) <= distance && JavaScript .run (player, viewCondition) as Boolean
123+ return (distance <= 0 || player.location.distance(loc) <= distance) && ( Strings .isEmpty(viewCondition) || JavaScript .run (player, viewCondition) as Boolean )
94124 }
95125
96126 private fun refreshLines (player : Player ) {
@@ -118,6 +148,7 @@ class Hologram(var loadedFrom: String?, val id: String, var loc: Location, var c
118148 fun delete () {
119149 lines.forEach { line -> line.cancelTask() }
120150 destroyAll()
151+ HOLOGRAMS .values.forEach { it -> it.removeIf { it == this } }
121152 }
122153
123154 fun removeViewer (player : Player ) {
0 commit comments