Writes a lot of code necessary for the scrapper
Adds the classes necessary for the new scrapper Partly implements some scrapper functionality Restructures some classes to reduce code duplication Moves some classes to make some classes easier to find Adds a bunch of TODOs where things have an unfinished implementation
This commit is contained in:
@ -1,9 +1,11 @@
|
||||
package net.knarcraft.blacksmith.util;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.Damageable;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -23,7 +25,7 @@ public final class ItemHelper {
|
||||
* @param item <p>The item to check</p>
|
||||
* @return <p>True if the item is repairable</p>
|
||||
*/
|
||||
public static boolean isRepairable(ItemStack item) {
|
||||
public static boolean isRepairable(@NotNull ItemStack item) {
|
||||
return item.getItemMeta() instanceof Damageable && getMaxDurability(item) > 0;
|
||||
}
|
||||
|
||||
@ -33,7 +35,7 @@ public final class ItemHelper {
|
||||
* @param itemStack <p>The item to get the durability of</p>
|
||||
* @return <p>The max durability of the item</p>
|
||||
*/
|
||||
public static short getMaxDurability(ItemStack itemStack) {
|
||||
public static short getMaxDurability(@NotNull ItemStack itemStack) {
|
||||
return itemStack.getType().getMaxDurability();
|
||||
}
|
||||
|
||||
@ -43,7 +45,7 @@ public final class ItemHelper {
|
||||
* @param itemStack <p>The item to get the durability of</p>
|
||||
* @return <p>The durability of the item</p>
|
||||
*/
|
||||
public static short getDurability(ItemStack itemStack) {
|
||||
public static short getDurability(@NotNull ItemStack itemStack) {
|
||||
Damageable damageable = (Damageable) itemStack.getItemMeta();
|
||||
int maxDurability = getMaxDurability(itemStack);
|
||||
if (damageable != null) {
|
||||
@ -59,7 +61,7 @@ public final class ItemHelper {
|
||||
* @param itemStack <p>The damage done to the item</p>
|
||||
* @return <p>The damage done to the item</p>
|
||||
*/
|
||||
public static short getDamage(ItemStack itemStack) {
|
||||
public static short getDamage(@NotNull ItemStack itemStack) {
|
||||
Damageable damageable = (Damageable) itemStack.getItemMeta();
|
||||
if (damageable != null) {
|
||||
return (short) damageable.getDamage();
|
||||
@ -75,7 +77,7 @@ public final class ItemHelper {
|
||||
* @param newDamage <p>The new damage done</p>
|
||||
* @return <p>True if the damage was updated. False if not damageable.</p>
|
||||
*/
|
||||
public static boolean updateDamage(ItemStack item, int newDamage) {
|
||||
public static boolean updateDamage(@NotNull ItemStack item, int newDamage) {
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
if (!(meta instanceof Damageable damageable)) {
|
||||
return false;
|
||||
@ -90,7 +92,7 @@ public final class ItemHelper {
|
||||
*
|
||||
* @return <p>A complete list of reforge-able materials</p>
|
||||
*/
|
||||
public static List<Material> getAllReforgeAbleMaterials() {
|
||||
public static @NotNull List<Material> getAllReforgeAbleMaterials() {
|
||||
List<Material> reforgeAbleMaterials = new ArrayList<>();
|
||||
for (Material material : Material.values()) {
|
||||
ItemStack item = new ItemStack(material);
|
||||
@ -108,10 +110,49 @@ public final class ItemHelper {
|
||||
* @param requireDamaged <p>Whether only a damaged anvil should count</p>
|
||||
* @return <p>True if the given material is an anvil</p>
|
||||
*/
|
||||
public static boolean isAnvil(Material material, boolean requireDamaged) {
|
||||
public static boolean isAnvil(@NotNull Material material, boolean requireDamaged) {
|
||||
boolean isDamagedAnvil = material == Material.CHIPPED_ANVIL || material == Material.DAMAGED_ANVIL;
|
||||
boolean isAnvil = isDamagedAnvil || material == Material.ANVIL;
|
||||
return (requireDamaged && isDamagedAnvil) || (!requireDamaged && isAnvil);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the given inventory is able to fit the given item
|
||||
*
|
||||
* @param inventory <p>The inventory to check</p>
|
||||
* @param item <p>The item to check</p>
|
||||
* @return <p>True if the inventory can fit the item</p>
|
||||
*/
|
||||
public static boolean canFitItem(@NotNull Inventory inventory, @NotNull ItemStack item) {
|
||||
// If a slot is available, there is no problem
|
||||
if (inventory.firstEmpty() != -1) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// If the inventory doesn't contain the correct type of item, stacking is impossible
|
||||
if (!inventory.contains(item.getType())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if the item stack can fit in the inventory if stacked with existing items
|
||||
int availableSlots = 0;
|
||||
for (ItemStack itemStack : inventory.getStorageContents()) {
|
||||
ItemMeta itemMeta = itemStack.getItemMeta();
|
||||
ItemMeta targetMeta = item.getItemMeta();
|
||||
// Skip items of a different type, or with metadata that would prevent stacking
|
||||
if (itemStack.getType() != item.getType() ||
|
||||
(itemMeta != null && targetMeta != null && !itemMeta.equals(targetMeta))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
availableSlots += itemStack.getMaxStackSize() - itemStack.getAmount();
|
||||
|
||||
if (availableSlots < item.getAmount()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user