Zum Hauptinhalt springen

Elite Script Bedingungen

Mit Bedingungen können Scripter dafür sorgen, dass Scripts und/oder Aktionen abhängig von bestimmten Voraussetzungen nicht ausgeführt werden.

Conditions auf Script-Ebene großschreiben

Auf Script-Ebene unterscheidet der Schlüssel Groß- und Kleinschreibung. Ein kleingeschriebenes conditions: wird dort ignoriert; das Script läuft dann ganz ohne Bedingungen, und nichts wird protokolliert. Unter einer Aktion wird der Schlüssel in beliebiger Schreibweise gelesen, aber eine Aktion, die sowohl Conditions: als auch conditions: enthält, führt dazu, dass EliteMobs das gesamte Script überspringt. Verwende eine YAML-Zuordnung, keine Liste. Die inneren Schlüssel (isAlive, conditionType, Target, ...) unterscheiden Groß- und Kleinschreibung nicht. Enum-Werte wie BLOCKING und FILTERING müssen dagegen großgeschrieben werden.

Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Conditions:
isAlive: true
conditionType: BLOCKING
Target:
targetType: SELF
Actions:
- action: PLACE_BLOCK
Target:
targetType: SELF
offset: 0,3,0
duration: 20
material: DIRT
Conditions:
locationIsAir: true
conditionType: FILTERING
Target:
targetType: ACTION_TARGET
Cooldowns:
local: 60
global: 20

Example setzt eine gültige Bossentität voraus. Die Aktion prüft den Block 3 Blöcke darüber und platziert dort nur bei Luft einen Erdblock für 20 Ticks. Jede Aktion kann eigene Bedingungen haben.

Target​

Bedingungen verwenden das Targets-System. Ihr Target ist unabhängig vom Ziel der Aktion und verwendet ohne Angabe SELF. Nutze ACTION_TARGET mit FILTERING innerhalb einer Aktion, um deren aufgelöste Ziele einzeln zu prüfen.

Scriptbedingungen und BLOCKING-Aktionsbedingungen lösen ihr eigenes Target auf. Entitätsziele wie SELF oder NEARBY_PLAYERS liefern Entitäten für jede Prüfung. LOCATION und LOCATIONS liefern keine Entitäten: Nur die Positionsprüfungen gelten für ihre Positionen, und die Zielanzahl ist 0. ACTION_TARGET löst auf diesem Weg nichts auf, daher gelten nur randomChance und die Zielanzahlen. LANDING_LOCATION schlägt in Scriptbedingungen fehl, weil diese laufen, bevor ein Landeort existiert.


Bedingungstyp​

SchlüsselBeschreibungWerte
conditionTypeLegt den Typ der Bedingung festBLOCKING / FILTERING

BLOCKING verhindert das gesamte Script oder die einzelne Aktion, unter der die Bedingung steht. Eine blockierte Aktion blockiert keine anderen Aktionen. FILTERING mit ACTION_TARGET entfernt Ziele, die die anwendbaren Prüfungen nicht bestehen.

Bedingungen außerhalb von Aktionen sind immer BLOCKING. Bedingungen innerhalb von Aktionen können BLOCKING oder FILTERING sein.

Hinweis: Wenn das Ziel SELF (der Boss) ist und die Bedingungsprüfung isAlive lautet, ist die Prüfung immer BLOCKING! Dies kann innerhalb einer FILTERING-Bedingung stehen und sorgt trotzdem dafür, dass sich genau dieser Teil wie BLOCKING verhält.

Bedingungen innerhalb von Aktionen sind standardmäßig auf FILTERING gesetzt.

Verwende ACTION_TARGET mit FILTERING für die einzelnen Aktionsziele. BLOCKING benötigt ein konkretes Bedingungsziel wie SELF oder NEARBY_PLAYERS; seine Entitätszählung löst ACTION_TARGET nicht auf.

randomChance, targetCountLowerThan und targetCountGreaterThan werden auf Scriptebene oder in BLOCKING-Aktionsbedingungen geprüft. Die Prüfung einzelner Ziele durch FILTERING wertet sie nicht aus.

Anwendbare Prüfungen sind mit UND verknüpft. Bei blockierenden Bedingungen müssen alle ausgewählten Entitäten und Positionen bestehen. Eine leere Auswahl schlägt nicht von selbst fehl; mit targetCountGreaterThan: 0 verlangst du mindestens eine Entität. Bei einem konkreten Bedingungsziel statt ACTION_TARGET prüft die Filterung diese separate Auswahl und behält entweder alle ursprünglichen Aktionsziele oder entfernt sie alle.

Die Filterung richtet sich nach der Aktion: Entitätsaktionen prüfen Gültigkeit, Tags und die unverschobene Fußposition; Positionsaktionen prüfen nur Positionsbedingungen. Tags und isAlive filtern keine Positionssammlung, abgesehen von der oben beschriebenen besonderen blockierenden Gültigkeitsprüfung für SELF.

Scriptbedingungen werden vor dem Start der Aktionen geprüft. Blockierende Aktionsbedingungen werden nach wait und bei jeder Wiederholung geprüft; ein Fehlschlag beendet die verbleibenden Wiederholungen dieser Aktion. Das Herausfiltern aller Ziele beendet zukünftige Wiederholungen nicht von selbst. Eine fehlgeschlagene Scriptbedingung verhindert den Beginn des Cooldowns; eine fehlgeschlagene Aktionsbedingung macht den Cooldown des Scripts nicht rückgängig.


Platzierung von Bedingungsblöcken​

Du kannst Bedingungsblöcke auf zwei Arten platzieren oder verschachteln:

  1. Unter einzelnen Aktionen – Die Bedingung gilt nur für eine bestimmte Aktion. Ist die Bedingung erfüllt, wird die Aktion ausgeführt; andernfalls nicht.

  2. Unter dem gesamten Script – Die Bedingung gilt für alle Aktionen innerhalb des Scripts. Ist die Bedingung nicht erfüllt, wird keine der Aktionen ausgeführt.

Nachfolgend findest du Beispiele, die zeigen, wie man Bedingungsblöcke sowohl für einzelne Aktionen als auch für das gesamte Script verschachtelt.

Unter einzelnen Aktionen:

Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: MESSAGE
Target:
targetType: NEARBY_PLAYERS
range: 10
sValue: "&2Hello World!"
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
locationIsAir: true
Target:
targetType: SELF
offset: "0,3,0"

Sowohl der Block an den Füßen des Bosses als auch der Block 3 Blöcke darüber müssen Luft sein, damit SET_WEATHER ausgeführt wird. Blockierende Bedingungen prüfen zuerst die Entitätsposition und danach die verschobene Position. MESSAGE wird weiterhin ausgeführt, da diese Aktion keine Bedingung hat.

Unter dem gesamten Script:

Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: MESSAGE
Target:
targetType: NEARBY_PLAYERS
range: 10
sValue: "&2Hello World!"
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
locationIsAir: true
Target:
targetType: SELF
offset: "0,3,0"

Der Block an den Füßen des Bosses und der Block 3 Blöcke darüber müssen beide Luft sein, damit bei einem Treffer beide Aktionen laufen. Andernfalls wird das Script einschließlich SET_WEATHER und MESSAGE blockiert.


Eine Bedingung mit runIf...Is umkehren​

Jede Bedingung hat einen zugehörigen booleschen Schlüssel runIf...Is. Standard ist jeweils true; mit false kehrst du das Ergebnis um.

Es gibt keinen allgemeinen Schlüssel runIfConditionIs. Jede Bedingung hat einen eigenen Namen, und drei davon folgen nicht dem naheliegenden Muster. Unbekannte Schlüssel erzeugen beim Start die Meldung Failed to read key ... for script ....

BedingungZugehöriger SchlüsselHinweise
isAliverunIfAliveIs⚠️ Nicht runIfIsAliveIs
hasTagsrunIfHasTagIs⚠️ Tag im Singular
doesNotHaveTagsrunIfDoesNotHaveTagIs⚠️ Tag im Singular
locationIsAirrunIfLocationIsAirIs
isOnFloorrunIfIsOnFloorIs
isStandingOnMaterialrunIfIsStandingOnMaterialIs
randomChancerunIfRandomChanceIs
targetCountLowerThanrunIfTargetCountLowerThanIs
targetCountGreaterThanrunIfTargetCountGreaterThanIs

Die Bedingungsschlüssel unterscheiden Groß- und Kleinschreibung nicht; runifaliveis funktioniert ebenfalls.

runIfConditionTypeIs hat keine Wirkung

Der Parser akzeptiert runIfConditionTypeIs ohne Warnung, doch der Wert wird nicht ausgewertet. Wähle mit conditionType zwischen BLOCKING und FILTERING; der Typ lässt sich nicht umkehren.

locationIsAir: true verlangt beispielsweise Luft. Mit runIfLocationIsAirIs: false wird daraus die Forderung nach einem Block, der keine Luft ist. Umgekehrt wird der konfigurierte Vergleich: Wenn sowohl die boolesche Bedingung als auch ihr zugehöriger Schlüssel false sind, wird der Vergleich erneut umgekehrt.

Beispiel:

eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
locationIsAir: true
runIfLocationIsAirIs: false
Target:
targetType: SELF

Die Aktion setzt das Wetter nur auf Gewitter, wenn der Block an den Füßen des Bosses keine Luft ist, etwa im Wasser. Das Umkehren von isAlive prüft die Bukkit-Gültigkeit und erzeugt keinen Todesauslöser. Eine fehlende Entität besteht die Prüfung auch mit Umkehrung nicht.


Standortbasierte Bedingungen​

locationIsAir​

Prüft, ob der Zielblock Luft ist, einschließlich Höhlen- und Leerenluft. false verlangt einen Block, der keine Luft ist.

SchlüsselBeschreibungWerte
locationIsAirLegt fest, ob geprüft wird, ob der Standort ein Luftblock ist (oder das Gegenteil).Boolean
Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
locationIsAir: true
Target:
targetType: SELF
offset: "0,3,0"

Die Wetteraktion verlangt Luft an den Füßen des Bosses und 3 Blöcke darüber. Soll eine Positionsaktion nur ihr tatsächliches Ziel prüfen, verwende FILTERING mit ACTION_TARGET, wie im ersten Beispiel.


isOnFloor​

Prüft, ob der Block an der Position nicht fest und der Block eine Einheit darunter fest ist. Dies prüft Materialien, nicht den tatsächlichen Bodenkontakt der Entität oder Kollisionsformen.

SchlüsselBeschreibungWerte
isOnFloorLegt fest, ob geprüft wird, ob der Standort eine Bodenposition ist (oder das Gegenteil).Boolean
Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
isOnFloor: true
Target:
targetType: SELF

Die Wetteraktion verlangt einen nicht festen Block an den Füßen des Bosses und einen festen Block eine Einheit darunter. Ein Fehlschlag blockiert diese Aktion.


isStandingOnMaterial​

Prüft das genaue Material des Blocks eine Einheit unter der Zielposition.

SchlüsselBeschreibungWerte
isStandingOnMaterialLegt fest, auf welchen Materialtyp geprüft werden soll.Material
Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
isStandingOnMaterial: BIRCH_WOOD
Target:
targetType: SELF

Die Wetteraktion verlangt BIRCH_WOOD eine Einheit unter den Füßen des Bosses. BIRCH_LOG und BIRCH_PLANKS passen nicht. Ein Fehlschlag blockiert diese Aktion.

Entitätsbasierte Bedingungen​

isAlive​

Prüft den Bukkit-Zustand isValid() der Zielentität. Dies ist eine Gültigkeitsprüfung, kein direkter Vergleich der Gesundheit. Eine fehlende Entität besteht die Prüfung nicht.

SchlüsselBeschreibungWerte
isAliveErwartete Gültigkeit der Bukkit-Entität.Boolean
Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
isAlive: true
Target:
targetType: SELF

Die Wetteraktion läuft nur, solange die Bukkit-Entität des Bosses gültig ist. Ein Fehlschlag blockiert diese Aktion.


hasTags​

Verlangt alle aufgeführten Tags im EliteMobs-Tagspeicher einer verwalteten Elite oder eines Spielers. Tags sind Zeichenketten mit Groß-/Kleinschreibung und werden etwa durch TAG und UNTAG gesetzt. Vanilla-Scoreboard-Tags werden nicht gelesen; gewöhnliche Mobs besitzen diesen Speicher nicht. Ohne diesen Speicher schlägt hasTags fehl und doesNotHaveTags besteht, jeweils vor einer Umkehrung.

SchlüsselBeschreibungWerte
hasTagsLegt fest, ob geprüft wird, ob die Entität eine Liste von Tags besitzt.String List
Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
hasTags:
- isCool
- hasANiceBeard
Target:
targetType: SELF

Die Wetteraktion verlangt sowohl isCool als auch hasANiceBeard am Boss. Ein Fehlschlag blockiert diese Aktion.


doesNotHaveTags​

Besteht, wenn das Ziel nicht alle aufgeführten Tags besitzt. Ein fehlender Tag genügt; es müssen nicht alle fehlen.

SchlüsselBeschreibungWerte
doesNotHaveTagsLegt fest, ob geprüft wird, ob die Entität eine Liste von Tags nicht besitzt.String List
Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
doesNotHaveTags:
- isStinky
- isSus
Target:
targetType: SELF

Die Aktion läuft, sofern der Boss nicht gleichzeitig isStinky und isSus besitzt. Nur einer der beiden Tags verhindert die Aktion nicht.

Andere Bedingungen​

randomChance​

Zieht jedes Mal eine neue Zufallszahl, wenn die blockierenden Prüfungen diese Bedingung erreichen. Verwende eine einzelne Zahl von 0.0 (nie) bis 1.0 (immer), keinen Bereich mit ~. runIfRandomChanceIs: false kehrt das Ergebnis um. Bei einer wiederholten Aktion beendet ein fehlgeschlagener Zufallstest ihre verbleibenden Wiederholungen.

SchlüsselBeschreibungWerte
randomChanceWahrscheinlichkeit, dass die Bedingung gültig ist.Zahl zwischen 0.0 und 1.0
Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
randomChance: 0.1
Target: # Not required
targetType: SELF # Not required

Die Wetteraktion hat bei jeder Prüfung eine Ausführungschance von 10 %. Ein Fehlschlag blockiert diese Aktion.

Ein ausdrückliches Bedingungs-Target ist optional, weil es standardmäßig SELF verwendet. Das Weglassen deaktiviert keine anderen Bedingungen im selben Block.

NEARBY mit Tags filtern​

Um NEARBY_MOBS oder NEARBY_PLAYERS anhand bestimmter Tags zu filtern, verwende ACTION_TARGET als Ziel der Bedingung (sofern die Bedingung auf eine Aktion und nicht auf das Script selbst angewendet wird). Dadurch wird sichergestellt, dass das Script ausschließlich die Mobs/Spieler mit den angegebenen Tags korrekt filtert.

Beispiel
eliteScript:
Example:
Actions:
- action: SET_MOB_AI
Target:
targetType: NEARBY_MOBS
range: 40
bValue: false
Conditions:
conditionType: FILTERING
hasTags:
- TurnOff
Target:
targetType: ACTION_TARGET

Das Script deaktiviert die KI verwalteter Eliten mit dem Tag TurnOff in einem Suchquader, der sich entlang jeder Achse 40 Blöcke erstreckt; der Boss selbst ist ausgeschlossen. Gewöhnliche Mobs haben diesen Tagspeicher nicht. Das Beispiel enthält keine Events: Rufe es aus einem anderen Script auf oder füge ein Ereignis hinzu.

targetCountLowerThan und targetCountGreaterThan​

Vergleicht die Entitätsanzahl des Bedingungsziels vor der Prüfung von Tags und anderen Entitätsbedingungen. Die gefilterten Aktionsziele werden nicht gezählt. Die Vergleiche sind strikt: Gleichheit genügt nicht.

SchlüsselBeschreibungWerte
targetCountLowerThanVerlangt eine Entitätsanzahl strikt unter dem Grenzwert.Ganzzahl
SchlüsselBeschreibungWerte
targetCountGreaterThanVerlangt eine Entitätsanzahl strikt über dem Grenzwert.Ganzzahl
Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
targetCountGreaterThan: 2
Target:
targetType: NEARBY_MOBS
range: 15

Die Wetteraktion verlangt mehr als 2 lebende Entitäten, die keine Spieler sind, in einem Suchquader, der sich entlang jeder Achse 15 Blöcke erstreckt. Der Boss ist ausgeschlossen.

Setze das Bedingungs-Target ausdrücklich, um die gewünschte Gruppe zu zählen. Ohne Angabe wird die standardmäßige SELF-Auswahl gezählt. Mit targetCountGreaterThan: 0 verlangst du eine nicht leere Auswahl.