Script System Lua #178
@ -230,299 +230,31 @@ GUI_EDITOR_TITLE_MORE=Select item
|
|||||||
|
|
||||||
# Script
|
# Script
|
||||||
## Errors
|
## Errors
|
||||||
SCRIPT_SLEEP_ERROR = §cInsert a sleep into your script
|
SCRIPT_ERROR_GUI=§cError in parsing script: Line {0}
|
||||||
SCRIPT_COMMAND_ERROR_UNKNOWN_VAR = §cUnknown variable {0}
|
SCRIPT_ERROR_GLOBAL=§cError in global script: Line {0}
|
||||||
SCRIPT_COMMAND_ERROR_EXPRESSION = §cExpression error with: {0}
|
SCRIPT_ERROR_CLICK=§cError in script: Line {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.
|
|
||||||
|
|
||||||
## GUI
|
## GUI
|
||||||
SCRIPT_GUI_ITEM_NAME = §eScript Help
|
SCRIPT_GUI_ITEM_NAME = §eScript Help
|
||||||
|
|
||||||
## CustomScript
|
## CustomScript
|
||||||
SCRIPT_HOTKEY_ITEM_NAME = §7Hotkey§8: §e{0} §8-§7 {1}
|
SCRIPT_HOTKEY_ITEM_NAME = §7Hotkey§8: §e{0}
|
||||||
SCRIPT_EVENT_ITEM_NAME = §7Event§8: §e{0} §8-§7 {1}
|
SCRIPT_EVENT_ITEM_NAME = §7Event§8: §e{0}
|
||||||
SCRIPT_COMMAND_ITEM_NAME = §7Command§8: §e{0}
|
SCRIPT_COMMAND_ITEM_NAME = §7Command§8: §e/{0}
|
||||||
|
|
||||||
## Script Menu GUI
|
## Script Menu GUI
|
||||||
SCRIPT_MENU_GUI_ITEM_LORE_1 = §7Click to retrieve
|
SCRIPT_MENU_GUI_ITEM_LORE_1 = §7Click to retrieve
|
||||||
SCRIPT_MENU_GUI_ITEM_LORE_2 = §7Shift-Click to copy
|
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_NAME = §eInsert
|
||||||
SCRIPT_MENU_GUI_ITEM_ADD_LORE = §7Click with a book to insert
|
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_UNKNOWN_EVENT = §cEvent '{0}' cannot be defined
|
||||||
SCRIPT_MENU_GUI_LIMIT = §cScript-Book limit reached
|
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
|
||||||
SHIELD_PRINTING_NO_REGION = §cYou are not in a region.
|
SHIELD_PRINTING_NO_REGION = §cYou are not in a region.
|
||||||
SHIELD_PRINTING_NOT_RUNNING = §cThe shield printing is not running.
|
SHIELD_PRINTING_NOT_RUNNING = §cThe shield printing is not running.
|
||||||
|
@ -226,295 +226,26 @@ GUI_EDITOR_ITEM_CLOSE=§eSchließen
|
|||||||
GUI_EDITOR_TITLE_MORE=Item auswählen
|
GUI_EDITOR_TITLE_MORE=Item auswählen
|
||||||
|
|
||||||
# Script
|
# 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
|
## GUI
|
||||||
SCRIPT_GUI_ITEM_NAME = §eScript Hilfe
|
SCRIPT_GUI_ITEM_NAME = §eScript Hilfe
|
||||||
|
|
||||||
## CustomScript
|
## CustomScript
|
||||||
SCRIPT_HOTKEY_ITEM_NAME = §7Hotkey§8: §e{0} §8-§7 {1}
|
SCRIPT_HOTKEY_ITEM_NAME = §7Hotkey§8: §e{0}
|
||||||
SCRIPT_EVENT_ITEM_NAME = §7Event§8: §e{0} §8-§7 {1}
|
SCRIPT_EVENT_ITEM_NAME = §7Event§8: §e{0}
|
||||||
SCRIPT_COMMAND_ITEM_NAME = §7Command§8: §e{0}
|
SCRIPT_COMMAND_ITEM_NAME = §7Command§8: §e/{0}
|
||||||
|
|
||||||
## Script Menu GUI
|
## Script Menu GUI
|
||||||
SCRIPT_MENU_GUI_ITEM_LORE_1 = §7Klicke zum rausnehmen
|
SCRIPT_MENU_GUI_ITEM_LORE_1 = §7Klicke zum rausnehmen
|
||||||
SCRIPT_MENU_GUI_ITEM_LORE_2 = §7Shift Klicke zum kopieren
|
SCRIPT_MENU_GUI_ITEM_LORE_2 = §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_NAME = §eHinzufügen
|
||||||
SCRIPT_MENU_GUI_ITEM_ADD_LORE = §7Klicke mit einem Buch zum hinzufügen
|
SCRIPT_MENU_GUI_ITEM_ADD_LORE = §7Klicke mit einem Buch zum hinzufügen
|
||||||
|
|
||||||
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_UNKNOWN_EVENT = §cEvent '{0}' ist nicht definierbar
|
||||||
SCRIPT_MENU_GUI_LIMIT = §cScript-Buch Limit erreicht
|
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
|
||||||
SHIELD_PRINTING_NO_REGION = §cDu bist in keiner Region.
|
SHIELD_PRINTING_NO_REGION = §cDu bist in keiner Region.
|
||||||
SHIELD_PRINTING_NOT_RUNNING = §cShield printing ist nicht aktiv.
|
SHIELD_PRINTING_NOT_RUNNING = §cShield printing ist nicht aktiv.
|
||||||
|
@ -20,10 +20,18 @@
|
|||||||
package de.steamwar.bausystem.features.script;
|
package de.steamwar.bausystem.features.script;
|
||||||
|
|
||||||
import de.steamwar.command.SWCommand;
|
import de.steamwar.command.SWCommand;
|
||||||
|
import de.steamwar.linkage.Linked;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
@Linked
|
||||||
public class ScriptCommand extends SWCommand {
|
public class ScriptCommand extends SWCommand {
|
||||||
|
|
||||||
public ScriptCommand() {
|
public ScriptCommand() {
|
||||||
super("script");
|
super("script");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Register
|
||||||
|
public void genericCommand(Player player) {
|
||||||
|
ScriptGUI.open(player);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
121
BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptGUI.java
Normale Datei
121
BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptGUI.java
Normale Datei
@ -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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
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<SWListInv.SWListEntry<Script>> entries = new ArrayList<>();
|
||||||
|
List<String> 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<Script> inv = new SWListInv<>(player, BauSystem.MESSAGE.parse("SCRIPT_MENU_GUI_NAME", player), false, entries, (clickType, script) -> {
|
||||||
|
ItemStack itemStack = ScriptHelper.getScriptItem(script, clickType.isRightClick());
|
||||||
|
if(!clickType.isShiftClick()) {
|
||||||
|
script.delete();
|
||||||
|
ScriptRunner.updateGlobalScript(player);
|
||||||
|
open(player, itemStack);
|
||||||
|
} else {
|
||||||
|
player.getOpenInventory().setCursor(itemStack);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
inv.setItem(49, Material.HOPPER, BauSystem.MESSAGE.parse("SCRIPT_MENU_GUI_ITEM_ADD_NAME", player), Collections.singletonList(BauSystem.MESSAGE.parse("SCRIPT_MENU_GUI_ITEM_ADD_LORE", player)), false, click -> {
|
||||||
|
if(player.getOpenInventory().getCursor() != null) {
|
||||||
|
ItemStack cursor = player.getOpenInventory().getCursor();
|
||||||
|
if(!(cursor.getItemMeta() instanceof BookMeta)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
BookMeta meta = (BookMeta) cursor.getItemMeta();
|
||||||
|
if(meta == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
saveWithName(player, meta, meta.getTitle());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
inv.open();
|
||||||
|
if(setCursor != null) {
|
||||||
|
player.getOpenInventory().setCursor(setCursor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void saveWithName(Player player, BookMeta meta, String name) {
|
||||||
|
SteamwarUser user = SteamwarUser.get(player.getUniqueId());
|
||||||
|
if(name != null && Script.list(user).stream().noneMatch(script -> script.getName().equalsIgnoreCase(name))) {
|
||||||
|
Script.create(user, name, ScriptHelper.getScriptString(meta.getPages()));
|
||||||
|
player.getOpenInventory().setCursor(null);
|
||||||
|
ScriptRunner.updateGlobalScript(player);
|
||||||
|
open(player);
|
||||||
|
} else {
|
||||||
|
SWAnvilInv inv = new SWAnvilInv(player, BauSystem.MESSAGE.parse("SCRIPT_MENU_GUI_ENTER_NAME", player), name == null ? "" : name);
|
||||||
|
inv.setCallback(s -> saveWithName(player, meta, s));
|
||||||
|
inv.open();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2023 SteamWar.de-Serverteam
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.steamwar.bausystem.features.script;
|
||||||
|
|
||||||
|
import de.steamwar.sql.Script;
|
||||||
|
import de.steamwar.sql.SteamwarUser;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.BookMeta;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class ScriptHelper {
|
||||||
|
|
||||||
|
private static final String PAGE_SEPARATOR = "\n\0\n";
|
||||||
|
|
||||||
|
public static ItemStack getScriptItem(Script script, boolean writeable) {
|
||||||
|
ItemStack itemStack = new ItemStack(writeable ? Material.WRITABLE_BOOK : Material.WRITTEN_BOOK);
|
||||||
|
BookMeta meta = (BookMeta) itemStack.getItemMeta();
|
||||||
|
if(!writeable) {
|
||||||
|
meta.setTitle(script.getName());
|
||||||
|
meta.setAuthor(SteamwarUser.get(script.getUser()).getUserName());
|
||||||
|
}
|
||||||
|
meta.setPages(getScriptPages(script));
|
||||||
|
itemStack.setItemMeta(meta);
|
||||||
|
return itemStack;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<String> getScriptPages(Script script) {
|
||||||
|
return Arrays.stream(script.getScript().split(PAGE_SEPARATOR)).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getScriptString(List<String> pages) {
|
||||||
|
return String.join(PAGE_SEPARATOR, pages);
|
||||||
|
}
|
||||||
|
}
|
@ -27,12 +27,11 @@ import org.bukkit.event.EventPriority;
|
|||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.block.Action;
|
import org.bukkit.event.block.Action;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
import org.bukkit.event.player.PlayerSwapHandItemsEvent;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.BookMeta;
|
import org.bukkit.inventory.meta.BookMeta;
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@ -68,13 +67,7 @@ public class ScriptListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) {
|
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||||
ItemStack item = event.getOffHandItem();
|
ScriptRunner.updateGlobalScript(event.getPlayer());
|
||||||
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());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,16 +19,22 @@
|
|||||||
|
|
||||||
package de.steamwar.bausystem.features.script;
|
package de.steamwar.bausystem.features.script;
|
||||||
|
|
||||||
|
import de.steamwar.bausystem.BauSystem;
|
||||||
import de.steamwar.bausystem.features.script.lua.CommandRegister;
|
import de.steamwar.bausystem.features.script.lua.CommandRegister;
|
||||||
import de.steamwar.bausystem.features.script.lua.SteamWarGlobalLuaPlugin;
|
import de.steamwar.bausystem.features.script.lua.SteamWarGlobalLuaPlugin;
|
||||||
import de.steamwar.bausystem.features.script.lua.SteamWarPlatform;
|
import de.steamwar.bausystem.features.script.lua.SteamWarPlatform;
|
||||||
|
import de.steamwar.sql.Script;
|
||||||
|
import de.steamwar.sql.SteamwarUser;
|
||||||
|
import lombok.experimental.UtilityClass;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.luaj.vm2.Globals;
|
import org.luaj.vm2.Globals;
|
||||||
import org.luaj.vm2.LuaFunction;
|
import org.luaj.vm2.LuaFunction;
|
||||||
import org.luaj.vm2.LuaValue;
|
import org.luaj.vm2.LuaValue;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@UtilityClass
|
||||||
public class ScriptRunner {
|
public class ScriptRunner {
|
||||||
|
|
||||||
// Script Table
|
// Script Table
|
||||||
@ -46,24 +52,37 @@ public class ScriptRunner {
|
|||||||
try {
|
try {
|
||||||
globals.load(script).call();
|
globals.load(script).call();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
player.sendMessage("§cFehler beim Ausführen des Scripts: " + e.getMessage());
|
String[] sp = e.getMessage().split(":");
|
||||||
|
BauSystem.MESSAGE.send("SCRIPT_ERROR_CLICK", player, String.join(":", Arrays.copyOfRange(sp, 1, sp.length)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void updateGlobalScript(Player player) {
|
||||||
|
SteamwarUser user = SteamwarUser.get(player.getUniqueId());
|
||||||
|
ScriptRunner.createGlobalScript(Script.list(user).stream().map(Script::getScript).collect(Collectors.toList()), player);
|
||||||
|
}
|
||||||
|
|
||||||
public static void createGlobalScript(List<String> scripts, Player player) {
|
public static void createGlobalScript(List<String> scripts, Player player) {
|
||||||
EVENT_MAP.remove(player);
|
remove(player);
|
||||||
Globals globals = SteamWarPlatform.createGlobalGlobals(player,
|
Globals globals = SteamWarPlatform.createGlobalGlobals(player,
|
||||||
(s, luaFunction) -> EVENT_MAP.computeIfAbsent(player, player1 -> new EnumMap<>(SteamWarGlobalLuaPlugin.EventType.class)).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),
|
(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));
|
commandRegister -> COMMAND_MAP.computeIfAbsent(player, player1 -> new HashMap<>()).put(commandRegister.getName(), commandRegister));
|
||||||
|
|
||||||
for (String script : scripts) {
|
for (String script : scripts) {
|
||||||
|
try {
|
||||||
globals.load(script).call();
|
globals.load(script).call();
|
||||||
|
} catch (Exception e) {
|
||||||
|
String[] sp = e.getMessage().split(":");
|
||||||
|
BauSystem.MESSAGE.send("SCRIPT_ERROR_GLOBAL", player, String.join(":", Arrays.copyOfRange(sp, 1, sp.length)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void remove(Player player) {
|
public static void remove(Player player) {
|
||||||
EVENT_MAP.remove(player);
|
EVENT_MAP.remove(player);
|
||||||
|
COMMAND_MAP.remove(player);
|
||||||
|
HOTKEY_MAP.remove(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void callEvent(Player player, SteamWarGlobalLuaPlugin.EventType event, LuaValue eventValue) {
|
public static void callEvent(Player player, SteamWarGlobalLuaPlugin.EventType event, LuaValue eventValue) {
|
||||||
@ -82,13 +101,14 @@ public class ScriptRunner {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void callCommand(Player player, String command, LuaValue args) {
|
public static boolean callCommand(Player player, String command, LuaValue args) {
|
||||||
CommandRegister commandRegister = COMMAND_MAP.get(player).get(command.toLowerCase());
|
CommandRegister commandRegister = COMMAND_MAP.getOrDefault(player, Collections.emptyMap()).get(command);
|
||||||
if (commandRegister == null) {
|
if (commandRegister == null) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
commandRegister.getFunction().call(args);
|
commandRegister.getFunction().call(args);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void callHotkey(int mods, int key, Player player, boolean pressed) {
|
public static void callHotkey(int mods, int key, Player player, boolean pressed) {
|
||||||
|
@ -36,6 +36,6 @@ public class CommandListener implements Listener {
|
|||||||
for (int i = 1; i < split.length; i++) {
|
for (int i = 1; i < split.length; i++) {
|
||||||
values[i - 1] = LuaValue.valueOf(split[i]);
|
values[i - 1] = LuaValue.valueOf(split[i]);
|
||||||
}
|
}
|
||||||
ScriptRunner.callCommand(event.getPlayer(), split[0].substring(1), LuaValue.listOf(values));
|
event.setCancelled(ScriptRunner.callCommand(event.getPlayer(), split[0].substring(1), LuaValue.listOf(values)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@ import de.steamwar.bausystem.region.utils.RegionExtensionType;
|
|||||||
import de.steamwar.bausystem.region.utils.RegionType;
|
import de.steamwar.bausystem.region.utils.RegionType;
|
||||||
import de.steamwar.linkage.Linked;
|
import de.steamwar.linkage.Linked;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@ -107,7 +108,7 @@ public class EventListener implements Listener {
|
|||||||
LuaTable table = new LuaTable();
|
LuaTable table = new LuaTable();
|
||||||
table.set("action", event.getAction().name());
|
table.set("action", event.getAction().name());
|
||||||
table.set("hand", event.getHand().name());
|
table.set("hand", event.getHand().name());
|
||||||
table.set("block", event.getItem().getType().name());
|
table.set("block", event.getItem() == null ? Material.AIR.name() : event.getItem().getType().name());
|
||||||
if(event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.LEFT_CLICK_BLOCK) {
|
if(event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.LEFT_CLICK_BLOCK) {
|
||||||
table.set("hasBlock", LuaValue.valueOf(true));
|
table.set("hasBlock", LuaValue.valueOf(true));
|
||||||
table.set("blockX", event.getClickedBlock().getX());
|
table.set("blockX", event.getClickedBlock().getX());
|
||||||
|
@ -23,8 +23,6 @@ import lombok.AllArgsConstructor;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.luaj.vm2.LuaFunction;
|
import org.luaj.vm2.LuaFunction;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@Getter
|
@Getter
|
||||||
public class CommandRegister {
|
public class CommandRegister {
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
package de.steamwar.bausystem.features.script.lua;
|
package de.steamwar.bausystem.features.script.lua;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
import org.luaj.vm2.LuaFunction;
|
import org.luaj.vm2.LuaFunction;
|
||||||
import org.luaj.vm2.LuaString;
|
import org.luaj.vm2.LuaString;
|
||||||
import org.luaj.vm2.LuaValue;
|
import org.luaj.vm2.LuaValue;
|
||||||
@ -29,6 +30,7 @@ import java.util.function.BiConsumer;
|
|||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
public class SteamWarGlobalLuaPlugin extends TwoArgFunction {
|
public class SteamWarGlobalLuaPlugin extends TwoArgFunction {
|
||||||
private final BiConsumer<EventType, LuaFunction> eventConsumer;
|
private final BiConsumer<EventType, LuaFunction> eventConsumer;
|
||||||
private final BiConsumer<String, LuaFunction> hotkeyConsumer;
|
private final BiConsumer<String, LuaFunction> hotkeyConsumer;
|
||||||
@ -40,7 +42,7 @@ public class SteamWarGlobalLuaPlugin extends TwoArgFunction {
|
|||||||
for (EventType value : EventType.values()) {
|
for (EventType value : EventType.values()) {
|
||||||
types.set(value.name(), value.ordinal());
|
types.set(value.name(), value.ordinal());
|
||||||
}
|
}
|
||||||
env.set("type", types);
|
env.set("events", types);
|
||||||
|
|
||||||
|
|
||||||
env.set("event", new On());
|
env.set("event", new On());
|
||||||
|
@ -20,38 +20,25 @@
|
|||||||
package de.steamwar.bausystem.features.script.lua;
|
package de.steamwar.bausystem.features.script.lua;
|
||||||
|
|
||||||
import de.steamwar.bausystem.BauSystem;
|
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.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.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.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.luaj.vm2.*;
|
import org.luaj.vm2.LuaFunction;
|
||||||
import org.luaj.vm2.lib.*;
|
import org.luaj.vm2.LuaTable;
|
||||||
|
import org.luaj.vm2.LuaValue;
|
||||||
|
import org.luaj.vm2.Varargs;
|
||||||
|
import org.luaj.vm2.lib.ThreeArgFunction;
|
||||||
|
import org.luaj.vm2.lib.TwoArgFunction;
|
||||||
|
import org.luaj.vm2.lib.VarArgFunction;
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
public class SteamWarLuaPlugin extends TwoArgFunction {
|
public class SteamWarLuaPlugin extends TwoArgFunction {
|
||||||
|
|
||||||
public static final Map<Class<?>, List<LuaLib>> LUA_LIBS = new HashMap<>();
|
protected static final Map<Class<?>, List<LuaLib>> LUA_LIBS = new HashMap<>();
|
||||||
|
|
||||||
public static void add(LuaLib luaLib) {
|
public static void add(LuaLib luaLib) {
|
||||||
LUA_LIBS.computeIfAbsent(luaLib.parent(), l -> new ArrayList<>()).add(luaLib);
|
LUA_LIBS.computeIfAbsent(luaLib.parent(), l -> new ArrayList<>()).add(luaLib);
|
||||||
@ -146,7 +133,7 @@ public class SteamWarLuaPlugin extends TwoArgFunction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void initialize(LuaValue parent, Class<? extends LuaLib> clazz) {
|
private void initialize(LuaValue parent, Class<? extends LuaLib> clazz) {
|
||||||
LUA_LIBS.get(clazz).forEach(luaLib -> {
|
LUA_LIBS.getOrDefault(clazz, Collections.emptyList()).forEach(luaLib -> {
|
||||||
LuaTable luaTable = luaLib.get(player);
|
LuaTable luaTable = luaLib.get(player);
|
||||||
parent.set(luaLib.name(), luaTable);
|
parent.set(luaLib.name(), luaTable);
|
||||||
initialize(luaTable, luaLib.getClass());
|
initialize(luaTable, luaLib.getClass());
|
||||||
|
@ -56,4 +56,12 @@ public class SteamWarPlatform {
|
|||||||
globals.load(new SteamWarGlobalLuaPlugin(eventConsumer, hotkeyConsumer, commandConsumer));
|
globals.load(new SteamWarGlobalLuaPlugin(eventConsumer, hotkeyConsumer, commandConsumer));
|
||||||
return globals;
|
return globals;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Globals createGlobalParser(BiConsumer<SteamWarGlobalLuaPlugin.EventType, LuaFunction> eventConsumer, BiConsumer<String, LuaFunction> hotkeyConsumer, Consumer<CommandRegister> commandConsumer) {
|
||||||
|
Globals globals = new Globals();
|
||||||
|
globals.load(new SteamWarGlobalLuaPlugin(eventConsumer, hotkeyConsumer, commandConsumer));
|
||||||
|
LoadState.install(globals);
|
||||||
|
LuaC.install(globals);
|
||||||
|
return globals;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
99
BauSystem_Main/src/de/steamwar/sql/Script.java
Normale Datei
99
BauSystem_Main/src/de/steamwar/sql/Script.java
Normale Datei
@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2023 SteamWar.de-Serverteam
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.steamwar.sql;
|
||||||
|
|
||||||
|
import de.steamwar.sql.internal.Field;
|
||||||
|
import de.steamwar.sql.internal.SelectStatement;
|
||||||
|
import de.steamwar.sql.internal.Statement;
|
||||||
|
import de.steamwar.sql.internal.Table;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Getter
|
||||||
|
public class Script {
|
||||||
|
|
||||||
|
private static final Table<Script> table = new Table<>(Script.class);
|
||||||
|
|
||||||
|
private static final SelectStatement<Script> select = table.select(Table.PRIMARY);
|
||||||
|
private static final SelectStatement<Script> selectNameUser = table.select("nameUser");
|
||||||
|
private static final SelectStatement<Script> list = new SelectStatement<>(table, "SELECT Id, User, Name FROM Script WHERE User = ?");
|
||||||
|
|
||||||
|
private static final Statement update = table.updateFields(new String[]{"name"}, Table.PRIMARY);
|
||||||
|
private static final Statement insert = table.insertFields(true, "User", "Name");
|
||||||
|
private static final Statement delete = table.delete(Table.PRIMARY);
|
||||||
|
|
||||||
|
private static final Statement getScript = new Statement("SELECT Code FROM Script WHERE id = ?");
|
||||||
|
private static final Statement updateScript = new Statement("UPDATE Script SET Code = ? WHERE id = ?");
|
||||||
|
|
||||||
|
public static Script get(int id) {
|
||||||
|
return select.select(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Script get(SteamwarUser user, String name) {
|
||||||
|
return selectNameUser.select(user, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Script create(SteamwarUser user, String name, String code) {
|
||||||
|
int id = insert.insertGetKey(user, name);
|
||||||
|
Script script = get(id);
|
||||||
|
script.setScript(code);
|
||||||
|
return script;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<Script> list(SteamwarUser user) {
|
||||||
|
return list.listSelect(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Field(keys = Table.PRIMARY, autoincrement = true)
|
||||||
|
private final int id;
|
||||||
|
@Field(keys = "nameUser")
|
||||||
|
private final int user;
|
||||||
|
@Field(keys = "nameUser")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getScript() {
|
||||||
|
return getScript.select(rs -> {
|
||||||
|
if(rs.next()) {
|
||||||
|
return rs.getString("Code");
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setScript(String script) {
|
||||||
|
updateScript.update(script, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void update() {
|
||||||
|
update.update(name, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void delete() {
|
||||||
|
delete.update(id);
|
||||||
|
}
|
||||||
|
}
|
122
SCRIPT.md
122
SCRIPT.md
@ -10,8 +10,11 @@
|
|||||||
* [player](#player)
|
* [player](#player)
|
||||||
* [region](#region)
|
* [region](#region)
|
||||||
* [tnt](#tnt)
|
* [tnt](#tnt)
|
||||||
|
* [trace](#trace)
|
||||||
* [server](#server)
|
* [server](#server)
|
||||||
|
* [tps](#tps)
|
||||||
* [SteamWar.de-Global-Api](#steamwarde-global-api)
|
* [SteamWar.de-Global-Api](#steamwarde-global-api)
|
||||||
|
* [Hotkeys](#hotkeys)
|
||||||
* [Event Type](#event-type)
|
* [Event Type](#event-type)
|
||||||
* [BlockEvent](#blockevent)
|
* [BlockEvent](#blockevent)
|
||||||
* [InteractEvent](#interactevent)
|
* [InteractEvent](#interactevent)
|
||||||
@ -20,6 +23,12 @@
|
|||||||
* [Hello, World!](#hello-world)
|
* [Hello, World!](#hello-world)
|
||||||
* [Code](#code)
|
* [Code](#code)
|
||||||
* [Ausgabe](#ausgabe)
|
* [Ausgabe](#ausgabe)
|
||||||
|
* [BauGUI on FF](#baugui-on-ff)
|
||||||
|
* [Code](#code-1)
|
||||||
|
* [SL Command](#sl-command)
|
||||||
|
* [Code](#code-2)
|
||||||
|
* [Paste Hotkey](#paste-hotkey)
|
||||||
|
* [Code](#code-3)
|
||||||
<!-- TOC -->
|
<!-- TOC -->
|
||||||
|
|
||||||
|
|
||||||
@ -48,7 +57,7 @@ Es gibt folgende Funktionen:
|
|||||||
| `print` | print(String...) | @see message(String...) |
|
| `print` | print(String...) | @see message(String...) |
|
||||||
| `input` | input(String, Function\<String>) | Fragt den User nach einer Eingabe mit der Nachricht und called die zugehörige Funktion nach dieser |
|
| `input` | input(String, Function\<String>) | Fragt den User nach einer Eingabe mit der Nachricht und called die zugehörige Funktion nach dieser |
|
||||||
| `timeout` | timeout(Number, Function\<Void>) | Wartet die angegebene Anzahl an Ticks und führt danach die zugehörige Funktion aus |
|
| `timeout` | timeout(Number, Function\<Void>) | Wartet die angegebene Anzahl an Ticks und führt danach die zugehörige Funktion aus |
|
||||||
| `pos` | pos(Number, Number, Number) | Erstellt aus drei Zahlen eine Position-Table |
|
| `pos` | pos(Number, Number, Number) | Erstellt aus drei Zahlen eine Position-Table, sind unter den Namen `x`, `y` und `z` abgespeichert |
|
||||||
| `exec` | exec(String...) | Führt den angegebenen Befehl als Spieler aus |
|
| `exec` | exec(String...) | Führt den angegebenen Befehl als Spieler aus |
|
||||||
|
|
||||||
### player
|
### player
|
||||||
@ -77,20 +86,74 @@ Die `region`-Api stellt Funktion zur Verfügung, die die Region des Spielers bet
|
|||||||
Es gibt folgende Funktionen:
|
Es gibt folgende Funktionen:
|
||||||
|
|
||||||
Chaoscaot markierte diese Unterhaltung als gelöst
|
|||||||
| Name | Signature | Beschreibung |
|
| Name | Signature | Beschreibung |
|
||||||
|--------|----------------|--------------------------------------------|
|
|-----------|--------------------|------------------------------------------------------------------------------------------------------------|
|
||||||
| `name` | name(): String | Gibt den Namen der Region zurück |
|
| `name` | name(): String | Gibt den Namen der Region zurück |
|
||||||
| `type` | type(): String | Gibt den Namen des Typen der Region zurück |
|
| `type` | type(): String | Gibt den Namen des Typen der Region zurück |
|
||||||
|
| `fire` | fire(): Boolean | Gibt den Fire-Mode der Region zurück |
|
||||||
|
| `freeze` | freeze(): Boolean | Gibt den Freeze-Mode der Region zurück |
|
||||||
|
| `protect` | protect(): Boolean | Gibt den Protect-Mode der Region zurück |
|
||||||
|
| `loader` | pvp(): String | Gibt den Status des Loaders des Spielers zurück, die werte sind: `OFF`, `SETUP`, `RUNNING`, `PAUSE`, `END` |
|
||||||
|
|
||||||
|
|
||||||
Es gibt folgende Variablen:
|
Es gibt folgende Variablen:
|
||||||
|
|
||||||
| Name | Beschreibung |
|
| Name | Beschreibung |
|
||||||
|--------|--------------|
|
|---------|-----------------|
|
||||||
| `tnt` | [tnt](#tnt) |
|
| `tnt` | [tnt](#tnt) |
|
||||||
|
| `trace` | [trace](#trace) |
|
||||||
|
|
||||||
#### tnt
|
#### tnt
|
||||||
|
Die `tnt`-Api stellt Funktionen zur Verfügung, die den TNT-Modus in der Region des Spielers betreffen.
|
||||||
|
Es gibt folgende Funktionen:
|
||||||
|
|
||||||
|
| Name | Signature | Beschreibung |
|
||||||
|
|-----------|--------------------|-------------------------------------------------------------------------------------|
|
||||||
|
| `mode` | mode(): String | Gibt den Aktuellen TNT-Modus zurück, die werte sind: `ALLOW`, `DENY` oder `ONLY_TB` |
|
||||||
|
| `enabled` | enabled(): Boolean | Gibt zurück, ob der TNT-Modus in der Region des Spielers aktiviert ist oder nicht |
|
||||||
|
| `onlyTb` | onlyTb(): Boolean | Gibt zurück, ob der TNT-Modus auf Only-Tb ist |
|
||||||
|
|
||||||
|
|
||||||
|
#### trace
|
||||||
|
Die `trace`-Api stellt Funktionen zur Verfügung, die den Status des Tracers der Region betreffen.
|
||||||
|
Es gibt folgende Funktionen:
|
||||||
|
|
||||||
|
| Name | Signature | Beschreibung |
|
||||||
|
|----------|-------------------|--------------------------------------------------------------------------------|
|
||||||
|
| `active` | active(): Boolean | Gibt zurück, ob der Tracer in der Region des Spielers aktiviert ist oder nicht |
|
||||||
|
| `auto` | auto(): Boolean | Gibt zurück, ob der Tracer in der Region ein Auto-Tracer ist. |
|
||||||
|
| `status` | status(): String | Gibt den Status des Tracers zurück |
|
||||||
|
| `time` | time(): String | Gibt die Zeit des Tracers zurück |
|
||||||
|
|
||||||
## server
|
## server
|
||||||
|
Die `server`-Api stellt Funktionen zur Verfügung, die den Server betreffen.
|
||||||
|
Es gibt folgende Funktionen:
|
||||||
|
|
||||||
|
| Name | Signature | Beschreibung |
|
||||||
|
|--------------|-------------------------|----------------------------------------------------|
|
||||||
|
| `time` | time(): String | Gibt die aktuelle Zeit im format `HH:mm:ss` zurück |
|
||||||
|
| `ticks` | ticks(): Number | Gibt die Ticks seit start des Server zurück |
|
||||||
|
| `getBlockAt` | getBlockAt(Pos): String | Gibt das Material an der Position zurück |
|
||||||
|
| `setBlockAt` | setBlockAt(Pos, String) | Setzt das Material an der angegebenen Stelle |
|
||||||
|
|
||||||
|
Es gibt folgende Variablen:
|
||||||
|
|
||||||
|
| Name | Beschreibung |
|
||||||
|
|-------|--------------|
|
||||||
|
| `tps` | [tps](#tps) |
|
||||||
|
|
||||||
|
#### tps
|
||||||
|
Die `tps`-Api stellt Funktionen zur Verfügung, die die TPS des Servers betreffen.
|
||||||
|
Es gibt folgende Funktionen:
|
||||||
|
|
||||||
|
| Name | Signature | Beschreibung |
|
||||||
Chaoscaot markierte diese Unterhaltung als gelöst
Lixfel
hat
Warum hier wieder Variablen? Und warum gibt es diese API im Server, wo es noch die TPS-Api gibt? Warum hier wieder Variablen? Und warum gibt es diese API im Server, wo es noch die TPS-Api gibt?
|
|||||||
|
|--------------|----------------------|-------------------------------------------------------------------|
|
||||||
|
| `current` | current(): Number | Gibt die aktuelle TPS zurück |
|
||||||
|
| `oneSecond` | oneSecond(): Number | Gibt die durchschnittliche TPS über die letzte Sekunde zurück |
|
||||||
Chaoscaot markierte diese Unterhaltung als gelöst
Lixfel
hat
Betrifft auch vorige und spätere Vorkommnisse: Nicht Api, sondern API. Und wäre es in dem Kontext nicht eigentlich eher ein "Modul" oder "Package"? (K.a. was der typische Begriff im Lua-Umfeld dafür ist, aber ich bezweifle, dass dieser Api lautet). Betrifft auch vorige und spätere Vorkommnisse: Nicht Api, sondern API. Und wäre es in dem Kontext nicht eigentlich eher ein "Modul" oder "Package"? (K.a. was der typische Begriff im Lua-Umfeld dafür ist, aber ich bezweifle, dass dieser Api lautet).
|
|||||||
|
| `tenSecond` | tenSecond(): Number | Gibt die durchschnittliche TPS über die letzte 10 Sekunden zurück |
|
||||||
|
| `oneMinute` | oneMinute(): Number | Gibt die durchschnittliche TPS über die letzte Minute zurück |
|
||||||
|
| `fiveMinute` | fiveMinute(): Number | Gibt die durchschnittliche TPS über die letzte 5 Minuten zurück |
|
||||||
|
| `tenMinute` | tenMinute(): Number | Gibt die durchschnittliche TPS über die letzte 10 Minuten zurück |
|
||||||
|
| `limit` | limit(): Number | Gibt den TPS-Limit zurück |
|
||||||
Chaoscaot markierte diese Unterhaltung als gelöst
Lixfel
hat
Es gibt kein "aktuell". Welchem Wert entsprechen diese TPS? Es gibt kein "aktuell". Welchem Wert entsprechen diese TPS?
|
|||||||
|
|
||||||
# SteamWar.de-Global-Api
|
# SteamWar.de-Global-Api
|
||||||
Mit `/script` kann man Script-Bücher global abspeichern. Diese haben dann zugrif auf die `global`-Api.
|
Mit `/script` kann man Script-Bücher global abspeichern. Diese haben dann zugrif auf die `global`-Api.
|
||||||
@ -101,13 +164,24 @@ Es gibt folgende Funktionen:
|
|||||||
| Name | Signature | Beschreibung |
|
| Name | Signature | Beschreibung |
|
||||||
Chaoscaot markierte diese Unterhaltung als gelöst
Lixfel
hat
Was unterscheidet diese Global-API von der obengenannten global-API? Absolut verwirrend, muss mindestens unbenannt werden. Was unterscheidet diese Global-API von der obengenannten global-API? Absolut verwirrend, muss mindestens unbenannt werden.
|
|||||||
|-----------|---------------------------------|---------------------------------|
|
|-----------|---------------------------------|---------------------------------|
|
||||||
| `event` | event(EventType, Function(Any)) | Registriere einen Event Handler |
|
| `event` | event(EventType, Function(Any)) | Registriere einen Event Handler |
|
||||||
| `command` | cmd(String, Function(Any)) | Registriere einen Command |
|
| `command` | command(String, Function(Any)) | Registriere einen Command |
|
||||||
|
| `hotkey` | hotkey(String, Function(Any)) | Registriere einen Hotkey |
|
||||||
|
|
||||||
Es gibt folgende Variablen:
|
Es gibt folgende Variablen:
|
||||||
|
|
||||||
| Name | Beschreibung |
|
| Name | Beschreibung |
|
||||||
|--------|----------------------------------|
|
|----------|----------------------------------|
|
||||||
| `type` | Siehe: [Event Type](#event-type) |
|
| `events` | Siehe: [Event Type](#event-type) |
|
||||||
|
|
||||||
|
## Hotkeys
|
||||||
|
|
||||||
|
Hotkeys werden im folgenden Format angegeben: `MODIFIER+KEY`. Es gibt folgende Modifier:
|
||||||
|
- `ctrl`
|
||||||
|
- `shift`
|
||||||
|
- `alt`
|
||||||
|
- `meta`
|
||||||
|
|
||||||
|
Es können auch mehrere Modifier angegeben werden, z.B. `ctrl+shift+alt+c`. Die Reihenfolge der Modifier und des Keys ist egal.
|
||||||
|
|
||||||
Chaoscaot markierte diese Unterhaltung als gelöst
Lixfel
hat
Jetzt großgeschrieben oder kleingeschrieben? Unklar. Jetzt großgeschrieben oder kleingeschrieben? Unklar.
|
|||||||
## Event Type
|
## Event Type
|
||||||
Es gibt folgende Event-Typen:
|
Es gibt folgende Event-Typen:
|
||||||
@ -181,3 +255,39 @@ print("Hello, World!")
|
|||||||
```
|
```
|
||||||
Hello, World!
|
Hello, World!
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## BauGUI on FF
|
||||||
|
Das default Script für das Öffnen des BauGUIs
|
||||||
|
|
||||||
|
#### Code
|
||||||
|
```lua
|
||||||
|
function handler(event)
|
||||||
|
exec("gui")
|
||||||
|
end
|
||||||
|
|
||||||
|
event(events.FF, handler)
|
||||||
|
```
|
||||||
|
|
||||||
|
## SL Command
|
||||||
|
Ein einfacher Command Redefiner.
|
||||||
|
|
||||||
|
#### Code
|
||||||
|
```lua
|
||||||
|
function handler(event)
|
||||||
|
exec("stoplag")
|
||||||
|
end
|
||||||
|
|
||||||
|
command("sl", handler)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Paste Hotkey
|
||||||
|
Ein Hotkey zum pasten des Clipboard-Inhalts.
|
||||||
|
|
||||||
|
#### Code
|
||||||
|
```lua
|
||||||
|
function handler(event)
|
||||||
|
exec("/paste -o")
|
||||||
|
end
|
||||||
|
|
||||||
|
hotkey("ctrl+v", handler)
|
||||||
|
```
|
In neuem Issue referenzieren
Einen Benutzer sperren
Itemtyp