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);
}
}
}
InventoryCommandsImplementation.java 文件源码
java
阅读 29
收藏 0
点赞 0
评论 0
项目:Proyecto-DASI
作者:
评论列表
文章目录