Events erstellen
Diese Anleitung ist für EliteMobs 10 und später
Was sind benutzerdefinierte Events?
Benutzerdefinierte Events beziehen sich hier auf Events, die zufällig im Spiel auftreten, sei es basierend auf Spieleraktionen oder mit einem zeitgesteuerten Auslöser. Das Plugin wird mit einer Reihe von benutzerdefinierten Events vorab geladen, wie zum Beispiel dem Balrog-Event, dem Kraken-Event und den Treasure-Goblin-Events, um nur einige zu nennen.
Dieses System wird Custom (benutzerdefinierte) Events genannt, weil die Events nicht nur angepasst, sondern auch von Grund auf neu erstellt werden können. Was folgt, ist eine Anleitung, wie du deine eigenen Events erstellst und anpasst.
Deine benutzerdefinierten Events erstellen
Konfigurationsdateien für benutzerdefinierte Events sollten hier erstellt werden:
plugins/EliteMobs/customevents/
Dateien müssen das .yml-Format verwenden. Verwende beim Referenzieren den vollständigen Dateinamen einschließlich der Endung .yml.
Beispiel: my_cool_event.yml wird als my_cool_event.yml referenziert
Speichere die Dateien und lade Änderungen mit /em reload. Auch der passende Schalter für Aktions- oder zeitgesteuerte Events in events.yml muss aktiviert sein.
Allgemeine Konfigurationseinstellungen
Die folgenden Einstellungen können/sollten sowohl für Aktions- als auch für zeitgesteuerte Events verwendet werden.
isEnabled
Legt fest, ob das Event aktiviert ist.
| Key | Werte | Standard |
|---|---|---|
isEnabled | Boolean | true |
Beispiel
isEnabled: true
eventType
Legt den Typ des Events fest.
| Key | Werte | Standard |
|---|---|---|
eventType | BREAK_BLOCK / FISH / TILL_SOIL / TIMED | DEFAULT |
Beachte, dass BREAK_BLOCK, FISH und TILL_SOIL Aktions-Events sind und TIMED zeitgesteuerte Events sind.
eventType ist verpflichtend. DEFAULT ist nur der Platzhalter, auf den EliteMobs zurückfällt, wenn die Einstellung fehlt oder zu keinem der oben genannten Typen passt. Ein Event, das auf DEFAULT bleibt, erzeugt eine Warnung und wird überhaupt nicht registriert — keine der darunter liegenden Einstellungen wird dann auch nur gelesen.
Beispiel
eventType: BREAK_BLOCK
bossFilenames
Listet die Dateien der gemeinsam zu spawnenden Custom-Bosse einschließlich .yml auf. Erforderlich! Es wird kein zufälliger Boss aus der Liste gewählt. Prüfe jede Referenz, bevor du das Event verwendest. Zeitgesteuerte Events überspringen ungültige Dateien und können ohne gültige Bosse nicht eingereiht werden. Ein Aktions-Event mit einer ungültigen Datei wird abgebrochen, bevor etwas spawnt; wird der Spawn eines Bosses verweigert, werden die bereits gespawnten Bosse entfernt.
| Key | Werte | Standard |
|---|---|---|
bossFilenames | String-Liste | keiner |
Beispiel
bossFilenames:
- balrog.yml
- my_event_boss.yml
announcementPriority
Bestimmt die Empfänger der Start- und Endnachrichten. Event-Prioritäten funktionieren anders als Boss-Ankündigungsprioritäten:
| Priorität | Empfänger |
|---|---|
0 | Spieler in der Event-Welt; schaltet Nachrichten nicht aus |
1 | Alle Online-Spieler, mit announcementBroadcastWorldOnly: true nur Spieler in der Event-Welt |
2 | Spieler in der Event-Welt |
3 oder höher | Spieler in der Event-Welt sowie DiscordSRV, sofern eingerichtet |
Lasse startMessage oder endMessage weg, um die jeweilige Event-Nachricht zu unterdrücken. Die eigene Spawn-Ankündigung eines Bosses ist davon unabhängig.
| Key | Werte | Standard |
|---|---|---|
announcementPriority | Integer | 0 |
Beispiel
announcementPriority: 1
startMessage
Legt die Nachricht beim tatsächlichen Start fest, nicht beim Einreihen eines zeitgesteuerten Events. Start- und Endnachrichten unterstützen Farben, ersetzen aber keine Boss- oder Spielerplatzhalter wie $boss oder $player.
| Key | Werte | Standard |
|---|---|---|
startMessage | String | keiner |
Beispiel
startMessage: An event has started!
![]()
endMessage
Legt die Nachricht fest, die am Ende des Events gesendet wird.
| Key | Werte | Standard |
|---|---|---|
endMessage | String | keiner |
Beispiel
endMessage: An event has ended!
eventStartCommands
Legt Konsolenbefehle für den Event-Start fest, ohne führendes / und ohne Spieler- oder Bossplatzhalter. Jeder Befehl wird unabhängig ausgeführt; $chance=0.5$ gibt diesem Befehl eine Chance von 50 %. Verwende Werte zwischen 0 und 1; ohne diesen Zusatz wird der Befehl immer ausgeführt.
| Key | Werte | Standard |
|---|---|---|
eventStartCommands | String-Liste | keiner |
Beispiel
eventStartCommands:
- say The event now starts!!
- "$chance=0.5$ say What a spawn!"

eventEndCommands
Legt Konsolenbefehle fest, die beim Event-Ende für den nächsten Server-Task eingeplant werden. Syntax und Wahrscheinlichkeit pro Befehl entsprechen eventStartCommands, ohne Spieler- oder Bossplatzhalter.
| Key | Werte | Standard |
|---|---|---|
eventEndCommands | String-Liste | keiner |
Beispiel
eventEndCommands:
- say The event ends, so sad.
- "$chance=0.5$ say Too slow bud!"

minimumPlayerCount
Legt die Mindestanzahl an Online-Spielern fest, über alle Welten und Spielmodi hinweg. Gezählt werden nicht nur geeignete Teilnehmer in der Nähe.
Aktions-Events prüfen den Wert, wenn die Aktion sie auslöst. Zeitgesteuerte Events prüfen ihn, wenn die automatische Auswahl Events auswählt, bevor ein eingereihtes Event nach einem Ort sucht, und noch einmal direkt vor dem Spawnen seiner Bosse. Ein eingereihtes zeitgesteuertes Event wartet, bis genügend Spieler online sind; sein Custom-Spawn muss außerdem durch seine eigenen Spieler- und Ortsprüfungen einen geeigneten Ort finden.
| Key | Werte | Standard |
|---|---|---|
minimumPlayerCount | Integer | 1 |
Beispiel
minimumPlayerCount: 5
Event-Konfigurationsbeispiel
Nur gemeinsame Einstellungen; ein vollständiges zeitgesteuertes Event benötigt zusätzlich spawnType und ein positives Auswahlgewicht.
isEnabled: true
eventType: TIMED
bossFilenames:
- "cool_boss.yml"
- "other_cool_boss.yml"
announcementPriority: 3
startMessage: "Cool event is starting!"
endMessage: "Cool event is ending!"
eventStartCommands:
- say The event started!
eventEndCommands:
- say The event ended!
Vollständiges Beispiel für ein zeitgesteuertes Event
isEnabled: true
eventType: TIMED
bossFilenames:
- "my_timed_boss.yml"
announcementPriority: 3
startMessage: "A timed event has started!"
endMessage: "The timed event has ended!"
eventStartCommands:
- say The timed event began!
eventEndCommands:
- say The timed event concluded!
spawnType: "my_spawn_location.yml"
localCooldown: 120
globalCooldown: 30
weight: 100
eventDuration: 15
endEventWithBossDeath: true
Aktions-Events
Events, die eine Chance haben, ausgeführt zu werden, wenn eine bestimmte Aktion eintritt, wie das Abbauen eines Blocks oder das Angeln.
Beim Start eines Aktions-Events beginnt ein Cooldown pro Spieler, standardmäßig 4 Minuten, einstellbar über actionEventMinimumCooldownMinutes in events.yml. Pro Aktion startet nur ein Aktions-Event: Sobald eine passende Datei startet, hat der Spieler einen Cooldown und die übrigen Dateien werden übersprungen. Ein Event, das nicht starten kann, verbraucht den Cooldown nicht. Mit actionEventsEnabled: false lassen sich Aktions-Events serverweit deaktivieren.
Die drei Aktionstypen lösen wie folgt aus:
eventType | Auslöser |
|---|---|
BREAK_BLOCK | Ein Spieler baut einen Block ab. Zuerst wird chance ausgewürfelt, danach wird der abgebaute Block gegen breakableMaterials geprüft. |
FISH | Ein Angel-Event enthält eine gefangene Entität, auch einen eingehakten Mob. Ohne gefangene Entität wird es nicht ausgelöst. Spawn-Ort ist die Position dieser Entität. |
TILL_SOIL | Ein Spieler rechtsklickt DIRT oder GRASS_BLOCK mit einer Holz-, Stein-, Eisen-, Gold-, Diamant- oder Netherit-Hacke in der Haupthand. Ob der Block tatsächlich zu Ackerboden wird, wird nicht geprüft. |
Abgebrochene Bukkit-Events werden ignoriert. Der Ort muss in einer aktivierten EliteMobs-Welt, außerhalb von EliteMobs-Dungeon-Welten und von Instanzregionen für Dungeons, Arenen oder Klassenprüfungen liegen und durch das WorldGuard-Flag elitemobs-events erlaubt sein. Diese Listener beschränken den Spielmodus nicht zusätzlich.
Aktions-Events spawnen am Interaktionsort: in der X/Z-Mitte des abgebauten Blocks, bei der gefangenen Entität oder einen Block über dem angeklickten Boden. Sie verwenden weder spawnType noch die Auswahlgewichte und Auswahl-Cooldowns zeitgesteuerter Events.
Auch Peace Banner verhindert das Event, wenn suppressEvents aktiviert ist. Die unten beschriebenen Prüfungen für Dauer, Endzeit und Entfernung der Bosse gelten ebenfalls für Aktions-Events.
chance
Legt die Chance fest, dass das Event eintritt, wenn die Aktion eintritt.
| Key | Werte | Standard |
|---|---|---|
chance | Wert zwischen 0.0 und 1.0 | 0 |
Beispiel
chance: 0.001
breakableMaterials
Legt die Liste der zu prüfenden Materialien fest, wenn die Aktion auf BREAK_BLOCK gesetzt ist.
| Key | Werte | Standard |
|---|---|---|
breakableMaterials | Liste von Materialien | keiner |
Beispiel
breakableMaterials:
- BEEHIVE
- BIRCH_WOOD
Konfigurationsbeispiel
chance: 0.001
breakableMaterials:
- COAL_ORE
Legt eine Chance von 0,1 % fest, dass das Event ausgeführt wird, wenn ein Kohleerz-Block abgebaut wird, vorausgesetzt, der Event-Typ ist BREAK_BLOCK.
Vollständiges Beispiel für ein Aktions-Event
isEnabled: true
eventType: BREAK_BLOCK
bossFilenames:
- "mining_boss.yml"
announcementPriority: 2
startMessage: "You've awakened something..."
chance: 0.001
breakableMaterials:
- DIAMOND_ORE
- EMERALD_ORE
Zeitgesteuerte Events
Zeitgesteuerte Events verwenden eine gewichtete automatische Auswahl und anschließend eine Custom-Spawn-Warteschlange. Die Auswahl garantiert weder sofortiges Spawnen noch einen festen Zeitplan. Verschiedene Dateien können gleichzeitig eingereiht oder aktiv sein.
Ohne Online-Spieler wird nichts ausgewählt. Die automatische Auswahl schließt eine Datei aus, solange eine Kopie eingereiht oder aktiv ist oder weniger Spieler online sind, als ihr minimumPlayerCount verlangt. Mit timedEventsEnabled: false in events.yml lassen sich zeitgesteuerte Events serverweit deaktivieren.
spawnType
Legt den benutzerdefinierten Spawn fest, der vom Event verwendet wird und definiert, wo der Boss spawnen kann.
| Key | Werte | Standard |
|---|---|---|
spawnType | Filename | keiner |
Beispiel
spawnType: nether_spawn.yml
localCooldown
Legt die Wartezeit in Minuten bis zur nächsten automatischen Auswahl dieses Events fest, gemessen ab der Auswahl. Sie wird auch verbraucht, wenn danach die Validierung oder ein anderes Plugin das Einreihen verhindert. Eine eingereihte oder aktive Kopie blockiert die automatische Neuauswahl zusätzlich, auch nach Ablauf des Cooldowns.
| Key | Werte | Standard |
|---|---|---|
localCooldown | Double | 0 |
Beispiel
localCooldown: 120
globalCooldown
Legt den globalen Auswahl-Cooldown in Minuten fest. Er wird beim erfolgreichen Einreihen und erneut beim tatsächlichen Start gesetzt, auch bei manuell eingereihten Events. Er beginnt nicht erst beim Event-Ende. Eine neue Zuweisung ersetzt die bisherige Frist.
| Key | Werte | Standard |
|---|---|---|
globalCooldown | Double | 0 |
Beispiel
globalCooldown: 60
weight
Legt das relative Auswahlgewicht unter aktuell geeigneten zeitgesteuerten Events fest. Verwende einen endlichen positiven Wert. Empfohlen: 100. Gewicht null deaktiviert ein Event nicht zuverlässig, insbesondere wenn alle geeigneten Gewichte null sind; verwende stattdessen isEnabled: false.
Das Gewichtssystem bestimmt die relative Wahrscheinlichkeit der Event-Auswahl. Zum Beispiel:
- Event A mit Gewicht 100 vs. Event B mit Gewicht 50 = Event A wird doppelt so wahrscheinlich ausgewählt
- Höheres Gewicht = höhere Chance, ausgewählt zu werden
- Der Scheduler prüft erstmals etwa 5 Minuten nach seiner Initialisierung, danach einmal pro Minute. Server-Lag kann diese Prüfungen verzögern.
| Key | Werte | Standard |
|---|---|---|
weight | Double | 0 |
Beispiel
weight: 60.5
eventDuration
Legt die Dauerbegrenzung in Minuten ab dem tatsächlichen Start fest. 0 deaktiviert sie, ebenso negative Werte. Die Prüfung erfolgt alle 20 Server-Ticks, sodass das Event bis zu einer Sekunde zu spät enden kann, bei Server-Lag auch später. Gilt auch für Aktions-Events.
| Key | Werte | Standard |
|---|---|---|
eventDuration | Double | 0 |
Beispiel
eventDuration: 30
endEventWithBossDeath
Beendet das Event, wenn keines seiner primären Bossobjekte mehr existiert. Bei mehreren bossFilenames reicht ein besiegter oder entfernter Boss nicht aus, solange ein anderer bleibt. Verstärkungen sind keine zusätzlichen primären Bosse. Geprüft wird die Existenz, nicht ein einem Spieler angerechneter Kill. Jedes Event-Ende entfernt verbleibende primäre Bosse als abgelaufene Bosse. Gilt auch für Aktions-Events.
| Key | Werte | Standard |
|---|---|---|
endEventWithBossDeath | Boolean | true |
Beispiel
endEventWithBossDeath: true
eventEndTime
Legt die Spielzeit (in Ticks) fest, zu der das Event endet. Verwende Minecrafts Zeitsystem, wobei 0=Morgendämmerung, 6000=Mittag, 12000=Abenddämmerung, 18000=Mitternacht, 23000=späte Nacht. Setze auf -1, um das zeitbasierte Ende zu deaktivieren.
Geprüft wird Weltzeit > eventEndTime; es wird weder auf den nächsten Tag noch auf eine genaue Überschreitung gewartet. Beginnt ein Event nach dieser Zeit, kann es bei der ersten Prüfung enden. Stimme das Spawn-Zeitfenster auf die Endzeit ab. Die Weltzeit reicht von 0 bis 23999, daher werden Schwellen von 23999 oder höher nie überschritten. Gilt auch für Aktions-Events.
| Key | Werte | Standard |
|---|---|---|
eventEndTime | Integer (0–23998 für eine erreichbare Schwelle; -1 deaktiviert) | -1 |
Beispiel
eventEndTime: 23000
Das Einreihen startet die Suche und Wiederholungsversuche des Custom-Spawns. Er kann an einem gespeicherten Ort auf passende Uhrzeit oder Mondphase warten; dabei werden nicht alle Ortsprüfungen wiederholt. Die oben verlinkte Custom-Spawn-Anleitung beschreibt die Prüfungen und ihre Grenzen. Es spawnt immer nur ein zeitgesteuertes Event gleichzeitig, und der Spawn wartet außerdem auf minimumPlayerCount und das Intervall timedEventMinimumCooldownMinutes. Startnachricht und Startbefehle werden erst ausgeführt, nachdem das zeitgesteuerte Event die Existenz seiner primären Bosse bestätigt hat.
Events-Konfigurationsbeispiel
isEnabled: true
eventType: TIMED
bossFilenames:
- "cool_boss.yml"
- "other_cool_boss.yml"
announcementPriority: 3
startMessage: "Cool event is starting!"
endMessage: "Cool event is ending!"
eventStartCommands:
- say The event started!
eventEndCommands:
- say The event ended!
spawnType: "myCoolSpawn.yml"
localCooldown: 30
globalCooldown: 15
weight: 100
eventDuration: 20
endEventWithBossDeath: true
eventEndTime: 10000
Ein Event manuell auslösen
/em event <event filename>
Reiht ein zeitgesteuertes Event für einen gültigen Ort und Zeitpunkt ein. Erfordert elitemobs.event.start, muss von einem Spieler ausgeführt werden und akzeptiert nur geladene Event-Vorlagen. Diese entstehen aus aktivierten TIMED-Dateien, wenn timedEventsEnabled eingeschaltet ist.
Der Befehl umgeht die gewichtete Auswahl, lokale/globale Auswahl-Cooldowns und die Prüfung auf eine bereits eingereihte oder aktive Kopie. Wiederholtes Ausführen kann doppelte Kopien einreihen. Orts- und Zeitbedingungen des Custom-Spawns, der minimumPlayerCount des Events und das Intervall timedEventMinimumCooldownMinutes gelten weiterhin.
Kann das Event nicht eingereiht werden, wird der Grund gemeldet: fehlender oder ungültiger spawnType, keine gültigen bossFilenames oder Abbruch durch ein anderes Plugin. Eine Erfolgsmeldung bestätigt das Einreihen, keinen sichtbaren Spawn. Prüfe die tatsächlichen Bosse und Spawn-Wiederholungsversuche in der Konsole.
Serverweite Event-Einstellungen
Diese stehen in plugins/EliteMobs/events.yml. Lade sie nach Änderungen neu:
| Key | Beschreibung | Standard |
|---|---|---|
actionEventsEnabled | Ob Aktions-Events überhaupt stattfinden | true |
timedEventsEnabled | Ob zeitgesteuerte Events überhaupt stattfinden | true |
actionEventMinimumCooldownMinutes | Abklingzeit pro Spieler in Minuten, nachdem ein Aktions-Event ausgelöst wurde | 4 |
timedEventMinimumCooldownMinutes | Wartezeit in Minuten nach dem Start eines zeitgesteuerten Events, bevor ein weiteres zeitgesteuertes Event nach einem Ort suchen oder seine Bosse spawnen kann, auch wenn es bereits an einem gespeicherten Ort wartet | 4 |
announcementBroadcastWorldOnly | Beschränkt Event-Nachrichten mit Priorität 1 auf die Event-Welt; andere Prioritäten senden Spielnachrichten bereits nur in dieser Welt | false |
