mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 08:14:00 +02:00
no price on no result
This commit is contained in:
parent
7aac325c70
commit
3992ce1662
3 changed files with 48 additions and 24 deletions
|
|
@ -54,25 +54,26 @@ class PrepareAnvilListener : Listener {
|
||||||
*/
|
*/
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
fun anvilCombineCheck(event: PrepareAnvilEvent) {
|
fun anvilCombineCheck(event: PrepareAnvilEvent) {
|
||||||
// Should find player
|
val view = event.view
|
||||||
val player = InventoryViewUtil.getInstance().getPlayer(event.view)
|
|
||||||
if(player !is Player) return
|
|
||||||
val inventory = event.inventory
|
val inventory = event.inventory
|
||||||
|
|
||||||
|
val player = JustForEasierHotswapUtil.getPlayerFromView(view)
|
||||||
|
if(player !is Player) return
|
||||||
|
|
||||||
tryRenameDialog(player, event)
|
tryRenameDialog(player, event)
|
||||||
|
|
||||||
// Test if custom anvil is bypassed before immutability test
|
// Test if custom anvil is bypassed before immutability test
|
||||||
if (DependencyManager.earlyTryEventPreAnvilBypass(event, player)) {
|
if (DependencyManager.earlyTryEventPreAnvilBypass(event, player)) {
|
||||||
// even if we got bypassed we still want to set price
|
// even if we got bypassed we still want to set price
|
||||||
AnvilXpUtil.setAnvilInvCost(inventory, event.view, player, AnvilCost(event.inventory.repairCost))
|
AnvilXpUtil.setAnvilInvCost(inventory, view, player, AnvilCost(event.inventory.repairCost))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
val first = inventory.getItem(ANVIL_INPUT_LEFT) ?: return
|
val first = inventory.getItem(ANVIL_INPUT_LEFT)
|
||||||
val second = inventory.getItem(ANVIL_INPUT_RIGHT)
|
val second = inventory.getItem(ANVIL_INPUT_RIGHT)
|
||||||
|
|
||||||
if(IS_EMPTY_TEST) {
|
if(IS_EMPTY_TEST) {
|
||||||
event.result = null
|
setNoResult(event, player, view)
|
||||||
IS_EMPTY_TEST = false
|
IS_EMPTY_TEST = false
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
@ -85,33 +86,40 @@ class PrepareAnvilListener : Listener {
|
||||||
if (isImmutable(first) || isImmutable(second)) {
|
if (isImmutable(first) || isImmutable(second)) {
|
||||||
CustomAnvil.verboseLog("Skipping anvil process as one of the two item is immutable")
|
CustomAnvil.verboseLog("Skipping anvil process as one of the two item is immutable")
|
||||||
|
|
||||||
event.result = null
|
setNoResult(event, player, view)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test if the event should bypass custom anvil.
|
// Test if the event should bypass custom anvil.
|
||||||
if (DependencyManager.tryEventPreAnvilBypass(event, player)) {
|
if (DependencyManager.tryEventPreAnvilBypass(event, player)) {
|
||||||
// even if we got bypassed we still want to set price
|
// even if we got bypassed we still want to set price
|
||||||
AnvilXpUtil.setAnvilInvCost(inventory, event.view, player, AnvilCost(event.inventory.repairCost))
|
AnvilXpUtil.setAnvilInvCost(inventory, view, player, AnvilCost(event.inventory.repairCost))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!player.hasPermission(CustomAnvil.affectedByPluginPermission)) return
|
if (!player.hasPermission(CustomAnvil.affectedByPluginPermission)) return
|
||||||
|
|
||||||
|
if(first == null) {
|
||||||
|
setNoResult(event, player, view)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Test custom recipe
|
// Test custom recipe
|
||||||
if (testCustomRecipe(event, inventory, player, first, second)) return
|
if (testCustomRecipe(event, inventory, player, first, second)) return
|
||||||
|
|
||||||
// Test rename lonely item
|
// Test rename lonely item
|
||||||
val isAir = second.isAir
|
val shouldTryRename = second.isAir
|
||||||
CustomAnvil.verboseLog("checking air in main logic: $isAir")
|
CustomAnvil.verboseLog("checking air in main logic: $shouldTryRename")
|
||||||
if (isAir) {
|
if (shouldTryRename) {
|
||||||
doRenaming(event, inventory, player, first)
|
if(!doRenaming(event, inventory, player, first))
|
||||||
|
setNoResult(event, player, view)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test for merge
|
// Test for merge
|
||||||
if (first.canMergeWith(second!!)) {
|
if (first.canMergeWith(second!!)) {
|
||||||
doMerge(event, inventory, player, first, second)
|
if(!doMerge(event, inventory, player, first, second))
|
||||||
|
setNoResult(event, player, view)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -121,13 +129,12 @@ class PrepareAnvilListener : Listener {
|
||||||
// Test for lore edit
|
// Test for lore edit
|
||||||
if (testLoreEdit(event, inventory, player, first, second)) return
|
if (testLoreEdit(event, inventory, player, first, second)) return
|
||||||
|
|
||||||
event.result = null
|
setNoResult(event, player, view)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setNoResult(event: PrepareAnvilEvent, view: InventoryView) {
|
private fun setNoResult(event: PrepareAnvilEvent, player: Player, view: InventoryView) {
|
||||||
event.result = null
|
event.result = null
|
||||||
// TODO AnvilXpUtil.onNoResult(view)
|
AnvilXpUtil.onNoResult(player, view)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun tryRenameDialog(
|
private fun tryRenameDialog(
|
||||||
|
|
@ -209,7 +216,7 @@ class PrepareAnvilListener : Listener {
|
||||||
private fun doRenaming(
|
private fun doRenaming(
|
||||||
event: PrepareAnvilEvent, inventory: AnvilInventory,
|
event: PrepareAnvilEvent, inventory: AnvilInventory,
|
||||||
player: Player, first: ItemStack
|
player: Player, first: ItemStack
|
||||||
) {
|
): Boolean {
|
||||||
val resultItem = DependencyManager.cloneItem(event, first)
|
val resultItem = DependencyManager.cloneItem(event, first)
|
||||||
val cost = AnvilCost()
|
val cost = AnvilCost()
|
||||||
cost.rename = handleRename(resultItem, inventory, player)
|
cost.rename = handleRename(resultItem, inventory, player)
|
||||||
|
|
@ -217,14 +224,14 @@ class PrepareAnvilListener : Listener {
|
||||||
// Test/stop if nothing changed.
|
// Test/stop if nothing changed.
|
||||||
if (first == resultItem) {
|
if (first == resultItem) {
|
||||||
CustomAnvil.log("no right item, But input is same as output")
|
CustomAnvil.log("no right item, But input is same as output")
|
||||||
event.result = null
|
return false
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cost.workPenalty = AnvilXpUtil.calculatePenalty(first, null, resultItem, AnvilUseType.RENAME_ONLY)
|
cost.workPenalty = AnvilXpUtil.calculatePenalty(first, null, resultItem, AnvilUseType.RENAME_ONLY)
|
||||||
|
|
||||||
event.result = DependencyManager.tryTreatAnvilResult(event, resultItem, AnvilUseType.RENAME_ONLY, cost)
|
event.result = DependencyManager.tryTreatAnvilResult(event, resultItem, AnvilUseType.RENAME_ONLY, cost)
|
||||||
AnvilXpUtil.setAnvilInvCost(inventory, event.view, player, cost)
|
AnvilXpUtil.setAnvilInvCost(inventory, event.view, player, cost)
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleRename(resultItem: ItemStack, inventory: AnvilInventory, player: HumanEntity): Int {
|
private fun handleRename(resultItem: ItemStack, inventory: AnvilInventory, player: HumanEntity): Int {
|
||||||
|
|
@ -275,7 +282,7 @@ class PrepareAnvilListener : Listener {
|
||||||
event: PrepareAnvilEvent, inventory: AnvilInventory,
|
event: PrepareAnvilEvent, inventory: AnvilInventory,
|
||||||
player: Player,
|
player: Player,
|
||||||
first: ItemStack, second: ItemStack
|
first: ItemStack, second: ItemStack
|
||||||
) {
|
): Boolean {
|
||||||
val newEnchants = first.findEnchantments()
|
val newEnchants = first.findEnchantments()
|
||||||
.combineWith(second.findEnchantments(), first, player)
|
.combineWith(second.findEnchantments(), first, player)
|
||||||
var hasChanged = !isIdentical(first.findEnchantments(), newEnchants)
|
var hasChanged = !isIdentical(first.findEnchantments(), newEnchants)
|
||||||
|
|
@ -299,8 +306,7 @@ class PrepareAnvilListener : Listener {
|
||||||
// Test/stop if nothing changed.
|
// Test/stop if nothing changed.
|
||||||
if (!hasChanged) {
|
if (!hasChanged) {
|
||||||
CustomAnvil.log("Mergeable with second, But input is same as output")
|
CustomAnvil.log("Mergeable with second, But input is same as output")
|
||||||
event.result = null
|
return false
|
||||||
return
|
|
||||||
}
|
}
|
||||||
// As calculatePenalty edit result, we need to calculate penalty after checking equality
|
// As calculatePenalty edit result, we need to calculate penalty after checking equality
|
||||||
cost.workPenalty = AnvilXpUtil.calculatePenalty(first, second, resultItem, AnvilUseType.MERGE)
|
cost.workPenalty = AnvilXpUtil.calculatePenalty(first, second, resultItem, AnvilUseType.MERGE)
|
||||||
|
|
@ -310,6 +316,7 @@ class PrepareAnvilListener : Listener {
|
||||||
// Finally, we set result
|
// Finally, we set result
|
||||||
event.result = DependencyManager.tryTreatAnvilResult(event, resultItem, AnvilUseType.MERGE, cost)
|
event.result = DependencyManager.tryTreatAnvilResult(event, resultItem, AnvilUseType.MERGE, cost)
|
||||||
AnvilXpUtil.setAnvilInvCost(inventory, event.view, player, cost)
|
AnvilXpUtil.setAnvilInvCost(inventory, event.view, player, cost)
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isIdentical(
|
private fun isIdentical(
|
||||||
|
|
|
||||||
|
|
@ -232,7 +232,7 @@ object AnvilXpUtil {
|
||||||
|
|
||||||
fun onNoResult(player: HumanEntity, view: InventoryView) {
|
fun onNoResult(player: HumanEntity, view: InventoryView) {
|
||||||
if (ConfigOptions.shouldUseMoney(player))
|
if (ConfigOptions.shouldUseMoney(player))
|
||||||
AnvilTitleUtil.rename(view, "",
|
AnvilTitleUtil.rename(view, "Repair & Name",
|
||||||
player,
|
player,
|
||||||
AnvilRenameDialogUtil.anvilRenameDialog,
|
AnvilRenameDialogUtil.anvilRenameDialog,
|
||||||
CustomAnvil.instance)
|
CustomAnvil.instance)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
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