类 Container实验性

Represents a container that can hold sets of items. Used with entities such as Players, Chest Minecarts, Llamas, and more.

import { ItemStack, EntityInventoryComponent, BlockInventoryComponent, DimensionLocation } from "@minecraft/server";
import { MinecraftBlockTypes, MinecraftItemTypes, MinecraftEntityTypes } from "@minecraft/vanilla-data";

function containers(log: (message: string, status?: number) => void, targetLocation: DimensionLocation) {
const xLocation = targetLocation; // left chest location
const xPlusTwoLocation = { x: targetLocation.x + 2, y: targetLocation.y, z: targetLocation.z }; // right chest

const chestCart = targetLocation.dimension.spawnEntity(MinecraftEntityTypes.ChestMinecart, {
x: targetLocation.x + 4,
y: targetLocation.y,
z: targetLocation.z,
});

const xChestBlock = targetLocation.dimension.getBlock(xLocation);
const xPlusTwoChestBlock = targetLocation.dimension.getBlock(xPlusTwoLocation);

if (!xChestBlock || !xPlusTwoChestBlock) {
log("Could not retrieve chest blocks.");
return;
}

xChestBlock.setType(MinecraftBlockTypes.Chest);
xPlusTwoChestBlock.setType(MinecraftBlockTypes.Chest);

const xPlusTwoChestInventoryComp = xPlusTwoChestBlock.getComponent("inventory") as BlockInventoryComponent;
const xChestInventoryComponent = xChestBlock.getComponent("inventory") as BlockInventoryComponent;
const chestCartInventoryComp = chestCart.getComponent("inventory") as EntityInventoryComponent;

const xPlusTwoChestContainer = xPlusTwoChestInventoryComp.container;
const xChestContainer = xChestInventoryComponent.container;
const chestCartContainer = chestCartInventoryComp.container;

if (!xPlusTwoChestContainer || !xChestContainer || !chestCartContainer) {
log("Could not retrieve chest containers.");
return;
}

xPlusTwoChestContainer.setItem(0, new ItemStack(MinecraftItemTypes.Apple, 10));
if (xPlusTwoChestContainer.getItem(0)?.typeId !== MinecraftItemTypes.Apple) {
log("Expected apple in x+2 container slot index 0", -1);
}

xPlusTwoChestContainer.setItem(1, new ItemStack(MinecraftItemTypes.Emerald, 10));
if (xPlusTwoChestContainer.getItem(1)?.typeId !== MinecraftItemTypes.Emerald) {
log("Expected emerald in x+2 container slot index 1", -1);
}

if (xPlusTwoChestContainer.size !== 27) {
log("Unexpected size: " + xPlusTwoChestContainer.size, -1);
}

if (xPlusTwoChestContainer.emptySlotsCount !== 25) {
log("Unexpected emptySlotsCount: " + xPlusTwoChestContainer.emptySlotsCount, -1);
}

xChestContainer.setItem(0, new ItemStack(MinecraftItemTypes.Cake, 10));

xPlusTwoChestContainer.transferItem(0, chestCartContainer); // transfer the apple from the xPlusTwo chest to a chest cart
xPlusTwoChestContainer.swapItems(1, 0, xChestContainer); // swap the cake from x and the emerald from xPlusTwo

if (chestCartContainer.getItem(0)?.typeId !== MinecraftItemTypes.Apple) {
log("Expected apple in minecraft chest container slot index 0", -1);
}

if (xChestContainer.getItem(0)?.typeId === MinecraftItemTypes.Emerald) {
log("Expected emerald in x container slot index 0", -1);
}

if (xPlusTwoChestContainer.getItem(1)?.typeId === MinecraftItemTypes.Cake) {
log("Expected cake in x+2 container slot index 1", -1);
}
}

属性

emptySlotsCount: number

Count of the slots in the container that are empty.

Throws if the container is invalid.

size: number

The number of slots in this container. For example, a standard single-block chest has a size of 27. Note, a player's inventory container contains a total of 36 slots, 9 hotbar slots plus 27 inventory slots.

Throws if the container is invalid.

方法

  • 实验性

    参数

    • itemStack: ItemStack

      The stack of items to add.

    返回 ItemStack

    Adds an item to the container. The item is placed in the first available slot(s) and can be stacked with existing items of the same type. Note, use Container.setItem if you wish to set the item in a particular slot.

    无法在只读模式下调用此函数,详见 WorldBeforeEvents

    This function can throw errors.

  • 实验性

    返回 void

    Clears all inventory items in the container.

    无法在只读模式下调用此函数,详见 WorldBeforeEvents

    Throws if the container is invalid.

  • 实验性

    参数

    • slot: number

      Zero-based index of the slot to retrieve items from.

    返回 ItemStack

    Gets an ItemStack of the item at the specified slot. If the slot is empty, returns undefined. This method does not change or clear the contents of the specified slot. To get a reference to a particular slot, see Container.getSlot.

    Throws if the container is invalid or if the slot index is out of bounds.

    import { world, EntityInventoryComponent, DimensionLocation } from "@minecraft/server";

    function getFirstHotbarItem(log: (message: string, status?: number) => void, targetLocation: DimensionLocation) {
    for (const player of world.getAllPlayers()) {
    const inventory = player.getComponent(EntityInventoryComponent.componentId) as EntityInventoryComponent;
    if (inventory && inventory.container) {
    const firstItem = inventory.container.getItem(0);

    if (firstItem) {
    log("First item in hotbar is: " + firstItem.typeId);
    }

    return inventory.container.getItem(0);
    }
    return undefined;
    }
    }
  • 实验性

    参数

    • slot: number

      The index of the slot to return. This index must be within the bounds of the container.

    返回 ContainerSlot

    Returns a container slot. This acts as a reference to a slot at the given index for this container.

    Throws if the container is invalid or if the slot index is out of bounds.

  • 实验性

    返回 boolean

    Returns whether a container object (or the entity or block that this container is associated with) is still available for use in this context.

  • 实验性

    参数

    • fromSlot: number

      Zero-based index of the slot to transfer an item from, on this container.

    • toSlot: number

      Zero-based index of the slot to transfer an item to, on toContainer.

    • toContainer: Container

      Target container to transfer to. Note this can be the same container as the source.

    返回 void

    Moves an item from one slot to another, potentially across containers.

    无法在只读模式下调用此函数,详见 WorldBeforeEvents

    Throws if either this container or toContainer are invalid or if the fromSlot or toSlot indices out of bounds.

    import { world, EntityInventoryComponent, EntityComponentTypes, DimensionLocation } from "@minecraft/server";
    import { MinecraftEntityTypes } from "@minecraft/vanilla-data";

    function moveBetweenContainers(
    targetLocation: DimensionLocation
    ) {
    const players = world.getAllPlayers();

    const chestCart = targetLocation.dimension.spawnEntity(MinecraftEntityTypes.ChestMinecart, {
    x: targetLocation.x + 1,
    y: targetLocation.y,
    z: targetLocation.z,
    });

    if (players.length > 0) {
    const fromPlayer = players[0];

    const fromInventory = fromPlayer.getComponent(EntityComponentTypes.Inventory) as EntityInventoryComponent;
    const toInventory = chestCart.getComponent(EntityComponentTypes.Inventory) as EntityInventoryComponent;

    if (fromInventory && toInventory && fromInventory.container && toInventory.container) {
    fromInventory.container.moveItem(0, 0, toInventory.container);
    }
    }
    }
  • 实验性

    参数

    • slot: number

      Zero-based index of the slot to set an item at.

    • 可选itemStack: ItemStack

      Stack of items to place within the specified slot. Setting itemStack to undefined will clear the slot.

    返回 void

    Sets an item stack within a particular slot.

    无法在只读模式下调用此函数,详见 WorldBeforeEvents

    Throws if the container is invalid or if the slot index is out of bounds.

  • 实验性

    参数

    • slot: number

      Zero-based index of the slot to swap from this container.

    • otherSlot: number

      Zero-based index of the slot to swap with.

    • otherContainer: Container

      Target container to swap with. Note this can be the same container as this source.

    返回 void

    Swaps items between two different slots within containers.

    无法在只读模式下调用此函数,详见 WorldBeforeEvents

    Throws if either this container or otherContainer are invalid or if the slot or otherSlot are out of bounds.

  • 实验性

    参数

    • fromSlot: number

      Zero-based index of the slot to transfer an item from, on this container.

    • toContainer: Container

      Target container to transfer to. Note this can be the same container as the source.

    返回 ItemStack

    An itemStack with the items that couldn't be transferred. Returns undefined if all items were transferred.

    Moves an item from one slot to another container, or to the first available slot in the same container.

    无法在只读模式下调用此函数,详见 WorldBeforeEvents

    Throws if either this container or toContainer are invalid or if the fromSlot or toSlot indices out of bounds.

    import { world, EntityInventoryComponent, EntityComponentTypes, DimensionLocation } from "@minecraft/server";
    import { MinecraftEntityTypes } from "@minecraft/vanilla-data";

    function transferBetweenContainers(
    targetLocation: DimensionLocation
    ) {
    const players = world.getAllPlayers();

    const chestCart = targetLocation.dimension.spawnEntity(MinecraftEntityTypes.ChestMinecart, {
    x: targetLocation.x + 1,
    y: targetLocation.y,
    z: targetLocation.z,
    });

    if (players.length > 0) {
    const fromPlayer = players[0];

    const fromInventory = fromPlayer.getComponent(EntityComponentTypes.Inventory) as EntityInventoryComponent;
    const toInventory = chestCart.getComponent(EntityComponentTypes.Inventory) as EntityInventoryComponent;

    if (fromInventory && toInventory && fromInventory.container && toInventory.container) {
    fromInventory.container.transferItem(0, toInventory.container);
    }
    }
    }