Script System Lua #178
@ -232,13 +232,13 @@ SCRIPT_GUI_ITEM_NAME = §eScript Hilfe
|
||||
## CustomScript
|
||||
SCRIPT_HOTKEY_ITEM_NAME = §7Hotkey§8: §e{0}
|
||||
SCRIPT_EVENT_ITEM_NAME = §7Event§8: §e{0}
|
||||
SCRIPT_COMMAND_ITEM_NAME = §7Command§8: §e/{0}
|
||||
SCRIPT_COMMAND_ITEM_NAME = §7Befehl§8: §e/{0}
|
||||
|
||||
## Script Menu GUI
|
||||
SCRIPT_MENU_GUI_ITEM_LORE_1 = §7Klicke zum rausnehmen
|
||||
SCRIPT_MENU_GUI_ITEM_LORE_2 = §7Shift Klicke zum kopieren
|
||||
SCRIPT_MENU_GUI_ITEM_LORE_3 = §7Rechts Klicke zum editieren
|
||||
SCRIPT_MENU_GUI_ITEM_LORE_4 = §7Mittel Klicke zum anschauen
|
||||
SCRIPT_MENU_GUI_ITEM_LORE_2 = §7Shiftklick zum kopieren
|
||||
SCRIPT_MENU_GUI_ITEM_LORE_3 = §7Rechtsklick zum editieren
|
||||
SCRIPT_MENU_GUI_ITEM_LORE_4 = §7Mittelklick zum anschauen
|
||||
SCRIPT_MENU_GUI_NAME = §eScript-Menü
|
||||
SCRIPT_MENU_GUI_ITEM_ADD_NAME = §eHinzufügen
|
||||
SCRIPT_MENU_GUI_ITEM_ADD_LORE = §7Klicke mit einem Buch zum hinzufügen
|
||||
|
@ -90,7 +90,7 @@ public class ScriptRunner {
|
||||
public static boolean callEvent(Player player, SteamWarGlobalLuaPlugin.EventType event, LuaValue eventValue) {
|
||||
List<LuaFunction> luaFunctions = EVENT_MAP.getOrDefault(player, Collections.emptyMap()).getOrDefault(event, Collections.emptyList());
|
||||
if (luaFunctions == null) {
|
||||
if(event == SteamWarGlobalLuaPlugin.EventType.FF) {
|
||||
if(event == SteamWarGlobalLuaPlugin.EventType.DoubleSwap) {
|
||||
player.performCommand("gui");
|
||||
}
|
||||
|
||||
|
@ -72,7 +72,7 @@ public class EventListener implements Listener {
|
||||
@EventHandler
|
||||
public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) {
|
||||
if (LAST_FS.containsKey(event.getPlayer())) {
|
||||
event.setCancelled(ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.FF, LuaValue.NIL));
|
||||
event.setCancelled(ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.DoubleSwap, LuaValue.NIL));
|
||||
} else {
|
||||
LAST_FS.put(event.getPlayer(), System.currentTimeMillis());
|
||||
}
|
||||
|
@ -89,7 +89,7 @@ public class SteamWarGlobalLuaPlugin extends TwoArgFunction {
|
||||
}
|
||||
|
||||
public enum EventType {
|
||||
FF,
|
||||
DoubleSwap,
|
||||
PlaceBlock,
|
||||
BreakBlock,
|
||||
RightClick,
|
||||
|
@ -73,7 +73,7 @@ public class SteamWarLuaPlugin extends TwoArgFunction {
|
||||
return LuaValue.NIL;
|
||||
}
|
||||
});
|
||||
env.set("timeout", new TwoArgFunction() {
|
||||
env.set("delayed", new TwoArgFunction() {
|
||||
@Override
|
||||
public LuaValue call(LuaValue arg1, LuaValue arg2) {
|
||||
long time = arg1.checklong();
|
||||
|
@ -38,7 +38,7 @@ public class PlayerLib implements LuaLib {
|
||||
public LuaTable get(Player player) {
|
||||
LuaTable table = new LuaTable();
|
||||
table.set("name", getter(player::getName));
|
||||
table.set("message", new Print(player));
|
||||
table.set("chat", new Print(player));
|
||||
table.set("actionbar", new SendActionbar(player));
|
||||
|
||||
table.set("x", getterAndSetter(player.getLocation()::getX, player.getLocation()::setX));
|
||||
|
@ -1,100 +0,0 @@
|
||||
/*
|
||||
* This file is a part of the SteamWar software.
|
||||
*
|
||||
* Copyright (C) 2023 SteamWar.de-Serverteam
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package de.steamwar.sql;
|
||||
|
||||
import de.steamwar.sql.internal.Field;
|
||||
import de.steamwar.sql.internal.SelectStatement;
|
||||
import de.steamwar.sql.internal.Statement;
|
||||
import de.steamwar.sql.internal.Table;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public class Script {
|
||||
// TODO: 28.05.23 REMOVE THIS
|
||||
|
||||
private static final Table<Script> table = new Table<>(Script.class);
|
||||
|
||||
private static final SelectStatement<Script> select = table.select(Table.PRIMARY);
|
||||
private static final SelectStatement<Script> selectNameUser = table.select("nameUser");
|
||||
private static final SelectStatement<Script> list = new SelectStatement<>(table, "SELECT Id, User, Name FROM Script WHERE User = ?");
|
||||
|
||||
private static final Statement update = table.updateFields(new String[]{"name"}, Table.PRIMARY);
|
||||
private static final Statement insert = table.insertFields(true, "User", "Name");
|
||||
private static final Statement delete = table.delete(Table.PRIMARY);
|
||||
|
||||
private static final Statement getScript = new Statement("SELECT Code FROM Script WHERE id = ?");
|
||||
private static final Statement updateScript = new Statement("UPDATE Script SET Code = ? WHERE id = ?");
|
||||
|
||||
public static Script get(int id) {
|
||||
return select.select(id);
|
||||
}
|
||||
|
||||
public static Script get(SteamwarUser user, String name) {
|
||||
return selectNameUser.select(user, name);
|
||||
}
|
||||
|
||||
public static Script create(SteamwarUser user, String name, String code) {
|
||||
int id = insert.insertGetKey(user, name);
|
||||
Script script = get(id);
|
||||
script.setScript(code);
|
||||
return script;
|
||||
}
|
||||
|
||||
public static List<Script> list(SteamwarUser user) {
|
||||
return list.listSelect(user);
|
||||
}
|
||||
|
||||
@Field(keys = Table.PRIMARY, autoincrement = true)
|
||||
private final int id;
|
||||
@Field(keys = "nameUser")
|
||||
private final int user;
|
||||
@Field(keys = "nameUser")
|
||||
private String name;
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
update();
|
||||
}
|
||||
|
||||
public String getScript() {
|
||||
return getScript.select(rs -> {
|
||||
if(rs.next()) {
|
||||
return rs.getString("Code");
|
||||
}
|
||||
return null;
|
||||
}, id);
|
||||
}
|
||||
|
||||
public void setScript(String script) {
|
||||
updateScript.update(script, id);
|
||||
}
|
||||
|
||||
private void update() {
|
||||
update.update(name, id);
|
||||
}
|
||||
|
||||
public void delete() {
|
||||
delete.update(id);
|
||||
}
|
||||
}
|
145
SCRIPT.md
145
SCRIPT.md
@ -6,7 +6,6 @@
|
||||
* [Einleitung](#einleitung)
|
||||
* [Basis-Apis](#basis-apis)
|
||||
* [SteamWar.de-Api](#steamwarde-api)
|
||||
* [global](#global)
|
||||
* [player](#player)
|
||||
* [region](#region)
|
||||
* [tnt](#tnt)
|
||||
@ -15,7 +14,7 @@
|
||||
* [tps](#tps)
|
||||
* [SteamWar.de-Global-Api](#steamwarde-global-api)
|
||||
* [Hotkeys](#hotkeys)
|
||||
* [Event Type](#event-type)
|
||||
* [Eventtypen](#eventtypen)
|
||||
* [BlockEvent](#blockevent)
|
||||
* [InteractEvent](#interactevent)
|
||||
* [Position](#position)
|
||||
@ -23,7 +22,7 @@
|
||||
* [Hello, World!](#hello-world)
|
||||
* [Code](#code)
|
||||
* [Ausgabe](#ausgabe)
|
||||
* [BauGUI on FF](#baugui-on-ff)
|
||||
* [BauGUI on DoubleSwap](#baugui-on-doubleswap)
|
||||
* [Code](#code-1)
|
||||
* [SL Command](#sl-command)
|
||||
* [Code](#code-2)
|
||||
@ -41,7 +40,7 @@ Es werden folgende Standard-Apis zur Verfügung gestellt:
|
||||
- [`math`](https://www.lua.org/manual/5.4/manual.html#6.7)
|
||||
- [`string`](https://www.lua.org/manual/5.4/manual.html#6.4)
|
||||
- [`table`](https://www.lua.org/manual/5.4/manual.html#6.6)
|
||||
- `bit32`
|
||||
- [`bit32`](https://www.lua.org/manual/5.2/manual.html#6.7)
|
||||
|
||||
Chaoscaot markierte diese Unterhaltung als gelöst
|
||||
# SteamWar.de-Api
|
||||
APIs, die mit einem `_` beginnen sind noch nicht stabil und können sich jederzeit ändern.
|
||||
@ -54,54 +53,51 @@ In den Scripten gibt es dazu noch folgende globale Variablen:
|
||||
- [`server`](#server)
|
||||
- `_worldedit`
|
||||
|
||||
### global
|
||||
Die `global`-Api stellt Funktionen zur Verfügung, QOL sind.
|
||||
Es gibt folgende Funktionen:
|
||||
Ohne eine Kategorie sind folgende Funktionen verfügbar, die nicht allgemein sind:
|
||||
|
||||
| Name | Signature | Beschreibung |
|
||||
|-----------|----------------------------------|----------------------------------------------------------------------------------------------------|
|
||||
| `print` | print(String...) | @see message(String...) |
|
||||
| `input` | input(String, Function\<String>) | Fragt den User nach einer Eingabe mit der Nachricht und called die zugehörige Funktion nach dieser |
|
||||
| `timeout` | timeout(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, sind unter den Namen `x`, `y` und `z` abgespeichert |
|
||||
| `exec` | exec(String...) | Führt den angegebenen Befehl als Spieler aus |
|
||||
| Name | Signature | Beschreibung |
|
||||
|-----------|----------------------------------|-------------------------------------------------------------------------------------------------------------------|
|
||||
| `print` | print(String...) | @see message(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 |
|
||||
|
||||
### player
|
||||
Die `player`-Api stellt Funktionen zur Verfügung, die den Spieler betreffen.
|
||||
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 |
|
||||
| `message` | message(String...) | Sendet den Text in den Chat des Spielers |
|
||||
| `actionbar` | actionbar(String...) | Sendet den Text in die ActionBar des Spielers |
|
||||
| `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 den Yaw des Spielers |
|
||||
| `pitch` | pitch(Number), pitch(): Number | Setzt oder gibt den Pitch 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 |
|
||||
| `item` | item(): String | Gibt den Item Type der Main-Hand zurück |
|
||||
| `offHandItem` | offHandItem(): String | Gibt den Item Type der Off-Hand zurück |
|
||||
| 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 |
|
||||
| `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)](https://minecraft.fandom.com/wiki/Slot#Java_Edition) |
|
||||
| `item` | item(): String | Gibt den Itemtyp der Main-Hand zurück |
|
||||
| `offHandItem` | offHandItem(): String | Gibt den Itemtyp der Off-Hand zurück |
|
||||
|
||||
|
||||
### region
|
||||
Chaoscaot markierte diese Unterhaltung als gelöst
Lixfel
hat
Itemtyp Itemtyp
|
||||
Die `region`-Api stellt Funktion zur Verfügung, die die Region des Spielers betreffen.
|
||||
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 Namen der Region zurück |
|
||||
| `type` | type(): String | Gibt den Namen des Typen der Region zurück |
|
||||
| `fire` | fire(): Boolean | Gibt den Fire-Mode der Region zurück |
|
||||
| `freeze` | freeze(): Boolean | Gibt den Freeze-Mode der Region zurück |
|
||||
| `protect` | protect(): Boolean | Gibt den Protect-Mode der Region zurück |
|
||||
| `loader` | pvp(): String | Gibt den Status des Loaders des Spielers zurück, die werte sind: `OFF`, `SETUP`, `RUNNING`, `PAUSE`, `END` |
|
||||
| `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` |
|
||||
|
||||
|
||||
Es gibt folgende Variablen:
|
||||
Es gibt folgende weitere Module:
|
||||
|
||||
| Name | Beschreibung |
|
||||
|---------|-----------------|
|
||||
@ -109,7 +105,7 @@ Es gibt folgende Variablen:
|
||||
| `trace` | [trace](#trace) |
|
||||
|
||||
#### tnt
|
||||
Die `tnt`-Api stellt Funktionen zur Verfügung, die den TNT-Modus in der Region des Spielers betreffen.
|
||||
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 |
|
||||
@ -120,7 +116,7 @@ Es gibt folgende Funktionen:
|
||||
|
||||
|
||||
#### trace
|
||||
Die `trace`-Api stellt Funktionen zur Verfügung, die den Status des Tracers der Region betreffen.
|
||||
Das `trace`-Modul stellt Funktionen zur Verfügung, die den Status des Tracers der Region betreffen.
|
||||
Es gibt folgende Funktionen:
|
||||
|
||||
| Name | Signature | Beschreibung |
|
||||
@ -131,35 +127,35 @@ Es gibt folgende Funktionen:
|
||||
| `time` | time(): String | Gibt die Zeit des Tracers zurück |
|
||||
|
||||
## server
|
||||
Die `server`-Api stellt Funktionen zur Verfügung, die den Server betreffen.
|
||||
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 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 |
|
||||
| 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 |
|
||||
| `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`) |
|
||||
|
||||
Es gibt folgende Variablen:
|
||||
Es gibt folgende weitere Module:
|
||||
|
||||
| Name | Beschreibung |
|
||||
|-------|--------------|
|
||||
| `tps` | [tps](#tps) |
|
||||
|
||||
#### tps
|
||||
Die `tps`-Api stellt Funktionen zur Verfügung, die die TPS des Servers betreffen.
|
||||
Das `tps`-Modul stellt Funktionen zur Verfügung, die die TPS des Servers betreffen.
|
||||
Es gibt folgende Funktionen:
|
||||
Chaoscaot markierte diese Unterhaltung als gelöst
Lixfel
hat
Warum hier wieder Variablen? Und warum gibt es diese API im Server, wo es noch die TPS-Api gibt? Warum hier wieder Variablen? Und warum gibt es diese API im Server, wo es noch die TPS-Api gibt?
|
||||
|
||||
| Name | Signature | Beschreibung |
|
||||
|--------------|----------------------|-------------------------------------------------------------------|
|
||||
Chaoscaot markierte diese Unterhaltung als gelöst
Lixfel
hat
Betrifft auch vorige und spätere Vorkommnisse: Nicht Api, sondern API. Und wäre es in dem Kontext nicht eigentlich eher ein "Modul" oder "Package"? (K.a. was der typische Begriff im Lua-Umfeld dafür ist, aber ich bezweifle, dass dieser Api lautet). Betrifft auch vorige und spätere Vorkommnisse: Nicht Api, sondern API. Und wäre es in dem Kontext nicht eigentlich eher ein "Modul" oder "Package"? (K.a. was der typische Begriff im Lua-Umfeld dafür ist, aber ich bezweifle, dass dieser Api lautet).
|
||||
| `current` | current(): Number | Gibt die aktuelle TPS zurück |
|
||||
| `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 |
|
||||
Chaoscaot markierte diese Unterhaltung als gelöst
Lixfel
hat
Es gibt kein "aktuell". Welchem Wert entsprechen diese TPS? Es gibt kein "aktuell". Welchem Wert entsprechen diese TPS?
|
||||
| `tenMinute` | tenMinute(): Number | Gibt die durchschnittliche TPS über die letzte 10 Minuten zurück |
|
||||
| `limit` | limit(): Number | Gibt den TPS-Limit zurück |
|
||||
| `limit` | limit(): Number | Gibt das TPS-Limit zurück |
|
||||
|
||||
# SteamWar.de-Global-Api
|
||||
Mit `/script` kann man Script-Bücher global abspeichern. Diese haben dann zugrif auf die `global`-Api.
|
||||
@ -169,8 +165,8 @@ Es gibt folgende Funktionen:
|
||||
|
||||
| Name | Signature | Beschreibung |
|
||||
|-----------|-----------------------------------|-----------------------------------------------------------------------------|
|
||||
| `event` | event(EventType, Function(Any)) | Registriere einen Event Handler |
|
||||
| `command` | command(String, Function(Args)) | Registriere einen Command |
|
||||
| `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:
|
||||
@ -181,7 +177,7 @@ Es gibt folgende Variablen:
|
||||
|
||||
## Hotkeys
|
||||
|
||||
Hotkeys werden im folgenden Format angegeben: `MODIFIER+KEY`. 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:
|
||||
- `ctrl`
|
||||
- `shift`
|
||||
- `alt`
|
||||
@ -189,24 +185,23 @@ Hotkeys werden im folgenden Format angegeben: `MODIFIER+KEY`. Es gibt folgende M
|
||||
|
||||
Chaoscaot markierte diese Unterhaltung als gelöst
Lixfel
hat
Jetzt großgeschrieben oder kleingeschrieben? Unklar. Jetzt großgeschrieben oder kleingeschrieben? Unklar.
|
||||
Es können auch mehrere Modifier angegeben werden, z.B. `ctrl+shift+alt+c`. Die Reihenfolge der Modifier und des Keys ist egal.
|
||||
|
||||
## Event Type
|
||||
Einige Events sind auch cancelbar, dazu muss die Funktion `setCanceled()` aufgerufen werden.
|
||||
Es gibt folgende Event-Typen:
|
||||
## Eventtypen
|
||||
Einige Events sind auch abbrechbar, dazu muss die Funktion `setCanceled()` aufgerufen werden.
|
||||
|
||||
| Name | Wenn | Parameter | Cancelbar |
|
||||
|---------------------|-----------------------------------------------------|---------------------------------|-----------|
|
||||
| `FF` | Beim Doppelten Drücken der Swap-Hands taste | NIL | false |
|
||||
| `PlaceBlock` | Beim Platzieren von Blöcken | [BlockEvent](#blockevent) | true |
|
||||
| `BreakBlock` | Beim Zerstören von Blöcken | [BlockEvent](#blockevent) | true |
|
||||
| `RightClick` | Beim Rechts klicken | [InteractEvent](#interactevent) | true |
|
||||
| `LeftClick` | Beim Links Klicken | [InteractEvent](#interactevent) | true |
|
||||
| `TNTSpawn` | Wenn ein TNT in der aktuellen Region spawnt | NIL | false |
|
||||
| `TNTExplode` | Wenn ein TNT in der aktuellen Region explodiert | [Position](#position) | true |
|
||||
| `TNTExplodeInBuild` | Wenn ein TNT in der aktuellen Bau Region explodiert | [Position](#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 |
|
||||
| Name | Wenn | Parameter | Abbrechbar |
|
||||
|---------------------|-----------------------------------------------------|---------------------------------|------------|
|
||||
| `DoubleSwap` | Beim Doppelten Drücken der Swap-Hands taste | NIL | false |
|
||||
| `PlaceBlock` | Beim Platzieren von Blöcken | [BlockEvent](#blockevent) | true |
|
||||
| `BreakBlock` | Beim Zerstören von Blöcken | [BlockEvent](#blockevent) | true |
|
||||
| `RightClick` | Beim Rechtsklick | [InteractEvent](#interactevent) | true |
|
||||
| `LeftClick` | Beim Linksklick | [InteractEvent](#interactevent) | true |
|
||||
| `TNTSpawn` | Wenn ein TNT in der aktuellen Region spawnt | NIL | false |
|
||||
| `TNTExplode` | Wenn ein TNT in der aktuellen Region explodiert | [Position](#position) | true |
|
||||
| `TNTExplodeInBuild` | Wenn ein TNT in der aktuellen Bau Region explodiert | [Position](#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:
|
||||
@ -263,8 +258,8 @@ print("Hello, World!")
|
||||
Hello, World!
|
||||
```
|
||||
|
||||
## BauGUI on FF
|
||||
Das default Script für das Öffnen des BauGUIs
|
||||
## BauGUI on DoubleSwap
|
||||
Das Standardskript für das Öffnen des BauGUIs
|
||||
|
||||
#### Code
|
||||
```lua
|
||||
@ -288,7 +283,7 @@ command("sl", handler)
|
||||
```
|
||||
|
||||
## Paste Hotkey
|
||||
Ein Hotkey zum pasten des Clipboard-Inhalts.
|
||||
Ein Hotkey zum Pasten des Clipboard-Inhalts.
|
||||
|
||||
#### Code
|
||||
```lua
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren
Warum hier kein Link?