@@ -38,9 +38,7 @@ class LiteralTextBuilder(val internalText: Component) {
|
|||||||
* This can be set in the following way:
|
* This can be set in the following way:
|
||||||
*
|
*
|
||||||
* e.g. Medium turquoise:
|
* e.g. Medium turquoise:
|
||||||
* - `color = col(0x4BD6CB)`
|
* - `color = TextColor.color(72, 209, 204)`
|
||||||
* - `color = col(4970187)`
|
|
||||||
* - `color = col("#4BD6CB")`
|
|
||||||
* - `color = KColors.MEDIUMTURQUOISE`
|
* - `color = KColors.MEDIUMTURQUOISE`
|
||||||
*/
|
*/
|
||||||
var color: TextColor? = null
|
var color: TextColor? = null
|
||||||
|
@@ -21,8 +21,8 @@ internal class PlayerInputChat(
|
|||||||
override val inputListeners = listOf(
|
override val inputListeners = listOf(
|
||||||
listen<AsyncChatEvent>(EventPriority.LOWEST) {
|
listen<AsyncChatEvent>(EventPriority.LOWEST) {
|
||||||
if (it.player == player) {
|
if (it.player == player) {
|
||||||
onReceive(it.message())
|
|
||||||
it.isCancelled = true
|
it.isCancelled = true
|
||||||
|
onReceive(it.message())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
package net.axay.kspigot.extensions
|
package net.axay.kspigot.extensions
|
||||||
|
|
||||||
import net.axay.kspigot.main.PluginInstance
|
import net.axay.kspigot.main.PluginInstance
|
||||||
|
import net.kyori.adventure.text.Component
|
||||||
import net.kyori.adventure.text.Component.text
|
import net.kyori.adventure.text.Component.text
|
||||||
import org.bukkit.Bukkit
|
import org.bukkit.Bukkit
|
||||||
import org.bukkit.NamespacedKey
|
import org.bukkit.NamespacedKey
|
||||||
@@ -41,6 +42,13 @@ val pluginManager get() = Bukkit.getPluginManager()
|
|||||||
*/
|
*/
|
||||||
fun broadcast(msg: String) = Bukkit.getServer().broadcast(text(msg))
|
fun broadcast(msg: String) = Bukkit.getServer().broadcast(text(msg))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Broadcasts a message ([msg]) on the server.
|
||||||
|
* @return the number of recipients
|
||||||
|
* @see Bukkit.broadcastMessage
|
||||||
|
*/
|
||||||
|
fun broadcast(msg: Component) = Bukkit.getServer().broadcast(msg)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shortcut to get the ConsoleSender.
|
* Shortcut to get the ConsoleSender.
|
||||||
* @see Bukkit.getConsoleSender
|
* @see Bukkit.getConsoleSender
|
||||||
|
@@ -0,0 +1,43 @@
|
|||||||
|
@file:Suppress("unused")
|
||||||
|
package net.axay.kspigot.extensions.bukkit
|
||||||
|
|
||||||
|
import net.kyori.adventure.text.Component
|
||||||
|
import net.kyori.adventure.text.TranslatableComponent
|
||||||
|
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer
|
||||||
|
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer
|
||||||
|
import net.kyori.adventure.translation.GlobalTranslator
|
||||||
|
import java.util.Locale
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a [Component] from a [String]
|
||||||
|
*/
|
||||||
|
fun String.toComponent(): Component = Component.text(this)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a [TranslatableComponent] with the given [String] as key and [args]
|
||||||
|
*/
|
||||||
|
fun String.asTranslatable(vararg args: Component): TranslatableComponent = Component.translatable(this, *args)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a [Component] from a [String] with legacy formatting
|
||||||
|
*/
|
||||||
|
fun String.legacyToComponent(): Component = LegacyComponentSerializer.legacyAmpersand().deserialize(this)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a [String] with legacy formatting from a [Component]
|
||||||
|
*
|
||||||
|
* Note: Render [TranslatableComponent]s before using this
|
||||||
|
*/
|
||||||
|
fun Component.toLegacyString(): String = LegacyComponentSerializer.legacyAmpersand().serialize(this)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a [String] from a [Component]
|
||||||
|
*
|
||||||
|
* Note: Render [TranslatableComponent]s before using this
|
||||||
|
*/
|
||||||
|
fun Component.plainText(): String = PlainTextComponentSerializer.plainText().serialize(this)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renders a [TranslatableComponent] with the given [locale]
|
||||||
|
*/
|
||||||
|
fun TranslatableComponent.render(locale: Locale): Component = GlobalTranslator.render(this, locale)
|
@@ -7,12 +7,20 @@ import net.axay.kspigot.chat.literalText
|
|||||||
import net.axay.kspigot.extensions.onlinePlayers
|
import net.axay.kspigot.extensions.onlinePlayers
|
||||||
import net.axay.kspigot.main.PluginInstance
|
import net.axay.kspigot.main.PluginInstance
|
||||||
import net.axay.kspigot.pluginmessages.PluginMessageConnect
|
import net.axay.kspigot.pluginmessages.PluginMessageConnect
|
||||||
|
import net.kyori.adventure.text.Component
|
||||||
|
import net.kyori.adventure.title.Title
|
||||||
import org.bukkit.Location
|
import org.bukkit.Location
|
||||||
import org.bukkit.Material
|
import org.bukkit.Material
|
||||||
import org.bukkit.attribute.Attribute
|
import org.bukkit.attribute.Attribute
|
||||||
import org.bukkit.entity.*
|
import org.bukkit.entity.ArmorStand
|
||||||
|
import org.bukkit.entity.Damageable
|
||||||
|
import org.bukkit.entity.Entity
|
||||||
|
import org.bukkit.entity.EntityType
|
||||||
|
import org.bukkit.entity.LivingEntity
|
||||||
|
import org.bukkit.entity.Player
|
||||||
import org.bukkit.inventory.EquipmentSlot
|
import org.bukkit.inventory.EquipmentSlot
|
||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
|
import java.time.Duration
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if the entities' head is in water.
|
* Checks if the entities' head is in water.
|
||||||
@@ -123,14 +131,13 @@ fun Location.spawnCleanEntity(entityType: EntityType): Entity? {
|
|||||||
* @param fadeOut time in ticks for titles to fade out
|
* @param fadeOut time in ticks for titles to fade out
|
||||||
*/
|
*/
|
||||||
fun Player.title(
|
fun Player.title(
|
||||||
mainText: String? = null,
|
mainText: Component = Component.empty(),
|
||||||
subText: String? = null,
|
subText: Component = Component.empty(),
|
||||||
fadeIn: Int = 10,
|
fadeIn: Duration = Duration.ofMillis(500),
|
||||||
stay: Int = 70,
|
stay: Duration = Duration.ofMillis(3500),
|
||||||
fadeOut: Int = 20,
|
fadeOut: Duration = Duration.ofMillis(1000),
|
||||||
) {
|
) {
|
||||||
@Suppress("DEPRECATION")
|
showTitle(Title.title(mainText, subText, Title.Times.times(fadeIn, stay, fadeOut)))
|
||||||
sendTitle(mainText, subText, fadeIn, stay, fadeOut)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -5,6 +5,7 @@ package net.axay.kspigot.gui
|
|||||||
import net.axay.kspigot.event.listen
|
import net.axay.kspigot.event.listen
|
||||||
import net.axay.kspigot.extensions.bukkit.closeForViewers
|
import net.axay.kspigot.extensions.bukkit.closeForViewers
|
||||||
import net.axay.kspigot.main.PluginInstance
|
import net.axay.kspigot.main.PluginInstance
|
||||||
|
import net.kyori.adventure.text.Component
|
||||||
import org.bukkit.entity.Player
|
import org.bukkit.entity.Player
|
||||||
import org.bukkit.event.inventory.InventoryCloseEvent
|
import org.bukkit.event.inventory.InventoryCloseEvent
|
||||||
import org.bukkit.event.player.PlayerQuitEvent
|
import org.bukkit.event.player.PlayerQuitEvent
|
||||||
@@ -13,7 +14,7 @@ import org.bukkit.inventory.ItemStack
|
|||||||
|
|
||||||
class GUIData<T : ForInventory>(
|
class GUIData<T : ForInventory>(
|
||||||
val guiType: GUIType<T>,
|
val guiType: GUIType<T>,
|
||||||
val title: String?,
|
val title: Component,
|
||||||
internal val pages: Map<Int, GUIPage<T>>,
|
internal val pages: Map<Int, GUIPage<T>>,
|
||||||
val defaultPage: Int,
|
val defaultPage: Int,
|
||||||
val transitionTo: InventoryChangeEffect?,
|
val transitionTo: InventoryChangeEffect?,
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
package net.axay.kspigot.gui
|
package net.axay.kspigot.gui
|
||||||
|
|
||||||
import net.axay.kspigot.gui.elements.*
|
import net.axay.kspigot.gui.elements.*
|
||||||
import org.bukkit.event.inventory.InventoryCloseEvent
|
import net.kyori.adventure.text.Component
|
||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
import kotlin.math.absoluteValue
|
import kotlin.math.absoluteValue
|
||||||
|
|
||||||
@@ -24,7 +24,7 @@ class GUIBuilder<T : ForInventory>(
|
|||||||
* This title will be visible for every page of
|
* This title will be visible for every page of
|
||||||
* this GUI.
|
* this GUI.
|
||||||
*/
|
*/
|
||||||
var title: String = ""
|
var title: Component = Component.empty()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The transition applied, if another GUI redirects to
|
* The transition applied, if another GUI redirects to
|
||||||
|
@@ -2,7 +2,8 @@
|
|||||||
|
|
||||||
package net.axay.kspigot.gui
|
package net.axay.kspigot.gui
|
||||||
|
|
||||||
import net.kyori.adventure.text.Component.text
|
import net.kyori.adventure.text.Component
|
||||||
|
import net.kyori.adventure.text.Component.empty
|
||||||
import org.bukkit.Bukkit
|
import org.bukkit.Bukkit
|
||||||
import org.bukkit.event.inventory.InventoryType
|
import org.bukkit.event.inventory.InventoryType
|
||||||
import org.bukkit.inventory.Inventory
|
import org.bukkit.inventory.Inventory
|
||||||
@@ -25,11 +26,10 @@ class GUIType<in T : ForInventory>(
|
|||||||
GUIType<ForInventoryThreeByThree>(InventoryDimensions(3, 3), bukkitType = InventoryType.DROPPER)
|
GUIType<ForInventoryThreeByThree>(InventoryDimensions(3, 3), bukkitType = InventoryType.DROPPER)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createBukkitInv(holder: InventoryHolder? = null, title: String? = null): Inventory {
|
fun createBukkitInv(holder: InventoryHolder? = null, title: Component = empty()): Inventory {
|
||||||
val realTitle = title ?: ""
|
|
||||||
return when {
|
return when {
|
||||||
bukkitType != null -> Bukkit.createInventory(holder, bukkitType, text(realTitle))
|
bukkitType != null -> Bukkit.createInventory(holder, bukkitType, title)
|
||||||
else -> Bukkit.createInventory(holder, dimensions.slotAmount, text(realTitle))
|
else -> Bukkit.createInventory(holder, dimensions.slotAmount, title)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -82,9 +82,19 @@ inline fun ItemMeta.addLore(builder: ItemMetaLoreBuilder.() -> Unit) {
|
|||||||
*/
|
*/
|
||||||
class ItemMetaLoreBuilder {
|
class ItemMetaLoreBuilder {
|
||||||
val lorelist = ArrayList<Component>()
|
val lorelist = ArrayList<Component>()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a new line to the lore.
|
||||||
|
*
|
||||||
|
* Note: Render [TranslatableComponent]s before adding them to the lore.
|
||||||
|
*/
|
||||||
operator fun Component.unaryPlus() {
|
operator fun Component.unaryPlus() {
|
||||||
lorelist += this
|
lorelist += this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a new line to the lore.
|
||||||
|
*/
|
||||||
operator fun String.unaryPlus() {
|
operator fun String.unaryPlus() {
|
||||||
lorelist += text(this)
|
lorelist += text(this)
|
||||||
}
|
}
|
||||||
@@ -112,6 +122,8 @@ fun ItemMeta.removeFlags(vararg itemFlag: ItemFlag) = removeItemFlags(*itemFlag)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides safe access to the items' displayName.
|
* Provides safe access to the items' displayName.
|
||||||
|
*
|
||||||
|
* Note: Render [TranslatableComponent]s before setting them as the displayName.
|
||||||
*/
|
*/
|
||||||
var ItemMeta.name: Component?
|
var ItemMeta.name: Component?
|
||||||
get() = if (hasDisplayName()) displayName() else null
|
get() = if (hasDisplayName()) displayName() else null
|
||||||
|
Reference in New Issue
Block a user