UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

117 lines (92 loc) 4.84 kB
import { BlockInventoryComponent, DimensionLocation, EntityInventoryComponent, ItemStack, world, } from "@minecraft/server"; import { MinecraftBlockTypes, MinecraftEntityTypes, MinecraftItemTypes } from "@minecraft/vanilla-data"; /** * Creates some chests and containers and uses container transfer and swapping APIs. * @param {(message: string, status?: number) => void} log: Logger function. If status is positive, test is a success. If status is negative, test is a failure. * @param {DimensionLocation} targetLocation Location to center this sample code around. * @see https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server/Container */ export 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); } } /** * Creates a chest and places some items within it. * @param {(message: string, status?: number) => void} log: Logger function. If status is positive, test is a success. If status is negative, test is a failure. * @param {DimensionLocation} targetLocation Location to center this sample code around. * @see https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server/BlockInventoryComponent */ export function placeItemsInChest(log: (message: string, status?: number) => void, targetLocation: DimensionLocation) { // Fetch block const block = targetLocation.dimension.getBlock(targetLocation); if (!block) { log("Could not find block. Maybe it is not loaded?", -1); return; } // Make it a chest block.setType(MinecraftBlockTypes.Chest); // Get the inventory const inventoryComponent = block.getComponent("inventory") as BlockInventoryComponent; if (!inventoryComponent || !inventoryComponent.container) { log("Could not find inventory component.", -1); return; } const inventoryContainer = inventoryComponent.container; // Set slot 0 to a stack of 10 apples inventoryContainer.setItem(0, new ItemStack(MinecraftItemTypes.Apple, 10)); }