类org.bukkit.inventory.Inventory源码实例Demo

下面列出了怎么用org.bukkit.inventory.Inventory的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: TradePlus   文件: InvUtils.java
public static Inventory getTradeInventory(Player player1, Player player2) {
  Inventory inv =
      Bukkit.createInventory(
          player1.getInventory().getHolder(),
          54,
          ChatColor.translateAlternateColorCodes('&', pl.getConfig().getString("gui.title"))
              .replace("%PLAYER%", player2.getName()));
  for (int i = 4; i <= 49; i += 9) inv.setItem(i, placeHolder);
  if (pl.getConfig().getBoolean("gui.showaccept")) {
    inv.setItem(0, acceptTrade);
    inv.setItem(8, theyCancelled);
    if (pl.getConfig().getBoolean("gui.force.enabled", true)
        && player1.hasPermission("tradeplus.admin")) inv.setItem(49, force);
  } else {
    inv.setItem(0, placeHolder);
    inv.setItem(8, placeHolder);
  }
  if (pl.getConfig().getBoolean("gui.showhead", true))
    inv.setItem(
        4,
        ItemFactory.getPlayerSkull(
            player2,
            pl.getConfig().getString("gui.head").replace("%PLAYER%", player2.getName())));
  return inv;
}
 
源代码2 项目: ServerTutorial   文件: Base64Serialize.java
public static String toBase64(Inventory inventory) {
    try {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream);

        // Write the size of the inventory
        dataOutput.writeInt(inventory.getSize());

        // Save every element in the list
        for (int i = 0; i < inventory.getSize(); i++) {
            dataOutput.writeObject(inventory.getItem(i));
        }

        // Serialize that array
        dataOutput.close();
        return Base64Coder.encodeLines(outputStream.toByteArray());
    } catch (Exception e) {
        throw new IllegalStateException("Cannot into itemstacksz!", e);
    }
}
 
源代码3 项目: Shopkeepers   文件: PlayerShopkeeper.java
protected int getCurrencyInChest() {
	int total = 0;
	Block chest = this.getChest();
	if (Utils.isChest(chest.getType())) {
		Inventory inv = ((Chest) chest.getState()).getInventory();
		ItemStack[] contents = inv.getContents();
		for (ItemStack item : contents) {
			if (Settings.isCurrencyItem(item)) {
				total += item.getAmount();
			} else if (Settings.isHighCurrencyItem(item)) {
				total += item.getAmount() * Settings.highCurrencyValue;
			}
		}
	}
	return total;
}
 
源代码4 项目: CardinalPGM   文件: ObserverModule.java
public void refreshView(final UUID view) {
    if (Bukkit.getPlayer(view) != null && viewing.containsKey(view)) {
        List<UUID> viewers = viewing.get(view);
        for (int i = 0; i < viewers.size(); i++) {
            Player player = Bukkit.getPlayer(viewers.get(i));
            if (player != null && player.getOpenInventory().getTitle().contains(Bukkit.getPlayer(view).getName())) {
                Inventory fake = getFakeInventory(Bukkit.getPlayer(view), player.getLocale());
                for (int i2 = 0; i2 < 45; i2 ++) {
                    try {
                        player.getOpenInventory().setItem(i2, fake.getItem(i2));
                    } catch (NullPointerException e) {
                    }
                }
                if (!player.getOpenInventory().getTitle().equals(Bukkit.getPlayer(view).getDisplayName())){
                    player.openInventory(fake);
                    viewing.get(view).add(viewers.get(i));
                }
            }
        }
    }
}
 
源代码5 项目: SkyWarsReloaded   文件: ChestManager.java
public void fillCrate(Inventory inventory, int max) {
 	if (inventory != null) {
 		inventory.clear();
         int added = 0;
         Collections.shuffle(randomLoc);

for (int chance: crateItemList.keySet()) {
	for (ItemStack item : crateItemList.get(chance)) {
		if (item != null && !item.getType().equals(Material.AIR)) {
			if (random.nextInt(100) + 1 <= chance) {
				inventory.setItem(randomLoc.get(added), item);
				added++;
				if (added >= inventory.getSize() - 1 || added >= max) {
					break;
				}
			}
		}
	}
}
 	}
 }
 
源代码6 项目: uSkyBlock   文件: SkyBlockMenu.java
public Inventory displayLogGUI(final Player player) {
    List<String> lores = new ArrayList<>();
    String title = "\u00a79" + tr("Island Log");
    Inventory menu = Bukkit.createInventory(new UltimateHolder(player, title, MenuType.DEFAULT), 9, title);
    ItemMeta meta4 = sign.getItemMeta();
    meta4.setDisplayName("\u00a79\u00a7l" + tr("Island Log"));
    addLore(lores, tr("\u00a7eClick here to return to\n\u00a7ethe main island screen."));
    meta4.setLore(lores);
    sign.setItemMeta(meta4);
    menu.addItem(new ItemStack[]{sign});
    lores.clear();
    ItemStack menuItem = new ItemStack(Material.WRITABLE_BOOK, 1);
    meta4 = menuItem.getItemMeta();
    meta4.setDisplayName(tr("\u00a7e\u00a7lIsland Log"));
    for (String log : plugin.getIslandInfo(player).getLog()) {
        lores.add(log);
    }
    meta4.setLore(lores);
    menuItem.setItemMeta(meta4);
    menu.setItem(8, menuItem);
    lores.clear();
    return menu;
}
 
源代码7 项目: HeavySpleef   文件: FlagTrackingSpectate.java
@Subscribe
public void onSpectateLeave(FlagSpectate.SpectateLeaveEvent event) {
	Player player = event.getPlayer().getBukkitPlayer();
	Inventory inventory = player.getInventory();
	
	for (ItemStack stack : inventory.getContents()) {
		if (stack == null) {
			continue;
		}
		
		MetadatableItemStack metadatable = new MetadatableItemStack(stack);
		if (!metadatable.hasItemMeta() || !metadatable.getItemMeta().hasLore() || !metadatable.hasMetadata(TRACKER_KEY)) {
			continue;
		}
		
		inventory.remove(stack);
	}
	
	player.updateInventory();
	tracking.remove(player);
}
 
源代码8 项目: civcraft   文件: LoreMaterial.java
public void moveDropSet(Player player, Inventory inv, int slot, ItemStack newItem) {
	
	ItemStack stack = inv.getItem(slot);
	inv.setItem(slot, newItem);

	if (stack != null) {
		if (stack.equals(newItem)) {
			return;
		}
		
		HashMap<Integer, ItemStack> leftovers = inv.addItem(stack);
		
		for (ItemStack s : leftovers.values()) {
			player.getWorld().dropItem(player.getLocation(), s);
		}
	}
	
}
 
源代码9 项目: Slimefun4   文件: MagicWorkbench.java
private boolean isCraftable(Inventory inv, ItemStack[] recipe) {
    for (int j = 0; j < inv.getContents().length; j++) {
        if (!SlimefunUtils.isItemSimilar(inv.getContents()[j], recipe[j], true)) {
            if (SlimefunItem.getByItem(recipe[j]) instanceof SlimefunBackpack) {
                if (!SlimefunUtils.isItemSimilar(inv.getContents()[j], recipe[j], false)) {
                    return false;
                }
            }
            else {
                return false;
            }
        }
    }

    return true;
}
 
源代码10 项目: WildernessTp   文件: TrueFalseGui.java
public static void openTrue(Player p) {
    ItemStack close = new ItemStack(Material.REDSTONE_BLOCK, 1);
    ItemMeta meta = close.getItemMeta();
    meta.setDisplayName("Close");
    ArrayList<String> lore = new ArrayList<String>();
    lore.add("Click to close the inventory and return to normal gameplay");
    meta.setLore(lore);
    close.setItemMeta(meta);
    Inventory Wildtp = Bukkit.createInventory(p, 9, "Hooks");
    p.openInventory(Wildtp);
    if(!Wild.getInstance().thirteen) {
        Wildtp.setItem(2, MainGui.makeItem(Material.valueOf("WOOL"), "True", Collections.singletonList("Click to to enable the value to true"), (byte) 5));
        Wildtp.setItem(5, MainGui.makeItem(Material.valueOf("WOOL"), "False", Collections.singletonList("Click to to disable the value to false"), (byte) 14));
    }else{
        Wildtp.setItem(2, MainGui.makeItem(Material.valueOf("GREEN_WOOL"), "True", Collections.singletonList("Click to to enable the value to true")));
        Wildtp.setItem(5, MainGui.makeItem(Material.valueOf("RED_WOOL"), "False", Collections.singletonList("Click to to disable the value to false")));
    }
    Wildtp.setItem(8, close);
}
 
源代码11 项目: TabooLib   文件: ItemStacker.java
private static boolean check(ItemStack item, Inventory inventory, int i) {
    if (Items.isNull(inventory.getItem(i))) {
        // 如果物品数量过多
        if (item.getAmount() > item.getType().getMaxStackSize()) {
            ItemStack itemClone = item.clone();
            itemClone.setAmount(item.getType().getMaxStackSize());
            inventory.setItem(i, itemClone);
            item.setAmount(item.getAmount() - item.getType().getMaxStackSize());
        } else {
            inventory.setItem(i, item.clone());
            item.setAmount(0);
            return true;
        }
    }
    return false;
}
 
源代码12 项目: Shopkeepers   文件: BookPlayerShopkeeper.java
@Override
protected void saveEditor(Inventory inventory, Player player) {
	final BookPlayerShopkeeper shopkeeper = this.getShopkeeper();
	for (int column = 0; column < 8; column++) {
		ItemStack item = inventory.getItem(column);
		if (!Utils.isEmpty(item) && item.getType() == Material.WRITTEN_BOOK) {
			String bookTitle = getTitleOfBook(item);
			if (bookTitle != null) {
				int price = this.getPriceFromColumn(inventory, column);
				if (price > 0) {
					shopkeeper.addOffer(bookTitle, price);
				} else {
					shopkeeper.removeOffer(bookTitle);
				}
			}
		}
	}
}
 
源代码13 项目: UHC   文件: IconInventory.java
@EventHandler(ignoreCancelled = true)
public void on(InventoryClickEvent event) {
    final Inventory inventory = event.getInventory();
    if (!inventory.getTitle().equals(title)) return;

    event.setCancelled(true);

    final int slot = event.getRawSlot();

    if (slot < 0 || slot >= inventory.getSize() || slot >= icons.size()) return;

    // call event
    final IconStack icon = icons.get(slot);

    if (icon != null) {
        icon.onClick((Player) event.getWhoClicked());
    }
}
 
源代码14 项目: QuickShop-Reremake   文件: BlockListener.java
@EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
public void onInventoryMove(InventoryMoveItemEvent event) {
    if (!super.getPlugin().getConfig().getBoolean("shop.update-sign-when-inventory-moving", true)) {
        return;
    }

    final Inventory inventory = event.getDestination();
    final Location location = inventory.getLocation();

    if (location == null) {
        return;
    }

    // Delayed task. Event triggers when item is moved, not when it is received.
    final Shop shop = getShopRedstone(location, true);
    if (shop != null) {
        super.getPlugin().getSignUpdateWatcher().scheduleSignUpdate(shop);
    }
}
 
源代码15 项目: TabooLib   文件: Items.java
public static boolean takeItem(Inventory inventory, Matcher matcher, int amount) {
    int takeAmount = amount;
    ItemStack[] contents = inventory.getContents();
    for (int i = 0; i < contents.length; i++) {
        ItemStack itemStack = contents[i];
        if (!isNull(itemStack) && matcher.match(itemStack)) {
            takeAmount -= itemStack.getAmount();
            if (takeAmount < 0) {
                itemStack.setAmount(itemStack.getAmount() - (takeAmount + itemStack.getAmount()));
                return true;
            } else {
                inventory.setItem(i, null);
                if (takeAmount == 0) {
                    return true;
                }
            }
        }
    }
    return false;
}
 
源代码16 项目: QuickShop-Reremake   文件: Util.java
/**
 * Returns the number of items that can be given to the inventory safely.
 *
 * @param inv  The inventory to count
 * @param item The item prototype. Material, durabiltiy and enchants must match for 'stackability'
 *             to occur.
 * @return The number of items that can be given to the inventory safely.
 */
public static int countSpace(@Nullable Inventory inv, @NotNull ItemStack item) {
    if (inv == null) {
        return 0;
    }
    int space = 0;

    int itemMaxStackSize = getItemMaxStackSize(item.getType());

    ItemStack[] contents = inv.getStorageContents();
    for (final ItemStack iStack : contents) {
        if (iStack == null || iStack.getType() == Material.AIR) {
            space += itemMaxStackSize;
        } else if (plugin.getItemMatcher().matches(item, iStack)) {
            space += iStack.getAmount() >= itemMaxStackSize ? 0 : itemMaxStackSize - iStack.getAmount();
        }
    }
    return space / item.getAmount();
}
 
源代码17 项目: WildernessTp   文件: MainGui.java
public static void OpenGUI(Player p) {
    ItemStack Close = new ItemStack(Material.REDSTONE_BLOCK, 1);
    ItemMeta meta = Close.getItemMeta();
    meta.setDisplayName("Close");
    ArrayList<String> lore = new ArrayList<String>();
    lore.add("Click to close the inventory and return to normal gameplay");
    meta.setLore(lore);
    Close.setItemMeta(meta);
    Inventory Wildtp = Bukkit.createInventory(p, 18, "WildTp");
    putEdit(p);
    p.openInventory(Wildtp);
    p.sendMessage(ChatColor.RED+"Please make sure to use the redstone block to close early or you wont be able to chat");
    Wildtp.setItem(17, Close);
    Wildtp.setItem(2, makeItem(Material.valueOf(getMaterials().get("Book")), "Messages", Collections.singletonList("Click to set the messages")));
    Wildtp.setItem(4, makeItem(Material.PAPER, "Set", Arrays.asList("Click me to set the values for x and z ","along with cooldown and cost")));
    Wildtp.setItem(6, makeItem(Material.BOOK,"Add a potion or world", Collections.singletonList("Click to add a potion or world")));
    Wildtp.setItem(0, makeItem(Material.JUKEBOX, "Sounds", Collections.singletonList("Click me to set the sound")));
    Wildtp.setItem(8, makeItem(Material.TRIPWIRE_HOOK,"Hooks", Collections.singletonList("Click me to enable or disable a hook")));
}
 
源代码18 项目: QuickShop-Reremake   文件: ContainerShop.java
/**
 * Add an item to shops chest.
 *
 * @param item   The itemstack. The amount does not matter, just everything else
 * @param amount The amount to add to the shop.
 */
@Override
public void add(@NotNull ItemStack item, int amount) {
    if (this.unlimited) {
        return;
    }
    item = item.clone();
    int itemMaxStackSize = Util.getItemMaxStackSize(item.getType());
    Inventory inv = this.getInventory();
    int remains = amount;
    while (remains > 0) {
        int stackSize = Math.min(remains, itemMaxStackSize);
        item.setAmount(stackSize);
        Objects.requireNonNull(inv).addItem(item);
        remains -= stackSize;
    }
    this.setSignText();
}
 
源代码19 项目: BedwarsRel   文件: Region.java
public Region(Location pos1, Location pos2, String name) {
  if (pos1 == null || pos2 == null) {
    return;
  }

  if (!pos1.getWorld().getName().equals(pos2.getWorld().getName())) {
    return;
  }

  this.world = pos1.getWorld();
  this.setMinMax(pos1, pos2);
  this.placedBlocks = new ArrayList<Block>();
  this.breakedBlocks = new ArrayList<Block>();
  this.breakedBlockTypes = new HashMap<Block, Integer>();
  this.breakedBlockData = new HashMap<Block, Byte>();
  this.breakedBlockFace = new HashMap<Block, BlockFace>();
  this.placedUnbreakableBlocks = new ArrayList<Block>();
  this.breakedBlockPower = new HashMap<Block, Boolean>();
  this.inventories = new ArrayList<Inventory>();
  this.removingEntities = new ArrayList<Entity>();

  this.name = name;
}
 
源代码20 项目: Crazy-Crates   文件: CrazyCrates.java
/**
 * Load the crate preview of a crate.
 * @param crate The crate you wish to load the preview of.
 * @return An Inventory object of the preview.
 */
public Inventory loadPreview(Crate crate) {
    FileConfiguration file = crate.getFile();
    int slots = 9;
    for (int size = file.getConfigurationSection("Crate.Prizes").getKeys(false).size(); size > 9 && slots < crate.getMaxSlots(); size -= 9) {
        slots += 9;
    }
    Inventory inv = Bukkit.createInventory(null, slots, Methods.sanitizeColor(file.getString("Crate.Name")));
    for (String reward : file.getConfigurationSection("Crate.Prizes").getKeys(false)) {
        String id = file.getString("Crate.Prizes." + reward + ".DisplayItem", "Stone");
        String name = file.getString("Crate.Prizes." + reward + ".DisplayName", "");
        List<String> lore = file.getStringList("Crate.Prizes." + reward + ".Lore");
        HashMap<Enchantment, Integer> enchantments = new HashMap<>();
        String player = file.getString("Crate.Prizes." + reward + ".Player", "");
        boolean glowing = file.getBoolean("Crate.Prizes." + reward + ".Glowing");
        int amount = file.getInt("Crate.Prizes." + reward + ".DisplayAmount", 1);
        for (String enchantmentName : file.getStringList("Crate.Prizes." + reward + ".DisplayEnchantments")) {
            Enchantment enchantment = Methods.getEnchantment(enchantmentName.split(":")[0]);
            if (enchantment != null) {
                enchantments.put(enchantment, Integer.parseInt(enchantmentName.split(":")[1]));
            }
        }
        try {
            inv.setItem(inv.firstEmpty(), new ItemBuilder().setMaterial(id).setAmount(amount).setName(name).setLore(lore).setEnchantments(enchantments).setGlowing(glowing).setPlayer(player).build());
        } catch (Exception e) {
            inv.addItem(new ItemBuilder().setMaterial("RED_TERRACOTTA", "STAINED_CLAY:14").setName("&c&lERROR").setLore(Arrays.asList("&cThere is an error", "&cFor the reward: &c" + reward)).build());
        }
    }
    return inv;
}
 
源代码21 项目: civcraft   文件: ReportChestsTask.java
private int countItem(Inventory inv, int id) {
	int total = 0;
	for (ItemStack stack : inv.all(ItemManager.getMaterial(id)).values()) {
		total += stack.getAmount();
	}
	
	return total;
}
 
源代码22 项目: GriefDefender   文件: PlayerEventHandler.java
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerInteractInventoryClick(InventoryClickEvent event) {
    final HumanEntity player = event.getWhoClicked();
    GDCauseStackManager.getInstance().pushCause(player);
    if (!GDFlags.INTERACT_INVENTORY_CLICK || event.getClickedInventory() == null || !GriefDefenderPlugin.getInstance().claimsEnabledForWorld(player.getWorld().getUID())) {
        return;
    }

    GDTimings.PLAYER_INTERACT_INVENTORY_CLICK_EVENT.startTiming();
    final Location location = player.getLocation();
    final GDClaim claim = this.dataStore.getClaimAt(location);
    final ItemStack cursorItem = event.getCursor();
    final Inventory source = event.getInventory();
    final ItemStack target = event.getCurrentItem();

    if (GriefDefenderPlugin.isTargetIdBlacklisted(Flags.INTERACT_INVENTORY_CLICK.getName(), target, player.getWorld().getUID())) {
        GDTimings.PLAYER_INTERACT_INVENTORY_CLICK_EVENT.stopTiming();
        return;
    }

    final GDPermissionUser user = PermissionHolderCache.getInstance().getOrCreateUser(player.getUniqueId());
    final Tristate result = GDPermissionManager.getInstance().getFinalPermission(event, location, claim, Flags.INTERACT_INVENTORY_CLICK, source, target, user, TrustTypes.CONTAINER, true);
    if (result == Tristate.FALSE) {
        final Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.PERMISSION_INTERACT_ITEM,
                ImmutableMap.of(
                "player", claim.getOwnerDisplayName(),
                "item", ItemTypeRegistryModule.getInstance().getNMSKey(target)));
        GriefDefenderPlugin.sendClaimDenyMessage(claim, player, message);
        event.setCancelled(true);
    }
    GDTimings.PLAYER_INTERACT_INVENTORY_CLICK_EVENT.stopTiming();
}
 
源代码23 项目: TradePlus   文件: Trade.java
@EventHandler
public void onDrag(InventoryDragEvent event) {
  if (!(event.getWhoClicked() instanceof Player)) {
    return;
  }
  Player player = (Player) event.getWhoClicked();
  Inventory inv = event.getInventory();
  if (inv1.getViewers().contains(player) || inv2.getViewers().contains(player)) {
    if (accept1 && accept2) {
      event.setCancelled(true);
      return;
    }

    for (int slot : event.getInventorySlots()) {
      if (!InvUtils.leftSlots.contains(slot)) {
        event.setCancelled(true);
        return;
      }
    }
    if (event.getInventorySlots().size() > 0) {
      if (pl.getConfig().getBoolean("antiscam.preventchangeonaccept")
          && ((player.equals(player1) && accept1) || (player.equals(player2) && accept2))) {
        event.setCancelled(true);
        return;
      }
      Bukkit.getScheduler().runTaskLater(pl, this::updateInventories, 1L);
      click();
    }
  } else if (inv.equals(spectatorInv)) {
    event.setCancelled(true);
  }
}
 
源代码24 项目: HeavySpleef   文件: FlagItemReward.java
private static boolean isInventoryFull(Inventory inventory) {
	ItemStack[] content = inventory.getContents();
	
	for (ItemStack stack : content) {
		if (stack != null && stack.getType() != Material.AIR) {
			continue;
		}
		
		return false;
	}
	
	return true;
}
 
源代码25 项目: AACAdditionPro   文件: InventoryUtils.java
/**
 * Checks if an {@link org.bukkit.inventory.Inventory} is empty.
 */
public static boolean isInventoryEmpty(Inventory inventory)
{
    for (ItemStack content : inventory.getContents()) {
        if (content != null) {
            return false;
        }
    }
    return true;
}
 
源代码26 项目: Shopkeepers   文件: NormalPlayerShopkeeper.java
@Override
protected boolean openWindow(Player player) {
	final NormalPlayerShopkeeper shopkeeper = this.getShopkeeper();
	Inventory inventory = Bukkit.createInventory(player, 27, Settings.editorTitle);

	// add offers:
	List<ItemCount> chestItems = shopkeeper.getItemsFromChest();
	int column = 0;
	for (ItemCount itemCount : chestItems) {
		ItemStack item = itemCount.getItem(); // this item is already a copy with amount 1
		int price = 0;
		PriceOffer offer = shopkeeper.getOffer(item);
		if (offer != null) {
			price = offer.getPrice();
			item.setAmount(offer.getItem().getAmount());
		}

		// add offer to inventory:
		inventory.setItem(column, item);
		this.setEditColumnCost(inventory, column, price);

		column++;
		if (column > 8) break;
	}

	// add the special buttons:
	this.setActionButtons(inventory);
	// show editing inventory:
	player.openInventory(inventory);
	return true;
}
 
源代码27 项目: Crazy-Crates   文件: Cosmic.java
public static void openCosmic(Player player, Crate crate, KeyType keyType, boolean checkHand) {
    Inventory inv = Bukkit.createInventory(null, 27, Methods.sanitizeColor(crate.getFile().getString("Crate.CrateName") + " - Choose"));
    setChests(inv, crate);
    cc.addPlayerKeyType(player, keyType);
    checkHands.put(player, checkHand);
    player.openInventory(inv);
}
 
源代码28 项目: Crazy-Crates   文件: CSGO.java
private static void moveItems(Inventory inv, Player player, Crate crate) {
    ArrayList<ItemStack> items = new ArrayList<>();
    for (int i = 9; i > 8 && i < 17; i++) {
        items.add(inv.getItem(i));
    }
    inv.setItem(9, crate.pickPrize(player).getDisplayItem());
    for (int i = 0; i < 8; i++) {
        inv.setItem(i + 10, items.get(i));
    }
}
 
源代码29 项目: Skript   文件: ItemType.java
/**
 * Removes this type from the given inventory. Does not call updateInventory for players.
 * 
 * @param invi
 * @return Whether everything could be removed from the inventory
 */
public boolean removeFrom(Inventory invi) {
	ItemStack[] buf = getCopiedContents(invi);
	
	final boolean ok = removeFrom(Arrays.asList(buf));
	
	invi.setContents(buf);
	return ok;
}
 
源代码30 项目: Slimefun4   文件: BackpackCrafter.java
protected void upgradeBackpack(Player p, Inventory inv, SlimefunBackpack backpack, ItemStack output) {
    ItemStack backpackItem = null;

    for (int j = 0; j < 9; j++) {
        if (inv.getContents()[j] != null && inv.getContents()[j].getType() != Material.AIR && SlimefunItem.getByItem(inv.getContents()[j]) instanceof SlimefunBackpack) {
            backpackItem = inv.getContents()[j];
            break;
        }
    }

    int size = backpack.getSize();
    Optional<String> id = retrieveID(backpackItem, size);

    if (id.isPresent()) {
        for (int line = 0; line < output.getItemMeta().getLore().size(); line++) {
            if (output.getItemMeta().getLore().get(line).equals(ChatColors.color("&7ID: <ID>"))) {
                ItemMeta im = output.getItemMeta();
                List<String> lore = im.getLore();
                lore.set(line, lore.get(line).replace("<ID>", id.get()));
                im.setLore(lore);
                output.setItemMeta(im);
                break;
            }
        }
    }
    else {
        for (int line = 0; line < output.getItemMeta().getLore().size(); line++) {
            if (output.getItemMeta().getLore().get(line).equals(ChatColors.color("&7ID: <ID>"))) {
                int target = line;

                PlayerProfile.get(p, profile -> {
                    int backpackId = profile.createBackpack(size).getId();
                    SlimefunPlugin.getBackpackListener().setBackpackId(p, output, target, backpackId);
                });

                break;
            }
        }
    }
}
 
 类所在包
 同包方法