SteamWar/BauSystem2.0
Archiviert
12
0

Add some utility functions
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful

Signed-off-by: yoyosource <yoyosource@nidido.de>
Dieser Commit ist enthalten in:
yoyosource 2023-07-20 17:07:09 +02:00
Ursprung 532c722636
Commit 5f7f11bf87
4 geänderte Dateien mit 85 neuen und 19 gelöschten Zeilen

Datei anzeigen

@ -29,10 +29,7 @@ import lombok.experimental.UtilityClass;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.luaj.vm2.Globals;
import org.luaj.vm2.LuaError;
import org.luaj.vm2.LuaFunction;
import org.luaj.vm2.LuaValue;
import org.luaj.vm2.*;
import org.luaj.vm2.lib.OneArgFunction;
import java.util.*;
@ -136,12 +133,65 @@ public class ScriptRunner {
}
}
public static boolean callCommand(Player player, String command, LuaValue args) {
public static boolean callCommand(Player player, String command, String[] argsArray) {
CommandRegister commandRegister = COMMAND_MAP.getOrDefault(player, Collections.emptyMap()).get(command);
if (commandRegister == null) {
return false;
}
LuaValue[] values = new LuaValue[argsArray.length - 1];
for (int i = 1; i < argsArray.length; i++) {
values[i - 1] = LuaValue.valueOf(argsArray[i]);
}
LuaTable args = LuaValue.listOf(values);
args.set("alias", command);
args.set("hasShortFlag", new OneArgFunction() {
@Override
public LuaValue call(LuaValue arg) {
String s = arg.checkjstring();
if (!s.matches("-?[a-zA-Z]")) {
throw new LuaError("Short Flag must be one character");
}
String flag = s.charAt(s.length() - 1) + "";
boolean hasFlag = false;
for (String arg1 : argsArray) {
if (arg1.startsWith("-") && arg1.contains(flag)) {
hasFlag = true;
break;
}
}
return valueOf(hasFlag);
}
});
args.set("removeShortFlag", new OneArgFunction() {
@Override
public LuaValue call(LuaValue arg) {
String s = arg.checkjstring();
if (!s.matches("-?[a-zA-Z]")) {
throw new LuaError("Short Flag must be one character");
}
String flag = s.charAt(s.length() - 1) + "";
boolean hasFlag = false;
for (int i = 0; i < argsArray.length; i++) {
String arg1 = argsArray[i];
if (arg1.startsWith("-") && arg1.contains(flag)) {
String newArg = arg1.replace(flag, "");
if (newArg.equals("-")) {
args.remove(i);
} else {
args.set(i, newArg);
}
hasFlag = true;
break;
}
}
return valueOf(hasFlag);
}
});
try {
commandRegister.getFunction().call(args);
} catch (Exception e) {

Datei anzeigen

@ -46,13 +46,8 @@ public class CommandListener implements Listener {
return;
}
LuaValue[] values = new LuaValue[split.length - 1];
for (int i = 1; i < split.length; i++) {
values[i - 1] = LuaValue.valueOf(split[i]);
}
calledCommands.getOrDefault(event.getPlayer(), new HashSet<>()).add(split[0]);
event.setCancelled(ScriptRunner.callCommand(event.getPlayer(), split[0].substring(1), LuaValue.listOf(values)));
event.setCancelled(ScriptRunner.callCommand(event.getPlayer(), split[0].substring(1), split));
calledCommands.getOrDefault(event.getPlayer(), new HashSet<>()).remove(split[0]);
}

Datei anzeigen

@ -141,6 +141,20 @@ public class SteamWarLuaPlugin extends TwoArgFunction {
return arg.len();
}
});
env.set("join", new TwoArgFunction() {
@Override
public LuaValue call(LuaValue arg1, LuaValue arg2) {
String separator = arg1.checkjstring();
LuaTable table = arg2.checktable();
StringBuilder builder = new StringBuilder();
for (int i = 1; i <= table.length(); i++) {
if (builder.length() != 0) builder.append(separator);
builder.append(table.get(i).tojstring());
}
return valueOf(builder.toString());
}
});
env.set("collectgarbage", NIL);
env.set("dofile", NIL);

Datei anzeigen

@ -7,6 +7,7 @@
* [Basis-Apis](#basis-apis)
* [SteamWar.de-Api](#steamwarde-api)
* [player](#player)
* [random](#random)
* [region](#region)
* [tnt](#tnt)
* [trace](#trace)
@ -14,6 +15,7 @@
* [tps](#tps)
* [storage](#storage)
* [SteamWar.de-Global-Api](#steamwarde-global-api)
* [Commands](#commands)
* [Hotkeys](#hotkeys)
* [Eventtypen](#eventtypen)
* [BlockEvent](#blockevent)
@ -61,13 +63,14 @@ 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) | 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) | Gibt die Länge des Objekts zurück |
| `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 |
### player
Das `player`-Modul stellt Funktionen zur Verfügung, die den Spieler betreffen.
@ -212,6 +215,10 @@ Es gibt folgende Variablen:
|----------|----------------------------------|
| `events` | Siehe: [Event Type](#eventtypen) |
## 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: