@minecraft/creator-tools
Version:
Minecraft Creator Tools command line and libraries.
116 lines (100 loc) • 4.94 kB
text/typescript
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 : "")
);
}
});
}