62 lines
2.2 KiB
JavaScript
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();
|
|
}
|