From 16a6d10472fac763b225fedbb9eaa7db87897953 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Fri, 19 May 2023 19:29:38 +0200 Subject: [PATCH 01/15] Script System Lua Todo: * /script and global script storage * Code Cleanup --- .../linkage/types/LuaLib_GENERIC.java | 21 ++ .../linkage/types/Operator_GENERIC.java | 40 -- .../linkage/types/SpecialCommand_GENERIC.java | 40 -- BauSystem_Main/build.gradle | 2 + .../features/region/TNTListener.java | 19 +- .../features/script/CustomScriptManager.java | 342 ------------------ .../features/script/ScriptCommand.java | 153 -------- .../features/script/ScriptExecutor.java | 304 ---------------- .../features/script/ScriptListener.java | 30 +- .../features/script/ScriptRunner.java | 75 ++++ .../features/script/ScriptSyntaxSender.java | 105 ------ .../features/script/SpecialCommand.java | 86 ----- .../features/script/command/Call.java | 49 --- .../features/script/command/Exit.java | 41 --- .../bausystem/features/script/command/If.java | 68 ---- .../features/script/command/Jump.java | 49 --- .../features/script/command/Return.java | 43 --- .../features/script/command/Sleep.java | 58 --- .../script/command/arithmetic/other/Ceil.java | 107 ------ .../command/arithmetic/other/Floor.java | 107 ------ .../command/arithmetic/other/Round.java | 107 ------ .../features/script/command/io/Echo.java | 62 ---- .../script/command/io/Echoactionbar.java | 62 ---- .../features/script/command/io/Input.java | 79 ---- .../script/command/string/Insert.java | 98 ----- .../script/command/string/Remove.java | 89 ----- .../script/command/string/Replace.java | 98 ----- .../script/command/string/Substring.java | 99 ----- .../script/command/variable/Const.java | 87 ----- .../script/command/variable/Convert.java | 74 ---- .../script/command/variable/Global.java | 67 ---- .../script/command/variable/Unglobal.java | 49 --- .../script/command/variable/Unvar.java | 49 --- .../features/script/command/variable/Var.java | 67 ---- .../script/command/world/GetMaterial.java | 89 ----- .../script/command/world/SetMaterial.java | 92 ----- .../features/script/custom/MenuScript.java | 29 -- .../features/script/custom/Script.java | 23 -- .../custom/command/CommandListener.java | 45 --- .../script/custom/command/CustomCommand.java | 87 ----- .../custom/command/InventoryCommand.java | 51 --- .../script/custom/command/MenuCommand.java | 99 ----- .../script/custom/event/CustomEvent.java | 34 -- .../script/custom/event/EventType.java | 133 ------- .../script/custom/event/InventoryEvent.java | 47 --- .../script/custom/event/MenuEvent.java | 76 ---- .../features/script/custom/hotkey/Hotkey.java | 29 -- .../script/custom/hotkey/HotkeyListener.java | 57 --- .../script/custom/hotkey/Hotkeys.java | 135 ------- .../script/custom/hotkey/InventoryHotkey.java | 51 --- .../script/custom/hotkey/MenuHotkey.java | 80 ---- .../script/event/CommandListener.java | 22 ++ .../{custom => }/event/EventListener.java | 85 +++-- .../script/expression/Expression.java | 242 ------------- .../features/script/expression/Operator.java | 37 -- .../expression/UnknownOperatorException.java | 27 -- .../expression/VarNotFoundException.java | 27 -- .../operator/comparison/EqualOperator.java | 61 ---- .../operator/comparison/GreaterOperator.java | 50 --- .../comparison/GreaterOrEqualOperator.java | 50 --- .../operator/comparison/LessOperator.java | 50 --- .../comparison/LessOrEqualOperator.java | 50 --- .../operator/comparison/NotEqualOperator.java | 61 ---- .../operator/logic/AndOperator.java | 47 --- .../operator/logic/BitwiseAndOperator.java | 55 --- .../operator/logic/BitwiseOrOperator.java | 55 --- .../operator/logic/BitwiseXorOperator.java | 55 --- .../expression/operator/logic/OrOperator.java | 47 --- .../operator/math/BitwiseLeftOperator.java | 46 --- .../math/BitwiseLogicRightOperator.java | 46 --- .../operator/math/BitwiseRightOperator.java | 46 --- .../operator/math/DivideOperator.java | 49 --- .../operator/math/MinusOperator.java | 50 --- .../operator/math/ModuloOperator.java | 46 --- .../operator/math/MultiplyOperator.java | 57 --- .../operator/math/PlusOperator.java | 53 --- .../operator/math/PowerOperator.java | 46 --- .../script/items/ScriptMenuBauGuiItem.java | 55 --- .../features/script/lua/CommandRegister.java | 15 + .../script/lua/SteamWarGlobalLuaPlugin.java | 74 ++++ .../script/lua/SteamWarLuaPlugin.java | 144 ++++++++ .../features/script/lua/SteamWarPlatform.java | 40 ++ .../features/script/lua/libs/LuaLib.java | 88 +++++ .../features/script/lua/libs/PlayerLib.java | 66 ++++ .../features/script/lua/libs/RegionLib.java | 58 +++ .../features/script/lua/libs/ServerLib.java | 65 ++++ .../features/script/variables/Constants.java | 315 ---------------- .../features/script/variables/Context.java | 42 --- .../features/script/variables/Value.java | 188 ---------- SCRIPT.md | 183 ++++++++++ 90 files changed, 919 insertions(+), 5857 deletions(-) create mode 100644 BauSystem_Linkage/src/de/steamwar/linkage/types/LuaLib_GENERIC.java delete mode 100644 BauSystem_Linkage/src/de/steamwar/linkage/types/Operator_GENERIC.java delete mode 100644 BauSystem_Linkage/src/de/steamwar/linkage/types/SpecialCommand_GENERIC.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/CustomScriptManager.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptExecutor.java create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptRunner.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptSyntaxSender.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/SpecialCommand.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/Call.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/Exit.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/If.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/Jump.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/Return.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/Sleep.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/arithmetic/other/Ceil.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/arithmetic/other/Floor.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/arithmetic/other/Round.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/io/Echo.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/io/Echoactionbar.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/io/Input.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/string/Insert.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/string/Remove.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/string/Replace.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/string/Substring.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Const.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Convert.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Global.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Unglobal.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Unvar.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Var.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/world/GetMaterial.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/command/world/SetMaterial.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/MenuScript.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/Script.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/command/CommandListener.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/command/CustomCommand.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/command/InventoryCommand.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/command/MenuCommand.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/event/CustomEvent.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/event/EventType.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/event/InventoryEvent.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/event/MenuEvent.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/hotkey/Hotkey.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/hotkey/HotkeyListener.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/hotkey/Hotkeys.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/hotkey/InventoryHotkey.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/hotkey/MenuHotkey.java create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/event/CommandListener.java rename BauSystem_Main/src/de/steamwar/bausystem/features/script/{custom => }/event/EventListener.java (52%) delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/Expression.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/Operator.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/UnknownOperatorException.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/VarNotFoundException.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/EqualOperator.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/GreaterOperator.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/GreaterOrEqualOperator.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/LessOperator.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/LessOrEqualOperator.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/NotEqualOperator.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/logic/AndOperator.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/logic/BitwiseAndOperator.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/logic/BitwiseOrOperator.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/logic/BitwiseXorOperator.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/logic/OrOperator.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/BitwiseLeftOperator.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/BitwiseLogicRightOperator.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/BitwiseRightOperator.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/DivideOperator.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/MinusOperator.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/ModuloOperator.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/MultiplyOperator.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/PlusOperator.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/PowerOperator.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/items/ScriptMenuBauGuiItem.java create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/CommandRegister.java create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarGlobalLuaPlugin.java create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarLuaPlugin.java create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarPlatform.java create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/LuaLib.java create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/PlayerLib.java create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/RegionLib.java create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/ServerLib.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/variables/Constants.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/variables/Context.java delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/variables/Value.java create mode 100644 SCRIPT.md diff --git a/BauSystem_Linkage/src/de/steamwar/linkage/types/LuaLib_GENERIC.java b/BauSystem_Linkage/src/de/steamwar/linkage/types/LuaLib_GENERIC.java new file mode 100644 index 00000000..79c02770 --- /dev/null +++ b/BauSystem_Linkage/src/de/steamwar/linkage/types/LuaLib_GENERIC.java @@ -0,0 +1,21 @@ +package de.steamwar.linkage.types; + +import de.steamwar.linkage.LinkageType; +import de.steamwar.linkage.plan.BuildPlan; +import de.steamwar.linkage.plan.MethodBuilder; + +import javax.lang.model.element.TypeElement; + +public class LuaLib_GENERIC implements LinkageType { + + @Override + public String method() { + return "link"; + } + + @Override + public void generateCode(BuildPlan buildPlan, MethodBuilder methodBuilder, String s, TypeElement typeElement) { + buildPlan.addImport("de.steamwar.bausystem.features.script.lua.SteamWarLuaPlugin"); + methodBuilder.addLine("SteamWarLuaPlugin.add(" + s + ");"); + } +} diff --git a/BauSystem_Linkage/src/de/steamwar/linkage/types/Operator_GENERIC.java b/BauSystem_Linkage/src/de/steamwar/linkage/types/Operator_GENERIC.java deleted file mode 100644 index 8a1916a8..00000000 --- a/BauSystem_Linkage/src/de/steamwar/linkage/types/Operator_GENERIC.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.linkage.types; - -import de.steamwar.linkage.LinkageType; -import de.steamwar.linkage.plan.BuildPlan; -import de.steamwar.linkage.plan.MethodBuilder; - -import javax.lang.model.element.TypeElement; - -public class Operator_GENERIC implements LinkageType { - - @Override - public String method() { - return "linkScriptCommands"; - } - - @Override - public void generateCode(BuildPlan buildPlan, MethodBuilder methodBuilder, String s, TypeElement typeElement) { - buildPlan.addImport("de.steamwar.bausystem.features.script.expression.Expression"); - methodBuilder.addLine("Expression.registerOperator(" + s + ");"); - } -} diff --git a/BauSystem_Linkage/src/de/steamwar/linkage/types/SpecialCommand_GENERIC.java b/BauSystem_Linkage/src/de/steamwar/linkage/types/SpecialCommand_GENERIC.java deleted file mode 100644 index 97c63276..00000000 --- a/BauSystem_Linkage/src/de/steamwar/linkage/types/SpecialCommand_GENERIC.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.linkage.types; - -import de.steamwar.linkage.LinkageType; -import de.steamwar.linkage.plan.BuildPlan; -import de.steamwar.linkage.plan.MethodBuilder; - -import javax.lang.model.element.TypeElement; - -public class SpecialCommand_GENERIC implements LinkageType { - - @Override - public String method() { - return "linkScriptCommands"; - } - - @Override - public void generateCode(BuildPlan buildPlan, MethodBuilder methodBuilder, String s, TypeElement typeElement) { - buildPlan.addImport("de.steamwar.bausystem.features.script.ScriptExecutor"); - methodBuilder.addLine("ScriptExecutor.SPECIAL_COMMANDS.add(" + s + ");"); - } -} diff --git a/BauSystem_Main/build.gradle b/BauSystem_Main/build.gradle index 1052e30a..2e9a8d6c 100644 --- a/BauSystem_Main/build.gradle +++ b/BauSystem_Main/build.gradle @@ -64,4 +64,6 @@ dependencies { annotationProcessor swdep('SpigotCore') compileOnly swdep('FastAsyncWorldEdit-1.18') + + implementation 'org.luaj:luaj-jse:3.0.1' } \ No newline at end of file diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/region/TNTListener.java b/BauSystem_Main/src/de/steamwar/bausystem/features/region/TNTListener.java index 08309eb6..d65a8750 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/region/TNTListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/region/TNTListener.java @@ -20,8 +20,6 @@ package de.steamwar.bausystem.features.region; import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.CustomScriptManager; -import de.steamwar.bausystem.features.script.custom.event.EventType; import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.RegionUtils; import de.steamwar.bausystem.region.flags.Flag; @@ -48,10 +46,7 @@ import java.util.concurrent.atomic.AtomicBoolean; @Linked public class TNTListener implements Listener, ScoreboardElement { - @LinkedInstance - public CustomScriptManager customScriptManager; - - private void explode(List blockList, Location location, EventType eventType, Event event) { + private void explode(List blockList) { AtomicBoolean inBuild = new AtomicBoolean(); blockList.removeIf(block -> { Region region = Region.getRegion(block.getLocation()); @@ -71,24 +66,16 @@ public class TNTListener implements Listener, ScoreboardElement { } return value == TNTMode.DENY; }); - if (inBuild.get()) { - Region region = Region.getRegion(location); - for (Player player : Bukkit.getOnlinePlayers()) { - if (region.inRegion(player.getLocation(), RegionType.NORMAL, RegionExtensionType.NORMAL)) { - customScriptManager.callEvent(eventType, player, event); - } - } - } } @EventHandler public void onBlockExplode(BlockExplodeEvent event) { - explode(event.blockList(), event.getBlock().getLocation(), null, null); + explode(event.blockList()); } @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onExplode(EntityExplodeEvent event) { - explode(event.blockList(), event.getLocation(), EventType.TNTExplodeInBuild, event); + explode(event.blockList()); } @Override diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/CustomScriptManager.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/CustomScriptManager.java deleted file mode 100644 index 0c4e50af..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/CustomScriptManager.java +++ /dev/null @@ -1,342 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2021 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 . - */ - -package de.steamwar.bausystem.features.script; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.SWUtils; -import de.steamwar.bausystem.features.script.custom.MenuScript; -import de.steamwar.bausystem.features.script.custom.Script; -import de.steamwar.bausystem.features.script.custom.command.CustomCommand; -import de.steamwar.bausystem.features.script.custom.command.InventoryCommand; -import de.steamwar.bausystem.features.script.custom.command.MenuCommand; -import de.steamwar.bausystem.features.script.custom.event.CustomEvent; -import de.steamwar.bausystem.features.script.custom.event.EventType; -import de.steamwar.bausystem.features.script.custom.event.InventoryEvent; -import de.steamwar.bausystem.features.script.custom.event.MenuEvent; -import de.steamwar.bausystem.features.script.custom.hotkey.Hotkey; -import de.steamwar.bausystem.features.script.custom.hotkey.Hotkeys; -import de.steamwar.bausystem.features.script.custom.hotkey.InventoryHotkey; -import de.steamwar.bausystem.features.script.custom.hotkey.MenuHotkey; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.bausystem.utils.FlatteningWrapper; -import de.steamwar.inventory.SWItem; -import de.steamwar.inventory.SWListInv; -import de.steamwar.linkage.Linked; -import de.steamwar.sql.UserConfig; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.Event; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryCloseEvent; -import org.bukkit.event.player.PlayerCommandPreprocessEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.BookMeta; -import yapion.hierarchy.output.LengthOutput; -import yapion.hierarchy.output.StringOutput; -import yapion.hierarchy.types.YAPIONArray; -import yapion.hierarchy.types.YAPIONMap; -import yapion.hierarchy.types.YAPIONObject; -import yapion.hierarchy.types.YAPIONValue; -import yapion.parser.YAPIONParser; - -import java.util.*; -import java.util.function.Consumer; -import java.util.stream.Collectors; - -@Linked -public class CustomScriptManager implements Listener { - - public final Map> playerMap = Collections.synchronizedMap(new HashMap<>()); // new ConcurrentHashMap<>(); - - private void updateInventory(Player p) { - playerMap.computeIfPresent(p, (player, customCommands) -> { - customCommands.removeIf(script -> !(script instanceof MenuScript)); - return customCommands; - }); - for (ItemStack item : p.getInventory().getContents()) { - if (item == null || FlatteningWrapper.impl.isNoBook(item) || item.getItemMeta() == null) { - continue; - } - - BookMeta bookMeta = ((BookMeta) item.getItemMeta()); - if (bookMeta.getPageCount() == 0) { - continue; - } - if (bookMeta.getPage(1).isEmpty()) { - continue; - } - String s = bookMeta.getPage(1).split("\n")[0]; - if (s.startsWith("#!CMD /")) { - playerMap.computeIfAbsent(p, player -> new ArrayList<>()).add(new InventoryCommand(bookMeta, s.substring(6).split(" "))); - } else if (s.startsWith("#!EVENT ")) { - playerMap.computeIfAbsent(p, player -> new ArrayList<>()).add(new InventoryEvent(bookMeta, s.substring(8).split(" "))); - } else if (s.startsWith("#!HOTKEY ")) { - playerMap.computeIfAbsent(p, player -> new ArrayList<>()).add(new InventoryHotkey(bookMeta, s.substring(9).split(" "))); - } - } - } - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent e) { - load(e.getPlayer()); - } - - private synchronized void load(Player p) { - updateInventory(p); - - String s = UserConfig.getConfig(p.getUniqueId(), "bausystem-scripts"); - if (s == null) { - s = UserConfig.getConfig(p.getUniqueId(), "bausystem-commands"); - UserConfig.removePlayerConfig(p.getUniqueId(), "bausystem-commands"); - } - YAPIONObject yapionObject; - if (s == null) { - yapionObject = new YAPIONObject(); - yapionObject.getYAPIONMapOrSetDefault("events", new YAPIONMap()).add("FF", new YAPIONArray().add("#!EVENT FF /gui Script\ngui")); - } else { - yapionObject = YAPIONParser.parse(s); - if (yapionObject.containsKey("")) { - yapionObject.add("commands", yapionObject.getMap("")); - yapionObject.remove(""); - yapionObject.getYAPIONMapOrSetDefault("events", new YAPIONMap()).add("FF", new YAPIONArray().add("#!EVENT FF /gui Script\ngui")); - } - } - - yapionObject.getYAPIONMapOrSetDefault("commands", new YAPIONMap()).forEach((key, value) -> { - String[] command = ((YAPIONValue) key).get().split(" "); - List pages = ((YAPIONArray) value).stream().map(YAPIONValue.class::cast).map(YAPIONValue::get).map(String.class::cast).collect(Collectors.toList()); - playerMap.computeIfAbsent(p, player -> new ArrayList<>()).add(new MenuCommand(pages, command)); - }); - - yapionObject.getYAPIONMapOrSetDefault("events", new YAPIONMap()).forEach((key, value) -> { - String[] event = ((YAPIONValue) key).get().split(" "); - List pages = ((YAPIONArray) value).stream().map(YAPIONValue.class::cast).map(YAPIONValue::get).map(String.class::cast).collect(Collectors.toList()); - playerMap.computeIfAbsent(p, player -> new ArrayList<>()).add(new MenuEvent(pages, event)); - }); - - yapionObject.getYAPIONMapOrSetDefault("hotkeys", new YAPIONMap()).forEach((key, value) -> { - String[] hotkey = ((YAPIONValue) key).get().split(" "); - List pages = ((YAPIONArray) value).stream().map(YAPIONValue.class::cast).map(YAPIONValue::get).map(String.class::cast).collect(Collectors.toList()); - playerMap.computeIfAbsent(p, player -> new ArrayList<>()).add(new MenuHotkey(pages, hotkey)); - }); - } - - @EventHandler - public void onPlayerQuit(PlayerQuitEvent e) { - save(e.getPlayer()); - playerMap.remove(e.getPlayer()); - } - - private YAPIONObject output(Player p) { - if (!playerMap.containsKey(p)) return new YAPIONObject(); - YAPIONObject yapionObject = new YAPIONObject(); - - YAPIONMap commandsMap = new YAPIONMap(); - yapionObject.add("commands", commandsMap); - playerMap.get(p).stream().filter(MenuCommand.class::isInstance).map(MenuCommand.class::cast).forEach(menuCommand -> { - menuCommand.save(commandsMap); - }); - - YAPIONMap eventsMap = new YAPIONMap(); - yapionObject.add("events", eventsMap); - playerMap.get(p).stream().filter(MenuEvent.class::isInstance).map(MenuEvent.class::cast).forEach(menuCommand -> { - menuCommand.save(eventsMap); - }); - - YAPIONMap hotkeysMap = new YAPIONMap(); - yapionObject.add("hotkeys", hotkeysMap); - playerMap.get(p).stream().filter(MenuHotkey.class::isInstance).map(MenuHotkey.class::cast).forEach(menuCommand -> { - menuCommand.save(hotkeysMap); - }); - return yapionObject; - } - - private boolean save(Player p) { - if (!playerMap.containsKey(p)) { - UserConfig.removePlayerConfig(p.getUniqueId(), "bausystem-scripts"); - return true; - } - YAPIONObject yapionObject = output(p); - if (yapionObject.toYAPION(new LengthOutput()).getLength() > 64 * 1024) { - return false; - } - UserConfig.updatePlayerConfig(p.getUniqueId(), "bausystem-scripts", yapionObject.toYAPION(new StringOutput()).getResult()); - return true; - } - - @EventHandler - public void onInventoryClose(InventoryCloseEvent e) { - if (e.getPlayer() instanceof Player) { - updateInventory((Player) e.getPlayer()); - } - } - - public void openCommandsMenu(Player p) { - List> menuCommands = new ArrayList<>(); - playerMap.getOrDefault(p, new ArrayList<>()).stream().filter(MenuScript.class::isInstance).map(MenuScript.class::cast).forEach(menuItem -> { - SWItem swItem = menuItem.toItem(p); - ItemStack itemStack = swItem.getItemStack(); - if (menuItem instanceof MenuHotkey) { - itemStack.setType(Material.CHAIN_COMMAND_BLOCK); - } else if (menuItem instanceof MenuEvent) { - itemStack.setType(Material.REPEATING_COMMAND_BLOCK); - } else { - itemStack.setType(Material.COMMAND_BLOCK); - } - swItem.setItemStack(itemStack); - swItem.setLore(Arrays.asList(BauSystem.MESSAGE.parse("SCRIPT_MENU_GUI_ITEM_LORE_1", p), BauSystem.MESSAGE.parse("SCRIPT_MENU_GUI_ITEM_LORE_2", p))); - - menuCommands.add(new SWListInv.SWListEntry<>(swItem, menuItem)); - }); - - int length = (int) output(p).toYAPION(new LengthOutput()).getLength(); - double percentage = ((int) ((length / 655336.0) * 1000)) / 10.0; - String menuName = BauSystem.MESSAGE.parse("SCRIPT_MENU_GUI_NAME", p, percentage > 99 ? "§c" : (percentage >= 75 ? "§6" : "§a"), percentage); - - SWListInv menuCommandSWListInv = new SWListInv<>(p, menuName, false, menuCommands, (clickType, menuCommand) -> { - if (!clickType.isShiftClick()) { - playerMap.get(p).removeIf(customCommand -> customCommand == menuCommand); - } - SWUtils.giveItemToPlayer(p, menuCommand.toItem(p).getItemStack()); - p.closeInventory(); - save(p); - }); - menuCommandSWListInv.setItem(49, new SWItem(Material.HOPPER, BauSystem.MESSAGE.parse("SCRIPT_MENU_GUI_ITEM_ADD_NAME", p), Arrays.asList(BauSystem.MESSAGE.parse("SCRIPT_MENU_GUI_ITEM_ADD_LORE", p)), false, clickType -> { - ItemStack item = p.getItemOnCursor(); - if (item.getType().isAir()) { - return; - } - if (FlatteningWrapper.impl.isNoBook(item) || item.getItemMeta() == null) { - return; - } - - BookMeta bookMeta = ((BookMeta) item.getItemMeta()); - if (bookMeta.getPageCount() == 0) { - return; - } - if (bookMeta.getPage(1).isEmpty()) { - return; - } - String s = bookMeta.getPage(1).split("\n")[0]; - if (s.startsWith("#!CMD /")) { - MenuCommand menuCommand = new MenuCommand(bookMeta.getPages(), s.substring(6).split(" ")); - for (Script script : playerMap.computeIfAbsent(p, player -> new ArrayList<>())) { - if (!(script instanceof MenuCommand)) { - continue; - } - if (((MenuCommand) script).equals(menuCommand)) { - BauSystem.MESSAGE.sendPrefixless("SCRIPT_MENU_GUI_DUPLICATE_COMMAND", p, String.join(" ", menuCommand.command())); - return; - } - } - scriptBookLimit(p, menuCommand); - } else if (s.startsWith("#!EVENT ")) { - MenuEvent menuEvent = new MenuEvent(bookMeta.getPages(), s.substring(8).split(" ")); - try { - EventType.valueOf(menuEvent.eventName()); - } catch (Exception e) { - BauSystem.MESSAGE.sendPrefixless("SCRIPT_MENU_GUI_UNKNOWN_EVENT", p, menuEvent.eventName()); - return; - } - scriptBookLimit(p, menuEvent); - } else if (s.startsWith("#!HOTKEY ")) { - scriptBookLimit(p, new MenuHotkey(bookMeta.getPages(), s.substring(9).split(" "))); - } - })); - menuCommandSWListInv.open(); - } - - private void scriptBookLimit(Player p, Script menuScript) { - playerMap.computeIfAbsent(p, player -> new ArrayList<>()).add(menuScript); - if (!save(p)) { - playerMap.get(p).removeIf(script -> script == menuScript); - p.closeInventory(); - SWUtils.giveItemToPlayer(p, p.getItemOnCursor()); - save(p); - BauSystem.MESSAGE.sendPrefixless("SCRIPT_MENU_GUI_LIMIT", p); - return; - } - p.setItemOnCursor(null); - openCommandsMenu(p); - } - - public boolean callCommand(Player p, PlayerCommandPreprocessEvent e, String message) { - List customCommands = playerMap.getOrDefault(p, new ArrayList<>()).stream().filter(CustomCommand.class::isInstance).map(CustomCommand.class::cast).collect(Collectors.toList()); - String[] command = message.split(" "); - for (CustomCommand customCommand : customCommands) { - if (customCommand.execute(command, e)) { - return true; - } - } - return false; - } - - public boolean callScoreboard(Player p, Map variables, Consumer echoConsumer) { - Map valueMap = new HashMap<>(); - for (Map.Entry entry : variables.entrySet()) { - valueMap.put(entry.getKey(), new Value.StringValue(entry.getValue())); - } - List customEvents = playerMap.getOrDefault(p, new ArrayList<>()).stream().filter(CustomEvent.class::isInstance).map(CustomEvent.class::cast).collect(Collectors.toList()); - boolean hasScript = false; - for (CustomEvent customEvent : customEvents) { - if (customEvent.eventName().equals(EventType.Scoreboard.name())) { - customEvent.execute(p, valueMap, echoConsumer); - hasScript = true; - } - } - return hasScript; - } - - public void callEvent(EventType eventType, Player p, Event e) { - if (eventType == null) return; - if (!eventType.getEventType().equals(e.getClass())) return; - - List customEvents = playerMap.getOrDefault(p, new ArrayList<>()).stream().filter(CustomEvent.class::isInstance).map(CustomEvent.class::cast).collect(Collectors.toList()); - for (CustomEvent customEvent : customEvents) { - if (customEvent.eventName().equals(eventType.name())) { - Map variables = eventType.getEventValues().apply(e); - if (variables == null) { - variables = new HashMap<>(); - } - if (e instanceof Cancellable) { - variables.put("cancel", new Value.BooleanValue(((Cancellable) e).isCancelled())); - } - customEvent.execute(p, variables, null); - if (variables.containsKey("cancel")) { - Value value = variables.get("cancel"); - ((Cancellable) e).setCancelled(value.asBoolean()); - } - } - } - } - - public void callHotkey(int modifiers, char pressedHotkey, Player p, boolean pressed) { - List hotkeys = playerMap.getOrDefault(p, new ArrayList<>()).stream().filter(Hotkey.class::isInstance).map(Hotkey.class::cast).collect(Collectors.toList()); - for (Hotkey hotkey : hotkeys) { - if (Hotkeys.isSame(modifiers, pressedHotkey, hotkey.hotkey())) { - hotkey.execute(p, pressed); - } - } - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptCommand.java index d9bed371..6952d796 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptCommand.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptCommand.java @@ -1,163 +1,10 @@ package de.steamwar.bausystem.features.script; -import de.steamwar.bausystem.BauSystem; import de.steamwar.command.SWCommand; -import de.steamwar.inventory.SWItem; -import de.steamwar.inventory.SWListInv; -import de.steamwar.linkage.Linked; -import de.steamwar.linkage.LinkedInstance; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; - -import static de.steamwar.bausystem.features.script.ScriptExecutor.SPECIAL_COMMANDS; - -@Linked public class ScriptCommand extends SWCommand { public ScriptCommand() { super("script"); } - - @LinkedInstance - public CustomScriptManager customScriptManager = null; - - private List loreBuilder(Player p, String... strings) { - List result = new ArrayList<>(); - for (String s : strings) { - result.addAll(split(BauSystem.MESSAGE.parse(s, p))); - } - return result; - } - - @Register(description = "SCRIPT_COMMAND_HELP") - public void menuCommand(Player p) { - List> swItems = new ArrayList<>(); - addEmptyItems(swItems, 2); - swItems.add(new SWListInv.SWListEntry<>(createItem(p, Material.BOOK, "SCRIPT_GUI_CUSTOM_HOTKEYS", loreBuilder(p, "SCRIPT_GUI_CUSTOM_HOTKEYS_COMMANDS_LORE_1", "SCRIPT_GUI_CUSTOM_HOTKEYS_COMMANDS_LORE_2", "SCRIPT_GUI_CUSTOM_HOTKEYS_COMMANDS_LORE_3", "SCRIPT_GUI_CUSTOM_HOTKEYS_COMMANDS_LORE_4", "SCRIPT_GUI_CUSTOM_HOTKEYS_COMMANDS_LORE_5")), null)); - swItems.add(new SWListInv.SWListEntry<>(createItem(p, Material.BOOK, "SCRIPT_GUI_CUSTOM_COMMANDS", loreBuilder(p, "SCRIPT_GUI_CUSTOM_COMMANDS_LORE_1", "SCRIPT_GUI_CUSTOM_COMMANDS_LORE_2")), null)); - swItems.add(new SWListInv.SWListEntry<>(createItem(p, Material.BOOK, "SCRIPT_GUI_CUSTOM_EVENTS", loreBuilder(p, "SCRIPT_GUI_CUSTOM_EVENTS_LORE_1", "SCRIPT_GUI_CUSTOM_EVENTS_LORE_2", "SCRIPT_GUI_CUSTOM_EVENTS_LORE_3", "SCRIPT_GUI_CUSTOM_EVENTS_LORE_4", "SCRIPT_GUI_CUSTOM_EVENTS_LORE_5", "SCRIPT_GUI_CUSTOM_EVENTS_LORE_6", "SCRIPT_GUI_CUSTOM_EVENTS_LORE_7", "SCRIPT_GUI_CUSTOM_EVENTS_LORE_8", "SCRIPT_GUI_CUSTOM_EVENTS_LORE_9", "SCRIPT_GUI_CUSTOM_EVENTS_LORE_10", "SCRIPT_GUI_CUSTOM_EVENTS_LORE_11", "SCRIPT_GUI_CUSTOM_EVENTS_LORE_12", "SCRIPT_GUI_CUSTOM_EVENTS_LORE_13", "SCRIPT_GUI_CUSTOM_EVENTS_LORE_14", "SCRIPT_GUI_CUSTOM_EVENTS_LORE_15", "SCRIPT_GUI_CUSTOM_EVENTS_LORE_16", "SCRIPT_GUI_CUSTOM_EVENTS_LORE_17", "SCRIPT_GUI_CUSTOM_EVENTS_LORE_18", "SCRIPT_GUI_CUSTOM_EVENTS_LORE_STAR_1")), null)); - addEmptyItems(swItems, 1); - swItems.add(new SWListInv.SWListEntry<>(createItem(p, Material.BOOK, "SCRIPT_GUI_OTHER", loreBuilder(p, "SCRIPT_GUI_OTHER_LORE_1", "SCRIPT_GUI_OTHER_LORE_2", "SCRIPT_GUI_OTHER_LORE_3", "SCRIPT_GUI_OTHER_LORE_4", "SCRIPT_GUI_OTHER_LORE_5", "SCRIPT_GUI_OTHER_LORE_6", "SCRIPT_GUI_OTHER_LORE_7", "SCRIPT_GUI_OTHER_LORE_8", "SCRIPT_GUI_OTHER_LORE_9", "SCRIPT_GUI_OTHER_LORE_10", "SCRIPT_GUI_OTHER_LORE_11", "SCRIPT_GUI_OTHER_LORE_12", "SCRIPT_GUI_OTHER_LORE_13", "SCRIPT_GUI_OTHER_LORE_14", "SCRIPT_GUI_OTHER_LORE_15", "SCRIPT_GUI_OTHER_LORE_16", "SCRIPT_GUI_OTHER_LORE_17", "SCRIPT_GUI_OTHER_LORE_18")), null)); - addEmptyItems(swItems, 2); - addCustomScriptsItems(swItems, p); - addEmptyItems(swItems, 45 - swItems.size() % 45); - addEmptyItems(swItems, 4); - swItems.add(new SWListInv.SWListEntry<>(createItem(p, Material.BOOK, "SCRIPT_GUI_CUSTOM_VARIABLES", new ArrayList<>()), null)); - addEmptyItems(swItems, 4); - addConstantItem(swItems, p, Material.CLOCK, "SCRIPT_GUI_CONSTANT_TIME_NAME", "SCRIPT_GUI_CONSTANT_TIME_LORE"); - addConstantItem(swItems, p, Material.CLOCK, "SCRIPT_GUI_CONSTANT_TICKS_NAME", "SCRIPT_GUI_CONSTANT_TICKS_LORE"); - addConstantItem(swItems, p, Material.TNT_MINECART, "SCRIPT_GUI_CONSTANT_TRACE_NAME", "SCRIPT_GUI_CONSTANT_TRACE_LORE"); - addConstantItem(swItems, p, Material.TNT_MINECART, "SCRIPT_GUI_CONSTANT_AUTO_TRACE_NAME", "SCRIPT_GUI_CONSTANT_AUTO_TRACE_LORE"); - addConstantItem(swItems, p, Material.TNT_MINECART, "SCRIPT_GUI_CONSTANT_TRACE_STATUS_NAME", "SCRIPT_GUI_CONSTANT_TRACE_STATUS_LORE"); - addConstantItem(swItems, p, Material.TNT_MINECART, "SCRIPT_GUI_CONSTANT_TRACE_TIME_NAME", "SCRIPT_GUI_CONSTANT_TRACE_TIME_LORE"); - addConstantItem(swItems, p, Material.HOPPER, "SCRIPT_GUI_CONSTANT_LOADER_STATUS_NAME", "SCRIPT_GUI_CONSTANT_LOADER_STATUS_LORE"); - addConstantItem(swItems, p, Material.TNT, "SCRIPT_GUI_CONSTANT_TNT_NAME", "SCRIPT_GUI_CONSTANT_TNT_LORE"); - addConstantItem(swItems, p, Material.TNT, "SCRIPT_GUI_CONSTANT_ONLY_TB_NAME", "SCRIPT_GUI_CONSTANT_ONLY_TB_LORE"); - addConstantItem(swItems, p, Material.GUNPOWDER, "SCRIPT_GUI_CONSTANT_FREEZE_NAME", "SCRIPT_GUI_CONSTANT_FREEZE_LORE"); - addConstantItem(swItems, p, Material.FIRE_CHARGE, "SCRIPT_GUI_CONSTANT_FIRE_NAME", "SCRIPT_GUI_CONSTANT_FIRE_LORE"); - addConstantItem(swItems, p, Material.OBSIDIAN, "SCRIPT_GUI_CONSTANT_PROTECT_NAME", "SCRIPT_GUI_CONSTANT_PROTECT_LORE"); - addConstantItem(swItems, p, Material.PLAYER_HEAD, "SCRIPT_GUI_CONSTANT_X_NAME", "SCRIPT_GUI_CONSTANT_X_LORE"); - addConstantItem(swItems, p, Material.PLAYER_HEAD, "SCRIPT_GUI_CONSTANT_Y_NAME", "SCRIPT_GUI_CONSTANT_Y_LORE"); - addConstantItem(swItems, p, Material.PLAYER_HEAD, "SCRIPT_GUI_CONSTANT_Z_NAME", "SCRIPT_GUI_CONSTANT_Z_LORE"); - addConstantItem(swItems, p, Material.NAME_TAG, "SCRIPT_GUI_CONSTANT_NAME_NAME", "SCRIPT_GUI_CONSTANT_NAME_LORE"); - addConstantItem(swItems, p, Material.IRON_BOOTS, "SCRIPT_GUI_CONSTANT_SNEAK_NAME", "SCRIPT_GUI_CONSTANT_SNEAK_LORE"); - addConstantItem(swItems, p, Material.DIAMOND_BOOTS, "SCRIPT_GUI_CONSTANT_SPRINTING_NAME", "SCRIPT_GUI_CONSTANT_SPRINTING_LORE"); - addConstantItem(swItems, p, Material.ARROW, "SCRIPT_GUI_CONSTANT_SLOT_NAME", "SCRIPT_GUI_CONSTANT_SLOT_LORE"); - addConstantItem(swItems, p, Material.GRASS_BLOCK, "SCRIPT_GUI_CONSTANT_SLOT_MATERIAL_NAME", "SCRIPT_GUI_CONSTANT_SLOT_MATERIAL_LORE"); - addConstantItem(swItems, p, Material.IRON_BLOCK, "SCRIPT_GUI_CONSTANT_OFF_HAND_MATERIAL_NAME", "SCRIPT_GUI_CONSTANT_OFF_HAND_MATERIAL_LORE"); - addConstantItem(swItems, p, Material.BIRCH_SIGN, "SCRIPT_GUI_CONSTANT_SLOT_MATERIAL_DISPLAY_NAME", "SCRIPT_GUI_CONSTANT_SLOT_MATERIAL_DISPLAY_LORE"); - addConstantItem(swItems, p, Material.ACACIA_SIGN, "SCRIPT_GUI_CONSTANT_OFF_HAND_MATERIAL_DISPLAY_NAME", "SCRIPT_GUI_CONSTANT_OFF_HAND_MATERIAL_DISPLAY_LORE"); - addConstantItem(swItems, p, Material.MAP, "SCRIPT_GUI_CONSTANT_REGION_TYPE_NAME", "SCRIPT_GUI_CONSTANT_REGION_TYPE_LORE"); - addConstantItem(swItems, p, Material.MAP, "SCRIPT_GUI_CONSTANT_REGION_NAME_NAME", "SCRIPT_GUI_CONSTANT_REGION_NAME_LORE"); - addConstantItem(swItems, p, Material.COMPASS, "SCRIPT_GUI_CONSTANT_TPS_NAME", "SCRIPT_GUI_CONSTANT_TPS_LORE"); - addConstantItem(swItems, p, Material.COMPASS, "SCRIPT_GUI_CONSTANT_TPS_LIMIT_NAME", "SCRIPT_GUI_CONSTANT_TPS_LIMIT_LORE"); - addEmptyItems(swItems, 45 - swItems.size() % 45); - - SWListInv swListInv = new SWListInv<>(p, BauSystem.MESSAGE.parse("SCRIPT_GUI_NAME", p), swItems, (clickType, o) -> { - if (o != null) { - BauSystem.MESSAGE.send("SCRIPT_GUI_COMMAND_CHAT", p, o.command()); - for (String s : o.description()) { - if (s.isEmpty()) { - BauSystem.MESSAGE.sendPrefixless("PREFIX", p); - } else { - BauSystem.MESSAGE.send(s, p); - } - } - p.closeInventory(); - } - }); - swListInv.open(); - } - - private void addEmptyItems(List> swItems, int count) { - for (int i = 0; i < count; i++) { - swItems.add(new SWListInv.SWListEntry<>(new SWItem(Material.GRAY_STAINED_GLASS_PANE, "§7", new ArrayList<>(), false, clickType -> { - }), null)); - } - } - - private SWItem createItem(Player p, Material material, String name, List lore) { - return new SWItem(material, BauSystem.MESSAGE.parse(name, p), lore, false, clickType -> { - }); - } - - private void addConstantItem(List> swItems, Player p, Material material, String name, String lore) { - List itemLore = new ArrayList<>(); - itemLore.add(BauSystem.MESSAGE.parse(lore, p)); - swItems.add(new SWListInv.SWListEntry<>(createItem(p, material, name, itemLore), null)); - } - - private void addCustomScriptsItems(List> swItems, Player p) { - List specialCommands = new ArrayList<>(SPECIAL_COMMANDS); - specialCommands.sort(Comparator.comparing(specialCommand -> specialCommand.getClass().getTypeName())); - specialCommands.forEach(specialCommand -> { - List strings = new ArrayList<>(); - boolean b = false; - for (String s : specialCommand.description()) { - if (s.isEmpty()) { - b = true; - strings.add(""); - continue; - } - s = BauSystem.MESSAGE.parse(s, p); - if (b) { - strings.addAll(split(s)); - } else { - strings.add(s); - } - } - - SWItem swItem = new SWItem(specialCommand.material(), BauSystem.MESSAGE.parse("SCRIPT_GUI_COMMAND_NAME", p, specialCommand.command()), strings, false, clickType -> { - }); - swItems.add(new SWListInv.SWListEntry<>(swItem, specialCommand)); - }); - } - - private List split(String s) { - List strings = new ArrayList<>(); - while (s.length() > 60) { - int index = s.indexOf(' ', 60); - if (index == -1) { - strings.add("§7" + s); - s = null; - break; - } else { - strings.add("§7" + s.substring(0, index)); - s = s.substring(index + 1); - } - } - if (s != null) { - strings.add("§7" + s); - } - return strings; - } - - @Register(value = "menu", description = "SCRIPT_COMMAND_HELP_MENU") - public void menuGUICommand(Player p) { - customScriptManager.openCommandsMenu(p); - } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptExecutor.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptExecutor.java deleted file mode 100644 index 25b29147..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptExecutor.java +++ /dev/null @@ -1,304 +0,0 @@ -package de.steamwar.bausystem.features.script; - -import com.sk89q.worldedit.EditSession; -import com.sk89q.worldedit.WorldEdit; -import com.sk89q.worldedit.bukkit.BukkitAdapter; -import com.sk89q.worldedit.event.platform.CommandEvent; -import com.sk89q.worldedit.extension.platform.Actor; -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.expression.Expression; -import de.steamwar.bausystem.features.script.expression.UnknownOperatorException; -import de.steamwar.bausystem.features.script.expression.VarNotFoundException; -import de.steamwar.bausystem.features.script.variables.Constants; -import de.steamwar.bausystem.features.script.variables.Context; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.bausystem.features.world.WorldEditListener; -import de.steamwar.bausystem.linkage.LinkageUtils; -import de.steamwar.bausystem.utils.WorldEditUtils; -import lombok.Getter; -import lombok.Setter; -import net.md_5.bungee.api.ChatColor; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.player.PlayerCommandPreprocessEvent; -import org.bukkit.inventory.meta.BookMeta; - -import java.util.*; -import java.util.function.Consumer; -import java.util.logging.Level; - -public final class ScriptExecutor { - - public static final Set SPECIAL_COMMANDS = new HashSet<>(); - - static { - LinkageUtils.linkScriptCommands(); - } - - private static final boolean hasFAWE = Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit") != null; - - private String specialCommand = null; - - @Getter - private final Player player; - - @Getter - private final Context localVariables = new Context(); - - @Getter - private final Context globalVariables; - - private final List commands = new ArrayList<>(); - - @Getter - public final Map jumpPoints = new HashMap<>(); - - @Getter - private final LinkedList returnStack = new LinkedList<>(); - - @Getter - @Setter - private int index = 0; - - @Getter - private final Consumer echoConsumer; - - public ScriptExecutor(BookMeta bookMeta, Player player, Consumer echoConsumer) { - this(bookMeta, player, new HashMap<>(), echoConsumer); - } - - public ScriptExecutor(List pages, Player player, Consumer echoConsumer) { - this(pages, player, new HashMap<>(), echoConsumer); - } - - public ScriptExecutor(BookMeta bookMeta, Player player, Map localVariables, Consumer echoConsumer) { - this.player = player; - globalVariables = ScriptListener.getGlobalContext(player); - - parseMeta(bookMeta); - this.echoConsumer = echoConsumer != null ? echoConsumer : s -> { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_IO_ECHO_MESSAGE", player, s); - }; - if (commands.isEmpty()) return; - localVariables.forEach(this.localVariables::putValue); - resume(); - } - - public ScriptExecutor(List pages, Player player, Map localVariables, Consumer echoConsumer) { - this.player = player; - globalVariables = ScriptListener.getGlobalContext(player); - - parseList(pages); - this.echoConsumer = echoConsumer != null ? echoConsumer : s -> { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_IO_ECHO_MESSAGE", player, s); - }; - if (commands.isEmpty()) return; - localVariables.forEach(this.localVariables::putValue); - resume(); - } - - private void parseMeta(BookMeta bookMeta) { - boolean initial = true; - for (String page : bookMeta.getPages()) { - initial = parsePage(page, initial); - } - } - - private void parseList(List pages) { - boolean initial = true; - for (String page : pages) { - initial = parsePage(page, initial); - } - } - - private boolean parsePage(String page, boolean initial) { - for (String command : page.split("\n")) { - command = command.replaceAll(" +", " "); - if (command.startsWith("#") || command.trim().isEmpty()) { - if (initial && command.startsWith("#!CMD /")) { - specialCommand = command.substring(7).split(" ")[0]; - } - initial = false; - continue; - } - initial = false; - if (command.startsWith(".")) { - jumpPoints.put(command.substring(1), commands.size()); - continue; - } - commands.add(command); - } - return initial; - } - - public void resume() { - if (!player.isOnline()) { - return; - } - - int executionPoints = 0; - - while (index < commands.size()) { - String command = commands.get(index).trim(); - index++; - if (executionPoints++ > 200) { - BauSystem.MESSAGE.send("SCRIPT_SLEEP_ERROR", player); - return; - } - - String[] strings = replaceExpressions(command); - if (strings.length == 0) { - return; - } - boolean found = false; - for (SpecialCommand specialCommand : SPECIAL_COMMANDS) { - if (specialCommand.command().equalsIgnoreCase(strings[0])) { - found = true; - if (!specialCommand.execute(strings, this)) { - return; - } - } - } - if (found) { - continue; - } - - if (strings[0].contains(":")) { - continue; - } - - // Variable Replaces in commands. - command = String.join(" ", strings); - - PlayerCommandPreprocessEvent preprocessEvent = new PlayerCommandPreprocessEvent(player, "/" + (specialCommand != null && command.startsWith(specialCommand) ? "script:" : "") + command); - Bukkit.getServer().getPluginManager().callEvent(preprocessEvent); - if (preprocessEvent.isCancelled()) { - continue; - } - - Bukkit.getLogger().log(Level.INFO, player.getName() + " dispatched command: " + command); - if (!strings[0].equals("select") && hasFAWE && WorldEditListener.isWorldEditCommand("/" + strings[0])) { - EditSession editSession = WorldEditUtils.getEditSession(player); - Actor actor = BukkitAdapter.adapt(player); - WorldEdit.getInstance().getPlatformManager().getPlatformCommandManager().handleCommandOnCurrentThread(new CommandEvent(actor, command, editSession)); - editSession.flushSession(); - WorldEditUtils.addToPlayer(player, editSession); - } else { - Bukkit.getServer().dispatchCommand(player, command); - } - } - } - - private String[] replaceExpressions(String s) { - s = s.replaceAll(" +", " "); - StringBuilder result = new StringBuilder(); - int depth = 0; - StringBuilder st = new StringBuilder(); - for (int i = 0; i < s.length(); i++) { - char c = s.charAt(i); - if (c == '{') { - st.append(c); - depth++; - } else if (c == '}') { - st.append(c); - depth--; - if (depth == 0) { - try { - Expression expression = new Expression(player, st.toString(), this); - result.append(expression.eval().asString()); - st = new StringBuilder(); - } catch (IllegalArgumentException e) { - BauSystem.MESSAGE.send(e.getMessage(), player); - return new String[0]; - } catch (VarNotFoundException e) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_UNKNOWN_VAR", player, e.getMessage()); - return new String[0]; - } catch (IndexOutOfBoundsException e) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_EXPRESSION", player, st.toString()); - return new String[0]; - } catch (UnknownOperatorException e) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_UNKNOWN_OPERATION", player, e.getMessage()); - return new String[0]; - } - } - } else if (st.length() > 0) { - st.append(c); - } else { - result.append(c); - } - } - return result.toString().split(" "); - } - - public Value getOrItselfValue(String variable) { - if (!isVariable(variable)) { - return Value.parse(variable); - } - - if (localVariables.hasValue(variable)) { - return localVariables.getValue(variable); - } - if (globalVariables.hasValue(variable)) { - return globalVariables.getValue(variable); - } - return Constants.getConstant(variable, player); - } - - public Value getValueOrNull(String variable) { - if (localVariables.hasValue(variable)) { - return localVariables.getValue(variable); - } - if (globalVariables.hasValue(variable)) { - return globalVariables.getValue(variable); - } - if (Constants.isConstant(variable)) { - return Constants.getConstant(variable, player); - } - return null; - } - - public String getOrItself(String variable) { - if (isVariable(variable)) { - return getValue(variable); - } - return variable; - } - - public boolean isVariable(String variable) { - return Constants.isConstant(variable) || globalVariables.hasValue(variable) || localVariables.hasValue(variable); - } - - public String getValue(String variable) { - if (localVariables.hasValue(variable)) { - return localVariables.getValue(variable).asString(); - } - if (globalVariables.hasValue(variable)) { - return globalVariables.getValue(variable).asString(); - } - if (Constants.isConstant(variable)) { - return Constants.getConstant(variable, player).asString(); - } - return ""; - } - - public String getConstant(String variable) { - if (Constants.isConstant(variable)) { - return Constants.getConstant(variable, player).asString(); - } - return "0"; - } - - public String getGlobal(String variable) { - if (globalVariables.hasValue(variable)) { - return globalVariables.getValue(variable).asString(); - } - return "0"; - } - - public String getLocal(String variable) { - if (localVariables.hasValue(variable)) { - return localVariables.getValue(variable).asString(); - } - return "0"; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptListener.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptListener.java index ef9abe06..f2b5852c 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptListener.java @@ -1,6 +1,5 @@ package de.steamwar.bausystem.features.script; -import de.steamwar.bausystem.features.script.variables.Context; import de.steamwar.bausystem.utils.FlatteningWrapper; import de.steamwar.linkage.Linked; import org.bukkit.entity.Player; @@ -9,22 +8,19 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerSwapHandItemsEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.BookMeta; -import java.util.HashMap; +import java.util.Collections; import java.util.HashSet; -import java.util.Map; import java.util.Set; @Linked public class ScriptListener implements Listener { - private static final Map GLOBAL_CONTEXT = new HashMap<>(); - - private Set playerSet = new HashSet<>(); + private final Set playerSet = new HashSet<>(); @EventHandler(priority = EventPriority.HIGH) public void onLeftClick(PlayerInteractEvent event) { @@ -44,20 +40,22 @@ public class ScriptListener implements Listener { } event.setCancelled(true); - new ScriptExecutor((BookMeta) item.getItemMeta(), event.getPlayer(), null); - } - - @EventHandler(priority = EventPriority.LOWEST) - public void onPlayerJoin(PlayerJoinEvent event) { - GLOBAL_CONTEXT.put(event.getPlayer(), new Context()); + ScriptRunner.runScript(((BookMeta) item.getItemMeta()).getPages().stream().reduce((s, s2) -> s + "\n" + s2).orElse(null), event.getPlayer()); } @EventHandler public void onPlayerQuit(PlayerQuitEvent event) { - GLOBAL_CONTEXT.remove(event.getPlayer()); + ScriptRunner.remove(event.getPlayer()); } - public static Context getGlobalContext(Player player) { - return GLOBAL_CONTEXT.computeIfAbsent(player, ignore -> new Context()); + @EventHandler + public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) { + ItemStack item = event.getOffHandItem(); + if (item == null || FlatteningWrapper.impl.isNoBook(item) || item.getItemMeta() == null) { + return; + } + + event.setCancelled(true); + ScriptRunner.createGlobalScript(Collections.singletonList(((BookMeta) item.getItemMeta()).getPages().stream().reduce((s, s2) -> s + "\n" + s2).orElse(null)), event.getPlayer()); } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptRunner.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptRunner.java new file mode 100644 index 00000000..8c4ce348 --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptRunner.java @@ -0,0 +1,75 @@ +package de.steamwar.bausystem.features.script; + +import de.steamwar.bausystem.features.script.lua.CommandRegister; +import de.steamwar.bausystem.features.script.lua.SteamWarGlobalLuaPlugin; +import de.steamwar.bausystem.features.script.lua.SteamWarPlatform; +import org.bukkit.entity.Player; +import org.luaj.vm2.Globals; +import org.luaj.vm2.LuaFunction; +import org.luaj.vm2.LuaValue; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class ScriptRunner { + + // Script Table + // User + // Key -> bau-script- + // Value -> + + private static final Map>> EVENT_MAP = new HashMap<>(); + private static final Map> COMMAND_MAP = new HashMap<>(); + + public static void runScript(String script, Player player) { + Globals globals = SteamWarPlatform.createClickGlobals(player); + + try { + globals.load(script).call(); + } catch (Exception e) { + player.sendMessage("§cFehler beim Ausführen des Scripts: " + e.getMessage()); + } + } + + public static void createGlobalScript(List scripts, Player player) { + EVENT_MAP.remove(player); + Globals globals = SteamWarPlatform.createGlobalGlobals(player, + (s, luaFunction) -> EVENT_MAP.computeIfAbsent(player, player1 -> new HashMap<>()).computeIfAbsent(s, s1 -> new ArrayList<>()).add(luaFunction), + commandRegister -> COMMAND_MAP.computeIfAbsent(player, player1 -> new HashMap<>()).put(commandRegister.getName(), commandRegister)); + + for (String script : scripts) { + globals.load(script).call(); + } + } + + public static void remove(Player player) { + EVENT_MAP.remove(player); + } + + public static void callEvent(Player player, SteamWarGlobalLuaPlugin.EventType event, LuaValue eventValue) { + Map> stringListMap = EVENT_MAP.get(player); + if (stringListMap == null) { + return; + } + + List luaFunctions = stringListMap.get(event); + if (luaFunctions == null) { + return; + } + + for (LuaFunction luaFunction : luaFunctions) { + luaFunction.call(eventValue); + } + } + + public static void callCommand(Player player, String command, LuaValue args) { + CommandRegister commandRegister = COMMAND_MAP.get(player).get(command.toLowerCase()); + if (commandRegister == null) { + return; + } + + commandRegister.getFunction().call(args); + } +} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptSyntaxSender.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptSyntaxSender.java deleted file mode 100644 index 8c9763c3..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptSyntaxSender.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.custom.event.EventType; -import de.steamwar.bausystem.features.script.expression.Expression; -import de.steamwar.linkage.Linked; -import lombok.SneakyThrows; -import org.bukkit.Bukkit; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; -import yapion.hierarchy.output.StringOutput; -import yapion.hierarchy.types.YAPIONArray; -import yapion.hierarchy.types.YAPIONObject; - -import java.util.Arrays; - -@Linked -public class ScriptSyntaxSender implements Listener { - - private byte[] syntax; - - { - Bukkit.getServer().getMessenger().registerOutgoingPluginChannel(BauSystem.getInstance(), "sw:script_syntax"); - - // Whole Syntax object - YAPIONObject yapionObject = new YAPIONObject(); - - ScriptExecutor.SPECIAL_COMMANDS.toString(); - - // Operators - YAPIONArray operators = new YAPIONArray(); - yapionObject.add("@operators", operators); - Expression.OPERATORS.forEach((s, operator) -> { - operators.add(s); - }); - - // Headers - YAPIONArray headers = new YAPIONArray(); - yapionObject.add("@headers", headers); - headers.add("CMD /.*"); - headers.add("EVENT " + Arrays.stream(EventType.values()).map(Enum::name).reduce((s, s2) -> s + "|" + s2).map(s -> "(" + s + ")").orElse("") + "( .+)?"); - headers.add("HOTKEY .+"); - - // Variable prefixes - YAPIONArray prefixes = new YAPIONArray(); - yapionObject.add("@prefixes", prefixes); - prefixes.add("global"); - prefixes.add("const"); - prefixes.add("local"); - - // Variable suffixes - YAPIONArray suffixes = new YAPIONArray(); - yapionObject.add("@suffixes", suffixes); - suffixes.add("isset"); - suffixes.add("type"); - suffixes.add("length"); - - // Commands - ScriptExecutor.SPECIAL_COMMANDS.forEach(specialCommand -> { - YAPIONArray yapionArray = new YAPIONArray(); - yapionObject.add(specialCommand.command(), yapionArray); - if (specialCommand.repeating()) { - yapionArray.add(true); - } else { - yapionArray.add(false); - } - for (SpecialCommand.TokenType[] types : specialCommand.getSyntax()) { - YAPIONArray syntax = new YAPIONArray(); - yapionArray.add(syntax); - for (SpecialCommand.TokenType type : types) { - syntax.add(type.ordinal()); - } - } - }); - syntax = yapionObject.toJSONLossy(new StringOutput()).getResult().getBytes(); - } - - @EventHandler - @SneakyThrows - public void onPlayerJoin(PlayerJoinEvent event) { - Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> { - event.getPlayer().sendPluginMessage(BauSystem.getInstance(), "sw:script_syntax", syntax); - }, 5); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/SpecialCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/SpecialCommand.java deleted file mode 100644 index 3cb32f9b..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/SpecialCommand.java +++ /dev/null @@ -1,86 +0,0 @@ -package de.steamwar.bausystem.features.script; - -import org.bukkit.Material; - -public interface SpecialCommand { - - default String[] description() { - return new String[0]; - } - - default Material material() { - return Material.PAPER; - } - - String command(); - - boolean execute(String[] command, ScriptExecutor scriptExecutor); - - default boolean repeating() { - return false; - } - - TokenType[][] getSyntax(); - - default long asLong(String value) { - try { - return Long.parseLong(value); - } catch (NumberFormatException e) { - return 0; - } - } - - default boolean asBoolean(String value) { - return value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes"); - } - - default String asString(String value) { - return value; - } - - default void jumpToIndex(ScriptExecutor scriptExecutor, String jumpPoint) { - scriptExecutor.jumpPoints.computeIfPresent(jumpPoint, (s, integer) -> { - scriptExecutor.setIndex(integer); - return integer; - }); - } - - default void jumpToIndexWithMessage(ScriptExecutor scriptExecutor, String jumpPoint, String message) { - Integer jp = scriptExecutor.jumpPoints.getOrDefault(jumpPoint, null); - if (jp == null) { - scriptExecutor.getPlayer().sendMessage(message); - return; - } - scriptExecutor.setIndex(jp); - } - - default void jumpToIndexWithMessageAndReturnStack(ScriptExecutor scriptExecutor, String jumpPoint, String message) { - Integer jp = scriptExecutor.jumpPoints.getOrDefault(jumpPoint, null); - if (jp == null) { - scriptExecutor.getPlayer().sendMessage(message); - return; - } - scriptExecutor.getReturnStack().add(scriptExecutor.getIndex()); - scriptExecutor.setIndex(jp); - } - - default void returnFromStackWithMessage(ScriptExecutor scriptExecutor, String message) { - if (scriptExecutor.getReturnStack().isEmpty()) { - scriptExecutor.getPlayer().sendMessage(message); - return; - } - scriptExecutor.setIndex(scriptExecutor.getReturnStack().pop()); - } - - enum TokenType { - any, // This does not include jump_point and variable - expression, - jump_point, - variable, - - text_type, - number_type, - floating_number_type, - boolean_type, - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/Call.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/Call.java deleted file mode 100644 index 4cb22c65..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/Call.java +++ /dev/null @@ -1,49 +0,0 @@ -package de.steamwar.bausystem.features.script.command; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.linkage.Linked; -import org.bukkit.Material; - -@Linked -public class Call implements SpecialCommand { - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_CALL_HELP_1", - "", - "SCRIPT_COMMAND_CALL_HELP_2" - }; - } - - @Override - public Material material() { - return Material.LEATHER_BOOTS; - } - - @Override - public String command() { - return "call"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - if (command.length <= 1) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_FIRST_ARG_NOJUMPPOINT", scriptExecutor.getPlayer()); - return true; - } - jumpToIndexWithMessageAndReturnStack(scriptExecutor, command[1], BauSystem.MESSAGE.parse("SCRIPT_COMMAND_CALL_ERROR", scriptExecutor.getPlayer(), command[1])); - return true; - } - - private TokenType[][] syntax = { - { TokenType.jump_point }, - }; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/Exit.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/Exit.java deleted file mode 100644 index c274d252..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/Exit.java +++ /dev/null @@ -1,41 +0,0 @@ -package de.steamwar.bausystem.features.script.command; - -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.linkage.Linked; -import org.bukkit.Material; - -@Linked -public class Exit implements SpecialCommand { - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_EXIT_HELP_1", - "", - "SCRIPT_COMMAND_EXIT_HELP_2" - }; - } - - @Override - public Material material() { - return Material.BARRIER; - } - - @Override - public String command() { - return "exit"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - return false; - } - - private TokenType[][] syntax = {}; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/If.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/If.java deleted file mode 100644 index 47d92f25..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/If.java +++ /dev/null @@ -1,68 +0,0 @@ -package de.steamwar.bausystem.features.script.command; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; -import org.bukkit.Material; - -@Linked -public class If implements SpecialCommand { - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_IF_HELP_1", - "SCRIPT_COMMAND_IF_HELP_2", - "", - "SCRIPT_COMMAND_IF_HELP_3" - }; - } - - @Override - public Material material() { - return Material.OBSERVER; - } - - @Override - public String command() { - return "if"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - if (command.length < 1) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_FIRST_ARG_NOVAR_OR_VALUE", scriptExecutor.getPlayer()); - return true; - } - if (command.length < 2) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_SECOND_ARG_NOJUMPPOINT", scriptExecutor.getPlayer()); - return true; - } - - Value v = scriptExecutor.getOrItselfValue(command[1]); - if (!(v instanceof Value.BooleanValue)) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_NO_BOOLEAN", scriptExecutor.getPlayer()); - return false; - } - if (v.asBoolean() && command.length > 2) { - jumpToIndex(scriptExecutor, command[2]); - } else if (command.length > 3) { - jumpToIndex(scriptExecutor, command[3]); - } - return true; - } - - private TokenType[][] syntax = { - { TokenType.boolean_type, TokenType.jump_point }, - { TokenType.boolean_type, TokenType.jump_point, TokenType.jump_point }, - { TokenType.expression, TokenType.jump_point }, - { TokenType.expression, TokenType.jump_point, TokenType.jump_point } - }; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/Jump.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/Jump.java deleted file mode 100644 index 10ff4ab1..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/Jump.java +++ /dev/null @@ -1,49 +0,0 @@ -package de.steamwar.bausystem.features.script.command; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.linkage.Linked; -import org.bukkit.Material; - -@Linked -public class Jump implements SpecialCommand { - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_JUMP_HELP_1", - "", - "SCRIPT_COMMAND_JUMP_HELP_2" - }; - } - - @Override - public Material material() { - return Material.LEATHER_BOOTS; - } - - @Override - public String command() { - return "jump"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - if (command.length <= 1) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_FIRST_ARG_NOJUMPPOINT", scriptExecutor.getPlayer()); - return true; - } - jumpToIndexWithMessage(scriptExecutor, command[1], BauSystem.MESSAGE.parse("SCRIPT_COMMAND_JUMP_ERROR", scriptExecutor.getPlayer(), command[1])); - return true; - } - - private TokenType[][] syntax = { - { TokenType.jump_point } - }; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/Return.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/Return.java deleted file mode 100644 index 0d9e6492..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/Return.java +++ /dev/null @@ -1,43 +0,0 @@ -package de.steamwar.bausystem.features.script.command; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.linkage.Linked; -import org.bukkit.Material; - -@Linked -public class Return implements SpecialCommand { - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_RETURN_HELP_1", - "", - "SCRIPT_COMMAND_RETURN_HELP_2" - }; - } - - @Override - public Material material() { - return Material.DIAMOND_BOOTS; - } - - @Override - public String command() { - return "return"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - returnFromStackWithMessage(scriptExecutor, BauSystem.MESSAGE.parse("SCRIPT_COMMAND_RETURN_ERROR", scriptExecutor.getPlayer())); - return true; - } - - private TokenType[][] syntax = {}; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/Sleep.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/Sleep.java deleted file mode 100644 index 3cb0f025..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/Sleep.java +++ /dev/null @@ -1,58 +0,0 @@ -package de.steamwar.bausystem.features.script.command; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.linkage.Linked; -import org.bukkit.Bukkit; -import org.bukkit.Material; - -@Linked -public class Sleep implements SpecialCommand { - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_SLEEP_HELP_1", - "", - "SCRIPT_COMMAND_SLEEP_HELP_2" - }; - } - - @Override - public Material material() { - return Material.CLOCK; - } - - @Override - public String command() { - return "sleep"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - if (command.length <= 1) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_FIRST_ARG_NONUMER", scriptExecutor.getPlayer()); - return true; - } - long sleepTime = asLong(command[1]); - if (sleepTime < 0) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_SLEEP_ERROR", scriptExecutor.getPlayer()); - return true; - } - if (sleepTime == 0) { - return true; - } - Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), scriptExecutor::resume, sleepTime); - return false; - } - - private TokenType[][] syntax = { - { TokenType.number_type } - }; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/arithmetic/other/Ceil.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/arithmetic/other/Ceil.java deleted file mode 100644 index da87c9f9..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/arithmetic/other/Ceil.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.command.arithmetic.other; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; -import org.bukkit.Material; - -@Linked -public class Ceil implements SpecialCommand { - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_ARITHMETIC_OTHER_CEIL_HELP_1", - "SCRIPT_COMMAND_ARITHMETIC_OTHER_CEIL_HELP_2", - "", - "SCRIPT_COMMAND_ARITHMETIC_OTHER_CEIL_HELP_3" - }; - } - - @Override - public Material material() { - return Material.REDSTONE_TORCH; - } - - @Override - public String command() { - return "ceil"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - if (command.length <= 1) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_FIRST_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - if (command.length <= 2) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_SECOND_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - - Value v1; - Value v2; - if (command.length == 3) { - v1 = scriptExecutor.getOrItselfValue(command[command.length - 1]); - v2 = new Value.LongValue(0); - } else { - v1 = scriptExecutor.getOrItselfValue(command[command.length - 2]); - v2 = scriptExecutor.getOrItselfValue(command[command.length - 1]); - } - if (!(v1 instanceof Value.DoubleValue)) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ARITHMETIC_OTHER_CEIL_ERROR_1", scriptExecutor.getPlayer()); - return true; - } - if (!(v2 instanceof Value.LongValue)) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ARITHMETIC_OTHER_CEIL_ERROR_2", scriptExecutor.getPlayer()); - return true; - } - if (v2.asLong() < 0) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ARITHMETIC_OTHER_CEIL_ERROR_2", scriptExecutor.getPlayer()); - return true; - } - - if (v2.asLong() == 0) { - scriptExecutor.getLocalVariables().putValue(command[1], new Value.LongValue((long) Math.ceil(v1.asDouble()))); - } else { - double pow = Math.pow(10, v2.asLong()); - scriptExecutor.getLocalVariables().putValue(command[1], new Value.DoubleValue(Math.ceil(v1.asDouble() * pow) / pow)); - } - return true; - } - - private TokenType[][] syntax = { - { TokenType.variable, TokenType.variable }, - { TokenType.variable, TokenType.floating_number_type }, - { TokenType.variable, TokenType.variable, TokenType.number_type }, - { TokenType.variable, TokenType.floating_number_type, TokenType.number_type }, - { TokenType.variable, TokenType.variable, TokenType.variable }, - { TokenType.variable, TokenType.floating_number_type, TokenType.variable }, - }; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/arithmetic/other/Floor.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/arithmetic/other/Floor.java deleted file mode 100644 index ce5d0730..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/arithmetic/other/Floor.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.command.arithmetic.other; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; -import org.bukkit.Material; - -@Linked -public class Floor implements SpecialCommand { - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_ARITHMETIC_OTHER_FLOOR_HELP_1", - "SCRIPT_COMMAND_ARITHMETIC_OTHER_FLOOR_HELP_2", - "", - "SCRIPT_COMMAND_ARITHMETIC_OTHER_FLOOR_HELP_3" - }; - } - - @Override - public Material material() { - return Material.REDSTONE_TORCH; - } - - @Override - public String command() { - return "floor"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - if (command.length <= 1) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_FIRST_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - if (command.length <= 2) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_SECOND_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - - Value v1; - Value v2; - if (command.length == 3) { - v1 = scriptExecutor.getOrItselfValue(command[command.length - 1]); - v2 = new Value.LongValue(0); - } else { - v1 = scriptExecutor.getOrItselfValue(command[command.length - 2]); - v2 = scriptExecutor.getOrItselfValue(command[command.length - 1]); - } - if (!(v1 instanceof Value.DoubleValue)) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ARITHMETIC_OTHER_FLOOR_ERROR_1", scriptExecutor.getPlayer()); - return true; - } - if (!(v2 instanceof Value.LongValue)) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ARITHMETIC_OTHER_FLOOR_ERROR_2", scriptExecutor.getPlayer()); - return true; - } - if (v2.asLong() < 0) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ARITHMETIC_OTHER_FLOOR_ERROR_2", scriptExecutor.getPlayer()); - return true; - } - - if (v2.asLong() == 0) { - scriptExecutor.getLocalVariables().putValue(command[1], new Value.LongValue((long) Math.floor(v1.asDouble()))); - } else { - double pow = Math.pow(10, v2.asLong()); - scriptExecutor.getLocalVariables().putValue(command[1], new Value.DoubleValue(Math.floor(v1.asDouble() * pow) / pow)); - } - return true; - } - - private TokenType[][] syntax = { - { TokenType.variable, TokenType.variable }, - { TokenType.variable, TokenType.floating_number_type }, - { TokenType.variable, TokenType.variable, TokenType.number_type }, - { TokenType.variable, TokenType.floating_number_type, TokenType.number_type }, - { TokenType.variable, TokenType.variable, TokenType.variable }, - { TokenType.variable, TokenType.floating_number_type, TokenType.variable }, - }; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/arithmetic/other/Round.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/arithmetic/other/Round.java deleted file mode 100644 index 2af5d261..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/arithmetic/other/Round.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.command.arithmetic.other; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; -import org.bukkit.Material; - -@Linked -public class Round implements SpecialCommand { - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_ARITHMETIC_OTHER_ROUND_HELP_1", - "SCRIPT_COMMAND_ARITHMETIC_OTHER_ROUND_HELP_2", - "", - "SCRIPT_COMMAND_ARITHMETIC_OTHER_ROUND_HELP_3" - }; - } - - @Override - public Material material() { - return Material.REDSTONE_TORCH; - } - - @Override - public String command() { - return "round"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - if (command.length <= 1) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_FIRST_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - if (command.length <= 2) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_SECOND_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - - Value v1; - Value v2; - if (command.length == 3) { - v1 = scriptExecutor.getOrItselfValue(command[command.length - 1]); - v2 = new Value.LongValue(0); - } else { - v1 = scriptExecutor.getOrItselfValue(command[command.length - 2]); - v2 = scriptExecutor.getOrItselfValue(command[command.length - 1]); - } - if (!(v1 instanceof Value.DoubleValue)) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ARITHMETIC_OTHER_ROUND_ERROR_1", scriptExecutor.getPlayer()); - return true; - } - if (!(v2 instanceof Value.LongValue)) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ARITHMETIC_OTHER_ROUND_ERROR_2", scriptExecutor.getPlayer()); - return true; - } - if (v2.asLong() < 0) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ARITHMETIC_OTHER_ROUND_ERROR_2", scriptExecutor.getPlayer()); - return true; - } - - if (v2.asLong() == 0) { - scriptExecutor.getLocalVariables().putValue(command[1], new Value.LongValue(Math.round(v1.asDouble()))); - } else { - double pow = Math.pow(10, v2.asLong()); - scriptExecutor.getLocalVariables().putValue(command[1], new Value.DoubleValue(Math.round(v1.asDouble() * pow) / pow)); - } - return true; - } - - private TokenType[][] syntax = { - { TokenType.variable, TokenType.variable }, - { TokenType.variable, TokenType.floating_number_type }, - { TokenType.variable, TokenType.variable, TokenType.number_type }, - { TokenType.variable, TokenType.floating_number_type, TokenType.number_type }, - { TokenType.variable, TokenType.variable, TokenType.variable }, - { TokenType.variable, TokenType.floating_number_type, TokenType.variable }, - }; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/io/Echo.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/io/Echo.java deleted file mode 100644 index da83635c..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/io/Echo.java +++ /dev/null @@ -1,62 +0,0 @@ -package de.steamwar.bausystem.features.script.command.io; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.linkage.Linked; -import net.md_5.bungee.api.ChatColor; -import org.bukkit.Material; - -@Linked -public class Echo implements SpecialCommand { - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_IO_ECHO_HELP_1", - "", - "SCRIPT_COMMAND_IO_ECHO_HELP_2" - }; - } - - @Override - public Material material() { - return Material.OAK_SIGN; - } - - @Override - public String command() { - return "echo"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - if (command.length <= 1) { - scriptExecutor.getEchoConsumer().accept(""); - return true; - } - StringBuilder st = new StringBuilder(); - for (int i = 1; i < command.length; i++) { - if (i != 1) { - st.append(" "); - } - st.append(command[i]); - } - scriptExecutor.getEchoConsumer().accept(ChatColor.translateAlternateColorCodes('&', st.toString())); - return true; - } - - @Override - public boolean repeating() { - return true; - } - - private TokenType[][] syntax = { - { TokenType.any }, - }; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/io/Echoactionbar.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/io/Echoactionbar.java deleted file mode 100644 index c5c99240..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/io/Echoactionbar.java +++ /dev/null @@ -1,62 +0,0 @@ -package de.steamwar.bausystem.features.script.command.io; - -import de.steamwar.bausystem.SWUtils; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.linkage.Linked; -import net.md_5.bungee.api.ChatColor; -import org.bukkit.Material; - -@Linked -public class Echoactionbar implements SpecialCommand { - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_IO_ECHOACTIONBAR_HELP_1", - "", - "SCRIPT_COMMAND_IO_ECHOACTIONBAR_HELP_2" - }; - } - - @Override - public Material material() { - return Material.BIRCH_SIGN; - } - - @Override - public String command() { - return "echoactionbar"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - if (command.length <= 1) { - SWUtils.sendToActionbar(scriptExecutor.getPlayer(), ""); - return true; - } - StringBuilder st = new StringBuilder(); - for (int i = 1; i < command.length; i++) { - if (i != 1) { - st.append(" "); - } - st.append(command[i]); - } - SWUtils.sendToActionbar(scriptExecutor.getPlayer(), ChatColor.translateAlternateColorCodes('&', st.toString())); - return true; - } - - @Override - public boolean repeating() { - return true; - } - - private TokenType[][] syntax = { - { TokenType.any }, - }; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/io/Input.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/io/Input.java deleted file mode 100644 index 4ecb4237..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/io/Input.java +++ /dev/null @@ -1,79 +0,0 @@ -package de.steamwar.bausystem.features.script.command.io; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.inventory.SWAnvilInv; -import de.steamwar.linkage.Linked; -import org.bukkit.ChatColor; -import org.bukkit.Material; - -@Linked -public class Input implements SpecialCommand { - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_IO_INPUT_HELP_1", - "", - "SCRIPT_COMMAND_IO_INPUT_HELP_2" - }; - } - - @Override - public Material material() { - return Material.ANVIL; - } - - @Override - public String command() { - return "input"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - if (command.length <= 1) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_FIRST_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - StringBuilder st = new StringBuilder(); - for (int i = 2; i < command.length; i++) { - if (i != 2) { - st.append(" "); - } - st.append(command[i]); - } - SWAnvilInv swAnvilInv = new SWAnvilInv(scriptExecutor.getPlayer(), ChatColor.translateAlternateColorCodes('&', st.toString())); - swAnvilInv.setCallback(s -> { - try { - long value = Long.parseLong(s); - scriptExecutor.getLocalVariables().putValue(command[1], new Value.LongValue(value)); - } catch (NumberFormatException e) { - if (s.equalsIgnoreCase("true") || s.equalsIgnoreCase("false")) { - scriptExecutor.getLocalVariables().putValue(command[1], new Value.BooleanValue(s.equalsIgnoreCase("true"))); - } else { - scriptExecutor.getLocalVariables().putValue(command[1], new Value.StringValue(s)); - } - } - scriptExecutor.resume(); - }); - swAnvilInv.addCloseCallback(scriptExecutor::resume); - swAnvilInv.open(); - return false; - } - - @Override - public boolean repeating() { - return true; - } - - private TokenType[][] syntax = { - { TokenType.variable, TokenType.any }, - }; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/string/Insert.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/string/Insert.java deleted file mode 100644 index 00dbf597..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/string/Insert.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2021 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 . - */ - -package de.steamwar.bausystem.features.script.command.string; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; -import org.bukkit.Material; - -@Linked -public class Insert implements SpecialCommand { - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_STRING_INSERT_HELP_1", - "SCRIPT_COMMAND_STRING_INSERT_HELP_2", - "", - "SCRIPT_COMMAND_STRING_INSERT_HELP_3" - }; - } - - @Override - public Material material() { - return Material.HOPPER; - } - - @Override - public String command() { - return "insert"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - if (command.length <= 1) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_FIRST_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - if (command.length <= 2) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_SECOND_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - if (command.length <= 3) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_THIRD_ARG_NOVAR_OR_NUMBER", scriptExecutor.getPlayer()); - return true; - } - - String resultName = command[1]; - Value v1 = scriptExecutor.getOrItselfValue(command[command.length - 3]); - Value v2 = scriptExecutor.getOrItselfValue(command[command.length - 2]); - Value v3 = scriptExecutor.getOrItselfValue(command[command.length - 1]); - - if (!(v1 instanceof Value.StringValue)) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_ONLY_STRINGS_ALLOWED", scriptExecutor.getPlayer()); - return true; - } - if (!(v2 instanceof Value.StringValue)) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_ONLY_STRINGS_ALLOWED", scriptExecutor.getPlayer()); - return true; - } - if (!(v3 instanceof Value.LongValue)) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_ONLY_NUMBERS_ALLOWED", scriptExecutor.getPlayer()); - return true; - } - - scriptExecutor.getLocalVariables().putValue(resultName, new Value.StringValue(new StringBuilder(v1.asString()).insert((int) v3.asLong(), v2.asString()).toString())); - return true; - } - - private TokenType[][] syntax = { - { TokenType.variable, TokenType.variable, TokenType.number_type }, - { TokenType.variable, TokenType.variable, TokenType.variable, TokenType.number_type }, - }; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/string/Remove.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/string/Remove.java deleted file mode 100644 index 002fd3c5..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/string/Remove.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2021 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 . - */ - -package de.steamwar.bausystem.features.script.command.string; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; -import org.bukkit.Material; - -@Linked -public class Remove implements SpecialCommand { - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_STRING_REMOVE_HELP_1", - "SCRIPT_COMMAND_STRING_REMOVE_HELP_2", - "", - "SCRIPT_COMMAND_STRING_REMOVE_HELP_3" - }; - } - - @Override - public Material material() { - return Material.SHEARS; - } - - @Override - public String command() { - return "remove"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - if (command.length <= 1) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_FIRST_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - if (command.length <= 2) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_SECOND_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - - String resultName = command[1]; - Value v1 = scriptExecutor.getOrItselfValue(command[command.length - 2]); - Value v2 = scriptExecutor.getOrItselfValue(command[command.length - 1]); - - if (!(v1 instanceof Value.StringValue)) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_ONLY_STRINGS_ALLOWED", scriptExecutor.getPlayer()); - return true; - } - if (!(v2 instanceof Value.StringValue)) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_ONLY_STRINGS_ALLOWED", scriptExecutor.getPlayer()); - return true; - } - - scriptExecutor.getLocalVariables().putValue(resultName, new Value.StringValue(v1.asString().replace(v2.asString(), ""))); - return true; - } - - private TokenType[][] syntax = { - { TokenType.variable, TokenType.variable }, - { TokenType.variable, TokenType.variable, TokenType.variable }, - }; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/string/Replace.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/string/Replace.java deleted file mode 100644 index a7a5716f..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/string/Replace.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2021 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 . - */ - -package de.steamwar.bausystem.features.script.command.string; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; -import org.bukkit.Material; - -@Linked -public class Replace implements SpecialCommand { - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_STRING_REPLACE_HELP_1", - "SCRIPT_COMMAND_STRING_REPLACE_HELP_2", - "", - "SCRIPT_COMMAND_STRING_REPLACE_HELP_3" - }; - } - - @Override - public Material material() { - return Material.WOODEN_AXE; - } - - @Override - public String command() { - return "replace"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - if (command.length <= 1) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_FIRST_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - if (command.length <= 2) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_SECOND_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - if (command.length <= 3) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_THIRD_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - - String resultName = command[1]; - Value v1 = scriptExecutor.getOrItselfValue(command[command.length - 3]); - Value v2 = scriptExecutor.getOrItselfValue(command[command.length - 2]); - Value v3 = scriptExecutor.getOrItselfValue(command[command.length - 1]); - - if (!(v1 instanceof Value.StringValue)) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_ONLY_STRINGS_ALLOWED", scriptExecutor.getPlayer()); - return true; - } - if (!(v2 instanceof Value.StringValue)) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_ONLY_STRINGS_ALLOWED", scriptExecutor.getPlayer()); - return true; - } - if (!(v3 instanceof Value.StringValue)) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_ONLY_STRINGS_ALLOWED", scriptExecutor.getPlayer()); - return true; - } - - scriptExecutor.getLocalVariables().putValue(resultName, new Value.StringValue(v1.asString().replace(v2.asString(), v3.asString()))); - return true; - } - - private TokenType[][] syntax = { - { TokenType.variable, TokenType.variable, TokenType.variable }, - { TokenType.variable, TokenType.variable, TokenType.variable, TokenType.variable }, - }; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/string/Substring.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/string/Substring.java deleted file mode 100644 index 8624cae1..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/string/Substring.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2021 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 . - */ - -package de.steamwar.bausystem.features.script.command.string; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; -import org.bukkit.Material; - -@Linked -public class Substring implements SpecialCommand { - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_STRING_SUBSTRING_HELP_1", - "SCRIPT_COMMAND_STRING_SUBSTRING_HELP_2", - "", - "SCRIPT_COMMAND_STRING_SUBSTRING_HELP_3" - }; - } - - @Override - public Material material() { - return Material.STICKY_PISTON; - } - - @Override - public String command() { - return "substring"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - if (command.length <= 1) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_FIRST_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - if (command.length <= 2) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_SECOND_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - - String resultName = command[1]; - Value v1 = scriptExecutor.getOrItselfValue(command[command.length - 2]); - Value v2 = scriptExecutor.getOrItselfValue(command[command.length - 1]); - - if (!(v1 instanceof Value.StringValue)) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_ONLY_STRINGS_ALLOWED", scriptExecutor.getPlayer()); - return true; - } - if (!(v2 instanceof Value.LongValue)) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_ONLY_NUMBERS_ALLOWED", scriptExecutor.getPlayer()); - return true; - } - - Value result; - try { - if (v2.asLong() < 0) { - result = new Value.StringValue(v1.asString().substring(v1.asString().length() - 1 - (int) v2.asLong())); - } else { - result = new Value.StringValue(v1.asString().substring((int) v2.asLong())); - } - } catch (ArrayIndexOutOfBoundsException | StringIndexOutOfBoundsException e) { - result = new Value.StringValue(""); - } - scriptExecutor.getLocalVariables().putValue(resultName, result); - return true; - } - - private TokenType[][] syntax = { - { TokenType.variable, TokenType.number_type }, - { TokenType.variable, TokenType.variable, TokenType.number_type }, - }; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Const.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Const.java deleted file mode 100644 index 850a6642..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Const.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2021 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 . - */ - -package de.steamwar.bausystem.features.script.command.variable; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.bausystem.features.script.variables.Constants; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; -import org.bukkit.Material; - -@Linked -public class Const implements SpecialCommand { - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_VARIABLE_CONST_HELP_1", - "", - "SCRIPT_COMMAND_VARIABLE_CONST_HELP_2" - }; - } - - @Override - public Material material() { - return Material.STRUCTURE_BLOCK; - } - - @Override - public String command() { - return "const"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - if (command.length <= 1) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_FIRST_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - if (command.length <= 2) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_SECOND_ARG_NOVALUE", scriptExecutor.getPlayer()); - return true; - } - String varName = command[1]; - StringBuilder varValue = new StringBuilder(); - for (int i = 2; i < command.length; i++) { - if (varValue.length() != 0) { - varValue.append(" "); - } - varValue.append(command[i]); - } - Constants.getConstant(varName, scriptExecutor.getPlayer()).fromValue(Value.parse(varValue.toString())); - return true; - } - - @Override - public boolean repeating() { - return true; - } - - private TokenType[][] syntax = { - { TokenType.variable, TokenType.any }, - }; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Convert.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Convert.java deleted file mode 100644 index a99c0bb6..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Convert.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2021 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 . - */ - -package de.steamwar.bausystem.features.script.command.variable; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; -import org.bukkit.Material; - -@Linked -public class Convert implements SpecialCommand { - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_VARIABLE_CONVERT_HELP_1", - "", - "SCRIPT_COMMAND_VARIABLE_CONVERT_HELP_2", - }; - } - - @Override - public Material material() { - return Material.ENDER_CHEST; - } - - @Override - public String command() { - return "convert"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - if (command.length <= 1) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_FIRST_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - if (command.length <= 2) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_SECOND_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - - scriptExecutor.getLocalVariables().putValue(command[1], Value.parse(command[2])); - return true; - } - - private TokenType[][] syntax = { - { TokenType.variable, TokenType.any }, - }; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Global.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Global.java deleted file mode 100644 index ae3f33a7..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Global.java +++ /dev/null @@ -1,67 +0,0 @@ -package de.steamwar.bausystem.features.script.command.variable; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; -import org.bukkit.Material; - -@Linked -public class Global implements SpecialCommand { - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_VARIABLE_GLOBAL_HELP_1", - "", - "SCRIPT_COMMAND_VARIABLE_GLOBAL_HELP_2" - }; - } - - @Override - public Material material() { - return Material.MAP; - } - - @Override - public String command() { - return "global"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - if (command.length <= 1) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_FIRST_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - if (command.length <= 2) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_SECOND_ARG_NOVALUE", scriptExecutor.getPlayer()); - return true; - } - String varName = command[1]; - StringBuilder varValue = new StringBuilder(); - for (int i = 2; i < command.length; i++) { - if (varValue.length() != 0) { - varValue.append(" "); - } - varValue.append(command[i]); - } - scriptExecutor.getGlobalVariables().putValue(varName, Value.parse(varValue.toString())); - return true; - } - - @Override - public boolean repeating() { - return true; - } - - private TokenType[][] syntax = { - { TokenType.variable, TokenType.any }, - }; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Unglobal.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Unglobal.java deleted file mode 100644 index 06e9e7b1..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Unglobal.java +++ /dev/null @@ -1,49 +0,0 @@ -package de.steamwar.bausystem.features.script.command.variable; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.linkage.Linked; -import org.bukkit.Material; - -@Linked -public class Unglobal implements SpecialCommand { - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_VARIABLE_UNGLOBAL_HELP_1", - "", - "SCRIPT_COMMAND_VARIABLE_UNGLOBAL_HELP_2" - }; - } - - @Override - public Material material() { - return Material.BEACON; - } - - @Override - public String command() { - return "unglobal"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - if (command.length <= 1) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_FIRST_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - scriptExecutor.getGlobalVariables().removeValue(command[1]); - return true; - } - - private TokenType[][] syntax = { - { TokenType.variable }, - }; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Unvar.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Unvar.java deleted file mode 100644 index 76230f87..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Unvar.java +++ /dev/null @@ -1,49 +0,0 @@ -package de.steamwar.bausystem.features.script.command.variable; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.linkage.Linked; -import org.bukkit.Material; - -@Linked -public class Unvar implements SpecialCommand { - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_VARIABLE_UNVAR_HELP_1", - "", - "SCRIPT_COMMAND_VARIABLE_UNVAR_HELP_2" - }; - } - - @Override - public Material material() { - return Material.STRUCTURE_VOID; - } - - @Override - public String command() { - return "unvar"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - if (command.length <= 1) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_FIRST_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - scriptExecutor.getLocalVariables().removeValue(command[1]); - return true; - } - - private TokenType[][] syntax = { - { TokenType.variable, TokenType.any }, - }; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Var.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Var.java deleted file mode 100644 index 6cda1236..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/variable/Var.java +++ /dev/null @@ -1,67 +0,0 @@ -package de.steamwar.bausystem.features.script.command.variable; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; -import org.bukkit.Material; - -@Linked -public class Var implements SpecialCommand { - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_VARIABLE_VAR_HELP_1", - "", - "SCRIPT_COMMAND_VARIABLE_VAR_HELP_2" - }; - } - - @Override - public Material material() { - return Material.STRUCTURE_BLOCK; - } - - @Override - public String command() { - return "var"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - if (command.length <= 1) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_FIRST_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - if (command.length <= 2) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_SECOND_ARG_NOVALUE", scriptExecutor.getPlayer()); - return true; - } - String varName = command[1]; - StringBuilder varValue = new StringBuilder(); - for (int i = 2; i < command.length; i++) { - if (varValue.length() != 0) { - varValue.append(" "); - } - varValue.append(command[i]); - } - scriptExecutor.getLocalVariables().putValue(varName, Value.parse(varValue.toString())); - return true; - } - - @Override - public boolean repeating() { - return true; - } - - private TokenType[][] syntax = { - { TokenType.variable, TokenType.any }, - }; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/world/GetMaterial.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/world/GetMaterial.java deleted file mode 100644 index e5511e98..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/world/GetMaterial.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2021 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 . - */ - -package de.steamwar.bausystem.features.script.command.world; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.World; - -@Linked -public class GetMaterial implements SpecialCommand { - - private final World world = Bukkit.getWorlds().get(0); - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_WORLD_GETMATERIAL_HELP_1", - "", - "SCRIPT_COMMAND_WORLD_GETMATERIAL_HELP_2" - }; - } - - @Override - public Material material() { - return Material.STICKY_PISTON; - } - - @Override - public String command() { - return "getmaterial"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - if (command.length <= 1) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_FIRST_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - if (command.length <= 2) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_SECOND_ARG_NOVALUE", scriptExecutor.getPlayer()); - return true; - } - if (command.length <= 3) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_THIRD_ARG_NOVALUE", scriptExecutor.getPlayer()); - return true; - } - if (command.length <= 4) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_FOURTH_ARG_NOVALUE", scriptExecutor.getPlayer()); - return true; - } - - int x = (int) scriptExecutor.getOrItselfValue(command[2]).asLong(); - int y = (int) scriptExecutor.getOrItselfValue(command[3]).asLong(); - int z = (int) scriptExecutor.getOrItselfValue(command[4]).asLong(); - scriptExecutor.getLocalVariables().putValue(command[1], new Value.StringValue(world.getBlockAt(x, y, z).getType().name())); - return true; - } - - private TokenType[][] syntax = { - { TokenType.variable, TokenType.number_type, TokenType.number_type, TokenType.number_type } - }; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/world/SetMaterial.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/world/SetMaterial.java deleted file mode 100644 index 1411c708..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/command/world/SetMaterial.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2021 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 . - */ - -package de.steamwar.bausystem.features.script.command.world; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.SpecialCommand; -import de.steamwar.linkage.Linked; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.World; - -@Linked -public class SetMaterial implements SpecialCommand { - - private final World world = Bukkit.getWorlds().get(0); - - @Override - public String[] description() { - return new String[]{ - "SCRIPT_COMMAND_WORLD_SETMATERIAL_HELP_1", - "", - "SCRIPT_COMMAND_WORLD_SETMATERIAL_HELP_2" - }; - } - - @Override - public Material material() { - return Material.PISTON; - } - - @Override - public String command() { - return "setmaterial"; - } - - @Override - public boolean execute(String[] command, ScriptExecutor scriptExecutor) { - if (command.length <= 1) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_FIRST_ARG_NOVAR", scriptExecutor.getPlayer()); - return true; - } - if (command.length <= 2) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_SECOND_ARG_NOVALUE", scriptExecutor.getPlayer()); - return true; - } - if (command.length <= 3) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_THIRD_ARG_NOVALUE", scriptExecutor.getPlayer()); - return true; - } - if (command.length <= 4) { - BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_FOURTH_ARG_NOVALUE", scriptExecutor.getPlayer()); - return true; - } - - int x = (int) scriptExecutor.getOrItselfValue(command[2]).asLong(); - int y = (int) scriptExecutor.getOrItselfValue(command[3]).asLong(); - int z = (int) scriptExecutor.getOrItselfValue(command[4]).asLong(); - try { - world.getBlockAt(x, y, z).setType(Material.valueOf(scriptExecutor.getOrItself(command[1]))); - } catch (Exception e) { - // Ignored - } - return true; - } - - private TokenType[][] syntax = { - { TokenType.variable, TokenType.number_type, TokenType.number_type, TokenType.number_type } - }; - - @Override - public TokenType[][] getSyntax() { - return syntax; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/MenuScript.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/MenuScript.java deleted file mode 100644 index 49befa41..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/MenuScript.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.custom; - -import de.steamwar.inventory.SWItem; -import org.bukkit.entity.Player; -import yapion.hierarchy.types.YAPIONMap; - -public interface MenuScript { - void save(YAPIONMap yapionMap); - SWItem toItem(Player p); -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/Script.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/Script.java deleted file mode 100644 index 17693f8a..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/Script.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.custom; - -public interface Script { -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/command/CommandListener.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/command/CommandListener.java deleted file mode 100644 index 4c2e7ddf..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/command/CommandListener.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.custom.command; - -import de.steamwar.bausystem.features.script.CustomScriptManager; -import de.steamwar.linkage.Linked; -import de.steamwar.linkage.LinkedInstance; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerCommandPreprocessEvent; - - -@Linked -public class CommandListener implements Listener { - - @LinkedInstance - public CustomScriptManager manager; - - @EventHandler - public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent e) { - if (e.getMessage().startsWith("/script:")) { - e.setMessage("/" + e.getMessage().substring(8)); - return; - } - - manager.callCommand(e.getPlayer(), e, e.getMessage()); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/command/CustomCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/command/CustomCommand.java deleted file mode 100644 index b0a7d386..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/command/CustomCommand.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.custom.command; - -import de.steamwar.bausystem.features.script.custom.Script; -import de.steamwar.bausystem.features.script.variables.Value; -import org.bukkit.event.player.PlayerCommandPreprocessEvent; - -import java.util.HashMap; -import java.util.Map; - -public interface CustomCommand extends Script { - String[] command(); - - default Map check(String[] args, String[] command) { - if (args.length < command.length) { - return null; - } - - if (!args[0].equals(command[0])) { - return null; - } - - Map arguments = new HashMap<>(); - if (!check(arguments, args, command, 0, 0)) { - return null; - } - return arguments; - } - - default boolean check(Map arguments, String[] args, String[] command, int argsIndex, int commandIndex) { - if (command.length <= commandIndex) { - for (int i = argsIndex; i < args.length; i++) { - if (!(args[i].startsWith("(") && args[i].endsWith(")"))) { - return false; - } - } - return true; - } - if (args.length <= argsIndex) return true; - - String currentArg = args[argsIndex]; - String currentCommand = command[commandIndex]; - - if (currentArg.startsWith("<") && currentArg.endsWith(">")) { - arguments.put(trim(currentArg, 1), new Value.StringValue(currentCommand)); - return check(arguments, args, command, argsIndex + 1, commandIndex + 1); - } else if (currentArg.startsWith("(<") && currentArg.endsWith(">)")) { - arguments.put(trim(currentArg, 2), new Value.StringValue(currentCommand)); - return check(arguments, args, command, argsIndex + 1, commandIndex + 1); - } else if (currentArg.startsWith("(") && currentArg.endsWith(")")) { - if (!trim(currentArg, 1).equals(currentCommand)) { - arguments.put(trim(currentArg, 1), new Value.BooleanValue(false)); - return check(arguments, args, command, argsIndex + 1, commandIndex); - } else { - arguments.put(trim(currentArg, 1), new Value.BooleanValue(true)); - return check(arguments, args, command, argsIndex + 1, commandIndex + 1); - } - } else { - if (!currentArg.equals(currentCommand)) return false; - return check(arguments, args, command, argsIndex + 1, commandIndex + 1); - } - } - - default String trim(String s, int count) { - return s.substring(count, s.length() - count); - } - - boolean execute(String[] command, PlayerCommandPreprocessEvent e); -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/command/InventoryCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/command/InventoryCommand.java deleted file mode 100644 index 34cfc738..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/command/InventoryCommand.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.custom.command; - -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.variables.Value; -import lombok.RequiredArgsConstructor; -import org.bukkit.event.player.PlayerCommandPreprocessEvent; -import org.bukkit.inventory.meta.BookMeta; - -import java.util.Map; - -@RequiredArgsConstructor -public -class InventoryCommand implements CustomCommand { - public final BookMeta bookMeta; - public final String[] args; - - @Override - public String[] command() { - return args; - } - - public boolean execute(String[] command, PlayerCommandPreprocessEvent e) { - Map arguments = check(args, command); - if (arguments == null) { - return false; - } - - e.setCancelled(true); - new ScriptExecutor(bookMeta, e.getPlayer(), arguments, null); - return true; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/command/MenuCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/command/MenuCommand.java deleted file mode 100644 index 5583f360..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/command/MenuCommand.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.custom.command; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.custom.MenuScript; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.inventory.SWItem; -import lombok.RequiredArgsConstructor; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.player.PlayerCommandPreprocessEvent; -import org.bukkit.inventory.meta.BookMeta; -import yapion.hierarchy.types.YAPIONArray; -import yapion.hierarchy.types.YAPIONMap; - -import java.util.List; -import java.util.Map; - -@RequiredArgsConstructor -public -class MenuCommand implements CustomCommand, MenuScript { - public final List pages; - public final String[] args; - - @Override - public String[] command() { - return args; - } - - public boolean execute(String[] command, PlayerCommandPreprocessEvent e) { - Map arguments = check(args, command); - if (arguments == null) { - return false; - } - - e.setCancelled(true); - new ScriptExecutor(pages, e.getPlayer(), arguments, null); - return true; - } - - public boolean equals(MenuCommand menuCommand) { - if (menuCommand.args.length != args.length) { - return false; - } - if (!args[0].equals(menuCommand.args[0])) { - return false; - } - for (int i = 0; i < args.length; i++) { - if (i == 0) continue; - String s1 = args[i]; - String s2 = menuCommand.args[i]; - if (!s1.equals(s2)) { - return false; - } - if (!(s1.startsWith("<") && s1.endsWith(">") && s2.startsWith("<") && s2.endsWith(">"))) { - return false; - } - if (!(s1.startsWith("(<") && s1.endsWith(">)") && s2.startsWith("(<") && s2.endsWith(">)"))) { - return false; - } - } - return true; - } - - @Override - public void save(YAPIONMap yapionMap) { - YAPIONArray yapionArray = new YAPIONArray(); - pages.forEach(yapionArray::add); - yapionMap.put(String.join(" ", args), yapionArray); - } - - @Override - public SWItem toItem(Player p) { - SWItem swItem = new SWItem(Material.WRITABLE_BOOK, BauSystem.MESSAGE.parse("SCRIPT_COMMAND_ITEM_NAME", p, String.join(" ", args))); - BookMeta bookMeta = (BookMeta) swItem.getItemMeta(); - bookMeta.setPages(pages.toArray(new String[0])); - swItem.setItemMeta(bookMeta); - return swItem; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/event/CustomEvent.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/event/CustomEvent.java deleted file mode 100644 index ec4bebd7..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/event/CustomEvent.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.custom.event; - -import de.steamwar.bausystem.features.script.custom.Script; -import de.steamwar.bausystem.features.script.variables.Value; -import org.bukkit.entity.Player; - -import java.util.Map; -import java.util.function.Consumer; - -public interface CustomEvent extends Script { - - String eventName(); - boolean execute(Player p, Map variables, Consumer echoConsumer); - -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/event/EventType.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/event/EventType.java deleted file mode 100644 index 3a6d471d..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/event/EventType.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.custom.event; - -import de.steamwar.bausystem.features.script.variables.Value; -import lombok.Getter; -import org.bukkit.Location; -import org.bukkit.event.Event; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.entity.EntityDeathEvent; -import org.bukkit.event.entity.EntityExplodeEvent; -import org.bukkit.event.entity.EntitySpawnEvent; -import org.bukkit.event.player.*; - -import java.util.HashMap; -import java.util.Map; -import java.util.function.Function; - -@Getter -public enum EventType { - FF(PlayerSwapHandItemsEvent.class, event -> null), - PlaceBlock(BlockPlaceEvent.class, event -> { - Map valueMap = new HashMap<>(); - addBlockXYZ(valueMap, event.getBlockPlaced().getLocation()); - valueMap.put("blockType", new Value.StringValue(event.getBlockPlaced().getType().name())); - return valueMap; - }), - BreakBlock(BlockBreakEvent.class, event -> { - Map valueMap = new HashMap<>(); - addBlockXYZ(valueMap, event.getBlock().getLocation()); - valueMap.put("blockType", new Value.StringValue(event.getBlock().getType().name())); - return valueMap; - }), - RightClick(PlayerInteractEvent.class, event -> { - Map valueMap = new HashMap<>(); - valueMap.put("blockInHand", new Value.BooleanValue(event.isBlockInHand())); - valueMap.put("action", new Value.StringValue(event.getAction().name())); - valueMap.put("handType", new Value.StringValue(event.getMaterial().name())); - valueMap.put("hasBlock", new Value.BooleanValue(event.hasBlock())); - if (event.hasBlock()) { - addBlockXYZ(valueMap, event.getClickedBlock().getLocation()); - valueMap.put("blockFace", new Value.StringValue(event.getBlockFace().name())); - } - return valueMap; - }), - LeftClick(PlayerInteractEvent.class, event -> { - Map valueMap = new HashMap<>(); - valueMap.put("blockInHand", new Value.BooleanValue(event.isBlockInHand())); - valueMap.put("action", new Value.StringValue(event.getAction().name())); - valueMap.put("handType", new Value.StringValue(event.getMaterial().name())); - valueMap.put("hasBlock", new Value.BooleanValue(event.hasBlock())); - if (event.hasBlock()) { - addBlockXYZ(valueMap, event.getClickedBlock().getLocation()); - valueMap.put("blockFace", new Value.StringValue(event.getBlockFace().name())); - } - return valueMap; - }), - TNTSpawn(EntitySpawnEvent.class, event -> null), - TNTExplode(EntityExplodeEvent.class, event -> { - Map valueMap = new HashMap<>(); - addXYZ(valueMap, event.getLocation()); - return valueMap; - }), - TNTExplodeInBuild(EntityExplodeEvent.class, event -> { - Map valueMap = new HashMap<>(); - addXYZ(valueMap, event.getLocation()); - return valueMap; - }), - SelfJoin(PlayerJoinEvent.class, event -> { - Map valueMap = new HashMap<>(); - addXYZ(valueMap, event.getPlayer().getLocation()); - return valueMap; - }), - SelfLeave(PlayerQuitEvent.class, event -> { - Map valueMap = new HashMap<>(); - addXYZ(valueMap, event.getPlayer().getLocation()); - return valueMap; - }), - DropItem(PlayerDropItemEvent.class, event -> { - Map valueMap = new HashMap<>(); - valueMap.put("material", new Value.StringValue(event.getItemDrop().getItemStack().getType().name())); - addXYZ(valueMap, event.getItemDrop().getLocation()); - return valueMap; - }), - EntityDeath(EntityDeathEvent.class, event -> { - Map valueMap = new HashMap<>(); - valueMap.put("entityType", new Value.StringValue(event.getEntityType().name())); - addXYZ(valueMap, event.getEntity().getLocation()); - return valueMap; - }), - Scoreboard(Event.class, event -> { - return new HashMap<>(); - }), - ; - - private static void addXYZ(Map valueMap, Location location) { - valueMap.put("x", new Value.DoubleValue(location.getX())); - valueMap.put("y", new Value.DoubleValue(location.getY())); - valueMap.put("z", new Value.DoubleValue(location.getZ())); - } - - private static void addBlockXYZ(Map valueMap, Location location) { - valueMap.put("blockX", new Value.LongValue(location.getBlockX())); - valueMap.put("blockY", new Value.LongValue(location.getBlockY())); - valueMap.put("blockZ", new Value.LongValue(location.getBlockZ())); - } - - private Class eventType; - private Function> eventValues; - - EventType(Class eventType, Function> eventValues) { - this.eventType = eventType; - this.eventValues = event -> eventValues.apply((T) event); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/event/InventoryEvent.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/event/InventoryEvent.java deleted file mode 100644 index d323dbc8..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/event/InventoryEvent.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.custom.event; - -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.variables.Value; -import lombok.RequiredArgsConstructor; -import org.bukkit.entity.Player; -import org.bukkit.inventory.meta.BookMeta; - -import java.util.Map; -import java.util.function.Consumer; - -@RequiredArgsConstructor -public -class InventoryEvent implements CustomEvent { - public final BookMeta bookMeta; - public final String[] args; - - @Override - public String eventName() { - return args[0]; - } - - @Override - public boolean execute(Player p, Map variables, Consumer echoConsumer) { - new ScriptExecutor(bookMeta, p, variables, echoConsumer); - return true; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/event/MenuEvent.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/event/MenuEvent.java deleted file mode 100644 index 96a7d6d2..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/event/MenuEvent.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.custom.event; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.custom.MenuScript; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.inventory.SWItem; -import lombok.RequiredArgsConstructor; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.inventory.meta.BookMeta; -import yapion.hierarchy.types.YAPIONArray; -import yapion.hierarchy.types.YAPIONMap; - -import java.util.List; -import java.util.Map; -import java.util.function.Consumer; - -@RequiredArgsConstructor -public -class MenuEvent implements CustomEvent, MenuScript { - public final List pages; - public final String[] args; - - @Override - public String eventName() { - return args[0]; - } - - @Override - public boolean execute(Player p, Map variables, Consumer echoConsumer) { - new ScriptExecutor(pages, p, variables, echoConsumer); - return false; - } - - @Override - public void save(YAPIONMap yapionMap) { - YAPIONArray yapionArray = new YAPIONArray(); - pages.forEach(yapionArray::add); - yapionMap.put(String.join(" ", args), yapionArray); - } - - @Override - public SWItem toItem(Player p) { - StringBuilder st = new StringBuilder(); - for (int i = 1; i < args.length; i++) { - if (i != 1) st.append(" "); - st.append(args[i]); - } - - SWItem swItem = new SWItem(Material.WRITABLE_BOOK, BauSystem.MESSAGE.parse("SCRIPT_EVENT_ITEM_NAME", p, args[0], st.toString())); - BookMeta bookMeta = (BookMeta) swItem.getItemMeta(); - bookMeta.setPages(pages.toArray(new String[0])); - swItem.setItemMeta(bookMeta); - return swItem; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/hotkey/Hotkey.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/hotkey/Hotkey.java deleted file mode 100644 index 2c9bd6c8..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/hotkey/Hotkey.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.custom.hotkey; - -import de.steamwar.bausystem.features.script.custom.Script; -import org.bukkit.entity.Player; - -public interface Hotkey extends Script { - - String hotkey(); - boolean execute(Player p, boolean pressed); -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/hotkey/HotkeyListener.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/hotkey/HotkeyListener.java deleted file mode 100644 index 5f8adadd..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/hotkey/HotkeyListener.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.custom.hotkey; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.CustomScriptManager; -import de.steamwar.linkage.Linked; -import de.steamwar.linkage.LinkedInstance; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.plugin.messaging.PluginMessageListener; - -@Linked -public class HotkeyListener implements PluginMessageListener { - - { - Bukkit.getServer().getMessenger().registerIncomingPluginChannel(BauSystem.getInstance(), "sw:hotkeys", this); - } - - @LinkedInstance - public CustomScriptManager manager; - - @Override - public void onPluginMessageReceived(String channel, Player player, byte[] message) { - if (!channel.equals("sw:hotkeys")) return; - if (message.length < 5) return; - int action = message[4] & 0xFF; - if (action == 2) return; - int key = (message[0] & 0xFF) << 24 | (message[1] & 0xFF) << 16 | (message[2] & 0xFF) << 8 | (message[3] & 0xFF); - if (!(key >= 'A' && key <= 'Z' || key >= '0' && key <= '9')) return; - if (message.length >= 9) { - int mods = (message[5] & 0xFF) << 24 | (message[6] & 0xFF) << 16 | (message[7] & 0xFF) << 8 | (message[8] & 0xFF); - // player.sendMessage("Hotkey: " + (char) key + " " + action + " " + Long.toBinaryString(mods)); - manager.callHotkey(mods, ((char) key), player, action == 1); - } else { - // player.sendMessage("Hotkey: " + (char) key + " " + action); - manager.callHotkey(0, ((char) key), player, action == 1); - } - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/hotkey/Hotkeys.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/hotkey/Hotkeys.java deleted file mode 100644 index 056afaea..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/hotkey/Hotkeys.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.custom.hotkey; - -import java.util.HashSet; -import java.util.Set; - -public interface Hotkeys { - - public static boolean isSame(int mods, char key, String checkAgainst) { - Set modifiers = Modifier.get(mods); - Key k = Key.fromString(key + ""); - if (k == null) { - return false; - } - - try { - String[] split = checkAgainst.split("\\+"); - Set checkModifiers = new HashSet<>(); - Key checkKey = null; - for (String s : split) { - Modifier m = Modifier.fromString(s); - if (m != null) { - checkModifiers.add(m); - } else { - checkKey = Key.fromString(s); - } - } - return checkKey == k && checkModifiers.equals(modifiers); - } catch (Exception e) { - return false; - } - } - - enum Modifier { - SHIFT, - CTRL, - ALT, - META, - ; - - public static Set get(int mods) { - Set modifiers = new HashSet<>(); - for (Modifier modifier : values()) { - if ((mods & (1 << modifier.ordinal())) != 0) { - modifiers.add(modifier); - } - } - return modifiers; - } - - public static Modifier fromString(String string) { - try { - return valueOf(string.toUpperCase()); - } catch (IllegalArgumentException e) { - return null; - } - } - } - - enum Key { - // A-Z - A, - B, - C, - D, - E, - F, - G, - H, - I, - J, - K, - L, - M, - N, - O, - P, - Q, - R, - S, - T, - U, - V, - W, - X, - Y, - Z, - - // 0-9 - NUM_0, - NUM_1, - NUM_2, - NUM_3, - NUM_4, - NUM_5, - NUM_6, - NUM_7, - NUM_8, - NUM_9, - ; - - public static Key fromString(String key) { - key = key.toUpperCase(); - try { - return Key.valueOf(key); - } catch (IllegalArgumentException e) { - // ignore - } - try { - return Key.valueOf("NUM_" + key); - } catch (IllegalArgumentException e) { - // ignore - } - return null; - } - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/hotkey/InventoryHotkey.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/hotkey/InventoryHotkey.java deleted file mode 100644 index f467e460..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/hotkey/InventoryHotkey.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.custom.hotkey; - -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.variables.Value; -import lombok.RequiredArgsConstructor; -import org.bukkit.entity.Player; -import org.bukkit.inventory.meta.BookMeta; - -import java.util.HashMap; -import java.util.Map; - -@RequiredArgsConstructor -public -class InventoryHotkey implements Hotkey { - - public final BookMeta bookMeta; - public final String[] args; - - @Override - public String hotkey() { - return args[0]; - } - - @Override - public boolean execute(Player p, boolean pressed) { - Map variables = new HashMap<>(); - variables.put("pressed", new Value.BooleanValue(pressed)); - variables.put("released", new Value.BooleanValue(!pressed)); - new ScriptExecutor(bookMeta, p, variables, null); - return false; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/hotkey/MenuHotkey.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/hotkey/MenuHotkey.java deleted file mode 100644 index 0407f621..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/hotkey/MenuHotkey.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.custom.hotkey; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.custom.MenuScript; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.inventory.SWItem; -import lombok.RequiredArgsConstructor; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.inventory.meta.BookMeta; -import yapion.hierarchy.types.YAPIONArray; -import yapion.hierarchy.types.YAPIONMap; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@RequiredArgsConstructor -public -class MenuHotkey implements Hotkey, MenuScript { - - public final List pages; - public final String[] args; - - @Override - public String hotkey() { - return args[0]; - } - - @Override - public boolean execute(Player p, boolean pressed) { - Map variables = new HashMap<>(); - variables.put("pressed", new Value.BooleanValue(pressed)); - variables.put("released", new Value.BooleanValue(!pressed)); - new ScriptExecutor(pages, p, variables, null); - return false; - } - - @Override - public void save(YAPIONMap yapionMap) { - YAPIONArray yapionArray = new YAPIONArray(); - pages.forEach(yapionArray::add); - yapionMap.put(String.join(" ", args), yapionArray); - } - - @Override - public SWItem toItem(Player p) { - StringBuilder st = new StringBuilder(); - for (int i = 1; i < args.length; i++) { - if (i != 1) st.append(" "); - st.append(args[i]); - } - - SWItem swItem = new SWItem(Material.WRITABLE_BOOK, BauSystem.MESSAGE.parse("SCRIPT_HOTKEY_ITEM_NAME", p, args[0], st.toString())); - BookMeta bookMeta = (BookMeta) swItem.getItemMeta(); - bookMeta.setPages(pages.toArray(new String[0])); - swItem.setItemMeta(bookMeta); - return swItem; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/CommandListener.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/CommandListener.java new file mode 100644 index 00000000..e0602616 --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/CommandListener.java @@ -0,0 +1,22 @@ +package de.steamwar.bausystem.features.script.event; + +import de.steamwar.bausystem.features.script.ScriptRunner; +import de.steamwar.linkage.Linked; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.luaj.vm2.LuaValue; + +@Linked +public class CommandListener implements Listener { + + @EventHandler + public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { + String[] split = event.getMessage().split(" "); + LuaValue[] values = new LuaValue[split.length - 1]; + for (int i = 1; i < split.length; i++) { + values[i - 1] = LuaValue.valueOf(split[i]); + } + ScriptRunner.callCommand(event.getPlayer(), split[0].substring(1), LuaValue.listOf(values)); + } +} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/event/EventListener.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/EventListener.java similarity index 52% rename from BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/event/EventListener.java rename to BauSystem_Main/src/de/steamwar/bausystem/features/script/event/EventListener.java index 4ee1a97d..3a43a83d 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/custom/event/EventListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/EventListener.java @@ -1,31 +1,12 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.custom.event; +package de.steamwar.bausystem.features.script.event; import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.script.CustomScriptManager; +import de.steamwar.bausystem.features.script.ScriptRunner; +import de.steamwar.bausystem.features.script.lua.SteamWarGlobalLuaPlugin; import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.utils.RegionExtensionType; import de.steamwar.bausystem.region.utils.RegionType; import de.steamwar.linkage.Linked; -import de.steamwar.linkage.LinkedInstance; import org.bukkit.Bukkit; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; @@ -39,6 +20,8 @@ import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntitySpawnEvent; import org.bukkit.event.player.*; +import org.luaj.vm2.LuaTable; +import org.luaj.vm2.LuaValue; import java.util.HashMap; import java.util.HashSet; @@ -48,9 +31,6 @@ import java.util.Set; @Linked public class EventListener implements Listener { - @LinkedInstance - public CustomScriptManager manager; - private static final Map LAST_FS = new HashMap<>(); { @@ -61,18 +41,18 @@ public class EventListener implements Listener { @EventHandler(priority = EventPriority.MONITOR) public void onPlayerJoin(PlayerJoinEvent event) { - manager.callEvent(EventType.SelfJoin, event.getPlayer(), event); + ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.SelfJoin, LuaValue.NIL); } @EventHandler public void onPlayerQuit(PlayerQuitEvent event) { - manager.callEvent(EventType.SelfLeave, event.getPlayer(), event); + ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.SelfLeave, LuaValue.NIL); } @EventHandler public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) { if (LAST_FS.containsKey(event.getPlayer())) { - manager.callEvent(EventType.FF, event.getPlayer(), event); + ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.FF, LuaValue.NIL); } else { LAST_FS.put(event.getPlayer(), System.currentTimeMillis()); } @@ -80,12 +60,22 @@ public class EventListener implements Listener { @EventHandler public void onBlockPlace(BlockPlaceEvent event) { - manager.callEvent(EventType.PlaceBlock, event.getPlayer(), event); + LuaTable table = new LuaTable(); + table.set("x", event.getBlock().getX()); + table.set("y", event.getBlock().getY()); + table.set("z", event.getBlock().getZ()); + table.set("type", event.getBlock().getType().name()); + ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.PlaceBlock, table); } @EventHandler public void onBlockBreak(BlockBreakEvent event) { - manager.callEvent(EventType.BreakBlock, event.getPlayer(), event); + LuaTable table = new LuaTable(); + table.set("x", event.getBlock().getX()); + table.set("y", event.getBlock().getY()); + table.set("z", event.getBlock().getZ()); + table.set("type", event.getBlock().getType().name()); + ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.BreakBlock, table); } private Set ignore = new HashSet<>(); @@ -95,11 +85,25 @@ public class EventListener implements Listener { if (ignore.remove(event.getPlayer())) { return; } + LuaTable table = new LuaTable(); + table.set("action", event.getAction().name()); + table.set("hand", event.getHand().name()); + table.set("block", event.getItem().getType().name()); + if(event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.LEFT_CLICK_BLOCK) { + table.set("hasBlock", LuaValue.valueOf(true)); + table.set("blockX", event.getClickedBlock().getX()); + table.set("blockY", event.getClickedBlock().getY()); + table.set("blockZ", event.getClickedBlock().getZ()); + table.set("blockFace", event.getBlockFace().name()); + } else { + table.set("hasBlock", LuaValue.valueOf(false)); + } + if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) { - manager.callEvent(EventType.RightClick, event.getPlayer(), event); + ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.RightClick, table); } if (event.getAction() == Action.LEFT_CLICK_AIR || event.getAction() == Action.LEFT_CLICK_BLOCK) { - manager.callEvent(EventType.LeftClick, event.getPlayer(), event); + ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.LeftClick, table); } } @@ -112,7 +116,7 @@ public class EventListener implements Listener { for (Player player : Bukkit.getOnlinePlayers()) { if (tntRegion.inRegion(player.getLocation(), RegionType.NORMAL, RegionExtensionType.NORMAL)) { - manager.callEvent(EventType.TNTSpawn, player, event); + ScriptRunner.callEvent(player, SteamWarGlobalLuaPlugin.EventType.TNTSpawn, LuaValue.NIL); } } } @@ -124,9 +128,14 @@ public class EventListener implements Listener { } Region tntRegion = Region.getRegion(event.getLocation()); + LuaTable table = new LuaTable(); + table.set("x", event.getLocation().getX()); + table.set("y", event.getLocation().getY()); + table.set("z", event.getLocation().getZ()); + for (Player player : Bukkit.getOnlinePlayers()) { if (tntRegion.inRegion(player.getLocation(), RegionType.NORMAL, RegionExtensionType.NORMAL)) { - manager.callEvent(EventType.TNTExplode, player, event); + ScriptRunner.callEvent(player, SteamWarGlobalLuaPlugin.EventType.TNTExplode, table); } } } @@ -134,13 +143,17 @@ public class EventListener implements Listener { @EventHandler public void onPlayerDropItem(PlayerDropItemEvent event) { ignore.add(event.getPlayer()); - manager.callEvent(EventType.DropItem, event.getPlayer(), event); + LuaTable table = new LuaTable(); + table.set("type", event.getItemDrop().getItemStack().getType().name()); + ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.DropItem, table); } @EventHandler public void onEntityDeath(EntityDeathEvent event) { for (Player player : Bukkit.getOnlinePlayers()) { - manager.callEvent(EventType.EntityDeath, player, event); + LuaTable table = new LuaTable(); + table.set("type", event.getEntityType().name()); + ScriptRunner.callEvent(player, SteamWarGlobalLuaPlugin.EventType.EntityDeath, table); } } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/Expression.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/Expression.java deleted file mode 100644 index 9bf807fb..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/Expression.java +++ /dev/null @@ -1,242 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression; - -import de.steamwar.bausystem.features.script.ScriptExecutor; -import de.steamwar.bausystem.features.script.variables.Constants; -import de.steamwar.bausystem.features.script.variables.Value; -import org.bukkit.entity.Player; - -import java.util.*; - -public class Expression { - - private static int highestPrecedence = 1; - - public static final Map OPERATORS = new HashMap<>(); - - public static void registerOperator(Operator operator) { - highestPrecedence = Math.max(highestPrecedence, operator.getPriority()) + 1; - OPERATORS.put(operator.getOperator(), operator); - } - - private Player p; - private ScriptExecutor scriptExecutor; - - private String s; - - public Expression(Player p, String s, ScriptExecutor scriptExecutor) { - s = s.substring(1, s.length() - 1); - this.p = p; - this.s = s; - this.scriptExecutor = scriptExecutor; - } - - public Value eval() { - List tokens = new ArrayList<>(tokenize(s)); - List priorities = priorities(tokens); - - while (true) { - int toCalc = getToCalc(priorities); - if (priorities.get(toCalc) == 0) break; - if (priorities.get(toCalc) == highestPrecedence) { - String s = (String) tokens.get(toCalc); - if (s.equalsIgnoreCase("true") || s.equalsIgnoreCase("false")) { - tokens.set(toCalc, new Value.BooleanValue(Boolean.parseBoolean(s))); - priorities.set(toCalc, 0); - continue; - } - String[] strings = s.split("\\."); - if (strings.length == 1) { - Value value = scriptExecutor.getValueOrNull(strings[0]); - if (value == null) { - throw new VarNotFoundException(strings[0]); - } - tokens.set(toCalc, value); - priorities.set(toCalc, 0); - } else { - boolean searchGlobal = false; - boolean searchConst = false; - boolean searchLocal = false; - if (strings[0].equals("global")) { - searchGlobal = true; - strings = Arrays.copyOfRange(strings, 1, strings.length); - } else if (strings[0].equals("const")) { - searchConst = true; - strings = Arrays.copyOfRange(strings, 1, strings.length); - } else if (strings[0].equals("local")) { - searchLocal = true; - strings = Arrays.copyOfRange(strings, 1, strings.length); - } - String varName = strings[0]; - Value value; - if (searchGlobal) { - value = scriptExecutor.getGlobalVariables().getValue(varName); - } else if (searchConst) { - value = Constants.getConstant(varName, p); - } else if (searchLocal) { - value = scriptExecutor.getLocalVariables().getValue(varName); - } else { - value = scriptExecutor.getValueOrNull(varName); - } - for (int i = 1; i < strings.length; i++) { - switch (strings[i]) { - case "isset": - value = new Value.BooleanValue(value != null); - break; - case "type": - value = new Value.StringValue(value == null ? "" : value.type()); - break; - case "length": - value = new Value.LongValue(value == null ? 0 : value.asString().length()); - break; - } - } - if (value == null) { - throw new VarNotFoundException(strings[0]); - } - tokens.set(toCalc, value); - priorities.set(toCalc, 0); - } - } else { - Value first = parse(tokens.get(toCalc - 1)); - Value second = parse(tokens.get(toCalc + 1)); - String op = (String) tokens.get(toCalc); - Operator operation = OPERATORS.get(op); - if (operation == null) { - throw new UnknownOperatorException(op); - } - Value result = operation.operate(first, second); - tokens.set(toCalc - 1, result); - tokens.remove(toCalc); - tokens.remove(toCalc); - priorities.remove(toCalc); - priorities.remove(toCalc); - priorities.set(toCalc - 1, 0); - } - } - - return parse(tokens.get(0)); - } - - private Value parse(Object token) { - if (token instanceof Value) { - return (Value) token; - } else if (token instanceof String) { - String s = (String) token; - if (s.startsWith("{") && s.endsWith("}")) { - return new Expression(p, s, scriptExecutor).eval(); - } else { - return Value.parse(s); - } - } else { - throw new IllegalArgumentException("Unknown token: " + token); - } - } - - private String getExpressionString(String s, int index) { - StringBuilder result = new StringBuilder(); - int depth = 0; - for (int i = index; i < s.length(); i++) { - char c = s.charAt(i); - if (c == '{') { - depth++; - } else if (c == '}') { - result.append(c); - depth--; - if (depth == 0) { - return result.toString(); - } - } - if (depth > 0) { - result.append(c); - } - } - return result.toString(); - } - - private List tokenize(String s) { - List tokens = new ArrayList<>(); - StringBuilder token = new StringBuilder(); - for (int i = 0; i < s.length(); i++) { - char c = s.charAt(i); - if (c == ' ') continue; - if (c == '{') { - String subExpression = getExpressionString(s, i); - tokens.add(subExpression); - i += subExpression.length() - 1; - continue; - } - StringBuilder op = new StringBuilder(); - for (int j = i; j < s.length(); j++) { - char k = s.charAt(j); - if (k == '+' || k == '-' || k == '*' || k == '/' || k == '%' || k == '^' || k == '&' || k == '|' || k == '>' || k == '<' || k == '=' || k == '!') { - op.append(k); - } else { - break; - } - } - if (op.length() > 0) { - if (token.length() > 0) { - tokens.add(token.toString()); - token = new StringBuilder(); - } - tokens.add(op.toString()); - i += op.length() - 1; - continue; - } - token.append(c); - } - if (token.length() > 0) { - tokens.add(token.toString()); - } - return tokens; - } - - private List priorities(List tokens) { - List priorities = new ArrayList<>(); - for (Object obj : tokens) { - String token = (String) obj; - Operator operator = OPERATORS.get(token); - if (token.startsWith("{") && token.endsWith("}")) { - priorities.add(0); - } else if (!token.matches("[0-9]+([.,][0-9]+)?") && operator == null) { - priorities.add(highestPrecedence); - } else if (operator != null) { - priorities.add(operator.getPriority()); - } else { - priorities.add(0); - } - } - return priorities; - } - - private int getToCalc(List priorities) { - int max = 0; - int index = 0; - for (int i = 0; i < priorities.size(); i++) { - if (priorities.get(i) > max) { - max = priorities.get(i); - index = i; - } - } - return index; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/Operator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/Operator.java deleted file mode 100644 index 6fa67838..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/Operator.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression; - -import de.steamwar.bausystem.features.script.variables.Value; - -public interface Operator { - String getOperator(); - int getPriority(); - Value operate(Value value, Value value2); - - default boolean is(Value value, Class... classes) { - for (Class clazz : classes) { - if (clazz.isInstance(value)) { - return true; - } - } - return false; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/UnknownOperatorException.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/UnknownOperatorException.java deleted file mode 100644 index 163970c2..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/UnknownOperatorException.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression; - -public class UnknownOperatorException extends RuntimeException{ - - public UnknownOperatorException(String message) { - super(message); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/VarNotFoundException.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/VarNotFoundException.java deleted file mode 100644 index a007601d..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/VarNotFoundException.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression; - -public class VarNotFoundException extends RuntimeException{ - - public VarNotFoundException(String message) { - super(message); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/EqualOperator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/EqualOperator.java deleted file mode 100644 index 09ab767c..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/EqualOperator.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression.operator.comparison; - -import de.steamwar.bausystem.features.script.expression.Operator; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; - -@Linked -public class EqualOperator implements Operator { - - @Override - public String getOperator() { - return "=="; - } - - @Override - public int getPriority() { - return 6; - } - - @Override - public Value operate(Value value, Value value2) { - if (value instanceof Value.DoubleValue && value2 instanceof Value.LongValue) { - return new Value.BooleanValue(value.asDouble() == value2.asDouble()); - } - if (value instanceof Value.LongValue && value2 instanceof Value.DoubleValue) { - return new Value.BooleanValue(value.asDouble() == value2.asDouble()); - } - if (!value.type().equals(value2.type())) { - return new Value.BooleanValue(false); - } - if (value instanceof Value.StringValue) { - return new Value.BooleanValue(value.asString().equals(value2.asString())); - } - if (value instanceof Value.DoubleValue) { - return new Value.BooleanValue(value.asDouble() == value2.asDouble()); - } - if (value instanceof Value.LongValue) { - return new Value.BooleanValue(value.asLong() == value2.asLong()); - } - return new Value.BooleanValue(value.asBoolean() == value2.asBoolean()); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/GreaterOperator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/GreaterOperator.java deleted file mode 100644 index 6234e2fb..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/GreaterOperator.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression.operator.comparison; - -import de.steamwar.bausystem.features.script.expression.Operator; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; - -@Linked -public class GreaterOperator implements Operator { - - @Override - public String getOperator() { - return ">"; - } - - @Override - public int getPriority() { - return 7; - } - - @Override - public Value operate(Value value, Value value2) { - if (is(value, Value.StringValue.class, Value.BooleanValue.class) || is(value2, Value.StringValue.class, Value.BooleanValue.class)) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ERROR_NUMBER_COMPARE"); - } - if (value instanceof Value.DoubleValue || value2 instanceof Value.DoubleValue) { - return new Value.BooleanValue(value.asDouble() > value2.asDouble()); - } else { - return new Value.BooleanValue(value.asLong() > value2.asLong()); - } - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/GreaterOrEqualOperator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/GreaterOrEqualOperator.java deleted file mode 100644 index 6320c8a2..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/GreaterOrEqualOperator.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression.operator.comparison; - -import de.steamwar.bausystem.features.script.expression.Operator; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; - -@Linked -public class GreaterOrEqualOperator implements Operator { - - @Override - public String getOperator() { - return ">="; - } - - @Override - public int getPriority() { - return 7; - } - - @Override - public Value operate(Value value, Value value2) { - if (is(value, Value.StringValue.class, Value.BooleanValue.class) || is(value2, Value.StringValue.class, Value.BooleanValue.class)) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ERROR_NUMBER_COMPARE"); - } - if (value instanceof Value.DoubleValue || value2 instanceof Value.DoubleValue) { - return new Value.BooleanValue(value.asDouble() >= value2.asDouble()); - } else { - return new Value.BooleanValue(value.asLong() >= value2.asLong()); - } - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/LessOperator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/LessOperator.java deleted file mode 100644 index 93cd46ed..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/LessOperator.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression.operator.comparison; - -import de.steamwar.bausystem.features.script.expression.Operator; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; - -@Linked -public class LessOperator implements Operator { - - @Override - public String getOperator() { - return "<"; - } - - @Override - public int getPriority() { - return 7; - } - - @Override - public Value operate(Value value, Value value2) { - if (is(value, Value.StringValue.class, Value.BooleanValue.class) || is(value2, Value.StringValue.class, Value.BooleanValue.class)) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ERROR_NUMBER_COMPARE"); - } - if (value instanceof Value.DoubleValue || value2 instanceof Value.DoubleValue) { - return new Value.BooleanValue(value.asDouble() < value2.asDouble()); - } else { - return new Value.BooleanValue(value.asLong() < value2.asLong()); - } - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/LessOrEqualOperator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/LessOrEqualOperator.java deleted file mode 100644 index 5accf5cb..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/LessOrEqualOperator.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression.operator.comparison; - -import de.steamwar.bausystem.features.script.expression.Operator; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; - -@Linked -public class LessOrEqualOperator implements Operator { - - @Override - public String getOperator() { - return "<="; - } - - @Override - public int getPriority() { - return 7; - } - - @Override - public Value operate(Value value, Value value2) { - if (is(value, Value.StringValue.class, Value.BooleanValue.class) || is(value2, Value.StringValue.class, Value.BooleanValue.class)) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ERROR_NUMBER_COMPARE"); - } - if (value instanceof Value.DoubleValue || value2 instanceof Value.DoubleValue) { - return new Value.BooleanValue(value.asDouble() <= value2.asDouble()); - } else { - return new Value.BooleanValue(value.asLong() <= value2.asLong()); - } - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/NotEqualOperator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/NotEqualOperator.java deleted file mode 100644 index b41eea55..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/comparison/NotEqualOperator.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression.operator.comparison; - -import de.steamwar.bausystem.features.script.expression.Operator; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; - -@Linked -public class NotEqualOperator implements Operator { - - @Override - public String getOperator() { - return "!="; - } - - @Override - public int getPriority() { - return 6; - } - - @Override - public Value operate(Value value, Value value2) { - if (value instanceof Value.DoubleValue && value2 instanceof Value.LongValue) { - return new Value.BooleanValue(value.asDouble() != value2.asDouble()); - } - if (value instanceof Value.LongValue && value2 instanceof Value.DoubleValue) { - return new Value.BooleanValue(value.asDouble() != value2.asDouble()); - } - if (!value.type().equals(value2.type())) { - return new Value.BooleanValue(false); - } - if (value instanceof Value.StringValue) { - return new Value.BooleanValue(!value.asString().equals(value2.asString())); - } - if (value instanceof Value.DoubleValue) { - return new Value.BooleanValue(value.asDouble() != value2.asDouble()); - } - if (value instanceof Value.LongValue) { - return new Value.BooleanValue(value.asLong() != value2.asLong()); - } - return new Value.BooleanValue(value.asBoolean() != value2.asBoolean()); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/logic/AndOperator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/logic/AndOperator.java deleted file mode 100644 index ec6b219e..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/logic/AndOperator.java +++ /dev/null @@ -1,47 +0,0 @@ - -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression.operator.logic; - -import de.steamwar.bausystem.features.script.expression.Operator; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; - -@Linked -public class AndOperator implements Operator { - - @Override - public String getOperator() { - return "&&"; - } - - @Override - public int getPriority() { - return 2; - } - - @Override - public Value operate(Value value, Value value2) { - if (is(value, Value.StringValue.class, Value.DoubleValue.class, Value.LongValue.class) || is(value2, Value.StringValue.class, Value.DoubleValue.class, Value.LongValue.class)) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ERROR_BOOLEAN_COMPARE"); - } - return new Value.BooleanValue(value.asBoolean() && value2.asBoolean()); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/logic/BitwiseAndOperator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/logic/BitwiseAndOperator.java deleted file mode 100644 index e269c7fc..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/logic/BitwiseAndOperator.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression.operator.logic; - -import de.steamwar.bausystem.features.script.expression.Operator; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; - -@Linked -public class BitwiseAndOperator implements Operator { - - @Override - public String getOperator() { - return "&"; - } - - @Override - public int getPriority() { - return 5; - } - - @Override - public Value operate(Value value, Value value2) { - if (value instanceof Value.StringValue || value2 instanceof Value.StringValue) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ARITHMETIC_BIT_AND_ERROR"); - } - if (value instanceof Value.DoubleValue || value2 instanceof Value.DoubleValue) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ARITHMETIC_BIT_AND_ERROR"); - } - if (value.getClass() != value2.getClass()) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ARITHMETIC_BIT_AND_ERROR"); - } - if (value instanceof Value.BooleanValue && value2 instanceof Value.BooleanValue) { - return new Value.BooleanValue(value.asBoolean() && value2.asBoolean()); - } - return new Value.LongValue(value.asLong() & value2.asLong()); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/logic/BitwiseOrOperator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/logic/BitwiseOrOperator.java deleted file mode 100644 index 21966f44..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/logic/BitwiseOrOperator.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression.operator.logic; - -import de.steamwar.bausystem.features.script.expression.Operator; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; - -@Linked -public class BitwiseOrOperator implements Operator { - - @Override - public String getOperator() { - return "|"; - } - - @Override - public int getPriority() { - return 4; - } - - @Override - public Value operate(Value value, Value value2) { - if (value instanceof Value.StringValue || value2 instanceof Value.StringValue) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ARITHMETIC_BIT_OR_ERROR"); - } - if (value instanceof Value.DoubleValue || value2 instanceof Value.DoubleValue) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ARITHMETIC_BIT_OR_ERROR"); - } - if (value.getClass() != value2.getClass()) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ARITHMETIC_BIT_OR_ERROR"); - } - if (value instanceof Value.BooleanValue && value2 instanceof Value.BooleanValue) { - return new Value.BooleanValue(value.asBoolean() || value2.asBoolean()); - } - return new Value.LongValue(value.asLong() | value2.asLong()); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/logic/BitwiseXorOperator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/logic/BitwiseXorOperator.java deleted file mode 100644 index f5e02568..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/logic/BitwiseXorOperator.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression.operator.logic; - -import de.steamwar.bausystem.features.script.expression.Operator; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; - -@Linked -public class BitwiseXorOperator implements Operator { - - @Override - public String getOperator() { - return "^"; - } - - @Override - public int getPriority() { - return 3; - } - - @Override - public Value operate(Value value, Value value2) { - if (value instanceof Value.StringValue || value2 instanceof Value.StringValue) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ARITHMETIC_BIT_XOR_ERROR"); - } - if (value instanceof Value.DoubleValue || value2 instanceof Value.DoubleValue) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ARITHMETIC_BIT_XOR_ERROR"); - } - if (value.getClass() != value2.getClass()) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ARITHMETIC_BIT_XOR_ERROR"); - } - if (value instanceof Value.BooleanValue && value2 instanceof Value.BooleanValue) { - return new Value.BooleanValue(value.asBoolean() ^ value2.asBoolean()); - } - return new Value.LongValue(value.asLong() ^ value2.asLong()); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/logic/OrOperator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/logic/OrOperator.java deleted file mode 100644 index 81b63190..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/logic/OrOperator.java +++ /dev/null @@ -1,47 +0,0 @@ - -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression.operator.logic; - -import de.steamwar.bausystem.features.script.expression.Operator; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; - -@Linked -public class OrOperator implements Operator { - - @Override - public String getOperator() { - return "||"; - } - - @Override - public int getPriority() { - return 1; - } - - @Override - public Value operate(Value value, Value value2) { - if (is(value, Value.StringValue.class, Value.DoubleValue.class, Value.LongValue.class) || is(value2, Value.StringValue.class, Value.DoubleValue.class, Value.LongValue.class)) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ERROR_BOOLEAN_COMPARE"); - } - return new Value.BooleanValue(value.asBoolean() || value2.asBoolean()); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/BitwiseLeftOperator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/BitwiseLeftOperator.java deleted file mode 100644 index 172fc2ed..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/BitwiseLeftOperator.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression.operator.math; - -import de.steamwar.bausystem.features.script.expression.Operator; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; - -@Linked -public class BitwiseLeftOperator implements Operator { - - @Override - public String getOperator() { - return "<<"; - } - - @Override - public int getPriority() { - return 8; - } - - @Override - public Value operate(Value value, Value value2) { - if (is(value, Value.StringValue.class, Value.BooleanValue.class, Value.DoubleValue.class) || is(value2, Value.StringValue.class, Value.BooleanValue.class, Value.DoubleValue.class)) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ARITHMETIC_BIT_LEFT_ERROR"); - } - return new Value.LongValue(value.asLong() << value2.asLong()); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/BitwiseLogicRightOperator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/BitwiseLogicRightOperator.java deleted file mode 100644 index cd0952a8..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/BitwiseLogicRightOperator.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression.operator.math; - -import de.steamwar.bausystem.features.script.expression.Operator; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; - -@Linked -public class BitwiseLogicRightOperator implements Operator { - - @Override - public String getOperator() { - return ">>>"; - } - - @Override - public int getPriority() { - return 8; - } - - @Override - public Value operate(Value value, Value value2) { - if (is(value, Value.StringValue.class, Value.BooleanValue.class, Value.DoubleValue.class) || is(value2, Value.StringValue.class, Value.BooleanValue.class, Value.DoubleValue.class)) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ARITHMETIC_BIT_RIGHT_LOGIC_ERROR"); - } - return new Value.LongValue(value.asLong() >>> value2.asLong()); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/BitwiseRightOperator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/BitwiseRightOperator.java deleted file mode 100644 index f260489e..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/BitwiseRightOperator.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression.operator.math; - -import de.steamwar.bausystem.features.script.expression.Operator; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; - -@Linked -public class BitwiseRightOperator implements Operator { - - @Override - public String getOperator() { - return ">>"; - } - - @Override - public int getPriority() { - return 8; - } - - @Override - public Value operate(Value value, Value value2) { - if (is(value, Value.StringValue.class, Value.BooleanValue.class, Value.DoubleValue.class) || is(value2, Value.StringValue.class, Value.BooleanValue.class, Value.DoubleValue.class)) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ARITHMETIC_BIT_RIGHT_ERROR"); - } - return new Value.LongValue(value.asLong() >> value2.asLong()); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/DivideOperator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/DivideOperator.java deleted file mode 100644 index a4ab1c8c..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/DivideOperator.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression.operator.math; - -import de.steamwar.bausystem.features.script.expression.Operator; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; - -@Linked -public class DivideOperator implements Operator { - - @Override - public String getOperator() { - return "/"; - } - - @Override - public int getPriority() { - return 10; - } - - @Override - public Value operate(Value value, Value value2) { - if (is(value, Value.StringValue.class, Value.BooleanValue.class) || is(value2, Value.StringValue.class, Value.BooleanValue.class)) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ARITHMETIC_DIV_ERROR"); - } - if (value2.asDouble() == 0) { - return new Value.DoubleValue(Double.NaN); - } - return new Value.DoubleValue(value.asDouble() / value2.asDouble()); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/MinusOperator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/MinusOperator.java deleted file mode 100644 index 877ce2af..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/MinusOperator.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression.operator.math; - -import de.steamwar.bausystem.features.script.expression.Operator; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; - -@Linked -public class MinusOperator implements Operator { - - @Override - public String getOperator() { - return "-"; - } - - @Override - public int getPriority() { - return 9; - } - - @Override - public Value operate(Value value, Value value2) { - if (is(value, Value.StringValue.class, Value.BooleanValue.class) || is(value2, Value.StringValue.class, Value.BooleanValue.class)) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ARITHMETIC_SUB_ERROR"); - } - if (value instanceof Value.DoubleValue || value2 instanceof Value.DoubleValue) { - return new Value.DoubleValue(value.asDouble() - value2.asDouble()); - } else { - return new Value.LongValue(value.asLong() - value2.asLong()); - } - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/ModuloOperator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/ModuloOperator.java deleted file mode 100644 index af241af4..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/ModuloOperator.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression.operator.math; - -import de.steamwar.bausystem.features.script.expression.Operator; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; - -@Linked -public class ModuloOperator implements Operator { - - @Override - public String getOperator() { - return "%"; - } - - @Override - public int getPriority() { - return 10; - } - - @Override - public Value operate(Value value, Value value2) { - if (value instanceof Value.LongValue && value2 instanceof Value.LongValue) { - return new Value.LongValue(value.asLong() % value2.asLong()); - } - throw new IllegalArgumentException("SCRIPT_COMMAND_ARITHMETIC_MOD_ERROR"); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/MultiplyOperator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/MultiplyOperator.java deleted file mode 100644 index 34a99c5a..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/MultiplyOperator.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression.operator.math; - -import de.steamwar.bausystem.features.script.expression.Operator; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; - -@Linked -public class MultiplyOperator implements Operator { - - @Override - public String getOperator() { - return "*"; - } - - @Override - public int getPriority() { - return 10; - } - - @Override - public Value operate(Value value, Value value2) { - if (is(value, Value.BooleanValue.class) || is(value2, Value.StringValue.class, Value.BooleanValue.class)) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ARITHMETIC_MUL_ERROR"); - } - if (value instanceof Value.StringValue) { - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < value2.asLong(); i++) { - sb.append(value.asString()); - } - return new Value.StringValue(sb.toString()); - } - if (value instanceof Value.DoubleValue || value2 instanceof Value.DoubleValue) { - return new Value.DoubleValue(value.asDouble() * value2.asDouble()); - } else { - return new Value.LongValue(value.asLong() * value2.asLong()); - } - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/PlusOperator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/PlusOperator.java deleted file mode 100644 index 6b92dd84..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/PlusOperator.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression.operator.math; - -import de.steamwar.bausystem.features.script.expression.Operator; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; - -@Linked -public class PlusOperator implements Operator { - - @Override - public String getOperator() { - return "+"; - } - - @Override - public int getPriority() { - return 9; - } - - @Override - public Value operate(Value value, Value value2) { - if (value instanceof Value.BooleanValue || value2 instanceof Value.BooleanValue) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ARITHMETIC_ADD_ERROR"); - } - if (value instanceof Value.StringValue || value2 instanceof Value.StringValue) { - return new Value.StringValue(value.asString() + value2.asString()); - } - if (value instanceof Value.DoubleValue || value2 instanceof Value.DoubleValue) { - return new Value.DoubleValue(value.asDouble() + value2.asDouble()); - } else { - return new Value.LongValue(value.asLong() + value2.asLong()); - } - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/PowerOperator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/PowerOperator.java deleted file mode 100644 index f756a796..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/expression/operator/math/PowerOperator.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 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 . - */ - -package de.steamwar.bausystem.features.script.expression.operator.math; - -import de.steamwar.bausystem.features.script.expression.Operator; -import de.steamwar.bausystem.features.script.variables.Value; -import de.steamwar.linkage.Linked; - -@Linked -public class PowerOperator implements Operator { - - @Override - public String getOperator() { - return "**"; - } - - @Override - public int getPriority() { - return 11; - } - - @Override - public Value operate(Value value, Value value2) { - if (is(value, Value.StringValue.class, Value.BooleanValue.class) || is(value2, Value.StringValue.class, Value.BooleanValue.class)) { - throw new IllegalArgumentException("SCRIPT_COMMAND_ARITHMETIC_POW_ERROR"); - } - return new Value.DoubleValue(Math.pow(value.asDouble(), value2.asDouble())); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/items/ScriptMenuBauGuiItem.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/items/ScriptMenuBauGuiItem.java deleted file mode 100644 index 437b4760..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/items/ScriptMenuBauGuiItem.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2021 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 . - */ - -package de.steamwar.bausystem.features.script.items; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.Permission; -import de.steamwar.bausystem.linkage.specific.BauGuiItem; -import de.steamwar.inventory.SWItem; -import de.steamwar.linkage.Linked; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.ClickType; -import org.bukkit.inventory.ItemStack; - -@Linked -public class ScriptMenuBauGuiItem extends BauGuiItem { - - public ScriptMenuBauGuiItem() { - super(15); - } - - @Override - public ItemStack getItem(Player player) { - return new SWItem(Material.WRITTEN_BOOK, BauSystem.MESSAGE.parse("SCRIPT_GUI_ITEM_NAME", player)).getItemStack(); - } - - @Override - public boolean click(ClickType click, Player p) { - p.closeInventory(); - p.performCommand("script"); - return false; - } - - @Override - public Permission permission() { - return Permission.MEMBER; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/CommandRegister.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/CommandRegister.java new file mode 100644 index 00000000..2e6d9c46 --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/CommandRegister.java @@ -0,0 +1,15 @@ +package de.steamwar.bausystem.features.script.lua; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.luaj.vm2.LuaFunction; + +import java.util.List; + +@AllArgsConstructor +@Getter +public class CommandRegister { + + private final String name; + private final LuaFunction function; +} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarGlobalLuaPlugin.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarGlobalLuaPlugin.java new file mode 100644 index 00000000..544b8af9 --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarGlobalLuaPlugin.java @@ -0,0 +1,74 @@ +package de.steamwar.bausystem.features.script.lua; + +import lombok.AllArgsConstructor; +import org.luaj.vm2.LuaFunction; +import org.luaj.vm2.LuaString; +import org.luaj.vm2.LuaValue; +import org.luaj.vm2.Varargs; +import org.luaj.vm2.lib.TwoArgFunction; +import org.luaj.vm2.lib.VarArgFunction; + +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +@AllArgsConstructor +public class SteamWarGlobalLuaPlugin extends TwoArgFunction { + private final BiConsumer eventConsumer; + private final Consumer commandRegisterConsumer; + + @Override + public LuaValue call(LuaValue modname, LuaValue env) { + LuaValue types = tableOf(); + for (EventType value : EventType.values()) { + types.set(value.name(), value.ordinal()); + } + env.set("type", types); + + + env.set("event", new On()); + env.set("command", new TwoArgFunction() { + @Override + public LuaValue call(LuaValue arg1, LuaValue arg2) { + LuaString command = arg1.checkstring(); + LuaFunction function = arg2.checkfunction(); + + commandRegisterConsumer.accept(new CommandRegister(command.tojstring().toLowerCase(), function)); + + return NIL; + } + }); + return NIL; + } + + class On extends TwoArgFunction { + @Override + public LuaValue call(LuaValue eventName, LuaValue function) { + int ord = eventName.checkint(); + LuaFunction luaFunction = function.checkfunction(); + + int nArgs = luaFunction.narg(); + if (nArgs != 1) { + return LuaValue.valueOf("Expected 1 argument, got " + nArgs); + } + + eventConsumer.accept(EventType.values()[ord], luaFunction); + + return LuaValue.NIL; + } + } + + public enum EventType { + FF, + PlaceBlock, + BreakBlock, + RightClick, + LeftClick, + TNTSpawn, + TNTExplode, + TNTExplodeInBuild, + SelfJoin, + SelfLeave, + DropItem, + EntityDeath; + } +} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarLuaPlugin.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarLuaPlugin.java new file mode 100644 index 00000000..21b24e5e --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarLuaPlugin.java @@ -0,0 +1,144 @@ +package de.steamwar.bausystem.features.script.lua; + +import de.steamwar.bausystem.BauSystem; +import de.steamwar.bausystem.features.loader.Loader; +import de.steamwar.bausystem.features.script.lua.libs.LuaLib; +import de.steamwar.bausystem.features.tpslimit.TPSLimitUtils; +import de.steamwar.bausystem.features.tpslimit.TPSUtils; +import de.steamwar.bausystem.features.tracer.record.ActiveTracer; +import de.steamwar.bausystem.features.tracer.record.AutoTraceRecorder; +import de.steamwar.bausystem.features.tracer.record.Recorder; +import de.steamwar.bausystem.features.tracer.record.TraceRecorder; +import de.steamwar.bausystem.region.flags.Flag; +import de.steamwar.bausystem.region.flags.flagvalues.FireMode; +import de.steamwar.bausystem.region.flags.flagvalues.FreezeMode; +import de.steamwar.bausystem.region.flags.flagvalues.ProtectMode; +import de.steamwar.bausystem.region.flags.flagvalues.TNTMode; +import de.steamwar.core.TPSWatcher; +import de.steamwar.inventory.SWAnvilInv; +import de.steamwar.inventory.SWItem; +import net.md_5.bungee.api.ChatMessageType; +import net.md_5.bungee.api.chat.TextComponent; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.luaj.vm2.*; +import org.luaj.vm2.lib.*; + +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.function.Supplier; + +public class SteamWarLuaPlugin extends TwoArgFunction { + + public static final Map, List> LUA_LIBS = new HashMap<>(); + + public static void add(LuaLib luaLib) { + LUA_LIBS.computeIfAbsent(luaLib.parent(), l -> new ArrayList<>()).add(luaLib); + } + + private final Player player; + + public SteamWarLuaPlugin(Player player) { + this.player = player; + } + + @Override + public LuaValue call(LuaValue modname, LuaValue env) { + LuaValue materialLib = tableOf(); + for (Material mat : Material.values()) { + materialLib.set(mat.name().toLowerCase(), valueOf(mat.name())); + } + + initialize(env, null); + + env.set("print", new Print()); + env.set("input", new TwoArgFunction() { + @Override + public LuaValue call(LuaValue arg1, LuaValue arg2) { + String message = arg1.tojstring(); + LuaFunction callback = arg2.checkfunction(); + + SWAnvilInv inv = new SWAnvilInv(player, message); + inv.setCallback(s -> callback.call(valueOf(s))); + inv.open(); + + return LuaValue.NIL; + } + }); + env.set("timeout", new TwoArgFunction() { + @Override + public LuaValue call(LuaValue arg1, LuaValue arg2) { + long time = arg1.checklong(); + LuaFunction callback = arg2.checkfunction(); + + Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> callback.call(), time); + return LuaValue.NIL; + } + }); + env.set("pos", new ThreeArgFunction() { + @Override + public LuaValue call(LuaValue arg1, LuaValue arg2, LuaValue arg3) { + double x = arg1.checkdouble(); + double y = arg2.checkdouble(); + double z = arg3.checkdouble(); + + Location loc = new Location(player.getWorld(), x, y, z); + + return tableOf(new LuaValue[] { + valueOf("x"), valueOf(loc.getBlockX()), + valueOf("y"), valueOf(loc.getBlockY()), + valueOf("z"), valueOf(loc.getBlockZ()) + }); + } + }); + env.set("exec", new VarArgFunction() { + @Override + public Varargs invoke(Varargs args) { + player.performCommand(varArgsToString(args)); + + return LuaValue.NIL; + } + }); + + env.set("collectgarbage", NIL); + env.set("dofile", NIL); + env.set("load", NIL); + env.set("loadfile", NIL); + env.set("pcall", NIL); + env.set("rawequal", NIL); + env.set("rawget", NIL); + env.set("rawlen", NIL); + env.set("rawset", NIL); + env.set("setmetatable", NIL); + env.set("xpcall", NIL); + return null; + } + + public static String varArgsToString(Varargs args) { + StringBuilder builder = new StringBuilder(); + for (int i = 1; i <= args.narg(); i++) { + LuaValue arg = args.arg(i); + builder.append(arg.tojstring()); + builder.append(" "); + } + return builder.toString(); + } + + private void initialize(LuaValue parent, Class clazz) { + LUA_LIBS.get(clazz).forEach(luaLib -> { + LuaTable luaTable = luaLib.get(player); + parent.set(luaLib.name(), luaTable); + initialize(luaTable, luaLib.getClass()); + }); + } + + class Print extends VarArgFunction { + @Override + public Varargs invoke(Varargs args) { + player.sendMessage(varArgsToString(args)); + return LuaValue.NIL; + } + } +} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarPlatform.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarPlatform.java new file mode 100644 index 00000000..e30f70f8 --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarPlatform.java @@ -0,0 +1,40 @@ +package de.steamwar.bausystem.features.script.lua; + +import org.bukkit.entity.Player; +import org.luaj.vm2.Globals; +import org.luaj.vm2.LoadState; +import org.luaj.vm2.LuaFunction; +import org.luaj.vm2.compiler.LuaC; +import org.luaj.vm2.lib.Bit32Lib; +import org.luaj.vm2.lib.PackageLib; +import org.luaj.vm2.lib.StringLib; +import org.luaj.vm2.lib.TableLib; +import org.luaj.vm2.lib.jse.JseBaseLib; +import org.luaj.vm2.lib.jse.JseMathLib; + +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +public class SteamWarPlatform { + + public static Globals createClickGlobals(Player player) { + Globals globals = new Globals(); + globals.load(new JseBaseLib()); + globals.load(new PackageLib()); + globals.load(new JseMathLib()); + globals.load(new TableLib()); + globals.load(new Bit32Lib()); + globals.load(new StringLib()); + globals.load(new SteamWarLuaPlugin(player)); + + LoadState.install(globals); + LuaC.install(globals); + return globals; + } + + public static Globals createGlobalGlobals(Player player, BiConsumer eventConsumer, Consumer commandConsumer) { + Globals globals = createClickGlobals(player); + globals.load(new SteamWarGlobalLuaPlugin(eventConsumer, commandConsumer)); + return globals; + } +} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/LuaLib.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/LuaLib.java new file mode 100644 index 00000000..2e369f5f --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/LuaLib.java @@ -0,0 +1,88 @@ +package de.steamwar.bausystem.features.script.lua.libs; + +import lombok.AllArgsConstructor; +import org.bukkit.entity.Player; +import org.luaj.vm2.*; +import org.luaj.vm2.lib.VarArgFunction; +import org.luaj.vm2.lib.ZeroArgFunction; + +import java.util.function.Consumer; +import java.util.function.Supplier; + +public interface LuaLib { + + static LuaValue runGetter(Supplier supplier) { + T value = supplier.get(); + if (value == null) { + return LuaValue.NIL; + } + Class clazz = value.getClass(); + if (clazz == Integer.class || clazz == Long.class) { + return LuaValue.valueOf((int) value); + } else if (clazz == Double.class || clazz == Float.class) { + return LuaValue.valueOf((double) value); + } else if (clazz == String.class) { + return LuaValue.valueOf((String) value); + } else if (clazz == Boolean.class) { + return LuaValue.valueOf((boolean) value); + } + return LuaValue.NIL; + } + + default LuaFunction getter(Supplier supplier) { + return new ZeroArgFunction() { + @Override + public LuaValue call() { + return runGetter(supplier); + } + }; + } + + default LuaFunction getterAndSetter(Supplier supplier, Consumer consumer) { + return new GetterAndSetter<>(supplier, consumer); + } + + default String varArgsToString(Varargs varargs) { + return de.steamwar.bausystem.features.script.lua.SteamWarLuaPlugin.varArgsToString(varargs); + } + + default Class parent() { + return null; + } + String name(); + LuaTable get(Player player); + + @AllArgsConstructor + class GetterAndSetter extends VarArgFunction { + + private Supplier supplier; + private Consumer consumer; + + @Override + public Varargs invoke(Varargs args) { + if (args.narg() == 0) { + return runGetter(supplier); + } else { + if (args.narg() == 1) { + LuaValue luaValue = args.arg(0); + try { + if (luaValue instanceof LuaBoolean) { + consumer.accept(luaValue.toboolean()); + } else if (luaValue instanceof LuaInteger) { + consumer.accept(luaValue.toint()); + } else if (luaValue instanceof LuaDouble) { + consumer.accept(luaValue.todouble()); + } else if (luaValue instanceof LuaString) { + consumer.accept(luaValue.toString()); + } else { + throw new LuaError("Invalid lua type: " + luaValue.typename()); + } + } catch (Throwable throwable) { + throw new LuaError("Error in '" + checkfunction().name() + "' " + throwable.getMessage()); + } + } + return NIL; + } + } + } +} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/PlayerLib.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/PlayerLib.java new file mode 100644 index 00000000..9c6cfab1 --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/PlayerLib.java @@ -0,0 +1,66 @@ +package de.steamwar.bausystem.features.script.lua.libs; + +import de.steamwar.linkage.Linked; +import net.md_5.bungee.api.ChatMessageType; +import net.md_5.bungee.api.chat.TextComponent; +import org.bukkit.entity.Player; +import org.luaj.vm2.LuaTable; +import org.luaj.vm2.LuaValue; +import org.luaj.vm2.Varargs; +import org.luaj.vm2.lib.VarArgFunction; + +@Linked +public class PlayerLib implements LuaLib { + + public String name() { + return "player"; + } + + public LuaTable get(Player player) { + LuaTable table = new LuaTable(); + table.set("name", getter(player::getName)); + table.set("message", new Print(player)); + table.set("actionbar", new SendActionbar(player)); + + table.set("x", getterAndSetter(player.getLocation()::getX, player.getLocation()::setX)); + table.set("y", getterAndSetter(player.getLocation()::getY, player.getLocation()::setY)); + table.set("z", getterAndSetter(player.getLocation()::getZ, player.getLocation()::setZ)); + table.set("yaw", getterAndSetter(player.getLocation()::getYaw, player.getLocation()::setYaw)); + table.set("pitch", getterAndSetter(player.getLocation()::getPitch, player.getLocation()::setPitch)); + + table.set("sneaking", getter(player::isSneaking)); + table.set("sprinting", getter(player::isSprinting)); + table.set("slot", getterAndSetter(player.getInventory()::getHeldItemSlot, player.getInventory()::setHeldItemSlot)); + table.set("item", getter(player.getInventory().getItemInMainHand().getType()::name)); + table.set("offHandItem", getter(player.getInventory().getItemInOffHand().getType()::name)); + return table; + } + + private class Print extends VarArgFunction { + private final Player player; + + public Print(Player player) { + this.player = player; + } + + @Override + public Varargs invoke(Varargs args) { + player.sendMessage(varArgsToString(args)); + return LuaValue.NIL; + } + } + + private class SendActionbar extends VarArgFunction { + private final Player player; + + public SendActionbar(Player player) { + this.player = player; + } + + @Override + public Varargs invoke(Varargs args) { + player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(varArgsToString(args))); + return LuaValue.NIL; + } + } +} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/RegionLib.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/RegionLib.java new file mode 100644 index 00000000..b85a6c3f --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/RegionLib.java @@ -0,0 +1,58 @@ +package de.steamwar.bausystem.features.script.lua.libs; + +import de.steamwar.bausystem.features.loader.Loader; +import de.steamwar.bausystem.features.tracer.record.ActiveTracer; +import de.steamwar.bausystem.features.tracer.record.AutoTraceRecorder; +import de.steamwar.bausystem.features.tracer.record.Recorder; +import de.steamwar.bausystem.region.Region; +import de.steamwar.bausystem.region.flags.Flag; +import de.steamwar.bausystem.region.flags.flagvalues.FireMode; +import de.steamwar.bausystem.region.flags.flagvalues.FreezeMode; +import de.steamwar.bausystem.region.flags.flagvalues.ProtectMode; +import de.steamwar.bausystem.region.flags.flagvalues.TNTMode; +import de.steamwar.linkage.Linked; +import org.bukkit.entity.Player; +import org.luaj.vm2.LuaTable; +import org.luaj.vm2.LuaValue; + +@Linked +public class RegionLib implements LuaLib { + + + @Override + public String name() { + return "region"; + } + + @Override + public LuaTable get(Player player) { + LuaTable table = LuaValue.tableOf(); + + table.set("name", getter(() -> Region.getRegion(player.getLocation()).getName())); + table.set("type", getter(() -> Region.getRegion(player.getLocation()).getPrototype().getName())); + + LuaValue tntLib = LuaValue.tableOf(); + tntLib.set("mode", getter(() -> Region.getRegion(player.getLocation()).getPlain(Flag.TNT, TNTMode.class).name())); + tntLib.set("enabled", getter(() -> Region.getRegion(player.getLocation()).getPlain(Flag.TNT, TNTMode.class) != TNTMode.DENY)); + tntLib.set("onlyTb", getter(() -> Region.getRegion(player.getLocation()).getPlain(Flag.TNT, TNTMode.class) == TNTMode.ONLY_TB)); + + table.set("tnt", tntLib); + + table.set("fire", getter(() -> Region.getRegion(player.getLocation()).getPlain(Flag.FIRE, FireMode.class) == FireMode.ALLOW)); + table.set("freeze", getter(() -> Region.getRegion(player.getLocation()).getPlain(Flag.FREEZE, FreezeMode.class) == FreezeMode.ACTIVE)); + table.set("protect", getter(() -> Region.getRegion(player.getLocation()).getPlain(Flag.PROTECT, ProtectMode.class) == ProtectMode.ACTIVE)); + + LuaValue traceLib = LuaValue.tableOf(); + traceLib.set("active", getter(() -> !Region.getRegion(player.getLocation()).isGlobal() && Recorder.INSTANCE.get(Region.getRegion(player.getLocation())) instanceof ActiveTracer)); + traceLib.set("auto", getter(() -> !Region.getRegion(player.getLocation()).isGlobal() && Recorder.INSTANCE.get(Region.getRegion(player.getLocation())) instanceof AutoTraceRecorder)); + traceLib.set("status", getter(() -> Recorder.INSTANCE.get(Region.getRegion(player.getLocation())).scriptState())); + traceLib.set("time", getter(() -> Recorder.INSTANCE.get(Region.getRegion(player.getLocation())).scriptTime())); + + table.set("trace", traceLib); + + Loader loader = Loader.getLoader(player); + table.set("loader", getter(() -> loader == null ? "OFF" : loader.getStage().name())); + + return table; + } +} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/ServerLib.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/ServerLib.java new file mode 100644 index 00000000..5c0ae63d --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/ServerLib.java @@ -0,0 +1,65 @@ +package de.steamwar.bausystem.features.script.lua.libs; + +import de.steamwar.bausystem.BauSystem; +import de.steamwar.bausystem.features.tpslimit.TPSLimitUtils; +import de.steamwar.bausystem.features.tpslimit.TPSUtils; +import de.steamwar.core.TPSWatcher; +import de.steamwar.inventory.SWItem; +import de.steamwar.linkage.Linked; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.luaj.vm2.LuaString; +import org.luaj.vm2.LuaTable; +import org.luaj.vm2.LuaValue; +import org.luaj.vm2.lib.OneArgFunction; +import org.luaj.vm2.lib.TwoArgFunction; + +import java.text.SimpleDateFormat; +import java.util.Calendar; + +@Linked +public class ServerLib implements LuaLib { + @Override + public String name() { + return "server"; + } + + @Override + public LuaTable get(Player player) { + LuaTable serverLib = LuaValue.tableOf(); + serverLib.set("time", getter(() -> new SimpleDateFormat(BauSystem.MESSAGE.parse("TIME", player)).format(Calendar.getInstance().getTime()))); + serverLib.set("ticks", getter(TPSUtils.currentTick)); + serverLib.set("getBlockAt", new OneArgFunction() { + @Override + public LuaValue call(LuaValue arg1) { + LuaTable pos = arg1.checktable(); + return valueOf(player.getWorld().getBlockAt(pos.get("x").checkint(), pos.get("y").checkint(), pos.get("z").checkint()).getType().name()); + } + }); + serverLib.set("setBlockAt", new TwoArgFunction() { + @Override + public LuaValue call(LuaValue arg1, LuaValue arg2) { + LuaTable pos = arg1.checktable(); + LuaString material = arg2.checkstring(); + Material mat = SWItem.getMaterial(material.tojstring()); + if (mat == null) { + return NIL; + } + player.getWorld().getBlockAt(pos.get("x").checkint(), pos.get("y").checkint(), pos.get("z").checkint()).setType(mat); + return NIL; + } + }); + + LuaValue tpsLib = LuaValue.tableOf(); + tpsLib.set("oneSecond", getter(() -> TPSWatcher.getTPS(TPSWatcher.TPSType.ONE_SECOND))); + tpsLib.set("tenSecond", getter(() -> TPSWatcher.getTPS(TPSWatcher.TPSType.TEN_SECONDS))); + tpsLib.set("oneMinute", getter(() -> TPSWatcher.getTPS(TPSWatcher.TPSType.ONE_MINUTE))); + tpsLib.set("fiveMinute", getter(() -> TPSWatcher.getTPS(TPSWatcher.TPSType.FIVE_MINUTES))); + tpsLib.set("tenMinute", getter(() -> TPSWatcher.getTPS(TPSWatcher.TPSType.TEN_MINUTES))); + tpsLib.set("current", getter(TPSWatcher::getTPS)); + tpsLib.set("limit", getter(TPSLimitUtils::getCurrentTPSLimit)); + + serverLib.set("tps", tpsLib); + return serverLib; + } +} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/variables/Constants.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/variables/Constants.java deleted file mode 100644 index b14310b2..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/variables/Constants.java +++ /dev/null @@ -1,315 +0,0 @@ -package de.steamwar.bausystem.features.script.variables; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.loader.Loader; -import de.steamwar.bausystem.features.tpslimit.FreezeUtils; -import de.steamwar.bausystem.features.tpslimit.TPSLimitUtils; -import de.steamwar.bausystem.features.tpslimit.TPSUtils; -import de.steamwar.bausystem.features.tracer.record.ActiveTracer; -import de.steamwar.bausystem.features.tracer.record.AutoTraceRecorder; -import de.steamwar.bausystem.features.tracer.record.Recorder; -import de.steamwar.bausystem.features.tracer.record.TraceRecorder; -import de.steamwar.bausystem.region.Region; -import de.steamwar.bausystem.region.flags.Flag; -import de.steamwar.bausystem.region.flags.flagvalues.FireMode; -import de.steamwar.bausystem.region.flags.flagvalues.FreezeMode; -import de.steamwar.bausystem.region.flags.flagvalues.ProtectMode; -import de.steamwar.bausystem.region.flags.flagvalues.TNTMode; -import de.steamwar.core.TPSWatcher; -import de.steamwar.sql.SteamwarUser; -import lombok.experimental.UtilityClass; -import org.bukkit.entity.Player; -import org.bukkit.inventory.meta.ItemMeta; - -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.function.Function; -import java.util.function.Supplier; - -@UtilityClass -public class Constants { - - private final Map> CONSTANTS = new HashMap<>(); - - private static class ConstantDoubleValue extends Value.DoubleValue { - - private Supplier doubleSupplier; - - public ConstantDoubleValue(Supplier doubleSupplier) { - super(doubleSupplier.get()); - this.doubleSupplier = doubleSupplier; - } - - @Override - public long asLong() { - value = doubleSupplier.get(); - return super.asLong(); - } - - @Override - public double asDouble() { - value = doubleSupplier.get(); - return super.asDouble(); - } - - @Override - public boolean asBoolean() { - value = doubleSupplier.get(); - return super.asBoolean(); - } - - @Override - public String asString() { - value = doubleSupplier.get(); - return super.asString(); - } - } - - private static class ConstantLongValue extends Value.LongValue { - - private Supplier longSupplier; - - public ConstantLongValue(Supplier longSupplier) { - super(longSupplier.get()); - this.longSupplier = longSupplier; - } - - @Override - public long asLong() { - value = longSupplier.get(); - return super.asLong(); - } - - @Override - public double asDouble() { - value = longSupplier.get(); - return super.asDouble(); - } - - @Override - public boolean asBoolean() { - value = longSupplier.get(); - return super.asBoolean(); - } - - @Override - public String asString() { - value = longSupplier.get(); - return super.asString(); - } - } - - private static class ConstantBooleanValue extends Value.BooleanValue { - - private Supplier booleanSupplier; - - public ConstantBooleanValue(Supplier booleanSupplier) { - super(booleanSupplier.get()); - this.booleanSupplier = booleanSupplier; - } - - @Override - public long asLong() { - value = booleanSupplier.get(); - return super.asLong(); - } - - @Override - public double asDouble() { - value = booleanSupplier.get(); - return super.asDouble(); - } - - @Override - public boolean asBoolean() { - value = booleanSupplier.get(); - return super.asBoolean(); - } - - @Override - public String asString() { - value = booleanSupplier.get(); - return super.asString(); - } - } - - private static class ConstantStringValue extends Value.StringValue { - - private Supplier stringSupplier; - - public ConstantStringValue(Supplier stringSupplier) { - super(stringSupplier.get()); - this.stringSupplier = stringSupplier; - } - - @Override - public long asLong() { - value = stringSupplier.get(); - return super.asLong(); - } - - @Override - public double asDouble() { - value = stringSupplier.get(); - return super.asDouble(); - } - - @Override - public boolean asBoolean() { - value = stringSupplier.get(); - return super.asBoolean(); - } - - @Override - public String asString() { - value = stringSupplier.get(); - return super.asString(); - } - } - - static { - CONSTANTS.put("trace", player -> { - Region region = Region.getRegion(player.getLocation()); - if (region.isGlobal()) { - return new ConstantBooleanValue(() -> false); - } - return new ConstantBooleanValue(() -> Recorder.INSTANCE.get(region) instanceof ActiveTracer); - }); - CONSTANTS.put("autotrace", player -> { - Region region = Region.getRegion(player.getLocation()); - if (region.isGlobal()) { - return new ConstantBooleanValue(() -> false); - } - return new ConstantBooleanValue(() -> Recorder.INSTANCE.get(region) instanceof AutoTraceRecorder); - }); - CONSTANTS.put("trace_status", player -> { - TraceRecorder recorder = Recorder.INSTANCE.get(Region.getRegion(player.getLocation())); - return new ConstantStringValue(recorder::scriptState); - }); - CONSTANTS.put("trace_time", player -> { - TraceRecorder recorder = Recorder.INSTANCE.get(Region.getRegion(player.getLocation())); - return new ConstantLongValue(recorder::scriptTime); - }); - - CONSTANTS.put("tnt", player -> { - return new ConstantBooleanValue(() -> Region.getRegion(player.getLocation()).getPlain(Flag.TNT, TNTMode.class) != TNTMode.DENY); - }); - CONSTANTS.put("tnt_onlytb", player -> { - return new ConstantBooleanValue(() -> Region.getRegion(player.getLocation()).getPlain(Flag.TNT, TNTMode.class) == TNTMode.ONLY_TB); - }); - - CONSTANTS.put("fire", player -> { - return new ConstantBooleanValue(() -> Region.getRegion(player.getLocation()).getPlain(Flag.FIRE, FireMode.class) == FireMode.ALLOW); - }); - - CONSTANTS.put("freeze", player -> { - return new ConstantBooleanValue(() -> Region.getRegion(player.getLocation()).getPlain(Flag.FREEZE, FreezeMode.class) == FreezeMode.ACTIVE); - }); - - CONSTANTS.put("protect", player -> { - return new ConstantBooleanValue(() -> Region.getRegion(player.getLocation()).getPlain(Flag.PROTECT, ProtectMode.class) == ProtectMode.ACTIVE); - }); - - CONSTANTS.put("x", player -> { - return new ConstantDoubleValue(() -> player.getLocation().getX()); - }); - CONSTANTS.put("y", player -> { - return new ConstantDoubleValue(() -> player.getLocation().getY()); - }); - CONSTANTS.put("z", player -> { - return new ConstantDoubleValue(() -> player.getLocation().getZ()); - }); - CONSTANTS.put("name", player -> { - SteamwarUser user = SteamwarUser.get(player.getUniqueId()); - return new ConstantStringValue(user::getUserName); - }); - CONSTANTS.put("sneaking", player -> { - return new ConstantBooleanValue(player::isSneaking); - }); - CONSTANTS.put("sprinting", player -> { - return new ConstantBooleanValue(player::isSprinting); - }); - CONSTANTS.put("slot", player -> { - return new ConstantLongValue(() -> (long) player.getInventory().getHeldItemSlot()); - }); - CONSTANTS.put("slotmaterial", player -> { - return new ConstantStringValue(() -> player.getInventory().getItemInMainHand().getType().name()); - }); - CONSTANTS.put("offhandmaterial", player -> { - return new ConstantStringValue(() -> player.getInventory().getItemInOffHand().getType().name()); - }); - CONSTANTS.put("materialname", player -> { - return new ConstantStringValue(() -> { - ItemMeta itemMeta = player.getInventory().getItemInMainHand().getItemMeta(); - if (itemMeta == null) { - return ""; - } - return itemMeta.getDisplayName(); - }); - }); - CONSTANTS.put("offmaterialname", player -> { - return new ConstantStringValue(() -> { - ItemMeta itemMeta = player.getInventory().getItemInOffHand().getItemMeta(); - if (itemMeta == null) { - return ""; - } - return itemMeta.getDisplayName(); - }); - }); - - CONSTANTS.put("region_type", player -> { - Region region = Region.getRegion(player.getLocation()); - if (region.isGlobal()) { - return new ConstantStringValue(() -> "global"); - } - return new ConstantStringValue(() -> region.getPrototype().getDisplayName().replace(' ', '_').toLowerCase()); - }); - CONSTANTS.put("region_name", player -> { - Region region = Region.getRegion(player.getLocation()); - if (region.isGlobal()) { - return new ConstantStringValue(() -> "Global"); - } - return new ConstantStringValue(() -> region.getPrototype().getDisplayName()); - }); - - CONSTANTS.put("tps", player -> { - return new ConstantDoubleValue(() -> { - if (FreezeUtils.isFrozen()) return 0.0; - return TPSWatcher.getTPS(); - }); - }); - CONSTANTS.put("tps_limit", player -> { - return new ConstantDoubleValue(TPSLimitUtils::getCurrentTPSLimit); - }); - - CONSTANTS.put("ticks", player -> { - return new ConstantLongValue(TPSUtils.currentTick); - }); - CONSTANTS.put("time", player -> { - return new ConstantStringValue(() -> new SimpleDateFormat(BauSystem.MESSAGE.parse("TIME", player)).format(Calendar.getInstance().getTime())); - }); - - CONSTANTS.put("loader_status", player -> { - Loader loader = Loader.getLoader(player); - if (loader == null) { - return new ConstantStringValue(() -> "OFF"); - } - return new ConstantStringValue(() -> loader.getStage().name()); - }); - } - - public Set allVariables() { - return CONSTANTS.keySet(); - } - - public boolean isConstant(String variableName) { - return CONSTANTS.containsKey(variableName); - } - - public Value getConstant(String variableName, Player player) { - return CONSTANTS.get(variableName).apply(player); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/variables/Context.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/variables/Context.java deleted file mode 100644 index e1662028..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/variables/Context.java +++ /dev/null @@ -1,42 +0,0 @@ -package de.steamwar.bausystem.features.script.variables; - -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -public class Context { - - private Map variables = new HashMap<>(); - - public void putValue(String variableName, Value value) { - if (variables.containsKey(variableName)) { - if (variables.get(variableName).type().equals(value.type())) { - variables.get(variableName).fromValue(value); - } else { - variables.put(variableName, value); - } - } else { - variables.put(variableName, value); - } - } - - public void removeValue(String variableName) { - variables.remove(variableName); - } - - public boolean hasValue(String variableName) { - return variables.containsKey(variableName); - } - - public Value getValue(String variableName) { - return variables.get(variableName); - } - - public Set allVariables() { - return variables.keySet(); - } - - public Set> entrySet() { - return variables.entrySet(); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/variables/Value.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/variables/Value.java deleted file mode 100644 index 5373ff5d..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/variables/Value.java +++ /dev/null @@ -1,188 +0,0 @@ -package de.steamwar.bausystem.features.script.variables; - -import lombok.AllArgsConstructor; -import lombok.ToString; - -public interface Value { - - static Value parse(String varValue) { - try { - return new Value.LongValue(Long.parseLong(varValue)); - } catch (NumberFormatException ne) { - try { - return new Value.DoubleValue(Double.parseDouble(varValue)); - } catch (NumberFormatException e) { - if (varValue.equalsIgnoreCase("true") || varValue.equalsIgnoreCase("false")) { - return new Value.BooleanValue(varValue.equalsIgnoreCase("true")); - } else { - return new Value.StringValue(varValue); - } - } - } - } - - String type(); - long asLong(); - double asDouble(); - boolean asBoolean(); - String asString(); - - void fromValue(Value value); - - @AllArgsConstructor - @ToString - class DoubleValue implements Value { - - protected double value; - - @Override - public String type() { - return "floating_number"; - } - - @Override - public long asLong() { - return Math.round(value); - } - - @Override - public double asDouble() { - return value; - } - - @Override - public boolean asBoolean() { - return value != 0; - } - - @Override - public String asString() { - return value + ""; - } - - @Override - public void fromValue(Value value) { - this.value = value.asDouble(); - } - } - - @AllArgsConstructor - @ToString - class LongValue implements Value { - - protected long value; - - @Override - public String type() { - return "number"; - } - - @Override - public long asLong() { - return value; - } - - @Override - public double asDouble() { - return value; - } - - @Override - public boolean asBoolean() { - return value != 0; - } - - @Override - public String asString() { - return value + ""; - } - - @Override - public void fromValue(Value value) { - this.value = value.asLong(); - } - } - - @AllArgsConstructor - @ToString - class BooleanValue implements Value { - - protected boolean value; - - @Override - public String type() { - return "boolean"; - } - - @Override - public long asLong() { - return value ? 1 : 0; - } - - @Override - public double asDouble() { - return value ? 1 : 0; - } - - @Override - public boolean asBoolean() { - return value; - } - - @Override - public String asString() { - return value + ""; - } - - @Override - public void fromValue(Value value) { - this.value = value.asBoolean(); - } - } - - @AllArgsConstructor - @ToString - class StringValue implements Value { - - protected String value; - - @Override - public String type() { - return "text"; - } - - @Override - public long asLong() { - try { - return Long.parseLong(value); - } catch (NumberFormatException e) { - return 0; - } - } - - @Override - public double asDouble() { - try { - return Double.parseDouble(value); - } catch (NumberFormatException e) { - return 0; - } - } - - @Override - public boolean asBoolean() { - return value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes"); - } - - @Override - public String asString() { - return value; - } - - @Override - public void fromValue(Value value) { - this.value = value.asString(); - } - } - -} diff --git a/SCRIPT.md b/SCRIPT.md new file mode 100644 index 00000000..f93a5f16 --- /dev/null +++ b/SCRIPT.md @@ -0,0 +1,183 @@ +# SteamWar.de - Script System + +--- + +* [SteamWar.de - Script System](#steamwarde---script-system) + * [Einleitung](#einleitung) +* [Basis-Apis](#basis-apis) +* [SteamWar.de-Api](#steamwarde-api) + * [global](#global) + * [player](#player) + * [region](#region) + * [tnt](#tnt) + * [server](#server) +* [SteamWar.de-Global-Api](#steamwarde-global-api) + * [Event Type](#event-type) + * [BlockEvent](#blockevent) + * [InteractEvent](#interactevent) + * [Position](#position) +* [Beispiele](#beispiele) + * [Hello, World!](#hello-world) + * [Code](#code) + * [Ausgabe](#ausgabe) + + + +## 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. + +# Basis-Apis +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` + +# SteamWar.de-Api +In den Scripten gibt es dazu noch folgende globale Variablen: +- [`player`](#player) +- [`region`](#region) +- [`server`](#server) + +### global +Die `global`-Api stellt Funktionen zur Verfügung, QOL sind. +Es gibt folgende Funktionen: + +| Name | Signature | Beschreibung | +|-----------|----------------------------------|----------------------------------------------------------------------------------------------------| +| `print` | print(String...) | @see message(String...) | +| `input` | input(String, Function\) | Fragt den User nach einer Eingabe mit der Nachricht und called die zugehörige Funktion nach dieser | +| `timeout` | timeout(Number, Function\) | 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 | +| `exec` | exec(String...) | Führt den angegebenen Befehl als Spieler aus | + +### player +Die `player`-Api 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 | + + +### region +Die `region`-Api 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 | + +Es gibt folgende Variablen: + +| Name | Beschreibung | +|--------|--------------| +| `tnt` | [tnt](#tnt) | + +#### tnt + + +## server + +# SteamWar.de-Global-Api +Mit `/script` kann man Script-Bücher global abspeichern. Diese haben dann zugrif auf die `global`-Api. +Die `global`-Api stellt Funktionen zur Verfügung um auf Events, Commands und Hotkeys mit einem Script zu reagieren. + +Es gibt folgende Funktionen: + +| Name | Signature | Beschreibung | +|-----------|---------------------------------|---------------------------------| +| `event` | event(EventType, Function(Any)) | Registriere einen Event Handler | +| `command` | cmd(String, Function(Any)) | Registriere einen Command | + +Es gibt folgende Variablen: + +| Name | Beschreibung | +|--------|----------------------------------| +| `type` | Siehe: [Event Type](#event-type) | + +## Event Type +Es gibt folgende Event-Typen: + +| Name | Wenn | Parameter | +|---------------------|-----------------------------------------------------|---------------------------------| +| `FF` | Beim Doppelten Drücken der Swap-Hands taste | NIL | +| `PlaceBlock` | Beim Platzieren von Blöcken | [BlockEvent](#blockevent) | +| `BreakBlock` | Beim Zerstören von Blöcken | [BlockEvent](#blockevent) | +| `RightClick` | Beim Rechts klicken | [InteractEvent](#interactevent) | +| `LeftClick` | Beim Links Klicken | [InteractEvent](#interactevent) | +| `TNTSpawn` | Wenn ein TNT in der aktuellen Region spawnt | NIL | +| `TNTExplode` | Wenn ein TNT in der aktuellen Region explodiert | [Position](#position) | +| `TNTExplodeInBuild` | Wenn ein TNT in der aktuellen Bau Region explodiert | [Position](#position) | +| `SelfJoin` | Wenn man selbst den Server betritt | NIL | +| `SelfLeave` | Wenn man den Server verlässt | NIL | +| `DropItem` | Wenn man ein item Droppt | (type: Material) | +| `EntityDeath` | Wenn ein Entity Stirbt | (type: Entity Type) | + +### BlockEvent +Das übergebene Objekt an den Handler hat folgende Variablen: + +| Name | Beschreibung | +|--------|-----------------------------| +| `x` | Die X-Koordinate des Blocks | +| `y` | Die Y-Koordinate des Blocks | +| `z` | Die Z-Koordinate des Blocks | +| `type` | Das Material des Blocks | + +### InteractEvent +Das übergebene Objekt an den Handler hat folgende Variablen: + +| Name | Beschreibung | +|------------|-------------------------------------------------------------------------------------------------------------------------------| +| `action` | Die Action die ausgeführt wurde, Mögliche Werte: `RIGHT_CLICK_BLOCK`, `RIGHT_CLICK_AIR`, `LEFT_CLICK_BLOCK`, `LEFT_CLICK_AIR` | +| `hand` | Die Hand die zum ausführen genutzt wird, Mögliche Werte: `HAND`, `OFF_HAND` | +| `block` | Der Typ des Items mit dem geklickt wurde | +| `hasBlock` | Wahr, wenn auf einen Block geklickt wurde | + +Wenn `hasBlock` wahr ist, gibt es folgende Variablen: + +| Name | Beschreibung | +|-------------|-----------------------------------------| +| `blockX` | Die X-Koordinate des Blocks | +| `blockY` | Die Y-Koordinate des Blocks | +| `blockZ` | Die Z-Koordinate des Blocks | +| `blockFace` | Die Seite des Blocks die geklickt wurde | + + +### Position +Die Position ist ein Objekt mit folgenden Variablen: + +| Name | Beschreibung | +|------|------------------| +| `x` | Die X-Koordinate | +| `y` | Die Y-Koordinate | +| `z` | Die Z-Koordinate | + + +# Beispiele + +## Hello, World! +Ein einfaches Hello, World!-Script. + +#### Code +```lua +print("Hello, World!") +``` + +#### Ausgabe +``` +Hello, World! +``` From 95f0625031ac6d3ffe50823600cb96b8a555a24c Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Fri, 19 May 2023 19:34:45 +0200 Subject: [PATCH 02/15] Add Copyright --- .../linkage/types/LuaLib_GENERIC.java | 19 +++++++++++++++ .../features/script/ScriptCommand.java | 19 +++++++++++++++ .../features/script/ScriptListener.java | 19 +++++++++++++++ .../features/script/ScriptRunner.java | 19 +++++++++++++++ .../features/script/UnsignCommand.java | 24 +++++++++---------- .../script/event/CommandListener.java | 19 +++++++++++++++ .../features/script/event/EventListener.java | 19 +++++++++++++++ .../features/script/lua/CommandRegister.java | 19 +++++++++++++++ .../script/lua/SteamWarGlobalLuaPlugin.java | 19 +++++++++++++++ .../script/lua/SteamWarLuaPlugin.java | 19 +++++++++++++++ .../features/script/lua/SteamWarPlatform.java | 19 +++++++++++++++ .../features/script/lua/libs/LuaLib.java | 19 +++++++++++++++ .../features/script/lua/libs/PlayerLib.java | 19 +++++++++++++++ .../features/script/lua/libs/RegionLib.java | 19 +++++++++++++++ .../features/script/lua/libs/ServerLib.java | 19 +++++++++++++++ 15 files changed, 278 insertions(+), 12 deletions(-) diff --git a/BauSystem_Linkage/src/de/steamwar/linkage/types/LuaLib_GENERIC.java b/BauSystem_Linkage/src/de/steamwar/linkage/types/LuaLib_GENERIC.java index 79c02770..570f6a33 100644 --- a/BauSystem_Linkage/src/de/steamwar/linkage/types/LuaLib_GENERIC.java +++ b/BauSystem_Linkage/src/de/steamwar/linkage/types/LuaLib_GENERIC.java @@ -1,3 +1,22 @@ +/* + * 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 . + */ + package de.steamwar.linkage.types; import de.steamwar.linkage.LinkageType; diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptCommand.java index 6952d796..782e6238 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptCommand.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptCommand.java @@ -1,3 +1,22 @@ +/* + * 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 . + */ + package de.steamwar.bausystem.features.script; import de.steamwar.command.SWCommand; diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptListener.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptListener.java index f2b5852c..20f0e595 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptListener.java @@ -1,3 +1,22 @@ +/* + * 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 . + */ + package de.steamwar.bausystem.features.script; import de.steamwar.bausystem.utils.FlatteningWrapper; diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptRunner.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptRunner.java index 8c4ce348..7c3bac7f 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptRunner.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptRunner.java @@ -1,3 +1,22 @@ +/* + * 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 . + */ + package de.steamwar.bausystem.features.script; import de.steamwar.bausystem.features.script.lua.CommandRegister; diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/UnsignCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/UnsignCommand.java index 5c4ebb6d..37dda16d 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/UnsignCommand.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/UnsignCommand.java @@ -1,20 +1,20 @@ /* - * This file is a part of the SteamWar software. + * This file is a part of the SteamWar software. * - * Copyright (C) 2021 SteamWar.de-Serverteam + * 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 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. + * 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 . + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . */ package de.steamwar.bausystem.features.script; diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/CommandListener.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/CommandListener.java index e0602616..8e0da5ef 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/CommandListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/CommandListener.java @@ -1,3 +1,22 @@ +/* + * 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 . + */ + package de.steamwar.bausystem.features.script.event; import de.steamwar.bausystem.features.script.ScriptRunner; diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/EventListener.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/EventListener.java index 3a43a83d..e3c09df6 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/EventListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/EventListener.java @@ -1,3 +1,22 @@ +/* + * 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 . + */ + package de.steamwar.bausystem.features.script.event; import de.steamwar.bausystem.BauSystem; diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/CommandRegister.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/CommandRegister.java index 2e6d9c46..df4fd3bc 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/CommandRegister.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/CommandRegister.java @@ -1,3 +1,22 @@ +/* + * 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 . + */ + package de.steamwar.bausystem.features.script.lua; import lombok.AllArgsConstructor; diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarGlobalLuaPlugin.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarGlobalLuaPlugin.java index 544b8af9..3e5dc4a0 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarGlobalLuaPlugin.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarGlobalLuaPlugin.java @@ -1,3 +1,22 @@ +/* + * 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 . + */ + package de.steamwar.bausystem.features.script.lua; import lombok.AllArgsConstructor; diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarLuaPlugin.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarLuaPlugin.java index 21b24e5e..f2280f4a 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarLuaPlugin.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarLuaPlugin.java @@ -1,3 +1,22 @@ +/* + * 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 . + */ + package de.steamwar.bausystem.features.script.lua; import de.steamwar.bausystem.BauSystem; diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarPlatform.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarPlatform.java index e30f70f8..2cd2e023 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarPlatform.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarPlatform.java @@ -1,3 +1,22 @@ +/* + * 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 . + */ + package de.steamwar.bausystem.features.script.lua; import org.bukkit.entity.Player; diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/LuaLib.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/LuaLib.java index 2e369f5f..4167c4cc 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/LuaLib.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/LuaLib.java @@ -1,3 +1,22 @@ +/* + * 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 . + */ + package de.steamwar.bausystem.features.script.lua.libs; import lombok.AllArgsConstructor; diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/PlayerLib.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/PlayerLib.java index 9c6cfab1..e4f2f12b 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/PlayerLib.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/PlayerLib.java @@ -1,3 +1,22 @@ +/* + * 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 . + */ + package de.steamwar.bausystem.features.script.lua.libs; import de.steamwar.linkage.Linked; diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/RegionLib.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/RegionLib.java index b85a6c3f..293bdad1 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/RegionLib.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/RegionLib.java @@ -1,3 +1,22 @@ +/* + * 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 . + */ + package de.steamwar.bausystem.features.script.lua.libs; import de.steamwar.bausystem.features.loader.Loader; diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/ServerLib.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/ServerLib.java index 5c0ae63d..54754471 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/ServerLib.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/ServerLib.java @@ -1,3 +1,22 @@ +/* + * 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 . + */ + package de.steamwar.bausystem.features.script.lua.libs; import de.steamwar.bausystem.BauSystem; From edd44c172cfc13e2eea45289f95df490db18a59d Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Fri, 19 May 2023 20:12:52 +0200 Subject: [PATCH 03/15] Add Hotkeys --- .../bausystem/features/script/Hotkey.java | 77 +++++++++++++++++++ .../features/script/ScriptRunner.java | 14 ++-- .../features/script/event/HotkeyListener.java | 54 +++++++++++++ .../script/lua/SteamWarGlobalLuaPlugin.java | 14 +++- .../features/script/lua/SteamWarPlatform.java | 4 +- 5 files changed, 154 insertions(+), 9 deletions(-) create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/Hotkey.java create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/event/HotkeyListener.java diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/Hotkey.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/Hotkey.java new file mode 100644 index 00000000..d149eedd --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/Hotkey.java @@ -0,0 +1,77 @@ +/* + * 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 . + */ + +package de.steamwar.bausystem.features.script; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.EqualsAndHashCode; + +@AllArgsConstructor +@Builder +@EqualsAndHashCode +public class Hotkey { + + private final int charcode; + + private final boolean ctrl; + private final boolean shift; + private final boolean alt; + private final boolean meta; + + public static Hotkey fromString(String string) { + String[] parts = string.split("\\+"); + HotkeyBuilder builder = Hotkey.builder(); + + for (String part : parts) { + switch (part.toLowerCase()) { + case "ctrl": + builder.ctrl(true); + break; + case "shift": + builder.shift(true); + break; + case "alt": + builder.alt(true); + break; + case "meta": + builder.meta(true); + break; + default: + if (part.length() == 1) { + builder.charcode(Character.toLowerCase(part.charAt(0))); + } else { + throw new IllegalArgumentException("Invalid hotkey: " + string); + } + } + } + + return builder.build(); + } + + public static Hotkey fromChar(int c, int mods) { + return Hotkey.builder() + .charcode(Character.toLowerCase(c)) + .shift((mods & 1) != 0) + .ctrl((mods & 2) != 0) + .alt((mods & 4) != 0) + .meta((mods & 8) != 0) + .build(); + } +} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptRunner.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptRunner.java index 7c3bac7f..ab4feb4a 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptRunner.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptRunner.java @@ -27,10 +27,7 @@ import org.luaj.vm2.Globals; import org.luaj.vm2.LuaFunction; import org.luaj.vm2.LuaValue; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public class ScriptRunner { @@ -40,6 +37,7 @@ public class ScriptRunner { // Value -> private static final Map>> EVENT_MAP = new HashMap<>(); + private static final Map>> HOTKEY_MAP = new HashMap<>(); private static final Map> COMMAND_MAP = new HashMap<>(); public static void runScript(String script, Player player) { @@ -55,7 +53,8 @@ public class ScriptRunner { public static void createGlobalScript(List scripts, Player player) { EVENT_MAP.remove(player); Globals globals = SteamWarPlatform.createGlobalGlobals(player, - (s, luaFunction) -> EVENT_MAP.computeIfAbsent(player, player1 -> new HashMap<>()).computeIfAbsent(s, s1 -> new ArrayList<>()).add(luaFunction), + (s, luaFunction) -> EVENT_MAP.computeIfAbsent(player, player1 -> new EnumMap<>(SteamWarGlobalLuaPlugin.EventType.class)).computeIfAbsent(s, s1 -> new ArrayList<>()).add(luaFunction), + (s, luaFunction) -> HOTKEY_MAP.computeIfAbsent(player, player1 -> new HashMap<>()).computeIfAbsent(Hotkey.fromString(s), s1 -> new ArrayList<>()).add(luaFunction), commandRegister -> COMMAND_MAP.computeIfAbsent(player, player1 -> new HashMap<>()).put(commandRegister.getName(), commandRegister)); for (String script : scripts) { @@ -91,4 +90,9 @@ public class ScriptRunner { commandRegister.getFunction().call(args); } + + public static void callHotkey(int mods, int key, Player player, boolean pressed) { + Hotkey hotkey = Hotkey.fromChar(key, mods); + HOTKEY_MAP.get(player).getOrDefault(hotkey, Collections.emptyList()).forEach(luaFunction -> luaFunction.call(LuaValue.valueOf(pressed))); + } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/HotkeyListener.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/HotkeyListener.java new file mode 100644 index 00000000..d6280b50 --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/HotkeyListener.java @@ -0,0 +1,54 @@ +/* + * 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 . + */ + +package de.steamwar.bausystem.features.script.event; + +import de.steamwar.bausystem.BauSystem; +import de.steamwar.bausystem.features.script.ScriptRunner; +import de.steamwar.linkage.Linked; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.plugin.messaging.PluginMessageListener; + +@Linked +public class HotkeyListener implements PluginMessageListener { + + { + Bukkit.getServer().getMessenger().registerIncomingPluginChannel(BauSystem.getInstance(), "sw:hotkeys", this); + } + + @Override + public void onPluginMessageReceived(String channel, Player player, byte[] message) { + if (!channel.equals("sw:hotkeys")) return; + if (message.length < 5) return; + int action = message[4] & 0xFF; + if (action == 2) return; + int key = (message[0] & 0xFF) << 24 | (message[1] & 0xFF) << 16 | (message[2] & 0xFF) << 8 | (message[3] & 0xFF); + if (!(key >= 'A' && key <= 'Z' || key >= '0' && key <= '9')) return; + if (message.length >= 9) { + int mods = (message[5] & 0xFF) << 24 | (message[6] & 0xFF) << 16 | (message[7] & 0xFF) << 8 | (message[8] & 0xFF); + // player.sendMessage("Hotkey: " + (char) key + " " + action + " " + Long.toBinaryString(mods)); + ScriptRunner.callHotkey(mods, key, player, action == 1); + } else { + // player.sendMessage("Hotkey: " + (char) key + " " + action); + ScriptRunner.callHotkey(0, key, player, action == 1); + } + } + +} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarGlobalLuaPlugin.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarGlobalLuaPlugin.java index 3e5dc4a0..f45d4549 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarGlobalLuaPlugin.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarGlobalLuaPlugin.java @@ -23,9 +23,7 @@ import lombok.AllArgsConstructor; import org.luaj.vm2.LuaFunction; import org.luaj.vm2.LuaString; import org.luaj.vm2.LuaValue; -import org.luaj.vm2.Varargs; import org.luaj.vm2.lib.TwoArgFunction; -import org.luaj.vm2.lib.VarArgFunction; import java.util.function.BiConsumer; import java.util.function.Consumer; @@ -33,6 +31,7 @@ import java.util.function.Consumer; @AllArgsConstructor public class SteamWarGlobalLuaPlugin extends TwoArgFunction { private final BiConsumer eventConsumer; + private final BiConsumer hotkeyConsumer; private final Consumer commandRegisterConsumer; @Override @@ -56,6 +55,17 @@ public class SteamWarGlobalLuaPlugin extends TwoArgFunction { return NIL; } }); + env.set("hotkey", new TwoArgFunction() { + @Override + public LuaValue call(LuaValue arg1, LuaValue arg2) { + LuaString key = arg1.checkstring(); + LuaFunction function = arg2.checkfunction(); + + hotkeyConsumer.accept(key.tojstring().toLowerCase(), function); + + return null; + } + }); return NIL; } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarPlatform.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarPlatform.java index 2cd2e023..a20fa190 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarPlatform.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarPlatform.java @@ -51,9 +51,9 @@ public class SteamWarPlatform { return globals; } - public static Globals createGlobalGlobals(Player player, BiConsumer eventConsumer, Consumer commandConsumer) { + public static Globals createGlobalGlobals(Player player, BiConsumer eventConsumer, BiConsumer hotkeyConsumer, Consumer commandConsumer) { Globals globals = createClickGlobals(player); - globals.load(new SteamWarGlobalLuaPlugin(eventConsumer, commandConsumer)); + globals.load(new SteamWarGlobalLuaPlugin(eventConsumer, hotkeyConsumer, commandConsumer)); return globals; } } From 2d8056883c1d6be65b1233c1cb64b153ddca0dd6 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Sun, 21 May 2023 11:27:36 +0200 Subject: [PATCH 04/15] Update Docs and Add Global GUI Signed-off-by: Chaoscaot --- BauSystem_Main/src/BauSystem.properties | 288 +----------------- BauSystem_Main/src/BauSystem_de.properties | 281 +---------------- .../features/script/ScriptCommand.java | 8 + .../bausystem/features/script/ScriptGUI.java | 121 ++++++++ .../features/script/ScriptHelper.java | 55 ++++ .../features/script/ScriptListener.java | 13 +- .../features/script/ScriptRunner.java | 32 +- .../script/event/CommandListener.java | 2 +- .../features/script/event/EventListener.java | 3 +- .../features/script/lua/CommandRegister.java | 2 - .../script/lua/SteamWarGlobalLuaPlugin.java | 4 +- .../script/lua/SteamWarLuaPlugin.java | 31 +- .../features/script/lua/SteamWarPlatform.java | 8 + .../src/de/steamwar/sql/Script.java | 99 ++++++ SCRIPT.md | 134 +++++++- 15 files changed, 473 insertions(+), 608 deletions(-) create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptGUI.java create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptHelper.java create mode 100644 BauSystem_Main/src/de/steamwar/sql/Script.java diff --git a/BauSystem_Main/src/BauSystem.properties b/BauSystem_Main/src/BauSystem.properties index 448fd952..47fedf61 100644 --- a/BauSystem_Main/src/BauSystem.properties +++ b/BauSystem_Main/src/BauSystem.properties @@ -230,299 +230,31 @@ GUI_EDITOR_TITLE_MORE=Select item # Script ## Errors -SCRIPT_SLEEP_ERROR = §cInsert a sleep into your script -SCRIPT_COMMAND_ERROR_UNKNOWN_VAR = §cUnknown variable {0} -SCRIPT_COMMAND_ERROR_EXPRESSION = §cExpression error with: {0} -SCRIPT_COMMAND_ERROR_FIRST_ARG_NOVAR = §cThe first argument is missing and should be a variable -SCRIPT_COMMAND_ERROR_FIRST_ARG_NONUMER = §cThe first argument is missing and should be a number -SCRIPT_COMMAND_ERROR_FIRST_ARG_NOVAR_OR_VALUE = §cThe first argument is missing and should be a variable or a number -SCRIPT_COMMAND_ERROR_FIRST_ARG_NOJUMPPOINT = §cThe first argument is missing and should be a jump-point -SCRIPT_COMMAND_ERROR_SECOND_ARG_NOVAR = §cThe second argument is missing and should be a variable -SCRIPT_COMMAND_ERROR_SECOND_ARG_NOVALUE = §cThe econd argument is missing and should be a value -SCRIPT_COMMAND_ERROR_SECOND_ARG_NOJUMPPOINT = §cThe second argument is missing and should be a jump-point -SCRIPT_COMMAND_ERROR_THIRD_ARG_NOVAR = §cThe third argument is missing and should be a variable -SCRIPT_COMMAND_ERROR_THIRD_ARG_NOVALUE = §cThe third argument is missing and should be a value -SCRIPT_COMMAND_ERROR_THIRD_ARG_NOVAR_OR_NUMBER = §cThe third argument is missing and should be a variable or a number -SCRIPT_COMMAND_ERROR_FOURTH_ARG_NOVALUE = §cThe fourth argument is missing and should be a value - -SCRIPT_COMMAND_ERROR_BOOLEAN_COMPARE = §cOnly booleans can be compared -SCRIPT_COMMAND_ERROR_NUMBER_COMPARE = §cOnly numbers can be compared -SCRIPT_COMMAND_ERROR_NO_BOOLEAN = §cThe value is not a boolean - -SCRIPT_COMMAND_ERROR_ONLY_STRINGS_ALLOWED = §cOnly strings are allowed -SCRIPT_COMMAND_ERROR_ONLY_NUMBERS_ALLOWED = §cOnly numbers are allowed - -SCRIPT_COMMAND_ERROR_UNKNOWN_OPERATION = §cUnknown operation: {0} - -## Commands -SCRIPT_COMMAND_ARITHMETIC_ADD_ERROR = §cOnly numbers or strings can be added -SCRIPT_COMMAND_ARITHMETIC_DIV_ERROR = §cOnly numbers can be divided -SCRIPT_COMMAND_ARITHMETIC_MUL_ERROR = §cOnly numbers can be multiplied -SCRIPT_COMMAND_ARITHMETIC_SUB_ERROR = §cOnly numbers can be subtracted -SCRIPT_COMMAND_ARITHMETIC_POW_ERROR = §cOnly numbers can be raised to a power -SCRIPT_COMMAND_ARITHMETIC_MOD_ERROR = §cOnly whole numbers can be used for modulo -SCRIPT_COMMAND_ARITHMETIC_BIT_AND_ERROR = §cOnly whole numbers and booleans can be used for and -SCRIPT_COMMAND_ARITHMETIC_BIT_OR_ERROR = §cOnly whole numbers and booleans can be used for or -SCRIPT_COMMAND_ARITHMETIC_BIT_XOR_ERROR = §cOnly whole numbers and booleans can be used for xor -SCRIPT_COMMAND_ARITHMETIC_BIT_LEFT_ERROR = §cOnly whole numbers can be used for left shift value -SCRIPT_COMMAND_ARITHMETIC_BIT_RIGHT_ERROR = §cOnly whole numbers can be used for right shift value -SCRIPT_COMMAND_ARITHMETIC_BIT_RIGHT_LOGIC_ERROR = §cOnly whole numbers can be used for logic right shift value - -SCRIPT_COMMAND_ARITHMETIC_OTHER_CEIL_HELP_1 = §eceil §8<§7variable§8> §8<§7variable§8|§7value§8> -SCRIPT_COMMAND_ARITHMETIC_OTHER_CEIL_HELP_2 = §eceil §8<§7variable§8> §8<§7variable§8|§7value§8> §8<§7variable§8|§7value§8> -SCRIPT_COMMAND_ARITHMETIC_OTHER_CEIL_HELP_3 = Ceils the second number and writes it in the first or ceils the second number with the precision from the third number and writes it in the first -SCRIPT_COMMAND_ARITHMETIC_OTHER_CEIL_ERROR_1 = §cOnly floating point numbers can be ceiled -SCRIPT_COMMAND_ARITHMETIC_OTHER_CEIL_ERROR_2 = §cThe precision needs to be a whole number - -SCRIPT_COMMAND_ARITHMETIC_OTHER_FLOOR_HELP_1 = §efloor §8<§7variable§8> §8<§7variable§8|§7value§8> -SCRIPT_COMMAND_ARITHMETIC_OTHER_FLOOR_HELP_2 = §efloor §8<§7variable§8> §8<§7variable§8|§7value§8> §8<§7variable§8|§7value§8> -SCRIPT_COMMAND_ARITHMETIC_OTHER_FLOOR_HELP_3 = Floors the second number and writes it in the first or floors the second number with the precision from the third number and writes it in the first -SCRIPT_COMMAND_ARITHMETIC_OTHER_FLOOR_ERROR_1 = §cOnly floating point numbers can be floored -SCRIPT_COMMAND_ARITHMETIC_OTHER_FLOOR_ERROR_2 = §cThe precision needs to be a whole number - -SCRIPT_COMMAND_ARITHMETIC_OTHER_ROUND_HELP_1 = §eround §8<§7variable§8> §8<§7variable§8|§7value§8> -SCRIPT_COMMAND_ARITHMETIC_OTHER_ROUND_HELP_2 = §eround §8<§7variable§8> §8<§7variable§8|§7value§8> §8<§7variable§8|§7value§8> -SCRIPT_COMMAND_ARITHMETIC_OTHER_ROUND_HELP_3 = Round the second number and writes it in the first or rounds the second number with the precision from the third number and writes it in the first -SCRIPT_COMMAND_ARITHMETIC_OTHER_ROUND_ERROR_1 = §cOnly floating point numbers can be rounded -SCRIPT_COMMAND_ARITHMETIC_OTHER_ROUND_ERROR_2 = §cThe precision needs to be a whole number - -SCRIPT_COMMAND_IO_ECHO_HELP_1 = §eecho §8<§7value§8> -SCRIPT_COMMAND_IO_ECHO_HELP_2 = §7Send a message to the player. If the value is empty, the message will be empty as well -SCRIPT_COMMAND_IO_ECHO_MESSAGE = §f{0} - -SCRIPT_COMMAND_IO_ECHOACTIONBAR_HELP_1 = §eechoactionbar §8<§7value§8> -SCRIPT_COMMAND_IO_ECHOACTIONBAR_HELP_2 = §7Send a message to the player to the action bar. If the value is empty, the message will be empty as well - -SCRIPT_COMMAND_IO_INPUT_HELP_1 = §einput §8<§7variable§8> §8<§7text§8> -SCRIPT_COMMAND_IO_INPUT_HELP_2 = §7Request an input from the player, which will be written in the variable. The text is optional - -SCRIPT_COMMAND_STRING_INSERT_HELP_1 = §einsert §8<§7variable§8> §8<§7variable§8> §8<§7number§8> -SCRIPT_COMMAND_STRING_INSERT_HELP_2 = §einsert §8<§7variable§8> §8<§7variable§8> §8<§7variable§8> §8<§7number§8> -SCRIPT_COMMAND_STRING_INSERT_HELP_3 = Insert something into a String at a given index. The number is the index and the variable is the string. Optionally the result can be written in another or a new variable - -SCRIPT_COMMAND_STRING_REMOVE_HELP_1 = §eremove §8<§7variable§8> §8<§7from variable§8> -SCRIPT_COMMAND_STRING_REMOVE_HELP_2 = §eremove §8<§7variable§8> §8<§7variable§8> §8<§7from variable§8> -SCRIPT_COMMAND_STRING_REMOVE_HELP_3 = Removes all occurrences of a string from another string. - -SCRIPT_COMMAND_STRING_REPLACE_HELP_1 = §ereplace §8<§7variable§8> §8<§7from variable§8> §8<§7to variable§8> -SCRIPT_COMMAND_STRING_REPLACE_HELP_2 = §ereplace §8<§7variable§8> §8<§7variable§8> §8<§7from variable§8> §8<§7to variable§8> -SCRIPT_COMMAND_STRING_REPLACE_HELP_3 = Replaces all occurrences of a string from another string with a given string - -SCRIPT_COMMAND_STRING_SUBSTRING_HELP_1 = §esubstring §8<§7variable§8> §8<§7number§8> -SCRIPT_COMMAND_STRING_SUBSTRING_HELP_2 = §esubstring §8<§7variable§8> §8<§7variable§8> §8<§7number§8> -SCRIPT_COMMAND_STRING_SUBSTRING_HELP_3 = Shortens a string either from the start or the end, depending on whether the given index is positive (start) or negative (end) - -SCRIPT_COMMAND_VARIABLE_CONST_HELP_1 = §econst §8<§7variable§8> §8[§7value§8(§7s§8)§8] -SCRIPT_COMMAND_VARIABLE_CONST_HELP_2 = Writes a value in a constant, which can be a number, a boolean or a string - -SCRIPT_COMMAND_VARIABLE_CONVERT_HELP_1 = §econvert §8<§7variable§8> §8<§7value§8> -SCRIPT_COMMAND_VARIABLE_CONVERT_HELP_2 = Converts a value to 'number' if it's a number, or to 'boolean' if it's either 'true' or 'false'. Otherwise it remains of type 'text'. - -SCRIPT_COMMAND_VARIABLE_GLOBAL_HELP_1 = §eglobal §8<§7variable§8> §8[§7value§8(§7s§8)§8] -SCRIPT_COMMAND_VARIABLE_GLOBAL_HELP_2 = Writes a value in a variable, which can be a number, a boolean or a string - -SCRIPT_COMMAND_VARIABLE_UNGLOBAL_HELP_1 = §eunglobal §8<§7variable§8> -SCRIPT_COMMAND_VARIABLE_UNGLOBAL_HELP_2 = Deletes a global variable. - -SCRIPT_COMMAND_VARIABLE_UNVAR_HELP_1 = §eunvar §8<§7variable§8> -SCRIPT_COMMAND_VARIABLE_UNVAR_HELP_2 = Deletes a local variable. - -SCRIPT_COMMAND_VARIABLE_VAR_HELP_1 = §evar §8<§7variable§8> §8[§7value§8(§7s§8)§8] -SCRIPT_COMMAND_VARIABLE_VAR_HELP_2 = Writes a value in a variable, which can be a number, a boolean or a string - -SCRIPT_COMMAND_WORLD_GETMATERIAL_HELP_1 = §egetmaterial §8<§7variable§8> §8<§7number§8> §8<§7number§8> §8<§7number§8> -SCRIPT_COMMAND_WORLD_GETMATERIAL_HELP_2 = Writes the material of a block in the world in the variable - -SCRIPT_COMMAND_WORLD_SETMATERIAL_HELP_1 = §esetmaterial §8<§7variable§8> §8<§7number§8> §8<§7number§8> §8<§7number§8> -SCRIPT_COMMAND_WORLD_SETMATERIAL_HELP_2 = Sets a block in the world with the given material, given in the variable - -SCRIPT_COMMAND_EXIT_HELP_1 = §eexit -SCRIPT_COMMAND_EXIT_HELP_2 = Exits the script - -SCRIPT_COMMAND_IF_HELP_1 = §eif §8<§7true/false§8> §8<§7jump-point§8> -SCRIPT_COMMAND_IF_HELP_2 = §eif §8<§7true/false§8> §8<§7jump-point§8> §8<§7jump-point§8> -SCRIPT_COMMAND_IF_HELP_3 = §7Jump to the first jump-point if the given value is true or the second jump-point otherwise. - -SCRIPT_COMMAND_JUMP_HELP_1 = §ejump §8<§7jump-point§8> -SCRIPT_COMMAND_JUMP_HELP_2 = §7Jump to a jump-point. A jump-point is a line with §8'§7.§8'§7 before. -SCRIPT_COMMAND_JUMP_ERROR = §cUnknown jump-point: {0} - -SCRIPT_COMMAND_CALL_HELP_1 = §ecall §8<§7jump-point§8> -SCRIPT_COMMAND_CALL_HELP_2 = §7Jump to a jump-point. A jump-point is a line with §8'§7.§8'§7 before. Building a return stack alongside. Use 'return' to jump back. -SCRIPT_COMMAND_CALL_ERROR = §cUnknown jump-point: {0} - -SCRIPT_COMMAND_RETURN_HELP_1 = §ereturn -SCRIPT_COMMAND_RETURN_HELP_2 = §7Jump back to the last 'call' command -SCRIPT_COMMAND_RETURN_ERROR = §cNo 'call' command executed before - -SCRIPT_COMMAND_SLEEP_HELP_1 = §esleep §8<§7time§8> -SCRIPT_COMMAND_SLEEP_HELP_2 = Pauses the execution by the given number of game ticks. -SCRIPT_COMMAND_SLEEP_ERROR = §cThe given number needs to be greater than zero. +SCRIPT_ERROR_GUI=§cError in parsing script: Line {0} +SCRIPT_ERROR_GLOBAL=§cError in global script: Line {0} +SCRIPT_ERROR_CLICK=§cError in script: Line {0} ## GUI SCRIPT_GUI_ITEM_NAME = §eScript Help ## CustomScript -SCRIPT_HOTKEY_ITEM_NAME = §7Hotkey§8: §e{0} §8-§7 {1} -SCRIPT_EVENT_ITEM_NAME = §7Event§8: §e{0} §8-§7 {1} -SCRIPT_COMMAND_ITEM_NAME = §7Command§8: §e{0} +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 Menu GUI SCRIPT_MENU_GUI_ITEM_LORE_1 = §7Click to retrieve SCRIPT_MENU_GUI_ITEM_LORE_2 = §7Shift-Click to copy -SCRIPT_MENU_GUI_NAME = §eScript Commands {0}{1}§7% +SCRIPT_MENU_GUI_ITEM_LORE_3 = §7Right-Click to edit +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 -SCRIPT_MENU_GUI_DUPLICATE_COMMAND = §cCommand '{0}' already defined +SCRIPT_MENU_GUI_DUPLICATE_SCRIPT = §cScript '{0}' already defined +SCRIPT_MENU_GUI_ENTER_NAME = §eEnter a name SCRIPT_MENU_GUI_UNKNOWN_EVENT = §cEvent '{0}' cannot be defined SCRIPT_MENU_GUI_LIMIT = §cScript-Book limit reached -## ScriptCommand -SCRIPT_COMMAND_HELP = §8/§escript §8- §7Opens the ScriptGUI -SCRIPT_COMMAND_HELP_MENU = §8/§escript menu §8- §7Opens the ScriptGUI for custom commands shares across baus - -## Script GUI -SCRIPT_GUI_NAME = Script Elements -SCRIPT_GUI_COMMAND_CHAT = §eScript Command§8: §e{0} - -SCRIPT_GUI_CUSTOM_HOTKEYS = §eCustom Hotkeys -SCRIPT_GUI_CUSTOM_HOTKEYS_COMMANDS_LORE_1 = §7Write§8: §e#!HOTKEY 'Char' -SCRIPT_GUI_CUSTOM_HOTKEYS_COMMANDS_LORE_2 = §7at the beginning of a Script Book to use a custom hotkey. The 'Char' can be any char between '§eA§7' and '§eZ§7' as well as '§e0§7' and '§e9§7'. While executing two variables are available: §epressed§7, §ereleased§7. -SCRIPT_GUI_CUSTOM_HOTKEYS_COMMANDS_LORE_3 = §7You can add modifiers like "SHIFT", "CTRL", "ALT" or "META" to the hotkey. §7Example: §e#!HOTKEY SHIFT+A -SCRIPT_GUI_CUSTOM_HOTKEYS_COMMANDS_LORE_4 = §7 -SCRIPT_GUI_CUSTOM_HOTKEYS_COMMANDS_LORE_5 = §cThis can only be used in conjunction with the Fabric-Mod: §eAdvancedScripts §7found on §ehttps://steamwar.de/downloads - -SCRIPT_GUI_CUSTOM_COMMANDS = §eCustom Commands -SCRIPT_GUI_CUSTOM_COMMANDS_LORE_1 = §7Write§8: §e#!CMD 'COMMAND' -SCRIPT_GUI_CUSTOM_COMMANDS_LORE_2 = §7at the beginning of a Script Book to use a custom command. The command always starts with §e/§7 and can be structured as you wish. Everything in pointy Brackets '§e<>§7' will be counted as a Parameter and therefore as a variable. Parameters in round brackets '§e()§7' are optional. Simple texts as parameters get a variable with the same name with the values true/false, depending on whether the value was given or not - -SCRIPT_GUI_CUSTOM_EVENTS = §eCustom Events -SCRIPT_GUI_CUSTOM_EVENTS_LORE_1 = §7Write§8: §e#!EVENT 'EventName' -SCRIPT_GUI_CUSTOM_EVENTS_LORE_2 = §7at the beginning of a Script Book to use a custom event. Every event can ve canceled by using 'var cancel true'. After the event name are the variables which are usable in a Script Book. -SCRIPT_GUI_CUSTOM_EVENTS_LORE_3 = §7Usable Events are: -SCRIPT_GUI_CUSTOM_EVENTS_LORE_4 = §eFF -SCRIPT_GUI_CUSTOM_EVENTS_LORE_5 = §ePlaceBlock §8-§7 blockX, blockY, blockZ, blockType -SCRIPT_GUI_CUSTOM_EVENTS_LORE_6 = §eBreakBlock §8-§7 blockX, blockY, blockZ, blockType -SCRIPT_GUI_CUSTOM_EVENTS_LORE_7 = §eRightClick §8-§7 blockInHand, action, handType, -SCRIPT_GUI_CUSTOM_EVENTS_LORE_8 = §7 hasBlock §8[§7blockX, blockY, blockZ, blockFace§8]§e* -SCRIPT_GUI_CUSTOM_EVENTS_LORE_9 = §eLeftClick §8-§7 blockInHand, action, handType, -SCRIPT_GUI_CUSTOM_EVENTS_LORE_10 = §7 hasBlock §8[§7blockX, blockY, blockZ, blockFace§8]§e* -SCRIPT_GUI_CUSTOM_EVENTS_LORE_11 = §eTNTSpawn -SCRIPT_GUI_CUSTOM_EVENTS_LORE_12 = §eTNTExplode §8-§7 x, y, z -SCRIPT_GUI_CUSTOM_EVENTS_LORE_13 = §eTNTExplodeInBuild §8-§7 x, y, z -SCRIPT_GUI_CUSTOM_EVENTS_LORE_14 = §eSelfJoin §8-§7 x, y, z, playerName -SCRIPT_GUI_CUSTOM_EVENTS_LORE_15 = §eSelfLeave §8-§7 x, y, z, playerName -SCRIPT_GUI_CUSTOM_EVENTS_LORE_16 = §eDropItem §8-§7 material, x, y, z -SCRIPT_GUI_CUSTOM_EVENTS_LORE_17 = §eEntityDeath §8-§7 entityType, x, y, z -SCRIPT_GUI_CUSTOM_EVENTS_LORE_18 = §eScoreboard -SCRIPT_GUI_CUSTOM_EVENTS_LORE_STAR_1 = §e* §8-§7 Everything in brackets is only set if the variable before is set on §etrue§7. - -SCRIPT_GUI_OTHER = §eOther -SCRIPT_GUI_OTHER_LORE_1 = §7Comments start with §e#§7. -SCRIPT_GUI_OTHER_LORE_2 = §7Jump_Points start with §e.§7. -SCRIPT_GUI_OTHER_LORE_3 = §7A variable name enclosed in '§e{}§7' is replaced by its value. A variable can be prefixed with '§econst.§7' or '§elocal.§7' or '§eglobal.§7'. -SCRIPT_GUI_OTHER_LORE_4 = §7The following applies: -SCRIPT_GUI_OTHER_LORE_5 = §7- Local variables are only available in the script book. -SCRIPT_GUI_OTHER_LORE_6 = §7- Global variables are available in every script book. -SCRIPT_GUI_OTHER_LORE_7 = §7- Constant variables are variables from the server (e.g. player name, TPS, etc.) -SCRIPT_GUI_OTHER_LORE_8 = §7A variable can be appended with '§e.length§7' or '§e.type§7' or '§e.isset§7'. -SCRIPT_GUI_OTHER_LORE_9 = §7The following applies: -SCRIPT_GUI_OTHER_LORE_10 = §7- Length returns the length of the variable as a number. -SCRIPT_GUI_OTHER_LORE_11 = §7- Type returns the type (number, floating_number, text or boolean) as text. -SCRIPT_GUI_OTHER_LORE_12 = §7- Isset returns as a boolean whether the variable exists. -SCRIPT_GUI_OTHER_LORE_13 = §7Mathematical as well as logical operations can be specified in '§e{}§7'. -SCRIPT_GUI_OTHER_LORE_14 = §7The following applies: -SCRIPT_GUI_OTHER_LORE_15 = §7- arithmetic operators: §e+ * - /§7 as well as §e%§7 for modulo -SCRIPT_GUI_OTHER_LORE_16 = §7- Logical operators: §e==§7; §e!=§7; §e<=§7; §e>=§7; §e<§7; §e>§7; §e&&§7; §e||§7 (this is the character for or) -SCRIPT_GUI_OTHER_LORE_17 = §7- Bitwise operators: §e&§7; §e|§7; §e^ -SCRIPT_GUI_OTHER_LORE_18 = §7- Shift operators: §e<<§7; §e>>§7; §e>>>§7 - -SCRIPT_GUI_COMMAND_NAME = §7Command: §e{0} - -SCRIPT_GUI_CUSTOM_VARIABLES = §eCustom Variables - -SCRIPT_GUI_CONSTANT_TIME_NAME = §7Constant §etime -SCRIPT_GUI_CONSTANT_TIME_LORE = §7Formatted time variable. - -SCRIPT_GUI_CONSTANT_TICKS_NAME = §7Constant §eticks -SCRIPT_GUI_CONSTANT_TICKS_LORE = §7Ticks since server start. - -SCRIPT_GUI_CONSTANT_TRACE_NAME = §7Constant §etrace -SCRIPT_GUI_CONSTANT_TRACE_LORE = §etrue§7 if the trace is activated. - -SCRIPT_GUI_CONSTANT_AUTO_TRACE_NAME = §7Constant §eautotrace -SCRIPT_GUI_CONSTANT_AUTO_TRACE_LORE = §etrue§7 if the auto trace is activated. - -SCRIPT_GUI_CONSTANT_TRACE_STATUS_NAME = §7Constant §etrace_status -SCRIPT_GUI_CONSTANT_TRACE_STATUS_LORE = §7One of: §eOFF§8, §eIDLE§8, §eIDLE_AUTO_EXPLODE§8, §eIDLE_AUTO_IGNITE§8, §eIDLE_SINGLE - -SCRIPT_GUI_CONSTANT_TRACE_TIME_NAME = §7Constant §etrace_time -SCRIPT_GUI_CONSTANT_TRACE_TIME_LORE = §e0§7 if the trace is not active, otherwise the time in ticks since the trace was started. - -SCRIPT_GUI_CONSTANT_LOADER_STATUS_NAME = §7Constant §eloader_status -SCRIPT_GUI_CONSTANT_LOADER_STATUS_LORE = §7One of: §eOFF§8, §eSETUP§8, §eRUNNING§8, §eSINGLE§8, §ePAUSE§8, §eEND - -SCRIPT_GUI_CONSTANT_TNT_NAME = §7Constant §etnt -SCRIPT_GUI_CONSTANT_TNT_LORE = §etrue§7 if tnt is not deactivated. - -SCRIPT_GUI_CONSTANT_ONLY_TB_NAME = §7Constant §etnt_onlytb -SCRIPT_GUI_CONSTANT_ONLY_TB_LORE = §etrue§7 if tnt no build is activated. - -SCRIPT_GUI_CONSTANT_FREEZE_NAME = §7Constant §efreeze -SCRIPT_GUI_CONSTANT_FREEZE_LORE = §etrue§7 if freeze is not deactivated. - -SCRIPT_GUI_CONSTANT_FIRE_NAME = §7Constant §efire -SCRIPT_GUI_CONSTANT_FIRE_LORE = §etrue§7 if fire is not deactivated. - -SCRIPT_GUI_CONSTANT_PROTECT_NAME = §7Constant §eprotect -SCRIPT_GUI_CONSTANT_PROTECT_LORE = §etrue§7 if protect is activated. - -SCRIPT_GUI_CONSTANT_X_NAME = §7Constant §ex -SCRIPT_GUI_CONSTANT_X_LORE = §ex§7 position of the player. - -SCRIPT_GUI_CONSTANT_Y_NAME = §7Constant §ey -SCRIPT_GUI_CONSTANT_Y_LORE = §ey§7 position of the player. - -SCRIPT_GUI_CONSTANT_Z_NAME = §7Constant §ez -SCRIPT_GUI_CONSTANT_Z_LORE = §ez§7 position of the player. - -SCRIPT_GUI_CONSTANT_NAME_NAME = §7Constant §ename -SCRIPT_GUI_CONSTANT_NAME_LORE = §eDisplay§7 name of the player. - -SCRIPT_GUI_CONSTANT_SNEAK_NAME = §7Constant §esneaking -SCRIPT_GUI_CONSTANT_SNEAK_LORE = §etrue§7 if the player is sneaking. - -SCRIPT_GUI_CONSTANT_SPRINTING_NAME = §7Constant §esprinting -SCRIPT_GUI_CONSTANT_SPRINTING_LORE = §etrue§7 is the player is sprinting. - -SCRIPT_GUI_CONSTANT_SLOT_NAME = §7Constant §eslot -SCRIPT_GUI_CONSTANT_SLOT_LORE = §e0-8§7 for the selected slot. - -SCRIPT_GUI_CONSTANT_SLOT_MATERIAL_NAME = §7Constant §eslotmaterial -SCRIPT_GUI_CONSTANT_SLOT_MATERIAL_LORE = §eMaterial§7 of the item in the current slot - -SCRIPT_GUI_CONSTANT_OFF_HAND_MATERIAL_NAME = §7Constant §eoffhandmaterial -SCRIPT_GUI_CONSTANT_OFF_HAND_MATERIAL_LORE = §eMaterial§7 of the item in the off hand - -SCRIPT_GUI_CONSTANT_SLOT_MATERIAL_DISPLAY_NAME = §7Constant §ematerialname -SCRIPT_GUI_CONSTANT_SLOT_MATERIAL_DISPLAY_LORE = §eName§7 of the item in the current slot - -SCRIPT_GUI_CONSTANT_OFF_HAND_MATERIAL_DISPLAY_NAME = §7Constant §eoffmaterialname -SCRIPT_GUI_CONSTANT_OFF_HAND_MATERIAL_DISPLAY_LORE = §eName§7 of the item in the off hand - -SCRIPT_GUI_CONSTANT_REGION_TYPE_NAME = §7Constant §eregion_type -SCRIPT_GUI_CONSTANT_REGION_TYPE_LORE = §eregion type§7 of the current region - -SCRIPT_GUI_CONSTANT_REGION_NAME_NAME = §7Constant §eregion_name -SCRIPT_GUI_CONSTANT_REGION_NAME_LORE = §eregion name§7 of the current region - -SCRIPT_GUI_CONSTANT_TPS_NAME = §7Constant §etps -SCRIPT_GUI_CONSTANT_TPS_LORE = §etps§7 of the server - -SCRIPT_GUI_CONSTANT_TPS_LIMIT_NAME = §7Constant §etps_limit -SCRIPT_GUI_CONSTANT_TPS_LIMIT_LORE = §etps_limit§7 of the server - # Shield Printing SHIELD_PRINTING_NO_REGION = §cYou are not in a region. SHIELD_PRINTING_NOT_RUNNING = §cThe shield printing is not running. diff --git a/BauSystem_Main/src/BauSystem_de.properties b/BauSystem_Main/src/BauSystem_de.properties index 804afa46..50f587a4 100644 --- a/BauSystem_Main/src/BauSystem_de.properties +++ b/BauSystem_Main/src/BauSystem_de.properties @@ -226,295 +226,26 @@ GUI_EDITOR_ITEM_CLOSE=§eSchließen GUI_EDITOR_TITLE_MORE=Item auswählen # Script -## Errors -SCRIPT_SLEEP_ERROR = §cFüge ein sleep in dein Script ein -SCRIPT_COMMAND_ERROR_UNKNOWN_VAR = §cUnbekannte Variable {0} -SCRIPT_COMMAND_ERROR_EXPRESSION = §cExpression fehler in: {0} -SCRIPT_COMMAND_ERROR_FIRST_ARG_NOVAR = §cDas erste Argument fehlt und sollte eine Variable sein -SCRIPT_COMMAND_ERROR_FIRST_ARG_NONUMER = §cDas erste Argument fehlt und sollte eine Zahl sein -SCRIPT_COMMAND_ERROR_FIRST_ARG_NOVAR_OR_VALUE = §cDas erste Argument fehlt und sollte eine Variable oder ein Wert sein -SCRIPT_COMMAND_ERROR_FIRST_ARG_NOJUMPPOINT = §cDas erste Argument fehlt und sollte ein Jump-Point sein -SCRIPT_COMMAND_ERROR_SECOND_ARG_NOVAR = §cDas zweite Argument fehlt und sollte eine Variable sein -SCRIPT_COMMAND_ERROR_SECOND_ARG_NOVALUE = §cDas zweite Argument fehlt und sollte ein Wert sein -SCRIPT_COMMAND_ERROR_SECOND_ARG_NOJUMPPOINT = §cDas dritte Argument fehlt und sollte ein Jump-Point sein -SCRIPT_COMMAND_ERROR_THIRD_ARG_NOVAR = §cDas dritte Argument fehlt und sollte eine Variable sein -SCRIPT_COMMAND_ERROR_THIRD_ARG_NOVALUE = §cDas dritte Argument fehlt und sollte ein Wert sein -SCRIPT_COMMAND_ERROR_THIRD_ARG_NOVAR_OR_NUMBER = §cDas dritte Argument fehlt und sollte eine Variable/Zahl sein -SCRIPT_COMMAND_ERROR_FOURTH_ARG_NOVALUE = §cDas vierte Argument fehlt und sollte ein Wert sein - -SCRIPT_COMMAND_ERROR_BOOLEAN_COMPARE = §cNur Booleans können verglichen werden -SCRIPT_COMMAND_ERROR_NUMBER_COMPARE = §cNur Zahlen können verglichen werden - -SCRIPT_COMMAND_ERROR_ONLY_STRINGS_ALLOWED = §cNur Strings können verwendet werden -SCRIPT_COMMAND_ERROR_ONLY_NUMBERS_ALLOWED = §cNur Zahlen können verwendet werden - -SCRIPT_COMMAND_ERROR_UNKNOWN_OPERATION = §cUnbekannte Operation: {0} - -## Commands -SCRIPT_COMMAND_ARITHMETIC_ADD_ERROR = §cNur Zahlen können addiert werden -SCRIPT_COMMAND_ARITHMETIC_DIV_ERROR = §cNur Zahlen können dividiert werden -SCRIPT_COMMAND_ARITHMETIC_MUL_ERROR = §cNur Zahlen können multipliziert werden -SCRIPT_COMMAND_ARITHMETIC_SUB_ERROR = §cNur Zahlen können subtrahiert werden -SCRIPT_COMMAND_ARITHMETIC_POW_ERROR = §cNur Zahlen können potenziert werden -SCRIPT_COMMAND_ARITHMETIC_MOD_ERROR = §cNur ganze Zahlen können für modulo verwendet werden -SCRIPT_COMMAND_ARITHMETIC_BIT_AND_ERROR = §cNur ganze Zahlen und booleans können für und verwendet werden -SCRIPT_COMMAND_ARITHMETIC_BIT_OR_ERROR = §cNur ganze Zahlen und booleans können für oder verwendet werden -SCRIPT_COMMAND_ARITHMETIC_BIT_XOR_ERROR = §cNur ganze Zahlen und booleans können für xor verwendet werden - -SCRIPT_COMMAND_ARITHMETIC_OTHER_CEIL_HELP_1 = §eceil §8<§7Variable§8> §8<§7Variable§8|§7Wert§8> -SCRIPT_COMMAND_ARITHMETIC_OTHER_CEIL_HELP_2 = §eceil §8<§7Variable§8> §8<§7Variable§8|§7Wert§8> §8<§7Variable§8|§7Wert§8> -SCRIPT_COMMAND_ARITHMETIC_OTHER_CEIL_HELP_3 = Aufrunden der zweiten Zahl und schreibt es in die erste oder aufrunden der zweiten Zahl auf die Nachkommastellenanzahl aus der dritten Zahl und schreibt es in die erste. -SCRIPT_COMMAND_ARITHMETIC_OTHER_CEIL_ERROR_1 = §cNur Fließ-Komma-Zahlen können aufgerundet werden -SCRIPT_COMMAND_ARITHMETIC_OTHER_CEIL_ERROR_2 = §cEs kann nur auf ganze Nachkommastellen gerundet werden - -SCRIPT_COMMAND_ARITHMETIC_OTHER_FLOOR_HELP_1 = §efloor §8<§7Variable§8> §8<§7Variable§8|§7Wert§8> -SCRIPT_COMMAND_ARITHMETIC_OTHER_FLOOR_HELP_2 = §efloor §8<§7Variable§8> §8<§7Variable§8|§7Wert§8> §8<§7Variable§8|§7Wert§8> -SCRIPT_COMMAND_ARITHMETIC_OTHER_FLOOR_HELP_3 = Abrunden der zweiten Zahl und schreibt es in die erste oder abrunden der zweiten Zahl auf die Nachkommastellenanzahl aus der dritten Zahl und schreibt es in die erste. -SCRIPT_COMMAND_ARITHMETIC_OTHER_FLOOR_ERROR_1 = §cNur Fließ-Komma-Zahlen können abgerundet werden -SCRIPT_COMMAND_ARITHMETIC_OTHER_FLOOR_ERROR_2 = §cEs kann nur auf ganze Nachkommastellen gerundet werden - -SCRIPT_COMMAND_ARITHMETIC_OTHER_ROUND_HELP_1 = §eround §8<§7Variable§8> §8<§7Variable§8|§7Wert§8> -SCRIPT_COMMAND_ARITHMETIC_OTHER_ROUND_HELP_2 = §eround §8<§7Variable§8> §8<§7Variable§8|§7Wert§8> §8<§7Variable§8|§7Wert§8> -SCRIPT_COMMAND_ARITHMETIC_OTHER_ROUND_HELP_3 = Runden der zweiten Zahl und schreibt es in die erste oder runden der zweiten Zahl auf die Nachkommastellenanzahl aus der dritten Zahl und schreibt es in die erste. -SCRIPT_COMMAND_ARITHMETIC_OTHER_ROUND_ERROR_1 = §cNur Fließ-Komma-Zahlen können gerundet werden -SCRIPT_COMMAND_ARITHMETIC_OTHER_ROUND_ERROR_2 = §cEs kann nur auf ganze Nachkommastellen gerundet werden - -SCRIPT_COMMAND_IO_ECHO_HELP_1 = §eecho §8<§7Wert§8> -SCRIPT_COMMAND_IO_ECHO_HELP_2 = §7Schreibe etwas dem Spieler. Wenn kein Wert angegeben wurde ist die Nachricht leer. -SCRIPT_COMMAND_IO_ECHO_MESSAGE = §f{0} - -SCRIPT_COMMAND_IO_ECHOACTIONBAR_HELP_1 = §eechoactionbar §8<§7Wert§8> -SCRIPT_COMMAND_IO_ECHOACTIONBAR_HELP_2 = §7Schreibe etwas dem Spieler in der ActionBar. Wenn kein Wert angegeben wurde ist die Nachricht leer. - -SCRIPT_COMMAND_IO_INPUT_HELP_1 = §einput §8<§7Variable§8> §8<§7Text§8> -SCRIPT_COMMAND_IO_INPUT_HELP_2 = §7Fordere eine Eingabe von dem Spieler, welche in die Variable geschrieben wird. Der Text ist optional. - -SCRIPT_COMMAND_STRING_INSERT_HELP_1 = §einsert §8<§7Variable§8> §8<§7Variable§8> §8<§7Zahl§8> -SCRIPT_COMMAND_STRING_INSERT_HELP_2 = §einsert §8<§7Variable§8> §8<§7Variable§8> §8<§7Variable§8> §8<§7Zahl§8> -SCRIPT_COMMAND_STRING_INSERT_HELP_3 = Füge etwas in einen String an einer Stelle ein. Die Zahl ist für die Position und die Variable davor für was. Schreibe optional dies in eine neue oder andere Variable. - -SCRIPT_COMMAND_STRING_REMOVE_HELP_1 = §eremove §8<§7Variable§8> §8<§7Von Variable§8> -SCRIPT_COMMAND_STRING_REMOVE_HELP_2 = §eremove §8<§7Variable§8> §8<§7Variable§8> §8<§7Von Variable§8> -SCRIPT_COMMAND_STRING_REMOVE_HELP_3 = Lösche eine Zeichenkette aus dem Ursprung. Dies ersetzt nicht nur die erste Stelle sondern alle. - -SCRIPT_COMMAND_STRING_REPLACE_HELP_1 = §ereplace §8<§7Variable§8> §8<§7Von Variable§8> §8<§7Zu Variable§8> -SCRIPT_COMMAND_STRING_REPLACE_HELP_2 = §ereplace §8<§7Variable§8> §8<§7Variable§8> §8<§7Von Variable§8> §8<§7Zu Variable§8> -SCRIPT_COMMAND_STRING_REPLACE_HELP_3 = Ersetzte eine Zeichenkette aus dem Ursprung mit einer neuen Zeichenkette. Dies ersetzt nicht nur die erste Stelle sondern alle. - -SCRIPT_COMMAND_STRING_SUBSTRING_HELP_1 = §esubstring §8<§7Variable§8> §8<§7Zahl§8> -SCRIPT_COMMAND_STRING_SUBSTRING_HELP_2 = §esubstring §8<§7Variable§8> §8<§7Variable§8> §8<§7Zahl§8> -SCRIPT_COMMAND_STRING_SUBSTRING_HELP_3 = Kürze einen String entweder vorne oder hinter, je nachdem ob die Zahl positiv (vorne) oder negativ (hinten) ist. - -SCRIPT_COMMAND_VARIABLE_CONST_HELP_1 = §econst §8<§7Variable§8> §8[§7Value§8(§7s§8)§8] -SCRIPT_COMMAND_VARIABLE_CONST_HELP_2 = Schreibt in eine Konstante einen Wert rein, welcher eine Zahl sein kann, ein Boolscher Wert oder ein Text. - -SCRIPT_COMMAND_VARIABLE_CONVERT_HELP_1 = §econvert §8<§7Variable§8> §8<§7Value§8> -SCRIPT_COMMAND_VARIABLE_CONVERT_HELP_2 = Konvertiere den Value zu 'number' wenn es eine Zahl ist, oder zu 'boolean' bei 'true' oder 'false' und behalte 'text' bei wenn nichts zutrifft. - -SCRIPT_COMMAND_VARIABLE_GLOBAL_HELP_1 = §eglobal §8<§7Variable§8> §8[§7Value§8(§7s§8)§8] -SCRIPT_COMMAND_VARIABLE_GLOBAL_HELP_2 = Schreibt in eine Variable einen Wert rein, welcher eine Zahl sein kann, ein Boolscher Wert oder ein Text. - -SCRIPT_COMMAND_VARIABLE_UNGLOBAL_HELP_1 = §eunglobal §8<§7Variable§8> -SCRIPT_COMMAND_VARIABLE_UNGLOBAL_HELP_2 = Lösche eine Globale variable. - -SCRIPT_COMMAND_VARIABLE_UNVAR_HELP_1 = §eunvar §8<§7Variable§8> -SCRIPT_COMMAND_VARIABLE_UNVAR_HELP_2 = Lösche eine Locale variable. - -SCRIPT_COMMAND_VARIABLE_VAR_HELP_1 = §evar §8<§7Variable§8> §8[§7Value§8(§7s§8)§8] -SCRIPT_COMMAND_VARIABLE_VAR_HELP_2 = Schreibt in eine Variable einen Wert rein, welcher eine Zahl sein kann, ein Boolscher Wert oder ein Text. - -SCRIPT_COMMAND_WORLD_GETMATERIAL_HELP_1 = §egetmaterial §8<§7Variable§8> §8<§7Zahl§8> §8<§7Zahl§8> §8<§7Zahl§8> -SCRIPT_COMMAND_WORLD_GETMATERIAL_HELP_2 = Schreibt das material von einem Block in der Welt in die Variable. - -SCRIPT_COMMAND_WORLD_SETMATERIAL_HELP_1 = §esetmaterial §8<§7Variable§8> §8<§7Zahl§8> §8<§7Zahl§8> §8<§7Zahl§8> -SCRIPT_COMMAND_WORLD_SETMATERIAL_HELP_2 = Setzt an einem Block in der Welt das Material der ersten Variable. - -SCRIPT_COMMAND_EXIT_HELP_1 = §eexit -SCRIPT_COMMAND_EXIT_HELP_2 = Beendet das ausführen des Scripts. - -SCRIPT_COMMAND_IF_HELP_1 = §eif §8<§7true/false§8> §8<§7jump-point§8> -SCRIPT_COMMAND_IF_HELP_2 = §eif §8<§7true/false§8> §8<§7jump-point§8> §8<§7jump-point§8> -SCRIPT_COMMAND_IF_HELP_3 = §7Springe zu ersten Stelle, wenn der Wert true ist. Oder zu dem zweiten, wenn dies nicht der fall ist. - -SCRIPT_COMMAND_JUMP_HELP_1 = §ejump §8<§7Jump-Point§8> -SCRIPT_COMMAND_JUMP_HELP_2 = §7Springe zu einer anderen Zeile. Hierbei ist ein Jump-Point eine Zeile mit §8'§7.§8'§7 vor. -SCRIPT_COMMAND_JUMP_ERROR = §cDer Jump-Point ({0}) ist nicht definiert. - -SCRIPT_COMMAND_CALL_HELP_1 = §ecall §8<§7Jump-Point§8> -SCRIPT_COMMAND_CALL_HELP_2 = §7Springe zu einer anderen Zeile. Hierbei ist ein Jump-Point eine Zeile mit §8'§7.§8'§7 vor. Hierbei wird auf den ReturnStack die jetzige Zeile geschrieben, dahin kann man wieder mit 'return' zurück springen. -SCRIPT_COMMAND_CALL_ERROR = §cDer Jump-Point ({0}) ist nicht definiert. - -SCRIPT_COMMAND_RETURN_HELP_1 = §ereturn -SCRIPT_COMMAND_RETURN_HELP_2 = §7Springe zum letzten 'call' Befehl. -SCRIPT_COMMAND_RETURN_ERROR = §cEs wurde kein 'call' Befehl ausgeführt - -SCRIPT_COMMAND_SLEEP_HELP_1 = §esleep §8<§7Time§8> -SCRIPT_COMMAND_SLEEP_HELP_2 = Pausiert das Ausführen des Scripts. Das erste Argument ist in GameTicks. -SCRIPT_COMMAND_SLEEP_ERROR = §cDie Zeit muss eine Zahl großer 0 sein. - ## GUI SCRIPT_GUI_ITEM_NAME = §eScript Hilfe ## CustomScript -SCRIPT_HOTKEY_ITEM_NAME = §7Hotkey§8: §e{0} §8-§7 {1} -SCRIPT_EVENT_ITEM_NAME = §7Event§8: §e{0} §8-§7 {1} -SCRIPT_COMMAND_ITEM_NAME = §7Command§8: §e{0} +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 Menu GUI SCRIPT_MENU_GUI_ITEM_LORE_1 = §7Klicke zum rausnehmen SCRIPT_MENU_GUI_ITEM_LORE_2 = §7Shift Klicke zum kopieren -SCRIPT_MENU_GUI_NAME = §eScript Commands {0}{1}§7% +SCRIPT_MENU_GUI_ITEM_LORE_3 = §7Rechts Klicke zum editieren +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 -SCRIPT_MENU_GUI_DUPLICATE_COMMAND = §cCommand '{0}' bereits definiert +SCRIPT_MENU_GUI_DUPLICATE_SCRIPT = §cCommand '{0}' bereits definiert SCRIPT_MENU_GUI_UNKNOWN_EVENT = §cEvent '{0}' ist nicht definierbar SCRIPT_MENU_GUI_LIMIT = §cScript-Buch Limit erreicht -## ScriptCommand -SCRIPT_COMMAND_HELP = §8/§escript §8- §7Öffnet die ScriptGUI -SCRIPT_COMMAND_HELP_MENU = §8/§escript menu §8- §7Öffnet die ScriptMenuGUI für Custom Command bauübergreifend - -## Script GUI -SCRIPT_GUI_NAME = Script Elements -SCRIPT_GUI_COMMAND_CHAT = §eScript Command§8: §e{0} - -SCRIPT_GUI_CUSTOM_HOTKEYS = §eCustom Hotkeys -SCRIPT_GUI_CUSTOM_HOTKEYS_COMMANDS_LORE_1 = §7Schreibe§8: §e#!HOTKEY 'Char' -SCRIPT_GUI_CUSTOM_HOTKEYS_COMMANDS_LORE_2 = §7am Anfang eines Skript Buches, um einen benutzerdefinierten Hotkey zu verwenden. Das 'Char' kann ein beliebiges Zeichen zwischen '§eA§7' und '§eZ§7' sowie '§e0§7' und '§e9§7' sein. Während der Ausführung sind zwei Variablen verfügbar: §epressed§7, §ereleased§7 -SCRIPT_GUI_CUSTOM_HOTKEYS_COMMANDS_LORE_3 = §7Sie können dem Hotkey Modifikatoren wie "SHIFT", "CTRL", "ALT" oder "META" hinzufügen. §7Beispiel: §e#!HOTKEY SHIFT+A -SCRIPT_GUI_CUSTOM_HOTKEYS_COMMANDS_LORE_4 = §7 -SCRIPT_GUI_CUSTOM_HOTKEYS_COMMANDS_LORE_5 = §cDies kann nur in Verbindung mit den Fabric-Mod: §eAdvancedScripts §7runterladbar unter §ehttps://steamwar.de/downloads §cverwendet werden. - -SCRIPT_GUI_CUSTOM_COMMANDS = §eCustom Commands -SCRIPT_GUI_CUSTOM_COMMANDS_LORE_1 = §7Schreibe§8: §e#!CMD 'COMMAND' -SCRIPT_GUI_CUSTOM_COMMANDS_LORE_2 = §7an den Anfang eines Script Buches um ein Custom Command zu nutzen. Der Befehl startet immer mit §e/§7 und kann dann so aufgebaut sein wie du willst. Alles was in Spitzen Klammern steht '§e<>§7' wird als Parameter und somit als Variable gewertet. Parameter, welche in runden Klammern stehen sind Optional. Einfache Texte als Parameter bekommen eine gleichnamige Variable mit true/false als Wert je nachdem ob dieser angegeben wurde oder nicht - -SCRIPT_GUI_CUSTOM_EVENTS = §eCustom Events -SCRIPT_GUI_CUSTOM_EVENTS_LORE_1 = §7Schreibe§8: §e#!EVENT 'EventName' -SCRIPT_GUI_CUSTOM_EVENTS_LORE_2 = §7an den Anfang eines Script Buches um ein Custom Event zu nutzen. Jedes Event kann durch 'var cancel true' gecancelt werden. Hinter dem Event Namen stehen die Variablen, welche im Script durch das Event nutztbar sind. -SCRIPT_GUI_CUSTOM_EVENTS_LORE_3 = §7Nutzbare Events sind: -SCRIPT_GUI_CUSTOM_EVENTS_LORE_4 = §eFF -SCRIPT_GUI_CUSTOM_EVENTS_LORE_5 = §ePlaceBlock §8-§7 blockX, blockY, blockZ, blockType -SCRIPT_GUI_CUSTOM_EVENTS_LORE_6 = §eBreakBlock §8-§7 blockX, blockY, blockZ, blockType -SCRIPT_GUI_CUSTOM_EVENTS_LORE_7 = §eRightClick §8-§7 blockInHand, action, handType, -SCRIPT_GUI_CUSTOM_EVENTS_LORE_8 = §7 hasBlock §8[§7blockX, blockY, blockZ, blockFace§8]§e* -SCRIPT_GUI_CUSTOM_EVENTS_LORE_9 = §eLeftClick §8-§7 blockInHand, action, handType, -SCRIPT_GUI_CUSTOM_EVENTS_LORE_10 = §7 hasBlock §8[§7blockX, blockY, blockZ, blockFace§8]§e* -SCRIPT_GUI_CUSTOM_EVENTS_LORE_11 = §eTNTSpawn -SCRIPT_GUI_CUSTOM_EVENTS_LORE_12 = §eTNTExplode §8-§7 x, y, z -SCRIPT_GUI_CUSTOM_EVENTS_LORE_13 = §eTNTExplodeInBuild §8-§7 x, y, z -SCRIPT_GUI_CUSTOM_EVENTS_LORE_14 = §eSelfJoin §8-§7 x, y, z, playerName -SCRIPT_GUI_CUSTOM_EVENTS_LORE_15 = §eSelfLeave §8-§7 x, y, z, playerName -SCRIPT_GUI_CUSTOM_EVENTS_LORE_16 = §eDropItem §8-§7 material, x, y, z -SCRIPT_GUI_CUSTOM_EVENTS_LORE_17 = §eEntityDeath §8-§7 entityType, x, y, z -SCRIPT_GUI_CUSTOM_EVENTS_LORE_STAR_1 = §e* §8-§7 Alles in den Klammern ist nur gesetzt, wenn die Variable davor auf §etrue§7 gesetzt ist. - -SCRIPT_GUI_OTHER = §eOther -SCRIPT_GUI_OTHER_LORE_1 = §7Kommentare fangen mit §e#§7 an. -SCRIPT_GUI_OTHER_LORE_2 = §7Jump_Points fangen mit §e.§7 an. -SCRIPT_GUI_OTHER_LORE_3 = §7Einen Variablennamen, der in '§e{}§7' eingeschlossen ist wird durch seinen Wert ersetzt. Eine Variable kann mit den Präfixen '§econst.§7' oder '§elocal.§7' oder '§eglobal.§7' versehen werden. -SCRIPT_GUI_OTHER_LORE_4 = §7Dabei gilt: -SCRIPT_GUI_OTHER_LORE_5 = §7- Lokalevariablen sind nur in dem Script-Buch verfügbar. -SCRIPT_GUI_OTHER_LORE_6 = §7- Gloablevariablen sind in jedem Script-Buch verfügbar. -SCRIPT_GUI_OTHER_LORE_7 = §7- Konstantevariablen sind Variablen vom Server (z.B. Spielername, TPS usw.) -SCRIPT_GUI_OTHER_LORE_8 = §7Eine Variable kann mit den Appendixen '§e.length§7' oder '§e.type§7' oder '§e.isset§7' versehen werden. -SCRIPT_GUI_OTHER_LORE_9 = §7Dabei gilt: -SCRIPT_GUI_OTHER_LORE_10 = §7- Length gibt die Länge der variable als Zahl zurück. -SCRIPT_GUI_OTHER_LORE_11 = §7- Type gibt den typen (number, floating number, text oder boolean) als Text zurück. -SCRIPT_GUI_OTHER_LORE_12 = §7- Isset gibt als boolean zurück, ob die Variable existiert. -SCRIPT_GUI_OTHER_LORE_13 = §7Mathematische sowie logische Operationsvorgänge können in '§e{}§7' angegeben werden. -SCRIPT_GUI_OTHER_LORE_14 = §7Dabei gilt: -SCRIPT_GUI_OTHER_LORE_15 = §7- Rechenoperatoren: §e+ * - /§7 sowie §e%§7 für Modulo -SCRIPT_GUI_OTHER_LORE_16 = §7- Logische Operatoren: §e==§7; §e!=§7; §e<=§7; §e>=§7; §e<§7; §e>§7; §e&&§7; §e||§7 (Dies ist das Zeichen für oder) -SCRIPT_GUI_OTHER_LORE_17 = §7- Bitweise Operatoren: §e&§7; §e|§7; §e^ -SCRIPT_GUI_OTHER_LORE_18 = §7- Shift Operatoren: §e<<§7; §e>>§7; §e>>>§7 - -SCRIPT_GUI_COMMAND_NAME = §7Command: §e{0} - -SCRIPT_GUI_CUSTOM_VARIABLES = §eCustom Variables - -SCRIPT_GUI_CONSTANT_TIME_NAME = §7Constant §etime -SCRIPT_GUI_CONSTANT_TIME_LORE = §7Formattierte Uhrzeit - -SCRIPT_GUI_CONSTANT_TICKS_NAME = §7Constant §eticks -SCRIPT_GUI_CONSTANT_TICKS_LORE = §7Ticks seit dem Serverstart - -SCRIPT_GUI_CONSTANT_TRACE_NAME = §7Constant §etrace -SCRIPT_GUI_CONSTANT_TRACE_LORE = §etrue§7 wenn gerade der Tracer an ist. - -SCRIPT_GUI_CONSTANT_AUTO_TRACE_NAME = §7Constant §eautotrace -SCRIPT_GUI_CONSTANT_AUTO_TRACE_LORE = §etrue§7 wenn gerade der AutoTracer an ist. - -SCRIPT_GUI_CONSTANT_TRACE_STATUS_NAME = §7Constant §etrace_status -SCRIPT_GUI_CONSTANT_TRACE_STATUS_LORE = §7Ein Wert von: §eOFF§8, §eIDLE§8, §eIDLE_AUTO_EXPLODE§8, §eIDLE_AUTO_IGNITE§8, §eIDLE_SINGLE - -SCRIPT_GUI_CONSTANT_TRACE_TIME_NAME = §7Constant §etrace_time -SCRIPT_GUI_CONSTANT_TRACE_TIME_LORE = §e0§7 wenn gerade kein TNT getraced wird, ansonsten die Zeit in Ticks seit dem Start des Tracers. - -SCRIPT_GUI_CONSTANT_LOADER_STATUS_NAME = §7Constant §eloader_status -SCRIPT_GUI_CONSTANT_LOADER_STATUS_LORE = §7Ein Wert von: §eOFF§8, §eSETUP§8, §eRUNNING§8, §eSINGLE§8, §ePAUSE§8, §eEND - -SCRIPT_GUI_CONSTANT_TNT_NAME = §7Constant §etnt -SCRIPT_GUI_CONSTANT_TNT_LORE = §etrue§7 wenn TNT nicht ausgeschaltet ist. - -SCRIPT_GUI_CONSTANT_ONLY_TB_NAME = §7Constant §etnt_onlytb -SCRIPT_GUI_CONSTANT_ONLY_TB_LORE = §etrue§7 wenn TNT Nur Testblock an ist. - -SCRIPT_GUI_CONSTANT_FREEZE_NAME = §7Constant §efreeze -SCRIPT_GUI_CONSTANT_FREEZE_LORE = §etrue§7 wenn Freeze nicht ausgeschaltet ist. - -SCRIPT_GUI_CONSTANT_FIRE_NAME = §7Constant §efire -SCRIPT_GUI_CONSTANT_FIRE_LORE = §etrue§7 wenn Fire nicht ausgeschaltet ist. - -SCRIPT_GUI_CONSTANT_PROTECT_NAME = §7Constant §eprotect -SCRIPT_GUI_CONSTANT_PROTECT_LORE = §etrue§7 wenn Protect angeschaltet ist. - -SCRIPT_GUI_CONSTANT_X_NAME = §7Constant §ex -SCRIPT_GUI_CONSTANT_X_LORE = §ex§7 Position des Spielers. - -SCRIPT_GUI_CONSTANT_Y_NAME = §7Constant §ey -SCRIPT_GUI_CONSTANT_Y_LORE = §ey§7 Position des Spielers. - -SCRIPT_GUI_CONSTANT_Z_NAME = §7Constant §ez -SCRIPT_GUI_CONSTANT_Z_LORE = §ez§7 Position des Spielers. - -SCRIPT_GUI_CONSTANT_NAME_NAME = §7Constant §ename -SCRIPT_GUI_CONSTANT_NAME_LORE = §eDisplay§7 Name des Spielers. - -SCRIPT_GUI_CONSTANT_SNEAK_NAME = §7Constant §esneaking -SCRIPT_GUI_CONSTANT_SNEAK_LORE = §etrue§7 wenn der Spieler gerade sneakt. - -SCRIPT_GUI_CONSTANT_SPRINTING_NAME = §7Constant §esprinting -SCRIPT_GUI_CONSTANT_SPRINTING_LORE = §etrue§7 wenn der Spieler gerade rennt. - -SCRIPT_GUI_CONSTANT_SLOT_NAME = §7Constant §eslot -SCRIPT_GUI_CONSTANT_SLOT_LORE = §e0-8§7 für den ausgewählten slot. - -SCRIPT_GUI_CONSTANT_SLOT_MATERIAL_NAME = §7Constant §eslotmaterial -SCRIPT_GUI_CONSTANT_SLOT_MATERIAL_LORE = §eMaterial§7 des Items im Slot - -SCRIPT_GUI_CONSTANT_OFF_HAND_MATERIAL_NAME = §7Constant §eoffhandmaterial -SCRIPT_GUI_CONSTANT_OFF_HAND_MATERIAL_LORE = §eMaterial§7 des Items in der Off Hand - -SCRIPT_GUI_CONSTANT_SLOT_MATERIAL_DISPLAY_NAME = §7Constant §ematerialname -SCRIPT_GUI_CONSTANT_SLOT_MATERIAL_DISPLAY_LORE = §eName§7 des Items im Slot - -SCRIPT_GUI_CONSTANT_OFF_HAND_MATERIAL_DISPLAY_NAME = §7Constant §eoffmaterialname -SCRIPT_GUI_CONSTANT_OFF_HAND_MATERIAL_DISPLAY_LORE = §eName§7 des Items in der Off Hand - -SCRIPT_GUI_CONSTANT_REGION_TYPE_NAME = §7Constant §eregion_type -SCRIPT_GUI_CONSTANT_REGION_TYPE_LORE = §eRegionstype§7 der jetztigen Region - -SCRIPT_GUI_CONSTANT_REGION_NAME_NAME = §7Constant §eregion_name -SCRIPT_GUI_CONSTANT_REGION_NAME_LORE = §eRegionsname§7 der jetztigen Region - -SCRIPT_GUI_CONSTANT_TPS_NAME = §7Constant §etps -SCRIPT_GUI_CONSTANT_TPS_LORE = §etps§7 vom Server - -SCRIPT_GUI_CONSTANT_TPS_LIMIT_NAME = §7Constant §etps_limit -SCRIPT_GUI_CONSTANT_TPS_LIMIT_LORE = §etps_limit§7 vom Server - # Shield Printing SHIELD_PRINTING_NO_REGION = §cDu bist in keiner Region. SHIELD_PRINTING_NOT_RUNNING = §cShield printing ist nicht aktiv. diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptCommand.java index 782e6238..9d640d52 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptCommand.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptCommand.java @@ -20,10 +20,18 @@ package de.steamwar.bausystem.features.script; import de.steamwar.command.SWCommand; +import de.steamwar.linkage.Linked; +import org.bukkit.entity.Player; +@Linked public class ScriptCommand extends SWCommand { public ScriptCommand() { super("script"); } + + @Register + public void genericCommand(Player player) { + ScriptGUI.open(player); + } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptGUI.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptGUI.java new file mode 100644 index 00000000..720feb78 --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptGUI.java @@ -0,0 +1,121 @@ +/* + * 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 . + */ + +package de.steamwar.bausystem.features.script; + +import de.steamwar.bausystem.BauSystem; +import de.steamwar.bausystem.features.script.lua.SteamWarPlatform; +import de.steamwar.inventory.SWAnvilInv; +import de.steamwar.inventory.SWItem; +import de.steamwar.inventory.SWListInv; +import de.steamwar.linkage.Linked; +import de.steamwar.sql.Script; +import de.steamwar.sql.SteamwarUser; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.BookMeta; +import org.luaj.vm2.Globals; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +@Linked +public class ScriptGUI implements Listener { + public static void open(Player player) { + open(player, null); + } + + private static void open(Player player, ItemStack setCursor) { + SteamwarUser user = SteamwarUser.get(player.getUniqueId()); + List> entries = new ArrayList<>(); + List lore = new ArrayList<>(); + Globals globals = SteamWarPlatform.createGlobalParser( + (eventType, luaFunction) -> lore.add(BauSystem.MESSAGE.parse("SCRIPT_EVENT_ITEM_NAME", player, eventType.name())), + (s, luaFunction) -> lore.add(BauSystem.MESSAGE.parse("SCRIPT_HOTKEY_ITEM_NAME", player, s)), + commandRegister -> lore.add(BauSystem.MESSAGE.parse("SCRIPT_COMMAND_ITEM_NAME", player, commandRegister.getName())) + ); + + Script.list(user).forEach(script -> { + try { + globals.load(script.getScript()).call(); + } catch (Exception e) { + String[] sp = e.getMessage().split(":"); + lore.add(BauSystem.MESSAGE.parse("SCRIPT_ERROR_GUI", player, String.join(":", Arrays.copyOfRange(sp, 1, sp.length)))); + } + + if(!lore.isEmpty()) { + lore.add(""); + } + 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)); + + entries.add(new SWListInv.SWListEntry<>(new SWItem(Material.ENCHANTED_BOOK, script.getName(), new ArrayList<>(lore), false, clickType -> {}), script)); + lore.clear(); + }); + + SWListInv