SteamWar/BauSystem2.0
Archiviert
12
0

Script System Lua #178

Zusammengeführt
YoyoNow hat 16 Commits von lua nach master 2023-07-17 16:44:04 +02:00 zusammengeführt
8 geänderte Dateien mit 79 neuen und 184 gelöschten Zeilen
Nur Änderungen aus Commit 29851ca4ca werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -232,13 +232,13 @@ SCRIPT_GUI_ITEM_NAME = §eScript Hilfe
## CustomScript ## CustomScript
SCRIPT_HOTKEY_ITEM_NAME = §7Hotkey§8: §e{0} SCRIPT_HOTKEY_ITEM_NAME = §7Hotkey§8: §e{0}
SCRIPT_EVENT_ITEM_NAME = §7Event§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}
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Befehl

Befehl
## Script Menu GUI ## Script Menu GUI
SCRIPT_MENU_GUI_ITEM_LORE_1 = §7Klicke zum rausnehmen SCRIPT_MENU_GUI_ITEM_LORE_1 = §7Klicke zum rausnehmen
SCRIPT_MENU_GUI_ITEM_LORE_2 = §7Shift Klicke zum kopieren SCRIPT_MENU_GUI_ITEM_LORE_2 = §7Shiftklick zum kopieren
SCRIPT_MENU_GUI_ITEM_LORE_3 = §7Rechts Klicke zum editieren SCRIPT_MENU_GUI_ITEM_LORE_3 = §7Rechtsklick zum editieren
SCRIPT_MENU_GUI_ITEM_LORE_4 = §7Mittel Klicke zum anschauen SCRIPT_MENU_GUI_ITEM_LORE_4 = §7Mittelklick zum anschauen
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Uaah! Deutsch! Rechtsklick, Mittelklick, Shiftklick. Nach "zum" werden Verben großgeschrieben: Editieren, Anschauen, Kopieren, Rausnehmen. Rausnehmen => Entnehmen. Evtl. statt zum ein :. Also so in etwa: §7Linksklick§8: §8Entnahme ...

Uaah! Deutsch! Rechtsklick, Mittelklick, Shiftklick. Nach "zum" werden Verben großgeschrieben: Editieren, Anschauen, Kopieren, Rausnehmen. Rausnehmen => Entnehmen. Evtl. statt zum ein :. Also so in etwa: §7Linksklick§8: §8Entnahme ...
SCRIPT_MENU_GUI_NAME = §eScript-Menü SCRIPT_MENU_GUI_NAME = §eScript-Menü
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Ist noch die Überlegung, ob Skript oder Script.

Ist noch die Überlegung, ob Skript oder Script.
SCRIPT_MENU_GUI_ITEM_ADD_NAME = §eHinzufügen SCRIPT_MENU_GUI_ITEM_ADD_NAME = §eHinzufügen
SCRIPT_MENU_GUI_ITEM_ADD_LORE = §7Klicke mit einem Buch zum hinzufügen SCRIPT_MENU_GUI_ITEM_ADD_LORE = §7Klicke mit einem Buch zum hinzufügen

Datei anzeigen

@ -90,7 +90,7 @@ public class ScriptRunner {
public static boolean callEvent(Player player, SteamWarGlobalLuaPlugin.EventType event, LuaValue eventValue) { public static boolean callEvent(Player player, SteamWarGlobalLuaPlugin.EventType event, LuaValue eventValue) {
List<LuaFunction> luaFunctions = EVENT_MAP.getOrDefault(player, Collections.emptyMap()).getOrDefault(event, Collections.emptyList()); List<LuaFunction> luaFunctions = EVENT_MAP.getOrDefault(player, Collections.emptyMap()).getOrDefault(event, Collections.emptyList());
if (luaFunctions == null) { if (luaFunctions == null) {
if(event == SteamWarGlobalLuaPlugin.EventType.FF) { if(event == SteamWarGlobalLuaPlugin.EventType.DoubleSwap) {
player.performCommand("gui"); player.performCommand("gui");
} }

Datei anzeigen

@ -72,7 +72,7 @@ public class EventListener implements Listener {
@EventHandler @EventHandler
public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) { public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) {
if (LAST_FS.containsKey(event.getPlayer())) { 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 { } else {
LAST_FS.put(event.getPlayer(), System.currentTimeMillis()); LAST_FS.put(event.getPlayer(), System.currentTimeMillis());
} }

Datei anzeigen

@ -89,7 +89,7 @@ public class SteamWarGlobalLuaPlugin extends TwoArgFunction {
} }
public enum EventType { public enum EventType {
FF, DoubleSwap,
PlaceBlock, PlaceBlock,
BreakBlock, BreakBlock,
RightClick, RightClick,

Datei anzeigen

@ -73,7 +73,7 @@ public class SteamWarLuaPlugin extends TwoArgFunction {
return LuaValue.NIL; return LuaValue.NIL;
} }
}); });
env.set("timeout", new TwoArgFunction() { env.set("delayed", new TwoArgFunction() {
@Override @Override
public LuaValue call(LuaValue arg1, LuaValue arg2) { public LuaValue call(LuaValue arg1, LuaValue arg2) {
long time = arg1.checklong(); long time = arg1.checklong();

Datei anzeigen

@ -38,7 +38,7 @@ public class PlayerLib implements LuaLib {
public LuaTable get(Player player) { public LuaTable get(Player player) {
LuaTable table = new LuaTable(); LuaTable table = new LuaTable();
table.set("name", getter(player::getName)); 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("actionbar", new SendActionbar(player));
table.set("x", getterAndSetter(player.getLocation()::getX, player.getLocation()::setX)); table.set("x", getterAndSetter(player.getLocation()::getX, player.getLocation()::setX));

Datei anzeigen

@ -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
Datei anzeigen

@ -6,7 +6,6 @@
* [Einleitung](#einleitung) * [Einleitung](#einleitung)
* [Basis-Apis](#basis-apis) * [Basis-Apis](#basis-apis)
* [SteamWar.de-Api](#steamwarde-api) * [SteamWar.de-Api](#steamwarde-api)
* [global](#global)
* [player](#player) * [player](#player)
* [region](#region) * [region](#region)
* [tnt](#tnt) * [tnt](#tnt)
@ -15,7 +14,7 @@
* [tps](#tps) * [tps](#tps)
* [SteamWar.de-Global-Api](#steamwarde-global-api) * [SteamWar.de-Global-Api](#steamwarde-global-api)
* [Hotkeys](#hotkeys) * [Hotkeys](#hotkeys)
* [Event Type](#event-type) * [Eventtypen](#eventtypen)
* [BlockEvent](#blockevent) * [BlockEvent](#blockevent)
* [InteractEvent](#interactevent) * [InteractEvent](#interactevent)
* [Position](#position) * [Position](#position)
@ -23,7 +22,7 @@
* [Hello, World!](#hello-world) * [Hello, World!](#hello-world)
* [Code](#code) * [Code](#code)
* [Ausgabe](#ausgabe) * [Ausgabe](#ausgabe)
* [BauGUI on FF](#baugui-on-ff) * [BauGUI on DoubleSwap](#baugui-on-doubleswap)
* [Code](#code-1) * [Code](#code-1)
* [SL Command](#sl-command) * [SL Command](#sl-command)
* [Code](#code-2) * [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) - [`math`](https://www.lua.org/manual/5.4/manual.html#6.7)
- [`string`](https://www.lua.org/manual/5.4/manual.html#6.4) - [`string`](https://www.lua.org/manual/5.4/manual.html#6.4)
- [`table`](https://www.lua.org/manual/5.4/manual.html#6.6) - [`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
Review

Warum hier kein Link?

Warum hier kein Link?
# SteamWar.de-Api # SteamWar.de-Api
APIs, die mit einem `_` beginnen sind noch nicht stabil und können sich jederzeit ändern. 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) - [`server`](#server)
- `_worldedit` - `_worldedit`
### global Ohne eine Kategorie sind folgende Funktionen verfügbar, die nicht allgemein sind:
Die `global`-Api stellt Funktionen zur Verfügung, QOL sind.
Es gibt folgende Funktionen:
| Name | Signature | Beschreibung | | Name | Signature | Beschreibung |
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Grammatik.

Grammatik.
|-----------|----------------------------------|----------------------------------------------------------------------------------------------------| |-----------|----------------------------------|-------------------------------------------------------------------------------------------------------------------|
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Diese beiden Headerzeilen finde ich irgendwie nicht so ganz pralle von der Formulierung her (auch bei den folgenden Instanzen). Funktionen würde ich einfach ähnlich wie eine Überschrift handhaben, und die Beschreibungszeile würde ich kürzer Formulieren a'la: global stellt QOL Funktionen zur Verfügung.

Diese beiden Headerzeilen finde ich irgendwie nicht so ganz pralle von der Formulierung her (auch bei den folgenden Instanzen). Funktionen würde ich einfach ähnlich wie eine Überschrift handhaben, und die Beschreibungszeile würde ich kürzer Formulieren a'la: global stellt QOL Funktionen zur Verfügung.
| `print` | print(String...) | @see message(String...) | | `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 | | `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 | | `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, 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 |
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

wäre sleep() nicht ein angemessenerer typischer Name?

wäre sleep() nicht ein angemessenerer typischer Name?
Veraltet
Review

weil bei einem sleep erwarte ich persönlich nicht, dass man noch eine funktion reinreichen muss

weil bei einem sleep erwarte ich persönlich nicht, dass man noch eine funktion reinreichen muss
Veraltet
Review

Die Implementierung von Sleep ist mit LuaJ in unserem Falle nicht möglich.

Da ein Sleep eine Pausierung der Ausführung von dem Main-Thread veranlassen würde.

Die Implementierung von Sleep ist mit LuaJ in unserem Falle nicht möglich. Da ein Sleep eine Pausierung der Ausführung von dem Main-Thread veranlassen würde.
### player ### player
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Die Beschreibung ist grammatikalischer nonsens.

Die Beschreibung ist grammatikalischer nonsens.
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: Es gibt folgende Funktionen:
| Name | Signature | Beschreibung | | Name | Signature | Beschreibung |
|---------------|--------------------------------|-------------------------------------------------------------| |---------------|--------------------------------|---------------------------------------------------------------------------------------------------------------------------|
| `name` | name(): String | Gibt den `displayName` des Spielers zurück | | `name` | name(): String | Gibt den `displayName` des Spielers zurück |
| `message` | message(String...) | Sendet den Text in den Chat des Spielers | | `chat` | chat(String...) | Sendet den Text in den Chat des Spielers |
| `actionbar` | actionbar(String...) | Sendet den Text in die ActionBar 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 | | `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 | | `y` | y(Number), y(): Number | Setzt oder gibt die Y-Koordinate des Spielers |
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

chat() statt message()? Macht es etwas klarer, was die Methode macht.

chat() statt message()? Macht es etwas klarer, was die Methode macht.
Veraltet
Review

als alias?

als alias?
Veraltet
Review

Als alias auf keinen Fall. Wir brauchen in einer brandneuen API keine Varianten anzubieten...

Als alias auf keinen Fall. Wir brauchen in einer brandneuen API keine Varianten anzubieten...
| `z` | z(Number), z(): Number | Setzt oder gibt die Z-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 | | `yaw` | yaw(Number), yaw(): Number | Setzt oder gibt die Gierung des Spielers |
| `pitch` | pitch(Number), pitch(): Number | Setzt oder gibt den Pitch des Spielers | | `pitch` | pitch(Number), pitch(): Number | Setzt oder gibt die Steigung des Spielers |
| `sneaking` | sneaking(): Boolean | Wahr, wenn der Spieler am Sneaken ist | | `sneaking` | sneaking(): Boolean | Wahr, wenn der Spieler am Sneaken ist |
| `sprinting` | sprinting(): Boolean | Wahr, wenn der Spieler am Sprinten 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 | | `slot` | slot(Number), slot(): Number | Setzt oder gibt den Slot des gehaltenden Items des Spielers [(Wiki)](https://minecraft.fandom.com/wiki/Slot#Java_Edition) |
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Yaw und Pitch in der Beschreibung einmal übersetzen.

Yaw und Pitch in der Beschreibung einmal übersetzen.
| `item` | item(): String | Gibt den Item Type der Main-Hand zurück | | `item` | item(): String | Gibt den Itemtyp der Main-Hand zurück |
Lixfel markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Kann man auch übersetzen.

Kann man auch übersetzen.
Veraltet
Review

tut aber so gut wie niemand, oder würdest du es geduckt nennen?

tut aber so gut wie niemand, oder würdest du es geduckt nennen?
Veraltet
Review

schleichen

schleichen
| `offHandItem` | offHandItem(): String | Gibt den Item Type der Off-Hand zurück | | `offHandItem` | offHandItem(): String | Gibt den Itemtyp der Off-Hand zurück |
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Hier am besten einmal die Slotnummerntabelle aus dem Minecraft-Wiki verlinken.

Hier am besten einmal die Slotnummerntabelle aus dem Minecraft-Wiki verlinken.
### region ### region
Chaoscaot markierte diese Unterhaltung als gelöst
Review

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: Es gibt folgende Funktionen:
| Name | Signature | Beschreibung | | Name | Signature | Beschreibung |
|-----------|--------------------|------------------------------------------------------------------------------------------------------------| |-----------|--------------------|------------------------------------------------------------------------------------------------------------|
| `name` | name(): String | Gibt den Namen der Region zurück | | `name` | name(): String | Gibt den Regionsnamen |
| `type` | type(): String | Gibt den Namen des Typen der Region zurück | | `type` | type(): String | Gibt den Regionstyp |
| `fire` | fire(): Boolean | Gibt den Fire-Mode der Region zurück | | `fire` | fire(): Boolean | Gibt den Fire-Modus der Region zurück |
| `freeze` | freeze(): Boolean | Gibt den Freeze-Mode der Region zurück | | `freeze` | freeze(): Boolean | Gibt den Freeze-Modus der Region zurück |
| `protect` | protect(): Boolean | Gibt den Protect-Mode der Region zurück | | `protect` | protect(): Boolean | Gibt den Protect-Modus der Region zurück |
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

den Namen des Typen der Region. Regionsnamen. Regionstyp.

den Namen des Typen der Region. Regionsnamen. Regionstyp.
| `loader` | pvp(): String | Gibt den Status des Loaders des Spielers zurück, die werte sind: `OFF`, `SETUP`, `RUNNING`, `PAUSE`, `END` | | `loader` | loader(): String | Gibt den Status des Loaders des Spielers zurück, die Werte sind: `OFF`, `SETUP`, `RUNNING`, `PAUSE`, `END` |
Es gibt folgende weitere Module:
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Modus.

Modus.
Es gibt folgende Variablen:
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Werte. Und warum zum Henker heißt die Methode pvp?!?

Werte. Und warum zum Henker heißt die Methode pvp?!?
| Name | Beschreibung | | Name | Beschreibung |
|---------|-----------------| |---------|-----------------|
@ -109,7 +105,7 @@ Es gibt folgende Variablen:
| `trace` | [trace](#trace) | | `trace` | [trace](#trace) |
#### tnt #### 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: Es gibt folgende Funktionen:
| Name | Signature | Beschreibung | | Name | Signature | Beschreibung |
@ -120,7 +116,7 @@ Es gibt folgende Funktionen:
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

aktuellen. Werte.

aktuellen. Werte.
#### trace #### 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.
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Warum gibt es diese beiden separaten Methoden noch, wenn diese Informationen alle auch in der mode()-Methode enthalten sind?

Warum gibt es diese beiden separaten Methoden noch, wenn diese Informationen alle auch in der mode()-Methode enthalten sind?
Veraltet
Review

das sind shortcuts

das sind shortcuts
Veraltet
Review

wie viel kürzer ist es denn im Lua-Code mit den Shortcuts?

wie viel kürzer ist es denn im Lua-Code mit den Shortcuts?
Es gibt folgende Funktionen: Es gibt folgende Funktionen:
| Name | Signature | Beschreibung | | Name | Signature | Beschreibung |
@ -131,35 +127,35 @@ Es gibt folgende Funktionen:
| `time` | time(): String | Gibt die Zeit des Tracers zurück | | `time` | time(): String | Gibt die Zeit des Tracers zurück |
## server ## server
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Du hast sonst immer keinen Punkt am Satzende.

Du hast sonst immer keinen Punkt am Satzende.
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: Es gibt folgende Funktionen:
| Name | Signature | Beschreibung | | Name | Signature | Beschreibung |
|--------------|-------------------------|----------------------------------------------------| |--------------|-------------------------|---------------------------------------------------------------------|
| `time` | time(): String | Gibt die aktuelle Zeit im format `HH:mm:ss` zurück | | `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 | | `ticks` | ticks(): Number | Gibt die Ticks seit start des Serverstarts zurück |
| `getBlockAt` | getBlockAt(Pos): String | Gibt das Material an der Position 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 | | `setBlockAt` | setBlockAt(Pos, String) | Setzt das Material an der angegebenen Stelle (z.B. Stein = `STONE`) |
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Format

Format
Es gibt folgende Variablen: Es gibt folgende weitere Module:
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Serverstart

Serverstart
| Name | Beschreibung | | Name | Beschreibung |
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Es sollte evtl. auch einmal aufgeführt sein, wie Itemtypen und Materialien formatiert sein müssen bzw. welche Werte dort erwartet werden (können). Ist das "1", "stone" oder "STONE"?

Es sollte evtl. auch einmal aufgeführt sein, wie Itemtypen und Materialien formatiert sein müssen bzw. welche Werte dort erwartet werden (können). Ist das "1", "stone" oder "STONE"?
|-------|--------------| |-------|--------------|
| `tps` | [tps](#tps) | | `tps` | [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: Es gibt folgende Funktionen:
Chaoscaot markierte diese Unterhaltung als gelöst
Review

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 | | Name | Signature | Beschreibung |
|--------------|----------------------|-------------------------------------------------------------------| |--------------|----------------------|-------------------------------------------------------------------|
Chaoscaot markierte diese Unterhaltung als gelöst
Review

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 | | `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 | | `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 | | `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 | | `fiveMinute` | fiveMinute(): Number | Gibt die durchschnittliche TPS über die letzte 5 Minuten zurück |
Chaoscaot markierte diese Unterhaltung als gelöst
Review

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 | | `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 # SteamWar.de-Global-Api
Mit `/script` kann man Script-Bücher global abspeichern. Diese haben dann zugrif auf die `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 | | Name | Signature | Beschreibung |
|-----------|-----------------------------------|-----------------------------------------------------------------------------| |-----------|-----------------------------------|-----------------------------------------------------------------------------|
| `event` | event(EventType, Function(Any)) | Registriere einen Event Handler | | `event` | event(EventType, Function(Any)) | Registriere einen Event Listener |
| `command` | command(String, Function(Args)) | Registriere einen Command | | `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 | | `hotkey` | hotkey(String, Function(Boolean)) | Registriere einen Hotkey, the function gets a boolean if the key is pressed |
Es gibt folgende Variablen: Es gibt folgende Variablen:
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Eher Listener statt Handler? (Bukkitkontext, es sei denn, Handler ist ein Lua-Typischer Begriff)

Eher Listener statt Handler? (Bukkitkontext, es sei denn, Handler ist ein Lua-Typischer Begriff)
@ -181,7 +177,7 @@ Es gibt folgende Variablen:
## Hotkeys ## 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` - `ctrl`
- `shift` - `shift`
- `alt` - `alt`
@ -189,24 +185,23 @@ Hotkeys werden im folgenden Format angegeben: `MODIFIER+KEY`. Es gibt folgende M
Chaoscaot markierte diese Unterhaltung als gelöst
Review

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. 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 ## Eventtypen
Einige Events sind auch cancelbar, dazu muss die Funktion `setCanceled()` aufgerufen werden. Einige Events sind auch abbrechbar, dazu muss die Funktion `setCanceled()` aufgerufen werden.
Es gibt folgende Event-Typen:
| Name | Wenn | Parameter | Cancelbar | | Name | Wenn | Parameter | Abbrechbar |
|---------------------|-----------------------------------------------------|---------------------------------|-----------| |---------------------|-----------------------------------------------------|---------------------------------|------------|
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Eventtypen

Eventtypen
| `FF` | Beim Doppelten Drücken der Swap-Hands taste | NIL | false | | `DoubleSwap` | Beim Doppelten Drücken der Swap-Hands taste | NIL | false |
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Abbrechbar. Diesen Satz am besten unter die Tabelle.

Abbrechbar. Diesen Satz am besten unter die Tabelle.
| `PlaceBlock` | Beim Platzieren von Blöcken | [BlockEvent](#blockevent) | true | | `PlaceBlock` | Beim Platzieren von Blöcken | [BlockEvent](#blockevent) | true |
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Dopplung mit Überschrift.

Dopplung mit Überschrift.
| `BreakBlock` | Beim Zerstören von Blöcken | [BlockEvent](#blockevent) | true | | `BreakBlock` | Beim Zerstören von Blöcken | [BlockEvent](#blockevent) | true |
| `RightClick` | Beim Rechts klicken | [InteractEvent](#interactevent) | true | | `RightClick` | Beim Rechtsklick | [InteractEvent](#interactevent) | true |
| `LeftClick` | Beim Links Klicken | [InteractEvent](#interactevent) | true | | `LeftClick` | Beim Linksklick | [InteractEvent](#interactevent) | true |
| `TNTSpawn` | Wenn ein TNT in der aktuellen Region spawnt | NIL | false | | `TNTSpawn` | Wenn ein TNT in der aktuellen Region spawnt | NIL | false |
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Lieber DoubleSwap statt FF nennen.

Lieber DoubleSwap statt FF nennen.
Veraltet
Review

Würde ich nicht machen, weil wir es so schon eingeführt hatten vorher.

Würde ich nicht machen, weil wir es so schon eingeführt hatten vorher.
Veraltet
Review

Das macht es dennoch nicht klarer verständlich für neue, und wenn man das sowieso einmal komplett neu macht, sollte man es richtig machen.

Das macht es dennoch nicht klarer verständlich für neue, und wenn man das sowieso einmal komplett neu macht, sollte man es richtig machen.
| `TNTExplode` | Wenn ein TNT in der aktuellen Region explodiert | [Position](#position) | true | | `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 | | `TNTExplodeInBuild` | Wenn ein TNT in der aktuellen Bau Region explodiert | [Position](#position) | true |
| `SelfJoin` | Wenn man selbst den Server betritt | NIL | false | | `SelfJoin` | Wenn man selbst den Server betritt | NIL | false |
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Rechtsklick

Rechtsklick
| `SelfLeave` | Wenn man den Server verlässt | NIL | false | | `SelfLeave` | Wenn man den Server verlässt | NIL | false |
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Linksklick

Linksklick
| `DropItem` | Wenn man ein item Droppt | (type: Material) | true | | `DropItem` | Wenn man ein Item droppt | (type: Material) | true |
| `EntityDeath` | Wenn ein Entity Stirbt | (type: Entity Type) | false | | `EntityDeath` | Wenn ein Entity stirbt | (type: Entity Type) | false |
### BlockEvent ### BlockEvent
Das übergebene Objekt an den Handler hat folgende Variablen: Das übergebene Objekt an den Handler hat folgende Variablen:
@ -263,8 +258,8 @@ print("Hello, World!")
Hello, World! Hello, World!
``` ```
## BauGUI on FF ## BauGUI on DoubleSwap
Das default Script für das Öffnen des BauGUIs Das Standardskript für das Öffnen des BauGUIs
#### Code #### Code
```lua ```lua
@ -288,7 +283,7 @@ command("sl", handler)
``` ```
## Paste Hotkey ## Paste Hotkey
Ein Hotkey zum pasten des Clipboard-Inhalts. Ein Hotkey zum Pasten des Clipboard-Inhalts.
#### Code #### Code
```lua ```lua