mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 16:16:17 +02:00
fix creative price and other small fixes
This commit is contained in:
parent
edceba879f
commit
d0078e528d
3 changed files with 38 additions and 49 deletions
|
|
@ -90,15 +90,29 @@ class AnvilResultListener : Listener {
|
|||
|
||||
// Rename
|
||||
if (rightItem == null) {
|
||||
// BRUH
|
||||
event.result = Event.Result.ALLOW
|
||||
val result = AnvilMergeLogic.doRenaming(inventory, player, leftItem)
|
||||
if(result.isEmpty()) return
|
||||
|
||||
extractAnvilResult(
|
||||
event, player, inventory,
|
||||
null, 0,
|
||||
null, 0,
|
||||
result
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
// Merge
|
||||
val canMerge = leftItem.canMergeWith(rightItem)
|
||||
if (canMerge) {
|
||||
event.result = Event.Result.ALLOW
|
||||
val result = AnvilMergeLogic.doMerge(inventory, player, leftItem, rightItem)
|
||||
|
||||
extractAnvilResult(
|
||||
event, player, inventory,
|
||||
null, 0,
|
||||
null, 0,
|
||||
result
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -195,6 +209,7 @@ class AnvilResultListener : Listener {
|
|||
inventory.setItem(ANVIL_INPUT_LEFT, leftItem)
|
||||
|
||||
if (player.gameMode != GameMode.CREATIVE) {
|
||||
//TODO monetary cost ? somehow
|
||||
if (linearCost) {
|
||||
val levelXp = AnvilXpUtil.calculateXpForLevel(player.level)
|
||||
val delta = AnvilXpUtil.calculateXpForLevel(player.level + 1) - levelXp
|
||||
|
|
@ -236,7 +251,18 @@ class AnvilResultListener : Listener {
|
|||
return true
|
||||
}
|
||||
|
||||
// I don't know about side effect of "handling cost" at this level and not before so let be safe
|
||||
private fun tryRemoveCost(player: Player, cost: AnvilCost): Boolean {
|
||||
if(player.gameMode == GameMode.CREATIVE) return true
|
||||
if(cost.isMonetary) {
|
||||
val result = EconomyManager.economy!!.remove(player, cost.asMonetaryCost())
|
||||
if(!result) return false
|
||||
} else {
|
||||
player.level -= cost.asXpCost()
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
private fun extractAnvilResult(
|
||||
event: InventoryClickEvent,
|
||||
player: Player,
|
||||
|
|
@ -249,28 +275,13 @@ class AnvilResultListener : Listener {
|
|||
): Boolean {
|
||||
if(result.isEmpty()) return false
|
||||
|
||||
processCost(inventory, player, result.cost)
|
||||
|
||||
return extractAnvilResult(event, player, inventory, leftItem, leftRemoveCount, rightItem,
|
||||
rightRemoveCount, result.item!!, result.cost)
|
||||
}
|
||||
|
||||
private fun extractAnvilResult(
|
||||
event: InventoryClickEvent,
|
||||
player: Player,
|
||||
inventory: AnvilInventory,
|
||||
leftItem: ItemStack?,
|
||||
leftRemoveCount: Int,
|
||||
rightItem: ItemStack?,
|
||||
rightRemoveCount: Int,
|
||||
output: ItemStack,
|
||||
cost: AnvilCost,
|
||||
): Boolean {
|
||||
// To avoid vanilla, we cancel the event
|
||||
event.result = Event.Result.DENY
|
||||
event.isCancelled = true
|
||||
val cost = result.cost
|
||||
|
||||
if (!cost.valid) return false
|
||||
processCost(inventory, player, cost)
|
||||
if (!cost.valid && player.gameMode != GameMode.CREATIVE) return false
|
||||
|
||||
// Where should we get the item
|
||||
val slotDestination = getActionSlot(event, player)
|
||||
|
|
@ -278,12 +289,7 @@ class AnvilResultListener : Listener {
|
|||
|
||||
// If not creative middle click...
|
||||
if (event.click != ClickType.MIDDLE) {
|
||||
if(cost.isMonetary) {
|
||||
val result = EconomyManager.economy!!.remove(player, cost.asMonetaryCost())
|
||||
if(!result) return false
|
||||
} else {
|
||||
player.level -= cost.asXpCost()
|
||||
}
|
||||
if(!tryRemoveCost(player, cost)) return false
|
||||
|
||||
// We remove what should be removed
|
||||
if (leftItem != null) leftItem.amount -= leftRemoveCount
|
||||
|
|
@ -298,9 +304,9 @@ class AnvilResultListener : Listener {
|
|||
|
||||
// Finally, we add the item to the player
|
||||
if (SlotType.CURSOR == slotDestination.type) {
|
||||
player.setItemOnCursor(output)
|
||||
player.setItemOnCursor(result.item)
|
||||
} else {// We assume SlotType == SlotType.INVENTORY
|
||||
player.inventory.setItem(slotDestination.slot, output)
|
||||
player.inventory.setItem(slotDestination.slot, result.item)
|
||||
}
|
||||
|
||||
// TODO probably anvil damage & sound here ??
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package xyz.alexcrea.cuanvil.listener
|
||||
|
||||
import com.github.stefvanschie.inventoryframework.util.InventoryViewUtil
|
||||
import io.delilaheve.CustomAnvil
|
||||
import io.delilaheve.util.ConfigOptions
|
||||
import io.delilaheve.util.ItemUtil.canMergeWith
|
||||
|
|
@ -20,7 +21,6 @@ import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.testCustomRecipe
|
|||
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.testLoreEdit
|
||||
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.testUnitRepair
|
||||
import xyz.alexcrea.cuanvil.dependency.DependencyManager
|
||||
import xyz.alexcrea.cuanvil.util.JustForEasierHotswapUtil
|
||||
import xyz.alexcrea.cuanvil.util.MaterialUtil.isAir
|
||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil
|
||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil.AnvilCost
|
||||
|
|
@ -49,7 +49,7 @@ class PrepareAnvilListener : Listener {
|
|||
val view = event.view
|
||||
val inventory = event.inventory
|
||||
|
||||
val player = JustForEasierHotswapUtil.getPlayerFromView(view)
|
||||
val player = InventoryViewUtil.getInstance().getPlayer(view)
|
||||
if(player !is Player) return
|
||||
|
||||
tryRenameDialog(player, event)
|
||||
|
|
|
|||
|
|
@ -1,17 +0,0 @@
|
|||
package xyz.alexcrea.cuanvil.util
|
||||
|
||||
import com.github.stefvanschie.inventoryframework.util.InventoryViewUtil
|
||||
import org.bukkit.entity.HumanEntity
|
||||
import org.bukkit.inventory.InventoryView
|
||||
|
||||
// Hotswap to not relocate
|
||||
// So I just put small thing calling relocating method here to enable to hotswap more class
|
||||
// Especially for PrepareAnvilListener
|
||||
// Will be able to replace that on legacy removal so really temporary
|
||||
object JustForEasierHotswapUtil {
|
||||
|
||||
fun getPlayerFromView(view: InventoryView): HumanEntity {
|
||||
return InventoryViewUtil.getInstance().getPlayer(view)
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue