Added permission multipliers for some more rigging potential
This commit is contained in:
@@ -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
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user