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