ItemStack API additions for quantity/flags/lore

This commit is contained in:
Aikar 2018-06-22 22:59:18 -04:00
parent 9624ed131b
commit fe1b88829d

View file

@ -686,5 +686,185 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
// Requires access to NMS
return ensureServerConversions().getMaxItemUseDuration(entity);
}
/**
* Clones the itemstack and returns it a single quantity.
* @return The new itemstack with 1 quantity
*/
@NotNull
public ItemStack asOne() {
return asQuantity(1);
}
/**
* Clones the itemstack and returns it as the specified quantity
* @param qty The quantity of the cloned item
* @return The new itemstack with specified quantity
*/
@NotNull
public ItemStack asQuantity(int qty) {
ItemStack clone = clone();
clone.setAmount(qty);
return clone;
}
/**
* Adds 1 to this itemstack. Will not go over the items max stack size.
* @return The same item (not a clone)
*/
@NotNull
public ItemStack add() {
return add(1);
}
/**
* Adds quantity to this itemstack. Will not go over the items max stack size.
*
* @param qty The amount to add
* @return The same item (not a clone)
*/
@NotNull
public ItemStack add(int qty) {
setAmount(Math.min(getMaxStackSize(), getAmount() + qty));
return this;
}
/**
* Subtracts 1 to this itemstack. Going to 0 or less will invalidate the item.
* @return The same item (not a clone)
*/
@NotNull
public ItemStack subtract() {
return subtract(1);
}
/**
* Subtracts quantity to this itemstack. Going to 0 or less will invalidate the item.
*
* @param qty The amount to add
* @return The same item (not a clone)
*/
@NotNull
public ItemStack subtract(int qty) {
setAmount(Math.max(0, getAmount() - qty));
return this;
}
/**
* If the item has lore, returns it, else it will return null
* @return The lore, or null
* @deprecated in favor of {@link #lore()}
*/
@Deprecated
public @Nullable java.util.List<String> getLore() {
if (!hasItemMeta()) {
return null;
}
ItemMeta itemMeta = getItemMeta();
if (!itemMeta.hasLore()) {
return null;
}
return itemMeta.getLore();
}
/**
* If the item has lore, returns it, else it will return null
* @return The lore, or null
*/
public @Nullable java.util.List<net.kyori.adventure.text.Component> lore() {
if (!this.hasItemMeta()) {
return null;
}
final ItemMeta itemMeta = getItemMeta();
if (!itemMeta.hasLore()) {
return null;
}
return itemMeta.lore();
}
/**
* Sets the lore for this item.
* Removes lore when given null.
*
* @param lore the lore that will be set
* @deprecated in favour of {@link #lore(java.util.List)}
*/
@Deprecated
public void setLore(@Nullable java.util.List<String> lore) {
ItemMeta itemMeta = getItemMeta();
if (itemMeta == null) {
throw new IllegalStateException("Cannot set lore on " + getType());
}
itemMeta.setLore(lore);
setItemMeta(itemMeta);
}
/**
* Sets the lore for this item.
* Removes lore when given null.
*
* @param lore the lore that will be set
*/
public void lore(@Nullable java.util.List<? extends net.kyori.adventure.text.Component> lore) {
ItemMeta itemMeta = getItemMeta();
if (itemMeta == null) {
throw new IllegalStateException("Cannot set lore on " + getType());
}
itemMeta.lore(lore);
this.setItemMeta(itemMeta);
}
/**
* Set itemflags which should be ignored when rendering a ItemStack in the Client. This Method does silently ignore double set itemFlags.
*
* @param itemFlags The hideflags which shouldn't be rendered
*/
public void addItemFlags(@NotNull ItemFlag... itemFlags) {
ItemMeta itemMeta = getItemMeta();
if (itemMeta == null) {
throw new IllegalStateException("Cannot add flags on " + getType());
}
itemMeta.addItemFlags(itemFlags);
setItemMeta(itemMeta);
}
/**
* Remove specific set of itemFlags. This tells the Client it should render it again. This Method does silently ignore double removed itemFlags.
*
* @param itemFlags Hideflags which should be removed
*/
public void removeItemFlags(@NotNull ItemFlag... itemFlags) {
ItemMeta itemMeta = getItemMeta();
if (itemMeta == null) {
throw new IllegalStateException("Cannot remove flags on " + getType());
}
itemMeta.removeItemFlags(itemFlags);
setItemMeta(itemMeta);
}
/**
* Get current set itemFlags. The collection returned is unmodifiable.
*
* @return A set of all itemFlags set
*/
@NotNull
public java.util.Set<ItemFlag> getItemFlags() {
ItemMeta itemMeta = getItemMeta();
if (itemMeta == null) {
return java.util.Collections.emptySet();
}
return itemMeta.getItemFlags();
}
/**
* Check if the specified flag is present on this item.
*
* @param flag the flag to check
* @return if it is present
*/
public boolean hasItemFlag(@NotNull ItemFlag flag) {
ItemMeta itemMeta = getItemMeta();
return itemMeta != null && itemMeta.hasItemFlag(flag);
}
// Paper end
}