Signed-off-by: yoyosource <yoyosource@nidido.de>
Dieser Commit ist enthalten in:
Ursprung
532c722636
Commit
5f7f11bf87
@ -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) {
|
||||
|
@ -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]);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
23
SCRIPT.md
23
SCRIPT.md
@ -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)
|
||||
@ -60,14 +62,15 @@ 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 |
|
||||
| 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): 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:
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren