Actually implement mod code into server
This commit is contained in:
@@ -12,6 +12,7 @@ export interface ServerContext {
|
||||
world: ServerWorld;
|
||||
players: PlayerList;
|
||||
containers: ContainerApi;
|
||||
items: ItemApi;
|
||||
recipes: RecipeApi;
|
||||
ui: ServerUi;
|
||||
net: ServerNet;
|
||||
@@ -123,6 +124,8 @@ export interface ServerWorld {
|
||||
get_state(x: number, y: number, z: number, name: string): number | undefined;
|
||||
set_state(x: number, y: number, z: number, name: string, value: number): boolean;
|
||||
get_block_data<T>(x: number, y: number, z: number): T | undefined;
|
||||
// pops an item out of the block at x y z, like a broken block's drops
|
||||
drop_item(x: number, y: number, z: number, item: ItemStack): void;
|
||||
is_loaded(x: number, z: number): boolean;
|
||||
readonly seed: string;
|
||||
}
|
||||
@@ -177,6 +180,12 @@ export interface ContainerApi {
|
||||
delete(id: string): void;
|
||||
}
|
||||
|
||||
export interface ItemApi {
|
||||
exists(id: Id): boolean;
|
||||
// how many fit in one slot
|
||||
max_stack(id: Id): number;
|
||||
}
|
||||
|
||||
export interface RecipeApi {
|
||||
furnace_result(input: Id): { output: ItemStack; cook_time: number } | undefined;
|
||||
fuel_value(item: Id): number; // burn time in ticks, 0 if it isn't fuel
|
||||
@@ -214,20 +223,39 @@ export type FormResult<T> = ({ canceled: true } & Partial<T>) | ({ canceled: fal
|
||||
export type SlotFilter = "smeltable" | "fuel" | ((item: ItemStack) => boolean);
|
||||
|
||||
export interface ContainerScreenOptions {
|
||||
title: string;
|
||||
container: Container;
|
||||
// x and y in slot units
|
||||
layout: { slot: number; x: number; y: number; filter?: SlotFilter; output_only?: boolean }[];
|
||||
player_inventory?: boolean;
|
||||
bars?: { id: string; x: number; y: number; texture: Id }[];
|
||||
labels?: { x: number; y: number; property: string }[];
|
||||
// x and y in slot units, below the player's inventory. can be fractional
|
||||
layout: {
|
||||
slot: number;
|
||||
x: number;
|
||||
y: number;
|
||||
// what can be put in, checked on the server
|
||||
filter?: SlotFilter;
|
||||
// can only be taken from, all at once, like the furnace result
|
||||
output_only?: boolean;
|
||||
}[];
|
||||
// height of the screen's area in slots, fits the layout and bars when not set
|
||||
rows?: number;
|
||||
// progress bars, filled with the property value divided by the property max
|
||||
bars?: {
|
||||
x: number;
|
||||
y: number;
|
||||
value: string;
|
||||
max: string;
|
||||
direction: "up" | "right";
|
||||
empty_texture: Id;
|
||||
full_texture: Id;
|
||||
}[];
|
||||
}
|
||||
|
||||
export interface ScreenHandle<Props = unknown> {
|
||||
readonly player: Player;
|
||||
readonly open: boolean;
|
||||
// numbers the bars show, synced to the player when they change
|
||||
set_property(id: string, value: number): void;
|
||||
update(props: Props): void; // custom screens only
|
||||
close(): void;
|
||||
// when it closes for any reason: the player closed it, left, opened another screen, or it was closed
|
||||
on_close(fn: () => void): void;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user