UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

116 lines (100 loc) 4.94 kB
import { world, system, BlockPermutation, ButtonPushAfterEvent, DimensionLocation, LeverActionAfterEvent, TripWireTripAfterEvent, } from "@minecraft/server"; import { MinecraftBlockTypes } from "@minecraft/vanilla-data"; /** * A simple button push before event. * @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/buttonpushaftereventsignal * @see https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server/buttonpushafterevent */ export function buttonPushEvent(log: (message: string, status?: number) => void, targetLocation: DimensionLocation) { // set up a button on cobblestone const cobblestone = targetLocation.dimension.getBlock(targetLocation); const button = targetLocation.dimension.getBlock({ x: targetLocation.x, y: targetLocation.y + 1, z: targetLocation.z, }); if (cobblestone === undefined || button === undefined) { log("Could not find block at location."); return -1; } cobblestone.setPermutation(BlockPermutation.resolve(MinecraftBlockTypes.Cobblestone)); button.setPermutation(BlockPermutation.resolve(MinecraftBlockTypes.AcaciaButton).withState("facing_direction", 1)); world.afterEvents.buttonPush.subscribe((buttonPushEvent: ButtonPushAfterEvent) => { const eventLoc = buttonPushEvent.block.location; if (eventLoc.x === targetLocation.x && eventLoc.y === targetLocation.y + 1 && eventLoc.z === targetLocation.z) { log("Button push event at tick " + system.currentTick); } }); } /** * A simple lever activate event. * @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/leveractionaftereventsignal * @see https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server/leveractionafterevent */ export function leverActionEvent(log: (message: string, status?: number) => void, targetLocation: DimensionLocation) { // set up a lever const cobblestone = targetLocation.dimension.getBlock(targetLocation); const lever = targetLocation.dimension.getBlock({ x: targetLocation.x, y: targetLocation.y + 1, z: targetLocation.z, }); if (cobblestone === undefined || lever === undefined) { log("Could not find block at location."); return -1; } cobblestone.setPermutation(BlockPermutation.resolve(MinecraftBlockTypes.Cobblestone)); lever.setPermutation( BlockPermutation.resolve(MinecraftBlockTypes.Lever).withState("lever_direction", "up_north_south") ); world.afterEvents.leverAction.subscribe((leverActionEvent: LeverActionAfterEvent) => { const eventLoc = leverActionEvent.block.location; if (eventLoc.x === targetLocation.x && eventLoc.y === targetLocation.y + 1 && eventLoc.z === targetLocation.z) { log("Lever activate event at tick " + system.currentTick); } }); } /** * A basic tripwire event. * @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/tripwiretripaftereventsignal * @see https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server/tripwiretripafterevent */ export function tripWireTripEvent(log: (message: string, status?: number) => void, targetLocation: DimensionLocation) { // set up a tripwire const redstone = targetLocation.dimension.getBlock({ x: targetLocation.x, y: targetLocation.y - 1, z: targetLocation.z, }); const tripwire = targetLocation.dimension.getBlock(targetLocation); if (redstone === undefined || tripwire === undefined) { log("Could not find block at location."); return -1; } redstone.setPermutation(BlockPermutation.resolve(MinecraftBlockTypes.RedstoneBlock)); tripwire.setPermutation(BlockPermutation.resolve(MinecraftBlockTypes.TripWire)); world.afterEvents.tripWireTrip.subscribe((tripWireTripEvent: TripWireTripAfterEvent) => { const eventLoc = tripWireTripEvent.block.location; if (eventLoc.x === targetLocation.x && eventLoc.y === targetLocation.y && eventLoc.z === targetLocation.z) { log( "Tripwire trip event at tick " + system.currentTick + (tripWireTripEvent.sources.length > 0 ? " by entity " + tripWireTripEvent.sources[0].id : "") ); } }); }