More annotations.

This commit is contained in:
themode 2020-10-24 11:19:54 +02:00
parent 29df8f5b39
commit 2f21a7c233
23 changed files with 295 additions and 227 deletions

View File

@ -558,13 +558,14 @@ public abstract class Entity implements Viewable, EventHandler, DataContainer {
}
}
@NotNull
@Override
public Map<Class<? extends Event>, Collection<EventCallback>> getEventCallbacksMap() {
return eventCallbacks;
}
@Override
public <E extends Event> void callEvent(Class<E> eventClass, E event) {
public <E extends Event> void callEvent(@NotNull Class<E> eventClass, @NotNull E event) {
EventHandler.super.callEvent(eventClass, event);
// Call the same event for the current entity instance

View File

@ -20,10 +20,10 @@ import net.minestom.server.network.player.PlayerConnection;
import net.minestom.server.utils.Position;
import net.minestom.server.utils.Vector;
import net.minestom.server.utils.chunk.ChunkUtils;
import net.minestom.server.utils.item.ItemStackUtils;
import net.minestom.server.utils.time.TimeUnit;
import net.minestom.server.utils.validate.Check;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
@ -198,6 +198,7 @@ public abstract class EntityCreature extends LivingEntity {
*
* @return a modifiable list containing the entity goal selectors
*/
@NotNull
public List<GoalSelector> getGoalSelectors() {
return goalSelectors;
}
@ -207,6 +208,7 @@ public abstract class EntityCreature extends LivingEntity {
*
* @return a modifiable list containing the entity target selectors
*/
@NotNull
public List<TargetSelector> getTargetSelectors() {
return targetSelectors;
}
@ -216,6 +218,7 @@ public abstract class EntityCreature extends LivingEntity {
*
* @return the entity target
*/
@Nullable
public Entity getTarget() {
return target;
}
@ -225,72 +228,78 @@ public abstract class EntityCreature extends LivingEntity {
*
* @param target the new entity target
*/
public void setTarget(Entity target) {
public void setTarget(@NotNull Entity target) {
this.target = target;
}
@NotNull
@Override
public ItemStack getItemInMainHand() {
return mainHandItem;
}
@Override
public void setItemInMainHand(ItemStack itemStack) {
this.mainHandItem = ItemStackUtils.notNull(itemStack);
public void setItemInMainHand(@NotNull ItemStack itemStack) {
this.mainHandItem = itemStack;
syncEquipment(EntityEquipmentPacket.Slot.MAIN_HAND);
}
@NotNull
@Override
public ItemStack getItemInOffHand() {
return offHandItem;
}
@Override
public void setItemInOffHand(ItemStack itemStack) {
this.offHandItem = ItemStackUtils.notNull(itemStack);
public void setItemInOffHand(@NotNull ItemStack itemStack) {
this.offHandItem = itemStack;
syncEquipment(EntityEquipmentPacket.Slot.OFF_HAND);
}
@NotNull
@Override
public ItemStack getHelmet() {
return helmet;
}
@Override
public void setHelmet(ItemStack itemStack) {
public void setHelmet(@NotNull ItemStack itemStack) {
this.helmet = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.HELMET);
syncEquipment(EntityEquipmentPacket.Slot.HELMET);
}
@NotNull
@Override
public ItemStack getChestplate() {
return chestplate;
}
@Override
public void setChestplate(ItemStack itemStack) {
public void setChestplate(@NotNull ItemStack itemStack) {
this.chestplate = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.CHESTPLATE);
syncEquipment(EntityEquipmentPacket.Slot.CHESTPLATE);
}
@NotNull
@Override
public ItemStack getLeggings() {
return leggings;
}
@Override
public void setLeggings(ItemStack itemStack) {
public void setLeggings(@NotNull ItemStack itemStack) {
this.leggings = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.LEGGINGS);
syncEquipment(EntityEquipmentPacket.Slot.LEGGINGS);
}
@NotNull
@Override
public ItemStack getBoots() {
return boots;
}
@Override
public void setBoots(ItemStack itemStack) {
public void setBoots(@NotNull ItemStack itemStack) {
this.boots = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.BOOTS);
syncEquipment(EntityEquipmentPacket.Slot.BOOTS);
}
@ -301,7 +310,7 @@ public abstract class EntityCreature extends LivingEntity {
* @param target the entity target
* @param swingHand true to swing the entity main hand, false otherwise
*/
public void attack(Entity target, boolean swingHand) {
public void attack(@NotNull Entity target, boolean swingHand) {
if (swingHand)
swingMainHand();
EntityAttackEvent attackEvent = new EntityAttackEvent(this, target);
@ -315,7 +324,7 @@ public abstract class EntityCreature extends LivingEntity {
*
* @param target the entity target
*/
public void attack(Entity target) {
public void attack(@NotNull Entity target) {
attack(target, false);
}
@ -336,7 +345,7 @@ public abstract class EntityCreature extends LivingEntity {
* @param position the position to find the path to, null to reset the pathfinder
* @return true if a path has been found
*/
public boolean setPathTo(Position position) {
public boolean setPathTo(@Nullable Position position) {
if (position != null && getPathPosition() != null && position.isSimilar(getPathPosition())) {
// Tried to set path to the same target position
return false;
@ -384,6 +393,7 @@ public abstract class EntityCreature extends LivingEntity {
*
* @return the target pathfinder position, null if there is no one
*/
@Nullable
public Position getPathPosition() {
return pathPosition;
}
@ -396,7 +406,7 @@ public abstract class EntityCreature extends LivingEntity {
* @param direction the targeted position
* @param speed define how far the entity will move
*/
public void moveTowards(Position direction, float speed) {
public void moveTowards(@NotNull Position direction, float speed) {
Check.notNull(direction, "The direction cannot be null");
final float currentX = position.getX();
final float currentZ = position.getZ();
@ -430,6 +440,7 @@ public abstract class EntityCreature extends LivingEntity {
*
* @return the pathing entity
*/
@NotNull
public PFPathingEntity getPathingEntity() {
return pathingEntity;
}
@ -443,9 +454,7 @@ public abstract class EntityCreature extends LivingEntity {
getPosition().setPitch(pitch);
}
private ItemStack getEquipmentItem(ItemStack itemStack, ArmorEquipEvent.ArmorSlot armorSlot) {
itemStack = ItemStackUtils.notNull(itemStack);
private ItemStack getEquipmentItem(@NotNull ItemStack itemStack, @NotNull ArmorEquipEvent.ArmorSlot armorSlot) {
ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(this, itemStack, armorSlot);
callEvent(ArmorEquipEvent.class, armorEquipEvent);
return armorEquipEvent.getArmorItem();

View File

@ -1936,7 +1936,7 @@ public class Player extends LivingEntity implements CommandSender {
*
* @param packet the packet to add in the queue
*/
public void addPacketToQueue(ClientPlayPacket packet) {
public void addPacketToQueue(@NotNull ClientPlayPacket packet) {
this.packets.add(packet);
}
@ -2014,6 +2014,7 @@ public class Player extends LivingEntity implements CommandSender {
* @return the called {@link ItemUpdateStateEvent},
* null if there is no item to update the state
*/
@Nullable
public ItemUpdateStateEvent callItemUpdateStateEvent(boolean allowFood) {
final Material mainHandMat = getItemInMainHand().getMaterial();
final Material offHandMat = getItemInOffHand().getMaterial();
@ -2043,7 +2044,7 @@ public class Player extends LivingEntity implements CommandSender {
* @param targetBlockPosition the custom block position
* @param breakers the breakers of the block, can be null if {@code this} is the only breaker
*/
public void setTargetBlock(CustomBlock targetCustomBlock, BlockPosition targetBlockPosition, Set<Player> breakers) {
public void setTargetBlock(@NotNull CustomBlock targetCustomBlock, @NotNull BlockPosition targetBlockPosition, @Nullable Set<Player> breakers) {
this.targetCustomBlock = targetCustomBlock;
this.targetBlockPosition = targetBlockPosition;
@ -2055,7 +2056,7 @@ public class Player extends LivingEntity implements CommandSender {
*
* @param breakers the list of breakers, can be null if {@code this} is the only breaker
*/
private void refreshBreakDelay(Set<Player> breakers) {
private void refreshBreakDelay(@Nullable Set<Player> breakers) {
breakers = breakers == null ? targetBreakers : breakers;
// Refresh the last tick update
@ -2120,6 +2121,7 @@ public class Player extends LivingEntity implements CommandSender {
*
* @return a {@link PlayerInfoPacket} to add the player
*/
@NotNull
protected PlayerInfoPacket getAddPlayerToList() {
PlayerInfoPacket playerInfoPacket = new PlayerInfoPacket(PlayerInfoPacket.Action.ADD_PLAYER);
@ -2146,6 +2148,7 @@ public class Player extends LivingEntity implements CommandSender {
*
* @return a {@link PlayerInfoPacket} to remove the player
*/
@NotNull
protected PlayerInfoPacket getRemovePlayerToList() {
PlayerInfoPacket playerInfoPacket = new PlayerInfoPacket(PlayerInfoPacket.Action.REMOVE_PLAYER);
@ -2164,7 +2167,7 @@ public class Player extends LivingEntity implements CommandSender {
*
* @param connection the connection to show the player to
*/
protected void showPlayer(PlayerConnection connection) {
protected void showPlayer(@NotNull PlayerConnection connection) {
SpawnPlayerPacket spawnPlayerPacket = new SpawnPlayerPacket();
spawnPlayerPacket.entityId = getEntityId();
spawnPlayerPacket.playerUuid = getUuid();
@ -2193,63 +2196,69 @@ public class Player extends LivingEntity implements CommandSender {
connection.sendPacket(entityHeadLookPacket);
}
@NotNull
@Override
public ItemStack getItemInMainHand() {
return inventory.getItemInMainHand();
}
@Override
public void setItemInMainHand(ItemStack itemStack) {
public void setItemInMainHand(@NotNull ItemStack itemStack) {
inventory.setItemInMainHand(itemStack);
}
@NotNull
@Override
public ItemStack getItemInOffHand() {
return inventory.getItemInOffHand();
}
@Override
public void setItemInOffHand(ItemStack itemStack) {
public void setItemInOffHand(@NotNull ItemStack itemStack) {
inventory.setItemInOffHand(itemStack);
}
@NotNull
@Override
public ItemStack getHelmet() {
return inventory.getHelmet();
}
@Override
public void setHelmet(ItemStack itemStack) {
public void setHelmet(@NotNull ItemStack itemStack) {
inventory.setHelmet(itemStack);
}
@NotNull
@Override
public ItemStack getChestplate() {
return inventory.getChestplate();
}
@Override
public void setChestplate(ItemStack itemStack) {
public void setChestplate(@NotNull ItemStack itemStack) {
inventory.setChestplate(itemStack);
}
@NotNull
@Override
public ItemStack getLeggings() {
return inventory.getLeggings();
}
@Override
public void setLeggings(ItemStack itemStack) {
public void setLeggings(@NotNull ItemStack itemStack) {
inventory.setLeggings(itemStack);
}
@NotNull
@Override
public ItemStack getBoots() {
return inventory.getBoots();
}
@Override
public void setBoots(ItemStack itemStack) {
public void setBoots(@NotNull ItemStack itemStack) {
inventory.setBoots(itemStack);
}

View File

@ -5,6 +5,8 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import net.minestom.server.utils.url.URLUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.IOException;
@ -48,7 +50,8 @@ public class PlayerSkin {
* @param uuid Mojang UUID
* @return a player skin based on the UUID, null if not found
*/
public static PlayerSkin fromUuid(String uuid) {
@Nullable
public static PlayerSkin fromUuid(@NotNull String uuid) {
final String url = "https://sessionserver.mojang.com/session/minecraft/profile/" + uuid + "?unsigned=false";
try {
@ -78,7 +81,8 @@ public class PlayerSkin {
* @param username the Minecraft username
* @return a skin based on a Minecraft username, null if not found
*/
public static PlayerSkin fromUsername(String username) {
@Nullable
public static PlayerSkin fromUsername(@NotNull String username) {
final String url = "https://api.mojang.com/users/profiles/minecraft/" + username;
try {

View File

@ -10,7 +10,6 @@ import net.minestom.server.network.packet.server.play.EntityEquipmentPacket;
import net.minestom.server.utils.Position;
import net.minestom.server.utils.Vector;
import net.minestom.server.utils.binary.BinaryWriter;
import net.minestom.server.utils.item.ItemStackUtils;
import org.jetbrains.annotations.NotNull;
import java.util.function.Consumer;
@ -63,7 +62,7 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler {
@Override
public boolean addViewer(@NotNull Player player) {
boolean result = super.addViewer(player);
final boolean result = super.addViewer(player);
syncEquipments(player.getPlayerConnection());
return result;
}
@ -143,68 +142,74 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler {
}
}
@NotNull
@Override
public ItemStack getItemInMainHand() {
return mainHandItem;
}
@Override
public void setItemInMainHand(ItemStack itemStack) {
this.mainHandItem = ItemStackUtils.notNull(itemStack);
public void setItemInMainHand(@NotNull ItemStack itemStack) {
this.mainHandItem = itemStack;
syncEquipment(EntityEquipmentPacket.Slot.MAIN_HAND);
}
@NotNull
@Override
public ItemStack getItemInOffHand() {
return offHandItem;
}
@Override
public void setItemInOffHand(ItemStack itemStack) {
this.offHandItem = ItemStackUtils.notNull(itemStack);
public void setItemInOffHand(@NotNull ItemStack itemStack) {
this.offHandItem = itemStack;
syncEquipment(EntityEquipmentPacket.Slot.OFF_HAND);
}
@NotNull
@Override
public ItemStack getHelmet() {
return helmet;
}
@Override
public void setHelmet(ItemStack itemStack) {
public void setHelmet(@NotNull ItemStack itemStack) {
this.helmet = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.HELMET);
syncEquipment(EntityEquipmentPacket.Slot.HELMET);
}
@NotNull
@Override
public ItemStack getChestplate() {
return chestplate;
}
@Override
public void setChestplate(ItemStack itemStack) {
public void setChestplate(@NotNull ItemStack itemStack) {
this.chestplate = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.CHESTPLATE);
syncEquipment(EntityEquipmentPacket.Slot.CHESTPLATE);
}
@NotNull
@Override
public ItemStack getLeggings() {
return leggings;
}
@Override
public void setLeggings(ItemStack itemStack) {
public void setLeggings(@NotNull ItemStack itemStack) {
this.leggings = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.LEGGINGS);
syncEquipment(EntityEquipmentPacket.Slot.LEGGINGS);
}
@NotNull
@Override
public ItemStack getBoots() {
return boots;
}
@Override
public void setBoots(ItemStack itemStack) {
public void setBoots(@NotNull ItemStack itemStack) {
this.boots = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.BOOTS);
syncEquipment(EntityEquipmentPacket.Slot.BOOTS);
}
@ -319,9 +324,7 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler {
// Equipments
private ItemStack getEquipmentItem(ItemStack itemStack, ArmorEquipEvent.ArmorSlot armorSlot) {
itemStack = ItemStackUtils.notNull(itemStack);
private ItemStack getEquipmentItem(@NotNull ItemStack itemStack, @NotNull ArmorEquipEvent.ArmorSlot armorSlot) {
ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(this, itemStack, armorSlot);
callEvent(ArmorEquipEvent.class, armorEquipEvent);
return armorEquipEvent.getArmorItem();

View File

@ -6,7 +6,6 @@ import net.minestom.server.item.ItemStack;
import net.minestom.server.utils.Position;
import net.minestom.server.utils.Rotation;
import net.minestom.server.utils.binary.BinaryWriter;
import net.minestom.server.utils.item.ItemStackUtils;
import org.jetbrains.annotations.NotNull;
import java.util.function.Consumer;
@ -19,7 +18,7 @@ public class EntityItemFrame extends ObjectEntity {
private ItemStack itemStack;
private Rotation rotation;
public EntityItemFrame(Position spawnPosition, ItemFrameOrientation orientation) {
public EntityItemFrame(@NotNull Position spawnPosition, @NotNull ItemFrameOrientation orientation) {
super(EntityType.ITEM_FRAME, spawnPosition);
this.orientation = orientation;
this.rotation = Rotation.NONE;
@ -43,7 +42,7 @@ public class EntityItemFrame extends ObjectEntity {
if (index == 7) {
packet.writeByte((byte) 7);
packet.writeByte(METADATA_SLOT);
packet.writeItemStack(ItemStackUtils.notNull(itemStack));
packet.writeItemStack(itemStack == null ? ItemStack.getAirItem() : itemStack);
} else if (index == 8) {
packet.writeByte((byte) 8);
packet.writeByte(METADATA_VARINT);
@ -80,6 +79,7 @@ public class EntityItemFrame extends ObjectEntity {
*
* @return the item rotation
*/
@NotNull
public Rotation getRotation() {
return rotation;
}
@ -89,7 +89,7 @@ public class EntityItemFrame extends ObjectEntity {
*
* @param rotation the new item rotation
*/
public void setRotation(Rotation rotation) {
public void setRotation(@NotNull Rotation rotation) {
this.rotation = rotation;
sendMetadataIndex(8);
}

View File

@ -1,7 +1,9 @@
package net.minestom.server.event;
import org.jetbrains.annotations.NotNull;
public interface EventCallback<E extends Event> {
void run(E event);
void run(@NotNull E event);
}

View File

@ -4,6 +4,7 @@ import net.minestom.server.event.CancellableEvent;
import net.minestom.server.event.Event;
import net.minestom.server.event.EventCallback;
import net.minestom.server.utils.validate.Check;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
import java.util.Map;
@ -20,6 +21,7 @@ public interface EventHandler {
*
* @return a {@link Map} with all the listeners
*/
@NotNull
Map<Class<? extends Event>, Collection<EventCallback>> getEventCallbacksMap();
/**
@ -29,7 +31,7 @@ public interface EventHandler {
* @param eventCallback the event callback
* @param <E> the event type
*/
default <E extends Event> void addEventCallback(Class<E> eventClass, EventCallback<E> eventCallback) {
default <E extends Event> void addEventCallback(@NotNull Class<E> eventClass, @NotNull EventCallback<E> eventCallback) {
Check.notNull(eventClass, "Event class cannot be null");
Check.notNull(eventCallback, "Event callback cannot be null");
Collection<EventCallback> callbacks = getEventCallbacks(eventClass);
@ -43,7 +45,7 @@ public interface EventHandler {
* @param eventCallback the event callback
* @param <E> the event type
*/
default <E extends Event> void removeEventCallback(Class<E> eventClass, EventCallback<E> eventCallback) {
default <E extends Event> void removeEventCallback(@NotNull Class<E> eventClass, @NotNull EventCallback<E> eventCallback) {
Check.notNull(eventClass, "Event class cannot be null");
Check.notNull(eventCallback, "Event callback cannot be null");
Collection<EventCallback> callbacks = getEventCallbacks(eventClass);
@ -57,7 +59,8 @@ public interface EventHandler {
* @param <E> the event type
* @return all event callbacks for the specified type {@code eventClass}
*/
default <E extends Event> Collection<EventCallback> getEventCallbacks(Class<E> eventClass) {
@NotNull
default <E extends Event> Collection<EventCallback> getEventCallbacks(@NotNull Class<E> eventClass) {
Check.notNull(eventClass, "Event class cannot be null");
return getEventCallbacksMap().computeIfAbsent(eventClass, clazz -> new CopyOnWriteArrayList<>());
}
@ -67,6 +70,7 @@ public interface EventHandler {
*
* @return a {@link Stream} containing all the callbacks
*/
@NotNull
default Stream<EventCallback> getEventCallbacks() {
return getEventCallbacksMap().values().stream().flatMap(Collection::stream);
}
@ -78,7 +82,7 @@ public interface EventHandler {
* @param event the event object
* @param <E> the event type
*/
default <E extends Event> void callEvent(Class<E> eventClass, E event) {
default <E extends Event> void callEvent(@NotNull Class<E> eventClass, @NotNull E event) {
// TODO global event
final Collection<EventCallback> eventCallbacks = getEventCallbacks(eventClass);
for (EventCallback<E> eventCallback : eventCallbacks) {
@ -97,7 +101,7 @@ public interface EventHandler {
* @param <E> the event type
* @see #callEvent(Class, Event)
*/
default <E extends CancellableEvent> void callCancellableEvent(Class<E> eventClass, E event, Runnable successCallback) {
default <E extends CancellableEvent> void callCancellableEvent(@NotNull Class<E> eventClass, @NotNull E event, @NotNull Runnable successCallback) {
callEvent(eventClass, event);
if (!event.isCancelled()) {
successCallback.run();

View File

@ -5,7 +5,8 @@ import net.minestom.server.event.CancellableEvent;
import net.minestom.server.inventory.Inventory;
import net.minestom.server.inventory.click.ClickType;
import net.minestom.server.item.ItemStack;
import net.minestom.server.utils.item.ItemStackUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* Called before {@link InventoryClickEvent}, used to potentially cancel the click.
@ -19,7 +20,9 @@ public class InventoryPreClickEvent extends CancellableEvent {
private ItemStack clickedItem;
private ItemStack cursorItem;
public InventoryPreClickEvent(Player player, Inventory inventory, int slot, ClickType clickType, ItemStack clicked, ItemStack cursor) {
public InventoryPreClickEvent(@NotNull Player player, @Nullable Inventory inventory,
int slot, @NotNull ClickType clickType,
@NotNull ItemStack clicked, @NotNull ItemStack cursor) {
this.player = player;
this.inventory = inventory;
this.slot = slot;
@ -33,6 +36,7 @@ public class InventoryPreClickEvent extends CancellableEvent {
*
* @return the player who clicked
*/
@NotNull
public Player getPlayer() {
return player;
}
@ -42,6 +46,7 @@ public class InventoryPreClickEvent extends CancellableEvent {
*
* @return the inventory where the click happened, null if this is the player's inventory
*/
@Nullable
public Inventory getInventory() {
return inventory;
}
@ -60,6 +65,7 @@ public class InventoryPreClickEvent extends CancellableEvent {
*
* @return the click type
*/
@NotNull
public ClickType getClickType() {
return clickType;
}
@ -69,6 +75,7 @@ public class InventoryPreClickEvent extends CancellableEvent {
*
* @return the clicked item
*/
@NotNull
public ItemStack getClickedItem() {
return clickedItem;
}
@ -78,8 +85,8 @@ public class InventoryPreClickEvent extends CancellableEvent {
*
* @param clickedItem the clicked item
*/
public void setClickedItem(ItemStack clickedItem) {
this.clickedItem = ItemStackUtils.notNull(clickedItem);
public void setClickedItem(@NotNull ItemStack clickedItem) {
this.clickedItem = clickedItem;
}
/**
@ -87,6 +94,7 @@ public class InventoryPreClickEvent extends CancellableEvent {
*
* @return the cursor item
*/
@NotNull
public ItemStack getCursorItem() {
return cursorItem;
}
@ -96,7 +104,7 @@ public class InventoryPreClickEvent extends CancellableEvent {
*
* @param cursorItem the cursor item
*/
public void setCursorItem(ItemStack cursorItem) {
this.cursorItem = ItemStackUtils.notNull(cursorItem);
public void setCursorItem(@NotNull ItemStack cursorItem) {
this.cursorItem = cursorItem;
}
}

View File

@ -3,7 +3,7 @@ package net.minestom.server.event.item;
import net.minestom.server.entity.Entity;
import net.minestom.server.event.Event;
import net.minestom.server.item.ItemStack;
import net.minestom.server.utils.item.ItemStackUtils;
import org.jetbrains.annotations.NotNull;
public class ArmorEquipEvent extends Event {
@ -11,24 +11,27 @@ public class ArmorEquipEvent extends Event {
private ItemStack armorItem;
private final ArmorSlot armorSlot;
public ArmorEquipEvent(Entity entity, ItemStack armorItem, ArmorSlot armorSlot) {
public ArmorEquipEvent(@NotNull Entity entity, @NotNull ItemStack armorItem, @NotNull ArmorSlot armorSlot) {
this.entity = entity;
this.armorItem = armorItem;
this.armorSlot = armorSlot;
}
@NotNull
public Entity getEntity() {
return entity;
}
@NotNull
public ItemStack getArmorItem() {
return armorItem;
}
public void setArmorItem(ItemStack armorItem) {
this.armorItem = ItemStackUtils.notNull(armorItem);
public void setArmorItem(@NotNull ItemStack armorItem) {
this.armorItem = armorItem;
}
@NotNull
public ArmorSlot getArmorSlot() {
return armorSlot;
}

View File

@ -3,7 +3,7 @@ package net.minestom.server.event.player;
import net.minestom.server.entity.Player;
import net.minestom.server.event.CancellableEvent;
import net.minestom.server.item.ItemStack;
import net.minestom.server.utils.item.ItemStackUtils;
import org.jetbrains.annotations.NotNull;
/**
* Called as a result of {@link net.minestom.server.inventory.PlayerInventory#addItemStack(ItemStack)}.
@ -13,7 +13,7 @@ public class PlayerAddItemStackEvent extends CancellableEvent {
private final Player player;
private ItemStack itemStack;
public PlayerAddItemStackEvent(Player player, ItemStack itemStack) {
public PlayerAddItemStackEvent(@NotNull Player player, @NotNull ItemStack itemStack) {
this.player = player;
this.itemStack = itemStack;
}
@ -23,6 +23,7 @@ public class PlayerAddItemStackEvent extends CancellableEvent {
*
* @return the player
*/
@NotNull
public Player getPlayer() {
return player;
}
@ -32,6 +33,7 @@ public class PlayerAddItemStackEvent extends CancellableEvent {
*
* @return the item stack
*/
@NotNull
public ItemStack getItemStack() {
return itemStack;
}
@ -41,7 +43,7 @@ public class PlayerAddItemStackEvent extends CancellableEvent {
*
* @param itemStack the new item stack
*/
public void setItemStack(ItemStack itemStack) {
this.itemStack = ItemStackUtils.notNull(itemStack);
public void setItemStack(@NotNull ItemStack itemStack) {
this.itemStack =itemStack;
}
}

View File

@ -3,7 +3,7 @@ package net.minestom.server.event.player;
import net.minestom.server.entity.Player;
import net.minestom.server.event.CancellableEvent;
import net.minestom.server.item.ItemStack;
import net.minestom.server.utils.item.ItemStackUtils;
import org.jetbrains.annotations.NotNull;
/**
* Called as a result of {@link net.minestom.server.inventory.PlayerInventory#setItemStack(int, ItemStack)}
@ -15,7 +15,7 @@ public class PlayerSetItemStackEvent extends CancellableEvent {
private int slot;
private ItemStack itemStack;
public PlayerSetItemStackEvent(Player player, int slot, ItemStack itemStack) {
public PlayerSetItemStackEvent(@NotNull Player player, int slot, @NotNull ItemStack itemStack) {
this.player = player;
this.slot = slot;
this.itemStack = itemStack;
@ -26,6 +26,7 @@ public class PlayerSetItemStackEvent extends CancellableEvent {
*
* @return the player
*/
@NotNull
public Player getPlayer() {
return player;
}
@ -53,6 +54,7 @@ public class PlayerSetItemStackEvent extends CancellableEvent {
*
* @return the item stack
*/
@NotNull
public ItemStack getItemStack() {
return itemStack;
}
@ -62,8 +64,8 @@ public class PlayerSetItemStackEvent extends CancellableEvent {
*
* @param itemStack the new item stack
*/
public void setItemStack(ItemStack itemStack) {
this.itemStack = ItemStackUtils.notNull(itemStack);
public void setItemStack(@NotNull ItemStack itemStack) {
this.itemStack = itemStack;
}
}

View File

@ -708,7 +708,7 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
* @param blockPosition the block position
* @param data the data to be set, can be null
*/
public void setBlockData(@NotNull BlockPosition blockPosition, Data data) {
public void setBlockData(@NotNull BlockPosition blockPosition, @Nullable Data data) {
setBlockData(blockPosition.getX(), (byte) blockPosition.getY(), blockPosition.getZ(), data);
}
@ -795,6 +795,7 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
this.data = data;
}
@NotNull
@Override
public Map<Class<? extends Event>, Collection<EventCallback>> getEventCallbacksMap() {
return eventCallbacks;

View File

@ -7,6 +7,8 @@ import net.minestom.server.item.ItemStack;
import net.minestom.server.network.packet.server.play.EntityEquipmentPacket;
import net.minestom.server.network.player.PlayerConnection;
import net.minestom.server.utils.validate.Check;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
@ -21,6 +23,7 @@ public interface EquipmentHandler {
*
* @return the {@link ItemStack} in main hand
*/
@NotNull
ItemStack getItemInMainHand();
/**
@ -28,13 +31,14 @@ public interface EquipmentHandler {
*
* @param itemStack the main hand {@link ItemStack}
*/
void setItemInMainHand(ItemStack itemStack);
void setItemInMainHand(@NotNull ItemStack itemStack);
/**
* Gets the {@link ItemStack} in off hand.
*
* @return the item in off hand
*/
@NotNull
ItemStack getItemInOffHand();
/**
@ -42,7 +46,7 @@ public interface EquipmentHandler {
*
* @param itemStack the off hand {@link ItemStack}
*/
void setItemInOffHand(ItemStack itemStack);
void setItemInOffHand(@NotNull ItemStack itemStack);
/**
* Gets the {@link ItemStack} in the specific hand.
@ -50,14 +54,13 @@ public interface EquipmentHandler {
* @param hand the Hand to get the {@link ItemStack} from
* @return the {@link ItemStack} in {@code hand}
*/
default ItemStack getItemInHand(Player.Hand hand) {
@NotNull
default ItemStack getItemInHand(@NotNull Player.Hand hand) {
switch (hand) {
case MAIN:
return getItemInMainHand();
case OFF:
return getItemInOffHand();
default:
return null;
}
@ -69,7 +72,7 @@ public interface EquipmentHandler {
* @param hand the hand to set the item to
* @param stack the {@link ItemStack} to set
*/
default void setItemInHand(Player.Hand hand, ItemStack stack) {
default void setItemInHand(@NotNull Player.Hand hand, @NotNull ItemStack stack) {
switch (hand) {
case MAIN:
setItemInMainHand(stack);
@ -86,6 +89,7 @@ public interface EquipmentHandler {
*
* @return the helmet
*/
@NotNull
ItemStack getHelmet();
/**
@ -93,13 +97,14 @@ public interface EquipmentHandler {
*
* @param itemStack the helmet
*/
void setHelmet(ItemStack itemStack);
void setHelmet(@NotNull ItemStack itemStack);
/**
* Gets the chestplate.
*
* @return the chestplate
*/
@NotNull
ItemStack getChestplate();
/**
@ -107,13 +112,14 @@ public interface EquipmentHandler {
*
* @param itemStack the chestplate
*/
void setChestplate(ItemStack itemStack);
void setChestplate(@NotNull ItemStack itemStack);
/**
* Gets the leggings.
*
* @return the leggings
*/
@NotNull
ItemStack getLeggings();
/**
@ -121,13 +127,14 @@ public interface EquipmentHandler {
*
* @param itemStack the leggings
*/
void setLeggings(ItemStack itemStack);
void setLeggings(@NotNull ItemStack itemStack);
/**
* Gets the boots.
*
* @return the boots
*/
@NotNull
ItemStack getBoots();
/**
@ -135,7 +142,7 @@ public interface EquipmentHandler {
*
* @param itemStack the boots
*/
void setBoots(ItemStack itemStack);
void setBoots(@NotNull ItemStack itemStack);
/**
* Gets the equipment in a specific slot.
@ -143,7 +150,8 @@ public interface EquipmentHandler {
* @param slot the equipment to get the item from
* @return the equipment {@link ItemStack}
*/
default ItemStack getEquipment(EntityEquipmentPacket.Slot slot) {
@NotNull
default ItemStack getEquipment(@NotNull EntityEquipmentPacket.Slot slot) {
switch (slot) {
case MAIN_HAND:
return getItemInMainHand();
@ -167,7 +175,7 @@ public interface EquipmentHandler {
*
* @param connection the connection to send the equipments to
*/
default void syncEquipments(PlayerConnection connection) {
default void syncEquipments(@NotNull PlayerConnection connection) {
final EntityEquipmentPacket entityEquipmentPacket = getEquipmentsPacket();
if (entityEquipmentPacket == null)
return;
@ -195,7 +203,7 @@ public interface EquipmentHandler {
*
* @param slot the slot of the equipment
*/
default void syncEquipment(EntityEquipmentPacket.Slot slot) {
default void syncEquipment(@NotNull EntityEquipmentPacket.Slot slot) {
if (!(this instanceof Entity))
throw new IllegalStateException("Only accessible for Entity");
@ -215,9 +223,10 @@ public interface EquipmentHandler {
/**
* Gets the packet with all the equipments.
*
* @return the packet with the equipments
* @return the packet with the equipments, null if all equipments are air
* @throws IllegalStateException if 'this' is not an {@link Entity}
*/
@Nullable
default EntityEquipmentPacket getEquipmentsPacket() {
Check.stateCondition(!(this instanceof Entity), "Only accessible for Entity");

View File

@ -17,7 +17,6 @@ import net.minestom.server.network.player.PlayerConnection;
import net.minestom.server.utils.ArrayUtils;
import net.minestom.server.utils.MathUtils;
import net.minestom.server.utils.inventory.PlayerInventoryUtils;
import net.minestom.server.utils.item.ItemStackUtils;
import net.minestom.server.utils.validate.Check;
import org.jetbrains.annotations.NotNull;
@ -65,7 +64,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
// the click processor which process all the clicks in the inventory
private final InventoryClickProcessor clickProcessor = new InventoryClickProcessor();
public Inventory(InventoryType inventoryType, String title) {
public Inventory(@NotNull InventoryType inventoryType, @NotNull String title) {
this.id = generateId();
this.inventoryType = inventoryType;
this.title = title;
@ -91,6 +90,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
*
* @return the inventory type
*/
@NotNull
public InventoryType getInventoryType() {
return inventoryType;
}
@ -100,6 +100,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
*
* @return the inventory title
*/
@NotNull
public String getTitle() {
return title;
}
@ -109,7 +110,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
*
* @param title the new inventory title
*/
public void setTitle(String title) {
public void setTitle(@NotNull String title) {
this.title = title;
OpenWindowPacket packet = new OpenWindowPacket();
@ -136,7 +137,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
}
@Override
public void setItemStack(int slot, ItemStack itemStack) {
public void setItemStack(int slot, @NotNull ItemStack itemStack) {
Check.argCondition(!MathUtils.isBetween(slot, 0, getSize()),
inventoryType.toString() + " does not have slot " + slot);
@ -144,7 +145,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
}
@Override
public synchronized boolean addItemStack(ItemStack itemStack) {
public synchronized boolean addItemStack(@NotNull ItemStack itemStack) {
final StackingRule stackingRule = itemStack.getStackingRule();
for (int i = 0; i < getSize(); i++) {
ItemStack item = getItemStack(i);
@ -184,11 +185,14 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
update();
}
@NotNull
@Override
public ItemStack getItemStack(int slot) {
return itemStacks[slot];
}
@NotNull
@Override
public ItemStack[] getItemStacks() {
return Arrays.copyOf(itemStacks, itemStacks.length);
@ -199,13 +203,14 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
return size;
}
@NotNull
@Override
public List<InventoryCondition> getInventoryConditions() {
return inventoryConditions;
}
@Override
public void addInventoryCondition(InventoryCondition inventoryCondition) {
public void addInventoryCondition(@NotNull InventoryCondition inventoryCondition) {
this.inventoryConditions.add(inventoryCondition);
}
@ -222,7 +227,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
*
* @param player the player to update the inventory
*/
public void update(Player player) {
public void update(@NotNull Player player) {
if (!getViewers().contains(player))
return;
@ -266,7 +271,8 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
* @param player the player to get the cursor item from
* @return the player cursor item, air item if the player is not a viewer
*/
public ItemStack getCursorItem(Player player) {
@NotNull
public ItemStack getCursorItem(@NotNull Player player) {
return cursorPlayersItem.getOrDefault(player, ItemStack.getAirItem());
}
@ -277,12 +283,10 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
* @param player the player to change the cursor item
* @param cursorItem the new player cursor item
*/
public void setCursorItem(Player player, ItemStack cursorItem) {
public void setCursorItem(@NotNull Player player, @NotNull ItemStack cursorItem) {
if (!isViewer(player))
return;
cursorItem = ItemStackUtils.notNull(cursorItem);
SetSlotPacket setSlotPacket = new SetSlotPacket();
setSlotPacket.windowId = -1;
setSlotPacket.slot = -1;
@ -301,8 +305,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
* @param slot the internal slot id
* @param itemStack the item to insert
*/
private synchronized void safeItemInsert(int slot, ItemStack itemStack) {
itemStack = ItemStackUtils.notNull(itemStack);
private synchronized void safeItemInsert(int slot, @NotNull ItemStack itemStack) {
setItemStackInternal(slot, itemStack);
SetSlotPacket setSlotPacket = new SetSlotPacket();
setSlotPacket.windowId = getWindowId();
@ -320,7 +323,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
* @param slot the internal slot
* @param itemStack the item to insert
*/
protected void setItemStackInternal(int slot, ItemStack itemStack) {
protected void setItemStackInternal(int slot, @NotNull ItemStack itemStack) {
itemStacks[slot] = itemStack;
}
@ -329,6 +332,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
*
* @return a new {@link WindowItemsPacket} packet
*/
@NotNull
private WindowItemsPacket createNewWindowItemsPacket() {
WindowItemsPacket windowItemsPacket = new WindowItemsPacket();
windowItemsPacket.windowId = getWindowId();
@ -343,7 +347,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
* @param value the value of the property
* @see <a href="https://wiki.vg/Protocol#Window_Property">https://wiki.vg/Protocol#Window_Property</a>
*/
protected void sendProperty(InventoryProperty property, short value) {
protected void sendProperty(@NotNull InventoryProperty property, short value) {
WindowPropertyPacket windowPropertyPacket = new WindowPropertyPacket();
windowPropertyPacket.windowId = getWindowId();
windowPropertyPacket.property = property.getProperty();
@ -359,7 +363,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
* @param player the player to change the cursor item
* @param itemStack the cursor item
*/
private void setCursorPlayerItem(Player player, ItemStack itemStack) {
private void setCursorPlayerItem(@NotNull Player player, @NotNull ItemStack itemStack) {
this.cursorPlayersItem.put(player, itemStack);
}
@ -368,7 +372,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
}
@Override
public boolean leftClick(Player player, int slot) {
public boolean leftClick(@NotNull Player player, int slot) {
final PlayerInventory playerInventory = player.getInventory();
final ItemStack cursor = getCursorItem(player);
final boolean isInWindow = isClickInWindow(slot);
@ -395,7 +399,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
}
@Override
public boolean rightClick(Player player, int slot) {
public boolean rightClick(@NotNull Player player, int slot) {
final PlayerInventory playerInventory = player.getInventory();
final ItemStack cursor = getCursorItem(player);
final boolean isInWindow = isClickInWindow(slot);
@ -421,7 +425,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
}
@Override
public boolean shiftClick(Player player, int slot) {
public boolean shiftClick(@NotNull Player player, int slot) {
final PlayerInventory playerInventory = player.getInventory();
final boolean isInWindow = isClickInWindow(slot);
final ItemStack clicked = isInWindow ? getItemStack(slot) : playerInventory.getItemStack(slot, offset);
@ -473,7 +477,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
}
@Override
public boolean changeHeld(Player player, int slot, int key) {
public boolean changeHeld(@NotNull Player player, int slot, int key) {
final PlayerInventory playerInventory = player.getInventory();
final boolean isInWindow = isClickInWindow(slot);
final ItemStack clicked = isInWindow ? getItemStack(slot) : playerInventory.getItemStack(slot, offset);
@ -502,13 +506,13 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
}
@Override
public boolean middleClick(Player player, int slot) {
public boolean middleClick(@NotNull Player player, int slot) {
// TODO
return false;
}
@Override
public boolean drop(Player player, int mode, int slot, int button) {
public boolean drop(@NotNull Player player, int mode, int slot, int button) {
final PlayerInventory playerInventory = player.getInventory();
final boolean isInWindow = isClickInWindow(slot);
final ItemStack clicked = slot == -999 ?
@ -536,7 +540,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
}
@Override
public boolean dragging(Player player, int slot, int button) {
public boolean dragging(@NotNull Player player, int slot, int button) {
final PlayerInventory playerInventory = player.getInventory();
final boolean isInWindow = isClickInWindow(slot);
ItemStack clicked = null;
@ -572,7 +576,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
}
@Override
public boolean doubleClick(Player player, int slot) {
public boolean doubleClick(@NotNull Player player, int slot) {
final PlayerInventory playerInventory = player.getInventory();
final ItemStack cursor = getCursorItem(player);

View File

@ -4,6 +4,7 @@ import net.minestom.server.entity.Player;
import net.minestom.server.event.inventory.InventoryClickEvent;
import net.minestom.server.inventory.click.ClickType;
import net.minestom.server.item.ItemStack;
import org.jetbrains.annotations.NotNull;
/**
* Represents an inventory which can receive click input.
@ -20,7 +21,7 @@ public interface InventoryClickHandler {
* @param slot the slot number
* @return true if the click hasn't been cancelled, false otherwise
*/
boolean leftClick(Player player, int slot);
boolean leftClick(@NotNull Player player, int slot);
/**
* Called when a {@link Player} right click in the inventory. Can also be to drop the cursor item
@ -29,7 +30,7 @@ public interface InventoryClickHandler {
* @param slot the slot number
* @return true if the click hasn't been cancelled, false otherwise
*/
boolean rightClick(Player player, int slot);
boolean rightClick(@NotNull Player player, int slot);
/**
* Called when a {@link Player} shift click in the inventory
@ -38,7 +39,7 @@ public interface InventoryClickHandler {
* @param slot the slot number
* @return true if the click hasn't been cancelled, false otherwise
*/
boolean shiftClick(Player player, int slot); // shift + left/right click have the same behavior
boolean shiftClick(@NotNull Player player, int slot); // shift + left/right click have the same behavior
/**
* Called when a {@link Player} held click in the inventory
@ -48,9 +49,9 @@ public interface InventoryClickHandler {
* @param key the held slot (0-8) pressed
* @return true if the click hasn't been cancelled, false otherwise
*/
boolean changeHeld(Player player, int slot, int key);
boolean changeHeld(@NotNull Player player, int slot, int key);
boolean middleClick(Player player, int slot);
boolean middleClick(@NotNull Player player, int slot);
/**
* Called when a {@link Player} press the drop button
@ -61,9 +62,9 @@ public interface InventoryClickHandler {
* @param button -999 if clicking outside, normal if he is not
* @return true if the drop hasn't been cancelled, false otherwise
*/
boolean drop(Player player, int mode, int slot, int button);
boolean drop(@NotNull Player player, int mode, int slot, int button);
boolean dragging(Player player, int slot, int button);
boolean dragging(@NotNull Player player, int slot, int button);
/**
* Called when a {@link Player} double click in the inventory
@ -72,10 +73,10 @@ public interface InventoryClickHandler {
* @param slot the slot number
* @return true if the click hasn't been cancelled, false otherwise
*/
boolean doubleClick(Player player, int slot);
boolean doubleClick(@NotNull Player player, int slot);
default void callClickEvent(Player player, Inventory inventory, int slot,
ClickType clickType, ItemStack clicked, ItemStack cursor) {
default void callClickEvent(@NotNull Player player, Inventory inventory, int slot,
@NotNull ClickType clickType, @NotNull ItemStack clicked, @NotNull ItemStack cursor) {
InventoryClickEvent inventoryClickEvent = new InventoryClickEvent(player, inventory, slot, clickType, clicked, cursor);
player.callEvent(InventoryClickEvent.class, inventoryClickEvent);
}

View File

@ -2,6 +2,7 @@ package net.minestom.server.inventory;
import net.minestom.server.inventory.condition.InventoryCondition;
import net.minestom.server.item.ItemStack;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@ -16,15 +17,15 @@ public interface InventoryModifier {
* @param slot the slot to set the item
* @param itemStack the item to set
*/
void setItemStack(int slot, ItemStack itemStack);
void setItemStack(int slot, @NotNull ItemStack itemStack);
/**
* Adds an {@link ItemStack} to the inventory.
*
* @param itemStack the item to add
* @return true if the item has been sucessfully fully added, false otherwise
* @return true if the item has been successfully fully added, false otherwise
*/
boolean addItemStack(ItemStack itemStack);
boolean addItemStack(@NotNull ItemStack itemStack);
/**
* Clears the inventory.
@ -37,6 +38,7 @@ public interface InventoryModifier {
* @param slot the slot to check
* @return the item in the slot {@code slot}
*/
@NotNull
ItemStack getItemStack(int slot);
/**
@ -44,6 +46,7 @@ public interface InventoryModifier {
*
* @return an array containing all the inventory's items
*/
@NotNull
ItemStack[] getItemStacks();
/**
@ -58,6 +61,7 @@ public interface InventoryModifier {
*
* @return the inventory conditions
*/
@NotNull
List<InventoryCondition> getInventoryConditions();
/**
@ -65,5 +69,5 @@ public interface InventoryModifier {
*
* @param inventoryCondition the inventory condition to add
*/
void addInventoryCondition(InventoryCondition inventoryCondition);
void addInventoryCondition(@NotNull InventoryCondition inventoryCondition);
}

View File

@ -17,8 +17,8 @@ import net.minestom.server.network.packet.server.play.SetSlotPacket;
import net.minestom.server.network.packet.server.play.WindowItemsPacket;
import net.minestom.server.utils.ArrayUtils;
import net.minestom.server.utils.MathUtils;
import net.minestom.server.utils.item.ItemStackUtils;
import net.minestom.server.utils.validate.Check;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.List;
@ -46,23 +46,26 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
ArrayUtils.fill(items, ItemStack::getAirItem);
}
@NotNull
@Override
public ItemStack getItemStack(int slot) {
return this.items[slot];
}
@NotNull
@Override
public ItemStack[] getItemStacks() {
return Arrays.copyOf(items, items.length);
}
@NotNull
@Override
public List<InventoryCondition> getInventoryConditions() {
return inventoryConditions;
}
@Override
public void addInventoryCondition(InventoryCondition inventoryCondition) {
public void addInventoryCondition(@NotNull InventoryCondition inventoryCondition) {
InventoryCondition condition = (p, slot, clickType, inventoryConditionResult) -> {
slot = convertSlot(slot, OFFSET);
inventoryCondition.accept(p, slot, clickType, inventoryConditionResult);
@ -72,9 +75,7 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
}
@Override
public void setItemStack(int slot, ItemStack itemStack) {
itemStack = ItemStackUtils.notNull(itemStack);
public void setItemStack(int slot, @NotNull ItemStack itemStack) {
PlayerSetItemStackEvent setItemStackEvent = new PlayerSetItemStackEvent(player, slot, itemStack);
player.callEvent(PlayerSetItemStackEvent.class, setItemStackEvent);
if (setItemStackEvent.isCancelled())
@ -86,9 +87,7 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
}
@Override
public synchronized boolean addItemStack(ItemStack itemStack) {
itemStack = ItemStackUtils.notNull(itemStack);
public synchronized boolean addItemStack(@NotNull ItemStack itemStack) {
PlayerAddItemStackEvent addItemStackEvent = new PlayerAddItemStackEvent(player, itemStack);
player.callEvent(PlayerAddItemStackEvent.class, addItemStackEvent);
if (addItemStackEvent.isCancelled())
@ -139,63 +138,69 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
return INVENTORY_SIZE;
}
@NotNull
@Override
public ItemStack getItemInMainHand() {
return getItemStack(player.getHeldSlot());
}
@Override
public void setItemInMainHand(ItemStack itemStack) {
public void setItemInMainHand(@NotNull ItemStack itemStack) {
safeItemInsert(player.getHeldSlot(), itemStack);
}
@NotNull
@Override
public ItemStack getItemInOffHand() {
return getItemStack(OFFHAND_SLOT);
}
@Override
public void setItemInOffHand(ItemStack itemStack) {
public void setItemInOffHand(@NotNull ItemStack itemStack) {
safeItemInsert(OFFHAND_SLOT, itemStack);
}
@NotNull
@Override
public ItemStack getHelmet() {
return getItemStack(HELMET_SLOT);
}
@Override
public void setHelmet(ItemStack itemStack) {
public void setHelmet(@NotNull ItemStack itemStack) {
safeItemInsert(HELMET_SLOT, itemStack);
}
@NotNull
@Override
public ItemStack getChestplate() {
return getItemStack(CHESTPLATE_SLOT);
}
@Override
public void setChestplate(ItemStack itemStack) {
public void setChestplate(@NotNull ItemStack itemStack) {
safeItemInsert(CHESTPLATE_SLOT, itemStack);
}
@NotNull
@Override
public ItemStack getLeggings() {
return getItemStack(LEGGINGS_SLOT);
}
@Override
public void setLeggings(ItemStack itemStack) {
public void setLeggings(@NotNull ItemStack itemStack) {
safeItemInsert(LEGGINGS_SLOT, itemStack);
}
@NotNull
@Override
public ItemStack getBoots() {
return getItemStack(BOOTS_SLOT);
}
@Override
public void setBoots(ItemStack itemStack) {
public void setBoots(@NotNull ItemStack itemStack) {
safeItemInsert(BOOTS_SLOT, itemStack);
}
@ -221,6 +226,7 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
*
* @return the cursor item
*/
@NotNull
public ItemStack getCursorItem() {
return cursorItem;
}
@ -230,8 +236,7 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
*
* @param cursorItem the new cursor item
*/
public void setCursorItem(ItemStack cursorItem) {
cursorItem = ItemStackUtils.notNull(cursorItem);
public void setCursorItem(@NotNull ItemStack cursorItem) {
this.cursorItem = cursorItem;
SetSlotPacket setSlotPacket = new SetSlotPacket();
setSlotPacket.windowId = -1;
@ -248,7 +253,7 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
* @throws IllegalArgumentException if the slot {@code slot} does not exist
* @throws NullPointerException if {@code itemStack} is null
*/
private synchronized void safeItemInsert(int slot, ItemStack itemStack) {
private synchronized void safeItemInsert(int slot, @NotNull ItemStack itemStack) {
Check.argCondition(!MathUtils.isBetween(slot, 0, getSize()),
"The slot " + slot + " does not exist for player");
Check.notNull(itemStack, "The ItemStack cannot be null, you can set air instead");
@ -358,7 +363,7 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
}
@Override
public boolean leftClick(Player player, int slot) {
public boolean leftClick(@NotNull Player player, int slot) {
final ItemStack cursor = getCursorItem();
final ItemStack clicked = getItemStack(convertSlot(slot, OFFSET));
@ -377,7 +382,7 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
}
@Override
public boolean rightClick(Player player, int slot) {
public boolean rightClick(@NotNull Player player, int slot) {
final ItemStack cursor = getCursorItem();
final ItemStack clicked = getItemStack(slot, OFFSET);
@ -396,13 +401,13 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
}
@Override
public boolean middleClick(Player player, int slot) {
public boolean middleClick(@NotNull Player player, int slot) {
// TODO
return false;
}
@Override
public boolean drop(Player player, int mode, int slot, int button) {
public boolean drop(@NotNull Player player, int mode, int slot, int button) {
final ItemStack cursor = getCursorItem();
final ItemStack clicked = slot == -999 ? null : getItemStack(slot, OFFSET);
@ -421,7 +426,7 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
}
@Override
public boolean shiftClick(Player player, int slot) {
public boolean shiftClick(@NotNull Player player, int slot) {
final ItemStack cursor = getCursorItem();
final ItemStack clicked = getItemStack(slot, OFFSET);
@ -450,7 +455,7 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
}
@Override
public boolean changeHeld(Player player, int slot, int key) {
public boolean changeHeld(@NotNull Player player, int slot, int key) {
if (!getCursorItem().isAir())
return false;
@ -476,7 +481,7 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
}
@Override
public boolean dragging(Player player, int slot, int button) {
public boolean dragging(@NotNull Player player, int slot, int button) {
final ItemStack cursor = getCursorItem();
ItemStack clicked = null;
if (slot != -999)
@ -500,7 +505,7 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
}
@Override
public boolean doubleClick(Player player, int slot) {
public boolean doubleClick(@NotNull Player player, int slot) {
final ItemStack cursor = getCursorItem();
final InventoryClickResult clickResult = clickProcessor.doubleClick(null, player, slot, cursor,

View File

@ -17,6 +17,8 @@ import net.minestom.server.utils.BlockPosition;
import net.minestom.server.utils.Direction;
import net.minestom.server.utils.NBTUtils;
import net.minestom.server.utils.validate.Check;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jglrxavpok.hephaistos.nbt.NBTCompound;
import java.util.*;
@ -42,7 +44,7 @@ public class ItemStack implements DataContainer {
private byte amount;
private int damage;
public ItemStack(Material material, byte amount, int damage) {
public ItemStack(@NotNull Material material, byte amount, int damage) {
this.material = material;
this.amount = amount;
this.damage = damage;
@ -75,15 +77,17 @@ public class ItemStack implements DataContainer {
this.stackingRule = defaultStackingRule;
}
public ItemStack(Material material, byte amount) {
public ItemStack(@NotNull Material material, byte amount) {
this(material, amount, (short) 0);
}
/**
* o
* Gets a new {@link ItemStack} with the material sets to {@link Material#AIR}.
*
* @return an air item
*/
@NotNull
public static ItemStack getAirItem() {
return new ItemStack(Material.AIR, (byte) 0);
}
@ -93,6 +97,7 @@ public class ItemStack implements DataContainer {
*
* @return the default stacking rule
*/
@NotNull
public static StackingRule getDefaultStackingRule() {
return defaultStackingRule;
}
@ -103,7 +108,7 @@ public class ItemStack implements DataContainer {
* @param defaultStackingRule the default item stack
* @throws NullPointerException if {@code defaultStackingRule} is null
*/
public static void setDefaultStackingRule(StackingRule defaultStackingRule) {
public static void setDefaultStackingRule(@NotNull StackingRule defaultStackingRule) {
Check.notNull(defaultStackingRule, "StackingRule cannot be null!");
ItemStack.defaultStackingRule = defaultStackingRule;
}
@ -114,7 +119,8 @@ public class ItemStack implements DataContainer {
* @param nbt the nbt compound containing the item
* @return the parsed item stack
*/
public static ItemStack fromNBT(NBTCompound nbt) {
@NotNull
public static ItemStack fromNBT(@NotNull NBTCompound nbt) {
if (!nbt.containsKey("id") || !nbt.containsKey("Count"))
throw new IllegalArgumentException("Invalid item NBT, must at least contain 'id' and 'Count' tags");
final Material material = Registries.getMaterial(nbt.getString("id"));
@ -145,7 +151,7 @@ public class ItemStack implements DataContainer {
* @param itemStack The ItemStack to compare to
* @return true if both items are similar
*/
public boolean isSimilar(ItemStack itemStack) {
public boolean isSimilar(@NotNull ItemStack itemStack) {
synchronized (ItemStack.class) {
final ColoredText itemDisplayName = itemStack.getDisplayName();
final boolean displayNameCheck = (displayName == null && itemDisplayName == null) ||
@ -219,6 +225,7 @@ public class ItemStack implements DataContainer {
*
* @return the item meta
*/
@Nullable
public ItemMeta getItemMeta() {
return itemMeta;
}
@ -231,7 +238,7 @@ public class ItemStack implements DataContainer {
*
* @param itemMeta the new item meta
*/
public void setItemMeta(ItemMeta itemMeta) {
public void setItemMeta(@Nullable ItemMeta itemMeta) {
this.itemMeta = itemMeta;
}
@ -240,6 +247,7 @@ public class ItemStack implements DataContainer {
*
* @return the item display name, can be null if not present
*/
@Nullable
public ColoredText getDisplayName() {
return displayName;
}
@ -249,7 +257,7 @@ public class ItemStack implements DataContainer {
*
* @param displayName the item display name
*/
public void setDisplayName(ColoredText displayName) {
public void setDisplayName(@Nullable ColoredText displayName) {
this.displayName = displayName;
}
@ -265,8 +273,9 @@ public class ItemStack implements DataContainer {
/**
* Gets the item lore.
*
* @return the item lore, can be null if not present
* @return a modifiable list containing the item lore, can be null if not present
*/
@Nullable
public ArrayList<ColoredText> getLore() {
return lore;
}
@ -276,7 +285,7 @@ public class ItemStack implements DataContainer {
*
* @param lore the item lore, can be null to remove
*/
public void setLore(ArrayList<ColoredText> lore) {
public void setLore(@Nullable ArrayList<ColoredText> lore) {
this.lore = lore;
}
@ -294,6 +303,7 @@ public class ItemStack implements DataContainer {
*
* @return an unmodifiable map containing the item enchantments
*/
@NotNull
public Map<Enchantment, Short> getEnchantmentMap() {
return Collections.unmodifiableMap(enchantmentMap);
}
@ -304,7 +314,7 @@ public class ItemStack implements DataContainer {
* @param enchantment the enchantment type
* @param level the enchantment level
*/
public void setEnchantment(Enchantment enchantment, short level) {
public void setEnchantment(@NotNull Enchantment enchantment, short level) {
if (level < 1) {
removeEnchantment(enchantment);
return;
@ -318,7 +328,7 @@ public class ItemStack implements DataContainer {
*
* @param enchantment the enchantment type
*/
public void removeEnchantment(Enchantment enchantment) {
public void removeEnchantment(@NotNull Enchantment enchantment) {
this.enchantmentMap.remove(enchantment);
}
@ -328,7 +338,7 @@ public class ItemStack implements DataContainer {
* @param enchantment the enchantment type
* @return the stored enchantment level, 0 if not present
*/
public int getEnchantmentLevel(Enchantment enchantment) {
public int getEnchantmentLevel(@NotNull Enchantment enchantment) {
return this.enchantmentMap.getOrDefault(enchantment, (short) 0);
}
@ -337,6 +347,7 @@ public class ItemStack implements DataContainer {
*
* @return an unmodifiable {@link List} containing the item attributes
*/
@NotNull
public List<ItemAttribute> getAttributes() {
return Collections.unmodifiableList(attributes);
}
@ -347,7 +358,7 @@ public class ItemStack implements DataContainer {
* @param internalName the internal name of the attribute
* @return the {@link ItemAttribute} with the internal name, null if not found
*/
public ItemAttribute getAttribute(String internalName) {
public ItemAttribute getAttribute(@NotNull String internalName) {
for (ItemAttribute itemAttribute : attributes) {
if (itemAttribute.getInternalName().equals(internalName))
return itemAttribute;
@ -360,7 +371,7 @@ public class ItemStack implements DataContainer {
*
* @param itemAttribute the attribute to add
*/
public void addAttribute(ItemAttribute itemAttribute) {
public void addAttribute(@NotNull ItemAttribute itemAttribute) {
this.attributes.add(itemAttribute);
}
@ -369,7 +380,7 @@ public class ItemStack implements DataContainer {
*
* @param itemAttribute the attribute to remove
*/
public void removeAttribute(ItemAttribute itemAttribute) {
public void removeAttribute(@NotNull ItemAttribute itemAttribute) {
this.attributes.remove(itemAttribute);
}
@ -414,7 +425,7 @@ public class ItemStack implements DataContainer {
*
* @param flags the flags to add
*/
public void addItemFlags(ItemFlag... flags) {
public void addItemFlags(@NotNull ItemFlag... flags) {
for (ItemFlag f : flags) {
this.hideFlag |= getBitModifier(f);
}
@ -425,7 +436,7 @@ public class ItemStack implements DataContainer {
*
* @param flags the flags to remove
*/
public void removeItemFlags(ItemFlag... flags) {
public void removeItemFlags(@NotNull ItemFlag... flags) {
for (ItemFlag f : flags) {
this.hideFlag &= ~getBitModifier(f);
}
@ -436,6 +447,7 @@ public class ItemStack implements DataContainer {
*
* @return an unmodifiable {@link Set} containing the item flags
*/
@NotNull
public Set<ItemFlag> getItemFlags() {
Set<ItemFlag> currentFlags = EnumSet.noneOf(ItemFlag.class);
@ -454,7 +466,7 @@ public class ItemStack implements DataContainer {
* @param flag the item flag
* @return true if the item has the flag {@code flag}, false otherwise
*/
public boolean hasItemFlag(ItemFlag flag) {
public boolean hasItemFlag(@NotNull ItemFlag flag) {
final int bitModifier = getBitModifier(flag);
return (this.hideFlag & bitModifier) == bitModifier;
}
@ -482,6 +494,7 @@ public class ItemStack implements DataContainer {
*
* @return the item material
*/
@NotNull
public Material getMaterial() {
return material;
}
@ -491,7 +504,7 @@ public class ItemStack implements DataContainer {
*
* @param material the new material
*/
public void setMaterial(Material material) {
public void setMaterial(@NotNull Material material) {
this.material = material;
}
@ -517,12 +530,17 @@ public class ItemStack implements DataContainer {
*
* @return a cloned item stack
*/
@NotNull
public synchronized ItemStack clone() {
ItemStack itemStack = new ItemStack(material, amount, damage);
itemStack.setDisplayName(displayName);
itemStack.setUnbreakable(unbreakable);
itemStack.setLore(new ArrayList<>(getLore()));
itemStack.setStackingRule(getStackingRule());
if (lore != null) {
itemStack.setLore(new ArrayList<>(lore));
}
if (stackingRule != null) {
itemStack.setStackingRule(stackingRule);
}
itemStack.enchantmentMap = new HashMap<>(enchantmentMap);
itemStack.attributes = new ArrayList<>(attributes);
@ -554,6 +572,7 @@ public class ItemStack implements DataContainer {
*
* @return the item nbt consumer, null if not any
*/
@Nullable
public NBTConsumer getNBTConsumer() {
return nbtConsumer;
}
@ -561,9 +580,9 @@ public class ItemStack implements DataContainer {
/**
* Changes the item {@link NBTConsumer}.
*
* @param nbtConsumer the new item nbt consumer
* @param nbtConsumer the new item nbt consumer, can be null
*/
public void setNBTConsumer(NBTConsumer nbtConsumer) {
public void setNBTConsumer(@Nullable NBTConsumer nbtConsumer) {
this.nbtConsumer = nbtConsumer;
}
@ -572,6 +591,7 @@ public class ItemStack implements DataContainer {
*
* @return the item stacking rule
*/
@NotNull
public StackingRule getStackingRule() {
return stackingRule;
}
@ -582,7 +602,7 @@ public class ItemStack implements DataContainer {
* @param stackingRule the new item stacking rule
* @throws NullPointerException if {@code stackingRule} is null
*/
public void setStackingRule(StackingRule stackingRule) {
public void setStackingRule(@NotNull StackingRule stackingRule) {
Check.notNull(stackingRule, "The stacking rule cannot be null!");
this.stackingRule = stackingRule;
}
@ -595,6 +615,7 @@ public class ItemStack implements DataContainer {
* @param amount the quantity to consume
* @return the new item with the updated amount, null if the item cannot be consumed by this much
*/
@Nullable
public ItemStack consume(int amount) {
final int currentAmount = stackingRule.getAmount(this);
if (currentAmount < amount)
@ -602,15 +623,16 @@ public class ItemStack implements DataContainer {
return stackingRule.apply(this, currentAmount - amount);
}
private byte getBitModifier(ItemFlag hideFlag) {
private byte getBitModifier(@NotNull ItemFlag hideFlag) {
return (byte) (1 << hideFlag.ordinal());
}
/**
* Finds the {@link ItemMeta} based on the material type.
*
* @return the item meta
* @return the item meta, null if none found
*/
@Nullable
private ItemMeta findMeta() {
if (material == Material.POTION ||
material == Material.LINGERING_POTION ||
@ -651,6 +673,7 @@ public class ItemStack implements DataContainer {
return null;
}
@NotNull
public NBTCompound toNBT() {
NBTCompound compound = new NBTCompound()
.setByte("Count", amount)
@ -685,7 +708,7 @@ public class ItemStack implements DataContainer {
* @param player the player who used the item
* @param hand the hand used
*/
public void onRightClick(Player player, Player.Hand hand) {
public void onRightClick(@NotNull Player player, @NotNull Player.Hand hand) {
}
/**
@ -694,7 +717,7 @@ public class ItemStack implements DataContainer {
* @param player the player who used the item
* @param hand the hand used
*/
public void onLeftClick(Player player, Player.Hand hand) {
public void onLeftClick(@NotNull Player player, @NotNull Player.Hand hand) {
}
/**
@ -706,7 +729,7 @@ public class ItemStack implements DataContainer {
* @param blockFace the block face
* @return true if it prevents normal item use (placing blocks for instance)
*/
public boolean onUseOnBlock(Player player, Player.Hand hand, BlockPosition position, Direction blockFace) {
public boolean onUseOnBlock(@NotNull Player player, @NotNull Player.Hand hand, @NotNull BlockPosition position, @NotNull Direction blockFace) {
return false;
}
@ -720,7 +743,7 @@ public class ItemStack implements DataContainer {
* @param slot the slot clicked
* @param playerInventory true if the click is in the player inventory
*/
public void onInventoryClick(Player player, ClickType clickType, int slot, boolean playerInventory) {
public void onInventoryClick(@NotNull Player player, @NotNull ClickType clickType, int slot, boolean playerInventory) {
}
}

View File

@ -1,5 +1,7 @@
package net.minestom.server.item;
import org.jetbrains.annotations.NotNull;
/**
* Represents the stacking rule of an {@link ItemStack}.
* This can be used to mimic the vanilla one (using the displayed item quantity)
@ -21,7 +23,7 @@ public abstract class StackingRule {
* @return true if both {@link ItemStack} can be stacked together
* (without taking their amount in consideration)
*/
public abstract boolean canBeStacked(ItemStack item1, ItemStack item2);
public abstract boolean canBeStacked(@NotNull ItemStack item1, @NotNull ItemStack item2);
/**
* Used to know if an {@link ItemStack} can have the size {@code newAmount} applied.
@ -30,7 +32,7 @@ public abstract class StackingRule {
* @param newAmount the desired new amount
* @return true if {@code item} can have its stack size set to newAmount
*/
public abstract boolean canApply(ItemStack item, int newAmount);
public abstract boolean canApply(@NotNull ItemStack item, int newAmount);
/**
* Changes the size of the {@link ItemStack} to {@code newAmount}.
@ -40,7 +42,8 @@ public abstract class StackingRule {
* @param newAmount the new item size
* @return the new {@link ItemStack} with the new amount
*/
public abstract ItemStack apply(ItemStack item, int newAmount);
@NotNull
public abstract ItemStack apply(@NotNull ItemStack item, int newAmount);
/**
* Used to determine the current stack size of an {@link ItemStack}.
@ -49,7 +52,7 @@ public abstract class StackingRule {
* @param itemStack the {@link ItemStack} to check the size
* @return the correct size of {@link ItemStack}
*/
public abstract int getAmount(ItemStack itemStack);
public abstract int getAmount(@NotNull ItemStack itemStack);
/**
* Gets the max size of a stack.

View File

@ -4,7 +4,6 @@ import net.minestom.server.item.ItemStack;
import net.minestom.server.item.Material;
import net.minestom.server.registry.Registries;
import net.minestom.server.utils.NBTUtils;
import net.minestom.server.utils.item.ItemStackUtils;
import net.minestom.server.utils.validate.Check;
import org.jetbrains.annotations.NotNull;
import org.jglrxavpok.hephaistos.nbt.NBTCompound;
@ -23,8 +22,8 @@ public class CrossbowMeta implements ItemMeta {
*
* @param projectile the projectile of the crossbow
*/
public void setProjectile(ItemStack projectile) {
Check.argCondition(!ItemStackUtils.isVisible(projectile), "the projectile of your crossbow isn't visible (null or air)");
public void setProjectile(@NotNull ItemStack projectile) {
Check.argCondition(projectile.isAir(), "the projectile of your crossbow isn't visible");
this.projectile1 = projectile;
this.triple = false;
}
@ -36,10 +35,10 @@ public class CrossbowMeta implements ItemMeta {
* @param projectile2 the projectile 2
* @param projectile3 the projectile 3
*/
public void setProjectiles(ItemStack projectile1, ItemStack projectile2, ItemStack projectile3) {
Check.argCondition(!ItemStackUtils.isVisible(projectile1), "the projectile1 of your crossbow isn't visible (null or air)");
Check.argCondition(!ItemStackUtils.isVisible(projectile2), "the projectile2 of your crossbow isn't visible (null or air)");
Check.argCondition(!ItemStackUtils.isVisible(projectile3), "the projectile3 of your crossbow isn't visible (null or air)");
public void setProjectiles(@NotNull ItemStack projectile1, @NotNull ItemStack projectile2, @NotNull ItemStack projectile3) {
Check.argCondition(projectile1.isAir(), "the projectile1 of your crossbow isn't visible");
Check.argCondition(projectile2.isAir(), "the projectile2 of your crossbow isn't visible");
Check.argCondition(projectile3.isAir(), "the projectile3 of your crossbow isn't visible");
this.projectile1 = projectile1;
this.projectile2 = projectile2;
@ -103,7 +102,7 @@ public class CrossbowMeta implements ItemMeta {
@Override
public boolean hasNbt() {
return ItemStackUtils.isVisible(projectile1);
return !projectile1.isAir();
}
@Override
@ -193,7 +192,8 @@ public class CrossbowMeta implements ItemMeta {
return crossbowMeta;
}
private NBTCompound getItemCompound(ItemStack itemStack) {
@NotNull
private NBTCompound getItemCompound(@NotNull ItemStack itemStack) {
NBTCompound compound = new NBTCompound();
compound.setByte("Count", itemStack.getAmount());

View File

@ -2,6 +2,7 @@ package net.minestom.server.item.rule;
import net.minestom.server.item.ItemStack;
import net.minestom.server.item.StackingRule;
import org.jetbrains.annotations.NotNull;
public class VanillaStackingRule extends StackingRule {
@ -10,17 +11,18 @@ public class VanillaStackingRule extends StackingRule {
}
@Override
public boolean canBeStacked(ItemStack item1, ItemStack item2) {
public boolean canBeStacked(@NotNull ItemStack item1, @NotNull ItemStack item2) {
return item1.isSimilar(item2);
}
@Override
public boolean canApply(ItemStack item, int newAmount) {
public boolean canApply(@NotNull ItemStack item, int newAmount) {
return newAmount > 0 && newAmount <= getMaxSize();
}
@NotNull
@Override
public ItemStack apply(ItemStack item, int newAmount) {
public ItemStack apply(@NotNull ItemStack item, int newAmount) {
if (newAmount <= 0)
return ItemStack.getAirItem();
@ -29,7 +31,7 @@ public class VanillaStackingRule extends StackingRule {
}
@Override
public int getAmount(ItemStack itemStack) {
public int getAmount(@NotNull ItemStack itemStack) {
return itemStack.getAmount();
}
}

View File

@ -1,31 +0,0 @@
package net.minestom.server.utils.item;
import net.minestom.server.item.ItemStack;
public final class ItemStackUtils {
private ItemStackUtils() {
}
/**
* Ensure that the returned {@link ItemStack} won't be null
* by replacing every null instance by a new Air one.
*
* @param itemStack the item to return if not null
* @return {@code itemStack} if not null, {@link ItemStack#getAirItem()} otherwise
*/
public static ItemStack notNull(ItemStack itemStack) {
return itemStack == null ? ItemStack.getAirItem() : itemStack;
}
/**
* Used to check if the item stack is a visible item (not null and not air)
*
* @param itemStack the item to check
* @return true if the item is visible, false otherwise
*/
public static boolean isVisible(ItemStack itemStack) {
return itemStack != null && !itemStack.isAir();
}
}