yoni-mcscripts-lib
Version:
为 Minecraft Script API 中的部分接口创建了 wrapper,并提供简单的事件管理器和任务管理器,另附有一些便于代码编写的一些小工具。
111 lines (97 loc) • 2.81 kB
text/typescript
import { Minecraft } from "./modules/Minecraft.js";
export { Minecraft }
export { Gametest } from "./modules/Gametest.js";
export const VanillaWorld: Minecraft.World = Minecraft.world;
export const VanillaScoreboard: Minecraft.Scoreboard = VanillaWorld.scoreboard;
export const MinecraftSystem: Minecraft.System = Minecraft.system;
/**
* 在游戏刻的固定时机运行函数。
*/
export function runTask<P extends any[]>(callback: (...args: P) => any, ...args: P){
if (args.length === 0)
MinecraftSystem.run(callback);
else
MinecraftSystem.run(() => {
callback(...args);
});
}
/**
* overworld dimension
* @type {Minecraft.Dimension}
*/
export const overworld = VanillaWorld.getDimension(Minecraft.MinecraftDimensionTypes.overworld);
/**
* 返回当前是否为只读模式上下文(通常在before事件的回调执行时出现)。
*/
export function isReadonlyMode(): boolean {
try {
overworld.runCommand("help");
} catch {
return true;
}
return false;
}
/**
* 在上下文清空后立即运行函数。
*/
export function runImmediate<P extends any[]>(func: (...args: P) => any, ...args: P): void {
runImmediate.run(func, args);
}
runImmediate.run = async function run<P extends any[]>(func: (...args: P) => any, args: P){
await void 0; //pause func
func(...args);
}
/**
* a type contains a set of statusCode
*/
export enum StatusCode {
fail = -2147483648,
error = -2147483646,
success = 0,
}
/**
* 返回一个维度对象
* @param dimid - something means a dimension
* @returns dimension object
*/
function dim(dimid: string|Minecraft.Dimension|number = 0): Minecraft.Dimension{
if (dimid instanceof Minecraft.Dimension) return dimid;
switch (dimid) {
case 0:
case "overworld":
case Minecraft.MinecraftDimensionTypes.overworld:
return VanillaWorld.getDimension(Minecraft.MinecraftDimensionTypes.overworld);
case -1:
case "nether":
case Minecraft.MinecraftDimensionTypes.nether:
return VanillaWorld.getDimension(Minecraft.MinecraftDimensionTypes.nether);
case 1:
case "the end":
case "theEnd":
case "the_end":
case Minecraft.MinecraftDimensionTypes.theEnd:
return VanillaWorld.getDimension(Minecraft.MinecraftDimensionTypes.theEnd);
default:
try {
return VanillaWorld.getDimension(dimid as any);
} catch {
return dim(0);
}
}
}
/*
* 主世界
* @type {Minecraft.Dimension}
*/
dim.overworld = dim(0);
/*
* 末地
* @type {Minecraft.Dimension}
*/
dim.theEnd = dim(1);
/*
* 下界
* @type {Minecraft.Dimension}
*/
dim.nether = dim(-1);
export { dim };