All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.guizhanss.guizhanlib.minecraft.utils.InventoryUtil Maven / Gradle / Ivy

package net.guizhanss.guizhanlib.minecraft.utils;

import com.google.common.base.Preconditions;
import lombok.experimental.UtilityClass;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;

import javax.annotation.ParametersAreNonnullByDefault;
import java.util.Arrays;
import java.util.Map;
import java.util.Objects;

/**
 * Utility methods about player inventory.
 *
 * @author ybw0014
 */
@SuppressWarnings("ConstantConditions")
@UtilityClass
public final class InventoryUtil {
    /**
     * This method push all {@link ItemStack} to {@link Player}'s inventory.
     * if some items cannot be pushed, they will be dropped at {@link Player}'s {@link Location}.
     *
     * @param p          the {@link Player}
     * @param itemStacks all the {@link ItemStack}s to be pushed
     */
    @ParametersAreNonnullByDefault
    public static void push(Player p, ItemStack... itemStacks) {
        Preconditions.checkArgument(p != null, "player should not be null");

        push(p, p.getLocation(), itemStacks);
    }

    /**
     * This method push all {@link ItemStack} to {@link Player}'s inventory.
     * if some items cannot be pushed, they will be dropped at the specified {@link Location}.
     *
     * @param p          the {@link Player}
     * @param loc        the {@link Location} to drop items
     * @param itemStacks all the {@link ItemStack}s to be pushed
     */
    @ParametersAreNonnullByDefault
    public static void push(Player p, Location loc, ItemStack... itemStacks) {
        Preconditions.checkArgument(p != null, "player should not be null");
        Preconditions.checkArgument(loc != null, "location should not be null");
        Preconditions.checkArgument(itemStacks != null, "at least one ItemStack is required");
        Preconditions.checkArgument(itemStacks.length > 0, "at least one ItemStack is required");

        // filter null ItemStacks
        itemStacks = Arrays.stream(itemStacks).filter(Objects::nonNull).toArray(ItemStack[]::new);

        Map remainingItemMap = p.getInventory().addItem(itemStacks);

        for (ItemStack item : remainingItemMap.values()) {
            p.getWorld().dropItem(loc, item.clone());
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy