From a1fbca11f0fed61b1be9c0bab096ce86fc673ccd Mon Sep 17 00:00:00 2001 From: Myles Date: Sun, 25 Sep 2016 21:02:12 +0100 Subject: [PATCH] Queue tasks & Fix PPS --- .../us/myles/ViaVersion/ViaVersionPlugin.java | 50 ++++++++++--------- .../ViaVersion/handlers/ViaDecodeHandler.java | 3 +- .../ViaVersion/handlers/ViaEncodeHandler.java | 4 +- 3 files changed, 31 insertions(+), 26 deletions(-) diff --git a/bukkit/src/main/java/us/myles/ViaVersion/ViaVersionPlugin.java b/bukkit/src/main/java/us/myles/ViaVersion/ViaVersionPlugin.java index 2b0b7c2ea..418fd6494 100644 --- a/bukkit/src/main/java/us/myles/ViaVersion/ViaVersionPlugin.java +++ b/bukkit/src/main/java/us/myles/ViaVersion/ViaVersionPlugin.java @@ -23,9 +23,6 @@ import us.myles.ViaVersion.util.ReflectionUtil; import java.util.ArrayList; import java.util.List; import java.util.UUID; -import java.util.concurrent.Callable; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform { @@ -38,6 +35,8 @@ public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform { private ViaConfig conf; @Getter private ViaAPI api = new BukkitViaAPI(this); + private List queuedTasks = new ArrayList<>(); + private List asyncQueuedTasks = new ArrayList<>(); public ViaVersionPlugin() { // Config magic @@ -106,6 +105,18 @@ public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform { if (conf.isAntiXRay() && !spigot) { getLogger().info("You have anti-xray on in your config, since you're not using spigot it won't fix xray!"); } + + // Run queued tasks + for (Runnable r : queuedTasks) { + Bukkit.getScheduler().runTask(this, r); + } + queuedTasks.clear(); + + // Run async queued tasks + for (Runnable r : asyncQueuedTasks) { + Bukkit.getScheduler().runTaskAsynchronously(this, r); + } + asyncQueuedTasks.clear(); } @Override @@ -122,25 +133,6 @@ public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform { return this.spigot; } - public void run(final Runnable runnable, boolean wait) { - try { - Future f = Bukkit.getScheduler().callSyncMethod(Bukkit.getPluginManager().getPlugin("ViaVersion"), new Callable() { - @Override - public Boolean call() throws Exception { - runnable.run(); - return true; - } - }); - if (wait) { - f.get(10, TimeUnit.SECONDS); - } - } catch (Exception e) { - System.out.println("Failed to run task: " + e.getClass().getName()); - if (ViaVersion.getInstance().isDebug()) - e.printStackTrace(); - } - } - public boolean isProtocolSupport() { return protocolSupport; } @@ -187,12 +179,22 @@ public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform { @Override public int runAsync(Runnable runnable) { - return getServer().getScheduler().runTaskAsynchronously(this, runnable).getTaskId(); + if (isPluginEnabled()) { + return getServer().getScheduler().runTaskAsynchronously(this, runnable).getTaskId(); + } else { + asyncQueuedTasks.add(runnable); + return -1; + } } @Override public int runSync(Runnable runnable) { - return getServer().getScheduler().runTask(this, runnable).getTaskId(); + if (isPluginEnabled()) { + return getServer().getScheduler().runTask(this, runnable).getTaskId(); + } else { + queuedTasks.add(runnable); + return -1; + } } @Override diff --git a/bukkit/src/main/java/us/myles/ViaVersion/handlers/ViaDecodeHandler.java b/bukkit/src/main/java/us/myles/ViaVersion/handlers/ViaDecodeHandler.java index 228388a24..13216ab98 100644 --- a/bukkit/src/main/java/us/myles/ViaVersion/handlers/ViaDecodeHandler.java +++ b/bukkit/src/main/java/us/myles/ViaVersion/handlers/ViaDecodeHandler.java @@ -5,6 +5,7 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; import us.myles.ViaVersion.ViaVersionPlugin; import us.myles.ViaVersion.api.PacketWrapper; +import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.ViaVersion; import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.api.type.Type; @@ -38,7 +39,7 @@ public class ViaDecodeHandler extends ByteToMessageDecoder { boolean second = info.incrementReceived(); // Check PPS if (second) { - if (((ViaVersionPlugin) ViaVersion.getInstance()).handlePPS(info)) + if (((ViaVersionPlugin) Via.getPlatform()).handlePPS(info)) return; } diff --git a/bukkit/src/main/java/us/myles/ViaVersion/handlers/ViaEncodeHandler.java b/bukkit/src/main/java/us/myles/ViaVersion/handlers/ViaEncodeHandler.java index fd0f5d2e2..9ef555c9e 100644 --- a/bukkit/src/main/java/us/myles/ViaVersion/handlers/ViaEncodeHandler.java +++ b/bukkit/src/main/java/us/myles/ViaVersion/handlers/ViaEncodeHandler.java @@ -3,7 +3,9 @@ package us.myles.ViaVersion.handlers; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToByteEncoder; +import us.myles.ViaVersion.ViaVersionPlugin; import us.myles.ViaVersion.api.PacketWrapper; +import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.ViaVersion; import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.api.type.Type; @@ -27,7 +29,7 @@ public class ViaEncodeHandler extends MessageToByteEncoder { @Override protected void encode(final ChannelHandlerContext ctx, Object o, final ByteBuf bytebuf) throws Exception { - if (ViaVersion.getInstance().isCompatSpigotBuild()) { + if (((ViaVersionPlugin) Via.getPlatform()).isCompatSpigotBuild()) { Field ver = minecraftEncoder.getClass().getDeclaredField("version"); ver.setAccessible(true); ver.set(minecraftEncoder, ver.get(this));