11package cc.modlabs.kpaper.extensions
22
33import cc.modlabs.kpaper.consts.NAMESPACE_GUI_IDENTIFIER
4+ import cc.modlabs.kpaper.consts.NAMESPACE_ITEM_IDENTIFIER
5+ import cc.modlabs.kpaper.inventory.ItemBuilder
46import cc.modlabs.kpaper.inventory.toItemBuilder
57import dev.fruxz.stacked.text
68import org.bukkit.Material
@@ -103,4 +105,84 @@ fun Inventory.isIdentifiedAs(identifier: String): Boolean {
103105 NAMESPACE_GUI_IDENTIFIER ,
104106 PersistentDataType .STRING
105107 ) == identifier
108+ }
109+
110+ val Inventory .identifier: String?
111+ get() = this .getItem(0 )?.itemMeta?.persistentDataContainer?.get(
112+ NAMESPACE_GUI_IDENTIFIER ,
113+ PersistentDataType .STRING
114+ )
115+
116+ fun Inventory.identifier (namespacedKey : NamespacedKey ): String? {
117+ return this .getItem(0 )?.itemMeta?.persistentDataContainer?.get(
118+ namespacedKey,
119+ PersistentDataType .STRING
120+ )
121+ }
122+
123+ fun ItemStack.isIdentifiedAs (identifier : String ): Boolean {
124+ return this .itemMeta?.persistentDataContainer?.get(
125+ NAMESPACE_ITEM_IDENTIFIER ,
126+ PersistentDataType .STRING
127+ ) == identifier
128+ }
129+
130+ val ItemStack .identifier: String?
131+ get() = this .itemMeta?.persistentDataContainer?.get(
132+ NAMESPACE_ITEM_IDENTIFIER ,
133+ PersistentDataType .STRING
134+ )
135+
136+ fun ItemStack.identifier (namespacedKey : NamespacedKey ): String? {
137+ return this .itemMeta?.persistentDataContainer?.get(
138+ namespacedKey,
139+ PersistentDataType .STRING
140+ )
141+ }
142+
143+ fun ItemStack.hasKey (namespacedKey : NamespacedKey ): Boolean {
144+ return this .itemMeta?.persistentDataContainer?.has(
145+ namespacedKey,
146+ PersistentDataType .STRING
147+ ) == true
148+ }
149+
150+ fun ItemStack.getKey (namespacedKey : NamespacedKey ): String? {
151+ return this .itemMeta?.persistentDataContainer?.get(
152+ namespacedKey,
153+ PersistentDataType .STRING
154+ )
155+ }
156+
157+ val PLACEHOLDER_GRAY = ItemBuilder (Material .GRAY_STAINED_GLASS_PANE ) {
158+ display(" " )
159+ }.build()
160+
161+ fun Inventory.setItem (range : IntProgression , item : ItemStack ) {
162+ range.forEach { this .setItem(it, item) }
163+ }
164+
165+ fun fillEmptyAndOpenInventory (player : Player , inv : Inventory , identifier : String? = null, vararg identifiers : Map <NamespacedKey , String >? = arrayOf()) {
166+ fillEmpty(inv )
167+ if (identifier != null ) inv .identify(identifier, * identifiers)
168+ player.openInventory(inv )
169+ }
170+
171+ fun Inventory.fillEmpty (filler : ItemStack , identifier : String? = null, vararg identifiers : Map <NamespacedKey , String >? = arrayOf()) {
172+ for (i in 0 until this .size) {
173+ if (this .getItem(i) == null || this .getItem(i)!! .type == Material .AIR ) {
174+ this .setItem(i, filler)
175+ }
176+ }
177+ if (identifier != null ) this .identify(identifier, * identifiers)
178+ }
179+
180+ fun fillEmpty (inventory : Inventory , identifier : String? = null, vararg identifiers : Map <NamespacedKey , String >? = arrayOf()) {
181+ val item = PLACEHOLDER_GRAY
182+ for (i in 0 until inventory.size) {
183+ if (inventory.getItem(i) == null || inventory.getItem(i)!! .type == Material .AIR ) {
184+ inventory.setItem(i, item)
185+ }
186+ }
187+ if (identifier != null ) inventory.identify(identifier, * identifiers)
106188}
0 commit comments