@minecraft/creator-tools
Version:
Minecraft Creator Tools command line and libraries.
175 lines (153 loc) • 6.97 kB
text/typescript
import { DimensionLocation, world } from "@minecraft/server";
import {
ActionFormData,
ActionFormResponse,
MessageFormData,
MessageFormResponse,
ModalFormData,
} from "@minecraft/server-ui";
/**
* Shows a very basic action form.
* @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-ui/ActionFormData
* @see https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server-ui/ActionFormResponse
*/
export function showActionForm(log: (message: string, status?: number) => void, targetLocation: DimensionLocation) {
const playerList = world.getPlayers();
if (playerList.length >= 1) {
const form = new ActionFormData()
.title("Test Title")
.body("Body text here!")
.button("btn 1")
.button("btn 2")
.button("btn 3")
.button("btn 4")
.button("btn 5");
form.show(playerList[0]).then((result: ActionFormResponse) => {
if (result.canceled) {
log("Player exited out of the dialog. Note that if the chat window is up, dialogs are automatically canceled.");
return -1;
} else {
log("Your result was: " + result.selection);
}
});
}
}
/**
* Shows a dialog that lets a player pick their favorite month.
* @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-ui/ActionFormData
* @see https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server-ui/ActionFormResponse
*/
export function showFavoriteMonth(log: (message: string, status?: number) => void, targetLocation: DimensionLocation) {
const players = world.getPlayers();
if (players.length >= 1) {
const form = new ActionFormData()
.title("Months")
.body("Choose your favorite month!")
.button("January")
.button("February")
.button("March")
.button("April")
.button("May");
form.show(players[0]).then((response: ActionFormResponse) => {
if (response.selection === 3) {
log("I like April too!");
return -1;
}
});
}
}
/**
* Shows an example two-button dialog.
* @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-ui/MessageFormData
* @see https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server-ui/MessageFormResponse
*/
export function showBasicMessageForm(
log: (message: string, status?: number) => void,
targetLocation: DimensionLocation
) {
const players = world.getPlayers();
const messageForm = new MessageFormData()
.title("Message Form Example")
.body("This shows a simple example using §o§7MessageFormData§r.")
.button1("Button 1")
.button2("Button 2");
messageForm
.show(players[0])
.then((formData: MessageFormResponse) => {
// player canceled the form, or another dialog was up and open.
if (formData.canceled || formData.selection === undefined) {
return;
}
log(`You selected ${formData.selection === 0 ? "Button 1" : "Button 2"}`);
})
.catch((error: Error) => {
log("Failed to show form: " + error);
return -1;
});
}
/**
* Shows an example translated two-button dialog dialog.
* @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-ui/MessageFormData
* @see https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server-ui/MessageFormResponse
* @see https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server/RawMessage
*/
export function showTranslatedMessageForm(
log: (message: string, status?: number) => void,
targetLocation: DimensionLocation
) {
const players = world.getPlayers();
const messageForm = new MessageFormData()
.title({ translate: "permissions.removeplayer" })
.body({ translate: "accessibility.list.or.two", with: ["Player 1", "Player 2"] })
.button1("Player 1")
.button2("Player 2");
messageForm
.show(players[0])
.then((formData: MessageFormResponse) => {
// player canceled the form, or another dialog was up and open.
if (formData.canceled || formData.selection === undefined) {
return;
}
log(`You selected ${formData.selection === 0 ? "Player 1" : "Player 2"}`);
})
.catch((error: Error) => {
log("Failed to show form: " + error);
return -1;
});
}
/**
* Shows an example multiple-control modal dialog.
* @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-ui/ModalFormData
* @see https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server-ui/ModalFormResponse
*/
export function showBasicModalForm(log: (message: string, status?: number) => void, targetLocation: DimensionLocation) {
const players = world.getPlayers();
const modalForm = new ModalFormData().title("Example Modal Controls for §o§7ModalFormData§r");
modalForm.toggle("Toggle w/o default");
modalForm.toggle("Toggle w/ default", { defaultValue: true });
modalForm.slider("Slider w/o default", 0, 50, { valueStep: 5} );
modalForm.slider("Slider w/ default", 0, 50, {valueStep: 5, defaultValue: 30});
modalForm.dropdown("Dropdown w/o default", ["option 1", "option 2", "option 3"]);
modalForm.dropdown("Dropdown w/ default", ["option 1", "option 2", "option 3"], { defaultValueIndex: 2 });
modalForm.textField("Input w/o default", "type text here");
modalForm.textField("Input w/ default", "type text here", {defaultValue:"this is default"});
modalForm
.show(players[0])
.then((formData) => {
players[0].sendMessage(`Modal form results: ${JSON.stringify(formData.formValues, undefined, 2)}`);
})
.catch((error: Error) => {
log("Failed to show form: " + error);
return -1;
});
}