From 1b5e534f34937249cab5e31c911eccea48f99880 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E7=99=BD?= <67080574+xbaimiao@users.noreply.github.com> Date: Fri, 16 Sep 2022 16:21:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E8=B4=A7=E5=B8=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 5 +- gradle.properties | 2 +- .../com/github/xbaimiao/shoppro/ShopPro.kt | 14 ++++ .../shoppro/core/database/SqlDatabase.kt | 6 +- .../github/xbaimiao/shoppro/core/item/Item.kt | 12 +-- .../xbaimiao/shoppro/core/item/ShopItem.kt | 6 +- .../shoppro/core/item/VanillaShopItem.kt | 35 -------- .../core/item/{ => impl}/HeadShopItem.kt | 35 +++++++- .../shoppro/core/item/{ => impl}/ItemImpl.kt | 23 +++++- .../item/{ => impl}/ItemsAdderShopItem.kt | 33 +++++++- .../shoppro/core/item/impl/VanillaShopItem.kt | 66 ++++++++++++++++ .../xbaimiao/shoppro/core/shop/ShopImpl.kt | 79 ++++--------------- .../xbaimiao/shoppro/core/vault/Currency.kt | 34 ++++++++ .../shoppro/core/vault/DiyCurrency.kt | 76 ++++++++++++++++++ .../xbaimiao/shoppro/core/vault/PointsImpl.kt | 39 +++++++++ .../xbaimiao/shoppro/core/vault/Vault.kt | 15 ---- .../xbaimiao/shoppro/core/vault/VaultImpl.kt | 2 +- .../com/github/xbaimiao/shoppro/util/Util.kt | 2 +- src/main/resources/currencys/Diy1.yml | 9 +++ src/main/resources/shops/limit-buy.yml | 4 + 20 files changed, 369 insertions(+), 128 deletions(-) delete mode 100644 src/main/kotlin/com/github/xbaimiao/shoppro/core/item/VanillaShopItem.kt rename src/main/kotlin/com/github/xbaimiao/shoppro/core/item/{ => impl}/HeadShopItem.kt (50%) rename src/main/kotlin/com/github/xbaimiao/shoppro/core/item/{ => impl}/ItemImpl.kt (71%) rename src/main/kotlin/com/github/xbaimiao/shoppro/core/item/{ => impl}/ItemsAdderShopItem.kt (52%) create mode 100644 src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/VanillaShopItem.kt create mode 100644 src/main/kotlin/com/github/xbaimiao/shoppro/core/vault/Currency.kt create mode 100644 src/main/kotlin/com/github/xbaimiao/shoppro/core/vault/DiyCurrency.kt create mode 100644 src/main/kotlin/com/github/xbaimiao/shoppro/core/vault/PointsImpl.kt delete mode 100644 src/main/kotlin/com/github/xbaimiao/shoppro/core/vault/Vault.kt create mode 100644 src/main/resources/currencys/Diy1.yml diff --git a/build.gradle.kts b/build.gradle.kts index 2925247..5411ef7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -25,6 +25,8 @@ taboolib { install("expansion-command-helper") classifier = null version = "6.0.9-84" + options("skit-kotlin") + relocate("kotlin","libs.kotlin1510") } repositories { @@ -36,9 +38,10 @@ dependencies { compileOnly("ink.ptms:nms-all:1.0.0") 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(kotlin("stdlib")) + taboo(kotlin("stdlib")) compileOnly(fileTree("libs")) } diff --git a/gradle.properties b/gradle.properties index 361a69a..c89124a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ group=com.github.xbaimiao.shoppro -version=1.0.4 \ No newline at end of file +version=1.0.6-beta diff --git a/src/main/kotlin/com/github/xbaimiao/shoppro/ShopPro.kt b/src/main/kotlin/com/github/xbaimiao/shoppro/ShopPro.kt index b0a0f89..ea7d5c6 100644 --- a/src/main/kotlin/com/github/xbaimiao/shoppro/ShopPro.kt +++ b/src/main/kotlin/com/github/xbaimiao/shoppro/ShopPro.kt @@ -3,7 +3,13 @@ package com.github.xbaimiao.shoppro import com.github.xbaimiao.shoppro.core.database.Database import com.github.xbaimiao.shoppro.core.database.MysqlDatabase import com.github.xbaimiao.shoppro.core.database.SQLiteDatabase +import com.github.xbaimiao.shoppro.core.item.* +import com.github.xbaimiao.shoppro.core.item.impl.HeadShopItem +import com.github.xbaimiao.shoppro.core.item.impl.ItemImpl +import com.github.xbaimiao.shoppro.core.item.impl.ItemsAdderShopItem +import com.github.xbaimiao.shoppro.core.item.impl.VanillaShopItem import com.github.xbaimiao.shoppro.core.shop.ShopManager +import com.github.xbaimiao.shoppro.core.vault.DiyCurrency import taboolib.common.platform.Plugin import taboolib.module.configuration.Config import taboolib.module.configuration.Configuration @@ -16,15 +22,23 @@ object ShopPro : Plugin() { lateinit var database: Database + val itemLoader = ArrayList() + override fun onEnable() { ShopManager.load() + DiyCurrency.load() database = if (config.getBoolean("mysql.enable")) MysqlDatabase(config) else SQLiteDatabase() + itemLoader.add(VanillaShopItem) + itemLoader.add(ItemImpl) + itemLoader.add(ItemsAdderShopItem) + itemLoader.add(HeadShopItem) } fun reload() { config.reload() ShopManager.shops.clear() 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/database/SqlDatabase.kt b/src/main/kotlin/com/github/xbaimiao/shoppro/core/database/SqlDatabase.kt index 7e5afbb..a5302fb 100644 --- a/src/main/kotlin/com/github/xbaimiao/shoppro/core/database/SqlDatabase.kt +++ b/src/main/kotlin/com/github/xbaimiao/shoppro/core/database/SqlDatabase.kt @@ -1,7 +1,7 @@ package com.github.xbaimiao.shoppro.core.database import com.github.xbaimiao.shoppro.core.item.Item -import com.github.xbaimiao.shoppro.core.item.ItemsAdderShopItem +import com.github.xbaimiao.shoppro.core.item.impl.ItemsAdderShopItem import org.bukkit.entity.Player import taboolib.module.database.Host import taboolib.module.database.Table @@ -27,10 +27,10 @@ abstract class SqlDatabase : Database { override fun reset() { serverTable.workspace(dataSource) { - executeUpdate("DELETE FROM '$serverTableName';").run() + executeUpdate("DELETE FROM $serverTableName;").run() }.run() playerTable.workspace(dataSource) { - executeUpdate("DELETE FROM '$playerTableName';").run() + executeUpdate("DELETE FROM $playerTableName;").run() }.run() } diff --git a/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/Item.kt b/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/Item.kt index d802f3f..6b43abf 100644 --- a/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/Item.kt +++ b/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/Item.kt @@ -2,15 +2,20 @@ package com.github.xbaimiao.shoppro.core.item import com.github.xbaimiao.shoppro.core.shop.Shop import com.github.xbaimiao.shoppro.core.shop.ShopManager -import com.github.xbaimiao.shoppro.core.vault.Vault -import com.github.xbaimiao.shoppro.core.vault.VaultImpl import org.bukkit.Bukkit import org.bukkit.Material +import org.bukkit.configuration.ConfigurationSection import org.bukkit.entity.Player import org.bukkit.inventory.ItemStack import org.bukkit.permissions.Permission import taboolib.module.chat.colored +interface ItemLoader { + val prefix: String? + fun formSection(char: Char, section: ConfigurationSection, shop: Shop): Item + +} + interface Item { val key: Char @@ -21,9 +26,6 @@ interface Item { val commands: List val shop: Shop - val vault: Vault - get() = VaultImpl - fun isCommodity(): Boolean fun buildItem(): ItemStack fun update(player: Player): ItemStack diff --git a/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/ShopItem.kt b/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/ShopItem.kt index 5cddb1f..9d34d0c 100644 --- a/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/ShopItem.kt +++ b/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/ShopItem.kt @@ -2,6 +2,8 @@ package com.github.xbaimiao.shoppro.core.item import com.github.xbaimiao.shoppro.ShopPro import com.github.xbaimiao.shoppro.core.shop.Shop +import com.github.xbaimiao.shoppro.core.vault.Currency +import com.github.xbaimiao.shoppro.core.vault.VaultImpl import com.github.xbaimiao.shoppro.util.Util.format import com.github.xbaimiao.shoppro.util.Util.howManyItems import com.github.xbaimiao.shoppro.util.Util.replacePapi @@ -19,6 +21,8 @@ abstract class ShopItem : Item { return true } + var currency: Currency = VaultImpl + abstract fun vanillaItem(): ItemStack abstract fun equal(itemStack: ItemStack): Boolean @@ -43,7 +47,7 @@ abstract class ShopItem : Item { for (line in this) { var newLine = line.replace("\${name}", name) .replace("\${price}", price.toString()) - .replace("\${money}", vault.getMoney(player).toString()) + .replace("\${money}", currency.getMoney(player).toString()) .replace("\${price64}", (price * 64).toString()) .replace("\${limit}", limitPlayer.toString()) .replace("\${allLimit}", limitServer.toString()) diff --git a/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/VanillaShopItem.kt b/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/VanillaShopItem.kt deleted file mode 100644 index d0d998a..0000000 --- a/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/VanillaShopItem.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.github.xbaimiao.shoppro.core.item - -import com.github.xbaimiao.shoppro.core.shop.Shop -import org.bukkit.Material -import org.bukkit.inventory.ItemStack - -class VanillaShopItem( - override val key: Char, - override val material: Material, - override val price: Double, - override val limitServer: Long, - override val limitPlayer: Long, - override val name: String, - override val lore: List, - override val vanilla: Boolean, - override val commands: List, - override val shop: Shop -) : ShopItem() { - - override fun vanillaItem(): ItemStack { - return taboolib.platform.util.buildItem(material) - } - - override fun equal(itemStack: ItemStack): Boolean { - return itemStack.itemMeta?.hasLore() == false && itemStack.type == material - } - - override fun buildItem(): ItemStack { - return taboolib.platform.util.buildItem(material) { - this.name = this@VanillaShopItem.name - this.lore.addAll(this@VanillaShopItem.lore) - } - } - -} \ No newline at end of file diff --git a/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/HeadShopItem.kt b/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/HeadShopItem.kt similarity index 50% rename from src/main/kotlin/com/github/xbaimiao/shoppro/core/item/HeadShopItem.kt rename to src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/HeadShopItem.kt index 7a9bd50..0944f9a 100644 --- a/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/HeadShopItem.kt +++ b/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/HeadShopItem.kt @@ -1,9 +1,16 @@ -package com.github.xbaimiao.shoppro.core.item +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.item.ShopItem import com.github.xbaimiao.shoppro.core.shop.Shop +import com.github.xbaimiao.shoppro.core.vault.CurrencyType import org.bukkit.Material +import org.bukkit.configuration.ConfigurationSection import org.bukkit.inventory.ItemStack import taboolib.library.xseries.XMaterial +import taboolib.library.xseries.parseToMaterial +import taboolib.module.chat.colored import taboolib.platform.util.ItemBuilder import java.util.* @@ -47,4 +54,30 @@ class HeadShopItem( } } + companion object : ItemLoader { + + override var prefix: String? = "HEAD" + + override fun formSection(char: Char, section: ConfigurationSection, shop: Shop): Item { + return HeadShopItem( + char, + section.getString("material")!!, + section.getDouble("price"), + section.getLong("limit"), + section.getLong("limit-player"), + section.getString("name")!!.colored(), + section.getStringList("lore").colored(), + section.getBoolean("vanilla", true), + section.getStringList("commands"), + shop, + section.getString("item")!!.parseToMaterial() + ).also { + section.getString("currency")?.let { currency -> + it.currency = CurrencyType.formString(currency).func.invoke(currency) + } + } + } + + } + } \ No newline at end of file diff --git a/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/ItemImpl.kt b/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/ItemImpl.kt similarity index 71% rename from src/main/kotlin/com/github/xbaimiao/shoppro/core/item/ItemImpl.kt rename to src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/ItemImpl.kt index 1ea09c7..242a78f 100644 --- a/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/ItemImpl.kt +++ b/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/ItemImpl.kt @@ -1,11 +1,15 @@ -package com.github.xbaimiao.shoppro.core.item +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 com.github.xbaimiao.shoppro.util.Util.replacePapi import org.bukkit.Material +import org.bukkit.configuration.ConfigurationSection import org.bukkit.entity.Player import org.bukkit.inventory.ItemStack import taboolib.library.xseries.XMaterial +import taboolib.module.chat.colored import taboolib.platform.util.ItemBuilder import taboolib.platform.util.modifyLore import java.util.* @@ -62,4 +66,21 @@ class ItemImpl( return item } + companion object : ItemLoader { + + override var prefix: String? = null + + override fun formSection(char: Char, section: ConfigurationSection, shop: Shop): Item { + return ItemImpl( + section.getString("material")!!, + section.getStringList("lore").colored(), + section.getString("name")!!.colored(), + char, + section.getBoolean("vanilla", true), + section.getStringList("commands"), + shop + ) + } + } + } \ No newline at end of file diff --git a/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/ItemsAdderShopItem.kt b/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/ItemsAdderShopItem.kt similarity index 52% rename from src/main/kotlin/com/github/xbaimiao/shoppro/core/item/ItemsAdderShopItem.kt rename to src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/ItemsAdderShopItem.kt index fb1f187..73e13a1 100644 --- a/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/ItemsAdderShopItem.kt +++ b/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/ItemsAdderShopItem.kt @@ -1,9 +1,15 @@ -package com.github.xbaimiao.shoppro.core.item +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.item.ShopItem import com.github.xbaimiao.shoppro.core.shop.Shop +import com.github.xbaimiao.shoppro.core.vault.CurrencyType import org.bukkit.Material +import org.bukkit.configuration.ConfigurationSection import org.bukkit.inventory.ItemStack import taboolib.library.xseries.XMaterial +import taboolib.module.chat.colored class ItemsAdderShopItem( override val key: Char, @@ -47,4 +53,29 @@ class ItemsAdderShopItem( } } + companion object : ItemLoader { + + override var prefix: String? = "IA" + + override fun formSection(char: Char, section: ConfigurationSection, shop: Shop): Item { + return ItemsAdderShopItem( + char, + section.getDouble("price"), + section.getString("material")!!, + section.getLong("limit"), + section.getLong("limit-player"), + section.getString("name")!!.colored(), + section.getStringList("lore").colored(), + section.getBoolean("vanilla", true), + section.getStringList("commands"), + shop + ).also { + section.getString("currency")?.let { currency -> + it.currency = CurrencyType.formString(currency).func.invoke(currency) + } + } + } + + } + } \ No newline at end of file diff --git a/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/VanillaShopItem.kt b/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/VanillaShopItem.kt new file mode 100644 index 0000000..9144a57 --- /dev/null +++ b/src/main/kotlin/com/github/xbaimiao/shoppro/core/item/impl/VanillaShopItem.kt @@ -0,0 +1,66 @@ +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.item.ShopItem +import com.github.xbaimiao.shoppro.core.shop.Shop +import com.github.xbaimiao.shoppro.core.vault.CurrencyType +import org.bukkit.Material +import org.bukkit.configuration.ConfigurationSection +import org.bukkit.inventory.ItemStack +import taboolib.library.xseries.parseToMaterial +import taboolib.module.chat.colored + +class VanillaShopItem( + override val key: Char, + override val material: Material, + override val price: Double, + override val limitServer: Long, + override val limitPlayer: Long, + override val name: String, + override val lore: List, + override val vanilla: Boolean, + override val commands: List, + override val shop: Shop +) : ShopItem() { + + override fun vanillaItem(): ItemStack { + return taboolib.platform.util.buildItem(material) + } + + override fun equal(itemStack: ItemStack): Boolean { + return itemStack.itemMeta?.hasLore() == false && itemStack.type == material + } + + override fun buildItem(): ItemStack { + return taboolib.platform.util.buildItem(material) { + this.name = this@VanillaShopItem.name + this.lore.addAll(this@VanillaShopItem.lore) + } + } + + companion object : ItemLoader { + + override var prefix: String? = null + + override fun formSection(char: Char, section: ConfigurationSection, shop: Shop): Item { + return VanillaShopItem( + char, + section.getString("material")!!.parseToMaterial(), + section.getDouble("price"), + section.getLong("limit"), + section.getLong("limit-player"), + section.getString("name")!!.colored(), + section.getStringList("lore").colored(), + section.getBoolean("vanilla", true), + section.getStringList("commands"), + shop + ).also { + section.getString("currency")?.let { currency -> + it.currency = CurrencyType.formString(currency).func.invoke(currency) + } + } + } + } + +} \ No newline at end of file diff --git a/src/main/kotlin/com/github/xbaimiao/shoppro/core/shop/ShopImpl.kt b/src/main/kotlin/com/github/xbaimiao/shoppro/core/shop/ShopImpl.kt index b9ee625..65cb412 100644 --- a/src/main/kotlin/com/github/xbaimiao/shoppro/core/shop/ShopImpl.kt +++ b/src/main/kotlin/com/github/xbaimiao/shoppro/core/shop/ShopImpl.kt @@ -4,14 +4,16 @@ import com.github.xbaimiao.shoppro.ShopPro import com.github.xbaimiao.shoppro.api.ShopProBuyEvent import com.github.xbaimiao.shoppro.api.ShopProSellEvent import com.github.xbaimiao.shoppro.core.database.LimitData -import com.github.xbaimiao.shoppro.core.item.* +import com.github.xbaimiao.shoppro.core.item.Item +import com.github.xbaimiao.shoppro.core.item.impl.ItemImpl +import com.github.xbaimiao.shoppro.core.item.ShopItem +import com.github.xbaimiao.shoppro.core.item.impl.VanillaShopItem import com.github.xbaimiao.shoppro.util.Util.howManyItems import com.github.xbaimiao.shoppro.util.Util.replacePapi import org.bukkit.Bukkit import org.bukkit.configuration.Configuration import org.bukkit.entity.Player import taboolib.common.platform.function.info -import taboolib.library.xseries.parseToMaterial import taboolib.module.chat.colored import taboolib.module.ui.ClickType import taboolib.module.ui.openMenu @@ -29,69 +31,22 @@ class ShopImpl(private val configuration: Configuration) : Shop() { init { val section = configuration.getConfigurationSection("items")!! - for (key in section.getKeys(false)) { + a@ for (key in section.getKeys(false)) { try { + val subSection = section.getConfigurationSection(key)!! if (section.getBoolean("$key.is-commodity", true)) { val materialString = section.getString("$key.material")!! - if (materialString.startsWith("IA")) { - items.add( - ItemsAdderShopItem( - key[0], - section.getDouble("$key.price"), - materialString, - section.getLong("$key.limit"), - section.getLong("$key.limit-player"), - section.getString("$key.name")!!.colored(), - section.getStringList("$key.lore").colored(), - section.getBoolean("$key.vanilla", true), - section.getStringList("$key.commands"), - this - ) - ) - } else if (materialString.startsWith("HEAD:")) { - items.add( - HeadShopItem( - key[0], - section.getString("$key.material")!!, - section.getDouble("$key.price"), - section.getLong("$key.limit"), - section.getLong("$key.limit-player"), - section.getString("$key.name")!!.colored(), - section.getStringList("$key.lore").colored(), - section.getBoolean("$key.vanilla", true), - section.getStringList("$key.commands"), - this, - section.getString("$key.item")!!.parseToMaterial() - ) - ) - } else { - items.add( - VanillaShopItem( - key[0], - section.getString("$key.material")!!.parseToMaterial(), - section.getDouble("$key.price"), - section.getLong("$key.limit"), - section.getLong("$key.limit-player"), - section.getString("$key.name")!!.colored(), - section.getStringList("$key.lore").colored(), - section.getBoolean("$key.vanilla", true), - section.getStringList("$key.commands"), - this - ) - ) + for (loader in ShopPro.itemLoader) { + if (loader.prefix != null) { + if (materialString.startsWith(loader.prefix!!)) { + items.add(loader.formSection(key[0], subSection, this)) + continue@a + } + } } + items.add(VanillaShopItem.formSection(key[0], subSection, this)) } else { - items.add( - ItemImpl( - section.getString("$key.material")!!, - section.getStringList("$key.lore").colored(), - section.getString("$key.name")!!.colored(), - key[0], - section.getBoolean("$key.vanilla", true), - section.getStringList("$key.commands"), - this - ) - ) + items.add(ItemImpl.formSection(key[0], subSection, this)) } } catch (e: Throwable) { info("在加载Shop: ${getName()} 时,物品: $key 加载出现异常,跳过加载,错误信息如下") @@ -180,7 +135,7 @@ class ShopImpl(private val configuration: Configuration) : Shop() { return } } - if (item.vault.takeMoney(player, item.price * amount)) { + if (item.currency.takeMoney(player, item.price * amount)) { if (item.vanilla) { val vanilla = item.vanillaItem() vanilla.amount = amount @@ -208,7 +163,7 @@ class ShopImpl(private val configuration: Configuration) : Shop() { } if (player.inventory.hasItem(amount) { item.equal(it) }) { player.inventory.takeItem(amount) { item.equal(it) } - item.vault.giveMoney(player, item.price * amount) + item.currency.giveMoney(player, item.price * amount) Bukkit.getPluginManager().callEvent(ShopProSellEvent(item, amount, player)) ShopPro.database.addAmount(item, player, LimitData(0L, amount.toLong())) player.sendLang("sell-item", amount, item.name, item.price * amount) diff --git a/src/main/kotlin/com/github/xbaimiao/shoppro/core/vault/Currency.kt b/src/main/kotlin/com/github/xbaimiao/shoppro/core/vault/Currency.kt new file mode 100644 index 0000000..6ae4f8c --- /dev/null +++ b/src/main/kotlin/com/github/xbaimiao/shoppro/core/vault/Currency.kt @@ -0,0 +1,34 @@ +package com.github.xbaimiao.shoppro.core.vault + +import org.bukkit.entity.Player + +interface Currency { + + fun hasMoney(player: Player, double: Double): Boolean + + fun giveMoney(player: Player, double: Double) + + fun takeMoney(player: Player, double: Double): Boolean + + fun getMoney(player: Player): Double + +} + +enum class CurrencyType(val string: String, val func: (name: String) -> Currency) { + + VAULT("vault", { VaultImpl }), + POINTS("points", { + PointsImpl() + }), + DIY("diy", { + DiyCurrency.formString(it) + }); + + companion object { + fun formString(string: String): CurrencyType { + return CurrencyType.values().firstOrNull { it.string == string.lowercase() } ?: DIY + } + + } + +} \ No newline at end of file diff --git a/src/main/kotlin/com/github/xbaimiao/shoppro/core/vault/DiyCurrency.kt b/src/main/kotlin/com/github/xbaimiao/shoppro/core/vault/DiyCurrency.kt new file mode 100644 index 0000000..ffd36a8 --- /dev/null +++ b/src/main/kotlin/com/github/xbaimiao/shoppro/core/vault/DiyCurrency.kt @@ -0,0 +1,76 @@ +package com.github.xbaimiao.shoppro.core.vault + +import com.github.xbaimiao.shoppro.util.Util +import com.github.xbaimiao.shoppro.util.Util.format +import com.github.xbaimiao.shoppro.util.Util.replacePapi +import org.bukkit.Bukkit +import org.bukkit.configuration.Configuration +import org.bukkit.configuration.file.YamlConfiguration +import org.bukkit.entity.Player +import taboolib.common.platform.function.info +import taboolib.platform.BukkitPlugin +import java.io.File + +class DiyCurrency(configuration: Configuration) : Currency { + + companion object { + private val cache = ArrayList() + + fun load() { + cache.clear() + val file = File(BukkitPlugin.getInstance().dataFolder, "currencys") + var listFile = file.listFiles() + if (listFile == null || listFile.isEmpty()) { + BukkitPlugin.getInstance().saveResource("currencys/Diy1.yml", false) + listFile = file.listFiles()!! + } + listFile.forEach { + cache.add(DiyCurrency(YamlConfiguration.loadConfiguration(it))) + } + info("加载了 ${cache.size} 个自定义货币") + } + + fun formString(name: String): DiyCurrency { + return cache.first { it.name == name } + } + + } + + val name = configuration.getString("name")!! + private val takeCommand = configuration.getString("takeCommand")!! + private val giveCommand = configuration.getString("giveCommand")!! + private val amountPapi = configuration.getString("amountPapi")!! + + init { + if (!Util.hasPapi) { + error("自定义货币必须安装PlaceholderAPI插件") + } + } + + override fun hasMoney(player: Player, double: Double): Boolean { + return getMoney(player) >= double + } + + override fun giveMoney(player: Player, double: Double) { + val cmd = replace(giveCommand, player, double.format()) + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), cmd) + } + + override fun takeMoney(player: Player, double: Double): Boolean { + if (!hasMoney(player, double.format())) { + return false + } + val cmd = replace(takeCommand, player, double.format()) + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), cmd) + return false + } + + override fun getMoney(player: Player): Double { + return amountPapi.replacePapi(player).toDouble().format() + } + + private fun replace(string: String, player: Player, num: Double): String { + return string.replace("%player%", player.name).replace("%num%", num.toString()) + } + +} \ No newline at end of file diff --git a/src/main/kotlin/com/github/xbaimiao/shoppro/core/vault/PointsImpl.kt b/src/main/kotlin/com/github/xbaimiao/shoppro/core/vault/PointsImpl.kt new file mode 100644 index 0000000..c6c3788 --- /dev/null +++ b/src/main/kotlin/com/github/xbaimiao/shoppro/core/vault/PointsImpl.kt @@ -0,0 +1,39 @@ +package com.github.xbaimiao.shoppro.core.vault + +import org.black_ixx.playerpoints.PlayerPoints +import org.black_ixx.playerpoints.PlayerPointsAPI +import org.bukkit.Bukkit +import org.bukkit.entity.Player + +class PointsImpl : Currency { + + private val pointsAPI: PlayerPointsAPI + + init { + val plugin = Bukkit.getPluginManager().getPlugin("PlayerPoints")?.let { + it as PlayerPoints + } ?: error("未找到PlayerPoints") + pointsAPI = plugin.api + } + + override fun hasMoney(player: Player, double: Double): Boolean { + return getMoney(player) >= double + } + + override fun giveMoney(player: Player, double: Double) { + pointsAPI.give(player.uniqueId, double.toInt()) + } + + override fun takeMoney(player: Player, double: Double): Boolean { + if (hasMoney(player, double)) { + pointsAPI.take(player.uniqueId, double.toInt()) + return true + } + return false + } + + override fun getMoney(player: Player): Double { + return pointsAPI.look(player.uniqueId).toDouble() + } + +} \ No newline at end of file diff --git a/src/main/kotlin/com/github/xbaimiao/shoppro/core/vault/Vault.kt b/src/main/kotlin/com/github/xbaimiao/shoppro/core/vault/Vault.kt deleted file mode 100644 index 47e753a..0000000 --- a/src/main/kotlin/com/github/xbaimiao/shoppro/core/vault/Vault.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.github.xbaimiao.shoppro.core.vault - -import org.bukkit.entity.Player - -interface Vault { - - fun hasMoney(player: Player, double: Double): Boolean - - fun giveMoney(player: Player, double: Double) - - fun takeMoney(player: Player, double: Double): Boolean - - fun getMoney(player: Player): Double - -} \ No newline at end of file diff --git a/src/main/kotlin/com/github/xbaimiao/shoppro/core/vault/VaultImpl.kt b/src/main/kotlin/com/github/xbaimiao/shoppro/core/vault/VaultImpl.kt index a23d6ad..de23d07 100644 --- a/src/main/kotlin/com/github/xbaimiao/shoppro/core/vault/VaultImpl.kt +++ b/src/main/kotlin/com/github/xbaimiao/shoppro/core/vault/VaultImpl.kt @@ -4,7 +4,7 @@ import com.github.xbaimiao.shoppro.util.Util.format import org.bukkit.entity.Player import taboolib.platform.compat.VaultService -object VaultImpl : Vault { +object VaultImpl : Currency { override fun hasMoney(player: Player, double: Double): Boolean { return getMoney(player) >= double.format() diff --git a/src/main/kotlin/com/github/xbaimiao/shoppro/util/Util.kt b/src/main/kotlin/com/github/xbaimiao/shoppro/util/Util.kt index 69eb4a5..ec80940 100644 --- a/src/main/kotlin/com/github/xbaimiao/shoppro/util/Util.kt +++ b/src/main/kotlin/com/github/xbaimiao/shoppro/util/Util.kt @@ -11,7 +11,7 @@ import java.text.DecimalFormat object Util { - private val hasPapi by lazy { Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null }.also { + val hasPapi by lazy { Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null }.also { info("PlaceholderAPI Hook") } diff --git a/src/main/resources/currencys/Diy1.yml b/src/main/resources/currencys/Diy1.yml new file mode 100644 index 0000000..5dadd2f --- /dev/null +++ b/src/main/resources/currencys/Diy1.yml @@ -0,0 +1,9 @@ +# 货币的识别名 可在物品哪里指定为你自定义的货币 +# 例子 +# A: +# material: STONE +# currency: DIY1 +name: "DIY1" +takeCommand: "扣除货币的指令 %player% 为玩家变量 %num% 为数量" +giveCommand: "给货币的指令 %player% 为玩家变量 %num% 为数量" +amountPapi: "你自定义的这个货币的papi变量" \ No newline at end of file diff --git a/src/main/resources/shops/limit-buy.yml b/src/main/resources/shops/limit-buy.yml index 0a05299..88f320d 100644 --- a/src/main/resources/shops/limit-buy.yml +++ b/src/main/resources/shops/limit-buy.yml @@ -20,6 +20,10 @@ items: # 普通物品收购示例 A: material: STONE + # 指定货币 如果不指定默认Vault + # 已预设点券支持 为: "points" + # 您可在 currencys 里自定义货币 + currency: points name: '石头' # 每日限购买 limit: 5000