9
0
mirror of https://github.com/Auxilor/Reforges.git synced 2026-01-04 15:41:40 +00:00

Added price multipliers

This commit is contained in:
Auxilor
2022-03-21 10:48:51 +00:00
parent 2245d9e50e
commit 07f5cd1d71
5 changed files with 103 additions and 1 deletions

View File

@@ -5,6 +5,7 @@ import com.willfp.eco.core.PluginDependent;
import com.willfp.eco.core.gui.menu.Menu;
import com.willfp.eco.core.gui.slot.Slot;
import com.willfp.eco.core.integrations.economy.EconomyManager;
import com.willfp.reforges.reforges.PriceMultipliers;
import com.willfp.reforges.reforges.Reforge;
import com.willfp.reforges.reforges.meta.ReforgeTarget;
import org.bukkit.Sound;
@@ -72,6 +73,7 @@ public class ReforgeHandler extends PluginDependent<EcoPlugin> {
if (reforge.getRequiresStone() && reforge.getStonePrice() != -1) {
cost = reforge.getStonePrice();
}
cost *= PriceMultipliers.getForPlayer(player).getMultiplier();
if (!EconomyManager.hasAmount(player, cost)) {
player.sendMessage(this.getPlugin().getLangYml().getMessage("insufficient-money"));
@@ -92,6 +94,7 @@ public class ReforgeHandler extends PluginDependent<EcoPlugin> {
int xpCost = this.getPlugin().getConfigYml().getInt("reforge.xp-cost");
int reforges = ReforgeUtils.getReforges(toReforge);
xpCost *= Math.pow(this.getPlugin().getConfigYml().getDouble("reforge.cost-exponent"), reforges);
xpCost *= PriceMultipliers.getForPlayer(player).getMultiplier();
if (player.getLevel() < xpCost) {
player.sendMessage(this.getPlugin().getLangYml().getMessage("insufficient-xp"));
if (this.getPlugin().getConfigYml().getBool("gui.insufficient-money-sound.enabled")) {

View File

@@ -13,6 +13,7 @@ import com.willfp.eco.core.items.Items
import com.willfp.eco.core.items.builder.ItemStackBuilder
import com.willfp.eco.util.NumberUtils
import com.willfp.reforges.ReforgesPlugin
import com.willfp.reforges.reforges.PriceMultipliers
import com.willfp.reforges.reforges.util.ReforgeHandler
import com.willfp.reforges.reforges.util.ReforgeStatus
import com.willfp.reforges.reforges.util.ReforgeUtils
@@ -45,7 +46,8 @@ object ReforgeGUI {
status == ReforgeStatus.ALLOW || (status == ReforgeStatus.ALLOW_STONE && specialCost < 0) -> {
val amountOfReforges = ReforgeUtils.getReforges(menu.getCaptiveItems(player)[0])
plugin.configYml.getDouble("reforge.cost") *
plugin.configYml.getDouble("reforge.cost-exponent").pow(amountOfReforges)
plugin.configYml.getDouble("reforge.cost-exponent").pow(amountOfReforges) *
PriceMultipliers.getForPlayer(player).multiplier
}
status == ReforgeStatus.ALLOW_STONE -> {
specialCost
@@ -57,6 +59,7 @@ object ReforgeGUI {
if (status == ReforgeStatus.ALLOW) {
val item = menu.getCaptiveItems(player)[0]
val reforges = ReforgeUtils.getReforges(item)
xpCost *= PriceMultipliers.getForPlayer(player).multiplier.toInt()
xpCost *= plugin.configYml.getDouble("reforge.cost-exponent").pow(reforges.toDouble()).toInt()
}

View File

@@ -0,0 +1,23 @@
package com.willfp.reforges.reforges
import org.bukkit.Bukkit
import org.bukkit.permissions.Permission
import org.bukkit.permissions.PermissionDefault
data class PriceMultiplier(
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 price multiplier when reforging",
PermissionDefault.FALSE
)
)
}
}
}

View File

@@ -0,0 +1,61 @@
package com.willfp.reforges.reforges
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.config.updating.ConfigUpdater
import org.bukkit.entity.Player
@Suppress("UNUSED")
object PriceMultipliers {
private val REGISTRY = mutableListOf<PriceMultiplier>()
private val NO_MULTIPLIER = PriceMultiplier("none", 1.0, 0)
/**
* Get the permission multiplier for a given player.
*
* @param player The player.
* @return The multiplier.
*/
@JvmStatic
fun getForPlayer(player: Player): PriceMultiplier {
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 multipliers.
*
* @return The multipliers.
*/
@JvmStatic
fun values(): List<PriceMultiplier> {
return REGISTRY.toList()
}
@ConfigUpdater
@JvmStatic
fun update(plugin: EcoPlugin) {
REGISTRY.clear()
for (config in plugin.configYml.getSubsections("price-multipliers")) {
val multiplier = PriceMultiplier(
config.getString("permission"),
config.getDouble("multiplier"),
config.getInt("priority")
)
REGISTRY.add(multiplier)
}
}
}

View File

@@ -6,6 +6,18 @@
discover-recipes: true
no-offhand: false # Restart your server after this option, doesn't work with /reforges reload
# 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.
price-multipliers:
- permission: reforges.mutliplier.vip
multiplier: 0.8
priority: 1
- permission: reforges.mutliplier.mvp
multiplier: 0.7
priority: 2
gui:
rows: 6