From 2f270b49b0bb3bd2b162c4e5f2899f639a4f6a00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E7=99=BD?= <3104026189@qq.com> Date: Sun, 8 Oct 2023 15:48:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81MMOItem?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 12 +++- gradle.properties | 2 +- .../com/github/xbaimiao/shoppro/ShopPro.kt | 9 ++- .../shoppro/core/item/ItemLoaderManager.kt | 2 + .../core/item/impl/ItemsAdderShopItem.kt | 2 +- .../shoppro/core/item/impl/MMOItem.kt | 67 +++++++++++++++++++ .../shoppro/core/item/impl/MythicItem.kt | 57 ++++++++++++++++ src/main/resources/niinnee/buy-gui.yml | 0 src/main/resources/niinnee/sell-gui.yml | 0 src/main/resources/shops/limit-buy.yml | 25 ++++++- src/main/resources/shops/limit-sell.yml | 27 +++++++- 11 files changed, 194 insertions(+), 9 deletions(-) create mode 100644 src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/MMOItem.kt create mode 100644 src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/MythicItem.kt delete mode 100644 src/main/resources/niinnee/buy-gui.yml delete mode 100644 src/main/resources/niinnee/sell-gui.yml diff --git a/build.gradle.kts b/build.gradle.kts index eeef3ac..fcaa4ed 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ plugins { `java-library` `maven-publish` id("io.izzel.taboolib") version "1.54" - id("org.jetbrains.kotlin.jvm") version "1.8.0" + id("org.jetbrains.kotlin.jvm") version "1.7.10" } taboolib { @@ -10,6 +10,8 @@ taboolib { dependencies { name("PlaceholderAPI").optional(true) name("Vault").optional(true) + name("MMOItems").optional(true) + name("Zaphkiel").optional(true) } contributors { name("小白") @@ -28,9 +30,10 @@ taboolib { install("platform-bukkit") install("expansion-command-helper") classifier = null - version = "6.0.11-13" + version = "6.0.12-13" options("skit-kotlin") - relocate("kotlin","libs.kotlin180") + relocate("kotlin", "libs.kotlin171") + relocate("com.xbaimiao.ktor", "libs.kotlin171.ktor") } repositories { @@ -40,12 +43,15 @@ repositories { dependencies { compileOnly("ink.ptms:nms-all:1.0.0") + compileOnly("public:MythicMobs:4.14.1") compileOnly("public:papi:1.0.0") compileOnly("public:vault:1.0.0") compileOnly("public:points:1.0.0") compileOnly("ink.ptms.core:v11902:11902-minimize:mapped") compileOnly("ink.ptms.core:v11902:11902-minimize:universal") compileOnly("public:Zaphkiel:1.0.0") + compileOnly("public:MMOItems:6.9.4") + taboo("com.xbaimiao.ktor:ktor-plugins-bukkit:1.0.8") taboo(kotlin("stdlib")) compileOnly(fileTree("libs")) } diff --git a/gradle.properties b/gradle.properties index c3b2857..90de363 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ group=com.github.xbaimiao.shoppro -version=1.1.9 +version=1.2.1 diff --git a/src/main/kotlin/com/github/xbaimiao/shoppro/ShopPro.kt b/src/main/kotlin/com/github/xbaimiao/shoppro/ShopPro.kt index 00dd883..3078a5e 100644 --- a/src/main/kotlin/com/github/xbaimiao/shoppro/ShopPro.kt +++ b/src/main/kotlin/com/github/xbaimiao/shoppro/ShopPro.kt @@ -6,11 +6,15 @@ import com.github.xbaimiao.shoppro.core.database.SQLiteDatabase import com.github.xbaimiao.shoppro.core.item.ItemLoaderManager import com.github.xbaimiao.shoppro.core.shop.ShopManager import com.github.xbaimiao.shoppro.core.vault.DiyCurrency +import com.xbaimiao.ktor.KtorPluginsBukkit +import com.xbaimiao.ktor.KtorStat import taboolib.common.platform.Plugin +import taboolib.common.platform.function.info import taboolib.module.configuration.Config import taboolib.module.configuration.Configuration +import taboolib.platform.BukkitPlugin -object ShopPro : Plugin() { +object ShopPro : Plugin(), KtorStat { @Config(value = "config.yml") lateinit var config: Configuration @@ -21,6 +25,9 @@ object ShopPro : Plugin() { val itemLoaderManager = ItemLoaderManager() override fun onActive() { + KtorPluginsBukkit.init(BukkitPlugin.getInstance(), this) + info("$userId 感谢您的使用") + stat() ShopManager.load() DiyCurrency.load() database = if (config.getBoolean("mysql.enable")) MysqlDatabase(config) else SQLiteDatabase() diff --git a/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/ItemLoaderManager.kt b/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/ItemLoaderManager.kt index 9dc29bd..ace00ca 100644 --- a/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/ItemLoaderManager.kt +++ b/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/ItemLoaderManager.kt @@ -12,6 +12,8 @@ class ItemLoaderManager { itemLoaders.add(ItemsAdderShopItem) itemLoaders.add(HeadShopItem) itemLoaders.add(ZapItem) + itemLoaders.add(MythicItem) + itemLoaders.add(MMOItem) } fun getVanillaShop(): ItemLoader = VanillaShopItem.Companion diff --git a/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/ItemsAdderShopItem.kt b/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/ItemsAdderShopItem.kt index 11f1468..6450194 100644 --- a/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/ItemsAdderShopItem.kt +++ b/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/ItemsAdderShopItem.kt @@ -15,7 +15,7 @@ class ItemsAdderShopItem( itemSetting: ItemSetting ) : ShopItem(itemSetting) { - override val material: Material + final override val material: Material val custom: Int diff --git a/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/MMOItem.kt b/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/MMOItem.kt new file mode 100644 index 0000000..e7de7e9 --- /dev/null +++ b/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/MMOItem.kt @@ -0,0 +1,67 @@ +package com.github.xbaimiao.shoppro.core.item.impl + +import com.github.xbaimiao.shoppro.core.item.Item +import com.github.xbaimiao.shoppro.core.item.ItemLoader +import com.github.xbaimiao.shoppro.core.shop.Shop +import net.Indyuce.mmoitems.MMOItems +import net.Indyuce.mmoitems.api.Type +import org.bukkit.Bukkit +import org.bukkit.Material +import org.bukkit.configuration.ConfigurationSection +import org.bukkit.entity.Player +import org.bukkit.inventory.ItemStack + +/** + * MMOItem + * + * @author xbaimiao + * @since 2023/10/5 12:42 + */ +class MMOItem( + private val itemStack: ItemStack, + private val type: Type, + private val mmoitemsID: String, + itemSetting: ItemSetting +) : VanillaShopItem(itemSetting) { + + override val material: Material + get() = itemStack.type + + override fun vanillaItem(player: Player): ItemStack { + return itemStack + } + + override fun equal(itemStack: ItemStack): Boolean { + val t = MMOItems.getType(itemStack) ?: return false + if (t != type) return false + val i = MMOItems.getID(itemStack) ?: return false + return i == mmoitemsID + } + + companion object : ItemLoader() { + + override val prefix: String = "MMO_ITEM" + + override fun formSection(char: Char, section: ConfigurationSection, shop: Shop): Item { + if (Bukkit.getPluginManager().getPlugin("MMOItems") == null) { + error("MMOItems Plugin not found") + } + val mmoitemsData = section.getString("material")!!.substring(prefix.length + 1).split(":") + val type = Type.get(mmoitemsData[0]) ?: error("MMOItems ${mmoitemsData[0]} not is type") + val id = mmoitemsData[1] + val item = MMOItems.plugin.getItem(type, id) ?: error("MMOItems $mmoitemsData 不是一个有效的物品") + return MMOItem( + item, + type, + id, + section.toItemSetting(char, shop) + ) + } + + override fun parseToMaterial(section: ConfigurationSection): Material { + return Material.AIR + } + + } + +} \ No newline at end of file diff --git a/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/MythicItem.kt b/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/MythicItem.kt new file mode 100644 index 0000000..1fefaea --- /dev/null +++ b/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/MythicItem.kt @@ -0,0 +1,57 @@ +package com.github.xbaimiao.shoppro.core.item.impl + +import com.github.xbaimiao.shoppro.core.item.Item +import com.github.xbaimiao.shoppro.core.item.ItemLoader +import com.github.xbaimiao.shoppro.core.shop.Shop +import io.lumine.xikage.mythicmobs.MythicMobs +import io.lumine.xikage.mythicmobs.adapters.bukkit.BukkitAdapter +import org.bukkit.Bukkit +import org.bukkit.Material +import org.bukkit.configuration.ConfigurationSection +import org.bukkit.entity.Player +import org.bukkit.inventory.ItemStack + +/** + * @author 小白 + * @date 2023/5/15 17:59 + **/ +class MythicItem( + private val itemStack: ItemStack, + itemSetting: ItemSetting +) : VanillaShopItem(itemSetting) { + + override val material: Material + get() = itemStack.type + + override fun vanillaItem(player: Player): ItemStack { + return itemStack + } + + override fun equal(itemStack: ItemStack): Boolean { + return itemStack.isSimilar(this.itemStack) + } + + companion object : ItemLoader() { + + override val prefix: String = "MM" + + override fun formSection(char: Char, section: ConfigurationSection, shop: Shop): Item { + if (Bukkit.getPluginManager().plugins.find { it.name.lowercase() == "MythicMobs".lowercase() } == null) { + error("MythicMobs Plugin not found") + } + val mmID = section.getString("material")!!.substring(prefix.length + 1) + + val item = MythicMobs.inst().itemManager.getItem(mmID) ?: error("MythicMobs $mmID not found") + if (!item.isPresent) { + error("MythicMobs $mmID not found") + } + return MythicItem(BukkitAdapter.adapt(item.get().generateItemStack(1)), section.toItemSetting(char, shop)) + } + + override fun parseToMaterial(section: ConfigurationSection): Material { + return Material.AIR + } + + } + +} \ No newline at end of file diff --git a/src/main/resources/niinnee/buy-gui.yml b/src/main/resources/niinnee/buy-gui.yml deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/resources/niinnee/sell-gui.yml b/src/main/resources/niinnee/sell-gui.yml deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/resources/shops/limit-buy.yml b/src/main/resources/shops/limit-buy.yml index a94a8e0..d718ff8 100644 --- a/src/main/resources/shops/limit-buy.yml +++ b/src/main/resources/shops/limit-buy.yml @@ -7,7 +7,7 @@ title: "系统出售商店" # 物品摆放顺序 slots: - 'NNNNNNNNN' - - 'NABC N' + - 'NABCD N' - 'NNNNNNNNN' items: N: @@ -85,6 +85,29 @@ items: limit-player: 500 # 物品金额 price: 2 + lore: + - '&e| &7这里可以购买&6 ${name}' + - '&e| &7购买单价 &6${price}' + - '&e| &7你的余额 &6${money}' + - '' + - '&e|&6 左击 &7购买 &6单个' + - '&e|&6 右击 &7购买 &6一组 &7需要 &6${price64}' + - '' + - '&e| &7限买公示:' + - '&e| &7每人限制购买: ${limit}' + - '&e| &7全服限制购买: ${allLimit}' + - '&e| &7您已购买: ${limit-player}' + - '&e| &7全服剩余: ${limit-server}' + # MM物品示范 + D: + material: 'MM:KingsCrown' + name: 'MM物品' + # 每日限购买 + limit: 5000 + # 每个玩家限购买 + limit-player: 500 + # 物品金额 + price: 2 lore: - '&e| &7这里可以购买&6 ${name}' - '&e| &7购买单价 &6${price}' diff --git a/src/main/resources/shops/limit-sell.yml b/src/main/resources/shops/limit-sell.yml index 76085d4..e72386d 100644 --- a/src/main/resources/shops/limit-sell.yml +++ b/src/main/resources/shops/limit-sell.yml @@ -7,7 +7,7 @@ title: "系统收购商店" # 物品摆放顺序 slots: - 'NNNNNNNNN' - - 'NABC N' + - 'NABCD N' - 'NNNNNNNNN' items: N: @@ -98,4 +98,27 @@ items: - '&e· &7每人限制出售: ${limit}' - '&e· &7全服限制出售: ${allLimit}' - '&e· &7您当前已出售: ${limit-player} &8| &7全服剩余: ${limit-server}' - - '&x&F&5&A&5&0&E&M &x&E&E&A&2&1&C&M &x&E&7&9&F&2&A&M &x&E&0&9&C&3&8&M &x&D&9&9&9&4&6&M &x&D&2&9&6&5&4&M &x&C&B&9&3&6&2&M &x&C&4&9&C&7&0&M &x&B&D&9&F&7&E&M &x&B&D&9&F&7&E&M &x&B&6&A&2&8&C&M &x&A&F&A&5&9&A&M &M &M &x&A&F&A&5&9&A&M &M &M &x&B&6&A&2&8&C&M &x&B&D&9&F&7&E&M &x&C&4&9&C&7&0&M &x&C&B&9&9&6&2&M &x&D&2&9&6&5&4&M &x&D&9&9&3&4&6&M &x&E&0&9&0&3&8&M &x&E&7&8&D&2&A&M &x&E&E&8&A&1&C&M &x&F&5&8&7&0&E&M &x&F&C&8&4&0&0&M ' \ No newline at end of file + - '&x&F&5&A&5&0&E&M &x&E&E&A&2&1&C&M &x&E&7&9&F&2&A&M &x&E&0&9&C&3&8&M &x&D&9&9&9&4&6&M &x&D&2&9&6&5&4&M &x&C&B&9&3&6&2&M &x&C&4&9&C&7&0&M &x&B&D&9&F&7&E&M &x&B&D&9&F&7&E&M &x&B&6&A&2&8&C&M &x&A&F&A&5&9&A&M &M &M &x&A&F&A&5&9&A&M &M &M &x&B&6&A&2&8&C&M &x&B&D&9&F&7&E&M &x&C&4&9&C&7&0&M &x&C&B&9&9&6&2&M &x&D&2&9&6&5&4&M &x&D&9&9&3&4&6&M &x&E&0&9&0&3&8&M &x&E&7&8&D&2&A&M &x&E&E&8&A&1&C&M &x&F&5&8&7&0&E&M &x&F&C&8&4&0&0&M ' + D: + material: 'MMO_ITEM:SWORD:新手剑' + name: 'MMO_ITEM物品名' + # 每日限出售 + limit: 5000 + # 每个玩家限出售 + limit-player: 500 + # 物品金额 + price: 1 + lore: + - '&e| &7这里可以出售你背包里面的&6 ${name}' + - '&e| &7收购单价 &6${price}' + - '&e| &7你的余额 &6${money}' + - '' + - '&e|&6 左击 &7出售 &6单个' + - '&e|&6 右击 &7出售 &6一组 &7获得 &6${price64}' + - '&e|&6 Shift + 右击 &7出售 &6背包所有 &7获得${priceAll}' + - '' + - '&e| &7限售公示:' + - '&e| &7每人限制出售: ${limit}' + - '&e| &7全服限制出售: ${allLimit}' + - '&e| &7您已出售: ${limit-player}' + - '&e| &7全服剩余: ${limit-server}' \ No newline at end of file