From 2ca292b5dd2879d1ea51fd4fad30445b936f8e81 Mon Sep 17 00:00:00 2001 From: Arasple Date: Fri, 12 Feb 2021 21:06:42 +0800 Subject: [PATCH] Update Commands --- build.gradle | 2 +- .../mc/trhologram/api/base/TickEvent.kt | 13 ++ .../api/hologram/HologramBuilder.kt | 5 +- .../api/hologram/HologramComponent.kt | 5 +- .../trhologram/api/hologram/ItemHologram.kt | 5 +- .../trhologram/api/hologram/TextHologram.kt | 3 +- .../me/arasple/mc/trhologram/api/nms/NMS.kt | 6 +- .../module/command/CommandHandler.kt | 19 +- .../module/command/impl/CommandCreate.kt | 2 +- .../module/command/impl/CommandDelete.kt | 4 +- .../{CommandEdit.kt => CommandMovehere.kt} | 11 +- .../trhologram/module/conf/HologramLoader.kt | 6 +- .../mc/trhologram/module/editor/Editor.kt | 180 +++++++++--------- 13 files changed, 135 insertions(+), 126 deletions(-) create mode 100644 src/main/kotlin/me/arasple/mc/trhologram/api/base/TickEvent.kt rename src/main/kotlin/me/arasple/mc/trhologram/module/command/impl/{CommandEdit.kt => CommandMovehere.kt} (75%) diff --git a/build.gradle b/build.gradle index 0cf85fb..eb6e5eb 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ plugins { } group 'me.arasple.mc.trhologram' -version '2.0-BETA1' +version '2.0-BETA2' task buildJar(dependsOn: [clean, shadowJar]) diff --git a/src/main/kotlin/me/arasple/mc/trhologram/api/base/TickEvent.kt b/src/main/kotlin/me/arasple/mc/trhologram/api/base/TickEvent.kt new file mode 100644 index 0000000..da3b9a5 --- /dev/null +++ b/src/main/kotlin/me/arasple/mc/trhologram/api/base/TickEvent.kt @@ -0,0 +1,13 @@ +package me.arasple.mc.trhologram.api.base + +import me.arasple.mc.trhologram.api.hologram.HologramComponent + +/** + * @author Arasple + * @date 2021/2/12 20:38 + */ +fun interface TickEvent { + + fun run(hologramComponent: HologramComponent) + +} \ No newline at end of file diff --git a/src/main/kotlin/me/arasple/mc/trhologram/api/hologram/HologramBuilder.kt b/src/main/kotlin/me/arasple/mc/trhologram/api/hologram/HologramBuilder.kt index 561b6fd..f0db9da 100644 --- a/src/main/kotlin/me/arasple/mc/trhologram/api/hologram/HologramBuilder.kt +++ b/src/main/kotlin/me/arasple/mc/trhologram/api/hologram/HologramBuilder.kt @@ -4,6 +4,7 @@ import me.arasple.mc.trhologram.api.Position import me.arasple.mc.trhologram.api.base.BaseCondition import me.arasple.mc.trhologram.api.base.ClickHandler import me.arasple.mc.trhologram.api.base.ItemTexture +import me.arasple.mc.trhologram.api.base.TickEvent import me.arasple.mc.trhologram.module.display.Hologram import org.bukkit.Location import java.util.* @@ -43,7 +44,7 @@ class HologramBuilder( text: String, update: Long = -1, offset: Double = this.offset, - onTick: (HologramComponent) -> Unit = {} + onTick: TickEvent? = null ): HologramBuilder { interspace(offset) components.add(TextHologram(text, position, update, onTick)) @@ -58,7 +59,7 @@ class HologramBuilder( texture: ItemTexture, update: Long = -1, offset: Double = this.offset, - onTick: (HologramComponent) -> Unit = {} + onTick: TickEvent? = null ): HologramBuilder { interspace(0.5 + offset) components.add(ItemHologram(texture, position, update, onTick)) diff --git a/src/main/kotlin/me/arasple/mc/trhologram/api/hologram/HologramComponent.kt b/src/main/kotlin/me/arasple/mc/trhologram/api/hologram/HologramComponent.kt index 8c26b10..54eda9d 100644 --- a/src/main/kotlin/me/arasple/mc/trhologram/api/hologram/HologramComponent.kt +++ b/src/main/kotlin/me/arasple/mc/trhologram/api/hologram/HologramComponent.kt @@ -3,6 +3,7 @@ package me.arasple.mc.trhologram.api.hologram import io.izzel.taboolib.kotlin.Tasks import me.arasple.mc.trhologram.api.Position import me.arasple.mc.trhologram.api.TrHologramAPI +import me.arasple.mc.trhologram.api.base.TickEvent import me.arasple.mc.trhologram.api.nms.packet.PacketEntityDestroy import me.arasple.mc.trhologram.util.Tasks.shut import org.bukkit.Bukkit @@ -17,7 +18,7 @@ import kotlin.properties.Delegates abstract class HologramComponent( val position: Position, tick: Long = -1, - val onTick: (HologramComponent) -> Unit = {} + val onTick: TickEvent? ) { abstract fun spawn(player: Player) @@ -46,7 +47,7 @@ abstract class HologramComponent( player == null || !player.isOnline } onTick() - onTick(this) + onTick?.run(this) } } diff --git a/src/main/kotlin/me/arasple/mc/trhologram/api/hologram/ItemHologram.kt b/src/main/kotlin/me/arasple/mc/trhologram/api/hologram/ItemHologram.kt index 7067c1a..1a20baa 100644 --- a/src/main/kotlin/me/arasple/mc/trhologram/api/hologram/ItemHologram.kt +++ b/src/main/kotlin/me/arasple/mc/trhologram/api/hologram/ItemHologram.kt @@ -3,6 +3,7 @@ package me.arasple.mc.trhologram.api.hologram import me.arasple.mc.trhologram.api.Position import me.arasple.mc.trhologram.api.TrHologramAPI import me.arasple.mc.trhologram.api.base.ItemTexture +import me.arasple.mc.trhologram.api.base.TickEvent import me.arasple.mc.trhologram.api.nms.packet.* import me.arasple.mc.trhologram.module.display.texture.Texture import me.arasple.mc.trhologram.module.service.Performance @@ -20,7 +21,7 @@ class ItemHologram( texture: ItemTexture, position: Position, tick: Long = -1, - onTick: (HologramComponent) -> Unit = {} + onTick: TickEvent? = null ) : HologramComponent(position.clone(y = 1.3), tick, onTick) { constructor( @@ -58,7 +59,7 @@ class ItemHologram( Tasks.delay { PacketEntityMount(teid, IntArray(1) { entityId }).send(player) - Tasks.delay { PacketEntityDestroy(teid).send(player) } + Tasks.delay(5) { PacketEntityDestroy(teid).send(player) } } viewers.add(player.name) diff --git a/src/main/kotlin/me/arasple/mc/trhologram/api/hologram/TextHologram.kt b/src/main/kotlin/me/arasple/mc/trhologram/api/hologram/TextHologram.kt index db1719b..37b6920 100644 --- a/src/main/kotlin/me/arasple/mc/trhologram/api/hologram/TextHologram.kt +++ b/src/main/kotlin/me/arasple/mc/trhologram/api/hologram/TextHologram.kt @@ -1,6 +1,7 @@ package me.arasple.mc.trhologram.api.hologram import me.arasple.mc.trhologram.api.Position +import me.arasple.mc.trhologram.api.base.TickEvent import me.arasple.mc.trhologram.api.nms.packet.PacketArmorStandModify import me.arasple.mc.trhologram.api.nms.packet.PacketArmorStandName import me.arasple.mc.trhologram.api.nms.packet.PacketEntitySpawn @@ -18,7 +19,7 @@ class TextHologram( name: String, position: Position, tick: Long, - onTick: (HologramComponent) -> Unit = {} + onTick: TickEvent? = null ) : HologramComponent(position, tick, onTick) { var text: String = name diff --git a/src/main/kotlin/me/arasple/mc/trhologram/api/nms/NMS.kt b/src/main/kotlin/me/arasple/mc/trhologram/api/nms/NMS.kt index 618e9d3..260fc0f 100644 --- a/src/main/kotlin/me/arasple/mc/trhologram/api/nms/NMS.kt +++ b/src/main/kotlin/me/arasple/mc/trhologram/api/nms/NMS.kt @@ -2,6 +2,7 @@ package me.arasple.mc.trhologram.api.nms import com.mojang.authlib.GameProfile import io.izzel.taboolib.kotlin.Reflex +import io.izzel.taboolib.module.inject.TInject import io.izzel.taboolib.module.packet.TPacketHandler import io.izzel.taboolib.util.asm.AsmVersionControl import me.arasple.mc.trhologram.TrHologram @@ -20,9 +21,8 @@ abstract class NMS { /** * @see NMSImpl */ - val INSTANCE: NMS = - AsmVersionControl.createNMS("me.arasple.mc.trhologram.api.nms.NMSImpl").translate(TrHologram.plugin) - .newInstance() as NMS + @TInject(asm = "me.arasple.mc.trhologram.api.nms.NMSImpl") + lateinit var INSTANCE: NMS } diff --git a/src/main/kotlin/me/arasple/mc/trhologram/module/command/CommandHandler.kt b/src/main/kotlin/me/arasple/mc/trhologram/module/command/CommandHandler.kt index 5645af4..d74a36f 100644 --- a/src/main/kotlin/me/arasple/mc/trhologram/module/command/CommandHandler.kt +++ b/src/main/kotlin/me/arasple/mc/trhologram/module/command/CommandHandler.kt @@ -17,25 +17,16 @@ class CommandHandler : BaseMainCommand() { ) val create: BaseSubCommand = CommandCreate() - - @SubCommand( - permission = "trhologram.command.delete", - description = "Delete an existed hologram", - type = CommandType.PLAYER - ) + @SubCommand(description = "Delete an existed hologram", type = CommandType.PLAYER) val delete: BaseSubCommand = CommandDelete() - @SubCommand( - permission = "trhologram.command.list", - description = "List loaded holograms" - ) + @SubCommand(permission = "trhologram.command.list", description = "List loaded holograms") val list: BaseSubCommand = CommandList() + @SubCommand(permission = "trhologram.command.movehere", description = "Teleport hologram to your location") + val movehere: BaseSubCommand = CommandMovehere() - @SubCommand( - permission = "trhologram.command.reload", - description = "Reload holograms" - ) + @SubCommand(permission = "trhologram.command.reload", description = "Reload holograms") val reload: BaseSubCommand = CommandReload() @SubCommand(permission = "trhologram.command.mirror", description = "Monitor performance") diff --git a/src/main/kotlin/me/arasple/mc/trhologram/module/command/impl/CommandCreate.kt b/src/main/kotlin/me/arasple/mc/trhologram/module/command/impl/CommandCreate.kt index 57e6f42..113e163 100644 --- a/src/main/kotlin/me/arasple/mc/trhologram/module/command/impl/CommandCreate.kt +++ b/src/main/kotlin/me/arasple/mc/trhologram/module/command/impl/CommandCreate.kt @@ -30,7 +30,7 @@ class CommandCreate : BaseSubCommand() { return } - HologramLoader.create(args[0], player.location.clone().add(0.0, 4.0, 0.0)).refreshVisibility(player) + HologramLoader.create(args[0], player.location.clone().add(0.0, 2.0, 0.0)).refreshVisibility(player) TLocale.sendTo(sender, "Command.Created") } diff --git a/src/main/kotlin/me/arasple/mc/trhologram/module/command/impl/CommandDelete.kt b/src/main/kotlin/me/arasple/mc/trhologram/module/command/impl/CommandDelete.kt index c865459..7437bac 100644 --- a/src/main/kotlin/me/arasple/mc/trhologram/module/command/impl/CommandDelete.kt +++ b/src/main/kotlin/me/arasple/mc/trhologram/module/command/impl/CommandDelete.kt @@ -6,7 +6,7 @@ import io.izzel.taboolib.module.locale.TLocale import me.arasple.mc.trhologram.module.display.Hologram import org.bukkit.command.Command import org.bukkit.command.CommandSender -import org.bukkit.entity.Player +import java.io.File /** * @author Arasple @@ -22,12 +22,12 @@ class CommandDelete : BaseSubCommand() { override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array) { val hologram = Hologram.findHologram { it.id.equals(args[0], true) } - val player = sender as Player if (hologram == null) { TLocale.sendTo(sender, "Command.Not-Exists", args[0]) return } + hologram.loadedPath?.let { File(it).delete() } hologram.destroy() Hologram.holograms.remove(hologram) TLocale.sendTo(sender, "Command.Deleted", args[0]) diff --git a/src/main/kotlin/me/arasple/mc/trhologram/module/command/impl/CommandEdit.kt b/src/main/kotlin/me/arasple/mc/trhologram/module/command/impl/CommandMovehere.kt similarity index 75% rename from src/main/kotlin/me/arasple/mc/trhologram/module/command/impl/CommandEdit.kt rename to src/main/kotlin/me/arasple/mc/trhologram/module/command/impl/CommandMovehere.kt index b8f0ff8..a81f2f3 100644 --- a/src/main/kotlin/me/arasple/mc/trhologram/module/command/impl/CommandEdit.kt +++ b/src/main/kotlin/me/arasple/mc/trhologram/module/command/impl/CommandMovehere.kt @@ -5,15 +5,16 @@ import io.izzel.taboolib.module.command.base.BaseSubCommand import io.izzel.taboolib.module.locale.TLocale import me.arasple.mc.trhologram.module.display.Hologram import me.arasple.mc.trhologram.module.editor.Editor +import me.arasple.mc.trhologram.util.Parser import org.bukkit.command.Command import org.bukkit.command.CommandSender import org.bukkit.entity.Player /** * @author Arasple - * @date 2021/2/12 17:41 + * @date 2021/2/12 20:45 */ -class CommandEdit : BaseSubCommand() { +class CommandMovehere : BaseSubCommand() { override fun getArguments() = arrayOf( Argument("Id", true) { @@ -26,11 +27,13 @@ class CommandEdit : BaseSubCommand() { val player = sender as Player if (hologram == null) { - TLocale.sendTo(sender, "Command.Existed") + TLocale.sendTo(sender, "Command.Not-Exists", args[0]) return } - Editor.contentEditor(player, hologram) + Editor.modify(hologram) { + it["Location"] = Parser.fromLocation(player.location) + } } } \ No newline at end of file diff --git a/src/main/kotlin/me/arasple/mc/trhologram/module/conf/HologramLoader.kt b/src/main/kotlin/me/arasple/mc/trhologram/module/conf/HologramLoader.kt index 11bf502..6f462e2 100644 --- a/src/main/kotlin/me/arasple/mc/trhologram/module/conf/HologramLoader.kt +++ b/src/main/kotlin/me/arasple/mc/trhologram/module/conf/HologramLoader.kt @@ -29,7 +29,7 @@ import kotlin.system.measureNanoTime */ object HologramLoader { - private val folder = Files.file(TrHologram.plugin.dataFolder, "holograms") + private val folder = Files.folder(TrHologram.plugin.dataFolder, "holograms") fun create(id: String, location: Location): Hologram { val hologram = @@ -39,11 +39,11 @@ object HologramLoader { Contents: - '&7Hello, &2Tr&aHologram&7!' - '{item: emerald}' - - '' - '&3Nice to meet you, &a{{player name}}' + - '&3Author: &aArasple{offset=0.35}' Actions: - All: 'tell color *&bHi, you just clicked this hologram' + All: 'tell color *"&bHi, you just clicked this hologram"' """.trimIndent() Files.file(folder, "$id.yml").also { diff --git a/src/main/kotlin/me/arasple/mc/trhologram/module/editor/Editor.kt b/src/main/kotlin/me/arasple/mc/trhologram/module/editor/Editor.kt index 5ea2444..3bb1bab 100644 --- a/src/main/kotlin/me/arasple/mc/trhologram/module/editor/Editor.kt +++ b/src/main/kotlin/me/arasple/mc/trhologram/module/editor/Editor.kt @@ -1,106 +1,104 @@ package me.arasple.mc.trhologram.module.editor -import io.izzel.taboolib.cronus.CronusUtils -import io.izzel.taboolib.module.inject.TListener -import io.izzel.taboolib.module.tellraw.TellrawJson -import io.izzel.taboolib.util.book.builder.BookBuilder -import io.izzel.taboolib.util.item.ItemBuilder -import io.izzel.taboolib.util.item.Items -import io.izzel.taboolib.util.lite.Materials -import me.arasple.mc.trhologram.api.TrHologramAPI -import me.arasple.mc.trhologram.api.hologram.ItemHologram -import me.arasple.mc.trhologram.api.hologram.TextHologram import me.arasple.mc.trhologram.module.conf.HologramLoader import me.arasple.mc.trhologram.module.display.Hologram -import me.arasple.mc.trhologram.module.display.texture.Texture -import me.arasple.mc.trhologram.util.Parser -import org.bukkit.entity.Player -import org.bukkit.event.EventHandler -import org.bukkit.event.Listener -import org.bukkit.event.player.PlayerEditBookEvent +import org.bukkit.Bukkit +import org.bukkit.configuration.file.YamlConfiguration +import java.io.File /** * @author Arasple * @date 2021/2/12 17:09 */ -@TListener -object Editor : Listener { +object Editor { - @EventHandler(ignoreCancelled = true) - fun onBookEdit(e: PlayerEditBookEvent) { - val lore = e.newBookMeta.lore - if (lore !== null && lore.getOrNull(0) == "§8TrHologram Editor") { - val hologram = TrHologramAPI.getHologramById(lore[1].removePrefix("§0")) ?: return - val book = e.newBookMeta.pages - - Items.takeItem(e.player.inventory, { Items.hasLore(it, "TrHologram Editor") }, 99) + fun modify(hologram: Hologram, modify: (YamlConfiguration) -> Unit) { + val file = File(hologram.loadedPath!!) + val conf = YamlConfiguration.loadConfiguration(file) + modify(conf) + conf.save(file) + hologram.destroy() + Hologram.holograms.remove(hologram) + HologramLoader.load(file).run { + Bukkit.getOnlinePlayers().forEach(this::refreshVisibility) } } - fun contentEditor(player: Player, hologram: Hologram) { - CronusUtils.addItem( - player, - ItemBuilder( - BookBuilder(Materials.WRITABLE_BOOK.parseItem()) - .author("Arasple") - .title("TrHologram Editor") - .pagesRaw( - hologram.components.map { - when (it) { - is TextHologram -> it.text - is ItemHologram -> (it.display as Texture).raw - else -> "__ERROR__" - } - } - ) - .build() - ) - .name("Editor: ${hologram.id}") - .lore("§8TrHologram Editor", "§0${hologram.id}") - .build() - ) - } - - fun edit(player: Player, hologram: Hologram) { - - val plane = - TellrawJson - .create() - .newLine() - .append(" §7§lHOLOGRAM EDITOR").newLine() - .append(" §3§l§n${hologram.id}").newLine() - .newLine() - .append(" §fPosition: §2${hologram.position} ").append("§8(§6•§8)") - .hoverText("Move to your location") - .clickCommand("/trhologram movehere ${hologram.id}") - .newLine() - .append(" §fView-Distance: §e${hologram.viewDistance}").newLine() - .append(" §fView-Condition: §2${hologram.viewCondition ?: "*"}").newLine() - .append(" §fRefresh-Condition: §2${hologram.refreshCondition} ticks") - .newLine() - .newLine() - .append(" §6Components:") - .newLine() - - hologram.components.forEachIndexed { index, it -> - when (it) { - is TextHologram -> - plane - .append(" §8- §7${it.text}") - .hoverText(Parser.parseString(player, it.text)) - .clickSuggest("/trhd edit ${hologram.id} line " + it.text) - .newLine() - is ItemHologram -> { - val item = it.display.generate(player) - plane - .append(" §8- §8[ §7${Items.getName(item)} §8]") - .hoverItem(item) - .newLine() - } - } - } - - plane.send(player) - } +// @EventHandler(ignoreCancelled = true) +// fun onBookEdit(e: PlayerEditBookEvent) { +// val lore = e.newBookMeta.lore +// if (lore !== null && lore.getOrNull(0) == "§8TrHologram Editor") { +// val hologram = TrHologramAPI.getHologramById(lore[1].removePrefix("§0")) ?: return +// val book = e.newBookMeta.pages +// +// Items.takeItem(e.player.inventory, { Items.hasLore(it, "TrHologram Editor") }, 99) +// } +// } +// +// fun contentEditor(player: Player, hologram: Hologram) { +// CronusUtils.addItem( +// player, +// ItemBuilder( +// BookBuilder(Materials.WRITABLE_BOOK.parseItem()) +// .author("Arasple") +// .title("TrHologram Editor") +// .pagesRaw( +// hologram.components.map { +// when (it) { +// is TextHologram -> it.text +// is ItemHologram -> (it.display as Texture).raw +// else -> "__ERROR__" +// } +// } +// ) +// .build() +// ) +// .name("Editor: ${hologram.id}") +// .lore("§8TrHologram Editor", "§0${hologram.id}") +// .build() +// ) +// } +// +// fun edit(player: Player, hologram: Hologram) { +// +// val plane = +// TellrawJson +// .create() +// .newLine() +// .append(" §7§lHOLOGRAM EDITOR").newLine() +// .append(" §3§l§n${hologram.id}").newLine() +// .newLine() +// .append(" §fPosition: §2${hologram.position} ").append("§8(§6•§8)") +// .hoverText("Move to your location") +// .clickCommand("/trhologram movehere ${hologram.id}") +// .newLine() +// .append(" §fView-Distance: §e${hologram.viewDistance}").newLine() +// .append(" §fView-Condition: §2${hologram.viewCondition ?: "*"}").newLine() +// .append(" §fRefresh-Condition: §2${hologram.refreshCondition} ticks") +// .newLine() +// .newLine() +// .append(" §6Components:") +// .newLine() +// +// hologram.components.forEachIndexed { index, it -> +// when (it) { +// is TextHologram -> +// plane +// .append(" §8- §7${it.text}") +// .hoverText(Parser.parseString(player, it.text)) +// .clickSuggest("/trhd edit ${hologram.id} line " + it.text) +// .newLine() +// is ItemHologram -> { +// val item = it.display.generate(player) +// plane +// .append(" §8- §8[ §7${Items.getName(item)} §8]") +// .hoverItem(item) +// .newLine() +// } +// } +// } +// +// plane.send(player) +// } } \ No newline at end of file