Added permission multipliers for some more rigging potential

This commit is contained in:
Auxilor
2022-03-20 12:20:19 +00:00
parent e82d88467a
commit e1bf1cfaff
5 changed files with 116 additions and 5 deletions

View File

@@ -0,0 +1,23 @@
package com.willfp.ecocrates.crate
import org.bukkit.Bukkit
import org.bukkit.permissions.Permission
import org.bukkit.permissions.PermissionDefault
data class PermissionMultiplier(
val permission: String,
val multiplier: Double,
val priority: Int
) {
init {
if (Bukkit.getPluginManager().getPermission(permission) == null) {
Bukkit.getPluginManager().addPermission(
Permission(
permission,
"Gives a ${multiplier}x multiplier in crate rewards",
PermissionDefault.FALSE
)
)
}
}
}

View File

@@ -0,0 +1,62 @@
package com.willfp.ecocrates.crate
import com.willfp.eco.core.config.updating.ConfigUpdater
import com.willfp.ecocrates.EcoCratesPlugin
import com.willfp.ecocrates.crate.placed.PlacedCrates
import org.bukkit.entity.Player
@Suppress("UNUSED")
object PermissionMultipliers {
private val REGISTRY = mutableListOf<PermissionMultiplier>()
private val NO_MULTIPLIER = PermissionMultiplier("none", 1.0, 0)
/**
* Get the permission multiplier for a given player.
*
* @param player The player.
* @return The multiplier.
*/
@JvmStatic
fun getForPlayer(player: Player): PermissionMultiplier {
var current = NO_MULTIPLIER
for (multiplier in REGISTRY) {
if (multiplier.priority < current.priority) {
continue
}
if (!player.hasPermission(multiplier.permission)) {
continue
}
current = multiplier
}
return current
}
/**
* List of all registered crates.
*
* @return The crates.
*/
@JvmStatic
fun values(): List<PermissionMultiplier> {
return REGISTRY.toList()
}
@ConfigUpdater
@JvmStatic
fun update(plugin: EcoCratesPlugin) {
REGISTRY.clear()
for (config in plugin.configYml.getSubsections("permission-multipliers")) {
val multiplier = PermissionMultiplier(
config.getString("permission"),
config.getDouble("multiplier"),
config.getInt("priority")
)
REGISTRY.add(multiplier)
}
}
}

View File

@@ -14,11 +14,12 @@ import com.willfp.eco.core.recipe.parts.EmptyTestableItem
import com.willfp.eco.util.formatEco
import com.willfp.eco.util.toNiceString
import com.willfp.ecocrates.crate.Crate
import com.willfp.ecocrates.crate.PermissionMultipliers
import org.bukkit.Bukkit
import org.bukkit.OfflinePlayer
import org.bukkit.entity.Player
import org.bukkit.inventory.ItemStack
import java.util.*
import java.util.Objects
class Reward(
private val plugin: EcoPlugin,
@@ -43,6 +44,8 @@ class Reward(
if (maxWins > 0) player()
}
private val canPermissionMultiply = config.getBool("weight.permission-multipliers")
private val baseDisplay = ItemStackBuilder(Items.lookup(config.getString("display.item")))
.setDisplayName(config.getString("display.name"))
.build()
@@ -51,9 +54,13 @@ class Reward(
val item = baseDisplay.clone()
val fis = FastItemStack.wrap(item)
fis.lore = config.getStrings("display.lore").map {
it.replace("%chance%", getPercentageChance(player, crate.rewards, displayWeight = true).toNiceString())
.replace("%actual_chance%", getPercentageChance(player, crate.rewards, displayWeight = false).toNiceString())
.formatEco(player)
it.replace(
"%chance%",
getPercentageChance(player, crate.rewards, displayWeight = true).toNiceString()
).replace(
"%actual_chance%",
getPercentageChance(player, crate.rewards, displayWeight = false).toNiceString()
).formatEco(player)
}
return item
}
@@ -86,7 +93,11 @@ class Reward(
val others = among.toMutableList()
others.remove(this)
val weight = if (displayWeight) this.getDisplayWeight(player) else this.getWeight(player)
var weight = (if (displayWeight) this.getDisplayWeight(player) else this.getWeight(player))
if (canPermissionMultiply) {
weight *= PermissionMultipliers.getForPlayer(player).multiplier
}
var totalWeight = weight
for (other in others) {

View File

@@ -5,6 +5,18 @@
no-key-velocity: 1.5 # The speed at which a player should be launched away from a crate if they try to open it without a key. Set to 0 to disable.
# If a reward allows permission multipliers, the weights
# will be multiplied by highest-priority multiplier that a player
# has permission for - i.e. if a player has both vip and mvp permissions,
# than they'll have the mvp one applied as it has a higher priority.
permission-multipliers:
- permission: ecocrates.mutliplier.vip
multiplier: 1.5
priority: 1
- permission: ecocrates.mutliplier.mvp
multiplier: 2
priority: 2
reroll:
rows: 3
mask:

View File

@@ -6,6 +6,7 @@ rewards:
messages:
- 'amogus?'
weight:
permission-multipliers: true
actual: 1
display: 25
max-wins: -1
@@ -25,6 +26,7 @@ rewards:
messages:
- 'amogus?!!'
weight:
permission-multipliers: false
actual: 1
display: 50
max-wins: -1
@@ -44,6 +46,7 @@ rewards:
messages:
- 'amogus?!!'
weight:
permission-multipliers: false
actual: 98
display: 0
max-wins: -1