Skip to content

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/lanterns

plot.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" });
});