mirror of
https://github.com/plexusorg/Module-Shop.git
synced 2025-07-05 09:46:42 +00:00
such a kotlin moment
setup shop command setup shop listener setup item registration
This commit is contained in:
@ -1,11 +1,48 @@
|
||||
package dev.plex
|
||||
|
||||
import dev.plex.commands.ShopCommand
|
||||
import dev.plex.config.ModuleConfig
|
||||
import dev.plex.listener.ShopListener
|
||||
import dev.plex.module.PlexModule
|
||||
import dev.plex.shop.ShopMenu
|
||||
import dev.plex.shop.item.impl.FireballItem
|
||||
import dev.plex.util.PlexLog
|
||||
import dev.plex.util.item.ItemBuilder
|
||||
import dev.plex.util.minimessage.SafeMiniMessage
|
||||
import org.bukkit.Material
|
||||
|
||||
public class ShopModule : PlexModule() {
|
||||
class ShopModule : PlexModule() {
|
||||
companion object {
|
||||
private var module: ShopModule? = null;
|
||||
fun get(): ShopModule
|
||||
{
|
||||
return module!!
|
||||
}
|
||||
}
|
||||
|
||||
private var config: ModuleConfig? = null
|
||||
|
||||
override fun load()
|
||||
{
|
||||
module = this;
|
||||
config = ModuleConfig(this, "data/config.yml", "config.yml")
|
||||
getConfig().load()
|
||||
}
|
||||
|
||||
override fun enable() {
|
||||
ShopMenu.registerItem(18, FireballItem(
|
||||
ItemBuilder(Material.FIRE_CHARGE).displayName(SafeMiniMessage.mmDeserialize("<!italic><red>Fireball")).build(),
|
||||
getConfig().getDouble("shop.prices.fireball", 0.0)
|
||||
))
|
||||
|
||||
registerListener(ShopListener())
|
||||
registerCommand(ShopCommand())
|
||||
PlexLog.debug("Shop loaded!")
|
||||
}
|
||||
|
||||
fun getConfig(): ModuleConfig
|
||||
{
|
||||
return config!!
|
||||
}
|
||||
|
||||
}
|
23
src/main/java/dev/plex/commands/ShopCommand.kt
Normal file
23
src/main/java/dev/plex/commands/ShopCommand.kt
Normal file
@ -0,0 +1,23 @@
|
||||
package dev.plex.commands
|
||||
|
||||
import dev.plex.cache.DataUtils
|
||||
import dev.plex.command.PlexCommand
|
||||
import dev.plex.command.annotation.CommandParameters
|
||||
import dev.plex.command.annotation.CommandPermissions
|
||||
import dev.plex.command.source.RequiredCommandSource
|
||||
import dev.plex.rank.enums.Rank
|
||||
import dev.plex.shop.ShopMenu
|
||||
import net.kyori.adventure.text.Component
|
||||
import org.bukkit.command.CommandSender
|
||||
import org.bukkit.entity.Player
|
||||
|
||||
@CommandParameters(name = "shop", description = "Opens the shop menu")
|
||||
@CommandPermissions(level = Rank.OP, source = RequiredCommandSource.IN_GAME, permission = "plex.shop.open")
|
||||
class ShopCommand: PlexCommand()
|
||||
{
|
||||
override fun execute(sender: CommandSender, player: Player?, args: Array<out String>?): Component?
|
||||
{
|
||||
ShopMenu.open(DataUtils.getPlayer(player!!.uniqueId))
|
||||
return null
|
||||
}
|
||||
}
|
23
src/main/java/dev/plex/listener/ShopListener.kt
Normal file
23
src/main/java/dev/plex/listener/ShopListener.kt
Normal file
@ -0,0 +1,23 @@
|
||||
package dev.plex.listener
|
||||
|
||||
import dev.plex.util.minimessage.SafeMiniMessage
|
||||
import net.kyori.adventure.text.Component
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.inventory.InventoryClickEvent
|
||||
|
||||
class ShopListener : PlexListener()
|
||||
{
|
||||
private val shopMenuTitle: Component = SafeMiniMessage.mmDeserialize("<gold>Shop")
|
||||
|
||||
@EventHandler
|
||||
fun onClick(event: InventoryClickEvent)
|
||||
{
|
||||
if (!event.view.title().equals(shopMenuTitle))
|
||||
{
|
||||
return
|
||||
}
|
||||
event.isCancelled = true
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,9 +1,12 @@
|
||||
package dev.plex.shop
|
||||
|
||||
import com.google.common.collect.Maps
|
||||
import dev.plex.player.PlexPlayer
|
||||
import dev.plex.shop.item.AbstractItem
|
||||
import dev.plex.util.item.ItemBuilder
|
||||
import dev.plex.util.minimessage.SafeMiniMessage
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.inventory.Inventory
|
||||
|
||||
@ -13,22 +16,35 @@ import org.bukkit.inventory.Inventory
|
||||
* @since 11:21 PM [10-06-2022]
|
||||
*
|
||||
*/
|
||||
class ShopMenu {
|
||||
companion object {
|
||||
val ITEMS = mapOf<Int, AbstractItem>()
|
||||
}
|
||||
|
||||
fun open(plexPlayer: PlexPlayer)
|
||||
class ShopMenu
|
||||
{
|
||||
companion object
|
||||
{
|
||||
val player: Player? = plexPlayer.player
|
||||
val inventory: Inventory = constructInventory()
|
||||
player?.openInventory(inventory)
|
||||
}
|
||||
val ITEMS: HashMap<Int, AbstractItem> = Maps.newHashMap()
|
||||
fun registerItem(index: Int, item: AbstractItem)
|
||||
{
|
||||
ITEMS.put(index, item);
|
||||
}
|
||||
|
||||
private fun constructInventory(): Inventory
|
||||
{
|
||||
val inventory: Inventory = Bukkit.createInventory(null, 54, SafeMiniMessage.mmDeserialize("<gold>Shop"))
|
||||
ITEMS.forEach { (t, u) -> inventory.setItem(t, u.item) }
|
||||
return inventory
|
||||
fun open(plexPlayer: PlexPlayer)
|
||||
{
|
||||
val player: Player? = plexPlayer.player
|
||||
val inventory: Inventory = constructInventory()
|
||||
player?.openInventory(inventory)
|
||||
}
|
||||
|
||||
private fun constructInventory(): Inventory
|
||||
{
|
||||
val inventory: Inventory = Bukkit.createInventory(null, 54, SafeMiniMessage.mmDeserialize("<gold>Shop"))
|
||||
ITEMS.forEach { (t, u) -> inventory.setItem(t, u.item) }
|
||||
for (i in 0 until inventory.size)
|
||||
{
|
||||
if (inventory.getItem(i) == null || inventory.getItem(i)?.type == Material.AIR)
|
||||
{
|
||||
inventory.setItem(i, ItemBuilder(Material.GRAY_STAINED_GLASS_PANE).displayName(SafeMiniMessage.mmDeserialize("<!italic> ")).build())
|
||||
}
|
||||
}
|
||||
return inventory
|
||||
}
|
||||
}
|
||||
}
|
8
src/main/java/dev/plex/shop/item/impl/FireballItem.kt
Normal file
8
src/main/java/dev/plex/shop/item/impl/FireballItem.kt
Normal file
@ -0,0 +1,8 @@
|
||||
package dev.plex.shop.item.impl
|
||||
|
||||
import dev.plex.shop.item.AbstractItem
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
class FireballItem(item: ItemStack, cost: Double) : AbstractItem(item, cost)
|
||||
{
|
||||
}
|
0
src/main/resources/data/config.yml
Normal file
0
src/main/resources/data/config.yml
Normal file
@ -1,4 +1,4 @@
|
||||
name: Module-Example
|
||||
name: Plex-Shop
|
||||
main: dev.plex.ShopModule
|
||||
description: An example module for Plex
|
||||
version: 1.0
|
Reference in New Issue
Block a user