Files
JStom/scripts/npc_text.js
Zephrynis 676857d650
All checks were successful
Build JStom / build (push) Successful in 1m21s
Add NPC Text script and enhance ScriptApi with entity type retrieval
2026-01-26 23:42:41 +00:00

62 lines
2.2 KiB
JavaScript

var Entity = Java.type('net.minestom.server.entity.Entity');
var Pos = Java.type('net.minestom.server.coordinate.Pos');
var Vec = Java.type('net.minestom.server.coordinate.Vec');
var Component = Java.type('net.kyori.adventure.text.Component');
var NamedTextColor = Java.type('net.kyori.adventure.text.format.NamedTextColor');
var BillboardConstraints = Java.type('net.minestom.server.entity.metadata.display.AbstractDisplayMeta.BillboardConstraints');
var MinecraftServer = Java.type('net.minestom.server.MinecraftServer');
server.log("NPC Text script initializing...");
function spawnFixedNPC() {
var instanceManager = MinecraftServer.getInstanceManager();
var instances = instanceManager.getInstances();
if (instances.isEmpty()) {
server.log("No instances found to spawn NPC!");
return;
}
var instance = instances.iterator().next();
var pos = new Pos(45.5, 65.0, -80.5);
// Retrieve EntityTypes via Java helper
var HUSK = server.getEntityType('HUSK');
var TEXT_DISPLAY = server.getEntityType('TEXT_DISPLAY');
if (HUSK == null || TEXT_DISPLAY == null) {
server.log("Failed to resolve EntityTypes! HUSK=" + HUSK + ", TEXT_DISPLAY=" + TEXT_DISPLAY);
return;
}
// 1. Create the "NPC" (Host) - Husk
var npc = new Entity(HUSK);
// 2. Create the TextDisplay (Passenger)
var textDisplay = new Entity(TEXT_DISPLAY);
var meta = textDisplay.getEntityMeta();
// Configure the text display
meta.setText(Component.text("I am a fixed NPC!").color(NamedTextColor.YELLOW));
meta.setBillboardRenderConstraints(BillboardConstraints.CENTER);
meta.setScale(new Vec(1.0, 1.0, 1.0));
meta.setBackgroundColor(0); // Transparent
// 3. Spawn entities
npc.setInstance(instance, pos).thenAccept(function() {
textDisplay.setInstance(instance, pos.add(0, 2.5, 0)).thenAccept(function() {
// 4. Make the TextDisplay ride the NPC
npc.addPassenger(textDisplay);
server.log("Spawned fixed NPC at " + pos);
});
});
}
// Run immediately
try {
spawnFixedNPC();
} catch (e) {
server.log("Error spawning NPC: " + e);
e.printStackTrace();
}