
FancyNpcs – Minecraft Java Edition 1.19.4–1.21.x
Afhankelijkheden: Platform: Paper / Folia (Spigot en andere verouderde Bukkit-forks worden niet ondersteund) Java-versie: Java 21+ (voor de…
Afhankelijkheden: Platform: Paper / Folia (Spigot en andere verouderde Bukkit-forks worden niet ondersteund) Java-versie: Java 21+ (voor de nieuwste builds is Java 25 vereist) Minecraft-versie: 1.19.4 – 1.21.x Aanvullen
Afhankelijkheden:
Platform: Paper / Folia (Spigot en andere verouderde Bukkit-forks worden niet ondersteund)
Java-versie: Java 21+ (voor de nieuwste builds is Java 25 vereist)
Minecraft-versie: 1.19.4 – 1.21.x
Aanvullende bibliotheken: PlaceholdersAPI (aanbevolen voor het integreren van variabelen in de actie-interface)
Het maken van interactieve niet-spelerpersonages (NPC's) op Minecraft-servers gaat traditioneel gepaard met aanzienlijke hardwarekosten. Verouderde oplossingen registreren NPC's als volwaardige serverentiteiten (Entity), waardoor de core hun kunstmatige intelligentie, fysieke botsingen, pathfinding en chunkladen moet verwerken. Dit leidt tot een kritieke daling van de TPS-waarde (Ticks Per Second) naarmate het aantal personages toeneemt. De plug-in FancyNpcs biedt een alternatieve, op pakketten gebaseerde methode voor het renderen van virtuele personages, waardoor honderden interactieve figuren kunnen worden gehandhaafd zonder enige invloed op de prestaties van de serverthread.
Pakketarchitectuur en Folia-compatibiliteit
De belangrijkste technische eigenschap van FancyNpcs is dat de personages die het maakt uitsluitend bestaan in het geheugen van de plug-in en aan de zijde van de verbonden clients. De server voegt ze niet toe aan de wereldatabase en verwerkt ze niet in de algemene updatecyclus voor entiteiten.
Wanneer een speler de opgegeven coördinaten nadert, onderschept de plug-in het netwerkverkeer en stuurt hij de client ClientboundAddPlayerPacket-pakketten (voor menselijke modellen) of ClientboundAddEntityPacket (voor andere wezens). Het verdere gedrag, de uitrusting en de weergavestatus worden bijgewerkt met behulp van de pakketten ClientboundSetEntityDataPacket (metadata) en ClientboundSetEquipmentPacket (uitrusting). Voor de server bestaan deze personages niet — het zijn "virtuele projecties" voor de eindgebruikers.
Deze aanpak maakt FancyNpcs tot een ideale keuze voor multithreaded servers op basis van Folia. Aangezien Folia de wereld verdeelt in afzonderlijke regio's die elk in hun eigen thread draaien, veroorzaken traditionele NPC-plug-ins vaak deadlocks en kritieke fouten door pogingen tot interactie tussen threads van verschillende regio's. FancyNpcs verwerkt gegevens asynchroon en stuurt pakketten rechtstreeks naar spelers, waardoor conflicten met de taakplanner van Folia volledig worden vermeden.
Mogelijkheden voor het aanpassen van het uiterlijk
De plug-in ondersteunt een breed scala aan entiteitstypen en visuele effecten. Spelers kunnen NPC's maken in de vorm van elke vanilla-mob (Player, Cow, Zombie, Skeleton, Villager, Pig enzovoort) en hun uiterlijk verfijnd instellen.
Skinbeheer (voor menselijke modellen)
Voor personages van het type player zijn er meerdere bronnen om texturen te laden:
@mirror: de skin van de NPC kopieert dynamisch de skin van de speler die er op dat moment naar kijkt.Naam of UUID van een gelicentieerd account: de plug-in stuurt automatisch een verzoek naar de sessieservers van Mojang om de bijbehorende textuur te laden.
Directe link naar een webbron (URL): de mogelijkheid om elk willekeurig .png-bestand van een derde partij vanaf een webserver te laden.
Lokale bestanden: afbeeldingen die vooraf in de map /plugins/FancyNpcs/skins/ zijn geplaatst.
De vlag
--slim: activeert het gebruik van het smalle armmodel (Alex-stijl) voor skins die via links zijn geladen.
Visuele effecten en attributen
Gloed (Glowing): voegt een gekleurde omtrek rond het personage toe. De kleur is gekoppeld aan de vanilla-teamkleuren (Team Colors).
Uitrusting (Equipment): personages kunnen elk willekeurig voorwerp in hun linker- of rechterhand krijgen, en ook een helm, borstplaat, broek en laarzen dragen.
Houdingen (Poses): er worden specifieke weergavestatussen ondersteund, zoals zitten, liggen (het slapen in een bed nabootsen), zwemmen en kruipen.
Grootte (Scale): in nieuwere versies van de plug-in is ondersteuning voor het schalen van entiteiten (het wijzigen van de fysieke grootte van het model) geïmplementeerd.
Commandosysteem en syntaxis
Personages worden uitsluitend beheerd met commando's in de in-game chat of de serverconsole. De onderstaande tabel bevat een beschrijving van de basissyntaxis:
Commando | Beschrijving en parameters | Gebruiksvoorbeeld |
| Een nieuw personage maken |
|
| Een bestaand personage verwijderen |
|
| De skin wijzigen (naam, url of @mirror) |
|
| Geeft de NPC het voorwerp dat de speler vasthoudt |
|
| Schakelt een gekleurde gloed rond het model in |
|
| Laat het personage zijn hoofd naar spelers draaien |
|
| Stelt specifieke houdingen of mob-varianten in |
|
Voor het globale beheer van de plug-in worden platformcommando's gebruikt:
/fancynpcs reload— laadt de systeemconfiguraties opnieuw./fancynpcs save— schrijft de huidige status van alle NPC's geforceerd naar de schijf in het databasebestand.
Systeem van interactieve acties (Actions)
FancyNpcs bevat een ingebouwd scriptmechanisme voor acties dat wordt geactiveerd wanneer een speler met een personage interacteert. Acties kunnen worden geconfigureerd voor verschillende kliktypen (LEFT_CLICK, RIGHT_CLICK, ANY_CLICK).
De plug-in biedt de volgende uit te voeren actietypen:
message: het verzenden van een bericht aan de speler. Ondersteunt MiniMessage (Hex-kleuren) en PlaceholdersAPI-variabelen.player_command: het uitvoeren van een commando namens de speler.player_command_as_op: het uitvoeren van een commando namens de speler met tijdelijke toekenning van operatorrechten (om commando's te activeren die een gewone speler niet kan gebruiken).console_command: het uitvoeren van een commando door de serverconsole. De variabele {player} wordt automatisch vervangen door de naam van de speler.send_to_server: het direct verplaatsen van de speler naar een andere server in het BungeeCord- of Velocity-netwerk.wait: creëert een pauze tussen acties (vertraging in serverticks).block_until_done: voorkomt herhaalde klikken op de NPC totdat de huidige reeks acties is voltooid.execute_random_action: willekeurige selectie van een van de volgende acties in de lijst.
Voorbeeld van het maken van een complex interactief scenario voor een NPC met de naam Bob:
Een welkomstbericht toevoegen:
/npc action Bob RIGHT_CLICK add message <yellow>Welkom op onze server, %player_name%!</yellow>Een pauze van 40 ticks (2 seconden) toevoegen:
/npc action Bob RIGHT_CLICK add wait 40De speler via de console naar de spawn teleporteren:
/npc action Bob RIGHT_CLICK add console_command teleport {player} 0 100 0
Dankzij de mogelijkheid om meerdere opeenvolgende stappen toe te voegen en de wachtrij aan te passen met add_before, add_after en move_up/move_down kunnen beheerders volwaardige dialoogbomen of complexe mechanieken voor overgangen tussen lobbyservers bouwen zonder aanvullende plug-ins zoals Denizen of MyCommand te installeren.
Structuur van de configuratiebestanden
Alle gegevens worden opgeslagen in de map plugins/FancyNpcs/. De werking van de plug-in is gebaseerd op twee bestanden:
1. config.yml
Dit bestand definieert het globale gedrag van de plug-in en bevat de volgende instellingen:
turn_to_player_distance(standaard 5): de straal in blokken waarbinnen het personage zijn hoofd naar spelers draait. Het verlagen van deze parameter optimaliseert de overdracht van netwerkpakketten in drukke zones.visibility_distance(standaard 20): de afstand in blokken waarop NPC-verschijningspakketten naar de client worden gestuurd. Verlaging helpt om personages achter muren of renderingsmist te verbergen om de FPS van spelers te besparen.enable_autosave: het automatisch periodiek wegschrijven van wijzigingen naar de schijf.
2. npcs.yml
In dit bestand slaat de plug-in de database van gemaakte NPC's op. Elk personage wordt beschreven door een afzonderlijk gegevensblok:
YAML
Bob: id: 104 type: PLAYER world: world x: 10.5 y: 64.0 z: -25.5 yaw: 90.0 pitch: 0.0 glowing: false turn_to_player: true skin: value: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUv..." signature: "d3G8h...==" actions: RIGHT_CLICK: - type: MESSAGE value: "<green>Welkom!</green>" |
Waarschuwing: Het handmatig bewerken van het bestand npcs.yml wordt ten zeerste afgeraden vanwege het risico op het beschadigen van de syntaxis of het onjuist definiëren van de coördinaten. Alle wijzigingen aan de NPC-configuratie dienen uitsluitend via in-game commando's te worden uitgevoerd en vervolgens te worden vastgelegd met /fancynpcs save.
Conclusie
De plug-in FancyNpcs is een moderne en performante oplossing voor het maken van decoratieve en interactieve personages op Minecraft Java Edition-servers. Het lost het belangrijkste probleem van oudere tools op — het verbruik van de CPU-tijd van de server voor het onderhouden van entiteiten.
De belangrijkste beperking van de plug-in is het volledig ontbreken van kunstmatige intelligentie. Aangezien de personages virtuele projecties aan de clientzijde zijn, kunnen ze zich niet zelfstandig door de wereld bewegen, met blokken interacteren of andere mobs aanvallen.
In vergelijking met de klassieke plug-in Citizens, die complexe bewegingsmechanieken (navigatie via waypoints) en integratie met gevechtssystemen (de Sentinel-mod) ondersteunt, schiet FancyNpcs tekort in de flexibiliteit van de kunstmatige intelligentie. Citizens veroorzaakt echter een kolossale belasting op de hoofdthread van de server en is praktisch ongeschikt voor gebruik op Folia. FancyNpcs biedt een ideaal alternatief voor lobbyservers, Velocity-hubs en grote SMP-projecten, waar van personages alleen een statische aanwezigheid, een goed uiterlijk en een snelle uitvoering van commando's bij het klikken wordt verlangd.
Installatie
Een typische installatie duurt ongeveer 5 minuten. De stappen zijn gelijk; alleen de loader en de bijbehorende build verschillen.
- 1Stop your Minecraft server.
- 2Drop the plugin .jar into the server /plugins folder.
- 3Start the server once so the plugin generates its config files.
- 4Edit /plugins/<name>/config.yml as needed, then run /reload confirm or restart.








