mirror of
https://github.com/Minestom/Minestom.git
synced 2024-09-27 14:13:24 +02:00
More annotations.
This commit is contained in:
parent
29df8f5b39
commit
2f21a7c233
@ -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
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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");
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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) {
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -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.
|
||||
|
@ -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());
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user