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.entity.Player;
|
||||||
import org.bukkit.event.Cancellable;
|
import org.bukkit.event.Cancellable;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.luaj.vm2.Globals;
|
import org.luaj.vm2.*;
|
||||||
import org.luaj.vm2.LuaError;
|
|
||||||
import org.luaj.vm2.LuaFunction;
|
|
||||||
import org.luaj.vm2.LuaValue;
|
|
||||||
import org.luaj.vm2.lib.OneArgFunction;
|
import org.luaj.vm2.lib.OneArgFunction;
|
||||||
|
|
||||||
import java.util.*;
|
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);
|
CommandRegister commandRegister = COMMAND_MAP.getOrDefault(player, Collections.emptyMap()).get(command);
|
||||||
if (commandRegister == null) {
|
if (commandRegister == null) {
|
||||||
return false;
|
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 {
|
try {
|
||||||
commandRegister.getFunction().call(args);
|
commandRegister.getFunction().call(args);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -46,13 +46,8 @@ public class CommandListener implements Listener {
|
|||||||
return;
|
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]);
|
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]);
|
calledCommands.getOrDefault(event.getPlayer(), new HashSet<>()).remove(split[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,6 +141,20 @@ public class SteamWarLuaPlugin extends TwoArgFunction {
|
|||||||
return arg.len();
|
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("collectgarbage", NIL);
|
||||||
env.set("dofile", NIL);
|
env.set("dofile", NIL);
|
||||||
|
23
SCRIPT.md
23
SCRIPT.md
@ -7,6 +7,7 @@
|
|||||||
* [Basis-Apis](#basis-apis)
|
* [Basis-Apis](#basis-apis)
|
||||||
* [SteamWar.de-Api](#steamwarde-api)
|
* [SteamWar.de-Api](#steamwarde-api)
|
||||||
* [player](#player)
|
* [player](#player)
|
||||||
|
* [random](#random)
|
||||||
* [region](#region)
|
* [region](#region)
|
||||||
* [tnt](#tnt)
|
* [tnt](#tnt)
|
||||||
* [trace](#trace)
|
* [trace](#trace)
|
||||||
@ -14,6 +15,7 @@
|
|||||||
* [tps](#tps)
|
* [tps](#tps)
|
||||||
* [storage](#storage)
|
* [storage](#storage)
|
||||||
* [SteamWar.de-Global-Api](#steamwarde-global-api)
|
* [SteamWar.de-Global-Api](#steamwarde-global-api)
|
||||||
|
* [Commands](#commands)
|
||||||
* [Hotkeys](#hotkeys)
|
* [Hotkeys](#hotkeys)
|
||||||
* [Eventtypen](#eventtypen)
|
* [Eventtypen](#eventtypen)
|
||||||
* [BlockEvent](#blockevent)
|
* [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:
|
Ohne eine Kategorie sind folgende Funktionen verfügbar, die nicht allgemein sind:
|
||||||
|
|
||||||
| Name | Signature | Beschreibung |
|
| Name | Signature | Beschreibung |
|
||||||
|-----------|----------------------------------|-------------------------------------------------------------------------------------------------------------------|
|
|-----------|-----------------------------------|-------------------------------------------------------------------------------------------------------------------|
|
||||||
| `print` | print(String...) | @see chat(String...) |
|
| `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 |
|
| `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 |
|
| `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 |
|
| `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 |
|
| `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
|
### player
|
||||||
Das `player`-Modul stellt Funktionen zur Verfügung, die den Spieler betreffen.
|
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) |
|
| `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
|
||||||
|
|
||||||
Hotkeys werden im folgenden Format angegeben: `MODIFIER+KEY`. Bei den Hotkey erstellung ist die Großschreibung egal. Es gibt folgende Modifier:
|
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