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))); }