SimpleContainer.java
net.minecraft.world.SimpleContainer
信息
- 全限定名:net.minecraft.world.SimpleContainer
- 类型:public class
- 包:net.minecraft.world
- 源码路径:src/main/java/net/minecraft/world/SimpleContainer.java
- 起始行号:L14
- 实现:Container, StackedContentsCompatible
- 职责:
TODO
字段/常量
-
size- 类型:
int - 修饰符:
private final - 源码定位:
L15 - 说明:
TODO
- 类型:
-
items- 类型:
NonNullList<ItemStack> - 修饰符:
private final - 源码定位:
L16 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public SimpleContainer(int size) @ L18
- 构造器名:SimpleContainer
- 源码定位:L18
- 修饰符:public
参数:
- size: int
说明:
TODO
public SimpleContainer(ItemStack... itemstacks) @ L23
- 构造器名:SimpleContainer
- 源码定位:L23
- 修饰符:public
参数:
- itemstacks: ItemStack…
说明:
TODO
方法
下面的方法块按源码顺序生成。
public ItemStack getItem(int slot) @ L28
- 方法名:getItem
- 源码定位:L28
- 返回类型:ItemStack
- 修饰符:public
参数:
- slot: int
说明:
TODO
public List<ItemStack> removeAllItems() @ L33
- 方法名:removeAllItems
- 源码定位:L33
- 返回类型:List
- 修饰符:public
参数:
- 无
说明:
TODO
public ItemStack removeItem(int slot, int count) @ L39
- 方法名:removeItem
- 源码定位:L39
- 返回类型:ItemStack
- 修饰符:public
参数:
- slot: int
- count: int
说明:
TODO
public ItemStack removeItemType(Item itemType, int count) @ L49
- 方法名:removeItemType
- 源码定位:L49
- 返回类型:ItemStack
- 修饰符:public
参数:
- itemType: Item
- count: int
说明:
TODO
public ItemStack addItem(ItemStack itemStack) @ L71
- 方法名:addItem
- 源码定位:L71
- 返回类型:ItemStack
- 修饰符:public
参数:
- itemStack: ItemStack
说明:
TODO
public boolean canAddItem(ItemStack itemStack) @ L86
- 方法名:canAddItem
- 源码定位:L86
- 返回类型:boolean
- 修饰符:public
参数:
- itemStack: ItemStack
说明:
TODO
public ItemStack removeItemNoUpdate(int slot) @ L99
- 方法名:removeItemNoUpdate
- 源码定位:L99
- 返回类型:ItemStack
- 修饰符:public
参数:
- slot: int
说明:
TODO
public void setItem(int slot, ItemStack itemStack) @ L110
- 方法名:setItem
- 源码定位:L110
- 返回类型:void
- 修饰符:public
参数:
- slot: int
- itemStack: ItemStack
说明:
TODO
public void setChanged() @ L117
- 方法名:setChanged
- 源码定位:L117
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public int getContainerSize() @ L121
- 方法名:getContainerSize
- 源码定位:L121
- 返回类型:int
- 修饰符:public
参数:
- 无
说明:
TODO
public boolean isEmpty() @ L126
- 方法名:isEmpty
- 源码定位:L126
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public boolean stillValid(Player player) @ L137
- 方法名:stillValid
- 源码定位:L137
- 返回类型:boolean
- 修饰符:public
参数:
- player: Player
说明:
TODO
public void clearContent() @ L142
- 方法名:clearContent
- 源码定位:L142
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public void fillStackedContents(StackedItemContents contents) @ L148
- 方法名:fillStackedContents
- 源码定位:L148
- 返回类型:void
- 修饰符:public
参数:
- contents: StackedItemContents
说明:
TODO
public String toString() @ L155
- 方法名:toString
- 源码定位:L155
- 返回类型:String
- 修饰符:public
参数:
- 无
说明:
TODO
private void moveItemToEmptySlots(ItemStack sourceStack) @ L160
- 方法名:moveItemToEmptySlots
- 源码定位:L160
- 返回类型:void
- 修饰符:private
参数:
- sourceStack: ItemStack
说明:
TODO
private void moveItemToOccupiedSlotsWithSameType(ItemStack sourceStack) @ L170
- 方法名:moveItemToOccupiedSlotsWithSameType
- 源码定位:L170
- 返回类型:void
- 修饰符:private
参数:
- sourceStack: ItemStack
说明:
TODO
private void moveItemsBetweenStacks(ItemStack sourceStack, ItemStack targetStack) @ L182
- 方法名:moveItemsBetweenStacks
- 源码定位:L182
- 返回类型:void
- 修饰符:private
参数:
- sourceStack: ItemStack
- targetStack: ItemStack
说明:
TODO
public void fromItemList(ValueInput.TypedInputList<ItemStack> items) @ L192
- 方法名:fromItemList
- 源码定位:L192
- 返回类型:void
- 修饰符:public
参数:
- items: ValueInput.TypedInputList
说明:
TODO
public void storeAsItemList(ValueOutput.TypedOutputList<ItemStack> output) @ L200
- 方法名:storeAsItemList
- 源码定位:L200
- 返回类型:void
- 修饰符:public
参数:
- output: ValueOutput.TypedOutputList
说明:
TODO
public NonNullList<ItemStack> getItems() @ L209
- 方法名:getItems
- 源码定位:L209
- 返回类型:NonNullList
- 修饰符:public
参数:
- 无
说明:
TODO
代码
public class SimpleContainer implements Container, StackedContentsCompatible {
private final int size;
private final NonNullList<ItemStack> items;
public SimpleContainer(int size) {
this.size = size;
this.items = NonNullList.withSize(size, ItemStack.EMPTY);
}
public SimpleContainer(ItemStack... itemstacks) {
this.size = itemstacks.length;
this.items = NonNullList.of(ItemStack.EMPTY, itemstacks);
}
@Override
public ItemStack getItem(int slot) {
return slot >= 0 && slot < this.items.size() ? this.items.get(slot) : ItemStack.EMPTY;
}
public List<ItemStack> removeAllItems() {
List<ItemStack> itemsRemoved = this.items.stream().filter(item -> !item.isEmpty()).collect(Collectors.toList());
this.clearContent();
return itemsRemoved;
}
@Override
public ItemStack removeItem(int slot, int count) {
ItemStack result = ContainerHelper.removeItem(this.items, slot, count);
if (!result.isEmpty()) {
this.setChanged();
}
return result;
}
public ItemStack removeItemType(Item itemType, int count) {
ItemStack removed = new ItemStack(itemType, 0);
for (int slot = this.size - 1; slot >= 0; slot--) {
ItemStack current = this.getItem(slot);
if (current.getItem().equals(itemType)) {
int stillNeeded = count - removed.getCount();
ItemStack removedFromThisSlot = current.split(stillNeeded);
removed.grow(removedFromThisSlot.getCount());
if (removed.getCount() == count) {
break;
}
}
}
if (!removed.isEmpty()) {
this.setChanged();
}
return removed;
}
public ItemStack addItem(ItemStack itemStack) {
if (itemStack.isEmpty()) {
return ItemStack.EMPTY;
} else {
ItemStack remainingItems = itemStack.copy();
this.moveItemToOccupiedSlotsWithSameType(remainingItems);
if (remainingItems.isEmpty()) {
return ItemStack.EMPTY;
} else {
this.moveItemToEmptySlots(remainingItems);
return remainingItems.isEmpty() ? ItemStack.EMPTY : remainingItems;
}
}
}
public boolean canAddItem(ItemStack itemStack) {
boolean hasSpace = false;
for (ItemStack targetStack : this.items) {
if (targetStack.isEmpty() || ItemStack.isSameItemSameComponents(targetStack, itemStack) && targetStack.getCount() < targetStack.getMaxStackSize()) {
hasSpace = true;
break;
}
}
return hasSpace;
}
@Override
public ItemStack removeItemNoUpdate(int slot) {
ItemStack itemStack = this.items.get(slot);
if (itemStack.isEmpty()) {
return ItemStack.EMPTY;
} else {
this.items.set(slot, ItemStack.EMPTY);
return itemStack;
}
}
@Override
public void setItem(int slot, ItemStack itemStack) {
this.items.set(slot, itemStack);
itemStack.limitSize(this.getMaxStackSize(itemStack));
this.setChanged();
}
@Override
public void setChanged() {
}
@Override
public int getContainerSize() {
return this.size;
}
@Override
public boolean isEmpty() {
for (ItemStack itemStack : this.items) {
if (!itemStack.isEmpty()) {
return false;
}
}
return true;
}
@Override
public boolean stillValid(Player player) {
return true;
}
@Override
public void clearContent() {
this.items.clear();
this.setChanged();
}
@Override
public void fillStackedContents(StackedItemContents contents) {
for (ItemStack itemStack : this.items) {
contents.accountStack(itemStack);
}
}
@Override
public String toString() {
return this.items.stream().filter(item -> !item.isEmpty()).toList().toString();
}
private void moveItemToEmptySlots(ItemStack sourceStack) {
for (int slot = 0; slot < this.size; slot++) {
ItemStack targetStack = this.getItem(slot);
if (targetStack.isEmpty()) {
this.setItem(slot, sourceStack.copyAndClear());
return;
}
}
}
private void moveItemToOccupiedSlotsWithSameType(ItemStack sourceStack) {
for (int slot = 0; slot < this.size; slot++) {
ItemStack targetStack = this.getItem(slot);
if (ItemStack.isSameItemSameComponents(targetStack, sourceStack)) {
this.moveItemsBetweenStacks(sourceStack, targetStack);
if (sourceStack.isEmpty()) {
return;
}
}
}
}
private void moveItemsBetweenStacks(ItemStack sourceStack, ItemStack targetStack) {
int maxCount = this.getMaxStackSize(targetStack);
int diff = Math.min(sourceStack.getCount(), maxCount - targetStack.getCount());
if (diff > 0) {
targetStack.grow(diff);
sourceStack.shrink(diff);
this.setChanged();
}
}
public void fromItemList(ValueInput.TypedInputList<ItemStack> items) {
this.clearContent();
for (ItemStack stack : items) {
this.addItem(stack);
}
}
public void storeAsItemList(ValueOutput.TypedOutputList<ItemStack> output) {
for (int i = 0; i < this.getContainerSize(); i++) {
ItemStack itemStack = this.getItem(i);
if (!itemStack.isEmpty()) {
output.add(itemStack);
}
}
}
public NonNullList<ItemStack> getItems() {
return this.items;
}
}引用的其他类
-
- 引用位置:
字段/方法调用/返回值 - 关联成员:
NonNullList.of(), NonNullList.withSize()
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ContainerHelper.removeItem()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段/方法调用/构造调用/返回值 - 关联成员:
ItemStack(), ItemStack.isSameItemSameComponents()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置: