diff --git a/VirtualComputer-Core/src/main/java/sznp/virtualcomputer/Commands.java b/VirtualComputer-Core/src/main/java/sznp/virtualcomputer/Commands.java index ba5ae48..cf76f03 100644 --- a/VirtualComputer-Core/src/main/java/sznp/virtualcomputer/Commands.java +++ b/VirtualComputer-Core/src/main/java/sznp/virtualcomputer/Commands.java @@ -2,12 +2,9 @@ package sznp.virtualcomputer; import com.mojang.brigadier.arguments.IntegerArgumentType; import com.mojang.brigadier.arguments.StringArgumentType; -import com.mojang.brigadier.builder.ArgumentBuilder; -import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.builder.RequiredArgumentBuilder; import com.mojang.brigadier.tree.CommandNode; import lombok.val; -import me.lucko.commodore.Commodore; import me.lucko.commodore.CommodoreProvider; import me.lucko.commodore.file.CommodoreFileFormat; import org.bukkit.Bukkit; @@ -76,7 +73,7 @@ public class Commands implements CommandExecutor, TabCompleter { Boolean seamless; if (args.length < 2) seamless = null; else seamless = args[1].equalsIgnoreCase("true"); - Computer.getInstance().FixScreen(sender, seamless); + Computer.getInstance().FixScreen(sender); break; case "key": case "press": diff --git a/VirtualComputer-Core/src/main/java/sznp/virtualcomputer/Computer.java b/VirtualComputer-Core/src/main/java/sznp/virtualcomputer/Computer.java index c648b2c..598ac18 100644 --- a/VirtualComputer-Core/src/main/java/sznp/virtualcomputer/Computer.java +++ b/VirtualComputer-Core/src/main/java/sznp/virtualcomputer/Computer.java @@ -163,25 +163,20 @@ public final class Computer { } } - public void FixScreen(CommandSender sender, Boolean seamless) { + public void FixScreen(CommandSender sender) { if (checkMachineNotRunning(sender)) return; if (framebuffer == null) { sender.sendMessage("§cFramebuffer is null..."); return; } - val lastUpdated = new Holder(); - var status = session.getConsole().getGuest().getFacilityStatus(AdditionsFacilityType.Seamless, lastUpdated); - sendMessage(sender, "Seamless status: " + status); sendMessage(sender, "§eFixing screen..."); try { synchronized (session) { - if (seamless == null) - session.getConsole().getDisplay().setVideoModeHint(0L, true, false, 0, 0, 640L, 480L, 32L, false); + session.getConsole().getDisplay().setVideoModeHint(0L, true, false, 0, 0, 640L, 480L, 32L, false); } //Last param: notify - send PnP notification - stops updates but not changes for some reason Bukkit.getScheduler().runTaskLaterAsynchronously(PluginMain.Instance, () -> { synchronized (session) { - sendMessage(sender, "Needs host cursor: " + session.getConsole().getMouse().getNeedsHostCursor()); session.getConsole().getMouse().putMouseEventAbsolute(-1, -1, 0, 0, 0); session.getConsole().getMouse().putMouseEvent(0, 0, 0, 0, 0); //Switch to relative mode sendMessage(sender, "§eScreen fixed."); @@ -190,8 +185,6 @@ public final class Computer { } catch (Exception e) { e.printStackTrace(); } - status = session.getConsole().getGuest().getFacilityStatus(AdditionsFacilityType.Seamless, lastUpdated); - sendMessage(sender, "Seamless status: " + status); } public boolean checkMachineNotRunning(@Nullable CommandSender sender) { diff --git a/VirtualComputer-Core/src/main/java/sznp/virtualcomputer/ComputerCommand.java b/VirtualComputer-Core/src/main/java/sznp/virtualcomputer/ComputerCommand.java new file mode 100644 index 0000000..2c8112b --- /dev/null +++ b/VirtualComputer-Core/src/main/java/sznp/virtualcomputer/ComputerCommand.java @@ -0,0 +1,75 @@ +package sznp.virtualcomputer; + +import buttondevteam.lib.chat.Command2; +import buttondevteam.lib.chat.CommandClass; +import buttondevteam.lib.chat.ICommand2MC; +import org.bukkit.command.CommandSender; +import org.virtualbox_6_1.VBoxException; + +@CommandClass +public class ComputerCommand extends ICommand2MC { + @Command2.Subcommand + public void def(CommandSender sender) { + } + + @Command2.Subcommand(aliases = {"poweron", "on"}) + public void start(CommandSender sender, @Command2.OptionalArg int index) { + Computer.getInstance().Start(sender, index); + } + + @Command2.Subcommand + public void list(CommandSender sender) { + Computer.getInstance().List(sender); + } + + @Command2.Subcommand(aliases = {"poweroff", "off", "kill"}) + public void stop(CommandSender sender) { + Computer.getInstance().Stop(sender); + } + + @Command2.Subcommand(aliases = {"powerbtn", "pwrbtn"}) + public void powerbutton(CommandSender sender, @Command2.OptionalArg int index) { + Computer.getInstance().PowerButton(sender, index); + } + + @Command2.Subcommand(aliases = "restart") + public void reset(CommandSender sender) { + Computer.getInstance().Reset(sender); + } + + @Command2.Subcommand(aliases = "savestate") + public void save(CommandSender sender) { + Computer.getInstance().SaveState(sender); + } + + @Command2.Subcommand(aliases = "fixscreen") + public void fix(CommandSender sender) { + Computer.getInstance().FixScreen(sender); + } + + @Command2.Subcommand(aliases = {"press", "presskey", "keypress"}, helpText = { + "Press key", + "Presses the specified key. Valid values for the last param are 'down', 'up' and amount of ticks to hold." + }) + public void key(CommandSender sender, String key, @Command2.OptionalArg String stateorduration) { + if (stateorduration == null) stateorduration = ""; + Computer.getInstance().PressKey(sender, key, stateorduration); + } + + @Command2.Subcommand(helpText = { + "Mouse event", + "Move the mouse by the specified offset or press the given button." + }) + public void mouse(CommandSender sender, String keyOrX, @Command2.OptionalArg int y, @Command2.OptionalArg int z, @Command2.OptionalArg int w) { + try { + if (y != 0 || z != 0 || w != 0) { + int x = Integer.parseInt(keyOrX); + Computer.getInstance().UpdateMouse(sender, x, y, z, w, ""); + } else + Computer.getInstance().UpdateMouse(sender, 0, 0, 0, 0, keyOrX); + } catch (VBoxException e) { + throw e; + } catch (Exception ignored) { + } + } +} diff --git a/VirtualComputer-Core/src/main/java/sznp/virtualcomputer/PluginMain.java b/VirtualComputer-Core/src/main/java/sznp/virtualcomputer/PluginMain.java index 762be30..0f7af8a 100644 --- a/VirtualComputer-Core/src/main/java/sznp/virtualcomputer/PluginMain.java +++ b/VirtualComputer-Core/src/main/java/sznp/virtualcomputer/PluginMain.java @@ -1,10 +1,10 @@ package sznp.virtualcomputer; +import buttondevteam.lib.architecture.ButtonPlugin; import jnr.ffi.LibraryLoader; import lombok.val; import org.bukkit.Bukkit; import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitTask; import org.virtualbox_6_1.IVirtualBox; import org.virtualbox_6_1.VirtualBoxManager; @@ -21,33 +21,27 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.function.Predicate; -public class PluginMain extends JavaPlugin { +public class PluginMain extends ButtonPlugin { private static final int MCX = 5; private static final int MCY = 4; private BukkitTask mousetask; private VBoxEventHandler listener; public static PluginMain Instance; - //public static ByteBuffer allpixels = ByteBuffer.allocate(640 * 480 * 4); // It's set on each change /** * Only used if {@link #direct} is false. */ public static ByteBuffer allpixels; // It's set on each change private static final ArrayList renderers = new ArrayList<>(); - /* - * Only used if {@link #direct} is true. - */ - //public static PXCLib pxc; public static boolean direct; public static boolean sendAll; - // Fired when plugin is first enabled @Override - public void onEnable() { + public void pluginEnable() { Instance = this; try { ConsoleCommandSender ccs = getServer().getConsoleSender(); - this.getCommand("computer").setExecutor(new Commands()); + getCommand2MC().registerCommand(new ComputerCommand()); sendAll = getConfig().getBoolean("sendAll", true); ccs.sendMessage("§bInitializing VirtualBox..."); String osname = System.getProperty("os.name").toLowerCase(); @@ -106,8 +100,9 @@ public class PluginMain extends JavaPlugin { getServer().getPluginManager().registerEvents(mlpl, this); } catch (final Exception e) { - e.printStackTrace(); - error(e.getMessage()); + getLogger().severe("A fatal error occured, disabling plugin!"); + Bukkit.getPluginManager().disablePlugin(this); + throw new RuntimeException(e); } } @@ -117,9 +112,8 @@ public class PluginMain extends JavaPlugin { throw new RuntimeException(message); } - // Fired when plugin is disabled @Override - public void onDisable() { + public void pluginDisable() { ConsoleCommandSender ccs = getServer().getConsoleSender(); if (mousetask != null) mousetask.cancel(); diff --git a/pom.xml b/pom.xml index 8340ba2..baf53f0 100644 --- a/pom.xml +++ b/pom.xml @@ -80,6 +80,11 @@ 1.16.1-R0.1-SNAPSHOT provided --> + + com.github.TBMCPlugins.ChromaCore + Chroma-Core + master-SNAPSHOT +