mc-js/src/test-mod/libs/mc.d.ts
2024-04-16 21:11:39 +03:00

175 lines
5.1 KiB
TypeScript

declare interface Event<T extends (...args: any[]) => void> {
on(handle: T): () => void;
}
declare type CancelEvent<T extends (...args: any[]) => void> = Event<T extends (...args: infer ArgT) => any ? (cancel: () => void, ...args: ArgT) => void : T>;
declare interface CommandHandle {
execute(args: string, sender: Entity | undefined, sendInfo: (text: any) => void, sendError: (text: any) => void): void;
}
declare interface TitleConfig {
title?: string;
subtitle?: string;
fadeIn?: number;
fadeOut?: number;
duration?: number;
}
declare type NbtTypeFromKey<T extends string> =
T extends `${string}$${'l'|'i'|'s'|'f'|'d'}` ? (number | number[]) :
T extends `${string}$${'b'}` ? (number | boolean | number[]) :
(NbtElement | NbtElement[]);
declare type NbtElement = NbtCompound | number | string | boolean;
declare interface NbtCompound {
[key: string]: NbtElement | NbtElement[];
}
declare interface DamageSource {
damager?: Entity;
location?: Location;
type: string;
}
declare interface ItemStack extends Item {
count: number;
}
declare interface Item extends NbtCompound {
id: string;
}
declare class Location {
readonly x: number;
readonly y: number;
readonly z: number;
add(...locations: [...([Location] | [number, number, number])]): Location;
subtract(...locations: [...([Location] | [number, number, number])]): Location;
dot(location: Location): Location;
distance(loc: Location): number;
dot(x: number, y: number, z: number): number;
distance(x: number, y: number, z: number): number;
length(): number;
setX(x: number): Location;
setY(y: number): Location;
setZ(z: number): Location;
toString(): `[${number} ${number} ${number}]`;
constructor(x: number, y: number, z: number);
constructor(val: Location);
}
declare interface BlockState {
id: string;
[prop: string]: string | number | boolean;
}
declare class ServerWorld {
setBlock(loc: Location, state: BlockState, update?: boolean): void;
getBlock(loc: Location): BlockState;
summon(loc: Location, nbt: NbtCompound & { id: string; }): Entity;
}
declare class Server {
registerCommand(name: string, handle: CommandHandle): void;
cmd(command: string, opts?: { at?: Location, pitch?: number, yaw?: number, as?: Entity, world?: ServerWorld }): { output: string[], code: number };
sendMessage(text: string): void;
getByUUID(uuid: string): Entity;
readonly tickStart: Event<() => void>;
readonly tickEnd: Event<() => void>;
readonly blockBreak: CancelEvent<(loc: Location, player: ServerPlayer) => void>;
readonly blockPlace: CancelEvent<(loc: Location, player: ServerPlayer) => void>;
readonly playerJoin: Event<(player: ServerPlayer) => void>;
readonly playerLeave: Event<(player: ServerPlayer) => void>;
readonly entityDamage: CancelEvent<(entity: Entity, damage: number, source: DamageSource) => void>;
readonly entityUse: CancelEvent<(player: ServerPlayer, entity: Entity) => void>;
readonly itemUse: CancelEvent<(item: ItemStack, player: ServerPlayer, hand: 'main' | 'off') => void>;
readonly inventoryScreenClicked: CancelEvent<(screen: InventoryScreen, player: ServerPlayer, index: number, button: number, action: ActionType) => void>;
readonly inventoryScreenClosed: CancelEvent<(screen: InventoryScreen, player: ServerPlayer) => void>;
readonly players: ServerPlayer[];
readonly worlds: ServerWorld[];
static maxStack(id: string): number;
}
declare class Entity {
location: Location;
name: string;
readonly uuid: string;
readonly world: ServerWorld;
discard(): void;
}
declare class LivingEntity extends Entity {
health: number;
readonly maxHealth: number;
}
declare type Gamemode = 'survival' | 'creative' | 'adventure' | 'spectator';
declare type InvType = '3x3' | '9x1' | '9x2' | '9x3' | '9x4' | '9x5' | '9x6';
declare type ActionType = 'clone' | 'pickup' | 'pickupAll' | 'quickCraft' | 'quickMove' | 'swap' | 'throw';
declare class Player extends LivingEntity {
sendMessage(text: any): void;
}
declare class ServerPlayer extends Player {
readonly inventory: Inventory;
readonly screen: InventoryScreen | undefined;
gamemode: Gamemode;
foodLevel: number;
saturation: number;
sendTitle(title: TitleConfig): void;
openInventory(name: string, type: InvType, inv: Inventory): InventoryScreen;
closeInventory(): void;
}
declare class Inventory implements Iterable<ItemStack> {
readonly size: number;
get(i: number): ItemStack;
set(i: number, item?: ItemStack): void;
clear(): void;
clone(): Inventory;
copyFrom(inv: Inventory): void;
[Symbol.iterator](): Iterator<ItemStack>;
constructor(n: number);
}
declare interface Slot {
readonly i: number;
readonly x: number;
readonly y: number;
readonly inventory: Inventory;
get item(): ItemStack;
set item(val: ItemStack);
}
declare class InventoryScreen {
readonly inventories: Inventory[];
readonly id: number;
readonly cursorStack: ItemStack | undefined;
getSlot(i: number): Slot;
}
declare var serverLoad: Event<(server: Server) => void>;