Dieser Commit ist enthalten in:
Commit
1bfcb55d35
@ -0,0 +1,104 @@
|
|||||||
|
/*
|
||||||
|
* 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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.steamwar.bausystem.features.script;
|
||||||
|
|
||||||
|
import de.steamwar.bausystem.BauSystem;
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
@ -16,6 +16,12 @@ public interface SpecialCommand {
|
|||||||
|
|
||||||
boolean execute(String[] command, ScriptExecutor scriptExecutor);
|
boolean execute(String[] command, ScriptExecutor scriptExecutor);
|
||||||
|
|
||||||
|
default boolean repeating() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
TokenType[][] getSyntax();
|
||||||
|
|
||||||
default long asLong(String value) {
|
default long asLong(String value) {
|
||||||
try {
|
try {
|
||||||
return Long.parseLong(value);
|
return Long.parseLong(value);
|
||||||
@ -65,4 +71,16 @@ public interface SpecialCommand {
|
|||||||
}
|
}
|
||||||
scriptExecutor.setIndex(scriptExecutor.getReturnStack().pop());
|
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,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,4 +37,13 @@ public class Call implements SpecialCommand {
|
|||||||
jumpToIndexWithMessageAndReturnStack(scriptExecutor, command[1], BauSystem.MESSAGE.parse("SCRIPT_COMMAND_CALL_ERROR", scriptExecutor.getPlayer(), command[1]));
|
jumpToIndexWithMessageAndReturnStack(scriptExecutor, command[1], BauSystem.MESSAGE.parse("SCRIPT_COMMAND_CALL_ERROR", scriptExecutor.getPlayer(), command[1]));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TokenType[][] syntax = {
|
||||||
|
{ TokenType.jump_point },
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TokenType[][] getSyntax() {
|
||||||
|
return syntax;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,4 +31,11 @@ public class Exit implements SpecialCommand {
|
|||||||
public boolean execute(String[] command, ScriptExecutor scriptExecutor) {
|
public boolean execute(String[] command, ScriptExecutor scriptExecutor) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TokenType[][] syntax = {};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TokenType[][] getSyntax() {
|
||||||
|
return syntax;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,4 +53,16 @@ public class If implements SpecialCommand {
|
|||||||
}
|
}
|
||||||
return true;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,4 +37,13 @@ public class Jump implements SpecialCommand {
|
|||||||
jumpToIndexWithMessage(scriptExecutor, command[1], BauSystem.MESSAGE.parse("SCRIPT_COMMAND_JUMP_ERROR", scriptExecutor.getPlayer(), command[1]));
|
jumpToIndexWithMessage(scriptExecutor, command[1], BauSystem.MESSAGE.parse("SCRIPT_COMMAND_JUMP_ERROR", scriptExecutor.getPlayer(), command[1]));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TokenType[][] syntax = {
|
||||||
|
{ TokenType.jump_point }
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TokenType[][] getSyntax() {
|
||||||
|
return syntax;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,4 +33,11 @@ public class Return implements SpecialCommand {
|
|||||||
returnFromStackWithMessage(scriptExecutor, BauSystem.MESSAGE.parse("SCRIPT_COMMAND_RETURN_ERROR", scriptExecutor.getPlayer()));
|
returnFromStackWithMessage(scriptExecutor, BauSystem.MESSAGE.parse("SCRIPT_COMMAND_RETURN_ERROR", scriptExecutor.getPlayer()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TokenType[][] syntax = {};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TokenType[][] getSyntax() {
|
||||||
|
return syntax;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,4 +46,13 @@ public class Sleep implements SpecialCommand {
|
|||||||
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), scriptExecutor::resume, sleepTime);
|
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), scriptExecutor::resume, sleepTime);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TokenType[][] syntax = {
|
||||||
|
{ TokenType.number_type }
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TokenType[][] getSyntax() {
|
||||||
|
return syntax;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -90,4 +90,18 @@ public class Ceil implements SpecialCommand {
|
|||||||
}
|
}
|
||||||
return true;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -90,4 +90,18 @@ public class Floor implements SpecialCommand {
|
|||||||
}
|
}
|
||||||
return true;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -90,4 +90,18 @@ public class Round implements SpecialCommand {
|
|||||||
}
|
}
|
||||||
return true;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,4 +45,18 @@ public class Echo implements SpecialCommand {
|
|||||||
BauSystem.MESSAGE.send("SCRIPT_COMMAND_IO_ECHO_MESSAGE", scriptExecutor.getPlayer(), ChatColor.translateAlternateColorCodes('&', st.toString()));
|
BauSystem.MESSAGE.send("SCRIPT_COMMAND_IO_ECHO_MESSAGE", scriptExecutor.getPlayer(), ChatColor.translateAlternateColorCodes('&', st.toString()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean repeating() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private TokenType[][] syntax = {
|
||||||
|
{ TokenType.any },
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TokenType[][] getSyntax() {
|
||||||
|
return syntax;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,4 +45,18 @@ public class Echoactionbar implements SpecialCommand {
|
|||||||
SWUtils.sendToActionbar(scriptExecutor.getPlayer(), ChatColor.translateAlternateColorCodes('&', st.toString()));
|
SWUtils.sendToActionbar(scriptExecutor.getPlayer(), ChatColor.translateAlternateColorCodes('&', st.toString()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean repeating() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private TokenType[][] syntax = {
|
||||||
|
{ TokenType.any },
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TokenType[][] getSyntax() {
|
||||||
|
return syntax;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -62,4 +62,18 @@ public class Input implements SpecialCommand {
|
|||||||
swAnvilInv.open();
|
swAnvilInv.open();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean repeating() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private TokenType[][] syntax = {
|
||||||
|
{ TokenType.variable, TokenType.any },
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TokenType[][] getSyntax() {
|
||||||
|
return syntax;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,7 @@ public class Insert implements SpecialCommand {
|
|||||||
BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_ONLY_STRINGS_ALLOWED", scriptExecutor.getPlayer());
|
BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_ONLY_STRINGS_ALLOWED", scriptExecutor.getPlayer());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!(v3 instanceof Value.StringValue)) {
|
if (!(v3 instanceof Value.LongValue)) {
|
||||||
BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_ONLY_NUMBERS_ALLOWED", scriptExecutor.getPlayer());
|
BauSystem.MESSAGE.send("SCRIPT_COMMAND_ERROR_ONLY_NUMBERS_ALLOWED", scriptExecutor.getPlayer());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -85,4 +85,14 @@ public class Insert implements SpecialCommand {
|
|||||||
scriptExecutor.getLocalVariables().putValue(resultName, new Value.StringValue(new StringBuilder(v1.asString()).insert((int) v3.asLong(), v2.asString()).toString()));
|
scriptExecutor.getLocalVariables().putValue(resultName, new Value.StringValue(new StringBuilder(v1.asString()).insert((int) v3.asLong(), v2.asString()).toString()));
|
||||||
return true;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -76,4 +76,14 @@ public class Remove implements SpecialCommand {
|
|||||||
scriptExecutor.getLocalVariables().putValue(resultName, new Value.StringValue(v1.asString().replace(v2.asString(), "")));
|
scriptExecutor.getLocalVariables().putValue(resultName, new Value.StringValue(v1.asString().replace(v2.asString(), "")));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TokenType[][] syntax = {
|
||||||
|
{ TokenType.variable, TokenType.variable },
|
||||||
|
{ TokenType.variable, TokenType.variable, TokenType.variable },
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TokenType[][] getSyntax() {
|
||||||
|
return syntax;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -85,4 +85,14 @@ public class Replace implements SpecialCommand {
|
|||||||
scriptExecutor.getLocalVariables().putValue(resultName, new Value.StringValue(v1.asString().replace(v2.asString(), v3.asString())));
|
scriptExecutor.getLocalVariables().putValue(resultName, new Value.StringValue(v1.asString().replace(v2.asString(), v3.asString())));
|
||||||
return true;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -82,4 +82,14 @@ public class Substring implements SpecialCommand {
|
|||||||
scriptExecutor.getLocalVariables().putValue(resultName, result);
|
scriptExecutor.getLocalVariables().putValue(resultName, result);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TokenType[][] syntax = {
|
||||||
|
{ TokenType.variable, TokenType.number_type },
|
||||||
|
{ TokenType.variable, TokenType.variable, TokenType.number_type },
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TokenType[][] getSyntax() {
|
||||||
|
return syntax;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -70,4 +70,18 @@ public class Const implements SpecialCommand {
|
|||||||
Constants.getConstant(varName, scriptExecutor.getPlayer()).fromValue(Value.parse(varValue.toString()));
|
Constants.getConstant(varName, scriptExecutor.getPlayer()).fromValue(Value.parse(varValue.toString()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean repeating() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private TokenType[][] syntax = {
|
||||||
|
{ TokenType.variable, TokenType.any },
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TokenType[][] getSyntax() {
|
||||||
|
return syntax;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -62,4 +62,13 @@ public class Convert implements SpecialCommand {
|
|||||||
scriptExecutor.getLocalVariables().putValue(command[1], Value.parse(command[2]));
|
scriptExecutor.getLocalVariables().putValue(command[1], Value.parse(command[2]));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TokenType[][] syntax = {
|
||||||
|
{ TokenType.variable, TokenType.any },
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TokenType[][] getSyntax() {
|
||||||
|
return syntax;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,4 +50,18 @@ public class Global implements SpecialCommand {
|
|||||||
scriptExecutor.getGlobalVariables().putValue(varName, Value.parse(varValue.toString()));
|
scriptExecutor.getGlobalVariables().putValue(varName, Value.parse(varValue.toString()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean repeating() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private TokenType[][] syntax = {
|
||||||
|
{ TokenType.variable, TokenType.any },
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TokenType[][] getSyntax() {
|
||||||
|
return syntax;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,4 +37,13 @@ public class Unglobal implements SpecialCommand {
|
|||||||
scriptExecutor.getGlobalVariables().removeValue(command[1]);
|
scriptExecutor.getGlobalVariables().removeValue(command[1]);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TokenType[][] syntax = {
|
||||||
|
{ TokenType.variable },
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TokenType[][] getSyntax() {
|
||||||
|
return syntax;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,4 +37,13 @@ public class Unvar implements SpecialCommand {
|
|||||||
scriptExecutor.getLocalVariables().removeValue(command[1]);
|
scriptExecutor.getLocalVariables().removeValue(command[1]);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TokenType[][] syntax = {
|
||||||
|
{ TokenType.variable, TokenType.any },
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TokenType[][] getSyntax() {
|
||||||
|
return syntax;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,4 +50,18 @@ public class Var implements SpecialCommand {
|
|||||||
scriptExecutor.getLocalVariables().putValue(varName, Value.parse(varValue.toString()));
|
scriptExecutor.getLocalVariables().putValue(varName, Value.parse(varValue.toString()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean repeating() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private TokenType[][] syntax = {
|
||||||
|
{ TokenType.variable, TokenType.any },
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TokenType[][] getSyntax() {
|
||||||
|
return syntax;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -77,4 +77,13 @@ public class GetMaterial implements SpecialCommand {
|
|||||||
scriptExecutor.getLocalVariables().putValue(command[1], new Value.StringValue(world.getBlockAt(x, y, z).getType().name()));
|
scriptExecutor.getLocalVariables().putValue(command[1], new Value.StringValue(world.getBlockAt(x, y, z).getType().name()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TokenType[][] syntax = {
|
||||||
|
{ TokenType.variable, TokenType.number_type, TokenType.number_type, TokenType.number_type }
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TokenType[][] getSyntax() {
|
||||||
|
return syntax;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,4 +80,13 @@ public class SetMaterial implements SpecialCommand {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TokenType[][] syntax = {
|
||||||
|
{ TokenType.variable, TokenType.number_type, TokenType.number_type, TokenType.number_type }
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TokenType[][] getSyntax() {
|
||||||
|
return syntax;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ public class Expression {
|
|||||||
|
|
||||||
private static int highestPrecedence = 1;
|
private static int highestPrecedence = 1;
|
||||||
|
|
||||||
private static final Map<String, Operator> OPERATORS = new HashMap<>();
|
public static final Map<String, Operator> OPERATORS = new HashMap<>();
|
||||||
|
|
||||||
public static void registerOperator(Operator operator) {
|
public static void registerOperator(Operator operator) {
|
||||||
highestPrecedence = Math.max(highestPrecedence, operator.getPriority()) + 1;
|
highestPrecedence = Math.max(highestPrecedence, operator.getPriority()) + 1;
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren