ContainerHelper.java

net.minecraft.world.ContainerHelper

信息

  • 全限定名:net.minecraft.world.ContainerHelper
  • 类型:public class
  • 包:net.minecraft.world
  • 源码路径:src/main/java/net/minecraft/world/ContainerHelper.java
  • 起始行号:L10
  • 职责:

    TODO

字段/常量

  • TAG_ITEMS
    • 类型: String
    • 修饰符: public static final
    • 源码定位: L11
    • 说明:

      TODO

内部类/嵌套类型

构造器

方法

下面的方法块按源码顺序生成。

public static ItemStack removeItem(List<ItemStack> itemStacks, int slot, int count) @ L13

  • 方法名:removeItem
  • 源码定位:L13
  • 返回类型:ItemStack
  • 修饰符:public static

参数:

  • itemStacks: List
  • slot: int
  • count: int

说明:

TODO

public static ItemStack takeItem(List<ItemStack> itemStacks, int slot) @ L17

  • 方法名:takeItem
  • 源码定位:L17
  • 返回类型:ItemStack
  • 修饰符:public static

参数:

  • itemStacks: List
  • slot: int

说明:

TODO

public static void saveAllItems(ValueOutput output, NonNullList<ItemStack> itemStacks) @ L21

  • 方法名:saveAllItems
  • 源码定位:L21
  • 返回类型:void
  • 修饰符:public static

参数:

  • output: ValueOutput
  • itemStacks: NonNullList

说明:

TODO

public static void saveAllItems(ValueOutput output, NonNullList<ItemStack> itemStacks, boolean alsoWhenEmpty) @ L25

  • 方法名:saveAllItems
  • 源码定位:L25
  • 返回类型:void
  • 修饰符:public static

参数:

  • output: ValueOutput
  • itemStacks: NonNullList
  • alsoWhenEmpty: boolean

说明:

TODO

public static void loadAllItems(ValueInput input, NonNullList<ItemStack> itemStacks) @ L40

  • 方法名:loadAllItems
  • 源码定位:L40
  • 返回类型:void
  • 修饰符:public static

参数:

  • input: ValueInput
  • itemStacks: NonNullList

说明:

TODO

public static int clearOrCountMatchingItems(Container container, Predicate<ItemStack> predicate, int amountToRemove, boolean countingOnly) @ L48

  • 方法名:clearOrCountMatchingItems
  • 源码定位:L48
  • 返回类型:int
  • 修饰符:public static

参数:

  • container: Container
  • predicate: Predicate
  • amountToRemove: int
  • countingOnly: boolean

说明:

TODO

public static int clearOrCountMatchingItems(ItemStack itemStack, Predicate<ItemStack> predicate, int amountToRemove, boolean countingOnly) @ L64

  • 方法名:clearOrCountMatchingItems
  • 源码定位:L64
  • 返回类型:int
  • 修饰符:public static

参数:

  • itemStack: ItemStack
  • predicate: Predicate
  • amountToRemove: int
  • countingOnly: boolean

说明:

TODO

代码

public class ContainerHelper {
    public static final String TAG_ITEMS = "Items";
 
    public static ItemStack removeItem(List<ItemStack> itemStacks, int slot, int count) {
        return slot >= 0 && slot < itemStacks.size() && !itemStacks.get(slot).isEmpty() && count > 0 ? itemStacks.get(slot).split(count) : ItemStack.EMPTY;
    }
 
    public static ItemStack takeItem(List<ItemStack> itemStacks, int slot) {
        return slot >= 0 && slot < itemStacks.size() ? itemStacks.set(slot, ItemStack.EMPTY) : ItemStack.EMPTY;
    }
 
    public static void saveAllItems(ValueOutput output, NonNullList<ItemStack> itemStacks) {
        saveAllItems(output, itemStacks, true);
    }
 
    public static void saveAllItems(ValueOutput output, NonNullList<ItemStack> itemStacks, boolean alsoWhenEmpty) {
        ValueOutput.TypedOutputList<ItemStackWithSlot> itemsOutput = output.list("Items", ItemStackWithSlot.CODEC);
 
        for (int i = 0; i < itemStacks.size(); i++) {
            ItemStack itemStack = itemStacks.get(i);
            if (!itemStack.isEmpty()) {
                itemsOutput.add(new ItemStackWithSlot(i, itemStack));
            }
        }
 
        if (itemsOutput.isEmpty() && !alsoWhenEmpty) {
            output.discard("Items");
        }
    }
 
    public static void loadAllItems(ValueInput input, NonNullList<ItemStack> itemStacks) {
        for (ItemStackWithSlot item : input.listOrEmpty("Items", ItemStackWithSlot.CODEC)) {
            if (item.isValidInContainer(itemStacks.size())) {
                itemStacks.set(item.slot(), item.stack());
            }
        }
    }
 
    public static int clearOrCountMatchingItems(Container container, Predicate<ItemStack> predicate, int amountToRemove, boolean countingOnly) {
        int count = 0;
 
        for (int i = 0; i < container.getContainerSize(); i++) {
            ItemStack itemStack = container.getItem(i);
            int amountRemoved = clearOrCountMatchingItems(itemStack, predicate, amountToRemove - count, countingOnly);
            if (amountRemoved > 0 && !countingOnly && itemStack.isEmpty()) {
                container.setItem(i, ItemStack.EMPTY);
            }
 
            count += amountRemoved;
        }
 
        return count;
    }
 
    public static int clearOrCountMatchingItems(ItemStack itemStack, Predicate<ItemStack> predicate, int amountToRemove, boolean countingOnly) {
        if (itemStack.isEmpty() || !predicate.test(itemStack)) {
            return 0;
        } else if (countingOnly) {
            return itemStack.getCount();
        } else {
            int amountRemoved = amountToRemove < 0 ? itemStack.getCount() : Math.min(amountToRemove, itemStack.getCount());
            itemStack.shrink(amountRemoved);
            return amountRemoved;
        }
    }
}

引用的其他类