当前位置: 首页>>代码示例>>Java>>正文


Java ItemStack.isStackable方法代码示例

本文整理汇总了Java中net.minecraft.item.ItemStack.isStackable方法的典型用法代码示例。如果您正苦于以下问题:Java ItemStack.isStackable方法的具体用法?Java ItemStack.isStackable怎么用?Java ItemStack.isStackable使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在net.minecraft.item.ItemStack的用法示例。


在下文中一共展示了ItemStack.isStackable方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: canItemStacksStackRelaxed

import net.minecraft.item.ItemStack; //导入方法依赖的package包/类
/**
 * A relaxed version of canItemStacksStack that stacks itemstacks with different metadata if they don't have subtypes.
 * This usually only applies when players pick up items.
 */
public static boolean canItemStacksStackRelaxed(ItemStack a, ItemStack b)
{
    if (a == null || b == null || a.getItem() != b.getItem())
        return false;

    if (!a.isStackable())
        return false;

    // Metadata value only matters when the item has subtypes
    // Vanilla stacks non-subtype items with different metadata together
    // e.g. a stick with metadata 0 and a stick with metadata 1 stack
    if (a.getHasSubtypes() && a.getMetadata() != b.getMetadata())
        return false;

    return ItemStack.areItemStackTagsEqual(a, b);
}
 
开发者ID:F1r3w477,项目名称:CustomWorldGen,代码行数:21,代码来源:ItemHandlerHelper.java

示例2: combineSlots

import net.minecraft.item.ItemStack; //导入方法依赖的package包/类
static void combineSlots(EntityPlayerMP player, int dst, int add)
{
    InventoryPlayer inv = player.inventory;
    ItemStack dstStack = inv.getStackInSlot(dst);
    ItemStack addStack = inv.getStackInSlot(add);

    if (addStack == null)
        return;    // Combination is a no-op.

    if (dstStack == null)   // Do a straight move - nothing to combine with.
    {
        inv.setInventorySlotContents(dst, addStack);
        inv.setInventorySlotContents(add, null);
        return;
    }

    // Check we can combine. This logic comes from InventoryPlayer.storeItemStack():
    boolean itemsMatch = dstStack.getItem() == addStack.getItem();
    boolean dstCanStack = dstStack.isStackable() && dstStack.stackSize < dstStack.getMaxStackSize() && dstStack.stackSize < inv.getInventoryStackLimit();
    boolean subTypesMatch = !dstStack.getHasSubtypes() || dstStack.getMetadata() == addStack.getMetadata();
    boolean tagsMatch = ItemStack.areItemStackTagsEqual(dstStack, addStack);
    if (itemsMatch && dstCanStack && subTypesMatch && tagsMatch)
    {
        // We can combine, so figure out how much we have room for:
        int limit = Math.min(dstStack.getMaxStackSize(), inv.getInventoryStackLimit());
        int room = limit - dstStack.stackSize;
        if (addStack.stackSize > room)
        {
            // Not room for all of it, so shift across as much as possible.
            addStack.stackSize -= room;
            dstStack.stackSize += room;
        }
        else
        {
            // Room for the whole lot, so empty out the add slot.
            dstStack.stackSize += addStack.stackSize;
            inv.setInventorySlotContents(add, null);
        }
    }
}
 
开发者ID:Yarichi,项目名称:Proyecto-DASI,代码行数:41,代码来源:InventoryCommandsImplementation.java

示例3: doesRecipeMatch

import net.minecraft.item.ItemStack; //导入方法依赖的package包/类
public static boolean doesRecipeMatch(ItemStack[] recipeItems, InventoryCrafting matrix, World world)
{
	int requiredMatches = 9;
	int matches = 0;

	int currentSlot = 0;
	ItemStack currentStack;

	while (currentSlot < 9)	// Going through all 9 slots
	{
		currentStack = matrix.getStackInSlot(currentSlot);	// Hand me your item, slot

		if (currentStack != null && recipeItems[currentSlot] != null)
		{
			if (currentStack.getItem() != recipeItems[currentSlot].getItem())
			{
				return false; 	// Not the right item
			}
			else if (currentStack.isItemStackDamageable() && currentStack.getItemDamage() != recipeItems[currentSlot].getItemDamage())
			{
				return false; 	// Damage doesn't match up
			}
			else if (currentStack.isStackable() && currentStack.stackSize < recipeItems[currentSlot].stackSize)
			{
				return false; 	// Not the right amount
			}
			else
			{
				matches += 1; 	// Seems to check out
			}
		}
		else if (currentStack == null && recipeItems[currentSlot] == null)
		{
			matches += 1;  // Both null, so that works for me too
		}

		// Next!
		currentSlot += 1;
	}

	//if (!world.isRemote) { System.out.println("[RECIPE] Found " + matches + " matches out of " + requiredMatches + "."); }

	if (matches == requiredMatches) { return true; }	// Found all we need
	else { return false; }								// Not enough
}
 
开发者ID:Domochevsky,项目名称:minecraft-quiverbow,代码行数:46,代码来源:RecipeHelper.java

示例4: canMergeStacks

import net.minecraft.item.ItemStack; //导入方法依赖的package包/类
private boolean canMergeStacks(ItemStack stack1, ItemStack stack2)
{
    return !stack1.func_190926_b() && this.stackEqualExact(stack1, stack2) && stack1.isStackable() && stack1.func_190916_E() < stack1.getMaxStackSize() && stack1.func_190916_E() < this.getInventoryStackLimit();
}
 
开发者ID:sudofox,项目名称:Backmemed,代码行数:5,代码来源:InventoryPlayer.java

示例5: insertItemStacked

import net.minecraft.item.ItemStack; //导入方法依赖的package包/类
/**
 * Inserts the ItemStack into the inventory, filling up already present stacks first.
 * This is equivalent to the behaviour of a player picking up an item.
 * Note: This function stacks items without subtypes with different metadata together.
 */
public static ItemStack insertItemStacked(IItemHandler inventory, ItemStack stack, boolean simulate)
{
    if (inventory == null || stack == null)
        return stack;

    // not stackable -> just insert into a new slot
    if (!stack.isStackable())
    {
        return insertItem(inventory, stack, simulate);
    }

    int sizeInventory = inventory.getSlots();

    // go through the inventory and try to fill up already existing items
    for (int i = 0; i < sizeInventory; i++)
    {
        ItemStack slot = inventory.getStackInSlot(i);
        if (canItemStacksStackRelaxed(slot, stack))
        {
            stack = inventory.insertItem(i, stack, simulate);

            if (stack == null)
            {
                break;
            }
        }
    }

    // insert remainder into empty slots
    if (stack != null)
    {
        // find empty slot
        for (int i = 0; i < sizeInventory; i++)
        {
            if (inventory.getStackInSlot(i) == null)
            {
                stack = inventory.insertItem(i, stack, simulate);
                if (stack == null)
                {
                    break;
                }
            }
        }
    }

    return stack;
}
 
开发者ID:F1r3w477,项目名称:CustomWorldGen,代码行数:53,代码来源:ItemHandlerHelper.java

示例6: canMergeStacks

import net.minecraft.item.ItemStack; //导入方法依赖的package包/类
private boolean canMergeStacks(@Nullable ItemStack stack1, ItemStack stack2)
{
    return stack1 != null && this.stackEqualExact(stack1, stack2) && stack1.isStackable() && stack1.stackSize < stack1.getMaxStackSize() && stack1.stackSize < this.getInventoryStackLimit();
}
 
开发者ID:F1r3w477,项目名称:CustomWorldGen,代码行数:5,代码来源:InventoryPlayer.java

示例7: canMergeItemStacks

import net.minecraft.item.ItemStack; //导入方法依赖的package包/类
private boolean canMergeItemStacks(@Nonnull ItemStack stack, @Nonnull ItemStack other) {
    if (stack.isEmpty() || other.isEmpty() || !stack.isStackable() || !other.isStackable()) {
        return false;
    }
    return stack.isItemEqual(other) && ItemStack.areItemStackTagsEqual(stack, other);
}
 
开发者ID:HellFirePvP,项目名称:ModularMachinery,代码行数:7,代码来源:IOInventory.java


注:本文中的net.minecraft.item.ItemStack.isStackable方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。