BauSystem2.0/SCRIPT.md
yoyosource 234f476672
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Merge remote-tracking branch 'origin/master'
2024-03-11 20:42:00 +01:00

29 KiB

SteamWar.de - Script System


Einleitung

Das Script System auf SteamWar.de basiert auf Lua. Der Code wird einfach in ein Minecraft Buch geschrieben und kann mit einem Links-Klick ausgeführt werden.

Nutzung mit einer IDE

Im Repository liegen Lua-Definitionen für Luanalysis. Diese können in der IDE genutzt werden, um die APIs zu nutzen.

Einfach die sw.def.lua in denselben Ordner wie das Script legen und die IDE sollte die APIs erkennen.

Basis-Apis

Es werden folgende Standard-Apis zur Verfügung gestellt:

SteamWar.de-Api

APIs, die mit einem _ beginnen sind noch nicht stabil und können sich jederzeit ändern. Sie sollten daher nicht verwendet werden, da sie sich noch in der Entwicklung befinden. Diese können auch undokumentierte Funktionen enthalten, die nicht in der Dokumentation aufgeführt sind.

In den Scripten gibt es dazu noch folgende globale Variablen:

Ohne eine Kategorie sind folgende Funktionen verfügbar, die nicht allgemein sind:

Name Signature Beschreibung
print print(String...) @see chat(String...)
input input(String, Function<String>) Fragt den User nach einer Eingabe mit der Nachricht und called die zugehörige Funktion nach dieser
delayed delayed(Number, Function<Void>) Wartet die angegebene Anzahl an Ticks und führt danach die zugehörige Funktion aus
pos pos(Number, Number, Number): Position Erstellt aus drei Zahlen eine Position-Table. Die Koordinaten sind unter den Namen x, y und z abgespeichert
exec exec(String...) Führt den angegebenen Befehl als Spieler aus
length length(Any): Int Gibt die Länge des Objekts zurück
join length(String, String...): String Füge die Texte mit den ersten Parameter zusammen

Position besteht aus einer x, y und z Koordinate als auch aus folgenden Methoden:

Name Signature Beschreibung
add add(Position): Position Erstellt eine neue Position mit neuen X, Y und Z Koordinaten
addX addX(Number): Position Erstellt eine neue Position mit neuer X Koordinate
addY addY(Number): Position Erstellt eine neue Position mit neuer Y Koordinate
addZ addZ(Number): Position Erstellt eine neue Position mit neuer Z Koordinate
subtract subtract(Position): Position Erstellt eine neue Position mit neuen X, Y und Z Koordinaten
subtractX subtractX(Number): Position Erstellt eine neue Position mit neuer X Koordinate
subtractY subtractY(Number): Position Erstellt eine neue Position mit neuer Y Koordinate
subtractZ subtractZ(Number): Position Erstellt eine neue Position mit neuer Z Koordinate
blockPos blockPos(): Position Erstellt eine neue Position mit Block-Koordinaten

player

Das player-Modul stellt Funktionen zur Verfügung, die den Spieler betreffen. Es gibt folgende Funktionen:

Name Signature Beschreibung
name name(): String Gibt den displayName des Spielers zurück
chat chat(String...) Sendet den Text in den Chat des Spielers
actionbar actionbar(String...) Sendet den Text in die ActionBar des Spielers
pos pos() Position of Player
blockPos blockPos() Block Position of Player
x x(Number), x(): Number Setzt oder gibt die X-Koordinate des Spielers
y y(Number), y(): Number Setzt oder gibt die Y-Koordinate des Spielers
z z(Number), z(): Number Setzt oder gibt die Z-Koordinate des Spielers
yaw yaw(Number), yaw(): Number Setzt oder gibt die Gierung des Spielers
pitch pitch(Number), pitch(): Number Setzt oder gibt die Steigung des Spielers
sneaking sneaking(): Boolean Wahr, wenn der Spieler am Sneaken ist
sprinting sprinting(): Boolean Wahr, wenn der Spieler am Sprinten ist
slot slot(Number), slot(): Number Setzt oder gibt den Slot des gehaltenden Items des Spielers (Wiki)
item item(): String Gibt den Itemtyp der Main-Hand zurück
offHandItem offHandItem(): String Gibt den Itemtyp der Off-Hand zurück
closeInventory closeInventory() Schließe das aktuell geöffnete Inventar des Spielers

random

Das random-Modul stellt Funktionen zur Verfügung, die Zufallszahlen betreffen. Es gibt folgende Funktionen:

Name Signature Beschreibung
nextInt nextInt(): Int Gibt eine Zufallszahl zurück zwischen Integer.MIN_VALUE und Integer.MAX_VALUE
-"- nextInt(Int): Int Gibt eine Zufallszahl zurück zischen 0 und dem Argument
-"- nextInt(Int, Int): Int Gibt eine Zufallszahl zurück zwischen dem ersten und zweiten Argument
nextDouble nextDouble(): Double Gibt eine Zufallszahl zurück zwischen 0 und 1
-"- nextDouble(Double): Double Gibt eine Zufallszahl zurück zwischen 0 und dem Argument
-"- nextDouble(Double, Double): Double Gibt eine Zufallszahl zurück zwischen ersten und zweiten Argument
nextBool nextBool(): Boolean Gibt true oder false zurück

region

Das region-Modul stellt Funktion zur Verfügung, die die Region des Spielers betreffen. Es gibt folgende Funktionen:

Name Signature Beschreibung
name name(): String Gibt den Regionsnamen
type type(): String Gibt den Regionstyp
fire fire(): Boolean Gibt den Fire-Modus der Region zurück
freeze freeze(): Boolean Gibt den Freeze-Modus der Region zurück
protect protect(): Boolean Gibt den Protect-Modus der Region zurück
loader loader(): String Gibt den Status des Loaders des Spielers zurück, die Werte sind: OFF, SETUP, RUNNING, PAUSE, END
get get(String): Region Gibt die Region mit dem Namen zurück. Die Region ist gleich aufgebaut wie das Regions-Modul
list list(): Region[] Gibt alle Region zurück. Die Region ist gleich aufgebaut wie das Regions-Modul

Es gibt folgende weitere Module:

Name Beschreibung
tnt tnt
trace trace

tnt

Das tnt-Modul stellt Funktionen zur Verfügung, die den TNT-Modus in der Region des Spielers betreffen. Es gibt folgende Funktionen:

Name Signature Beschreibung
mode mode(): String Gibt den Aktuellen TNT-Modus zurück, die werte sind: ALLOW, DENY oder ONLY_TB
enabled enabled(): Boolean Gibt zurück, ob der TNT-Modus in der Region des Spielers aktiviert ist oder nicht
onlyTb onlyTb(): Boolean Gibt zurück, ob der TNT-Modus auf Only-Tb ist
onlyBuild onlyBuild(): Boolean Gibt zurück, ob der TNT-Modus auf Only-Build ist

trace

Das trace-Modul stellt Funktionen zur Verfügung, die den Status des Tracers der Region betreffen. Es gibt folgende Funktionen:

Name Signature Beschreibung
active active(): Boolean Gibt zurück, ob der Tracer in der Region des Spielers aktiviert ist oder nicht
auto auto(): Boolean Gibt zurück, ob der Tracer in der Region ein Auto-Tracer ist
status status(): String Gibt den Status des Tracers zurück
time time(): String Gibt die Zeit des Tracers zurück

server

Das server-Modul stellt Funktionen zur Verfügung, die den Server betreffen. Es gibt folgende Funktionen:

Name Signature Beschreibung
time time(): String Gibt die aktuelle Zeit im Format HH:mm:ss zurück
ticks ticks(): Number Gibt die Ticks seit start des Serverstarts zurück
onlinePlayerCount onlinePlayerCount(): Number Gibt die Anzal der Spieler auf dem Server zurück
getBlockAt getBlockAt(Pos): String Gibt das Material an der Position zurück
setBlockAt setBlockAt(Pos, String) Setzt das Material an der angegebenen Stelle (z.B. Stein = STONE)
interactAt interactAt(Pos) Interagiere mit einem Block in der Welt, als wenn dieser durch den Spieler gerechtsklicked wurde

Es gibt folgende weitere Module:

Name Beschreibung
tps tps

tps

Das tps-Modul stellt Funktionen zur Verfügung, die die TPS des Servers betreffen. Es gibt folgende Funktionen:

Name Signature Beschreibung
current current(): Number Gibt die aktuelle TPS zurück (Das selbe wie oneSecound())
oneSecond oneSecond(): Number Gibt die durchschnittliche TPS über die letzte Sekunde zurück
tenSecond tenSecond(): Number Gibt die durchschnittliche TPS über die letzte 10 Sekunden zurück
oneMinute oneMinute(): Number Gibt die durchschnittliche TPS über die letzte Minute zurück
fiveMinute fiveMinute(): Number Gibt die durchschnittliche TPS über die letzte 5 Minuten zurück
tenMinute tenMinute(): Number Gibt die durchschnittliche TPS über die letzte 10 Minuten zurück
limit limit(): Number Gibt das TPS-Limit zurück

storage

Das storage-Modul stellt Funktionen zur Verfügung, mit welchen man Werte speichern kann.

Es gibt folgende Module:

Name Beschreibung
player Spieler abhängig
region Region des Spielers
global Alle Skripte

Alle Module haben folgende Funktionen:

Name Signature Beschreibung
get get(String): Any Gibt den Wert des Schlüssels zurück
set set(String, Any) Setzt den Wert des Schlüssels auf den angegebenen Wert
has has(String): Boolean Prüft ob ein Wert vorhanden ist
remove remove(String) Löscht den Schlüssel
accessor accessor(String): Accessor Gibt einen Accessor zurück

Ein Accessor ist ein Objekt, womit du direkt auf einen Wert zugreifen kannst und es ändern kannst. Es geht wie folgt:

keyAccessor = storage.player.accessor("key")

keyAccessor("Hello World") -- Setzt den Wert auf "Hello World"
print(keyAccessor()) -- Gibt den Wert zurück

inventory

Das inventory-Modul stellt Funktionen zur Verfügung, um ein Inventar zu öffnen. Es gibt folgende Funktionen:

Name Signature Beschreibung
create create(String, Number): Inventory Erstellt ein Inventar mit dem Title und der Anzahl an Zeilen

Das Inventory-Objekt hat folgende Funktionen:

Name Signature Beschreibung
item item(Number, String, String, Function<String>) Setze ein Item mit dem Typen des ersten Strings an den Slot (Startet bei 0) mit dem Namen des zweiten Strings mit einem Klick-Handler der den Klick-Typen rein gibt (z.B. LEFT, SHIFT_LEFT, RIGHT, SHIFT_RIGHT)
-"- item(Number, String, String, Function<String>, List) Füge eine Lore an das Item hinzu
-"- item(Number, String, String, Function<String>, List, Boolean) Gebe an, ob das Item enchanted sein soll
-"- item(Number, String, String, Function<String>, List, Boolean, Number) Gebe die Anzahl der Items an
setCloseHandler setCloseHandler(Function<Void>) Gebe einen Handler an, der beim schließen des Inventares ausgeführt wird
open open() Öffne das Inventar

Siehe auch: Inventory Beispiel

Siehe auch: Liste an Materials

⚠️⚠️⚠️

Wenn eine Barrier statt des richtigen Items angezeigt wird, dann ist das angegebene Material nicht gültig.

⚠️⚠️⚠️

scoreboard

Das scoreboard-Modul stellt Funktionen zur Verfügung, um Zeilen im Scoreboard hinzuzufügen. Es gibt folgende Funktionen:

Name Signature Beschreibung
group Siehe: Scoreboardgroups
element element(String, Group): ScoreboardElement Erstellt ein ScoreboardElement, welche man nachfolgend befüllen kann
element element(String, Group, Integer): ScoreboardElement Erstellt ein ScoreboardElement, welche man nachfolgend befüllen kann mit einer Sortierung

Ein ScoreboardElement ist ein Objekt, womit du direkt auf einen Wert zugreifen kannst und es ändern kannst. Es geht wie folgt:

key = scoreboard.element("key", scoreboard.group.OTHER)

key("Hello World") -- Setzt im Bereich Other den Text "Hello World" unter allem anderen
key() -- Removed im Bereich Other den vorherigen Text "Hello World"

Scoreboardgroups

Name
Header
Region
Other
Footer

SteamWar.de-Global-Api

Mit /script kann man Script-Bücher global abspeichern. Diese haben dann zugrif auf die global-Api. Die global-Api stellt Funktionen zur Verfügung um auf Events, Commands und Hotkeys mit einem Script zu reagieren.

Es gibt folgende Funktionen:

Name Signature Beschreibung
event event(EventType, Function(Any)) Registriere einen Event Listener
command command(String, Function(Args)) Registriere einen Befehl
hotkey hotkey(String, Function(Boolean)) Registriere einen Hotkey, the function gets a boolean if the key is pressed

Es gibt folgende Variablen:

Name Beschreibung
events Siehe: Event Type

Commands

Der Command Handler kriegt eine Liste aller angegeben argumenten. Die Argumente sind vom Typ String. Mit dem Wert gespeichert unter args.alias oder args["alias"] erhältst du, welcher command eingegeben wurde. Wenn ein handler für mehrere Befehle registriert wurde kannst du es hiermit erkennen. Du kannst args.hasShortFlag(String) um herauszufinden ob eine Flag angegeben wurde wie zum Beispiel -f. Mit args.removeShortFlag(String) kannst du die Flag entfernen und erhältst ob sie angegeben wurde.

Hotkeys

Hotkeys werden im folgenden Format angegeben: MODIFIER+KEY. Bei den Hotkey erstellung ist die Großschreibung egal. Es gibt folgende Modifier:

  • ctrl
  • shift
  • alt
  • meta

Es können auch mehrere Modifier angegeben werden, z.B. ctrl+shift+alt+c. Die Reihenfolge der Modifier und des Keys ist egal.

Eventtypen

Einige Events sind auch abbrechbar, dazu muss die Funktion setCancelled() aufgerufen werden.

Name Wenn Parameter Abbrechbar
DoubleSwap Beim Doppelten Drücken der Swap-Hands taste NIL false
PlaceBlock Beim Platzieren von Blöcken BlockEvent true
BreakBlock Beim Zerstören von Blöcken BlockEvent true
RightClick Beim Rechtsklick InteractEvent true
LeftClick Beim Linksklick InteractEvent true
TNTSpawn Wenn ein TNT in der aktuellen Region spawnt NIL false
TNTExplode Wenn ein TNT in der aktuellen Region explodiert Position true
TNTExplodeInBuild Wenn ein TNT in der aktuellen Bau Region explodiert Position true
SelfJoin Wenn man selbst den Server betritt NIL false
SelfLeave Wenn man den Server verlässt NIL false
DropItem Wenn man ein Item droppt (type: Material) true
EntityDeath Wenn ein Entity stirbt (type: Entity Type) false

BlockEvent

Das übergebene Objekt an den Handler hat folgende Variablen:

Name Beschreibung
x Die X-Koordinate des Blocks
y Die Y-Koordinate des Blocks
z Die Z-Koordinate des Blocks
type Das Material des Blocks

InteractEvent

Das übergebene Objekt an den Handler hat folgende Variablen:

Name Beschreibung
action Die Action die ausgeführt wurde, Mögliche Werte: RIGHT_CLICK_BLOCK, RIGHT_CLICK_AIR, LEFT_CLICK_BLOCK, LEFT_CLICK_AIR
hand Die Hand die zum ausführen genutzt wird, Mögliche Werte: HAND, OFF_HAND, null
block Der Typ des Items mit dem geklickt wurde
hasBlock Wahr, wenn auf einen Block geklickt wurde

Wenn hasBlock wahr ist, gibt es folgende Variablen:

Name Beschreibung
blockX Die X-Koordinate des Blocks
blockY Die Y-Koordinate des Blocks
blockZ Die Z-Koordinate des Blocks
blockFace Die Seite des Blocks die geklickt wurde
blockType Das Material des Blocks

Position

Die Position ist ein Objekt mit folgenden Variablen:

Name Beschreibung
x Die X-Koordinate
y Die Y-Koordinate
z Die Z-Koordinate

Instabile APIs

Hier sind einige APIs aufgelistet, die nicht stabil sind und sich jederzeit ändern können.

_worldedit

Name Signatur Beschreibung
selection selection(Liste<Pos>), selection(): {min: Pos, max: Pos} Die aktuelle auswahl des Spielers

Beispiele

Hello, World!

Ein einfaches Hello, World!-Script.

Code

print("Hello, World!")

Ausgabe

Hello, World!

BauGUI on DoubleSwap

Das Standardskript für das Öffnen des BauGUIs

Code

function handler(event) 
  exec("gui")
end

event(events.DoubleSwap, handler)

SL Command

Ein einfacher Command Redefiner.

Code

function handler(args)
  exec("stoplag")
end

command("sl", handler)

Paste Hotkey

Ein Hotkey zum Pasten des Clipboard-Inhalts.

Code

function handler(pressed)
  if pressed then
    exec("/paste -o")
  end
end

hotkey("ctrl+v", handler)

Inventory

Ein Beispiel für ein Inventar.

Code

inv = inventory.create("Test Inv", 3)
inv.item(13, "STONE", "Ich bin ein Stein", function(e) player.chat(e) end, {"Die Lore", "Die Zweite Zeile"}, true)
inv.open()