mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-28 23:38:25 +01:00
ItemStack API additions for quantity/flags/lore
This commit is contained in:
parent
9624ed131b
commit
fe1b88829d
1 changed files with 180 additions and 0 deletions
|
@ -686,5 +686,185 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
|
||||||
// Requires access to NMS
|
// Requires access to NMS
|
||||||
return ensureServerConversions().getMaxItemUseDuration(entity);
|
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
|
// Paper end
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue