From cf3eceedf6601ffd03db94dd6222303fddf295d3 Mon Sep 17 00:00:00 2001 From: jojo Date: Mon, 21 Dec 2020 12:47:40 +0100 Subject: [PATCH 01/14] Add Loop feature --- .../bausystem/world/ScriptListener.java | 52 +++++++++++++++++-- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java b/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java index a4dacb6..815d99e 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java @@ -22,6 +22,7 @@ package de.steamwar.bausystem.world; import de.steamwar.bausystem.BauSystem; import de.steamwar.core.Core; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -32,10 +33,7 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.BookMeta; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.logging.Level; public class ScriptListener implements Listener { @@ -80,7 +78,11 @@ public class ScriptListener implements Listener { private final Player player; private final List commands = new ArrayList<>(); + private final Map jumpPoints = new HashMap<>(); + + private boolean lastCommandWasSleep = false; private int index = 0; + private int executionPoints = 0; public ScriptExecutor(BookMeta bookMeta, Player player) { this.player = player; @@ -88,6 +90,10 @@ public class ScriptListener implements Listener { for(String page : bookMeta.getPages()) { for (String command : page.split("\n")) { if (command.startsWith("#") || command.trim().isEmpty()) continue; + if (command.startsWith(".")) { + jumpPoints.put(command.substring(1), commands.size()); + continue; + } commands.add(command); } } @@ -103,10 +109,37 @@ public class ScriptListener implements Listener { while (index < commands.size()) { String command = commands.get(index++); + executionPoints++; + if (executionPoints > 200) { + player.sendMessage(BauSystem.PREFIX + "§cBitte füge ein sleep in dein Script ein."); + return; + } + if (command.toLowerCase().startsWith("sleep")) { + if (!lastCommandWasSleep) { + executionPoints -= 2; + } + lastCommandWasSleep = true; ScriptListener.sleepCommand(this, generateArgumentArray("sleep", command)); return; } + lastCommandWasSleep = false; + if (command.toLowerCase().startsWith("exit")) { + return; + } + if (command.toLowerCase().startsWith("jump")) { + executionPoints += 2; + int jumpIndex = ScriptListener.jumpCommand(this, generateArgumentArray("jump", command)); + if (jumpIndex != -1) { + index = jumpIndex; + } + continue; + } + if (command.toLowerCase().startsWith("info")) { + executionPoints -= 1; + ScriptListener.infoCommand(this, generateArgumentArray("info", command)); + continue; + } PlayerCommandPreprocessEvent preprocessEvent = new PlayerCommandPreprocessEvent(player, "/" + command); Bukkit.getServer().getPluginManager().callEvent(preprocessEvent); @@ -141,4 +174,15 @@ public class ScriptListener implements Listener { Bukkit.getScheduler().runTaskLater(BauSystem.getPlugin(), scriptExecutor::resume, sleepTime); } + private static int jumpCommand(ScriptExecutor scriptExecutor, String[] args) { + if (args.length < 1) { + return -1; + } + return scriptExecutor.jumpPoints.getOrDefault(args[0], -1); + } + + private static void infoCommand(ScriptExecutor scriptExecutor, String[] args) { + scriptExecutor.player.sendMessage(ChatColor.translateAlternateColorCodes('&', String.join(" ", args))); + } + } From 60e611a098adfa95809a375a97017ca3ba07a8f2 Mon Sep 17 00:00:00 2001 From: jojo Date: Mon, 21 Dec 2020 12:48:32 +0100 Subject: [PATCH 02/14] Add info feature --- .../src/de/steamwar/bausystem/world/ScriptListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java b/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java index 815d99e..98470ea 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java @@ -182,7 +182,7 @@ public class ScriptListener implements Listener { } private static void infoCommand(ScriptExecutor scriptExecutor, String[] args) { - scriptExecutor.player.sendMessage(ChatColor.translateAlternateColorCodes('&', String.join(" ", args))); + scriptExecutor.player.sendMessage(BauSystem.PREFIX + ChatColor.translateAlternateColorCodes('&', String.join(" ", args))); } } From 3ad8bc4a06bb37aa4189816978039a12ae7735ce Mon Sep 17 00:00:00 2001 From: jojo Date: Mon, 21 Dec 2020 13:15:05 +0100 Subject: [PATCH 03/14] Add VariableHolder --- .../bausystem/world/ScriptListener.java | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java b/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java index 98470ea..23b21b5 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java @@ -20,6 +20,12 @@ package de.steamwar.bausystem.world; import de.steamwar.bausystem.BauSystem; +import de.steamwar.bausystem.commands.CommandFire; +import de.steamwar.bausystem.commands.CommandFreeze; +import de.steamwar.bausystem.commands.CommandNV; +import de.steamwar.bausystem.commands.CommandTNT; +import de.steamwar.bausystem.tracer.TraceManager; +import de.steamwar.bausystem.tracer.recorder.RecordManager; import de.steamwar.core.Core; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -182,7 +188,43 @@ public class ScriptListener implements Listener { } private static void infoCommand(ScriptExecutor scriptExecutor, String[] args) { - scriptExecutor.player.sendMessage(BauSystem.PREFIX + ChatColor.translateAlternateColorCodes('&', String.join(" ", args))); + scriptExecutor.player.sendMessage("§eInfo§8» §7" + ChatColor.translateAlternateColorCodes('&', String.join(" ", args))); + } + + private class VariableHolder { + + private Map variables = new HashMap<>(); + + public void setValue(String key, String value) { + int internalValue = 0; + if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes")) { + internalValue = 1; + } else if (value.equalsIgnoreCase("false") || value.equalsIgnoreCase("no")) { + internalValue = 0; + } else { + try { + internalValue = Integer.parseInt(value); + } catch (NumberFormatException e) { + internalValue = 0; + } + } + variables.put(key, internalValue); + } + + public int getValue(String key) { + switch (key) { + case "trace": + return RecordManager.getStatus().isTracing() ? 1 : 0; + case "tnt": + return CommandTNT.getInstance().isOn() ? 1 : 0; + case "freeze": + return CommandFreeze.getInstance().isOn() ? 1 : 0; + case "fire": + return CommandFire.getInstance().isOn() ? 1 : 0; + } + return variables.getOrDefault(key, 0); + } + } } From 5022da13a80f1210f2ec5e7246768d030eae61c7 Mon Sep 17 00:00:00 2001 From: jojo Date: Mon, 21 Dec 2020 15:39:57 +0100 Subject: [PATCH 04/14] Add if Add var Add info Variable code Add ExecutionPoints for limiting server performance --- .../bausystem/world/ScriptListener.java | 136 +++++++++++++++--- 1 file changed, 116 insertions(+), 20 deletions(-) diff --git a/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java b/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java index 23b21b5..6a84704 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java @@ -22,9 +22,7 @@ package de.steamwar.bausystem.world; import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.commands.CommandFire; import de.steamwar.bausystem.commands.CommandFreeze; -import de.steamwar.bausystem.commands.CommandNV; import de.steamwar.bausystem.commands.CommandTNT; -import de.steamwar.bausystem.tracer.TraceManager; import de.steamwar.bausystem.tracer.recorder.RecordManager; import de.steamwar.core.Core; import org.bukkit.Bukkit; @@ -85,6 +83,7 @@ public class ScriptListener implements Listener { private final Player player; private final List commands = new ArrayList<>(); private final Map jumpPoints = new HashMap<>(); + private final VariableHolder variableHolder = new VariableHolder(); private boolean lastCommandWasSleep = false; private int index = 0; @@ -120,13 +119,13 @@ public class ScriptListener implements Listener { player.sendMessage(BauSystem.PREFIX + "§cBitte füge ein sleep in dein Script ein."); return; } + if (executionPoints < 0) { + executionPoints = 0; + } if (command.toLowerCase().startsWith("sleep")) { - if (!lastCommandWasSleep) { - executionPoints -= 2; - } - lastCommandWasSleep = true; ScriptListener.sleepCommand(this, generateArgumentArray("sleep", command)); + lastCommandWasSleep = true; return; } lastCommandWasSleep = false; @@ -134,10 +133,12 @@ public class ScriptListener implements Listener { return; } if (command.toLowerCase().startsWith("jump")) { - executionPoints += 2; int jumpIndex = ScriptListener.jumpCommand(this, generateArgumentArray("jump", command)); if (jumpIndex != -1) { + executionPoints += 2; index = jumpIndex; + } else { + player.sendMessage(BauSystem.PREFIX + "§cUnbekannter Jump Punkt: " + command); } continue; } @@ -146,6 +147,19 @@ public class ScriptListener implements Listener { ScriptListener.infoCommand(this, generateArgumentArray("info", command)); continue; } + if (command.toLowerCase().startsWith("var")) { + executionPoints -= 1; + ScriptListener.variableCommand(this, generateArgumentArray("var", command)); + continue; + } + if (command.toLowerCase().startsWith("if")) { + int jumpIndex = ScriptListener.ifCommand(this, generateArgumentArray("if", command)); + if (jumpIndex != -1) { + executionPoints += 2; + index = jumpIndex; + } + continue; + } PlayerCommandPreprocessEvent preprocessEvent = new PlayerCommandPreprocessEvent(player, "/" + command); Bukkit.getServer().getPluginManager().callEvent(preprocessEvent); @@ -177,38 +191,95 @@ public class ScriptListener implements Listener { scriptExecutor.player.sendMessage(BauSystem.PREFIX + "§cDie Zeit darf nur aus Zahlen bestehen."); } } + if (!scriptExecutor.lastCommandWasSleep) { + scriptExecutor.executionPoints -= sleepTime - 1; + } Bukkit.getScheduler().runTaskLater(BauSystem.getPlugin(), scriptExecutor::resume, sleepTime); } private static int jumpCommand(ScriptExecutor scriptExecutor, String[] args) { if (args.length < 1) { + scriptExecutor.player.sendMessage(BauSystem.PREFIX + "§cEin Jump Punkt muss angegeben sein."); return -1; } return scriptExecutor.jumpPoints.getOrDefault(args[0], -1); } private static void infoCommand(ScriptExecutor scriptExecutor, String[] args) { + for (int i = 0; i < args.length; i++) { + if (args[i].startsWith("$") && scriptExecutor.variableHolder.isVariable(args[i].substring(1))) { + args[i] = scriptExecutor.variableHolder.getValue(args[i].substring(1)) + ""; + } + } scriptExecutor.player.sendMessage("§eInfo§8» §7" + ChatColor.translateAlternateColorCodes('&', String.join(" ", args))); } - private class VariableHolder { + private static void variableCommand(ScriptExecutor scriptExecutor, String[] args) { + if (args.length < 1) { + scriptExecutor.player.sendMessage(BauSystem.PREFIX + "§cVariablen Namen und Zahlen/Boolsche Wert fehlt."); + return; + } + if (args.length < 2) { + scriptExecutor.player.sendMessage(BauSystem.PREFIX + "§cZahlen/Boolsche Wert fehlt."); + return; + } + switch (args[1]) { + case "inc": + case "increment": + case "++": + scriptExecutor.variableHolder.add(args[0], 1); + return; + case "dec": + case "decrement": + case "--": + scriptExecutor.variableHolder.add(args[0], -1); + return; + } + scriptExecutor.variableHolder.setValue(args[0], args[1]); + } + + private static int ifCommand(ScriptExecutor scriptExecutor, String[] args) { + if (args.length < 2) { + scriptExecutor.player.sendMessage(BauSystem.PREFIX + "§cDie ersten beiden Argumente sind Zahlen/Boolsche Wertde oder Variablen."); + return -1; + } + + int jumpTruePoint = scriptExecutor.jumpPoints.getOrDefault(args[2], -1); + int jumpFalsePoint = args.length > 3 ? scriptExecutor.jumpPoints.getOrDefault(args[3], -1) : -1; + + int firstValue; + int secondValue; + if (scriptExecutor.variableHolder.isVariable(args[0])) { + firstValue = scriptExecutor.variableHolder.getValue(args[0]); + } else { + firstValue = scriptExecutor.variableHolder.parseValue(args[0]); + } + if (scriptExecutor.variableHolder.isVariable(args[1])) { + secondValue = scriptExecutor.variableHolder.getValue(args[1]); + } else { + secondValue = scriptExecutor.variableHolder.parseValue(args[1]); + } + + if (firstValue == secondValue) { + return jumpTruePoint; + } else { + return jumpFalsePoint; + } + } + + private static class VariableHolder { private Map variables = new HashMap<>(); public void setValue(String key, String value) { - int internalValue = 0; - if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes")) { - internalValue = 1; - } else if (value.equalsIgnoreCase("false") || value.equalsIgnoreCase("no")) { - internalValue = 0; - } else { - try { - internalValue = Integer.parseInt(value); - } catch (NumberFormatException e) { - internalValue = 0; - } + variables.put(key, parseValue(value)); + } + + public void add(String key, int value) { + if (!isVariable(key)) { + variables.put(key, 0); } - variables.put(key, internalValue); + variables.put(key, variables.get(key) + value); } public int getValue(String key) { @@ -225,6 +296,31 @@ public class ScriptListener implements Listener { return variables.getOrDefault(key, 0); } + public boolean isVariable(String key) { + switch (key) { + case "trace": + case "tnt": + case "freeze": + case "fire": + return true; + default: + return variables.containsKey(key); + } + } + + public int parseValue(String value) { + if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes")) { + return 1; + } else if (value.equalsIgnoreCase("false") || value.equalsIgnoreCase("no")) { + return 0; + } + try { + return Integer.parseInt(value); + } catch (NumberFormatException e) { + return 0; + } + } + } } From a8e6edefb8a4dc6c648fcea70c6945d258028932 Mon Sep 17 00:00:00 2001 From: jojo Date: Tue, 29 Dec 2020 20:28:57 +0100 Subject: [PATCH 05/14] Simplify ScriptListener --- .../bausystem/world/ScriptListener.java | 186 ++++++++---------- 1 file changed, 80 insertions(+), 106 deletions(-) diff --git a/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java b/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java index 6a84704..e7a1978 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java @@ -83,11 +83,9 @@ public class ScriptListener implements Listener { private final Player player; private final List commands = new ArrayList<>(); private final Map jumpPoints = new HashMap<>(); - private final VariableHolder variableHolder = new VariableHolder(); + private Map variables = new HashMap<>(); - private boolean lastCommandWasSleep = false; private int index = 0; - private int executionPoints = 0; public ScriptExecutor(BookMeta bookMeta, Player player) { this.player = player; @@ -114,51 +112,36 @@ public class ScriptListener implements Listener { while (index < commands.size()) { String command = commands.get(index++); - executionPoints++; - if (executionPoints > 200) { - player.sendMessage(BauSystem.PREFIX + "§cBitte füge ein sleep in dein Script ein."); - return; + String firstArg = command; + if (command.contains(" ")) { + firstArg = command.substring(0, command.indexOf(' ')); } - if (executionPoints < 0) { - executionPoints = 0; - } - - if (command.toLowerCase().startsWith("sleep")) { - ScriptListener.sleepCommand(this, generateArgumentArray("sleep", command)); - lastCommandWasSleep = true; - return; - } - lastCommandWasSleep = false; - if (command.toLowerCase().startsWith("exit")) { - return; - } - if (command.toLowerCase().startsWith("jump")) { - int jumpIndex = ScriptListener.jumpCommand(this, generateArgumentArray("jump", command)); - if (jumpIndex != -1) { - executionPoints += 2; - index = jumpIndex; - } else { - player.sendMessage(BauSystem.PREFIX + "§cUnbekannter Jump Punkt: " + command); - } - continue; - } - if (command.toLowerCase().startsWith("info")) { - executionPoints -= 1; - ScriptListener.infoCommand(this, generateArgumentArray("info", command)); - continue; - } - if (command.toLowerCase().startsWith("var")) { - executionPoints -= 1; - ScriptListener.variableCommand(this, generateArgumentArray("var", command)); - continue; - } - if (command.toLowerCase().startsWith("if")) { - int jumpIndex = ScriptListener.ifCommand(this, generateArgumentArray("if", command)); - if (jumpIndex != -1) { - executionPoints += 2; - index = jumpIndex; - } - continue; + switch (firstArg.toLowerCase()) { + case "sleep": + ScriptListener.sleepCommand(this, generateArgumentArray("sleep", command)); + return; + case "exit": + return; + case "jump": + int jumpIndex = ScriptListener.jumpCommand(this, generateArgumentArray("jump", command)); + if (jumpIndex != -1) { + index = jumpIndex; + } else { + player.sendMessage(BauSystem.PREFIX + "§cUnbekannter Jump Punkt: " + command); + } + continue; + case "info": + ScriptListener.infoCommand(this, generateArgumentArray("info", command)); + continue; + case "var": + ScriptListener.variableCommand(this, generateArgumentArray("var", command)); + continue; + case "if": + int ifJumpIndex = ScriptListener.ifCommand(this, generateArgumentArray("if", command)); + if (ifJumpIndex != -1) { + index = ifJumpIndex; + } + continue; } PlayerCommandPreprocessEvent preprocessEvent = new PlayerCommandPreprocessEvent(player, "/" + command); @@ -191,9 +174,6 @@ public class ScriptListener implements Listener { scriptExecutor.player.sendMessage(BauSystem.PREFIX + "§cDie Zeit darf nur aus Zahlen bestehen."); } } - if (!scriptExecutor.lastCommandWasSleep) { - scriptExecutor.executionPoints -= sleepTime - 1; - } Bukkit.getScheduler().runTaskLater(BauSystem.getPlugin(), scriptExecutor::resume, sleepTime); } @@ -207,8 +187,8 @@ public class ScriptListener implements Listener { private static void infoCommand(ScriptExecutor scriptExecutor, String[] args) { for (int i = 0; i < args.length; i++) { - if (args[i].startsWith("$") && scriptExecutor.variableHolder.isVariable(args[i].substring(1))) { - args[i] = scriptExecutor.variableHolder.getValue(args[i].substring(1)) + ""; + if (args[i].startsWith("$") && isVariable(scriptExecutor, args[i].substring(1))) { + args[i] = getValue(scriptExecutor, args[i].substring(1)) + ""; } } scriptExecutor.player.sendMessage("§eInfo§8» §7" + ChatColor.translateAlternateColorCodes('&', String.join(" ", args))); @@ -227,15 +207,15 @@ public class ScriptListener implements Listener { case "inc": case "increment": case "++": - scriptExecutor.variableHolder.add(args[0], 1); + add(scriptExecutor, args[0], 1); return; case "dec": case "decrement": case "--": - scriptExecutor.variableHolder.add(args[0], -1); + add(scriptExecutor, args[0], -1); return; } - scriptExecutor.variableHolder.setValue(args[0], args[1]); + setValue(scriptExecutor, args[0], args[1]); } private static int ifCommand(ScriptExecutor scriptExecutor, String[] args) { @@ -249,15 +229,15 @@ public class ScriptListener implements Listener { int firstValue; int secondValue; - if (scriptExecutor.variableHolder.isVariable(args[0])) { - firstValue = scriptExecutor.variableHolder.getValue(args[0]); + if (isVariable(scriptExecutor, args[0])) { + firstValue = getValue(scriptExecutor, args[0]); } else { - firstValue = scriptExecutor.variableHolder.parseValue(args[0]); + firstValue = parseValue(args[0]); } - if (scriptExecutor.variableHolder.isVariable(args[1])) { - secondValue = scriptExecutor.variableHolder.getValue(args[1]); + if (isVariable(scriptExecutor, args[1])) { + secondValue = getValue(scriptExecutor, args[1]); } else { - secondValue = scriptExecutor.variableHolder.parseValue(args[1]); + secondValue = parseValue(args[1]); } if (firstValue == secondValue) { @@ -267,60 +247,54 @@ public class ScriptListener implements Listener { } } - private static class VariableHolder { + private static void setValue(ScriptExecutor scriptExecutor, String key, String value) { + scriptExecutor.variables.put(key, parseValue(value)); + } - private Map variables = new HashMap<>(); - - public void setValue(String key, String value) { - variables.put(key, parseValue(value)); + private static void add(ScriptExecutor scriptExecutor, String key, int value) { + if (!isVariable(scriptExecutor, key)) { + scriptExecutor.variables.put(key, 0); } + scriptExecutor.variables.put(key, scriptExecutor.variables.get(key) + value); + } - public void add(String key, int value) { - if (!isVariable(key)) { - variables.put(key, 0); - } - variables.put(key, variables.get(key) + value); + private static int getValue(ScriptExecutor scriptExecutor, String key) { + switch (key) { + case "trace": + return RecordManager.getStatus().isTracing() ? 1 : 0; + case "tnt": + return CommandTNT.getInstance().isOn() ? 1 : 0; + case "freeze": + return CommandFreeze.getInstance().isOn() ? 1 : 0; + case "fire": + return CommandFire.getInstance().isOn() ? 1 : 0; } + return scriptExecutor.variables.getOrDefault(key, 0); + } - public int getValue(String key) { - switch (key) { - case "trace": - return RecordManager.getStatus().isTracing() ? 1 : 0; - case "tnt": - return CommandTNT.getInstance().isOn() ? 1 : 0; - case "freeze": - return CommandFreeze.getInstance().isOn() ? 1 : 0; - case "fire": - return CommandFire.getInstance().isOn() ? 1 : 0; - } - return variables.getOrDefault(key, 0); + private static boolean isVariable(ScriptExecutor scriptExecutor, String key) { + switch (key) { + case "trace": + case "tnt": + case "freeze": + case "fire": + return true; + default: + return scriptExecutor.variables.containsKey(key); } + } - public boolean isVariable(String key) { - switch (key) { - case "trace": - case "tnt": - case "freeze": - case "fire": - return true; - default: - return variables.containsKey(key); - } + private static int parseValue(String value) { + if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes")) { + return 1; + } else if (value.equalsIgnoreCase("false") || value.equalsIgnoreCase("no")) { + return 0; } - - public int parseValue(String value) { - if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes")) { - return 1; - } else if (value.equalsIgnoreCase("false") || value.equalsIgnoreCase("no")) { - return 0; - } - try { - return Integer.parseInt(value); - } catch (NumberFormatException e) { - return 0; - } + try { + return Integer.parseInt(value); + } catch (NumberFormatException e) { + return 0; } - } } From 570de88059d914f53871463a9fca071e7877e1a5 Mon Sep 17 00:00:00 2001 From: jojo Date: Tue, 29 Dec 2020 21:24:58 +0100 Subject: [PATCH 06/14] Add variable replacing for every command --- .../de/steamwar/bausystem/world/ScriptListener.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java b/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java index e7a1978..071720a 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java @@ -150,6 +150,12 @@ public class ScriptListener implements Listener { continue; } + // Variable Replaces in commands. + String[] commandArgs = command.split(" "); + String[] args = Arrays.copyOfRange(commandArgs, 1, commandArgs.length); + replaceVariables(this, args); + command = commandArgs[0] + String.join(" ", args); + Bukkit.getLogger().log(Level.INFO, player.getName() + " dispatched command: " + command); Bukkit.getServer().dispatchCommand(player, command); } @@ -185,12 +191,16 @@ public class ScriptListener implements Listener { return scriptExecutor.jumpPoints.getOrDefault(args[0], -1); } - private static void infoCommand(ScriptExecutor scriptExecutor, String[] args) { + private static void replaceVariables(ScriptExecutor scriptExecutor, String[] args) { for (int i = 0; i < args.length; i++) { if (args[i].startsWith("$") && isVariable(scriptExecutor, args[i].substring(1))) { args[i] = getValue(scriptExecutor, args[i].substring(1)) + ""; } } + } + + private static void infoCommand(ScriptExecutor scriptExecutor, String[] args) { + replaceVariables(scriptExecutor, args); scriptExecutor.player.sendMessage("§eInfo§8» §7" + ChatColor.translateAlternateColorCodes('&', String.join(" ", args))); } From fec21c9a921908f5c5369b21ab503fa113315351 Mon Sep 17 00:00:00 2001 From: jojo Date: Wed, 30 Dec 2020 11:48:38 +0100 Subject: [PATCH 07/14] Add Execution Points back --- .../src/de/steamwar/bausystem/world/ScriptListener.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java b/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java index 071720a..699fcd3 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java @@ -109,8 +109,13 @@ public class ScriptListener implements Listener { return; } + int executionPoints = 0; + while (index < commands.size()) { String command = commands.get(index++); + if (executionPoints++ > 200) { + return; + } String firstArg = command; if (command.contains(" ")) { From d04032cd6626dfebc1a52e3a6a0e36aae63fabf6 Mon Sep 17 00:00:00 2001 From: jojo Date: Wed, 30 Dec 2020 12:13:14 +0100 Subject: [PATCH 08/14] Add CommandScript --- .../src/de/steamwar/bausystem/BauSystem.java | 1 + .../bausystem/commands/CommandScript.java | 40 +++++++++++++++++++ BauSystem_Main/src/plugin.yml | 1 + 3 files changed, 42 insertions(+) create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java diff --git a/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java b/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java index 56309f2..2a42867 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java @@ -117,6 +117,7 @@ public class BauSystem extends JavaPlugin implements Listener { getCommand("watervision").setExecutor(new CommandGills()); getCommand("detonator").setExecutor(new CommandDetonator()); getCommand("detonator").setTabCompleter(new CommandDetonatorTabCompleter()); + getCommand("script").setExecutor(new CommandScript()); Bukkit.getPluginManager().registerEvents(this, this); Bukkit.getPluginManager().registerEvents(new RegionListener(), this); diff --git a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java new file mode 100644 index 0000000..1032dc0 --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java @@ -0,0 +1,40 @@ +/* + * + * This file is a part of the SteamWar software. + * + * Copyright (C) 2020 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * / + */ + +package de.steamwar.bausystem.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class CommandScript implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command command, String s, String[] args) { + if (!(sender instanceof Player)) { + return false; + } + Player player = (Player) sender; + return false; + } + +} diff --git a/BauSystem_Main/src/plugin.yml b/BauSystem_Main/src/plugin.yml index 0c6a0f4..bc85fb9 100644 --- a/BauSystem_Main/src/plugin.yml +++ b/BauSystem_Main/src/plugin.yml @@ -33,3 +33,4 @@ commands: lockschem: detonator: aliases: dt + script: \ No newline at end of file From eedc6f3e80d2652db2ed6d9ed150dc4db9079c6f Mon Sep 17 00:00:00 2001 From: jojo Date: Sat, 2 Jan 2021 17:24:25 +0100 Subject: [PATCH 09/14] Add Script Documentation in CommandScript --- .../bausystem/commands/CommandScript.java | 36 +++++++++++++++++++ .../bausystem/world/ScriptListener.java | 13 ++++--- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java index 1032dc0..ba26995 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java @@ -21,19 +21,55 @@ package de.steamwar.bausystem.commands; +import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.BookMeta; + +import java.util.ArrayList; +import java.util.List; public class CommandScript implements CommandExecutor { + private static final List PAGES = new ArrayList<>(); + + static { + PAGES.add("§6Script System§8\n\n- Commands\n- Kommentare\n- Scriptausführung\n- Sleep\n- Variablen\n- Konstanten\n- Abfragen\n- Schleifen\n- \"echo\""); + PAGES.add("§6Commands§8\n\nEin minecraft Befehl wird im Scriptbuch so hingeschrieben. Dabei kann man ein '/' weglassen. Um Befehle zu trennen kommen diese in neue Zeilen.\n\nStatt\n/tnt -> tnt\n//pos1 -> /pos1"); + PAGES.add("§6Kommentare§8\n\nFür ein Kommentar fängt die Zeile mit einem '#' an. Diese Zeilen werden bei dem Ausführen dann ignoriert.\n\nBeispiel:\n§9# TNT an/aus\ntnt§8"); + PAGES.add("§6Scriptausführung§8\n\nWenn du mit dem Buch in der Hand links klickst wird dieses ausgeführt."); + PAGES.add("§6Sleep§8\n\nUm Sachen langsammer zu machen kann man ein 'sleep' in sein Scrip schreiben. Danach kommt eine Zahl mit der Anzahl der GameTicks die zu schlafen sind.\n\nBeispiel:\n§9# 1 Sekunde schlafen\nsleep 20§8"); + PAGES.add("§6Variablen§8\n\nMit Variablen kann man sich Zahlen speichern. Man definiert diese mit 'var '.\n\nBeispiel:\n§9# Setze i zu 0\nvar i 0§8\n\nEs gibt einige spezial values. Dazu zählen"); + PAGES.add("§8'true', 'yes', 'false' und 'no', welche für 1, 1, 0 und 0 stehen.\n\nMan kann eine Variable auch um einen erhöhen oder verkleinern. Hierfür schreibt man statt einer Zahl '++', 'inc' oder '--', 'dec'.\n\nBeispiel:\n§9var i ++§8"); + PAGES.add("§8Variablen kann man referenzieren\ndurch '$' vor dem Variablennamen. Diese kann man in jedem Befehl verwenden.\n\nBeispiel:\n§9# Stacked um 10\nvar stacks 10\n/stack $stacks§8"); + PAGES.add("§6Konstanten§8\n\nNeben den variablen gibt es noch 4 Konstante Werte, welche nicht mit dem 'var' Befehl verändert werden können.\n\nDiese sind:\n- trace\n- tnt\n- freeze\n- fire"); + PAGES.add("§6Abfragen§8\n\nMit Abfragen kann man nur Gleichheit von 2 Werten überprüft werden. Hierfür verwendet man\n'if '.\nNach den zwei Werten kann man ein oder 2 Jump-Points schreiben\n'if [...] (JP)'."); + PAGES.add("§8Ein Jump-Point ist eine Zeile Script, wohin man springen kann. Dieser wird mit einem '.' am Anfang der Zeile beschrieben und direkt danach der Jump-Point Namen ohne Leerzeichen.\n\nBeispiel:\n§9# Jump-Point X\n.X§8"); + PAGES.add("§8Um zu einem Jump-Point ohne Abfrage zu springen kann man den\n'jump ' Befehl verwenden."); + PAGES.add("§6Schleifen§8\n\nSchleifen werden mit Jump-Points, if Abfragen und Jumps gebaut.\n\nBeispiel:\n§9var i 0\n.JUMP\nvar i ++\nif i 10 END JUMP\n.END§8"); + PAGES.add("§6\"echo\"§8\n\nDer echo Befehl ist gut um Ausgaben zu tätigen. Hierdrin kann man sowohl Variablen ausgeben, als auch Farbcodes verwenden. Es wird alles nach dem Befehl ausgegeben.\n\nBeispiel\n§9echo &eSteam&8war &7war hier!§8"); + } + @Override public boolean onCommand(CommandSender sender, Command command, String s, String[] args) { if (!(sender instanceof Player)) { return false; } Player player = (Player) sender; + + ItemStack itemStack = new ItemStack(Material.WRITTEN_BOOK, 1); + BookMeta bookMeta = (BookMeta) itemStack.getItemMeta(); + bookMeta.setGeneration(BookMeta.Generation.ORIGINAL); + bookMeta.setAuthor("§6Steam§8war"); + bookMeta.setTitle("§8Script Buch"); + bookMeta.setDisplayName("§8Script Buch"); + bookMeta.setPages(PAGES); + itemStack.setItemMeta(bookMeta); + + player.getInventory().setItemInMainHand(itemStack); return false; } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java b/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java index 699fcd3..94813ac 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java @@ -54,6 +54,10 @@ public class ScriptListener implements Listener { if(item == null || isNoBook(item) || item.getItemMeta() == null) return; + if (item.getItemMeta().getDisplayName().equals("§8Script Buch")) { + return; + } + if (event.getAction() != Action.LEFT_CLICK_AIR && event.getAction() != Action.LEFT_CLICK_BLOCK) { if (event.getAction() == Action.RIGHT_CLICK_AIR) { playerSet.add(event.getPlayer()); @@ -114,6 +118,7 @@ public class ScriptListener implements Listener { while (index < commands.size()) { String command = commands.get(index++); if (executionPoints++ > 200) { + player.sendMessage(BauSystem.PREFIX + "§cFüge ein sleep in dein Script ein"); return; } @@ -135,8 +140,8 @@ public class ScriptListener implements Listener { player.sendMessage(BauSystem.PREFIX + "§cUnbekannter Jump Punkt: " + command); } continue; - case "info": - ScriptListener.infoCommand(this, generateArgumentArray("info", command)); + case "echo": + ScriptListener.echoCommand(this, generateArgumentArray("echo", command)); continue; case "var": ScriptListener.variableCommand(this, generateArgumentArray("var", command)); @@ -159,7 +164,7 @@ public class ScriptListener implements Listener { String[] commandArgs = command.split(" "); String[] args = Arrays.copyOfRange(commandArgs, 1, commandArgs.length); replaceVariables(this, args); - command = commandArgs[0] + String.join(" ", args); + command = commandArgs[0] + " " + String.join(" ", args); Bukkit.getLogger().log(Level.INFO, player.getName() + " dispatched command: " + command); Bukkit.getServer().dispatchCommand(player, command); @@ -204,7 +209,7 @@ public class ScriptListener implements Listener { } } - private static void infoCommand(ScriptExecutor scriptExecutor, String[] args) { + private static void echoCommand(ScriptExecutor scriptExecutor, String[] args) { replaceVariables(scriptExecutor, args); scriptExecutor.player.sendMessage("§eInfo§8» §7" + ChatColor.translateAlternateColorCodes('&', String.join(" ", args))); } From 04151e44b019c7160dbf28acc9cb7173d36a572f Mon Sep 17 00:00:00 2001 From: jojo Date: Sat, 2 Jan 2021 17:30:07 +0100 Subject: [PATCH 10/14] Fix Book Author --- .../src/de/steamwar/bausystem/commands/CommandScript.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java index ba26995..8498a4e 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java @@ -63,7 +63,7 @@ public class CommandScript implements CommandExecutor { ItemStack itemStack = new ItemStack(Material.WRITTEN_BOOK, 1); BookMeta bookMeta = (BookMeta) itemStack.getItemMeta(); bookMeta.setGeneration(BookMeta.Generation.ORIGINAL); - bookMeta.setAuthor("§6Steam§8war"); + bookMeta.setAuthor("§eSteam§8war"); bookMeta.setTitle("§8Script Buch"); bookMeta.setDisplayName("§8Script Buch"); bookMeta.setPages(PAGES); From dd6d513198c797e939dd9c2e25a2b6b98d73526e Mon Sep 17 00:00:00 2001 From: jojo Date: Sat, 2 Jan 2021 17:39:42 +0100 Subject: [PATCH 11/14] Fix Item name --- .../src/de/steamwar/bausystem/commands/CommandScript.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java index 8498a4e..147999e 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java @@ -64,8 +64,8 @@ public class CommandScript implements CommandExecutor { BookMeta bookMeta = (BookMeta) itemStack.getItemMeta(); bookMeta.setGeneration(BookMeta.Generation.ORIGINAL); bookMeta.setAuthor("§eSteam§8war"); - bookMeta.setTitle("§8Script Buch"); - bookMeta.setDisplayName("§8Script Buch"); + bookMeta.setTitle("§7Script Buch"); + bookMeta.setDisplayName("§7Script Buch"); bookMeta.setPages(PAGES); itemStack.setItemMeta(bookMeta); From 2770006c0ecc44fd98c6b2d074678fbf885b2e6b Mon Sep 17 00:00:00 2001 From: jojo Date: Sun, 3 Jan 2021 12:26:31 +0100 Subject: [PATCH 12/14] Fix Typos in Documentation Book --- .../src/de/steamwar/bausystem/commands/CommandScript.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java index 147999e..c86b3da 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java @@ -41,7 +41,7 @@ public class CommandScript implements CommandExecutor { PAGES.add("§6Commands§8\n\nEin minecraft Befehl wird im Scriptbuch so hingeschrieben. Dabei kann man ein '/' weglassen. Um Befehle zu trennen kommen diese in neue Zeilen.\n\nStatt\n/tnt -> tnt\n//pos1 -> /pos1"); PAGES.add("§6Kommentare§8\n\nFür ein Kommentar fängt die Zeile mit einem '#' an. Diese Zeilen werden bei dem Ausführen dann ignoriert.\n\nBeispiel:\n§9# TNT an/aus\ntnt§8"); PAGES.add("§6Scriptausführung§8\n\nWenn du mit dem Buch in der Hand links klickst wird dieses ausgeführt."); - PAGES.add("§6Sleep§8\n\nUm Sachen langsammer zu machen kann man ein 'sleep' in sein Scrip schreiben. Danach kommt eine Zahl mit der Anzahl der GameTicks die zu schlafen sind.\n\nBeispiel:\n§9# 1 Sekunde schlafen\nsleep 20§8"); + PAGES.add("§6Sleep§8\n\nUm Sachen langsamer zu machen kann man ein 'sleep' in sein Script schreiben. Danach kommt eine Zahl mit der Anzahl der GameTicks die zu schlafen sind.\n\nBeispiel:\n§9# 1 Sekunde schlafen\nsleep 20§8"); PAGES.add("§6Variablen§8\n\nMit Variablen kann man sich Zahlen speichern. Man definiert diese mit 'var '.\n\nBeispiel:\n§9# Setze i zu 0\nvar i 0§8\n\nEs gibt einige spezial values. Dazu zählen"); PAGES.add("§8'true', 'yes', 'false' und 'no', welche für 1, 1, 0 und 0 stehen.\n\nMan kann eine Variable auch um einen erhöhen oder verkleinern. Hierfür schreibt man statt einer Zahl '++', 'inc' oder '--', 'dec'.\n\nBeispiel:\n§9var i ++§8"); PAGES.add("§8Variablen kann man referenzieren\ndurch '$' vor dem Variablennamen. Diese kann man in jedem Befehl verwenden.\n\nBeispiel:\n§9# Stacked um 10\nvar stacks 10\n/stack $stacks§8"); @@ -50,7 +50,7 @@ public class CommandScript implements CommandExecutor { PAGES.add("§8Ein Jump-Point ist eine Zeile Script, wohin man springen kann. Dieser wird mit einem '.' am Anfang der Zeile beschrieben und direkt danach der Jump-Point Namen ohne Leerzeichen.\n\nBeispiel:\n§9# Jump-Point X\n.X§8"); PAGES.add("§8Um zu einem Jump-Point ohne Abfrage zu springen kann man den\n'jump ' Befehl verwenden."); PAGES.add("§6Schleifen§8\n\nSchleifen werden mit Jump-Points, if Abfragen und Jumps gebaut.\n\nBeispiel:\n§9var i 0\n.JUMP\nvar i ++\nif i 10 END JUMP\n.END§8"); - PAGES.add("§6\"echo\"§8\n\nDer echo Befehl ist gut um Ausgaben zu tätigen. Hierdrin kann man sowohl Variablen ausgeben, als auch Farbcodes verwenden. Es wird alles nach dem Befehl ausgegeben.\n\nBeispiel\n§9echo &eSteam&8war &7war hier!§8"); + PAGES.add("§6\"echo\"§8\n\nDer echo Befehl ist gut um Ausgaben zu tätigen. Hier drin kann man sowohl Variablen ausgeben, als auch Farbcodes verwenden. Es wird alles nach dem Befehl ausgegeben.\n\nBeispiel:\n§9echo &eSteam&8war &7war hier!§8"); } @Override From ffd080411fea58ceb876eb4133eef5bb91c15f10 Mon Sep 17 00:00:00 2001 From: jojo Date: Mon, 4 Jan 2021 20:28:23 +0100 Subject: [PATCH 13/14] Add Inventory click support --- .../bausystem/world/ScriptListener.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java b/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java index 94813ac..d259fed 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java @@ -32,6 +32,10 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCreativeEvent; +import org.bukkit.event.inventory.InventoryInteractEvent; +import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; @@ -72,6 +76,43 @@ public class ScriptListener implements Listener { new ScriptExecutor((BookMeta) item.getItemMeta(), event.getPlayer()); } + @EventHandler(priority = EventPriority.HIGH) + public void onInventoryClick(InventoryClickEvent event) { + if (!(event.isShiftClick() && event.isLeftClick())) { + return; + } + + ItemStack item = event.getCurrentItem(); + if(item == null || isNoBook(item) || item.getItemMeta() == null) + return; + + if (item.getItemMeta().getDisplayName().equals("§8Script Buch")) { + return; + } + + event.setCancelled(true); + new ScriptExecutor((BookMeta) item.getItemMeta(), (Player) event.getWhoClicked()); + } + + @EventHandler(priority = EventPriority.HIGH) + public void onInventoryCreative(InventoryCreativeEvent event) { + System.out.println(event + " " + event.getCursor() + " " + event.getClick() + " " + event.getCurrentItem()); + if (!(event.isShiftClick() && event.isLeftClick())) { + return; + } + + ItemStack item = event.getCurrentItem(); + if(item == null || isNoBook(item) || item.getItemMeta() == null) + return; + + if (item.getItemMeta().getDisplayName().equals("§8Script Buch")) { + return; + } + + event.setCancelled(true); + new ScriptExecutor((BookMeta) item.getItemMeta(), (Player) event.getWhoClicked()); + } + private boolean isNoBook(ItemStack item){ switch(Core.getVersion()){ case 12: From 3af3ef5fdd293b2ff84de8f970cf0a7998210293 Mon Sep 17 00:00:00 2001 From: jojo Date: Sat, 9 Jan 2021 20:33:54 +0100 Subject: [PATCH 14/14] Fix CommandScript --- .../bausystem/commands/CommandScript.java | 52 +++++++++---------- .../bausystem/world/ScriptListener.java | 42 +-------------- 2 files changed, 27 insertions(+), 67 deletions(-) diff --git a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java index c86b3da..b093046 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandScript.java @@ -34,23 +34,32 @@ import java.util.List; public class CommandScript implements CommandExecutor { - private static final List PAGES = new ArrayList<>(); + public static final ItemStack BOOK = new ItemStack(Material.WRITTEN_BOOK, 1); static { - PAGES.add("§6Script System§8\n\n- Commands\n- Kommentare\n- Scriptausführung\n- Sleep\n- Variablen\n- Konstanten\n- Abfragen\n- Schleifen\n- \"echo\""); - PAGES.add("§6Commands§8\n\nEin minecraft Befehl wird im Scriptbuch so hingeschrieben. Dabei kann man ein '/' weglassen. Um Befehle zu trennen kommen diese in neue Zeilen.\n\nStatt\n/tnt -> tnt\n//pos1 -> /pos1"); - PAGES.add("§6Kommentare§8\n\nFür ein Kommentar fängt die Zeile mit einem '#' an. Diese Zeilen werden bei dem Ausführen dann ignoriert.\n\nBeispiel:\n§9# TNT an/aus\ntnt§8"); - PAGES.add("§6Scriptausführung§8\n\nWenn du mit dem Buch in der Hand links klickst wird dieses ausgeführt."); - PAGES.add("§6Sleep§8\n\nUm Sachen langsamer zu machen kann man ein 'sleep' in sein Script schreiben. Danach kommt eine Zahl mit der Anzahl der GameTicks die zu schlafen sind.\n\nBeispiel:\n§9# 1 Sekunde schlafen\nsleep 20§8"); - PAGES.add("§6Variablen§8\n\nMit Variablen kann man sich Zahlen speichern. Man definiert diese mit 'var '.\n\nBeispiel:\n§9# Setze i zu 0\nvar i 0§8\n\nEs gibt einige spezial values. Dazu zählen"); - PAGES.add("§8'true', 'yes', 'false' und 'no', welche für 1, 1, 0 und 0 stehen.\n\nMan kann eine Variable auch um einen erhöhen oder verkleinern. Hierfür schreibt man statt einer Zahl '++', 'inc' oder '--', 'dec'.\n\nBeispiel:\n§9var i ++§8"); - PAGES.add("§8Variablen kann man referenzieren\ndurch '$' vor dem Variablennamen. Diese kann man in jedem Befehl verwenden.\n\nBeispiel:\n§9# Stacked um 10\nvar stacks 10\n/stack $stacks§8"); - PAGES.add("§6Konstanten§8\n\nNeben den variablen gibt es noch 4 Konstante Werte, welche nicht mit dem 'var' Befehl verändert werden können.\n\nDiese sind:\n- trace\n- tnt\n- freeze\n- fire"); - PAGES.add("§6Abfragen§8\n\nMit Abfragen kann man nur Gleichheit von 2 Werten überprüft werden. Hierfür verwendet man\n'if '.\nNach den zwei Werten kann man ein oder 2 Jump-Points schreiben\n'if [...] (JP)'."); - PAGES.add("§8Ein Jump-Point ist eine Zeile Script, wohin man springen kann. Dieser wird mit einem '.' am Anfang der Zeile beschrieben und direkt danach der Jump-Point Namen ohne Leerzeichen.\n\nBeispiel:\n§9# Jump-Point X\n.X§8"); - PAGES.add("§8Um zu einem Jump-Point ohne Abfrage zu springen kann man den\n'jump ' Befehl verwenden."); - PAGES.add("§6Schleifen§8\n\nSchleifen werden mit Jump-Points, if Abfragen und Jumps gebaut.\n\nBeispiel:\n§9var i 0\n.JUMP\nvar i ++\nif i 10 END JUMP\n.END§8"); - PAGES.add("§6\"echo\"§8\n\nDer echo Befehl ist gut um Ausgaben zu tätigen. Hier drin kann man sowohl Variablen ausgeben, als auch Farbcodes verwenden. Es wird alles nach dem Befehl ausgegeben.\n\nBeispiel:\n§9echo &eSteam&8war &7war hier!§8"); + List pages = new ArrayList<>(); + pages.add("§6Script System§8\n\n- Commands\n- Kommentare\n- Scriptausführung\n- Sleep\n- Variablen\n- Konstanten\n- Abfragen\n- Schleifen\n- \"echo\""); + pages.add("§6Commands§8\n\nEin minecraft Befehl wird im Scriptbuch so hingeschrieben. Dabei kann man ein '/' weglassen. Um Befehle zu trennen kommen diese in neue Zeilen.\n\nStatt\n/tnt -> tnt\n//pos1 -> /pos1"); + pages.add("§6Kommentare§8\n\nFür ein Kommentar fängt die Zeile mit einem '#' an. Diese Zeilen werden bei dem Ausführen dann ignoriert.\n\nBeispiel:\n§9# TNT an/aus\ntnt§8"); + pages.add("§6Scriptausführung§8\n\nWenn du mit dem Buch in der Hand links klickst wird dieses ausgeführt."); + pages.add("§6Sleep§8\n\nUm Sachen langsamer zu machen kann man ein 'sleep' in sein Script schreiben. Danach kommt eine Zahl mit der Anzahl der GameTicks die zu schlafen sind.\n\nBeispiel:\n§9# 1 Sekunde schlafen\nsleep 20§8"); + pages.add("§6Variablen§8\n\nMit Variablen kann man sich Zahlen speichern. Man definiert diese mit 'var '.\n\nBeispiel:\n§9# Setze i zu 0\nvar i 0§8\n\nEs gibt einige spezial values. Dazu zählen"); + pages.add("§8'true', 'yes', 'false' und 'no', welche für 1, 1, 0 und 0 stehen.\n\nMan kann eine Variable auch um einen erhöhen oder verkleinern. Hierfür schreibt man statt einer Zahl '++', 'inc' oder '--', 'dec'.\n\nBeispiel:\n§9var i ++§8"); + pages.add("§8Variablen kann man referenzieren\ndurch '$' vor dem Variablennamen. Diese kann man in jedem Befehl verwenden.\n\nBeispiel:\n§9# Stacked um 10\nvar stacks 10\n/stack $stacks§8"); + pages.add("§6Konstanten§8\n\nNeben den variablen gibt es noch 4 Konstante Werte, welche nicht mit dem 'var' Befehl verändert werden können.\n\nDiese sind:\n- trace\n- tnt\n- freeze\n- fire"); + pages.add("§6Abfragen§8\n\nMit Abfragen kann man nur Gleichheit von 2 Werten überprüft werden. Hierfür verwendet man\n'if '.\nNach den zwei Werten kann man ein oder 2 Jump-Points schreiben\n'if [...] (JP)'."); + pages.add("§8Ein Jump-Point ist eine Zeile Script, wohin man springen kann. Dieser wird mit einem '.' am Anfang der Zeile beschrieben und direkt danach der Jump-Point Namen ohne Leerzeichen.\n\nBeispiel:\n§9# Jump-Point X\n.X§8"); + pages.add("§8Um zu einem Jump-Point ohne Abfrage zu springen kann man den\n'jump ' Befehl verwenden."); + pages.add("§6Schleifen§8\n\nSchleifen werden mit Jump-Points, if Abfragen und Jumps gebaut.\n\nBeispiel:\n§9var i 0\n.JUMP\nvar i ++\nif i 10 END JUMP\n.END§8"); + pages.add("§6\"echo\"§8\n\nDer echo Befehl ist gut um Ausgaben zu tätigen. Hier drin kann man sowohl Variablen ausgeben, als auch Farbcodes verwenden. Es wird alles nach dem Befehl ausgegeben.\n\nBeispiel:\n§9echo &eSteam&8war &7war hier!§8"); + + BookMeta bookMeta = (BookMeta) BOOK.getItemMeta(); + bookMeta.setGeneration(BookMeta.Generation.ORIGINAL); + bookMeta.setAuthor("§eSteam§8war"); + bookMeta.setTitle("§7Script Buch"); + bookMeta.setDisplayName("§7Script Buch"); + bookMeta.setPages(pages); + BOOK.setItemMeta(bookMeta); } @Override @@ -58,18 +67,7 @@ public class CommandScript implements CommandExecutor { if (!(sender instanceof Player)) { return false; } - Player player = (Player) sender; - - ItemStack itemStack = new ItemStack(Material.WRITTEN_BOOK, 1); - BookMeta bookMeta = (BookMeta) itemStack.getItemMeta(); - bookMeta.setGeneration(BookMeta.Generation.ORIGINAL); - bookMeta.setAuthor("§eSteam§8war"); - bookMeta.setTitle("§7Script Buch"); - bookMeta.setDisplayName("§7Script Buch"); - bookMeta.setPages(PAGES); - itemStack.setItemMeta(bookMeta); - - player.getInventory().setItemInMainHand(itemStack); + ((Player) sender).getInventory().setItemInMainHand(BOOK); return false; } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java b/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java index d259fed..98c0b7f 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/world/ScriptListener.java @@ -22,6 +22,7 @@ package de.steamwar.bausystem.world; import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.commands.CommandFire; import de.steamwar.bausystem.commands.CommandFreeze; +import de.steamwar.bausystem.commands.CommandScript; import de.steamwar.bausystem.commands.CommandTNT; import de.steamwar.bausystem.tracer.recorder.RecordManager; import de.steamwar.core.Core; @@ -34,8 +35,6 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCreativeEvent; -import org.bukkit.event.inventory.InventoryInteractEvent; -import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; @@ -58,7 +57,7 @@ public class ScriptListener implements Listener { if(item == null || isNoBook(item) || item.getItemMeta() == null) return; - if (item.getItemMeta().getDisplayName().equals("§8Script Buch")) { + if (item.getItemMeta().getDisplayName().equals(CommandScript.BOOK.getItemMeta().getDisplayName())) { return; } @@ -76,43 +75,6 @@ public class ScriptListener implements Listener { new ScriptExecutor((BookMeta) item.getItemMeta(), event.getPlayer()); } - @EventHandler(priority = EventPriority.HIGH) - public void onInventoryClick(InventoryClickEvent event) { - if (!(event.isShiftClick() && event.isLeftClick())) { - return; - } - - ItemStack item = event.getCurrentItem(); - if(item == null || isNoBook(item) || item.getItemMeta() == null) - return; - - if (item.getItemMeta().getDisplayName().equals("§8Script Buch")) { - return; - } - - event.setCancelled(true); - new ScriptExecutor((BookMeta) item.getItemMeta(), (Player) event.getWhoClicked()); - } - - @EventHandler(priority = EventPriority.HIGH) - public void onInventoryCreative(InventoryCreativeEvent event) { - System.out.println(event + " " + event.getCursor() + " " + event.getClick() + " " + event.getCurrentItem()); - if (!(event.isShiftClick() && event.isLeftClick())) { - return; - } - - ItemStack item = event.getCurrentItem(); - if(item == null || isNoBook(item) || item.getItemMeta() == null) - return; - - if (item.getItemMeta().getDisplayName().equals("§8Script Buch")) { - return; - } - - event.setCancelled(true); - new ScriptExecutor((BookMeta) item.getItemMeta(), (Player) event.getWhoClicked()); - } - private boolean isNoBook(ItemStack item){ switch(Core.getVersion()){ case 12: