Appearance
Example: lanterns
From the runnable examples. Lint, build and run it from servers/inventery/:
sh
node plot/sdk/lint.mjs docs/developers/examples/lanterns
node plot/sdk/build.mjs docs/developers/examples/lanterns
node docs/developers/examples/run.mjs docs/developers/examples/lanternsplot.json
json
{
"kind": "mod",
"namespace": "lanterns",
"id": "ana.lanterns",
"version": "0.1.0",
"name": "Lanterns",
"apiVersion": 1,
"code": "dist/logic.js",
"assets": "assets"
}logic.ts
ts
import { scene, ui } from "@inventery/host";
import { blocks, items, recipes, events } from "@inventery/minecraft";
// Hooks the Minecraft layer's events need: re-export the ones you use.
export { onBlockBroken } from "@inventery/minecraft";
// 1. Content. Top-level code runs at plot level when the plot's code starts (and after every restart).
const LANTERN = blocks.add("lantern", { // id "lanterns:lantern"
texture: "textures/lantern.png",
hardness: 0.5,
drops: [{ item: "lanterns:lantern", count: 1 }],
});
items.add("lantern", { texture: "textures/lantern.png", places: "lanterns:lantern" });
recipes.add({
pattern: ["G", "T"],
keys: { G: "inventery:glass", T: "inventery:torch" },
result: { item: "lanterns:lantern", count: 1 },
});
// 2. Behaviour: after a lantern is broken (the base game breaks it and drops its drops), flash a light and tell
// whoever broke it.
events.blockBroken.on(LANTERN, (ev) => {
scene.create({
Transform: { pos: ev.pos },
Light: { color: "gold", intensity: 3, range: 6 },
Lifetime: { seconds: 0.5 }, // the room removes it after half a second
});
if (ev.by) ui.chat(ev.by, "The lantern flickers out.", { color: "gold" });
});