From a7d54e164ace0972529fa414394016b4cfb35c95 Mon Sep 17 00:00:00 2001 From: McRuben Date: Tue, 20 Nov 2018 22:47:34 +0100 Subject: [PATCH 01/20] Added debug command and some debugs, especially in the login section for the "Unverified Login" bug --- .../de/dytanic/cloudnetcore/CloudNet.java | 3 ++- .../cloudnetcore/database/PlayerDatabase.java | 11 ++++++-- .../cloudnetcore/network/CloudNetClient.java | 8 +++++- .../cloudnetcore/network/NetworkManager.java | 26 ++++++++++++++++--- .../network/components/INetworkComponent.java | 15 ++++++++++- 5 files changed, 55 insertions(+), 8 deletions(-) diff --git a/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/CloudNet.java b/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/CloudNet.java index eced03ad6..a06269731 100644 --- a/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/CloudNet.java +++ b/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/CloudNet.java @@ -384,7 +384,8 @@ private void initialCommands() .registerCommand(new CommandLog()) .registerCommand(new CommandCreate()) .registerCommand(new CommandVersion()) - .registerCommand(new CommandInfo()); + .registerCommand(new CommandInfo()) + .registerCommand(new CommandDebug()); } private void initPacketHandlers() diff --git a/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/database/PlayerDatabase.java b/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/database/PlayerDatabase.java index a1a9ade70..404a0fa42 100644 --- a/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/database/PlayerDatabase.java +++ b/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/database/PlayerDatabase.java @@ -12,6 +12,8 @@ import de.dytanic.cloudnet.lib.player.PlayerConnection; import de.dytanic.cloudnet.lib.player.permission.PermissionEntity; import de.dytanic.cloudnet.lib.utility.document.Document; +import de.dytanic.cloudnetcore.CloudNet; +import de.dytanic.cloudnetcore.api.event.player.UpdatePlayerEvent; import java.util.HashMap; import java.util.LinkedList; @@ -37,9 +39,13 @@ public OfflinePlayer registerPlayer(PlayerConnection playerConnection) public PlayerDatabase updatePlayer(OfflinePlayer offlinePlayer) { + CloudNet.getLogger().debug("PlayerDatabase updatePlayer offlinePlayer null: " + (offlinePlayer == null)); + if (offlinePlayer == null) return this; Document document = database.getDocument(offlinePlayer.getUniqueId().toString()); document.append("offlinePlayer", CloudPlayer.newOfflinePlayer(offlinePlayer)); database.insert(document); + CloudNet.getLogger().debug("PlayerDatabase updatePlayer call UpdatePlayerEvent"); + CloudNet.getInstance().getEventManager().callEvent(new UpdatePlayerEvent(offlinePlayer)); return this; } @@ -70,11 +76,12 @@ public PlayerDatabase updatePermissionEntity(UUID uuid, PermissionEntity permiss public OfflinePlayer getPlayer(UUID uniqueId) { + CloudNet.getLogger().debug("PlayerDatabase getPlayer uniqueId " + uniqueId); if (uniqueId == null) return null; Document document = database.getDocument(uniqueId.toString()); - + CloudNet.getLogger().debug("PlayerDatabase getPlayer document null: " + (document == null)); if (document == null) return null; - + CloudNet.getLogger().debug("PlayerDatabase getPlayer offlinePlayer contained: " + document.contains("offlinePlayer")); return document.getObject("offlinePlayer", OfflinePlayer.TYPE); } diff --git a/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/network/CloudNetClient.java b/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/network/CloudNetClient.java index 2fc2e929c..9a3bf9022 100644 --- a/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/network/CloudNetClient.java +++ b/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/network/CloudNetClient.java @@ -134,8 +134,14 @@ protected void channelRead0(ChannelHandlerContext channelHandlerContext, Object if (!(obj instanceof Packet)) return; - CloudNet.getLogger().debug("Receiving Packet on " + getChannel().remoteAddress().toString()); Packet packet = (Packet) obj; + CloudNet.getLogger().debug( + "Receiving Packet (id=" + + CloudNet.getInstance().getPacketManager().packetId(packet) + + ";dataLength=" + + CloudNet.getInstance().getPacketManager().packetData(packet).size() + + ") by " + getNetworkComponent().getServerId() + ); CloudNet.getInstance().getPacketManager().dispatchPacket(packet, networkComponent); } diff --git a/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/network/NetworkManager.java b/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/network/NetworkManager.java index 6b741f224..a32cf3776 100644 --- a/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/network/NetworkManager.java +++ b/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/network/NetworkManager.java @@ -86,38 +86,58 @@ public void updateAll0() public void handlePlayerLoginRequest(ProxyServer proxyServer, PlayerConnection cloudPlayerConnection, UUID uniqueId) { + CloudNet.getLogger().debug("player login request " + cloudPlayerConnection.getName() + "#" + uniqueId + " onlinePlayers"); if (this.onlinePlayers.containsKey(cloudPlayerConnection.getUniqueId())) { proxyServer.sendPacketSynchronized(new PacketOutLoginPlayer(uniqueId, null, "Already connected in network")); return; } + CloudNet.getLogger().debug("player login request " + cloudPlayerConnection.getName() + "#" + uniqueId + " call LoginRequestEvent"); LoginRequestEvent loginRequestEvent = new LoginRequestEvent(proxyServer, cloudPlayerConnection); CloudNet.getInstance().getEventManager().callEvent(loginRequestEvent); PlayerDatabase playerDatabase = CloudNet.getInstance().getDbHandlers().getPlayerDatabase(); OfflinePlayer offlinePlayer = null; - if (!playerDatabase.containsPlayer(cloudPlayerConnection.getUniqueId())) + CloudNet.getLogger().debug("player login request " + cloudPlayerConnection.getName() + "#" + uniqueId + " database contains"); + if (!playerDatabase.containsPlayer(cloudPlayerConnection.getUniqueId())) { + CloudNet.getLogger().debug("player login request " + cloudPlayerConnection.getName() + "#" + uniqueId + " database register"); offlinePlayer = playerDatabase.registerPlayer(cloudPlayerConnection); + } - if (offlinePlayer == null) offlinePlayer = playerDatabase.getPlayer(cloudPlayerConnection.getUniqueId()); + if (offlinePlayer == null) { + CloudNet.getLogger().debug("player login request " + cloudPlayerConnection.getName() + "#" + uniqueId + " database get"); + offlinePlayer = playerDatabase.getPlayer(cloudPlayerConnection.getUniqueId()); + } + CloudNet.getLogger().debug("player login request " + cloudPlayerConnection.getName() + "#" + uniqueId + " create CloudPlayer"); CloudPlayer cloudPlayer = new CloudPlayer(offlinePlayer, cloudPlayerConnection, proxyServer.getServerId()); cloudPlayer.setPlayerExecutor(CorePlayerExecutor.INSTANCE); - if (cloudPlayer.getFirstLogin() == null) cloudPlayer.setFirstLogin(System.currentTimeMillis()); + if (cloudPlayer.getFirstLogin() == null) { + CloudNet.getLogger().debug("player login request " + cloudPlayerConnection.getName() + "#" + uniqueId + " set firstLogin"); + cloudPlayer.setFirstLogin(System.currentTimeMillis()); + } + CloudNet.getLogger().debug("player login request " + cloudPlayerConnection.getName() + "#" + uniqueId + " call PlayerInitEvent"); CloudNet.getInstance().getEventManager().callEvent(new PlayerInitEvent(cloudPlayer)); + CloudNet.getLogger().debug("player login request " + cloudPlayerConnection.getName() + "#" + uniqueId + " NameToUUIDDatabase append"); CloudNet.getInstance().getDbHandlers().getNameToUUIDDatabase().append(new MultiValue<>(cloudPlayerConnection.getName(), cloudPlayerConnection.getUniqueId())); + CloudNet.getLogger().debug("player login request " + cloudPlayerConnection.getName() + "#" + uniqueId + " NameToUUIDDatabase replace"); CloudNet.getInstance().getDbHandlers().getNameToUUIDDatabase().replace(new MultiValue<>(cloudPlayerConnection.getUniqueId(), cloudPlayerConnection.getName())); + CloudNet.getLogger().debug("player login request " + cloudPlayerConnection.getName() + "#" + uniqueId + " setName"); cloudPlayer.setName(cloudPlayerConnection.getName()); + CloudNet.getLogger().debug("player login request " + cloudPlayerConnection.getName() + "#" + uniqueId + " updatePlayer"); CloudNet.getInstance().getDbHandlers().getPlayerDatabase().updatePlayer(CloudPlayer.newOfflinePlayer(cloudPlayer)); + CloudNet.getLogger().debug("player login request " + cloudPlayerConnection.getName() + "#" + uniqueId + " PacketOutLoginPlayer"); proxyServer.sendPacket(new PacketOutLoginPlayer(uniqueId, cloudPlayer, "successful Login")); + CloudNet.getLogger().debug("player login request " + cloudPlayerConnection.getName() + "#" + uniqueId + " waitingPlayers"); this.waitingPlayers.put(cloudPlayer.getUniqueId(), cloudPlayer); + CloudNet.getLogger().debug("player login request " + cloudPlayerConnection.getName() + "#" + uniqueId + " handlePlayerLogin"); handlePlayerLogin(cloudPlayer); } diff --git a/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/network/components/INetworkComponent.java b/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/network/components/INetworkComponent.java index 3919d51a7..b71b74c57 100644 --- a/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/network/components/INetworkComponent.java +++ b/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/network/components/INetworkComponent.java @@ -22,7 +22,13 @@ public interface INetworkComponent extends PacketSender, ChannelUser { default void sendPacket(Packet packet) { - CloudNet.getLogger().debug("Sending Packet " + packet.getClass().getSimpleName() + " to " + getServerId()); + CloudNet.getLogger().debug( + "Sending Packet " + + packet.getClass().getSimpleName() + + " (id=" + CloudNet.getInstance().getPacketManager().packetId(packet) + + ";dataLength=" + CloudNet.getInstance().getPacketManager().packetData(packet).size() + + ") to " + getServerId() + ); if (getChannel() == null) return; if (getChannel().eventLoop().inEventLoop()) @@ -62,6 +68,13 @@ default void sendPacket(Packet... packets) default void sendPacketSynchronized(Packet packet) { if (getChannel() == null) return; + CloudNet.getLogger().debug( + "Sending Packet " + + packet.getClass().getSimpleName() + + " (id=" + CloudNet.getInstance().getPacketManager().packetId(packet) + + ";dataLength=" + CloudNet.getInstance().getPacketManager().packetData(packet).size() + + ") to " + getServerId() + ); getChannel().writeAndFlush(packet).syncUninterruptibly(); } From 68b619e51d9fb5dd1464c67bb638f955a7cae7de Mon Sep 17 00:00:00 2001 From: McRuben Date: Tue, 20 Nov 2018 22:48:08 +0100 Subject: [PATCH 02/20] Added debug command and some debugs, especially in the login section for the "Unverified Login" bug --- .../cloudnetcore/command/CommandDebug.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 cloudnet-core/src/main/java/de/dytanic/cloudnetcore/command/CommandDebug.java diff --git a/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/command/CommandDebug.java b/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/command/CommandDebug.java new file mode 100644 index 000000000..2a831b583 --- /dev/null +++ b/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/command/CommandDebug.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) Tarek Hosni El Alaoui 2017 + */ + +package de.dytanic.cloudnetcore.command; + +import de.dytanic.cloudnet.command.Command; +import de.dytanic.cloudnet.command.CommandSender; +import de.dytanic.cloudnetcore.CloudNet; + +import java.io.IOException; + +public final class CommandDebug extends Command { + + public CommandDebug() + { + super("debug", "cloudnet.command.debug"); + + description = "Toggles the cloudnet debug mode"; + + } + + @Override + public void onExecuteCommand(CommandSender sender, String[] args) + { + CloudNet.getLogger().setDebugging(!CloudNet.getLogger().isDebugging()); + if (CloudNet.getLogger().isDebugging()) { + sender.sendMessage("debugging was enabled"); + } else { + sender.sendMessage("debugging was disabled"); + } + } +} \ No newline at end of file From 09228fa30f713dab68276201e6be1296aadafc90 Mon Sep 17 00:00:00 2001 From: McRuben Date: Sat, 24 Nov 2018 16:07:59 +0100 Subject: [PATCH 03/20] Set instance of CloudServer in the bukkit plugin before connecting to the Cloud (that should fix the bug with the NullPointerException on receiving the SignSelector or MobSelector packet) --- .../main/java/de/dytanic/cloudnet/bridge/BukkitBootstrap.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/BukkitBootstrap.java b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/BukkitBootstrap.java index 66e124ba5..310bbf21b 100644 --- a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/BukkitBootstrap.java +++ b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/BukkitBootstrap.java @@ -44,6 +44,8 @@ public void onLoad() @Override public void onEnable() { + new CloudServer(this, CloudAPI.getInstance()); + CloudAPI.getInstance().bootstrap(); checkRegistryAccess(); @@ -56,7 +58,6 @@ public void onEnable() { } - new CloudServer(this, CloudAPI.getInstance()); getServer().getPluginManager().registerEvents(new BukkitListener(), this); CloudServer.getInstance().registerCommand(new CommandResource()); From 88eb8979440514abf7fd7c43ccf10b0d4bf59abc Mon Sep 17 00:00:00 2001 From: McRuben <37866812+McRuben@users.noreply.github.com> Date: Sat, 24 Nov 2018 16:23:27 +0100 Subject: [PATCH 04/20] Removed unused imports --- .../java/de/dytanic/cloudnetcore/command/CommandDebug.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/command/CommandDebug.java b/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/command/CommandDebug.java index 2a831b583..2f5e4cbad 100644 --- a/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/command/CommandDebug.java +++ b/cloudnet-core/src/main/java/de/dytanic/cloudnetcore/command/CommandDebug.java @@ -8,8 +8,6 @@ import de.dytanic.cloudnet.command.CommandSender; import de.dytanic.cloudnetcore.CloudNet; -import java.io.IOException; - public final class CommandDebug extends Command { public CommandDebug() @@ -30,4 +28,4 @@ public void onExecuteCommand(CommandSender sender, String[] args) sender.sendMessage("debugging was disabled"); } } -} \ No newline at end of file +} From 0eacaf4580cf59ffdfc27011e9dd4c2c735cd9a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Mon, 12 Nov 2018 06:25:57 +0000 Subject: [PATCH 05/20] Bump maven-shade-plugin from 3.2.0 to 3.2.1 Bumps [maven-shade-plugin](https://github.com/apache/maven-shade-plugin) from 3.2.0 to 3.2.1. - [Release notes](https://github.com/apache/maven-shade-plugin/releases) - [Commits](https://github.com/apache/maven-shade-plugin/compare/maven-shade-plugin-3.2.0...maven-shade-plugin-3.2.1) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e8425b450..a018b1762 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ 4.12 - 3.2.0 + 3.2.1 3.0.1 3.1.0 3.1.0 From 856a1cc33fb0e58d80c552af07274bf8dd5a5d79 Mon Sep 17 00:00:00 2001 From: byRoadrunner Date: Thu, 15 Nov 2018 18:40:34 +0100 Subject: [PATCH 06/20] Updated Downloadlinks for PaperSpigot and Spigot Changed Download links of PaperSpigot and Spigot, because Yivesmirror will shut down at the beginning of the next year. --- .../setup/SetupSpigotVersion.java | 33 +++++++++---------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java b/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java index 3bd001191..e84873ba4 100644 --- a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java +++ b/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java @@ -130,31 +130,31 @@ public void run(ConsoleReader reader) switch (reader.readLine().toLowerCase()) { case "1.7.10": - download.run("https://yivesmirror.com/files/spigot/spigot-1.7.10-SNAPSHOT-b1657.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.7.10-SNAPSHOT-b1657.jar"); return; case "1.8.8": - download.run("https://yivesmirror.com/files/spigot/spigot-1.8.8-R0.1-SNAPSHOT-latest.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.8.8-R0.1-SNAPSHOT-latest.jar"); return; case "1.9.4": - download.run("https://yivesmirror.com/files/spigot/spigot-1.9.4-R0.1-SNAPSHOT.jar"); - return; - case "1.11.2": - download.run("https://yivesmirror.com/files/spigot/spigot-1.11.2-R0.1-SNAPSHOT.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.9.4-R0.1-SNAPSHOT-latest.jar"); return; case "1.10.2": - download.run("https://yivesmirror.com/files/spigot/spigot-1.10.2-R0.1-SNAPSHOT.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.10.2-R0.1-SNAPSHOT-latest.jar"); + return; + case "1.11.2": + download.run("https://cdn.getbukkit.org/spigot/spigot-1.11.2.jar"); return; case "1.12.2": - download.run("https://yivesmirror.com/files/spigot/spigot-1.12.2-R0.1-SNAPSHOT-b1647.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.12.2.jar"); return; case "1.13": - download.run("https://yivesmirror.com/files/spigot/spigot-1.13-R0.1-SNAPSHOT-b1851.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.13.jar"); return; case "1.13.1": - download.run("https://yivesmirror.com/files/spigot/spigot-1.13.1-R0.1-SNAPSHOT-b1947.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.13.1.jar"); return; case "1.13.2": - download.run("https://yivesmirror.com/files/spigot/spigot-1.13.2-R0.1-SNAPSHOT-b1974.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.13.2.jar"); return; default: System.out.println("This version is not supported!"); @@ -174,19 +174,16 @@ public void run(ConsoleReader reader) switch (reader.readLine().toLowerCase()) { case "1.8.8": - download.run("https://yivesmirror.com/files/paper/PaperSpigot-1.8.8-R0.1-SNAPSHOT-latest.jar"); + download.run("https://papermc.io/ci/job/Paper/443/artifact/Paperclip.jar"); return; case "1.11.2": - download.run("https://yivesmirror.com/files/paper/PaperSpigot-1.11.2-b1104.jar"); + download.run("https://papermc.io/ci/job/Paper/1104/artifact/paperclip.jar"); return; case "1.12.2": - download.run("https://yivesmirror.com/files/paper/PaperSpigot-1.12.2-b1552.jar"); - return; - case "1.13.1": - download.run("https://yivesmirror.com/files/paper/PaperSpigot-1.13.1-b332.jar"); + download.run("https://papermc.io/ci/job/Paper/1587/artifact/paperclip.jar"); return; case "1.13.2": - download.run("https://yivesmirror.com/files/paper/Paper-1.13.2-b409.jar"); + download.run("https://papermc.io/ci/job/Paper-1.13/447/artifact/paperclip.jar"); return; default: System.out.println("This version is not supported!"); From 5f24788ef5acb458a947034618dbf36349962c87 Mon Sep 17 00:00:00 2001 From: Marvin Date: Sat, 24 Nov 2018 16:29:47 +0100 Subject: [PATCH 07/20] Revert "Updated Downloadlinks for PaperSpigot and Spigot" This reverts commit f699d0b9b9629b34bc6d91b9875d9abf9c58242f. --- .../setup/SetupSpigotVersion.java | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java b/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java index e84873ba4..3bd001191 100644 --- a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java +++ b/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java @@ -130,31 +130,31 @@ public void run(ConsoleReader reader) switch (reader.readLine().toLowerCase()) { case "1.7.10": - download.run("https://cdn.getbukkit.org/spigot/spigot-1.7.10-SNAPSHOT-b1657.jar"); + download.run("https://yivesmirror.com/files/spigot/spigot-1.7.10-SNAPSHOT-b1657.jar"); return; case "1.8.8": - download.run("https://cdn.getbukkit.org/spigot/spigot-1.8.8-R0.1-SNAPSHOT-latest.jar"); + download.run("https://yivesmirror.com/files/spigot/spigot-1.8.8-R0.1-SNAPSHOT-latest.jar"); return; case "1.9.4": - download.run("https://cdn.getbukkit.org/spigot/spigot-1.9.4-R0.1-SNAPSHOT-latest.jar"); - return; - case "1.10.2": - download.run("https://cdn.getbukkit.org/spigot/spigot-1.10.2-R0.1-SNAPSHOT-latest.jar"); + download.run("https://yivesmirror.com/files/spigot/spigot-1.9.4-R0.1-SNAPSHOT.jar"); return; case "1.11.2": - download.run("https://cdn.getbukkit.org/spigot/spigot-1.11.2.jar"); + download.run("https://yivesmirror.com/files/spigot/spigot-1.11.2-R0.1-SNAPSHOT.jar"); + return; + case "1.10.2": + download.run("https://yivesmirror.com/files/spigot/spigot-1.10.2-R0.1-SNAPSHOT.jar"); return; case "1.12.2": - download.run("https://cdn.getbukkit.org/spigot/spigot-1.12.2.jar"); + download.run("https://yivesmirror.com/files/spigot/spigot-1.12.2-R0.1-SNAPSHOT-b1647.jar"); return; case "1.13": - download.run("https://cdn.getbukkit.org/spigot/spigot-1.13.jar"); + download.run("https://yivesmirror.com/files/spigot/spigot-1.13-R0.1-SNAPSHOT-b1851.jar"); return; case "1.13.1": - download.run("https://cdn.getbukkit.org/spigot/spigot-1.13.1.jar"); + download.run("https://yivesmirror.com/files/spigot/spigot-1.13.1-R0.1-SNAPSHOT-b1947.jar"); return; case "1.13.2": - download.run("https://cdn.getbukkit.org/spigot/spigot-1.13.2.jar"); + download.run("https://yivesmirror.com/files/spigot/spigot-1.13.2-R0.1-SNAPSHOT-b1974.jar"); return; default: System.out.println("This version is not supported!"); @@ -174,16 +174,19 @@ public void run(ConsoleReader reader) switch (reader.readLine().toLowerCase()) { case "1.8.8": - download.run("https://papermc.io/ci/job/Paper/443/artifact/Paperclip.jar"); + download.run("https://yivesmirror.com/files/paper/PaperSpigot-1.8.8-R0.1-SNAPSHOT-latest.jar"); return; case "1.11.2": - download.run("https://papermc.io/ci/job/Paper/1104/artifact/paperclip.jar"); + download.run("https://yivesmirror.com/files/paper/PaperSpigot-1.11.2-b1104.jar"); return; case "1.12.2": - download.run("https://papermc.io/ci/job/Paper/1587/artifact/paperclip.jar"); + download.run("https://yivesmirror.com/files/paper/PaperSpigot-1.12.2-b1552.jar"); + return; + case "1.13.1": + download.run("https://yivesmirror.com/files/paper/PaperSpigot-1.13.1-b332.jar"); return; case "1.13.2": - download.run("https://papermc.io/ci/job/Paper-1.13/447/artifact/paperclip.jar"); + download.run("https://yivesmirror.com/files/paper/Paper-1.13.2-b409.jar"); return; default: System.out.println("This version is not supported!"); From ea06e57c648a8d5d0d237af50f9cd4c5c71b5c9e Mon Sep 17 00:00:00 2001 From: Marvin Date: Sat, 24 Nov 2018 16:31:29 +0100 Subject: [PATCH 08/20] Revert "Revert "Updated Downloadlinks for PaperSpigot and Spigot"" This reverts commit a247bc59834b73675b551ba7531d9932bfd8016d. --- .../setup/SetupSpigotVersion.java | 33 +++++++++---------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java b/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java index 3bd001191..e84873ba4 100644 --- a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java +++ b/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java @@ -130,31 +130,31 @@ public void run(ConsoleReader reader) switch (reader.readLine().toLowerCase()) { case "1.7.10": - download.run("https://yivesmirror.com/files/spigot/spigot-1.7.10-SNAPSHOT-b1657.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.7.10-SNAPSHOT-b1657.jar"); return; case "1.8.8": - download.run("https://yivesmirror.com/files/spigot/spigot-1.8.8-R0.1-SNAPSHOT-latest.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.8.8-R0.1-SNAPSHOT-latest.jar"); return; case "1.9.4": - download.run("https://yivesmirror.com/files/spigot/spigot-1.9.4-R0.1-SNAPSHOT.jar"); - return; - case "1.11.2": - download.run("https://yivesmirror.com/files/spigot/spigot-1.11.2-R0.1-SNAPSHOT.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.9.4-R0.1-SNAPSHOT-latest.jar"); return; case "1.10.2": - download.run("https://yivesmirror.com/files/spigot/spigot-1.10.2-R0.1-SNAPSHOT.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.10.2-R0.1-SNAPSHOT-latest.jar"); + return; + case "1.11.2": + download.run("https://cdn.getbukkit.org/spigot/spigot-1.11.2.jar"); return; case "1.12.2": - download.run("https://yivesmirror.com/files/spigot/spigot-1.12.2-R0.1-SNAPSHOT-b1647.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.12.2.jar"); return; case "1.13": - download.run("https://yivesmirror.com/files/spigot/spigot-1.13-R0.1-SNAPSHOT-b1851.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.13.jar"); return; case "1.13.1": - download.run("https://yivesmirror.com/files/spigot/spigot-1.13.1-R0.1-SNAPSHOT-b1947.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.13.1.jar"); return; case "1.13.2": - download.run("https://yivesmirror.com/files/spigot/spigot-1.13.2-R0.1-SNAPSHOT-b1974.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.13.2.jar"); return; default: System.out.println("This version is not supported!"); @@ -174,19 +174,16 @@ public void run(ConsoleReader reader) switch (reader.readLine().toLowerCase()) { case "1.8.8": - download.run("https://yivesmirror.com/files/paper/PaperSpigot-1.8.8-R0.1-SNAPSHOT-latest.jar"); + download.run("https://papermc.io/ci/job/Paper/443/artifact/Paperclip.jar"); return; case "1.11.2": - download.run("https://yivesmirror.com/files/paper/PaperSpigot-1.11.2-b1104.jar"); + download.run("https://papermc.io/ci/job/Paper/1104/artifact/paperclip.jar"); return; case "1.12.2": - download.run("https://yivesmirror.com/files/paper/PaperSpigot-1.12.2-b1552.jar"); - return; - case "1.13.1": - download.run("https://yivesmirror.com/files/paper/PaperSpigot-1.13.1-b332.jar"); + download.run("https://papermc.io/ci/job/Paper/1587/artifact/paperclip.jar"); return; case "1.13.2": - download.run("https://yivesmirror.com/files/paper/Paper-1.13.2-b409.jar"); + download.run("https://papermc.io/ci/job/Paper-1.13/447/artifact/paperclip.jar"); return; default: System.out.println("This version is not supported!"); From 6ac6983727abd5bf9529ce7e6fc00482aeeec541 Mon Sep 17 00:00:00 2001 From: Marvin Date: Sat, 24 Nov 2018 16:31:29 +0100 Subject: [PATCH 09/20] Revert "Updated Downloadlinks for PaperSpigot and Spigot" This reverts commit f699d0b9b9629b34bc6d91b9875d9abf9c58242f. --- .../setup/SetupSpigotVersion.java | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java b/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java index e84873ba4..3bd001191 100644 --- a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java +++ b/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java @@ -130,31 +130,31 @@ public void run(ConsoleReader reader) switch (reader.readLine().toLowerCase()) { case "1.7.10": - download.run("https://cdn.getbukkit.org/spigot/spigot-1.7.10-SNAPSHOT-b1657.jar"); + download.run("https://yivesmirror.com/files/spigot/spigot-1.7.10-SNAPSHOT-b1657.jar"); return; case "1.8.8": - download.run("https://cdn.getbukkit.org/spigot/spigot-1.8.8-R0.1-SNAPSHOT-latest.jar"); + download.run("https://yivesmirror.com/files/spigot/spigot-1.8.8-R0.1-SNAPSHOT-latest.jar"); return; case "1.9.4": - download.run("https://cdn.getbukkit.org/spigot/spigot-1.9.4-R0.1-SNAPSHOT-latest.jar"); - return; - case "1.10.2": - download.run("https://cdn.getbukkit.org/spigot/spigot-1.10.2-R0.1-SNAPSHOT-latest.jar"); + download.run("https://yivesmirror.com/files/spigot/spigot-1.9.4-R0.1-SNAPSHOT.jar"); return; case "1.11.2": - download.run("https://cdn.getbukkit.org/spigot/spigot-1.11.2.jar"); + download.run("https://yivesmirror.com/files/spigot/spigot-1.11.2-R0.1-SNAPSHOT.jar"); + return; + case "1.10.2": + download.run("https://yivesmirror.com/files/spigot/spigot-1.10.2-R0.1-SNAPSHOT.jar"); return; case "1.12.2": - download.run("https://cdn.getbukkit.org/spigot/spigot-1.12.2.jar"); + download.run("https://yivesmirror.com/files/spigot/spigot-1.12.2-R0.1-SNAPSHOT-b1647.jar"); return; case "1.13": - download.run("https://cdn.getbukkit.org/spigot/spigot-1.13.jar"); + download.run("https://yivesmirror.com/files/spigot/spigot-1.13-R0.1-SNAPSHOT-b1851.jar"); return; case "1.13.1": - download.run("https://cdn.getbukkit.org/spigot/spigot-1.13.1.jar"); + download.run("https://yivesmirror.com/files/spigot/spigot-1.13.1-R0.1-SNAPSHOT-b1947.jar"); return; case "1.13.2": - download.run("https://cdn.getbukkit.org/spigot/spigot-1.13.2.jar"); + download.run("https://yivesmirror.com/files/spigot/spigot-1.13.2-R0.1-SNAPSHOT-b1974.jar"); return; default: System.out.println("This version is not supported!"); @@ -174,16 +174,19 @@ public void run(ConsoleReader reader) switch (reader.readLine().toLowerCase()) { case "1.8.8": - download.run("https://papermc.io/ci/job/Paper/443/artifact/Paperclip.jar"); + download.run("https://yivesmirror.com/files/paper/PaperSpigot-1.8.8-R0.1-SNAPSHOT-latest.jar"); return; case "1.11.2": - download.run("https://papermc.io/ci/job/Paper/1104/artifact/paperclip.jar"); + download.run("https://yivesmirror.com/files/paper/PaperSpigot-1.11.2-b1104.jar"); return; case "1.12.2": - download.run("https://papermc.io/ci/job/Paper/1587/artifact/paperclip.jar"); + download.run("https://yivesmirror.com/files/paper/PaperSpigot-1.12.2-b1552.jar"); + return; + case "1.13.1": + download.run("https://yivesmirror.com/files/paper/PaperSpigot-1.13.1-b332.jar"); return; case "1.13.2": - download.run("https://papermc.io/ci/job/Paper-1.13/447/artifact/paperclip.jar"); + download.run("https://yivesmirror.com/files/paper/Paper-1.13.2-b409.jar"); return; default: System.out.println("This version is not supported!"); From c2d0d62d5da74299be4bd7ea9d3f9da018d43f7b Mon Sep 17 00:00:00 2001 From: Marvin Date: Sat, 24 Nov 2018 16:31:29 +0100 Subject: [PATCH 10/20] Revert "Bump maven-shade-plugin from 3.2.0 to 3.2.1" This reverts commit f3b9412ecd765cefecb88d00e0fee0bd4c3b2a36. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a018b1762..e8425b450 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ 4.12 - 3.2.1 + 3.2.0 3.0.1 3.1.0 3.1.0 From fd7ea69cfec574374d8c598e102c809227d6ad76 Mon Sep 17 00:00:00 2001 From: byRoadrunner Date: Sat, 24 Nov 2018 17:04:36 +0100 Subject: [PATCH 11/20] Bump maven-shade-plugin from 3.2.0 to 3.2.1 Bumps maven-shade-plugin from 3.2.0 to 3.2.1. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e8425b450..a018b1762 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ 4.12 - 3.2.0 + 3.2.1 3.0.1 3.1.0 3.1.0 From dffd7af023b5e7ea238d0501df73c757a1d42189 Mon Sep 17 00:00:00 2001 From: byRoadrunner Date: Thu, 15 Nov 2018 18:40:34 +0100 Subject: [PATCH 12/20] Updated Downloadlinks for PaperSpigot and Spigot Changed Download links of PaperSpigot and Spigot, because Yivesmirror will shut down at the beginning of the next year. --- .../setup/SetupSpigotVersion.java | 33 +++++++++---------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java b/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java index 3bd001191..e84873ba4 100644 --- a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java +++ b/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java @@ -130,31 +130,31 @@ public void run(ConsoleReader reader) switch (reader.readLine().toLowerCase()) { case "1.7.10": - download.run("https://yivesmirror.com/files/spigot/spigot-1.7.10-SNAPSHOT-b1657.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.7.10-SNAPSHOT-b1657.jar"); return; case "1.8.8": - download.run("https://yivesmirror.com/files/spigot/spigot-1.8.8-R0.1-SNAPSHOT-latest.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.8.8-R0.1-SNAPSHOT-latest.jar"); return; case "1.9.4": - download.run("https://yivesmirror.com/files/spigot/spigot-1.9.4-R0.1-SNAPSHOT.jar"); - return; - case "1.11.2": - download.run("https://yivesmirror.com/files/spigot/spigot-1.11.2-R0.1-SNAPSHOT.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.9.4-R0.1-SNAPSHOT-latest.jar"); return; case "1.10.2": - download.run("https://yivesmirror.com/files/spigot/spigot-1.10.2-R0.1-SNAPSHOT.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.10.2-R0.1-SNAPSHOT-latest.jar"); + return; + case "1.11.2": + download.run("https://cdn.getbukkit.org/spigot/spigot-1.11.2.jar"); return; case "1.12.2": - download.run("https://yivesmirror.com/files/spigot/spigot-1.12.2-R0.1-SNAPSHOT-b1647.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.12.2.jar"); return; case "1.13": - download.run("https://yivesmirror.com/files/spigot/spigot-1.13-R0.1-SNAPSHOT-b1851.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.13.jar"); return; case "1.13.1": - download.run("https://yivesmirror.com/files/spigot/spigot-1.13.1-R0.1-SNAPSHOT-b1947.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.13.1.jar"); return; case "1.13.2": - download.run("https://yivesmirror.com/files/spigot/spigot-1.13.2-R0.1-SNAPSHOT-b1974.jar"); + download.run("https://cdn.getbukkit.org/spigot/spigot-1.13.2.jar"); return; default: System.out.println("This version is not supported!"); @@ -174,19 +174,16 @@ public void run(ConsoleReader reader) switch (reader.readLine().toLowerCase()) { case "1.8.8": - download.run("https://yivesmirror.com/files/paper/PaperSpigot-1.8.8-R0.1-SNAPSHOT-latest.jar"); + download.run("https://papermc.io/ci/job/Paper/443/artifact/Paperclip.jar"); return; case "1.11.2": - download.run("https://yivesmirror.com/files/paper/PaperSpigot-1.11.2-b1104.jar"); + download.run("https://papermc.io/ci/job/Paper/1104/artifact/paperclip.jar"); return; case "1.12.2": - download.run("https://yivesmirror.com/files/paper/PaperSpigot-1.12.2-b1552.jar"); - return; - case "1.13.1": - download.run("https://yivesmirror.com/files/paper/PaperSpigot-1.13.1-b332.jar"); + download.run("https://papermc.io/ci/job/Paper/1587/artifact/paperclip.jar"); return; case "1.13.2": - download.run("https://yivesmirror.com/files/paper/Paper-1.13.2-b409.jar"); + download.run("https://papermc.io/ci/job/Paper-1.13/447/artifact/paperclip.jar"); return; default: System.out.println("This version is not supported!"); From f666ccfc1e2815da66a92fdc00980f95082f3516 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Fri, 30 Nov 2018 05:57:49 +0000 Subject: [PATCH 13/20] Bump dependency.netty.version from 4.1.31.Final to 4.1.32.Final Bumps `dependency.netty.version` from 4.1.31.Final to 4.1.32.Final. Updates `netty-transport-native-epoll` from 4.1.31.Final to 4.1.32.Final - [Release notes](https://github.com/netty/netty/releases) - [Commits](https://github.com/netty/netty/compare/netty-4.1.31.Final...netty-4.1.32.Final) Updates `netty-transport-native-kqueue` from 4.1.31.Final to 4.1.32.Final - [Release notes](https://github.com/netty/netty/releases) - [Commits](https://github.com/netty/netty/compare/netty-4.1.31.Final...netty-4.1.32.Final) Updates `netty-codec` from 4.1.31.Final to 4.1.32.Final - [Release notes](https://github.com/netty/netty/releases) - [Commits](https://github.com/netty/netty/compare/netty-4.1.31.Final...netty-4.1.32.Final) Updates `netty-handler` from 4.1.31.Final to 4.1.32.Final - [Release notes](https://github.com/netty/netty/releases) - [Commits](https://github.com/netty/netty/compare/netty-4.1.31.Final...netty-4.1.32.Final) Updates `netty-codec-http` from 4.1.31.Final to 4.1.32.Final - [Release notes](https://github.com/netty/netty/releases) - [Commits](https://github.com/netty/netty/compare/netty-4.1.31.Final...netty-4.1.32.Final) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a018b1762..aa64a8613 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,7 @@ RELEASE 1.18.4 - 4.1.31.Final + 4.1.32.Final 2.8.5 2.14.6 5.0.4 From 5cc0664d2d3c306c71ce34ea09b38d744e456764 Mon Sep 17 00:00:00 2001 From: Tarek Date: Sun, 2 Dec 2018 21:35:00 +0100 Subject: [PATCH 14/20] fixed joinpower bug --- .../listener/bukkit/BukkitListener.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/listener/bukkit/BukkitListener.java b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/listener/bukkit/BukkitListener.java index 19be9a565..5a6d8c2de 100644 --- a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/listener/bukkit/BukkitListener.java +++ b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/listener/bukkit/BukkitListener.java @@ -11,6 +11,7 @@ import de.dytanic.cloudnet.bridge.internal.util.ReflectionUtil; import de.dytanic.cloudnet.lib.player.CloudPlayer; import de.dytanic.cloudnet.lib.player.permission.GroupEntityData; +import de.dytanic.cloudnet.lib.player.permission.PermissionGroup; import de.dytanic.cloudnet.lib.server.ServerConfig; import de.dytanic.cloudnet.lib.server.ServerGroupMode; import de.dytanic.cloudnet.lib.utility.document.Document; @@ -124,14 +125,26 @@ public void handleFirst(PlayerLoginEvent event) { CloudPlayer cloudPlayer = CloudServer.getInstance().getCloudPlayers().get(event.getPlayer().getUniqueId()); int joinPower = CloudAPI.getInstance().getServerGroupData(CloudAPI.getInstance().getGroup()).getJoinPower(); + boolean acceptLogin = false; - for (GroupEntityData entityData : cloudPlayer.getPermissionEntity().getGroups()) + + if (CloudAPI.getInstance().getPermissionPool() != null) { - if (CloudAPI.getInstance().getPermissionGroup(entityData.getGroup()).getJoinPower() >= joinPower) - acceptLogin = true; + for (GroupEntityData entityData : cloudPlayer.getPermissionEntity().getGroups()) + { + PermissionGroup permissionGroup = CloudAPI.getInstance().getPermissionGroup(entityData.getGroup()); - if (event.getPlayer().hasPermission("cloudnet.joinpower." + CloudAPI.getInstance().getPermissionGroup(entityData.getGroup()).getJoinPower())) - acceptLogin = true; + if (permissionGroup != null) + { + if (permissionGroup.getJoinPower() >= joinPower) + acceptLogin = true; + } + } + } + + if (event.getPlayer().hasPermission("cloudnet.joinpower." + joinPower)) + { + acceptLogin = true; } if (!acceptLogin) From 85cf75a767c38f071056e08eb9f24294b3d8b292 Mon Sep 17 00:00:00 2001 From: Tarek Date: Mon, 3 Dec 2018 20:29:54 +0100 Subject: [PATCH 15/20] added * permission alias --- .../player/permission/PermissionEntity.java | 95 ++++++++----------- 1 file changed, 41 insertions(+), 54 deletions(-) diff --git a/cloudnet-lib/src/main/java/de/dytanic/cloudnet/lib/player/permission/PermissionEntity.java b/cloudnet-lib/src/main/java/de/dytanic/cloudnet/lib/player/permission/PermissionEntity.java index 3f2642c27..49673af0c 100644 --- a/cloudnet-lib/src/main/java/de/dytanic/cloudnet/lib/player/permission/PermissionEntity.java +++ b/cloudnet-lib/src/main/java/de/dytanic/cloudnet/lib/player/permission/PermissionEntity.java @@ -5,9 +5,8 @@ import lombok.Getter; import lombok.Setter; -import java.util.Arrays; import java.util.Collection; -import java.util.List; +import java.util.Map; import java.util.UUID; /** @@ -17,10 +16,13 @@ @Getter @Setter public class PermissionEntity { + protected UUID uniqueId; + protected java.util.Map permissions; protected String prefix; + @Setter protected String suffix; @@ -33,70 +35,35 @@ public boolean hasPermission(PermissionPool permissionPool, String permission, S if (permissionPool == null || permission == null) return false; - if (checkAdminPermission(permission)) return true; - - String adminPermission = null; - String[] block = permission.split("\\."); - - if (block.length > 1) adminPermission = block[0] + ".*"; - if (permissions.containsKey(permission) && !permissions.get(permission)) return false; - else if (adminPermission != null && permissions.containsKey(adminPermission) && !permissions.get(adminPermission)) - return false; + else if (hasWildcardPermission(permission)) + return true; else if (permissions.containsKey("*") && permissions.get("*")) return true; else if ((permissions.containsKey(permission)) && permissions.get(permission)) return true; - else if (adminPermission != null && permissions.containsKey(adminPermission) && permissions.get(adminPermission)) - return true; for (GroupEntityData implg : groups) { if (!permissionPool.getGroups().containsKey(implg.getGroup())) continue; PermissionGroup permissionGroup = permissionPool.getGroups().get(implg.getGroup()); - if (checkAdminPermission(permissionGroup, permission)) return true; + if (hasWildcardPermission(permissionGroup, permission, group)) return true; - if (checkAccess(permissionGroup, permission, adminPermission, group)) return true; + if (checkAccess(permissionGroup, permission, group)) return true; for (String implGroup : permissionGroup.getImplementGroups()) { if (!permissionPool.getGroups().containsKey(implGroup)) continue; PermissionGroup subGroup = permissionPool.getGroups().get(implGroup); - if (checkAccess(subGroup, permission, adminPermission, group)) return true; + if (checkAccess(subGroup, permission, group)) return true; } - } return false; } - private boolean checkAdminPermission(String permission) - { - List parts = Arrays.asList(permission.split("\\.")); - if (parts.size() < 2) return false; - for (int i = parts.size() - 2; i >= 1; i--) - { - String perm = String.join(".", parts.subList(0, i)) + ".*"; - if (permissions.containsKey(perm)) return permissions.get(perm); - } - return false; - } - - private boolean checkAdminPermission(PermissionGroup permissionGroup, String permission) - { - List parts = Arrays.asList(permission.split("\\.")); - if (parts.size() < 2) return false; - for (int i = parts.size() - 2; i >= 1; i--) - { - String perm = String.join(".", parts.subList(0, i)) + ".*"; - if (permissionGroup.permissions.containsKey(perm)) - return permissionGroup.permissions.get(perm); - } - return false; - } - public PermissionGroup getHighestPermissionGroup(PermissionPool permissionPool) { PermissionGroup permissionGroup = null; @@ -128,27 +95,47 @@ public void setPrefix(String prefix) /*= -------------------------------------------------------------------------------- =*/ - private boolean checkAccess(PermissionGroup permissionGroup, String permission, String adminPermission, String group) + private boolean hasWildcardPermission(PermissionGroup permissionGroup, String permission, String group) + { + for (Map.Entry entry : permissionGroup.getPermissions().entrySet()) + if (entry.getKey().endsWith("*") && entry.getKey().length() > 1 && permission.startsWith(entry.getKey().substring(0, entry.getKey().length() - 1))) + return true; + + if (group != null && permissionGroup.getServerGroupPermissions().containsKey(group)) + for (String perms : permissionGroup.getServerGroupPermissions().get(group)) + if (perms.endsWith("*") && perms.length() > 1 && permission.startsWith(perms.substring(0, perms.length() - 1))) + return true; + + return false; + } + + private boolean hasWildcardPermission(String permission) { - if ((adminPermission != null && (permissionGroup.getPermissions().containsKey(adminPermission) && - !permissionGroup.getPermissions().get(adminPermission))) || - (permissionGroup.getPermissions().containsKey("*") && !permissionGroup.getPermissions().get("*")) || + for (Map.Entry entry : getPermissions().entrySet()) + if (entry.getKey().endsWith("*") && entry.getKey().length() > 1 && permission.startsWith(entry.getKey().substring(0, entry.getKey().length() - 1))) + return true; + + return false; + } + + private boolean checkAccess(PermissionGroup permissionGroup, String permission, String group) + { + if ((permissionGroup.getPermissions().containsKey("*") && !permissionGroup.getPermissions().get("*")) || (permissionGroup.getPermissions().containsKey(permission) && !permissionGroup.getPermissions().get(permission))) return false; if ((permissionGroup.getPermissions().containsKey("*") && permissionGroup.getPermissions().get("*"))) return true; - if ((permissionGroup.getPermissions().containsKey(permission) && permissionGroup.getPermissions().get(permission)) || - (adminPermission != null && (permissionGroup.getPermissions().containsKey(adminPermission) && permissionGroup.getPermissions().get(adminPermission)))) + if ((permissionGroup.getPermissions().containsKey(permission) && permissionGroup.getPermissions().get(permission))) return true; - if (permissionGroup.getServerGroupPermissions().containsKey(group)) - { - return permissionGroup.getServerGroupPermissions().get(group).contains(permission) || - permissionGroup.getServerGroupPermissions().get(group).contains("*") - || (adminPermission != null && permissionGroup.getServerGroupPermissions().get(group).contains(adminPermission)); - } + if (group != null) + if (permissionGroup.getServerGroupPermissions().containsKey(group)) + { + return permissionGroup.getServerGroupPermissions().get(group).contains(permission) || + permissionGroup.getServerGroupPermissions().get(group).contains("*"); + } return false; } From e6536bfb90d53482969034fe261a16f70b4454cb Mon Sep 17 00:00:00 2001 From: Tarek Date: Wed, 5 Dec 2018 17:14:53 +0100 Subject: [PATCH 16/20] removed hose and taco spigot support cause both of them won't be updated anymore --- .../setup/SetupSpigotVersion.java | 63 +------------------ 1 file changed, 1 insertion(+), 62 deletions(-) diff --git a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java b/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java index e84873ba4..b68d0540e 100644 --- a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java +++ b/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java @@ -48,7 +48,7 @@ public void run(ConsoleReader reader) { System.out.println("No spigot.jar has been found!"); - System.out.println("Choose a minecraft server version [\"taco\", \"paper\", \"hose\", \"spigot\"]"); + System.out.println("Choose a minecraft server version [\"paper\", \"spigot\"]"); String answer = null; @@ -66,18 +66,12 @@ public void run(ConsoleReader reader) input = reader.readLine(); switch (input.toLowerCase()) { - case "taco": - answer = "taco"; - break; case "spigot": answer = "spigot"; break; case "paper": answer = "paper"; break; - case "hose": - answer = "hose"; - break; default: System.out.println("This version is not supported!"); } @@ -95,32 +89,6 @@ public void run(ConsoleReader reader) switch (answer) { - case "taco": - System.out.println("Choose a TacoSpigot version [\"1.8.8\", \"1.11.2\", \"1.12.2\"]"); - while (true) - { - try - { - switch (reader.readLine().toLowerCase()) - { - case "1.8.8": - download.run("https://yivesmirror.com/files/tacospigot/TacoSpigot-1.8.8-b31.jar"); - return; - case "1.11.2": - download.run("https://yivesmirror.com/files/tacospigot/TacoSpigot-1.11.2-b102.jar"); - return; - case "1.12.2": - download.run("https://yivesmirror.com/files/tacospigot/TacoSpigot-1.12.2-b114.jar"); - return; - default: - System.out.println("This version is not supported!"); - break; - } - } catch (IOException e) - { - e.printStackTrace(); - } - } case "spigot": System.out.println("Choose a Spigot version [\"1.7.10\", \"1.8.8\", \"1.9.4\", \"1.10.2\", \"1.11.2\", \"1.12.2\", \"1.13\", \"1.13.1\", \"1.13.2\"]"); while (true) @@ -194,35 +162,6 @@ public void run(ConsoleReader reader) e.printStackTrace(); } } - case "hose": - System.out.println("Choose a Hose version [\"1.8.8\", \"1.9.4\", \"1.10.2\", \"1.11.2\"]"); - while (true) - { - try - { - switch (reader.readLine().toLowerCase()) - { - case "1.8.8": - download.run("https://yivesmirror.com/files/hose/hose-1.8.8.jar"); - return; - case "1.9.4": - download.run("https://yivesmirror.com/files/hose/hose-1.9.4.jar"); - return; - case "1.10.2": - download.run("https://yivesmirror.com/files/hose/hose-1.10.2.jar"); - return; - case "1.11.2": - download.run("https://yivesmirror.com/files/hose/hose-1.11.2.jar"); - return; - default: - System.out.println("This version is not supported!"); - break; - } - } catch (IOException e) - { - e.printStackTrace(); - } - } } } } From 657e6e3657ae8b0df1319d0fe5b7829eb9f893d4 Mon Sep 17 00:00:00 2001 From: Tarek Date: Wed, 5 Dec 2018 19:15:08 +0100 Subject: [PATCH 17/20] removed paper for a soon update --- .../de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java b/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java index b68d0540e..8c3ddaa3f 100644 --- a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java +++ b/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/setup/SetupSpigotVersion.java @@ -48,7 +48,7 @@ public void run(ConsoleReader reader) { System.out.println("No spigot.jar has been found!"); - System.out.println("Choose a minecraft server version [\"paper\", \"spigot\"]"); + System.out.println("Choose a minecraft server version [\"paper\" (coming soon), \"spigot\"]"); String answer = null; @@ -133,6 +133,7 @@ public void run(ConsoleReader reader) e.printStackTrace(); } } + /* case "paper": System.out.println("Choose a PaperSpigot version [\"1.8.8\", \"1.11.2\", \"1.12.2\", \"1.13.1\", \"1.13.2\"]"); while (true) @@ -162,6 +163,7 @@ public void run(ConsoleReader reader) e.printStackTrace(); } } + */ } } } From f2a2da28b25f2cc6b75fcd4bdfa88e827d634192 Mon Sep 17 00:00:00 2001 From: Tarek Date: Wed, 5 Dec 2018 20:01:56 +0100 Subject: [PATCH 18/20] added fix for screen system + non blocking screen system --- .../cloudnetwrapper/CloudNetWrapper.java | 6 +- .../handlers/ReadConsoleLogHandler.java | 73 +++++++++++++++++++ .../network/packet/in/PacketInScreen.java | 9 +-- .../cloudnetwrapper/screen/ScreenLoader.java | 56 -------------- .../screen/ScreenProvider.java | 49 ------------- 5 files changed, 78 insertions(+), 115 deletions(-) create mode 100644 cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/handlers/ReadConsoleLogHandler.java delete mode 100644 cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/screen/ScreenLoader.java delete mode 100644 cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/screen/ScreenProvider.java diff --git a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/CloudNetWrapper.java b/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/CloudNetWrapper.java index aee1d55ea..db2752693 100644 --- a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/CloudNetWrapper.java +++ b/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/CloudNetWrapper.java @@ -22,13 +22,13 @@ import de.dytanic.cloudnet.web.client.WebClient; import de.dytanic.cloudnetwrapper.command.*; import de.dytanic.cloudnetwrapper.handlers.IWrapperHandler; +import de.dytanic.cloudnetwrapper.handlers.ReadConsoleLogHandler; import de.dytanic.cloudnetwrapper.handlers.StopTimeHandler; import de.dytanic.cloudnetwrapper.network.packet.in.*; import de.dytanic.cloudnetwrapper.network.packet.out.PacketOutSetReadyWrapper; import de.dytanic.cloudnetwrapper.network.packet.out.PacketOutUpdateCPUUsage; import de.dytanic.cloudnetwrapper.network.packet.out.PacketOutUpdateWrapperInfo; import de.dytanic.cloudnetwrapper.network.packet.out.PacketOutWrapperScreen; -import de.dytanic.cloudnetwrapper.screen.ScreenProvider; import de.dytanic.cloudnetwrapper.server.BungeeCord; import de.dytanic.cloudnetwrapper.server.CloudGameServer; import de.dytanic.cloudnetwrapper.server.GameServer; @@ -56,7 +56,6 @@ public final class CloudNetWrapper implements Executable, Runnable, ShutdownOnCe private final CloudLogger cloudNetLogging; private final CloudNetWrapperConfig wrapperConfig; private final Scheduler scheduler = new Scheduler(40); - private final ScreenProvider screenProvider = new ScreenProvider(); private final CommandManager commandManager = new CommandManager(); private final WebClient webClient = new WebClient(); private Auth auth; @@ -180,9 +179,10 @@ public boolean bootstrap() throws Exception //Server Handlers { networkConnection.sendPacket(new PacketOutSetReadyWrapper(true)); - IWrapperHandler iWrapperHandler = new StopTimeHandler(); + IWrapperHandler iWrapperHandler = new StopTimeHandler(), readConsoleLogWrapperHandler = new ReadConsoleLogHandler(); scheduler.runTaskRepeatSync(iWrapperHandler.toExecutor(), 0, iWrapperHandler.getTicks()); + scheduler.runTaskRepeatSync(readConsoleLogWrapperHandler.toExecutor(), 0, readConsoleLogWrapperHandler.getTicks()); scheduler.runTaskRepeatAsync(new Runnable() { @Override diff --git a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/handlers/ReadConsoleLogHandler.java b/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/handlers/ReadConsoleLogHandler.java new file mode 100644 index 000000000..0850c3a6c --- /dev/null +++ b/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/handlers/ReadConsoleLogHandler.java @@ -0,0 +1,73 @@ +package de.dytanic.cloudnetwrapper.handlers; + +import de.dytanic.cloudnet.lib.server.screen.ScreenInfo; +import de.dytanic.cloudnetwrapper.CloudNetWrapper; +import de.dytanic.cloudnetwrapper.network.packet.out.PacketOutSendScreenLine; +import de.dytanic.cloudnetwrapper.server.BungeeCord; +import de.dytanic.cloudnetwrapper.server.CloudGameServer; +import de.dytanic.cloudnetwrapper.server.GameServer; +import de.dytanic.cloudnetwrapper.server.process.ServerDispatcher; + +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.Collections; + +public final class ReadConsoleLogHandler implements IWrapperHandler { + + private final StringBuffer stringBuffer = new StringBuffer(); + + private final byte[] buffer = new byte[1024]; + + private int len; + + @Override + public void run(CloudNetWrapper obj) + { + for (CloudGameServer cloudGameServer : obj.getCloudServers().values()) + if (cloudGameServer.isAlive() && cloudGameServer.getInstance() != null) + readConsoleLog(cloudGameServer); + + for (BungeeCord bungeeCord : obj.getProxys().values()) + if (bungeeCord.isAlive() && bungeeCord.getInstance() != null) + readConsoleLog(bungeeCord); + + for (GameServer gameServer : obj.getServers().values()) + if (gameServer.isAlive() && gameServer.getInstance() != null) + readConsoleLog(gameServer); + } + + private void readConsoleLog(ServerDispatcher server) + { + if (server.getInstance().isAlive() && server.getInstance().getInputStream() != null) + { + try + { + + InputStream inputStream = server.getInstance().getInputStream(); + + while (inputStream.available() > 0 && (len = inputStream.read(buffer, 0, buffer.length)) != -1) + stringBuffer.append(new String(buffer, 0, len, StandardCharsets.UTF_8)); + + for (String input : stringBuffer.toString().split("\r")) + for (String text : input.split("\n")) + if (!text.trim().isEmpty()) + { + CloudNetWrapper.getInstance().getNetworkConnection() + .sendPacket(new PacketOutSendScreenLine(Collections.singletonList(new ScreenInfo(server.getServiceId(), input)))); + } + + } catch (Exception ignored) + { + } finally + { + stringBuffer.setLength(0); + } + } + } + + @Override + public int getTicks() + { + return 40; + } +} \ No newline at end of file diff --git a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/network/packet/in/PacketInScreen.java b/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/network/packet/in/PacketInScreen.java index 131cbf5b9..85da11c83 100644 --- a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/network/packet/in/PacketInScreen.java +++ b/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/network/packet/in/PacketInScreen.java @@ -4,22 +4,16 @@ package de.dytanic.cloudnetwrapper.network.packet.in; -import com.google.gson.reflect.TypeToken; -import de.dytanic.cloudnet.lib.DefaultType; import de.dytanic.cloudnet.lib.network.protocol.packet.PacketInHandler; import de.dytanic.cloudnet.lib.network.protocol.packet.PacketSender; -import de.dytanic.cloudnet.lib.server.info.ProxyInfo; -import de.dytanic.cloudnet.lib.server.info.ServerInfo; import de.dytanic.cloudnet.lib.utility.document.Document; -import de.dytanic.cloudnetwrapper.CloudNetWrapper; -import de.dytanic.cloudnetwrapper.server.BungeeCord; -import de.dytanic.cloudnetwrapper.server.GameServer; public final class PacketInScreen extends PacketInHandler { @Override public void handleInput(Document data, PacketSender packetSender) { + /* if (data.getObject("type", DefaultType.class) != DefaultType.BUNGEE_CORD) { ServerInfo server = data.getObject("serverInfo", new TypeToken() { @@ -45,5 +39,6 @@ else if (CloudNetWrapper.getInstance().getScreenProvider().contains(gameServer)) CloudNetWrapper.getInstance().getScreenProvider().cancel(gameServer); } } + */ } } \ No newline at end of file diff --git a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/screen/ScreenLoader.java b/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/screen/ScreenLoader.java deleted file mode 100644 index 812d80f4c..000000000 --- a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/screen/ScreenLoader.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) Tarek Hosni El Alaoui 2017 - */ - -package de.dytanic.cloudnetwrapper.screen; - -import de.dytanic.cloudnet.lib.server.screen.ScreenInfo; -import de.dytanic.cloudnetwrapper.CloudNetWrapper; -import de.dytanic.cloudnetwrapper.network.packet.out.PacketOutSendScreenLine; -import lombok.Getter; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.nio.charset.StandardCharsets; -import java.util.Arrays; - -@Getter -public class ScreenLoader implements Runnable { - - private Thread thread; - - private Screenable screenable; - - public ScreenLoader(Screenable screenable) - { - this.screenable = screenable; - } - - @Override - public void run() - { - this.thread = Thread.currentThread(); - String input; - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader( - screenable.getInstance().getInputStream(), StandardCharsets.UTF_8) - ); - try - { - while ((input = bufferedReader.readLine()) != null) - { - CloudNetWrapper.getInstance().getNetworkConnection() - .sendPacket(new PacketOutSendScreenLine(Arrays.asList( - new ScreenInfo(screenable.getServiceId(), input) - ))); - } - } catch (IOException e) - { - } - } - - public void cancel() - { - thread.stop(); - } -} \ No newline at end of file diff --git a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/screen/ScreenProvider.java b/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/screen/ScreenProvider.java deleted file mode 100644 index 52b14859b..000000000 --- a/cloudnet-wrapper/src/main/java/de/dytanic/cloudnetwrapper/screen/ScreenProvider.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) Tarek Hosni El Alaoui 2017 - */ - -package de.dytanic.cloudnetwrapper.screen; - - -import de.dytanic.cloudnet.lib.NetworkUtils; - -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -public final class ScreenProvider { - - private final java.util.Map loads = NetworkUtils.newConcurrentHashMap(); - private final ExecutorService executorService = Executors.newCachedThreadPool(); - - public void putScreenRequest(Screenable screenable) - { - ScreenLoader screenLoader = new ScreenLoader(screenable); - executorService.execute(screenLoader); - loads.put(screenable, screenLoader); - } - - public void cancel(Screenable screenable) - { - if (loads.containsKey(screenable)) - { - loads.get(screenable).cancel(); - loads.remove(screenable); - } - } - - public boolean contains(Screenable screenable) - { - return loads.containsKey(screenable); - } - - public void shutdown() - { - for (Screenable screenable : loads.keySet()) - { - cancel(screenable); - } - - loads.clear(); - executorService.shutdownNow(); - } -} \ No newline at end of file From 123e7b07d8cb6c4db4c1469a91e92d4ef8f341a0 Mon Sep 17 00:00:00 2001 From: Tarek Date: Wed, 5 Dec 2018 20:03:17 +0100 Subject: [PATCH 19/20] updated version string to 2.1.14 --- Jenkinsfile | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 48a0f0460..84c217ea3 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -15,7 +15,7 @@ pipeline { } stage('Version') { steps { - sh 'mvn versions:set -DnewVersion=2.1.13.1' + sh 'mvn versions:set -DnewVersion=2.1.14' } } stage('Compile') { diff --git a/pom.xml b/pom.xml index aa64a8613..1b6a55715 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ 1.8 UTF-8 UTF-8 - 2.1.13.1 + 2.1.14 RELEASE 1.18.4 From e1abd2fce46bd2be25b0677d0f52ba67c1d10295 Mon Sep 17 00:00:00 2001 From: Tarek Date: Wed, 5 Dec 2018 20:14:20 +0100 Subject: [PATCH 20/20] set url to default bungeecord --- .../dytanic/cloudnet/lib/server/version/ProxyVersion.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cloudnet-lib/src/main/java/de/dytanic/cloudnet/lib/server/version/ProxyVersion.java b/cloudnet-lib/src/main/java/de/dytanic/cloudnet/lib/server/version/ProxyVersion.java index 629a2a846..374a51da4 100644 --- a/cloudnet-lib/src/main/java/de/dytanic/cloudnet/lib/server/version/ProxyVersion.java +++ b/cloudnet-lib/src/main/java/de/dytanic/cloudnet/lib/server/version/ProxyVersion.java @@ -20,10 +20,16 @@ public static MultiValue url(ProxyVersion proxyVersion) { switch (proxyVersion) { + /* case TRAVERTINE: return new MultiValue<>("https://yivesmirror.com/files/travertine/Travertine-latest.jar", "Travertine.jar"); case HEXACORD: return new MultiValue<>("https://yivesmirror.com/files/hexacord/HexaCord-v216.jar", "HexaCord.jar"); + */ + case TRAVERTINE: + return new MultiValue<>("https://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/bootstrap/target/BungeeCord.jar", "Travertine.jar"); + case HEXACORD: + return new MultiValue<>("https://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/bootstrap/target/BungeeCord.jar", "HexaCord.jar"); case WATERFALL: return new MultiValue<>("https://ci.destroystokyo.com/job/Waterfall/lastSuccessfulBuild/artifact/Waterfall-Proxy/bootstrap/target/Waterfall.jar", "Waterfall.jar"); default: