v1.7.2
This commit is contained in:
parent
d0af42f291
commit
ffe3514de8
28
src/main/java/com/io/yutian/aulib/util/InventoryUtil.java
Normal file
28
src/main/java/com/io/yutian/aulib/util/InventoryUtil.java
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
package com.io.yutian.aulib.util;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class InventoryUtil {
|
||||||
|
|
||||||
|
public static void takeItemStack(Inventory inventory, ItemStack itemStack, int amount) {
|
||||||
|
int index = -1;
|
||||||
|
int nowAmount = amount;
|
||||||
|
while (index < inventory.getSize() && nowAmount > 0) {
|
||||||
|
++index;
|
||||||
|
ItemStack i = inventory.getItem(index);
|
||||||
|
if (i != null && ItemStackUtil.matches(itemStack, i)) {
|
||||||
|
int k = i.getAmount();
|
||||||
|
if (k < nowAmount) {
|
||||||
|
i.setType(Material.AIR);
|
||||||
|
} else {
|
||||||
|
int l = k - nowAmount;
|
||||||
|
i.setAmount(l);
|
||||||
|
}
|
||||||
|
nowAmount -= k;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
99
src/main/java/com/io/yutian/aulib/util/ItemStackUtil.java
Normal file
99
src/main/java/com/io/yutian/aulib/util/ItemStackUtil.java
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
package com.io.yutian.aulib.util;
|
||||||
|
|
||||||
|
import com.io.yutian.aulib.nbt.NBTCompound;
|
||||||
|
import com.io.yutian.aulib.nbt.NBTItem;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ItemStackUtil {
|
||||||
|
|
||||||
|
public static List<ItemStack> mergeItems(ItemStack item, int amount) {
|
||||||
|
int maxStackSize = item.getMaxStackSize();
|
||||||
|
int totalAmount = amount;
|
||||||
|
int remainder = totalAmount % maxStackSize;
|
||||||
|
int quotient = totalAmount / maxStackSize;
|
||||||
|
List<ItemStack> items = new ArrayList<>();
|
||||||
|
for (int i = 0; i < quotient; i++) {
|
||||||
|
ItemStack itemStack = item.clone();
|
||||||
|
itemStack.setAmount(maxStackSize);
|
||||||
|
items.add(itemStack);
|
||||||
|
}
|
||||||
|
ItemStack itemStack = item.clone();
|
||||||
|
itemStack.setAmount(remainder);
|
||||||
|
items.add(itemStack);
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean matches(@Nullable ItemStack original, @Nullable ItemStack tester) {
|
||||||
|
if (original == null || tester == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
original = original.clone();
|
||||||
|
original.setAmount(1);
|
||||||
|
tester = tester.clone();
|
||||||
|
tester.setAmount(1);
|
||||||
|
Material comparisonType = original.getType().isLegacy() ? Bukkit.getUnsafe().fromLegacy(original.getData(), true) : original.getType();
|
||||||
|
boolean flag = comparisonType == tester.getType() && original.getDurability() == tester.getDurability() && original.hasItemMeta() == tester.hasItemMeta() && (!original.hasItemMeta() || Bukkit.getItemFactory().equals(original.getItemMeta(), tester.getItemMeta()));
|
||||||
|
if (!flag) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
NBTItem nbtOriginal = new NBTItem(original);
|
||||||
|
NBTItem nbtTester = new NBTItem(tester);
|
||||||
|
NBTCompound nbtCompound0 = nbtOriginal.getTag();
|
||||||
|
NBTCompound nbtCompound1 = nbtTester.getTag();
|
||||||
|
return nbtCompound0.equals(nbtCompound1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int countItems(Inventory inventory, @NotNull ItemStack item) {
|
||||||
|
if (inventory == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int count = 0;
|
||||||
|
for (ItemStack itemStack : inventory) {
|
||||||
|
if (itemStack == null || itemStack.getType() == Material.AIR) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (matches(item, itemStack)) {
|
||||||
|
count+= itemStack.getAmount();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int countSpace(Inventory inventory, @NotNull ItemStack item) {
|
||||||
|
if (inventory == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int count = 0;
|
||||||
|
int itemMaxStackSize = item.getMaxStackSize();
|
||||||
|
for (ItemStack itemStack : inventory) {
|
||||||
|
if (itemStack == null || itemStack.getType() == Material.AIR) {
|
||||||
|
count+=itemMaxStackSize;
|
||||||
|
} else if (matches(item, itemStack)) {
|
||||||
|
count+=itemStack.getAmount() >= itemMaxStackSize ? 0 : itemMaxStackSize - itemStack.getAmount();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getItemName(ItemStack itemStack) {
|
||||||
|
ItemMeta meta = itemStack.getItemMeta();
|
||||||
|
if (meta != null && meta.hasDisplayName()) {
|
||||||
|
return meta.getDisplayName();
|
||||||
|
}
|
||||||
|
Material material = itemStack.getType();
|
||||||
|
String id = material.name().toLowerCase();
|
||||||
|
boolean isBlock = material.isBlock();
|
||||||
|
String prefix = isBlock ? "block" : "item";
|
||||||
|
return LangUtil.getLang(prefix+".minecraft."+id);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
name: AuLib
|
name: AuLib
|
||||||
main: com.io.yutian.aulib.AuLib
|
main: com.io.yutian.aulib.AuLib
|
||||||
version: 1.7.3
|
version: 1.8
|
||||||
api-version: 1.18
|
api-version: 1.18
|
||||||
author: SuperYuTian
|
author: SuperYuTian
|
Loading…
Reference in New Issue
Block a user