浮き文字の追加についての覚え書き
NMS及びCraftBukkitのAPIを使わない場合です。
基本的に解説は Kotlin をもちいておこなっています。
IDEによっては Kotlin とJavaのコンバートを行えることがあると思うので、利用の際は変換してからご利用ください。
私はプログラミング歴が浅すぎます。ですので間違えや至らない個所が多くなるかもしれません。
浮き文字を設置したいなーって思ったので。
参考になればうれしいです
間違えとかあれば指摘してください!
NMS及びCraftBukkitのAPIを使わない場合です。
免責事項
基本的に解説は Kotlin をもちいておこなっています。IDEによっては Kotlin とJavaのコンバートを行えることがあると思うので、利用の際は変換してからご利用ください。
私はプログラミング歴が浅すぎます。ですので間違えや至らない個所が多くなるかもしれません。
はじめに
浮き文字を設置したいなーって思ったので。
コード概要
FloatText.kt


Kotlin:
import org.bukkit.Location
import org.bukkit.entity.ArmorStand
import org.bukkit.entity.Entity
import org.bukkit.entity.EntityType
import org.bukkit.entity.Player
import java.util.*
class FloatText(val player: Player) {
var entity: Entity? = null
var name: String = "float text"
var location: Location = player.location
init { add() }
fun remove() {
val entity = this.entity ?: return
val oldUUID = entity.uniqueId ?: return
entity.remove()
texts.remove(oldUUID)
this.entity = null
}
fun update() {
remove()
add()
}
fun isValid(): Boolean {
return entity != null
}
private fun add() {
spawnToAll()
texts[this.entity?.uniqueId!!] = this
}
private fun spawnToAll() {
val entity = location.world.spawnEntity(location, EntityType.ARMOR_STAND) ?: return
if (entity is ArmorStand) {
entity.isVisible = false
entity.customName = name
entity.isCustomNameVisible = true
this.entity = entity
}
}
companion object {
private val texts = mutableMapOf<UUID, FloatText>()
fun get(entity: Entity): FloatText? {
if (entity !is ArmorStand) return null
return texts[entity.uniqueId]
}
}
}
使用方法とか


Kotlin:
// 浮き文字の追加と変更
@EventHandler
fun onInteractEntity(event: PlayerInteractEntityEvent) {
val entity = event.rightClicked
if (entity !is ArmorStand) return
val interactItem = event.player.inventory.itemInMainHand
val ft = FloatText.get(entity) ?: return
// 文字追加
if (event.player.isSneaking) {
val ft = FloatText(sender)
if (!ft.isValid()) return
sender.sendMessage("初期状態の浮き文字を追加したよ")
return
}
// 文字変更
if (interactItem.type == Material.NAME_TAG) {
if (!interactItem.hasItemMeta()) return
val name = interactItem.itemMeta.displayName
ft.name = name
ft.update()
sender.sendMessage("浮き文字の名前を変更したよ")
return
}
}
// 浮き文字削除
@EventHandler
fun onDamage(event: EntityDamageByEntityEvent) {
val entity = event.entity
if (entity !is ArmorStand) return
val damager = event.damager
if (damager is Player && damager.isSneaking) {
val ft = FloatText.get(entity) ?: return
ft.remove()
sender.sendMessage("浮き文字を削除したよ")
}
}
おわり
参考になればうれしいです間違えとかあれば指摘してください!