diff --git a/gateway/EaglercraftXBungee/EaglerXBungee-Latest.jar b/gateway/EaglercraftXBungee/EaglerXBungee-Latest.jar index ce1218f..a510965 100644 Binary files a/gateway/EaglercraftXBungee/EaglerXBungee-Latest.jar and b/gateway/EaglercraftXBungee/EaglerXBungee-Latest.jar differ diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/EaglerXBungee.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/EaglerXBungee.java index a286ca1..e1d3021 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/EaglerXBungee.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/EaglerXBungee.java @@ -57,8 +57,8 @@ import net.md_5.bungee.BungeeCord; */ public class EaglerXBungee extends Plugin { - public static final String NATIVE_BUNGEECORD_BUILD = "1.20-R0.3-SNAPSHOT:67c65e0:1828"; - public static final String NATIVE_WATERFALL_BUILD = "1.20-R0.3-SNAPSHOT:da6aaf6:572"; + public static final String NATIVE_BUNGEECORD_BUILD = "1.20-R0.3-SNAPSHOT:18eae8a:1842"; + public static final String NATIVE_WATERFALL_BUILD = "1.20-R0.3-SNAPSHOT:37a9ace:577"; static { CompatWarning.displayCompatWarning(); @@ -68,7 +68,7 @@ public class EaglerXBungee extends Plugin { private EaglerBungeeConfig conf = null; private EventLoopGroup eventLoopGroup; private Collection openChannels; - private final Timer closeInactiveConnections; + private Timer closeInactiveConnections = null; private Timer skinServiceTasks = null; private Timer authServiceTasks = null; private final ChannelFutureListener newChannelListener; @@ -80,7 +80,6 @@ public class EaglerXBungee extends Plugin { public EaglerXBungee() { instance = this; openChannels = new LinkedList(); - closeInactiveConnections = new Timer("EaglerXBungee: Network Tick Tasks"); newChannelListener = new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture ch) throws Exception { @@ -109,7 +108,6 @@ public class EaglerXBungee extends Plugin { } } reloadConfig(); - closeInactiveConnections.scheduleAtFixedRate(EaglerPipeline.closeInactive, 0l, 250l); } @Override @@ -135,11 +133,18 @@ public class EaglerXBungee extends Plugin { getProxy().registerChannel(EaglerPipeline.UPDATE_CERT_CHANNEL); getProxy().registerChannel(VoiceService.CHANNEL); getProxy().registerChannel(EaglerPacketEventListener.FNAW_SKIN_ENABLE_CHANNEL); + getProxy().registerChannel(EaglerPacketEventListener.GET_DOMAIN_CHANNEL); startListeners(); + if(closeInactiveConnections != null) { + closeInactiveConnections.cancel(); + closeInactiveConnections = null; + } if(skinServiceTasks != null) { skinServiceTasks.cancel(); skinServiceTasks = null; } + closeInactiveConnections = new Timer("EaglerXBungee: Network Tick Tasks"); + closeInactiveConnections.scheduleAtFixedRate(EaglerPipeline.closeInactive, 0l, 250l); boolean downloadSkins = conf.getDownloadVanillaSkins(); if(downloadSkins) { if(skinService == null) { @@ -211,6 +216,10 @@ public class EaglerXBungee extends Plugin { getProxy().unregisterChannel(VoiceService.CHANNEL); getProxy().unregisterChannel(EaglerPacketEventListener.FNAW_SKIN_ENABLE_CHANNEL); stopListeners(); + if(closeInactiveConnections != null) { + closeInactiveConnections.cancel(); + closeInactiveConnections = null; + } if(skinServiceTasks != null) { skinServiceTasks.cancel(); skinServiceTasks = null; diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/auth/DefaultAuthSystem.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/auth/DefaultAuthSystem.java index 80920e5..0dda729 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/auth/DefaultAuthSystem.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/auth/DefaultAuthSystem.java @@ -539,7 +539,7 @@ public class DefaultAuthSystem { String playerName = player.getName(); if(!playerName.equals(username)) { EaglerXBungee.logger().info("Player \"" + uuid.toString() + "\" changed their username from \"" + username - + " to \"" + playerName + "\", updating authentication database..."); + + "\" to \"" + playerName + "\", updating authentication database..."); synchronized(updateMojangUsername) { updateMojangUsername.setString(1, playerName); updateMojangUsername.setString(2, uuidString); diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/config/EaglerBungeeConfig.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/config/EaglerBungeeConfig.java index b4cf887..252bdd3 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/config/EaglerBungeeConfig.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/config/EaglerBungeeConfig.java @@ -227,18 +227,9 @@ public class EaglerBungeeConfig { return ret; } - @SuppressWarnings("deprecation") private static JsonObject parseJsonObject(InputStream file) throws IOException { - StringBuilder str = new StringBuilder(); - byte[] buffer = new byte[8192]; - - int i; - while((i = file.read(buffer)) > 0) { - str.append(new String(buffer, 0, i, "UTF-8")); - } - try { - return (new JsonParser()).parse(str.toString()).getAsJsonObject(); + return JsonParser.parseReader(new InputStreamReader(file, StandardCharsets.UTF_8)).getAsJsonObject(); }catch(JsonSyntaxException ex) { throw new IOException("Invalid JSONObject", ex); } diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/config/VanillaDefaultSkinProfileLoader.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/config/VanillaDefaultSkinProfileLoader.java index f247ada..a425745 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/config/VanillaDefaultSkinProfileLoader.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/config/VanillaDefaultSkinProfileLoader.java @@ -56,7 +56,7 @@ class VanillaDefaultSkinProfileLoader implements Consumer { doNotify(); }else { try { - JsonObject json = (new JsonParser()).parse(new String(response.data, StandardCharsets.UTF_8)).getAsJsonObject(); + JsonObject json = JsonParser.parseString(new String(response.data, StandardCharsets.UTF_8)).getAsJsonObject(); JsonElement propsElement = json.get("properties"); if(propsElement != null) { JsonArray properties = propsElement.getAsJsonArray(); @@ -115,7 +115,7 @@ class VanillaDefaultSkinProfileLoader implements Consumer { doNotify(); }else { try { - JsonObject json = (new JsonParser()).parse(new String(response.data, StandardCharsets.UTF_8)).getAsJsonObject(); + JsonObject json = JsonParser.parseString(new String(response.data, StandardCharsets.UTF_8)).getAsJsonObject(); String uuid = json.get("id").getAsString(); URI requestURI = URI.create("https://sessionserver.mojang.com/session/minecraft/profile/" + uuid + "?unsigned=false"); BinaryHttpClient.asyncRequest("GET", requestURI, new ProfileSkinConsumerImpl(uuid)); diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/handlers/EaglerPacketEventListener.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/handlers/EaglerPacketEventListener.java index fcd2740..be6e6f1 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/handlers/EaglerPacketEventListener.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/handlers/EaglerPacketEventListener.java @@ -54,8 +54,9 @@ import net.md_5.bungee.protocol.Property; * */ public class EaglerPacketEventListener implements Listener { - + public static final String FNAW_SKIN_ENABLE_CHANNEL = "EAG|FNAWSEn-1.8"; + public static final String GET_DOMAIN_CHANNEL = "EAG|GetDomain"; public final EaglerXBungee plugin; @@ -104,7 +105,7 @@ public class EaglerPacketEventListener implements Listener { } }else if(event.getSender() instanceof Server && event.getReceiver() instanceof UserConnection) { UserConnection player = (UserConnection)event.getReceiver(); - if("EAG|GetDomain".equals(event.getTag()) && player.getPendingConnection() instanceof EaglerInitialHandler) { + if(GET_DOMAIN_CHANNEL.equals(event.getTag()) && player.getPendingConnection() instanceof EaglerInitialHandler) { event.setCancelled(true); String domain = ((EaglerInitialHandler)player.getPendingConnection()).getOrigin(); if(domain == null) { @@ -117,7 +118,6 @@ public class EaglerPacketEventListener implements Listener { } @EventHandler - @SuppressWarnings("deprecation") public void onPostLogin(PostLoginEvent event) { ProxiedPlayer p = event.getPlayer(); if(p instanceof UserConnection) { @@ -132,7 +132,7 @@ public class EaglerPacketEventListener implements Listener { if(pp.getName().equals("textures")) { try { String jsonStr = SkinPackets.bytesToAscii(Base64.decodeBase64(pp.getValue())); - JsonObject json = (new JsonParser()).parse(jsonStr).getAsJsonObject(); + JsonObject json = JsonParser.parseString(jsonStr).getAsJsonObject(); JsonObject skinObj = json.getAsJsonObject("SKIN"); if(skinObj != null) { JsonElement url = json.get("url"); diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/EaglerInitialHandler.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/EaglerInitialHandler.java index c7377d0..bbb6e3b 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/EaglerInitialHandler.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/EaglerInitialHandler.java @@ -233,7 +233,22 @@ public class EaglerInitialHandler extends InitialHandler { public UUID getOfflineId() { return playerUUID; } - + + @Override + public UUID getRewriteId() { + return playerUUID; + } + + @Override + public void setUniqueId(UUID uuid) { + throw new UnsupportedOperationException("EaglercraftXBungee does not support changing player UUIDs at login! (yet)"); + } + + @Override + public void setOnlineMode(boolean onlineMode) { + throw new UnsupportedOperationException("EaglercraftXBungee does not support changing player online mode status at login! (yet)"); + } + @Override public String getUUID() { return playerUUID.toString().replace("-", ""); diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/EaglerPipeline.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/EaglerPipeline.java index f4843b9..cd675c1 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/EaglerPipeline.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/EaglerPipeline.java @@ -10,9 +10,13 @@ import java.util.List; import java.util.TimerTask; import java.util.logging.Logger; +import io.netty.buffer.PooledByteBufAllocator; import io.netty.channel.Channel; +import io.netty.channel.ChannelException; import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOption; import io.netty.channel.ChannelPipeline; +import io.netty.channel.WriteBufferWaterMark; import io.netty.handler.codec.compression.ZlibCodecFactory; import io.netty.handler.codec.http.HttpObjectAggregator; import io.netty.handler.codec.http.HttpServerCodec; @@ -50,6 +54,9 @@ public class EaglerPipeline { public static final AttributeKey REAL_ADDRESS = AttributeKey.valueOf("RealAddress"); public static final AttributeKey HOST = AttributeKey.valueOf("Host"); public static final AttributeKey ORIGIN = AttributeKey.valueOf("Origin"); + public static final int LOW_MARK = Integer.getInteger("net.md_5.bungee.low_mark", 524288); + public static final int HIGH_MARK = Integer.getInteger("net.md_5.bungee.high_mark", 2097152); + public static final WriteBufferWaterMark MARK = new WriteBufferWaterMark(LOW_MARK, HIGH_MARK); public static final Collection openChannels = new LinkedList(); @@ -151,6 +158,11 @@ public class EaglerPipeline { @Override protected void initChannel(Channel channel) throws Exception { + channel.config().setAllocator(PooledByteBufAllocator.DEFAULT).setWriteBufferWaterMark(MARK); + try { + channel.config().setOption(ChannelOption.IP_TOS, 24); + } catch (ChannelException var3) { + } ChannelPipeline pipeline = channel.pipeline(); pipeline.addLast("HttpServerCodec", new HttpServerCodec()); pipeline.addLast("HttpObjectAggregator", new HttpObjectAggregator(65535)); diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/HttpServerQueryHandler.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/HttpServerQueryHandler.java index 69fb3b8..ea8b1e8 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/HttpServerQueryHandler.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/HttpServerQueryHandler.java @@ -162,7 +162,7 @@ public abstract class HttpServerQueryHandler extends ChannelInboundHandlerAdapte JsonObject obj = null; if(str.indexOf('{') == 0) { try { - obj = (new JsonParser()).parse(str).getAsJsonObject(); + obj = JsonParser.parseString(str).getAsJsonObject(); }catch(JsonParseException ex) { } } diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/HttpWebSocketHandler.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/HttpWebSocketHandler.java index aa27e95..f56db77 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/HttpWebSocketHandler.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/HttpWebSocketHandler.java @@ -917,7 +917,7 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { if("textures".equals(props[i].getName())) { try { String jsonStr = SkinPackets.bytesToAscii(Base64.decodeBase64(props[i].getValue())); - JsonObject json = (new JsonParser()).parse(jsonStr).getAsJsonObject(); + JsonObject json = JsonParser.parseString(jsonStr).getAsJsonObject(); JsonObject skinObj = json.getAsJsonObject("SKIN"); if(skinObj != null) { JsonElement url = json.get("url"); @@ -990,11 +990,11 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { }; try { - PostLoginEvent login = new PostLoginEvent(userCon); + bungee.getPluginManager().callEvent(new PostLoginEvent(userCon, server, complete)); + }catch(NoSuchMethodError err) { + PostLoginEvent login = PostLoginEvent.class.getDeclaredConstructor(ProxiedPlayer.class).newInstance(userCon); bungee.getPluginManager().callEvent(login); complete.done(login, null); - }catch(NoSuchMethodError err) { - bungee.getPluginManager().callEvent(PostLoginEvent.class.getDeclaredConstructor(ProxiedPlayer.class, ServerInfo.class, Callback.class).newInstance(userCon, server, complete)); } } diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/skins/AsyncSkinProvider.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/skins/AsyncSkinProvider.java index 17932fe..2ad032d 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/skins/AsyncSkinProvider.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/skins/AsyncSkinProvider.java @@ -212,7 +212,7 @@ public class AsyncSkinProvider { doAccept(null); }else { try { - JsonObject json = (new JsonParser()).parse(new String(response.data, StandardCharsets.UTF_8)).getAsJsonObject(); + JsonObject json = JsonParser.parseString(new String(response.data, StandardCharsets.UTF_8)).getAsJsonObject(); String username = json.get("name").getAsString().toLowerCase(); String texture = null; String model = null; @@ -227,7 +227,7 @@ public class AsyncSkinProvider { JsonObject propObj = prop.getAsJsonObject(); if(propObj.get("name").getAsString().equals("textures")) { String value = new String(Base64.decodeBase64(propObj.get("value").getAsString()), StandardCharsets.UTF_8); - JsonObject texturesJson = (new JsonParser()).parse(value).getAsJsonObject(); + JsonObject texturesJson = JsonParser.parseString(value).getAsJsonObject(); if(texturesJson != null && texturesJson.has("textures")) { texturesJson = texturesJson.getAsJsonObject("textures"); JsonElement skin = texturesJson.get("SKIN"); diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/skins/SkinService.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/skins/SkinService.java index 71ffc44..edd4b78 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/skins/SkinService.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/skins/SkinService.java @@ -330,7 +330,7 @@ public class SkinService implements ISkinService { if(pp.getName().equals("textures")) { try { String jsonStr = SkinPackets.bytesToAscii(Base64.decodeBase64(pp.getValue())); - JsonObject json = (new JsonParser()).parse(jsonStr).getAsJsonObject(); + JsonObject json = JsonParser.parseString(jsonStr).getAsJsonObject(); JsonObject skinObj = json.getAsJsonObject("SKIN"); if(skinObj != null) { JsonElement url = json.get("url"); diff --git a/gateway/EaglercraftXBungee/src/main/resources/plugin.yml b/gateway/EaglercraftXBungee/src/main/resources/plugin.yml index 0e0f9b4..6d71c18 100644 --- a/gateway/EaglercraftXBungee/src/main/resources/plugin.yml +++ b/gateway/EaglercraftXBungee/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: EaglercraftXBungee main: net.lax1dude.eaglercraft.v1_8.plugin.gateway_bungeecord.EaglerXBungee -version: 1.1.0 +version: 1.1.1 description: Plugin to allow EaglercraftX 1.8 players to join your network, or allow EaglercraftX 1.8 players to use your network as a proxy to join other networks author: lax1dude \ No newline at end of file diff --git a/gateway_version b/gateway_version index 1cc5f65..8cfbc90 100644 --- a/gateway_version +++ b/gateway_version @@ -1 +1 @@ -1.1.0 \ No newline at end of file +1.1.1 \ No newline at end of file diff --git a/sources/resources/plugin_download.zip b/sources/resources/plugin_download.zip index 7b99d4b..34da86f 100644 Binary files a/sources/resources/plugin_download.zip and b/sources/resources/plugin_download.zip differ diff --git a/sources/resources/plugin_version.json b/sources/resources/plugin_version.json index 56a0adb..9d5593e 100644 --- a/sources/resources/plugin_version.json +++ b/sources/resources/plugin_version.json @@ -1 +1 @@ -{"pluginName":"EaglercraftXBungee","pluginVersion":"1.1.0","pluginButton":"Download \"EaglerXBungee-1.1.0.jar\"","pluginFilename":"EaglerXBungee.zip"} \ No newline at end of file +{"pluginName":"EaglercraftXBungee","pluginVersion":"1.1.1","pluginButton":"Download \"EaglerXBungee-1.1.1.jar\"","pluginFilename":"EaglerXBungee.zip"} \ No newline at end of file