HytaleJS

Your First Plugin

Build a complete HytaleJS plugin step by step

Let's build a plugin that welcomes players, formats chat, and adds a /players command.

Create src/main.ts

import { type PlayerConnectEvent, type PlayerChatEvent, EventListener, Colors } from "@hytalejs.com/core";

Add a welcome message on join

class MyPlugin {
  @EventListener("PlayerConnectEvent")
  onJoin(event: PlayerConnectEvent) {
    const player = event.getPlayer();
    const name = event.getPlayerRef().getUsername();

    player.sendMessage(
      Message.raw("Welcome, " + name + "!").color(Colors.GREEN).bold(true)
    );

    Universe.get().sendMessage(
      Message.raw(name + " joined the server!")
    );
  }
}

Format chat messages

  @EventListener("PlayerChatEvent")
  onChat(event: PlayerChatEvent) {
    const sender = event.getSender();
    const content = event.getContent();

    const formatted = Message.empty()
      .insert(Message.raw(sender.getUsername()).color(Colors.GOLD).bold(true))
      .insert(Message.raw(": ").color(Colors.GRAY))
      .insert(Message.raw(content).color(Colors.WHITE));

    event.setCancelled(true);

    const targets = event.getTargets();
    for (let i = 0; i < targets.length; i++) {
      targets[i].sendMessage(formatted);
    }
  }

Register a command

commands.register("players", "List online players", (ctx) => {
  const universe = Universe.get();
  ctx.sendMessage("Online: " + universe.getPlayerCount());

  const players = universe.getPlayers();
  for (let i = 0; i < players.length; i++) {
    ctx.sendMessage("- " + players[i].getUsername());
  }
});

Build and deploy

npm run build
cp dist/plugin.js /path/to/hytale-server/mods/bmstefanski_HytaleJS/scripts/

Restart your server to load the plugin.

Complete Code

import { type PlayerConnectEvent, type PlayerChatEvent, EventListener, Colors } from "@hytalejs.com/core";

class MyPlugin {
  @EventListener("PlayerConnectEvent")
  onJoin(event: PlayerConnectEvent) {
    const player = event.getPlayer();
    const name = event.getPlayerRef().getUsername();

    player.sendMessage(
      Message.raw("Welcome, " + name + "!").color(Colors.GREEN).bold(true)
    );

    Universe.get().sendMessage(Message.raw(name + " joined the server!"));
  }

  @EventListener("PlayerChatEvent")
  onChat(event: PlayerChatEvent) {
    const sender = event.getSender();
    const content = event.getContent();

    const formatted = Message.empty()
      .insert(Message.raw(sender.getUsername()).color(Colors.GOLD).bold(true))
      .insert(Message.raw(": ").color(Colors.GRAY))
      .insert(Message.raw(content).color(Colors.WHITE));

    event.setCancelled(true);

    const targets = event.getTargets();
    for (let i = 0; i < targets.length; i++) {
      targets[i].sendMessage(formatted);
    }
  }
}

commands.register("players", "List online players", (ctx) => {
  const universe = Universe.get();
  ctx.sendMessage("Online: " + universe.getPlayerCount());

  const players = universe.getPlayers();
  for (let i = 0; i < players.length; i++) {
    ctx.sendMessage("- " + players[i].getUsername());
  }
});

Next Steps

On this page