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());
}
});