mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 16:16:17 +02:00
rebase on new update
This commit is contained in:
parent
f97e3c937d
commit
c1d67a3821
7 changed files with 32 additions and 71 deletions
|
|
@ -1,18 +0,0 @@
|
||||||
package xyz.alexcrea.cuanvil.util
|
|
||||||
|
|
||||||
import org.bukkit.inventory.meta.Damageable
|
|
||||||
|
|
||||||
// I LOVE support of old versions and needing to do modules like that
|
|
||||||
// That truly is my favorite activity
|
|
||||||
// TODO clean this one of legacy removal branch
|
|
||||||
object MaxDamageCheckerUtil {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return max damage or int max if not set
|
|
||||||
*/
|
|
||||||
fun getMaxDamage(meta: Damageable): Int {
|
|
||||||
if(!meta.hasMaxDamage()) return Integer.MAX_VALUE
|
|
||||||
return meta.maxDamage
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -5,6 +5,7 @@ import org.bukkit.event.HandlerList;
|
||||||
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 org.bukkit.inventory.view.AnvilView;
|
||||||
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;
|
||||||
|
|
@ -21,7 +22,7 @@ import xyz.alexcrea.cuanvil.anvil.AnvilUseType;
|
||||||
* <p>
|
* <p>
|
||||||
* A null result will cancel this event
|
* A null result will cancel this event
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings({"unused", "UnstableApiUsage"})
|
||||||
public class CATreatAnvilResult2Event extends Event {
|
public class CATreatAnvilResult2Event extends Event {
|
||||||
|
|
||||||
private static final HandlerList HANDLERS = new HandlerList();
|
private static final HandlerList HANDLERS = new HandlerList();
|
||||||
|
|
@ -36,7 +37,7 @@ public class CATreatAnvilResult2Event extends Event {
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private final InventoryView view;
|
private final AnvilView view;
|
||||||
|
|
||||||
private final AnvilUseType useType;
|
private final AnvilUseType useType;
|
||||||
|
|
||||||
|
|
@ -50,32 +51,26 @@ public class CATreatAnvilResult2Event extends Event {
|
||||||
|
|
||||||
private final AnvilCost cost;
|
private final AnvilCost cost;
|
||||||
|
|
||||||
@ApiStatus.Internal
|
|
||||||
public CATreatAnvilResult2Event(
|
public CATreatAnvilResult2Event(
|
||||||
@NotNull InventoryView view,
|
@NotNull AnvilView view,
|
||||||
Inventory inv,
|
|
||||||
AnvilUseType useType,
|
AnvilUseType useType,
|
||||||
@Nullable ItemStack result,
|
@Nullable ItemStack result,
|
||||||
AnvilCost cost) {
|
AnvilCost cost) {
|
||||||
this.view = view;
|
this.view = view;
|
||||||
this.useType = useType;
|
this.useType = useType;
|
||||||
|
|
||||||
this.left = inv.getItem(0); // TODO use view here
|
this.left = view.getItem(0);
|
||||||
this.right = inv.getItem(1);
|
this.right = view.getItem(1);
|
||||||
this.result = result;
|
this.result = result;
|
||||||
this.cost = cost;
|
this.cost = cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the bukkit inventory view.
|
* Get the bukkit inventory view.
|
||||||
* <p>
|
|
||||||
* Temporarily marked as internal as it will get changed to anvil view on legacy removal
|
|
||||||
* so signature will change
|
|
||||||
*
|
*
|
||||||
* @return The inventory view of this event.
|
* @return The inventory view of this event.
|
||||||
*/
|
*/
|
||||||
@ApiStatus.Internal
|
public @NotNull AnvilView getView() {
|
||||||
public @NotNull InventoryView getView() {
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,6 @@ import org.bukkit.ChatColor
|
||||||
import org.bukkit.Material
|
import org.bukkit.Material
|
||||||
import org.bukkit.entity.HumanEntity
|
import org.bukkit.entity.HumanEntity
|
||||||
import org.bukkit.entity.Player
|
import org.bukkit.entity.Player
|
||||||
import org.bukkit.inventory.AnvilInventory
|
|
||||||
import org.bukkit.inventory.InventoryView
|
|
||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
import org.bukkit.inventory.meta.ItemMeta
|
import org.bukkit.inventory.meta.ItemMeta
|
||||||
import org.bukkit.inventory.view.AnvilView
|
import org.bukkit.inventory.view.AnvilView
|
||||||
|
|
@ -100,8 +98,7 @@ object AnvilMergeLogic {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun doRenaming(
|
fun doRenaming(
|
||||||
view: InventoryView, //TODO use anvil view
|
view: AnvilView,
|
||||||
inventory: AnvilInventory,
|
|
||||||
player: Player, first: ItemStack
|
player: Player, first: ItemStack
|
||||||
): AnvilResult {
|
): AnvilResult {
|
||||||
val resultItem = DependencyManager.cloneItem(player, first)
|
val resultItem = DependencyManager.cloneItem(player, first)
|
||||||
|
|
@ -116,7 +113,7 @@ object AnvilMergeLogic {
|
||||||
|
|
||||||
cost.workPenalty = AnvilXpUtil.calculatePenalty(first, null, resultItem, AnvilUseType.RENAME_ONLY)
|
cost.workPenalty = AnvilXpUtil.calculatePenalty(first, null, resultItem, AnvilUseType.RENAME_ONLY)
|
||||||
val result =
|
val result =
|
||||||
DependencyManager.tryTreatAnvilResult(view, inventory, player, resultItem, AnvilUseType.RENAME_ONLY, cost)
|
DependencyManager.tryTreatAnvilResult(view, player, resultItem, AnvilUseType.RENAME_ONLY, cost)
|
||||||
|
|
||||||
return AnvilResult(result, cost)
|
return AnvilResult(result, cost)
|
||||||
}
|
}
|
||||||
|
|
@ -186,8 +183,7 @@ object AnvilMergeLogic {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun doMerge(
|
fun doMerge(
|
||||||
view: InventoryView, //TODO use anvil view instead
|
view: AnvilView,
|
||||||
inventory: AnvilInventory,
|
|
||||||
player: Player,
|
player: Player,
|
||||||
first: ItemStack, second: ItemStack
|
first: ItemStack, second: ItemStack
|
||||||
): AnvilResult {
|
): AnvilResult {
|
||||||
|
|
@ -222,7 +218,7 @@ object AnvilMergeLogic {
|
||||||
cost.rename = handleRename(resultItem, view, player)
|
cost.rename = handleRename(resultItem, view, player)
|
||||||
|
|
||||||
val result =
|
val result =
|
||||||
DependencyManager.tryTreatAnvilResult(view, inventory, player, resultItem, AnvilUseType.MERGE, cost)
|
DependencyManager.tryTreatAnvilResult(view, player, resultItem, AnvilUseType.MERGE, cost)
|
||||||
|
|
||||||
return AnvilResult(result, cost)
|
return AnvilResult(result, cost)
|
||||||
}
|
}
|
||||||
|
|
@ -241,8 +237,7 @@ object AnvilMergeLogic {
|
||||||
|
|
||||||
// return true if a custom recipe exist with these ingredients
|
// return true if a custom recipe exist with these ingredients
|
||||||
fun testCustomRecipe(
|
fun testCustomRecipe(
|
||||||
view: InventoryView, //TODO use anvil view instead
|
view: AnvilView,
|
||||||
inventory: AnvilInventory,
|
|
||||||
player: Player,
|
player: Player,
|
||||||
first: ItemStack, second: ItemStack?
|
first: ItemStack, second: ItemStack?
|
||||||
): CustomCraftResult {
|
): CustomCraftResult {
|
||||||
|
|
@ -264,24 +259,22 @@ object AnvilMergeLogic {
|
||||||
else AnvilXpUtil.calculateLevelForXp(xpCost)
|
else AnvilXpUtil.calculateLevelForXp(xpCost)
|
||||||
|
|
||||||
val result =
|
val result =
|
||||||
DependencyManager.tryTreatAnvilResult(view, inventory, player, resultItem, AnvilUseType.CUSTOM_CRAFT, cost)
|
DependencyManager.tryTreatAnvilResult(view, player, resultItem, AnvilUseType.CUSTOM_CRAFT, cost)
|
||||||
return CustomCraftResult(result, cost, amount, recipe)
|
return CustomCraftResult(result, cost, amount, recipe)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun testUnitRepair(
|
fun testUnitRepair(
|
||||||
view: InventoryView, //TODO use anvil view
|
view: AnvilView,
|
||||||
inventory: AnvilInventory,
|
|
||||||
player: Player,
|
player: Player,
|
||||||
first: ItemStack, second: ItemStack
|
first: ItemStack, second: ItemStack
|
||||||
): UnitRepairResult {
|
): UnitRepairResult {
|
||||||
val unitRepairAmount = first.getRepair(second) ?: return UnitRepairResult.EMPTY
|
val unitRepairAmount = first.getRepair(second) ?: return UnitRepairResult.EMPTY
|
||||||
|
|
||||||
return testUnitRepair(view, inventory, player, first, second, unitRepairAmount)
|
return testUnitRepair(view, player, first, second, unitRepairAmount)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun testUnitRepair(
|
fun testUnitRepair(
|
||||||
view: InventoryView, //TODO use anvil view instead
|
view: AnvilView,
|
||||||
inventory: AnvilInventory,
|
|
||||||
player: Player,
|
player: Player,
|
||||||
first: ItemStack, second: ItemStack,
|
first: ItemStack, second: ItemStack,
|
||||||
unitRepairAmount: Double
|
unitRepairAmount: Double
|
||||||
|
|
@ -304,7 +297,7 @@ object AnvilMergeLogic {
|
||||||
}
|
}
|
||||||
|
|
||||||
val result =
|
val result =
|
||||||
DependencyManager.tryTreatAnvilResult(view, inventory, player, resultItem, AnvilUseType.UNIT_REPAIR, cost)
|
DependencyManager.tryTreatAnvilResult(view, player, resultItem, AnvilUseType.UNIT_REPAIR, cost)
|
||||||
return UnitRepairResult(result, cost, repairAmount)
|
return UnitRepairResult(result, cost, repairAmount)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,6 @@ import org.bukkit.entity.HumanEntity
|
||||||
import org.bukkit.entity.Player
|
import org.bukkit.entity.Player
|
||||||
import org.bukkit.event.inventory.InventoryClickEvent
|
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.Inventory
|
|
||||||
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.AnvilCost
|
||||||
import org.bukkit.inventory.view.AnvilView
|
import org.bukkit.inventory.view.AnvilView
|
||||||
|
|
@ -234,19 +231,18 @@ object DependencyManager {
|
||||||
|
|
||||||
// Return null if there was an issue
|
// Return null if there was an issue
|
||||||
fun tryTreatAnvilResult(
|
fun tryTreatAnvilResult(
|
||||||
view: InventoryView,
|
view: AnvilView,
|
||||||
inventory: Inventory, // TODO REMOVE, use view instead on legacy removal
|
|
||||||
player: HumanEntity,
|
player: HumanEntity,
|
||||||
result: ItemStack,
|
result: ItemStack,
|
||||||
useType: AnvilUseType,
|
useType: AnvilUseType,
|
||||||
cost: AnvilCost
|
cost: AnvilCost
|
||||||
): ItemStack? {
|
): ItemStack? {
|
||||||
val treatEvent = CATreatAnvilResult2Event(view, inventory, useType, result, cost)
|
val treatEvent = CATreatAnvilResult2Event(view, useType, result, cost)
|
||||||
try {
|
try {
|
||||||
unsafeTryTreatAnvilResult(treatEvent)
|
unsafeTryTreatAnvilResult(treatEvent)
|
||||||
return treatEvent.result
|
return treatEvent.result
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
logExceptionAndClear(player, inventory, e)
|
logExceptionAndClear(view, e)
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,6 @@ class AnvilResultListener : Listener {
|
||||||
fun anvilExtractionCheck(event: InventoryClickEvent) {
|
fun anvilExtractionCheck(event: InventoryClickEvent) {
|
||||||
val player = event.whoClicked as? Player ?: return
|
val player = event.whoClicked as? Player ?: return
|
||||||
val view = event.view as? AnvilView ?: return
|
val view = event.view as? AnvilView ?: return
|
||||||
val view = event.view
|
|
||||||
|
|
||||||
if (event.rawSlot != ANVIL_OUTPUT_SLOT) {
|
if (event.rawSlot != ANVIL_OUTPUT_SLOT) {
|
||||||
return
|
return
|
||||||
|
|
@ -74,7 +73,7 @@ class AnvilResultListener : Listener {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test custom recipe
|
// Test custom recipe
|
||||||
val customRecipeResult = AnvilMergeLogic.testCustomRecipe(view, inventory, player, leftItem, rightItem)
|
val customRecipeResult = AnvilMergeLogic.testCustomRecipe(view, player, leftItem, rightItem)
|
||||||
if (!customRecipeResult.isEmpty()) {
|
if (!customRecipeResult.isEmpty()) {
|
||||||
onCustomCraft(
|
onCustomCraft(
|
||||||
event, player, view,
|
event, player, view,
|
||||||
|
|
@ -90,7 +89,7 @@ class AnvilResultListener : Listener {
|
||||||
|
|
||||||
// Rename
|
// Rename
|
||||||
if (rightItem == null) {
|
if (rightItem == null) {
|
||||||
val result = AnvilMergeLogic.doRenaming(view, inventory, player, leftItem)
|
val result = AnvilMergeLogic.doRenaming(view, player, leftItem)
|
||||||
if (result.isEmpty()) return
|
if (result.isEmpty()) return
|
||||||
|
|
||||||
extractAnvilResult(
|
extractAnvilResult(
|
||||||
|
|
@ -105,7 +104,7 @@ class AnvilResultListener : Listener {
|
||||||
// Merge
|
// Merge
|
||||||
val canMerge = leftItem.canMergeWith(rightItem)
|
val canMerge = leftItem.canMergeWith(rightItem)
|
||||||
if (canMerge) {
|
if (canMerge) {
|
||||||
val result = AnvilMergeLogic.doMerge(view, inventory, player, leftItem, rightItem)
|
val result = AnvilMergeLogic.doMerge(view, player, leftItem, rightItem)
|
||||||
|
|
||||||
extractAnvilResult(
|
extractAnvilResult(
|
||||||
event, player, view,
|
event, player, view,
|
||||||
|
|
@ -118,7 +117,7 @@ class AnvilResultListener : Listener {
|
||||||
|
|
||||||
// Unit repair
|
// Unit repair
|
||||||
val unitRepairResult = AnvilMergeLogic.testUnitRepair(
|
val unitRepairResult = AnvilMergeLogic.testUnitRepair(
|
||||||
view, inventory, player,
|
view, player,
|
||||||
leftItem, rightItem
|
leftItem, rightItem
|
||||||
)
|
)
|
||||||
if (!unitRepairResult.isEmpty()) {
|
if (!unitRepairResult.isEmpty()) {
|
||||||
|
|
@ -180,7 +179,6 @@ class AnvilResultListener : Listener {
|
||||||
// Handle not creative middle click...
|
// Handle not creative middle click...
|
||||||
if (event.click != ClickType.MIDDLE &&
|
if (event.click != ClickType.MIDDLE &&
|
||||||
!handleCustomCraftClick(
|
!handleCustomCraftClick(
|
||||||
event,
|
|
||||||
view,
|
view,
|
||||||
player,
|
player,
|
||||||
leftItem,
|
leftItem,
|
||||||
|
|
@ -198,7 +196,6 @@ class AnvilResultListener : Listener {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleCustomCraftClick(
|
private fun handleCustomCraftClick(
|
||||||
event: InventoryClickEvent,
|
|
||||||
view: AnvilView, player: Player,
|
view: AnvilView, player: Player,
|
||||||
leftItem: ItemStack, rightItem: ItemStack?,
|
leftItem: ItemStack, rightItem: ItemStack?,
|
||||||
result: CustomCraftResult
|
result: CustomCraftResult
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,6 @@ import org.bukkit.event.EventHandler
|
||||||
import org.bukkit.event.EventPriority
|
import org.bukkit.event.EventPriority
|
||||||
import org.bukkit.event.Listener
|
import org.bukkit.event.Listener
|
||||||
import org.bukkit.event.inventory.PrepareAnvilEvent
|
import org.bukkit.event.inventory.PrepareAnvilEvent
|
||||||
import org.bukkit.inventory.AnvilInventory
|
|
||||||
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
|
||||||
|
|
@ -92,13 +90,12 @@ class PrepareAnvilListener : Listener {
|
||||||
|
|
||||||
if (!player.hasPermission(CustomAnvil.affectedByPluginPermission)) return
|
if (!player.hasPermission(CustomAnvil.affectedByPluginPermission)) return
|
||||||
|
|
||||||
val result = getResult(view, inventory, player, first, second)
|
val result = getResult(view, player, first, second)
|
||||||
applyResult(event, player, result)
|
applyResult(event, player, result)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getResult(
|
fun getResult(
|
||||||
view: InventoryView, //TODO use anvil view
|
view: AnvilView,
|
||||||
inventory: AnvilInventory,
|
|
||||||
player: Player,
|
player: Player,
|
||||||
first: ItemStack?, second: ItemStack?
|
first: ItemStack?, second: ItemStack?
|
||||||
): AnvilResult {
|
): AnvilResult {
|
||||||
|
|
@ -106,7 +103,7 @@ class PrepareAnvilListener : Listener {
|
||||||
return AnvilResult.EMPTY
|
return AnvilResult.EMPTY
|
||||||
|
|
||||||
// Test custom recipe
|
// Test custom recipe
|
||||||
var result: AnvilResult = testCustomRecipe(view, inventory, player, first, second)
|
var result: AnvilResult = testCustomRecipe(view, player, first, second)
|
||||||
if (!result.isEmpty())
|
if (!result.isEmpty())
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
@ -114,14 +111,14 @@ class PrepareAnvilListener : Listener {
|
||||||
val shouldTryRename = second.isAir
|
val shouldTryRename = second.isAir
|
||||||
CustomAnvil.verboseLog("checking air in main logic: $shouldTryRename")
|
CustomAnvil.verboseLog("checking air in main logic: $shouldTryRename")
|
||||||
if (shouldTryRename)
|
if (shouldTryRename)
|
||||||
return doRenaming(view, inventory, player, first)
|
return doRenaming(view, player, first)
|
||||||
|
|
||||||
// Test for merge
|
// Test for merge
|
||||||
if (first.canMergeWith(second!!))
|
if (first.canMergeWith(second!!))
|
||||||
return doMerge(view, inventory, player, first, second)
|
return doMerge(view, player, first, second)
|
||||||
|
|
||||||
// Test for unit repair
|
// Test for unit repair
|
||||||
result = testUnitRepair(view, inventory, player, first, second)
|
result = testUnitRepair(view, player, first, second)
|
||||||
if (!result.isEmpty())
|
if (!result.isEmpty())
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import org.bukkit.GameMode
|
||||||
import org.bukkit.NamespacedKey
|
import org.bukkit.NamespacedKey
|
||||||
import org.bukkit.entity.HumanEntity
|
import org.bukkit.entity.HumanEntity
|
||||||
import org.bukkit.entity.Player
|
import org.bukkit.entity.Player
|
||||||
|
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.Repairable
|
import org.bukkit.inventory.meta.Repairable
|
||||||
|
|
@ -180,7 +181,7 @@ object AnvilXpUtil {
|
||||||
return resultSum
|
return resultSum
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onNoResult(player: HumanEntity, view: InventoryView) {
|
fun onNoResult(player: HumanEntity, view: AnvilView) {
|
||||||
if (ConfigOptions.shouldUseMoney(player))
|
if (ConfigOptions.shouldUseMoney(player))
|
||||||
AnvilTitleUtil.rename(
|
AnvilTitleUtil.rename(
|
||||||
view, "Repair & Name",
|
view, "Repair & Name",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue