added a fuck ton of shit, idk if it works but im not gonna test rn

This commit is contained in:
5vl 2022-06-21 00:18:25 +02:00
parent 31d0e5d305
commit fb38607d8a
No known key found for this signature in database
GPG Key ID: DA8938F22548E4D5
9 changed files with 121 additions and 10 deletions

View File

@ -0,0 +1,8 @@
package me.fivevl.itemadder
import org.bukkit.event.player.PlayerInteractEvent
enum class AbilityType(val event: PlayerInteractEvent) {
LEFT_CLICK(Utils.interactEvent),
RIGHT_CLICK(Utils.interactEvent)
}

View File

@ -0,0 +1,43 @@
package me.fivevl.itemadder
import org.bukkit.entity.Player
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.block.Action
import org.bukkit.event.inventory.InventoryClickEvent
import org.bukkit.event.inventory.InventoryCloseEvent
import org.bukkit.event.player.PlayerInteractEvent
class InteractListener : Listener {
@EventHandler
fun onInteract(e: PlayerInteractEvent) {
if (e.item == null) return
for (check in Utils.items.values) {
if (check.finalItem == e.item) {
for (ability in check.abilities.keys) {
if (check.abilities[ability]!! == AbilityType.RIGHT_CLICK && (e.action == Action.RIGHT_CLICK_AIR || e.action == Action.RIGHT_CLICK_BLOCK)) {
ability.run()
}
if (check.abilities[ability]!! == AbilityType.LEFT_CLICK && (e.action == Action.LEFT_CLICK_AIR || e.action == Action.LEFT_CLICK_BLOCK)) {
ability.run()
}
}
}
}
}
@EventHandler
fun onInvClick(e: InventoryClickEvent) {
if (e.whoClicked !is Player) return
if (!Utils.inItemsGui.contains(e.whoClicked as Player)) return
e.isCancelled = true
if (e.currentItem == null) return
e.whoClicked.inventory.addItem(e.currentItem!!)
e.whoClicked.sendMessage(Utils.color("<green>Added <blue>${e.currentItem!!.itemMeta.displayName()} <green>to your inventory"))
}
@EventHandler
fun onInvClose(e: InventoryCloseEvent) {
Utils.inItemsGui.remove(e.player)
}
}

View File

@ -4,18 +4,21 @@ import net.kyori.adventure.text.Component
import org.bukkit.Material import org.bukkit.Material
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
class Item(uniqueName: String, name: Component, rarity: Rarity, material: Material, type: Type, vararg lore: String) { class Item(uniqueName: String, name: Component, rarity: Rarity, material: Material, type: Type, lore: String) {
object Items { val finalItem: ItemStack
val items = HashMap<String, Item>() val abilities = HashMap<Runnable, AbilityType>()
}
lateinit var finalItem: ItemStack
init { init {
val item = ItemStack(material) val item = ItemStack(material)
val meta = item.itemMeta val meta = item.itemMeta
meta.displayName(name) meta.displayName(name)
meta.lore(Utils.loreBuilder()) meta.lore(Utils.loreBuilder(lore, "", rarity.formatted + " " + type.type))
Items.items[uniqueName] = this item.itemMeta = meta
finalItem = item
Utils.items[uniqueName] = this
}
fun addAbility(type: AbilityType, runnable: Runnable) {
abilities[runnable] = type
} }
} }

View File

@ -0,0 +1,22 @@
package me.fivevl.itemadder
import org.bukkit.command.Command
import org.bukkit.command.CommandExecutor
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
class ItemsCommand : CommandExecutor {
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>?): Boolean {
if (sender !is Player) {
sender.sendMessage(Utils.color("<red>Only players can use this command"))
return true
}
val p = sender.player!!
if (p.hasPermission("itemadder.items")) {
p.openInventory(ItemsGui.getGui())
} else {
p.sendMessage(Utils.color("<red>You don't have permission to use this command"))
}
return true
}
}

View File

@ -0,0 +1,14 @@
package me.fivevl.itemadder
import org.bukkit.Bukkit
import org.bukkit.inventory.Inventory
object ItemsGui {
fun getGui(): Inventory {
val gui = Bukkit.createInventory(null, 54, Utils.color("Items"))
for (item in Utils.items.values) {
gui.addItem(item.finalItem)
}
return gui
}
}

View File

@ -1,10 +1,17 @@
package me.fivevl.itemadder package me.fivevl.itemadder
import org.bukkit.Bukkit
import org.bukkit.Material import org.bukkit.Material
import org.bukkit.plugin.java.JavaPlugin import org.bukkit.plugin.java.JavaPlugin
class Main : JavaPlugin() { class Main : JavaPlugin() {
override fun onEnable() { override fun onEnable() {
Bukkit.getPluginManager().registerEvents(InteractListener(), this)
getCommand("items")?.setExecutor(ItemsCommand())
Item("TEST_ITEM", Utils.color("<blue>Test Item"), Rarity.EPIC, Material.STONE_SWORD, Type.WEAPON, "<red>The most basic testing</red>\n<blue>sword, by 5vl</blue>") Item("TEST_ITEM", Utils.color("<blue>Test Item"), Rarity.EPIC, Material.STONE_SWORD, Type.WEAPON, "<red>The most basic testing</red>\n<blue>sword, by 5vl</blue>")
Utils.items["TEST_ITEM"]!!.addAbility(AbilityType.RIGHT_CLICK) {
val e = AbilityType.RIGHT_CLICK.event
e.player.sendMessage(Utils.color("<red>You right clicked the TEST_ITEM!"))
}
} }
} }

View File

@ -1,6 +1,6 @@
package me.fivevl.itemadder package me.fivevl.itemadder
enum class Type(type: String) { enum class Type(val type: String) {
WEAPON("WEAPON"), WEAPON("WEAPON"),
PICKAXE("PICKAXE"), PICKAXE("PICKAXE"),
ITEM("ITEM"), ITEM("ITEM"),

View File

@ -2,15 +2,26 @@ package me.fivevl.itemadder
import net.kyori.adventure.text.Component import net.kyori.adventure.text.Component
import net.kyori.adventure.text.minimessage.MiniMessage import net.kyori.adventure.text.minimessage.MiniMessage
import org.bukkit.entity.Player
import org.bukkit.event.player.PlayerInteractEvent
object Utils { object Utils {
lateinit var interactEvent: PlayerInteractEvent
val items = HashMap<String, Item>()
val inItemsGui = ArrayList<Player>()
fun color(s: String): Component { fun color(s: String): Component {
return MiniMessage.miniMessage().deserialize(s) return MiniMessage.miniMessage().deserialize(s)
} }
fun loreBuilder(vararg arr: String): ArrayList<Component> { fun loreBuilder(vararg arr: String): ArrayList<Component> {
val lore = ArrayList<Component>() val lore = ArrayList<Component>()
for (s in arr) { for (s in arr) {
lore.add(color(s)) if (s.contains("\n")) {
for (ss in s.split("\n")) {
lore.add(color(ss))
}
} else {
lore.add(color(s))
}
} }
return lore return lore
} }

View File

@ -4,3 +4,6 @@ main: me.fivevl.itemadder.Main
api-version: 1.18 api-version: 1.18
authors: [ 5vl ] authors: [ 5vl ]
description: Create custom items with custom abilities! description: Create custom items with custom abilities!
commands:
items:
description: Main item GUI.