diff --git a/VirtualComputer/pom.xml b/VirtualComputer/pom.xml
index d02a27b..8dd459e 100644
--- a/VirtualComputer/pom.xml
+++ b/VirtualComputer/pom.xml
@@ -90,4 +90,26 @@
3.0.0
+
\ No newline at end of file
diff --git a/VirtualComputer/repo/org/virtualbox/VirtualBox-MSCOM/6.0/VirtualBox-MSCOM-6.0.jar b/VirtualComputer/repo/org/virtualbox/VirtualBox-MSCOM/6.0/VirtualBox-MSCOM-6.0.jar
new file mode 100644
index 0000000..823cabb
Binary files /dev/null and b/VirtualComputer/repo/org/virtualbox/VirtualBox-MSCOM/6.0/VirtualBox-MSCOM-6.0.jar differ
diff --git a/VirtualComputer/repo/org/virtualbox/VirtualBox-MSCOM/6.0/VirtualBox-MSCOM-6.0.pom b/VirtualComputer/repo/org/virtualbox/VirtualBox-MSCOM/6.0/VirtualBox-MSCOM-6.0.pom
new file mode 100644
index 0000000..1c7235a
--- /dev/null
+++ b/VirtualComputer/repo/org/virtualbox/VirtualBox-MSCOM/6.0/VirtualBox-MSCOM-6.0.pom
@@ -0,0 +1,10 @@
+
+
+ 4.0.0
+ org.virtualbox
+ VirtualBox-MSCOM
+ 6.0
+ POM was created from install:install-file
+
diff --git a/VirtualComputer/repo/org/virtualbox/VirtualBox-MSCOM/maven-metadata-local.xml b/VirtualComputer/repo/org/virtualbox/VirtualBox-MSCOM/maven-metadata-local.xml
new file mode 100644
index 0000000..10d70c9
--- /dev/null
+++ b/VirtualComputer/repo/org/virtualbox/VirtualBox-MSCOM/maven-metadata-local.xml
@@ -0,0 +1,12 @@
+
+
+ org.virtualbox
+ VirtualBox-MSCOM
+
+ 6.0
+
+ 6.0
+
+ 20190405225845
+
+
diff --git a/VirtualComputer/src/main/java/sznp/virtualcomputer/Computer.java b/VirtualComputer/src/main/java/sznp/virtualcomputer/Computer.java
index f52f8df..40cc76e 100644
--- a/VirtualComputer/src/main/java/sznp/virtualcomputer/Computer.java
+++ b/VirtualComputer/src/main/java/sznp/virtualcomputer/Computer.java
@@ -25,11 +25,13 @@ public final class Computer {
private IMachine machine;
private MachineEventHandler handler;
private IEventListener listener;
+ private VirtualBoxManager manager;
@java.beans.ConstructorProperties({"plugin"})
- public Computer(PluginMain plugin, ISession session, IVirtualBox vbox) {
+ public Computer(PluginMain plugin, VirtualBoxManager manager, IVirtualBox vbox) {
this.plugin = plugin;
- this.session = session;
+ this.manager = manager;
+ session = manager.getSessionObject();
this.vbox = vbox;
if (instance != null) throw new IllegalStateException("A computer already exists!");
instance = this;
@@ -94,14 +96,13 @@ public final class Computer {
public void Stop(CommandSender sender) {
if (checkMachineNotRunning(sender)) {
if (session.getState().equals(SessionState.Locked)) {
- session.unlockMachine();
- sendMessage(sender, "§eComputer powered off, released it.");
+ onMachineStop(sender); //Needed for session reset
+ sendMessage(sender, "§eComputer was already off, released it.");
}
return;
}
sendMessage(sender, "§eStopping computer...");
- session.getConsole().powerDown().waitForCompletion(2000);
- sendMessage(sender, "§eComputer stopped.");
+ session.getConsole().powerDown();
}
public void PowerButton(CommandSender sender, int index) {
@@ -202,12 +203,13 @@ public final class Computer {
session.unlockMachine(); //Needs to be outside of the event handler
handler = null;
machine = null;
+ session = manager.getSessionObject();
+ sendMessage(sender, "§eComputer powered off."); //This block runs later
}
});
GPURendererInternal.setPixels(new byte[1], 0, 0); //Black screen
stopEvents();
MouseLockerPlayerListener.computerStop();
- sendMessage(sender, "§eComputer powered off.");
}
public void stopEvents() {
@@ -217,4 +219,14 @@ public final class Computer {
handler.disable();
listener = null;
}
+
+ public void pluginDisable(CommandSender ccs) {
+ if (session.getState() == SessionState.Locked) {
+ if (session.getMachine().getState().equals(MachineState.Running)) {
+ ccs.sendMessage("§aSaving machine state...");
+ session.getMachine().saveState().waitForCompletion(10000);
+ }
+ session.unlockMachine();
+ }
+ }
}
diff --git a/VirtualComputer/src/main/java/sznp/virtualcomputer/PluginMain.java b/VirtualComputer/src/main/java/sznp/virtualcomputer/PluginMain.java
index 0e5538f..c9898f2 100644
--- a/VirtualComputer/src/main/java/sznp/virtualcomputer/PluginMain.java
+++ b/VirtualComputer/src/main/java/sznp/virtualcomputer/PluginMain.java
@@ -6,7 +6,9 @@ import org.bukkit.Bukkit;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitTask;
-import org.virtualbox_6_0.*;
+import org.virtualbox_6_0.IEventListener;
+import org.virtualbox_6_0.IVirtualBox;
+import org.virtualbox_6_0.VirtualBoxManager;
import sznp.virtualcomputer.events.VBoxEventHandler;
import sznp.virtualcomputer.renderer.BukkitRenderer;
import sznp.virtualcomputer.renderer.GPURenderer;
@@ -21,15 +23,10 @@ import java.util.Arrays;
import java.util.function.Predicate;
public class PluginMain extends JavaPlugin {
- public static final int MCX = 5;
- public static final int MCY = 4;
- private IVirtualBox vbox;
- private ISession session;
- private IMachine machine;
- private BukkitTask screenupdatetask;
+ private static final int MCX = 5;
+ private static final int MCY = 4;
private BukkitTask mousetask;
private IEventListener listener;
- private IEventSource source;
public static PluginMain Instance;
//public static ByteBuffer allpixels = ByteBuffer.allocate(640 * 480 * 4); // It's set on each change
@@ -37,7 +34,7 @@ public class PluginMain extends JavaPlugin {
* Only used if {@link #direct} is false.
*/
public static ByteBuffer allpixels; // It's set on each change
- public static ArrayList renderers = new ArrayList<>();
+ private static ArrayList renderers = new ArrayList<>();
/*
* Only used if {@link #direct} is true.
*/
@@ -72,10 +69,9 @@ public class PluginMain extends JavaPlugin {
final VirtualBoxManager manager = VirtualBoxManager.createInstance(getDataFolder().getAbsolutePath());
VBoxLib vbl = LibraryLoader.create(VBoxLib.class).load("vboxjxpcom");
vbl.RTR3InitExe(0, "", 0);
- vbox = manager.getVBox();
- listener = new VBoxEventHandler().registerTo(source = vbox.getEventSource());
- session = manager.getSessionObject();
- new Computer(this, session, vbox); //Saves itself
+ IVirtualBox vbox = manager.getVBox();
+ listener = new VBoxEventHandler().registerTo(vbox.getEventSource());
+ new Computer(this, manager, vbox); //Saves itself
ccs.sendMessage("§bLoading Screen...");
try {
//throw new NoClassDefFoundError("Test error pls ignore");
@@ -121,14 +117,7 @@ public class PluginMain extends JavaPlugin {
}*/
((VBoxEventHandler) listener.getTypedWrapped()).disable(); //The save progress wait locks with the event
if (Computer.getInstance() != null)
- Computer.getInstance().stopEvents();
- if (session.getState() == SessionState.Locked) {
- if (session.getMachine().getState().equals(MachineState.Running)) {
- ccs.sendMessage("§aSaving machine state...");
- session.getMachine().saveState().waitForCompletion(10000);
- }
- session.unlockMachine();
- }
+ Computer.getInstance().pluginDisable(ccs);
ccs.sendMessage("§aHuh.");
saveConfig();
}