mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 08:14:00 +02:00
move anvil cost to its own class
This commit is contained in:
parent
2efb6e55e2
commit
49b0054eca
11 changed files with 101 additions and 90 deletions
|
|
@ -8,8 +8,8 @@ import org.bukkit.inventory.ItemStack;
|
||||||
import org.jetbrains.annotations.ApiStatus;
|
import org.jetbrains.annotations.ApiStatus;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import xyz.alexcrea.cuanvil.anvil.AnvilCost;
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilUseType;
|
import xyz.alexcrea.cuanvil.anvil.AnvilUseType;
|
||||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called after custom anvil processed the click on the result on the anvil inventory.
|
* Called after custom anvil processed the click on the result on the anvil inventory.
|
||||||
|
|
@ -48,7 +48,7 @@ public class CATreatAnvilResult2Event extends Event {
|
||||||
@Nullable
|
@Nullable
|
||||||
private ItemStack result;
|
private ItemStack result;
|
||||||
|
|
||||||
private final AnvilXpUtil.AnvilCost cost;
|
private final AnvilCost cost;
|
||||||
|
|
||||||
@ApiStatus.Internal
|
@ApiStatus.Internal
|
||||||
public CATreatAnvilResult2Event(
|
public CATreatAnvilResult2Event(
|
||||||
|
|
@ -56,7 +56,7 @@ public class CATreatAnvilResult2Event extends Event {
|
||||||
Inventory inv,
|
Inventory inv,
|
||||||
AnvilUseType useType,
|
AnvilUseType useType,
|
||||||
@Nullable ItemStack result,
|
@Nullable ItemStack result,
|
||||||
AnvilXpUtil.AnvilCost cost) {
|
AnvilCost cost) {
|
||||||
this.view = view;
|
this.view = view;
|
||||||
this.useType = useType;
|
this.useType = useType;
|
||||||
|
|
||||||
|
|
@ -190,7 +190,7 @@ public class CATreatAnvilResult2Event extends Event {
|
||||||
*
|
*
|
||||||
* @return the current anvil cost
|
* @return the current anvil cost
|
||||||
*/
|
*/
|
||||||
public AnvilXpUtil.AnvilCost getCost() {
|
public AnvilCost getCost() {
|
||||||
return cost;
|
return cost;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,8 @@ import org.bukkit.event.inventory.PrepareAnvilEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import xyz.alexcrea.cuanvil.anvil.AnvilCost;
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilUseType;
|
import xyz.alexcrea.cuanvil.anvil.AnvilUseType;
|
||||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil.AnvilCost;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called after custom anvil processed the click on the result on the anvil inventory.
|
* Called after custom anvil processed the click on the result on the anvil inventory.
|
||||||
|
|
@ -108,8 +108,8 @@ public class CATreatAnvilResultEvent extends Event {
|
||||||
* <li>Item rename</li>
|
* <li>Item rename</li>
|
||||||
* </ul>
|
* </ul>
|
||||||
*
|
*
|
||||||
* @deprecated use #{@link #getCost()} instead
|
|
||||||
* @return The current cost.
|
* @return The current cost.
|
||||||
|
* @deprecated use #{@link #getCost()} instead
|
||||||
*/
|
*/
|
||||||
@Deprecated(forRemoval = true, since = "1.17.0")
|
@Deprecated(forRemoval = true, since = "1.17.0")
|
||||||
public int getLevelCost() {
|
public int getLevelCost() {
|
||||||
|
|
@ -130,8 +130,8 @@ public class CATreatAnvilResultEvent extends Event {
|
||||||
* <li>Item rename</li>
|
* <li>Item rename</li>
|
||||||
* </ul>
|
* </ul>
|
||||||
*
|
*
|
||||||
* @deprecated use #{@link #getCost()} and set value on this instead
|
|
||||||
* @param levelCost The new cost.
|
* @param levelCost The new cost.
|
||||||
|
* @deprecated use #{@link #getCost()} and set value on this instead
|
||||||
*/
|
*/
|
||||||
@Deprecated(forRemoval = true, since = "1.17.0")
|
@Deprecated(forRemoval = true, since = "1.17.0")
|
||||||
public void setLevelCost(int levelCost) {
|
public void setLevelCost(int levelCost) {
|
||||||
|
|
|
||||||
55
src/main/kotlin/xyz/alexcrea/cuanvil/anvil/AnvilCost.kt
Normal file
55
src/main/kotlin/xyz/alexcrea/cuanvil/anvil/AnvilCost.kt
Normal file
|
|
@ -0,0 +1,55 @@
|
||||||
|
package xyz.alexcrea.cuanvil.anvil
|
||||||
|
|
||||||
|
import java.math.BigDecimal
|
||||||
|
import io.delilaheve.util.ConfigOptions.getMonetaryMultiplier as moneyMultiplier
|
||||||
|
|
||||||
|
open class AnvilCost {
|
||||||
|
private val isAlone: Boolean
|
||||||
|
var valid = true // Get set as invalid if cost can be satisfied
|
||||||
|
var isMonetary = false
|
||||||
|
|
||||||
|
var generic = 0
|
||||||
|
var enchantment = 0
|
||||||
|
var repair = 0
|
||||||
|
var rename = 0
|
||||||
|
var lore = 0
|
||||||
|
var illegalPenalty = 0
|
||||||
|
var workPenalty = 0
|
||||||
|
var recipe = 0
|
||||||
|
|
||||||
|
constructor(generic: Int) {
|
||||||
|
this.generic = generic
|
||||||
|
isAlone = true
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
isAlone = false
|
||||||
|
}
|
||||||
|
|
||||||
|
fun asXpCost(): Int {
|
||||||
|
return generic + enchantment + repair + rename + lore + illegalPenalty + workPenalty + recipe
|
||||||
|
}
|
||||||
|
|
||||||
|
open fun asMonetaryCost(): BigDecimal {
|
||||||
|
// multiply by per use type multipliers
|
||||||
|
return BigDecimal(generic)
|
||||||
|
.add(BigDecimal(enchantment).multiply(moneyMultiplier("enchantment")))
|
||||||
|
.add(BigDecimal(repair).multiply(moneyMultiplier("repair")))
|
||||||
|
.add(BigDecimal(rename).multiply(moneyMultiplier("rename")))
|
||||||
|
.add(BigDecimal(lore).multiply(moneyMultiplier("lore_edit")))
|
||||||
|
.add(BigDecimal(enchantment).multiply(moneyMultiplier("enchantment")))
|
||||||
|
.add(BigDecimal(illegalPenalty).multiply(moneyMultiplier("work_penalty")))
|
||||||
|
.add(BigDecimal(workPenalty).multiply(moneyMultiplier("work_penalty")))
|
||||||
|
.add(BigDecimal(recipe).multiply(moneyMultiplier("recipe")))
|
||||||
|
.multiply(moneyMultiplier("global"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class CustomCraftCost(val rawCost: Int): AnvilCost() {
|
||||||
|
|
||||||
|
override fun asMonetaryCost(): BigDecimal {
|
||||||
|
return BigDecimal(rawCost)
|
||||||
|
.multiply(moneyMultiplier("global"))
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -29,8 +29,6 @@ import xyz.alexcrea.cuanvil.util.UnitRepairUtil.getRepair
|
||||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilColorUtil
|
import xyz.alexcrea.cuanvil.util.anvil.AnvilColorUtil
|
||||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilLoreEditUtil
|
import xyz.alexcrea.cuanvil.util.anvil.AnvilLoreEditUtil
|
||||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil
|
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil
|
||||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil.AnvilCost
|
|
||||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil.CustomCraftCost
|
|
||||||
import xyz.alexcrea.cuanvil.util.config.LoreEditType
|
import xyz.alexcrea.cuanvil.util.config.LoreEditType
|
||||||
import xyz.alexcrea.cuanvil.util.dialog.AnvilRenameDialogUtil
|
import xyz.alexcrea.cuanvil.util.dialog.AnvilRenameDialogUtil
|
||||||
|
|
||||||
|
|
@ -115,7 +113,8 @@ object AnvilMergeLogic {
|
||||||
}
|
}
|
||||||
|
|
||||||
cost.workPenalty = AnvilXpUtil.calculatePenalty(first, null, resultItem, AnvilUseType.RENAME_ONLY)
|
cost.workPenalty = AnvilXpUtil.calculatePenalty(first, null, resultItem, AnvilUseType.RENAME_ONLY)
|
||||||
val result = DependencyManager.tryTreatAnvilResult(view, inventory, player, resultItem, AnvilUseType.RENAME_ONLY, cost)
|
val result =
|
||||||
|
DependencyManager.tryTreatAnvilResult(view, inventory, player, resultItem, AnvilUseType.RENAME_ONLY, cost)
|
||||||
|
|
||||||
return AnvilResult(result, cost)
|
return AnvilResult(result, cost)
|
||||||
}
|
}
|
||||||
|
|
@ -220,7 +219,8 @@ object AnvilMergeLogic {
|
||||||
// Calculate rename cost
|
// Calculate rename cost
|
||||||
cost.rename = handleRename(resultItem, inventory, player)
|
cost.rename = handleRename(resultItem, inventory, player)
|
||||||
|
|
||||||
val result = DependencyManager.tryTreatAnvilResult(view, inventory, player, resultItem, AnvilUseType.MERGE, cost)
|
val result =
|
||||||
|
DependencyManager.tryTreatAnvilResult(view, inventory, player, resultItem, AnvilUseType.MERGE, cost)
|
||||||
|
|
||||||
return AnvilResult(result, cost)
|
return AnvilResult(result, cost)
|
||||||
}
|
}
|
||||||
|
|
@ -261,7 +261,8 @@ object AnvilMergeLogic {
|
||||||
cost.recipe = if (recipe.removeExactLinearXp) AnvilXpUtil.calculateMinimumLevelForXp(xpCost)
|
cost.recipe = if (recipe.removeExactLinearXp) AnvilXpUtil.calculateMinimumLevelForXp(xpCost)
|
||||||
else AnvilXpUtil.calculateLevelForXp(xpCost)
|
else AnvilXpUtil.calculateLevelForXp(xpCost)
|
||||||
|
|
||||||
val result = DependencyManager.tryTreatAnvilResult(view, inventory, player, resultItem, AnvilUseType.CUSTOM_CRAFT, cost)
|
val result =
|
||||||
|
DependencyManager.tryTreatAnvilResult(view, inventory, player, resultItem, AnvilUseType.CUSTOM_CRAFT, cost)
|
||||||
return CustomCraftResult(result, cost, amount, recipe)
|
return CustomCraftResult(result, cost, amount, recipe)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -300,7 +301,8 @@ object AnvilMergeLogic {
|
||||||
return UnitRepairResult.EMPTY
|
return UnitRepairResult.EMPTY
|
||||||
}
|
}
|
||||||
|
|
||||||
val result = DependencyManager.tryTreatAnvilResult(view, inventory, player, resultItem, AnvilUseType.UNIT_REPAIR, cost)
|
val result =
|
||||||
|
DependencyManager.tryTreatAnvilResult(view, inventory, player, resultItem, AnvilUseType.UNIT_REPAIR, cost)
|
||||||
return UnitRepairResult(result, cost, repairAmount)
|
return UnitRepairResult(result, cost, repairAmount)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ import org.bukkit.inventory.AnvilInventory
|
||||||
import org.bukkit.inventory.Inventory
|
import org.bukkit.inventory.Inventory
|
||||||
import org.bukkit.inventory.InventoryView
|
import org.bukkit.inventory.InventoryView
|
||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
|
import xyz.alexcrea.cuanvil.anvil.AnvilCost
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilUseType
|
import xyz.alexcrea.cuanvil.anvil.AnvilUseType
|
||||||
import xyz.alexcrea.cuanvil.api.event.listener.CAClickResultBypassEvent
|
import xyz.alexcrea.cuanvil.api.event.listener.CAClickResultBypassEvent
|
||||||
import xyz.alexcrea.cuanvil.api.event.listener.CAEarlyPreAnvilBypassEvent
|
import xyz.alexcrea.cuanvil.api.event.listener.CAEarlyPreAnvilBypassEvent
|
||||||
|
|
@ -33,7 +34,6 @@ import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil
|
||||||
import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil.componentLore
|
import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil.componentLore
|
||||||
import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener.Companion.ANVIL_OUTPUT_SLOT
|
import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener.Companion.ANVIL_OUTPUT_SLOT
|
||||||
import xyz.alexcrea.cuanvil.util.MetricsUtil.trackError
|
import xyz.alexcrea.cuanvil.util.MetricsUtil.trackError
|
||||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil
|
|
||||||
import java.util.logging.Level
|
import java.util.logging.Level
|
||||||
|
|
||||||
object DependencyManager {
|
object DependencyManager {
|
||||||
|
|
@ -240,7 +240,7 @@ object DependencyManager {
|
||||||
player: HumanEntity,
|
player: HumanEntity,
|
||||||
result: ItemStack,
|
result: ItemStack,
|
||||||
useType: AnvilUseType,
|
useType: AnvilUseType,
|
||||||
cost: AnvilXpUtil.AnvilCost
|
cost: AnvilCost
|
||||||
): ItemStack? {
|
): ItemStack? {
|
||||||
val treatEvent = CATreatAnvilResult2Event(view, inventory, useType, result, cost)
|
val treatEvent = CATreatAnvilResult2Event(view, inventory, useType, result, cost)
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
|
|
@ -14,10 +14,10 @@ import org.bukkit.event.inventory.InventoryClickEvent
|
||||||
import org.bukkit.event.inventory.PrepareAnvilEvent
|
import org.bukkit.event.inventory.PrepareAnvilEvent
|
||||||
import org.bukkit.inventory.AnvilInventory
|
import org.bukkit.inventory.AnvilInventory
|
||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
|
import xyz.alexcrea.cuanvil.anvil.AnvilCost
|
||||||
import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener
|
import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener
|
||||||
import xyz.alexcrea.cuanvil.util.MetricsUtil.trackError
|
import xyz.alexcrea.cuanvil.util.MetricsUtil.trackError
|
||||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil
|
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil
|
||||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil.AnvilCost
|
|
||||||
import java.util.logging.Level
|
import java.util.logging.Level
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,9 @@ import org.bukkit.plugin.RegisteredListener
|
||||||
import valorless.havenbags.HavenBags
|
import valorless.havenbags.HavenBags
|
||||||
import valorless.havenbags.features.BagSkin
|
import valorless.havenbags.features.BagSkin
|
||||||
import valorless.havenbags.features.BagUpgrade
|
import valorless.havenbags.features.BagUpgrade
|
||||||
|
import xyz.alexcrea.cuanvil.anvil.AnvilCost
|
||||||
import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener
|
import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener
|
||||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil
|
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil
|
||||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil.AnvilCost
|
|
||||||
|
|
||||||
class HavenBagsDependency {
|
class HavenBagsDependency {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import org.bukkit.inventory.AnvilInventory
|
||||||
import org.bukkit.inventory.InventoryView
|
import org.bukkit.inventory.InventoryView
|
||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
import org.bukkit.inventory.meta.BookMeta
|
import org.bukkit.inventory.meta.BookMeta
|
||||||
|
import xyz.alexcrea.cuanvil.anvil.AnvilCost
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic
|
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.AnvilResult
|
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.AnvilResult
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.CustomCraftResult
|
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.CustomCraftResult
|
||||||
|
|
@ -30,10 +31,8 @@ import xyz.alexcrea.cuanvil.util.CustomRecipeUtil
|
||||||
import xyz.alexcrea.cuanvil.util.MiniMessageUtil
|
import xyz.alexcrea.cuanvil.util.MiniMessageUtil
|
||||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilLoreEditUtil
|
import xyz.alexcrea.cuanvil.util.anvil.AnvilLoreEditUtil
|
||||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil
|
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil
|
||||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil.AnvilCost
|
|
||||||
import xyz.alexcrea.cuanvil.util.config.LoreEditConfigUtil
|
import xyz.alexcrea.cuanvil.util.config.LoreEditConfigUtil
|
||||||
import xyz.alexcrea.cuanvil.util.config.LoreEditType
|
import xyz.alexcrea.cuanvil.util.config.LoreEditType
|
||||||
import java.math.BigDecimal
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.concurrent.atomic.AtomicReference
|
import java.util.concurrent.atomic.AtomicReference
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
|
|
@ -483,7 +482,6 @@ class AnvilResultListener : Listener {
|
||||||
val paperMeta = rightItem.itemMeta ?: return
|
val paperMeta = rightItem.itemMeta ?: return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
val paperCopy: ItemStack?
|
val paperCopy: ItemStack?
|
||||||
if (LoreEditType.APPEND_PAPER.doConsume) {
|
if (LoreEditType.APPEND_PAPER.doConsume) {
|
||||||
paperCopy = null
|
paperCopy = null
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import org.bukkit.inventory.InventoryView
|
||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
import org.bukkit.inventory.meta.EnchantmentStorageMeta
|
import org.bukkit.inventory.meta.EnchantmentStorageMeta
|
||||||
import org.bukkit.inventory.meta.ItemMeta
|
import org.bukkit.inventory.meta.ItemMeta
|
||||||
|
import xyz.alexcrea.cuanvil.anvil.AnvilCost
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.AnvilResult
|
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.AnvilResult
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.doMerge
|
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.doMerge
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.doRenaming
|
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.doRenaming
|
||||||
|
|
@ -24,7 +25,6 @@ import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.testUnitRepair
|
||||||
import xyz.alexcrea.cuanvil.dependency.DependencyManager
|
import xyz.alexcrea.cuanvil.dependency.DependencyManager
|
||||||
import xyz.alexcrea.cuanvil.util.MaterialUtil.isAir
|
import xyz.alexcrea.cuanvil.util.MaterialUtil.isAir
|
||||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil
|
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil
|
||||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil.AnvilCost
|
|
||||||
import xyz.alexcrea.cuanvil.util.dialog.AnvilRenameDialogUtil
|
import xyz.alexcrea.cuanvil.util.dialog.AnvilRenameDialogUtil
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -5,12 +5,12 @@ import org.bukkit.entity.HumanEntity
|
||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
import org.bukkit.inventory.meta.BookMeta
|
import org.bukkit.inventory.meta.BookMeta
|
||||||
import org.bukkit.permissions.Permissible
|
import org.bukkit.permissions.Permissible
|
||||||
|
import xyz.alexcrea.cuanvil.anvil.AnvilCost
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.LoreEditResult
|
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.LoreEditResult
|
||||||
import xyz.alexcrea.cuanvil.dependency.DependencyManager
|
import xyz.alexcrea.cuanvil.dependency.DependencyManager
|
||||||
import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil.componentLore
|
import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil.componentLore
|
||||||
import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil.setComponentLore
|
import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil.setComponentLore
|
||||||
import xyz.alexcrea.cuanvil.util.MiniMessageUtil
|
import xyz.alexcrea.cuanvil.util.MiniMessageUtil
|
||||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil.AnvilCost
|
|
||||||
import xyz.alexcrea.cuanvil.util.config.LoreEditConfigUtil
|
import xyz.alexcrea.cuanvil.util.config.LoreEditConfigUtil
|
||||||
import xyz.alexcrea.cuanvil.util.config.LoreEditType
|
import xyz.alexcrea.cuanvil.util.config.LoreEditType
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
@ -44,8 +44,10 @@ object AnvilLoreEditUtil {
|
||||||
val page = book.pages[0]
|
val page = book.pages[0]
|
||||||
val lines = ArrayList<String>(page.split("\n"))
|
val lines = ArrayList<String>(page.split("\n"))
|
||||||
val outLines = ArrayList<Component>(lines.size)
|
val outLines = ArrayList<Component>(lines.size)
|
||||||
val colorCost = colorLines(player, LoreEditType.APPEND_BOOK,
|
val colorCost = colorLines(
|
||||||
lines, outLines)
|
player, LoreEditType.APPEND_BOOK,
|
||||||
|
lines, outLines
|
||||||
|
)
|
||||||
|
|
||||||
lore.addAll(outLines)
|
lore.addAll(outLines)
|
||||||
|
|
||||||
|
|
@ -81,7 +83,7 @@ object AnvilLoreEditUtil {
|
||||||
|
|
||||||
// Handle xp
|
// Handle xp
|
||||||
cost.lore = uncolorCost
|
cost.lore = uncolorCost
|
||||||
cost.lore+= currentLore.size * LoreEditType.REMOVE_BOOK.perLineCost
|
cost.lore += currentLore.size * LoreEditType.REMOVE_BOOK.perLineCost
|
||||||
baseEditLoreXpCost(cost, first, result, LoreEditType.REMOVE_BOOK)
|
baseEditLoreXpCost(cost, first, result, LoreEditType.REMOVE_BOOK)
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
@ -120,7 +122,7 @@ object AnvilLoreEditUtil {
|
||||||
|
|
||||||
fun tryLoreEditByBook(player: HumanEntity, first: ItemStack, second: ItemStack): LoreEditResult {
|
fun tryLoreEditByBook(player: HumanEntity, first: ItemStack, second: ItemStack): LoreEditResult {
|
||||||
val isAppend = bookLoreEditIsAppend(first, second) ?: return LoreEditResult.EMPTY
|
val isAppend = bookLoreEditIsAppend(first, second) ?: return LoreEditResult.EMPTY
|
||||||
val type = if(isAppend) LoreEditType.APPEND_BOOK else LoreEditType.REMOVE_BOOK
|
val type = if (isAppend) LoreEditType.APPEND_BOOK else LoreEditType.REMOVE_BOOK
|
||||||
|
|
||||||
val meta = second.itemMeta as BookMeta
|
val meta = second.itemMeta as BookMeta
|
||||||
val cost = AnvilCost()
|
val cost = AnvilCost()
|
||||||
|
|
@ -166,9 +168,11 @@ object AnvilLoreEditUtil {
|
||||||
|
|
||||||
// A bit overdone to color 1 line but hey
|
// A bit overdone to color 1 line but hey
|
||||||
val outList = ArrayList<Component>(1)
|
val outList = ArrayList<Component>(1)
|
||||||
val colorCost = colorLines(player, LoreEditType.APPEND_PAPER,
|
val colorCost = colorLines(
|
||||||
|
player, LoreEditType.APPEND_PAPER,
|
||||||
Collections.singletonList(second.itemMeta!!.displayName),
|
Collections.singletonList(second.itemMeta!!.displayName),
|
||||||
outList)
|
outList
|
||||||
|
)
|
||||||
|
|
||||||
val line = outList[0]
|
val line = outList[0]
|
||||||
if (appendEnd)
|
if (appendEnd)
|
||||||
|
|
@ -232,7 +236,7 @@ object AnvilLoreEditUtil {
|
||||||
second: ItemStack
|
second: ItemStack
|
||||||
): LoreEditResult {
|
): LoreEditResult {
|
||||||
val isAppend = paperLoreEditIsAppend(first, second) ?: return LoreEditResult.EMPTY
|
val isAppend = paperLoreEditIsAppend(first, second) ?: return LoreEditResult.EMPTY
|
||||||
val type = if(isAppend) LoreEditType.APPEND_BOOK else LoreEditType.REMOVE_BOOK
|
val type = if (isAppend) LoreEditType.APPEND_BOOK else LoreEditType.REMOVE_BOOK
|
||||||
|
|
||||||
val cost = AnvilCost()
|
val cost = AnvilCost()
|
||||||
val item = if (isAppend)
|
val item = if (isAppend)
|
||||||
|
|
@ -248,18 +252,20 @@ object AnvilLoreEditUtil {
|
||||||
result: ItemStack,
|
result: ItemStack,
|
||||||
editType: LoreEditType
|
editType: LoreEditType
|
||||||
) {
|
) {
|
||||||
cost.lore+= editType.fixedCost
|
cost.lore += editType.fixedCost
|
||||||
|
|
||||||
cost.workPenalty = AnvilXpUtil.calculatePenalty(first, null, result, editType.useType)
|
cost.workPenalty = AnvilXpUtil.calculatePenalty(first, null, result, editType.useType)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun colorPermission(player: Permissible, editType: LoreEditType): AnvilColorUtil.ColorPermissions {
|
fun colorPermission(player: Permissible, editType: LoreEditType): AnvilColorUtil.ColorPermissions {
|
||||||
return AnvilColorUtil.calculatePermissions(player,
|
return AnvilColorUtil.calculatePermissions(
|
||||||
|
player,
|
||||||
false,
|
false,
|
||||||
editType.allowColorCode,
|
editType.allowColorCode,
|
||||||
editType.allowHexColor,
|
editType.allowHexColor,
|
||||||
editType.allowMinimessage,
|
editType.allowMinimessage,
|
||||||
AnvilColorUtil.ColorUseType.LORE_EDIT)
|
AnvilColorUtil.ColorUseType.LORE_EDIT
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun colorLine(line: String, permission: AnvilColorUtil.ColorPermissions): Component? {
|
private fun colorLine(line: String, permission: AnvilColorUtil.ColorPermissions): Component? {
|
||||||
|
|
@ -269,8 +275,10 @@ object AnvilLoreEditUtil {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun colorLines(player: Permissible, editType: LoreEditType,
|
private fun colorLines(
|
||||||
lines: List<String>, outLines: MutableList<Component>): Int {
|
player: Permissible, editType: LoreEditType,
|
||||||
|
lines: List<String>, outLines: MutableList<Component>
|
||||||
|
): Int {
|
||||||
val permission = colorPermission(player, editType)
|
val permission = colorPermission(player, editType)
|
||||||
val colorCost = editType.useColorCost
|
val colorCost = editType.useColorCost
|
||||||
|
|
||||||
|
|
@ -297,7 +305,7 @@ object AnvilLoreEditUtil {
|
||||||
// Now handle color of each lines
|
// Now handle color of each lines
|
||||||
var hasUndidColor = false
|
var hasUndidColor = false
|
||||||
for ((index, line) in lines.withIndex()) {
|
for ((index, line) in lines.withIndex()) {
|
||||||
if(line == null){
|
if (line == null) {
|
||||||
lines[index] = null
|
lines[index] = null
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
@ -341,7 +349,7 @@ object AnvilLoreEditUtil {
|
||||||
|
|
||||||
var hasUndidColor = false
|
var hasUndidColor = false
|
||||||
val result: String
|
val result: String
|
||||||
if(clearedLine != null){
|
if (clearedLine != null) {
|
||||||
hasUndidColor = true
|
hasUndidColor = true
|
||||||
result = clearedLine
|
result = clearedLine
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ import org.bukkit.inventory.InventoryView
|
||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
import org.bukkit.inventory.meta.Repairable
|
import org.bukkit.inventory.meta.Repairable
|
||||||
import org.bukkit.persistence.PersistentDataType
|
import org.bukkit.persistence.PersistentDataType
|
||||||
|
import xyz.alexcrea.cuanvil.anvil.AnvilCost
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilUseType
|
import xyz.alexcrea.cuanvil.anvil.AnvilUseType
|
||||||
import xyz.alexcrea.cuanvil.config.ConfigHolder
|
import xyz.alexcrea.cuanvil.config.ConfigHolder
|
||||||
import xyz.alexcrea.cuanvil.dependency.DependencyManager
|
import xyz.alexcrea.cuanvil.dependency.DependencyManager
|
||||||
|
|
@ -21,65 +22,12 @@ import xyz.alexcrea.cuanvil.dependency.economy.EconomyManager
|
||||||
import xyz.alexcrea.cuanvil.group.ConflictType
|
import xyz.alexcrea.cuanvil.group.ConflictType
|
||||||
import xyz.alexcrea.cuanvil.util.AnvilTitleUtil
|
import xyz.alexcrea.cuanvil.util.AnvilTitleUtil
|
||||||
import xyz.alexcrea.cuanvil.util.dialog.AnvilRenameDialogUtil
|
import xyz.alexcrea.cuanvil.util.dialog.AnvilRenameDialogUtil
|
||||||
import java.math.BigDecimal
|
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
import io.delilaheve.util.ConfigOptions.getMonetaryMultiplier as moneyMultiplier
|
|
||||||
|
|
||||||
object AnvilXpUtil {
|
object AnvilXpUtil {
|
||||||
|
|
||||||
const val EXCLUSIVE_PENALTY_PREFIX = "repair_cost"
|
const val EXCLUSIVE_PENALTY_PREFIX = "repair_cost"
|
||||||
|
|
||||||
open class AnvilCost {
|
|
||||||
private val isAlone: Boolean
|
|
||||||
var valid = true // Get set as invalid if cost can be satisfied
|
|
||||||
var isMonetary = false
|
|
||||||
|
|
||||||
var generic = 0
|
|
||||||
var enchantment = 0
|
|
||||||
var repair = 0
|
|
||||||
var rename = 0
|
|
||||||
var lore = 0
|
|
||||||
var illegalPenalty = 0
|
|
||||||
var workPenalty = 0
|
|
||||||
var recipe = 0
|
|
||||||
|
|
||||||
constructor(generic: Int) {
|
|
||||||
this.generic = generic
|
|
||||||
isAlone = true
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
isAlone = false
|
|
||||||
}
|
|
||||||
|
|
||||||
fun asXpCost(): Int {
|
|
||||||
return generic + enchantment + repair + rename + lore + illegalPenalty + workPenalty + recipe
|
|
||||||
}
|
|
||||||
|
|
||||||
open fun asMonetaryCost(): BigDecimal {
|
|
||||||
// multiply by per use type multipliers
|
|
||||||
return BigDecimal(generic)
|
|
||||||
.add(BigDecimal(enchantment).multiply(moneyMultiplier("enchantment")))
|
|
||||||
.add(BigDecimal(repair).multiply(moneyMultiplier("repair")))
|
|
||||||
.add(BigDecimal(rename).multiply(moneyMultiplier("rename")))
|
|
||||||
.add(BigDecimal(lore).multiply(moneyMultiplier("lore_edit")))
|
|
||||||
.add(BigDecimal(enchantment).multiply(moneyMultiplier("enchantment")))
|
|
||||||
.add(BigDecimal(illegalPenalty).multiply(moneyMultiplier("work_penalty")))
|
|
||||||
.add(BigDecimal(workPenalty).multiply(moneyMultiplier("work_penalty")))
|
|
||||||
.add(BigDecimal(recipe).multiply(moneyMultiplier("recipe")))
|
|
||||||
.multiply(moneyMultiplier("global"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class CustomCraftCost(val rawCost: Int): AnvilCost() {
|
|
||||||
|
|
||||||
override fun asMonetaryCost(): BigDecimal {
|
|
||||||
return BigDecimal(rawCost)
|
|
||||||
.multiply(moneyMultiplier("global"))
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Display the required cost (either as xp or as )
|
* Display the required cost (either as xp or as )
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue