Skip to content

Commit 7f66313

Browse files
feat: More inventory extensions
1 parent cd48321 commit 7f66313

2 files changed

Lines changed: 83 additions & 5 deletions

File tree

src/main/kotlin/cc/modlabs/kpaper/extensions/InventoryExtensions.kt

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package cc.modlabs.kpaper.extensions
22

33
import cc.modlabs.kpaper.consts.NAMESPACE_GUI_IDENTIFIER
4+
import cc.modlabs.kpaper.consts.NAMESPACE_ITEM_IDENTIFIER
5+
import cc.modlabs.kpaper.inventory.ItemBuilder
46
import cc.modlabs.kpaper.inventory.toItemBuilder
57
import dev.fruxz.stacked.text
68
import 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
}

src/main/kotlin/cc/modlabs/kpaper/main/KPlugin.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,10 @@
22

33
import org.bukkit.plugin.java.JavaPlugin
44

5-
val PluginMainInstance: KPlugin get() = PluginInstance
6-
75
/**
86
* The main plugin instance. Less complicated name for internal usage.
97
*/
10-
@PublishedApi
11-
internal lateinit var PluginInstance: KPlugin
12-
private set
8+
lateinit var PluginInstance: KPlugin
139

1410

1511
abstract class KPlugin : JavaPlugin() {

0 commit comments

Comments
 (0)