更新权限限制数量

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
version=1.1.7
version=1.1.8
@@ -23,6 +23,14 @@ abstract class ItemLoader {
this.getString("currency")?.let {
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(
key = char,
material = parseToMaterial(this),
@@ -39,6 +47,7 @@ abstract class ItemLoader {
conditionIcon = this.getString("condition-icon")?.parseToMaterial(),
conditionLore = this.getStringList("condition-lore"),
conditionName = this.getString("condition-name"),
limitPermissionMap = limitMap
)
}
@@ -25,7 +25,8 @@ abstract class ShopItem(
override val conditionName: String?,
val price: Double,
val limitServer: Long,
val limitPlayer: Long,
private val limitPlayer: Long,
private val limitPermissionMap: Map<String, Long>,
val currency: Currency
) : Item, KetherCondition {
@@ -44,6 +45,7 @@ abstract class ShopItem(
itemSetting.price,
itemSetting.limitServer,
itemSetting.limitPlayer,
itemSetting.limitPermissionMap,
itemSetting.currency
)
@@ -62,6 +64,7 @@ abstract class ShopItem(
val price: Double,
val limitServer: Long,
val limitPlayer: Long,
val limitPermissionMap: Map<String, Long>,
var currency: Currency
)
@@ -80,6 +83,10 @@ abstract class ShopItem(
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 {
val playerLimit = if (shop.getType() == Shop.ShopType.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) {
if (item.isLimit()) {
if (ShopPro.database.getPlayerAlreadyData(player, item).buy >= item.limitPlayer) {
player.sendLang("buy-limit-player", item.limitPlayer)
if (ShopPro.database.getPlayerAlreadyData(player, item).buy >= item.getLimitPlayer(player)) {
player.sendLang("buy-limit-player", item.getLimitPlayer(player))
return
}
if (ShopPro.database.getServerAlreadyData(item).buy >= item.limitServer) {
player.sendLang("buy-limit-server", item.limitServer)
return
}
if (ShopPro.database.getPlayerAlreadyData(player, item).buy + amount > item.limitPlayer) {
buy((item.limitPlayer - ShopPro.database.getPlayerAlreadyData(player, item).buy).toInt(), item, player)
if (ShopPro.database.getPlayerAlreadyData(player, item).buy + amount > item.getLimitPlayer(player)) {
buy((item.getLimitPlayer(player) - ShopPro.database.getPlayerAlreadyData(player, item).buy).toInt(), item, player)
return
}
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) {
if (item.isLimit()) {
if (ShopPro.database.getPlayerAlreadyData(player, item).sell >= item.limitPlayer) {
player.sendLang("sell-limit-player", item.limitPlayer)
if (ShopPro.database.getPlayerAlreadyData(player, item).sell >= item.getLimitPlayer(player)) {
player.sendLang("sell-limit-player", item.getLimitPlayer(player))
return
}
if (ShopPro.database.getServerAlreadyData(item).sell >= item.limitServer) {
player.sendLang("sell-limit-server", item.limitServer)
return
}
if (ShopPro.database.getPlayerAlreadyData(player, item).sell + amount > item.limitPlayer) {
if (ShopPro.database.getPlayerAlreadyData(player, item).sell + amount > item.getLimitPlayer(player)) {
sell(
(item.limitPlayer - ShopPro.database.getPlayerAlreadyData(player, item).sell).toInt(),
(item.getLimitPlayer(player) - ShopPro.database.getPlayerAlreadyData(player, item).sell).toInt(),
item,
player
)
+3
View File
@@ -29,6 +29,9 @@ items:
limit: 5000
# 每个玩家限购买
limit-player: 500
# 根据权限限制玩家购买数量 所有权限都不满足则使用limit-player
limitMap:
vip: 1000
# 物品金额
price: 2
lore: