更新权限限制数量

This commit is contained in:
小白
2023-08-16 15:56:44 +08:00
parent 974e74de78
commit a9bdee0ea2
5 changed files with 29 additions and 10 deletions
+1 -1
View File
@@ -1,2 +1,2 @@
group=com.github.xbaimiao.shoppro group=com.github.xbaimiao.shoppro
version=1.1.7 version=1.1.8
@@ -23,6 +23,14 @@ abstract class ItemLoader {
this.getString("currency")?.let { this.getString("currency")?.let {
currency = CurrencyType.formString(it).func.invoke(it) currency = CurrencyType.formString(it).func.invoke(it)
} }
val limitMap = HashMap<String, Long>()
this.getConfigurationSection("limitMap")?.let { limitSection ->
limitSection.getKeys(false).forEach { key ->
limitMap[key] = limitSection.getLong(key)
}
}
return ShopItem.ItemSetting( return ShopItem.ItemSetting(
key = char, key = char,
material = parseToMaterial(this), material = parseToMaterial(this),
@@ -39,6 +47,7 @@ abstract class ItemLoader {
conditionIcon = this.getString("condition-icon")?.parseToMaterial(), conditionIcon = this.getString("condition-icon")?.parseToMaterial(),
conditionLore = this.getStringList("condition-lore"), conditionLore = this.getStringList("condition-lore"),
conditionName = this.getString("condition-name"), conditionName = this.getString("condition-name"),
limitPermissionMap = limitMap
) )
} }
@@ -25,7 +25,8 @@ abstract class ShopItem(
override val conditionName: String?, override val conditionName: String?,
val price: Double, val price: Double,
val limitServer: Long, val limitServer: Long,
val limitPlayer: Long, private val limitPlayer: Long,
private val limitPermissionMap: Map<String, Long>,
val currency: Currency val currency: Currency
) : Item, KetherCondition { ) : Item, KetherCondition {
@@ -44,6 +45,7 @@ abstract class ShopItem(
itemSetting.price, itemSetting.price,
itemSetting.limitServer, itemSetting.limitServer,
itemSetting.limitPlayer, itemSetting.limitPlayer,
itemSetting.limitPermissionMap,
itemSetting.currency itemSetting.currency
) )
@@ -62,6 +64,7 @@ abstract class ShopItem(
val price: Double, val price: Double,
val limitServer: Long, val limitServer: Long,
val limitPlayer: Long, val limitPlayer: Long,
val limitPermissionMap: Map<String, Long>,
var currency: Currency var currency: Currency
) )
@@ -80,6 +83,10 @@ abstract class ShopItem(
return limitPlayer != 0L && limitServer != 0L return limitPlayer != 0L && limitServer != 0L
} }
fun getLimitPlayer(player: Player): Long {
return limitPermissionMap.filter { player.hasPermission(it.key) }.maxOfOrNull { it.value } ?: limitPlayer
}
override fun update(player: Player): ItemStack { override fun update(player: Player): ItemStack {
val playerLimit = if (shop.getType() == Shop.ShopType.BUY) { val playerLimit = if (shop.getType() == Shop.ShopType.BUY) {
ShopPro.database.getPlayerAlreadyData(player, this).buy ShopPro.database.getPlayerAlreadyData(player, this).buy
@@ -149,16 +149,16 @@ class ShopImpl(private val configuration: Configuration) : Shop() {
private fun checkBuyLimit(amount: Int, item: ShopItem, player: Player) { private fun checkBuyLimit(amount: Int, item: ShopItem, player: Player) {
if (item.isLimit()) { if (item.isLimit()) {
if (ShopPro.database.getPlayerAlreadyData(player, item).buy >= item.limitPlayer) { if (ShopPro.database.getPlayerAlreadyData(player, item).buy >= item.getLimitPlayer(player)) {
player.sendLang("buy-limit-player", item.limitPlayer) player.sendLang("buy-limit-player", item.getLimitPlayer(player))
return return
} }
if (ShopPro.database.getServerAlreadyData(item).buy >= item.limitServer) { if (ShopPro.database.getServerAlreadyData(item).buy >= item.limitServer) {
player.sendLang("buy-limit-server", item.limitServer) player.sendLang("buy-limit-server", item.limitServer)
return return
} }
if (ShopPro.database.getPlayerAlreadyData(player, item).buy + amount > item.limitPlayer) { if (ShopPro.database.getPlayerAlreadyData(player, item).buy + amount > item.getLimitPlayer(player)) {
buy((item.limitPlayer - ShopPro.database.getPlayerAlreadyData(player, item).buy).toInt(), item, player) buy((item.getLimitPlayer(player) - ShopPro.database.getPlayerAlreadyData(player, item).buy).toInt(), item, player)
return return
} }
if (ShopPro.database.getServerAlreadyData(item).buy + amount > item.limitServer) { if (ShopPro.database.getServerAlreadyData(item).buy + amount > item.limitServer) {
@@ -187,17 +187,17 @@ class ShopImpl(private val configuration: Configuration) : Shop() {
private fun checkSellLimit(amount: Int, item: ShopItem, player: Player) { private fun checkSellLimit(amount: Int, item: ShopItem, player: Player) {
if (item.isLimit()) { if (item.isLimit()) {
if (ShopPro.database.getPlayerAlreadyData(player, item).sell >= item.limitPlayer) { if (ShopPro.database.getPlayerAlreadyData(player, item).sell >= item.getLimitPlayer(player)) {
player.sendLang("sell-limit-player", item.limitPlayer) player.sendLang("sell-limit-player", item.getLimitPlayer(player))
return return
} }
if (ShopPro.database.getServerAlreadyData(item).sell >= item.limitServer) { if (ShopPro.database.getServerAlreadyData(item).sell >= item.limitServer) {
player.sendLang("sell-limit-server", item.limitServer) player.sendLang("sell-limit-server", item.limitServer)
return return
} }
if (ShopPro.database.getPlayerAlreadyData(player, item).sell + amount > item.limitPlayer) { if (ShopPro.database.getPlayerAlreadyData(player, item).sell + amount > item.getLimitPlayer(player)) {
sell( sell(
(item.limitPlayer - ShopPro.database.getPlayerAlreadyData(player, item).sell).toInt(), (item.getLimitPlayer(player) - ShopPro.database.getPlayerAlreadyData(player, item).sell).toInt(),
item, item,
player player
) )
+3
View File
@@ -29,6 +29,9 @@ items:
limit: 5000 limit: 5000
# 每个玩家限购买 # 每个玩家限购买
limit-player: 500 limit-player: 500
# 根据权限限制玩家购买数量 所有权限都不满足则使用limit-player
limitMap:
vip: 1000
# 物品金额 # 物品金额
price: 2 price: 2
lore: lore: