SteamWar/BauSystem2.0
Archiviert
12
0

Add WorldEditLib and Script Preview
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful

Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
Dieser Commit ist enthalten in:
Chaoscaot 2023-05-28 00:59:06 +02:00
Ursprung 900bbb0aec
Commit 43cecb54e3
6 geänderte Dateien mit 87 neuen und 2 gelöschten Zeilen

Datei anzeigen

@ -246,6 +246,7 @@ SCRIPT_COMMAND_ITEM_NAME = §7Command§8: §e/{0}
SCRIPT_MENU_GUI_ITEM_LORE_1 = §7Click to retrieve
SCRIPT_MENU_GUI_ITEM_LORE_2 = §7Shift-Click to copy
SCRIPT_MENU_GUI_ITEM_LORE_3 = §7Right-Click to edit
SCRIPT_MENU_GUI_ITEM_LORE_4 = §7Middle-Click to preview
SCRIPT_MENU_GUI_NAME = §eScript-Menu
SCRIPT_MENU_GUI_ITEM_ADD_NAME = §eInsert
SCRIPT_MENU_GUI_ITEM_ADD_LORE = §7Click with a book to insert

Datei anzeigen

@ -238,6 +238,7 @@ SCRIPT_COMMAND_ITEM_NAME = §7Command§8: §e/{0}
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_NAME = §eScript-Menü
SCRIPT_MENU_GUI_ITEM_ADD_NAME = §eHinzufügen
SCRIPT_MENU_GUI_ITEM_ADD_LORE = §7Klicke mit einem Buch zum hinzufügen

Datei anzeigen

@ -30,6 +30,7 @@ import de.steamwar.sql.SteamwarUser;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BookMeta;
import org.luaj.vm2.Globals;
@ -69,6 +70,7 @@ public class ScriptGUI implements Listener {
lore.add(BauSystem.MESSAGE.parse("SCRIPT_MENU_GUI_ITEM_LORE_1", player));
lore.add(BauSystem.MESSAGE.parse("SCRIPT_MENU_GUI_ITEM_LORE_2", player));
lore.add(BauSystem.MESSAGE.parse("SCRIPT_MENU_GUI_ITEM_LORE_3", player));
lore.add(BauSystem.MESSAGE.parse("SCRIPT_MENU_GUI_ITEM_LORE_4", player));
entries.add(new SWListInv.SWListEntry<>(new SWItem(Material.ENCHANTED_BOOK, script.getName(), new ArrayList<>(lore), false, clickType -> {}), script));
lore.clear();
@ -76,7 +78,10 @@ public class ScriptGUI implements Listener {
SWListInv<Script> inv = new SWListInv<>(player, BauSystem.MESSAGE.parse("SCRIPT_MENU_GUI_NAME", player), false, entries, (clickType, script) -> {
ItemStack itemStack = ScriptHelper.getScriptItem(script, clickType.isRightClick());
if(!clickType.isShiftClick()) {
if(clickType == ClickType.MIDDLE) {
player.openBook(itemStack);
} else if(!clickType.isShiftClick()) {
script.delete();
ScriptRunner.updateGlobalScript(player);
open(player, itemStack);

Datei anzeigen

@ -0,0 +1,71 @@
/*
* 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.bausystem.features.script.lua.libs;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.bukkit.BukkitPlayer;
import com.sk89q.worldedit.math.BlockVector3;
import de.steamwar.bausystem.region.Point;
import de.steamwar.bausystem.utils.FlatteningWrapper;
import de.steamwar.linkage.Linked;
import org.bukkit.entity.Player;
import org.luaj.vm2.LuaTable;
@Linked
public class WorldEditLib implements LuaLib {
@Override
public String name() {
return "_worldedit";
}
@Override
public LuaTable get(Player player) {
LuaTable table = new LuaTable();
table.set("selection", getterAndSetter(() -> {
LuaTable selection = new LuaTable();
selection.set("min", posFromVec(WorldEdit.getInstance().getSessionManager().get(new BukkitPlayer(player)).getSelectionWorld().getMinimumPoint()));
selection.set("max", posFromVec(WorldEdit.getInstance().getSessionManager().get(new BukkitPlayer(player)).getSelectionWorld().getMaximumPoint()));
return selection;
}, o -> {
LuaTable selection = o.checktable();
if(selection.length() != 2) {
throw new IllegalArgumentException("selection must have exactly 2 elements");
}
Point one = vecFromPos(selection.get(1).checktable());
Point two = vecFromPos(selection.get(2).checktable());
FlatteningWrapper.impl.setSelection(player, one, two);
}));
return table;
}
public static LuaTable posFromVec(BlockVector3 vec) {
LuaTable table = new LuaTable();
table.set("x", vec.getBlockX());
table.set("y", vec.getBlockY());
table.set("z", vec.getBlockZ());
return table;
}
public static Point vecFromPos(LuaTable table) {
return new Point(table.get("x").checkint(), table.get("y").checkint(), table.get("z").checkint());
}
}

Datei anzeigen

@ -31,6 +31,7 @@ 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);

Datei anzeigen

@ -33,7 +33,8 @@
## Einleitung
Das Script System auf SteamWar.de basiert auf [Lua](https://www.lua.org/docs.html). Der Code wird einfach in ein Minecraft Buch geschrieben und kann mit einem Links-Klick ausgeführt werden.
Das Script System auf SteamWar.de basiert auf [Lua](https://www.lua.org/docs.html).
Der Code wird einfach in ein Minecraft Buch geschrieben und kann mit einem Links-Klick ausgeführt werden.
# Basis-Apis
Es werden folgende Standard-Apis zur Verfügung gestellt:
@ -43,10 +44,15 @@ Es werden folgende Standard-Apis zur Verfügung gestellt:
- `bit32`
# SteamWar.de-Api
APIs, die mit einem `_` beginnen sind noch nicht stabil und können sich jederzeit ändern.
Sie sollten daher nicht verwendet werden, da sie sich noch in der Entwicklung befinden.
Diese können auch undokumentierte Funktionen enthalten, die nicht in der Dokumentation aufgeführt sind.
In den Scripten gibt es dazu noch folgende globale Variablen:
- [`player`](#player)
- [`region`](#region)
- [`server`](#server)
- `_worldedit`
### global
Die `global`-Api stellt Funktionen zur Verfügung, QOL sind.