mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 08:14:00 +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
|
// Rename
|
||||||
if (rightItem == null) {
|
if (rightItem == null) {
|
||||||
// BRUH
|
val result = AnvilMergeLogic.doRenaming(inventory, player, leftItem)
|
||||||
event.result = Event.Result.ALLOW
|
if(result.isEmpty()) return
|
||||||
|
|
||||||
|
extractAnvilResult(
|
||||||
|
event, player, inventory,
|
||||||
|
null, 0,
|
||||||
|
null, 0,
|
||||||
|
result
|
||||||
|
)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Merge
|
// Merge
|
||||||
val canMerge = leftItem.canMergeWith(rightItem)
|
val canMerge = leftItem.canMergeWith(rightItem)
|
||||||
if (canMerge) {
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -195,6 +209,7 @@ class AnvilResultListener : Listener {
|
||||||
inventory.setItem(ANVIL_INPUT_LEFT, leftItem)
|
inventory.setItem(ANVIL_INPUT_LEFT, leftItem)
|
||||||
|
|
||||||
if (player.gameMode != GameMode.CREATIVE) {
|
if (player.gameMode != GameMode.CREATIVE) {
|
||||||
|
//TODO monetary cost ? somehow
|
||||||
if (linearCost) {
|
if (linearCost) {
|
||||||
val levelXp = AnvilXpUtil.calculateXpForLevel(player.level)
|
val levelXp = AnvilXpUtil.calculateXpForLevel(player.level)
|
||||||
val delta = AnvilXpUtil.calculateXpForLevel(player.level + 1) - levelXp
|
val delta = AnvilXpUtil.calculateXpForLevel(player.level + 1) - levelXp
|
||||||
|
|
@ -236,7 +251,18 @@ class AnvilResultListener : Listener {
|
||||||
return true
|
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(
|
private fun extractAnvilResult(
|
||||||
event: InventoryClickEvent,
|
event: InventoryClickEvent,
|
||||||
player: Player,
|
player: Player,
|
||||||
|
|
@ -249,28 +275,13 @@ class AnvilResultListener : Listener {
|
||||||
): Boolean {
|
): Boolean {
|
||||||
if(result.isEmpty()) return false
|
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
|
// To avoid vanilla, we cancel the event
|
||||||
event.result = Event.Result.DENY
|
event.result = Event.Result.DENY
|
||||||
event.isCancelled = true
|
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
|
// Where should we get the item
|
||||||
val slotDestination = getActionSlot(event, player)
|
val slotDestination = getActionSlot(event, player)
|
||||||
|
|
@ -278,12 +289,7 @@ class AnvilResultListener : Listener {
|
||||||
|
|
||||||
// If not creative middle click...
|
// If not creative middle click...
|
||||||
if (event.click != ClickType.MIDDLE) {
|
if (event.click != ClickType.MIDDLE) {
|
||||||
if(cost.isMonetary) {
|
if(!tryRemoveCost(player, cost)) return false
|
||||||
val result = EconomyManager.economy!!.remove(player, cost.asMonetaryCost())
|
|
||||||
if(!result) return false
|
|
||||||
} else {
|
|
||||||
player.level -= cost.asXpCost()
|
|
||||||
}
|
|
||||||
|
|
||||||
// We remove what should be removed
|
// We remove what should be removed
|
||||||
if (leftItem != null) leftItem.amount -= leftRemoveCount
|
if (leftItem != null) leftItem.amount -= leftRemoveCount
|
||||||
|
|
@ -298,9 +304,9 @@ class AnvilResultListener : Listener {
|
||||||
|
|
||||||
// Finally, we add the item to the player
|
// Finally, we add the item to the player
|
||||||
if (SlotType.CURSOR == slotDestination.type) {
|
if (SlotType.CURSOR == slotDestination.type) {
|
||||||
player.setItemOnCursor(output)
|
player.setItemOnCursor(result.item)
|
||||||
} else {// We assume SlotType == SlotType.INVENTORY
|
} 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 ??
|
// TODO probably anvil damage & sound here ??
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package xyz.alexcrea.cuanvil.listener
|
package xyz.alexcrea.cuanvil.listener
|
||||||
|
|
||||||
|
import com.github.stefvanschie.inventoryframework.util.InventoryViewUtil
|
||||||
import io.delilaheve.CustomAnvil
|
import io.delilaheve.CustomAnvil
|
||||||
import io.delilaheve.util.ConfigOptions
|
import io.delilaheve.util.ConfigOptions
|
||||||
import io.delilaheve.util.ItemUtil.canMergeWith
|
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.testLoreEdit
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.testUnitRepair
|
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.testUnitRepair
|
||||||
import xyz.alexcrea.cuanvil.dependency.DependencyManager
|
import xyz.alexcrea.cuanvil.dependency.DependencyManager
|
||||||
import xyz.alexcrea.cuanvil.util.JustForEasierHotswapUtil
|
|
||||||
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.anvil.AnvilXpUtil.AnvilCost
|
||||||
|
|
@ -49,7 +49,7 @@ class PrepareAnvilListener : Listener {
|
||||||
val view = event.view
|
val view = event.view
|
||||||
val inventory = event.inventory
|
val inventory = event.inventory
|
||||||
|
|
||||||
val player = JustForEasierHotswapUtil.getPlayerFromView(view)
|
val player = InventoryViewUtil.getInstance().getPlayer(view)
|
||||||
if(player !is Player) return
|
if(player !is Player) return
|
||||||
|
|
||||||
tryRenameDialog(player, event)
|
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