NimBlock Inloggen

Een Minecraft-plugin maken zonder te programmeren

Op een Minecraft-server loopt alles wat verder gaat dan het basisspel via een plugin, en een plugin schrijf je in Java. Dat is de muur waar de meeste serverbeheerders op stuklopen: ze weten precies wat ze willen, en de enige weg loopt via een taal, een project om te compileren en een API om te leren. Deze pagina legt uit wat er zonder kan, en vooral waar de grenzen liggen.

De muur, en de drie bekende manieren eromheen

Vóór NimBlock heeft iemand die niet programmeert drie opties, en elke optie heeft een duidelijke grens die je beter kent voordat je eraan begint.

  • Commandoblokken. Die staan op een vaste plek in de wereld en worden geactiveerd door redstone of een klok. Ze kunnen niet reageren op een gebeurtenis op de server, laat staan die voorkomen.
  • Datapacks. Die blijven binnen de vanilla-kaders: functies, voortgang, loot tables. Geen echt commando, geen onderschepping van de chat, geen geannuleerde actie. In ruil daarvoor draaien ze op een vanilla-server, zonder Paper.
  • Skript. Veel krachtiger dan de vorige twee, en krachtiger dan NimBlock. Het is een echte taal, dus een syntaxis om te leren en foutmeldingen om te ontcijferen.

Deze drie bestaan al jaren en geen ervan is achterhaald. Wat ontbrak, was de stap tussen het commandoblok en de taal.

Eén regel, in één zin

De hele NimBlock-grammatica past in één zin: wanneer dit gebeurt, als deze voorwaarden gelden, doe dan dat. Een plugin is een lijst met regels, een regel is een trigger, een paar voorwaarden en een paar acties. Er is niets anders te leren, en dat is bewust zo: een grammatica die in één zin past, past ook in je hoofd.

Regel « welkom »
Wanneer een speler de server joint
als de speler de permissie nimblock.vip heeft
dan stuur « Welkom {speler} ! »
geef 1 brood
speel een level-up geluid

In de editor zijn dit blokken die in elkaar klikken: een blok dat ergens niet mag komen, klikt daar niet vast. En wat de editor doorlaat, vangt de validator op: een spec wordt in zijn geheel geaccepteerd of geweigerd, nooit half. Een beveiligingsplugin zonder zijn beveiligingsregel zou dat niet laten zien in het spel, en dat is precies het soort storing dat je niet wilt.

Wat je vandaag kunt bouwen

9 triggers, 8 voorwaarden, 14 acties. De exacte lijst, actueel en met elke parameter, staat op de grammaticapagina: die wordt gegenereerd vanuit de catalogus, dus liegt die nooit. Kort samengevat, wat ze mogelijk maken:

  • Reageren op wat er gebeurt: iemand die joint, iemand die de server verlaat, een bericht in de chat, iemand die doodgaat, een blok dat wordt gebroken of geplaatst, een commando dat je zelf bedenkt, of gewoon elke N seconden.
  • Filteren op een permissie, OP-status, de wereld, gezondheid, de inhoud van een tekst, een vergelijking van getallen, of een kans.
  • Handelen: berichten, grote titels, geluiden, items, effecten, genezing, teleportaties, serverbrede aankondigingen, het uitvoeren van een consolecommando, en het annuleren van de gebeurtenis die net heeft plaatsgevonden. Dat laatste is wat de lijst tot echte beveiligingen maakt.

Wat dit niet vervangt

Een pagina die alles belooft, helpt niemand. Wat NimBlock niet doet:

  • Geen nieuwe spelmechaniek. Een nieuw bloktype, een unieke entiteit, een op maat gemaakte inventaris-interface: dat is Java, en dat blijft Java.
  • Geen variabelen en geen lussen. Een regel reageert, maar rekent niet. Als je idee vereist dat er complexe status wordt bijgehouden tussen twee gebeurtenissen, ga je verder dan wat deze grammatica aankan.
  • Geen plugins van derden. NimBlock voert je specs uit, het laadt geen .jar die ergens anders is gedownload.
  • Een nieuw commando wacht op de eerstvolgende herstart. De rest wordt direct toegepast, zonder de server te stoppen, maar Minecraft registreert zijn commando's bij het opstarten: het paneel meldt dat op het moment zelf, in plaats van dat je het pas in het spel ontdekt.

Waar de plugin draait

Nergens wordt er Java gegenereerd en vervolgens gecompileerd. De server laadt een runtime die één keer voor iedereen is geschreven, en die runtime leest je spec. Daardoor bouwt een hier samengestelde plugin geen technische schuld op: als Minecraft verandert, past de runtime zich aan, één keer, en niet elke plugin die ermee is gemaakt.

Op een NimBlock-server duurt installeren één klik, en de plugin komt aan zonder het spel te onderbreken. De runtime zelf wordt gepubliceerd in de plugin-catalogi, zodat dezelfde spec ook draait op een server die niet hier wordt gehost.

Veelgestelde vragen

Kun je echt een Minecraft-plugin maken zonder te kunnen programmeren?
Ja, met één voorwaarde: je stelt regels samen binnen een vaste grammatica, je schrijft geen willekeurig programma. Een regel zegt "als dit gebeurt, en als deze voorwaarden gelden, doe dan dat". Bijna alles wat een server tussen vrienden nodig heeft, past in die vorm: welkomstberichten, beloningen, beveiligingen, aankondigingen, zelfgemaakte commando's. Wat er niet in past, is alles wat een hele nieuwe spelmechaniek vereist, en daarvoor heb je nog steeds Java nodig.
Wat is het verschil met commandoblokken?
Commandoblokken staan op een vaste plek in de wereld en worden geactiveerd door redstone of een klok. Een plugin reageert op een gebeurtenis op de server: een speler die verbinding maakt, een blok dat wordt gebroken, een bericht in de chat. Wat commandoblokken niet kunnen, is reageren op wat er gebeurt, en al helemaal niet het voorkomen ervan. Een NimBlock-regel kan de gebeurtenis die net heeft plaatsgevonden annuleren.
En in vergelijking met een datapack?
Een datapack blijft binnen het kader van het vanilla-spel: functies, voortgang, loot tables. Een datapack kan geen echt commando toevoegen, geen chat onderscheppen en geen actie annuleren. Een Paper-plugin kan dat wel, omdat die binnen de server draait, niet in de werelddata. In ruil daarvoor werkt een datapack op een vanilla-server, terwijl een plugin Paper of Spigot vereist.
En in vergelijking met Skript?
Skript is de voorloper van dit genre en is met afstand krachtiger: het is een echte taal, met variabelen, lussen en een enorme bibliotheek aan add-ons. Het is ook een taal, dus een syntaxis om te leren, foutmeldingen om te ontcijferen, en een bestand dat niet zegt waar het is misgegaan. NimBlock doet veel minder, maar weigert een ongeldige regel voordat die wordt opgeslagen en wijst je precies naar de plek van het probleem, op het betreffende blok. Ben je gewend aan Skript, blijf dan bij Skript.
Wordt de plugin ergens naar Java gecompileerd?
Nee, en dat is de kernkeuze van het product. Je spec blijft een JSON-bestand, en de server laadt een runtime die één keer voor iedereen is geschreven en die het bestand leest en uitvoert. Er wordt niets gegenereerd, niets gecompileerd. Praktisch gevolg: een nieuwe Minecraft-versie wordt één keer verwerkt in die runtime, niet in elke plugin die ermee is gemaakt.
Kun je de plugin gebruiken op een server die niet bij NimBlock draait?
Dat is het plan: de runtime die specs leest, wordt gepubliceerd in de plugin-catalogi. Een spec is een gewoon JSON-bestand: de runtime leest het uit de plugins-map van de server. Op het moment dat deze pagina is geschreven, staat dit nog niet online.

Stel je eerste regel samen, en zie hem draaien op een server die al bestaat.

Gratis tijdens de bèta · één server van 1 GB per account