From 4aee45327407aa606ad2e70bcf0c3f5d70e037f4 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Mon, 18 Mar 2019 12:39:02 +0100 Subject: [PATCH] Added support for selecting machine on start And also checking if there's already a running machine And if the given machine is not found Removed screen updating every 5 seconds, now it only checks if the machine is turned off Always reassigning the machine --- VirtualComputer/pom.xml | 19 ++-- .../src/sznp/virtualcomputer/Commands.java | 104 ++++++++++-------- .../src/sznp/virtualcomputer/GPURenderer.java | 2 +- .../src/sznp/virtualcomputer/PluginMain.java | 26 +++-- 4 files changed, 92 insertions(+), 59 deletions(-) diff --git a/VirtualComputer/pom.xml b/VirtualComputer/pom.xml index 08dd9fa..4d44335 100644 --- a/VirtualComputer/pom.xml +++ b/VirtualComputer/pom.xml @@ -1,5 +1,5 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 io.github.NorbiPeti VirtualComputer @@ -29,7 +29,7 @@ 1.8 1.8 - -g + -g @@ -70,7 +70,7 @@ org.virtualbox VirtualBox - 6.0 + 6.0 org.bukkit @@ -91,14 +91,19 @@ 2.1.7 - com.aparapi - aparapi - 1.10.0 - + com.aparapi + aparapi + 1.10.0 + org.projectlombok lombok 1.16.16 + + com.google.code.findbugs + jsr305 + 3.0.0 + \ No newline at end of file diff --git a/VirtualComputer/src/sznp/virtualcomputer/Commands.java b/VirtualComputer/src/sznp/virtualcomputer/Commands.java index bf7b042..d625162 100644 --- a/VirtualComputer/src/sznp/virtualcomputer/Commands.java +++ b/VirtualComputer/src/sznp/virtualcomputer/Commands.java @@ -10,16 +10,19 @@ public class Commands implements CommandExecutor { @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - switch (cmd.getName().toLowerCase()) { - case "computer": { - if (args.length == 0) - return false; - switch (args[0].toLowerCase()) { + if (args.length == 0) + return false; + switch (args[0].toLowerCase()) { case "start": case "poweron": case "on": case "startup": - PluginMain.Instance.Start(sender); + int c = getMachineIndex(args); + if (c == -1) { + sender.sendMessage("§cUsage: /" + label + " start [index]"); + return true; + } + PluginMain.Instance.Start(sender, c); break; case "stop": case "poweroff": @@ -31,7 +34,12 @@ public class Commands implements CommandExecutor { case "powerbutton": case "pwrbtn": case "powerbtn": - PluginMain.Instance.PowerButton(sender); + c = getMachineIndex(args); + if (c == -1) { + sender.sendMessage("§cUsage: /" + label + " powerbutton [index]"); + return true; + } + PluginMain.Instance.PowerButton(sender, c); break; case "reset": case "restart": @@ -91,46 +99,56 @@ public class Commands implements CommandExecutor { return true; } switch (args[1].toLowerCase()) { - case "key": - case "keyboard": - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() - + " [\"\",{\"text\":\" [0]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key D0\"}},{\"text\":\" [1]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key D1\"}},{\"text\":\" [2]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key D2\"}},{\"text\":\" [3]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key D3\"}},{\"text\":\" [4]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key D4\"}},{\"text\":\" [5]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key D5\"}},{\"text\":\" [6]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key D6\"}},{\"text\":\" [7]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key D7\"}},{\"text\":\" [8]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key D8\"}},{\"text\":\" [9]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key D9\"}}]"); - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() - + " [\"\",{\"text\":\" [Tab]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key Tab\"}},{\"text\":\" [Q]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key Q\"}},{\"text\":\" [W]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key W\"}},{\"text\":\" [E]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key E\"}},{\"text\":\" [R]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key R\"}},{\"text\":\" [T]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key T\"}},{\"text\":\" [Y]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key Y\"}},{\"text\":\" [U]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key U\"}},{\"text\":\" [I]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key I\"}},{\"text\":\" [O]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key O\"}},{\"text\":\" [P]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key P\"}}]"); - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() - + " [\"\",{\"text\":\" [CapsLock]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key CapsLock\"}},{\"text\":\" [A]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key A\"}},{\"text\":\" [S]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key S\"}},{\"text\":\" [D]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key D\"}},{\"text\":\" [F]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key F\"}},{\"text\":\" [G]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key G\"}},{\"text\":\" [H]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key H\"}},{\"text\":\" [J]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key J\"}},{\"text\":\" [K]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key K\"}},{\"text\":\" [L]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key L\"}},{\"text\":\" [Return]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key Return\"}}]"); - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() - + " [\"\",{\"text\":\" [Z]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key Z\"}},{\"text\":\" [X]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key X\"}},{\"text\":\" [C]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key C\"}},{\"text\":\" [V]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key V\"}},{\"text\":\" [B]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key B\"}},{\"text\":\" [N]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key N\"}},{\"text\":\" [M]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key M\"}}]"); - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() - + " [\"\",{\"text\":\" [Ctrl]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key ControlLeft\"}},{\"text\":\" [Alt]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key AltLeft\"}},{\"text\":\" [Space]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key Space\"}},{\"text\":\" [AltGr]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key AltRight\"}},{\"text\":\" [Ctrl]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key ControlRight\"}}]"); - case "mouse": - if (!(sender instanceof Player)) { - sender.sendMessage("§cOnly ingame players can use this command."); - return true; - } - if (!MouseLockerPlayerListener.LockedPlayers.containsKey(sender)) { - MouseLockerPlayerListener.LockedPlayers.put((Player) sender, ((Player) sender).getLocation()); - sender.sendMessage("§aMouse locked."); - } else { - MouseLockerPlayerListener.LockedPlayers.remove(sender); - sender.sendMessage("§bMouse unlocked."); - } - break; - case "mspeed": - case "mousespeed": - if (args.length < 3) { - sender.sendMessage("§cUsage: /computer input mspeed "); - return true; - } - MouseLockerPlayerListener.LockedSpeed = Float.parseFloat(args[2]); - sender.sendMessage("§aMouse speed set to " + MouseLockerPlayerListener.LockedSpeed); + case "key": + case "keyboard": + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + + " [\"\",{\"text\":\" [0]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key D0\"}},{\"text\":\" [1]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key D1\"}},{\"text\":\" [2]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key D2\"}},{\"text\":\" [3]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key D3\"}},{\"text\":\" [4]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key D4\"}},{\"text\":\" [5]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key D5\"}},{\"text\":\" [6]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key D6\"}},{\"text\":\" [7]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key D7\"}},{\"text\":\" [8]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key D8\"}},{\"text\":\" [9]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key D9\"}}]"); + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + + " [\"\",{\"text\":\" [Tab]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key Tab\"}},{\"text\":\" [Q]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key Q\"}},{\"text\":\" [W]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key W\"}},{\"text\":\" [E]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key E\"}},{\"text\":\" [R]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key R\"}},{\"text\":\" [T]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key T\"}},{\"text\":\" [Y]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key Y\"}},{\"text\":\" [U]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key U\"}},{\"text\":\" [I]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key I\"}},{\"text\":\" [O]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key O\"}},{\"text\":\" [P]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key P\"}}]"); + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + + " [\"\",{\"text\":\" [CapsLock]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key CapsLock\"}},{\"text\":\" [A]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key A\"}},{\"text\":\" [S]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key S\"}},{\"text\":\" [D]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key D\"}},{\"text\":\" [F]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key F\"}},{\"text\":\" [G]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key G\"}},{\"text\":\" [H]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key H\"}},{\"text\":\" [J]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key J\"}},{\"text\":\" [K]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key K\"}},{\"text\":\" [L]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key L\"}},{\"text\":\" [Enter]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key Enter\"}}]"); + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + + " [\"\",{\"text\":\" [Z]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key Z\"}},{\"text\":\" [X]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key X\"}},{\"text\":\" [C]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key C\"}},{\"text\":\" [V]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key V\"}},{\"text\":\" [B]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key B\"}},{\"text\":\" [N]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key N\"}},{\"text\":\" [M]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key M\"}}]"); + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + + " [\"\",{\"text\":\" [Ctrl]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key ControlLeft\"}},{\"text\":\" [Alt]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key AltLeft\"}},{\"text\":\" [Space]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key Space\"}},{\"text\":\" [AltGr]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key AltRight\"}},{\"text\":\" [Ctrl]\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/computer key ControlRight\"}}]"); + case "mouse": + if (!MouseLockerPlayerListener.LockedPlayers.containsKey(sender)) { + MouseLockerPlayerListener.LockedPlayers.put((Player) sender, ((Player) sender).getLocation()); + sender.sendMessage("§aMouse locked."); + } else { + MouseLockerPlayerListener.LockedPlayers.remove(sender); + sender.sendMessage("§bMouse unlocked."); + } + break; + case "mspeed": + case "mousespeed": + if (args.length < 3) { + sender.sendMessage("§cUsage: /computer input mspeed "); + return true; + } + MouseLockerPlayerListener.LockedSpeed = Float.parseFloat(args[2]); + sender.sendMessage("§aMouse speed set to " + MouseLockerPlayerListener.LockedSpeed); } break; } + } + return true; + } + + /** + * Checks the 2nd parameter + * + * @return The index of the machine or -1 on usage error + */ + private int getMachineIndex(String[] args) { + int c = 0; + if (args.length >= 2) { + try { + c = Integer.parseInt(args[1]); + } catch (Exception ignored) { + return -1; } - return true; } - } - return false; + return c; } } diff --git a/VirtualComputer/src/sznp/virtualcomputer/GPURenderer.java b/VirtualComputer/src/sznp/virtualcomputer/GPURenderer.java index 7c65f11..df55e7f 100644 --- a/VirtualComputer/src/sznp/virtualcomputer/GPURenderer.java +++ b/VirtualComputer/src/sznp/virtualcomputer/GPURenderer.java @@ -34,7 +34,7 @@ public class GPURenderer extends MapRenderer implements IRenderer { Color[] cs = (Color[]) field.get(null); colors_ = new int[cs.length]; for (int i = 0; i < colors_.length; i++) { - colors_[i] = cs[i].getRGB(); //TODO: BGR or RGB? + colors_[i] = cs[i].getRGB(); } } kernel = new GPURendererInternal(mapx, mapy, colors_); diff --git a/VirtualComputer/src/sznp/virtualcomputer/PluginMain.java b/VirtualComputer/src/sznp/virtualcomputer/PluginMain.java index 6261e44..1f9f560 100644 --- a/VirtualComputer/src/sznp/virtualcomputer/PluginMain.java +++ b/VirtualComputer/src/sznp/virtualcomputer/PluginMain.java @@ -34,7 +34,7 @@ public class PluginMain extends JavaPlugin { */ public static ByteBuffer allpixels; // It's set on each change public static ArrayList renderers = new ArrayList<>(); - /** + /* * Only used if {@link #direct} is true. */ //public static PXCLib pxc; @@ -117,12 +117,19 @@ public class PluginMain extends JavaPlugin { saveConfig(); } - public void Start(CommandSender sender) {// TODO: Add touchscreen support (#2) + public void Start(CommandSender sender, int index) {// TODO: Add touchscreen support (#2) + if (session.getState() == SessionState.Locked) { + sender.sendMessage("§cThe machine is already running!"); + return; + } Bukkit.getScheduler().runTaskAsynchronously(this, () -> { + if (vbox.getMachines().size() <= index) { + sendMessage(sender, "§cMachine not found!"); + return; + } try { sendMessage(sender, "§eStarting computer..."); - if (machine == null) - machine = vbox.getMachines().get(0); + machine = vbox.getMachines().get(index); session.setName("minecraft"); // machine.launchVMProcess(session, "headless", "").waitForCompletion(10000); - This creates a *process*, we don't want that anymore machine.lockMachine(session, LockType.VM); // We want the machine inside *our* process <-- Need the VM type to have console access @@ -159,12 +166,15 @@ public class PluginMain extends JavaPlugin { }); } + /** + * Right now only checks if the computer has turned off. + */ private void startScreenTask(IConsole console, CommandSender sender) { if (screenupdatetask == null) screenupdatetask = Bukkit.getScheduler().runTaskTimerAsynchronously(PluginMain.this, () -> { - if (session.getState().equals(SessionState.Locked) // Don't run until the machine is running + /*if (session.getState().equals(SessionState.Locked) // Don't run until the machine is running && console.getState().equals(MachineState.Running)) - console.getDisplay().invalidateAndUpdateScreen(0L); + console.getDisplay().invalidateAndUpdateScreen(0L);*/ if (session.getState().equals(SessionState.Unlocked) // Stop if the machine stopped fully || console.getState().equals(MachineState.PoweredOff) || console.getState().equals(MachineState.Saved)) { @@ -197,13 +207,13 @@ public class PluginMain extends JavaPlugin { sendMessage(sender, "§eComputer stopped."); } - public void PowerButton(CommandSender sender) { + public void PowerButton(CommandSender sender, int index) { sendMessage(sender, "§ePressing powerbutton..."); getServer().getScheduler().runTaskAsynchronously(this, new Runnable() { @Override public void run() { if (session.getState() != SessionState.Locked || session.getMachine() == null) { - Start(sender); + Start(sender, index); } else { session.getConsole().powerButton(); sendMessage(sender, "§ePowerbutton pressed.");