diff --git a/.template/CloudNet-Master/start.sh b/.template/CloudNet-Master/start.sh
index 3c7fec14b..1f92debff 100644
--- a/.template/CloudNet-Master/start.sh
+++ b/.template/CloudNet-Master/start.sh
@@ -1,2 +1,2 @@
#!/bin/sh
-screen -S CloudNet java -XX:+UseG1GC -XX:MaxGCPauseMillis=50 -XX:CompileThreshold=100 -XX:MaxPermSize=256M -Xmx128m -jar CloudNet-Master.jar
\ No newline at end of file
+screen -RS CloudNet java -XX:+UseG1GC -XX:MaxGCPauseMillis=50 -XX:CompileThreshold=100 -XX:MaxPermSize=256M -Xmx128m -jar CloudNet-Master.jar
diff --git a/.template/CloudNet-Wrapper/start.sh b/.template/CloudNet-Wrapper/start.sh
index 16fc61d39..4171d98f7 100644
--- a/.template/CloudNet-Wrapper/start.sh
+++ b/.template/CloudNet-Wrapper/start.sh
@@ -1,2 +1,2 @@
#!/bin/sh
-screen -S Wrapper-1 java -XX:+UseG1GC -XX:MaxGCPauseMillis=50 -XX:CompileThreshold=100 -XX:MaxPermSize=256M -Xmx64m -jar CloudNet-Wrapper.jar
+screen -RS Wrapper-1 java -XX:+UseG1GC -XX:MaxGCPauseMillis=50 -XX:CompileThreshold=100 -XX:MaxPermSize=256M -Xmx64m -jar CloudNet-Wrapper.jar
diff --git a/Jenkinsfile b/Jenkinsfile
index d970da20a..cbd256d92 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -15,7 +15,7 @@ pipeline {
}
stage('Version') {
steps {
- sh 'mvn versions:set -DnewVersion=2.1.14.3'
+ sh 'mvn versions:set -DnewVersion=2.1.15'
}
}
stage('Compile') {
diff --git a/README.md b/README.md
index fa494b68b..9ee961af1 100644
--- a/README.md
+++ b/README.md
@@ -35,9 +35,9 @@ Use of KVM virtualization or dedicated servers is recommended.
### Support
- * Spigot-Support » 1.7.10 - 1.13.2
+ * Spigot-Support » 1.7.10 - 1.14
* PaperSpigot, TacoSpigot, Hose, Torch
- * BungeeCord-Support » 1.7.10 - 1.13.2
+ * BungeeCord-Support » 1.7.10 - 1.14
* Flexpipe, HexaCord, Waterfall, TraverTine
### Discord
@@ -61,14 +61,14 @@ Maven:
de.dytanic.cloudnet
cloudnet-api-bridge
- 2.1.14
+ 2.1.15
provided
de.dytanic.cloudnet
cloudnet-core
- 2.1.14
+ 2.1.15
provided
diff --git a/cloudnet-api/cloudnet-api-bridge/pom.xml b/cloudnet-api/cloudnet-api-bridge/pom.xml
index 2595274bb..13b65c8e0 100644
--- a/cloudnet-api/cloudnet-api-bridge/pom.xml
+++ b/cloudnet-api/cloudnet-api-bridge/pom.xml
@@ -15,8 +15,8 @@
- vault-repo
- http://nexus.hc.to/content/repositories/pub_releases
+ jitpack.io
+ https://jitpack.io
@@ -28,10 +28,28 @@
compile
- net.milkbowl.vault
+ org.apache.logging.log4j
+ log4j-api
+ 2.11.2
+ provided
+
+
+ org.apache.logging.log4j
+ log4j-core
+ 2.11.2
+ provided
+
+
+ com.github.MilkBowl
VaultAPI
${dependency.vaultapi.version}
provided
+
+
+ org.bukkit
+ bukkit
+
+
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 7f0a9eccd..4fd233d7a 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
@@ -1,191 +1,193 @@
-/*
- * Copyright (c) Tarek Hosni El Alaoui 2017
- */
-
-package de.dytanic.cloudnet.bridge;
-
-import de.dytanic.cloudnet.api.CloudAPI;
-import de.dytanic.cloudnet.api.config.CloudConfigLoader;
-import de.dytanic.cloudnet.api.config.ConfigTypeLoader;
-import de.dytanic.cloudnet.bridge.event.bukkit.BukkitCloudServerInitEvent;
-import de.dytanic.cloudnet.bridge.internal.command.bukkit.CommandCloudServer;
-import de.dytanic.cloudnet.bridge.internal.command.bukkit.CommandResource;
-import de.dytanic.cloudnet.bridge.internal.listener.bukkit.BukkitListener;
-import de.dytanic.cloudnet.bridge.internal.serverselectors.MobSelector;
-import de.dytanic.cloudnet.bridge.internal.serverselectors.SignSelector;
-import de.dytanic.cloudnet.bridge.internal.serverselectors.packet.in.PacketInMobSelector;
-import de.dytanic.cloudnet.bridge.internal.serverselectors.packet.in.PacketInSignSelector;
-import de.dytanic.cloudnet.lib.network.protocol.packet.PacketRC;
-import de.dytanic.cloudnet.lib.server.ServerGroupMode;
-import org.bukkit.Bukkit;
-import org.bukkit.World;
-import org.bukkit.entity.Player;
-import org.bukkit.event.server.ServerListPingEvent;
-import org.bukkit.plugin.java.JavaPlugin;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.net.InetSocketAddress;
-import java.nio.file.Paths;
-
-/**
- * Created by Tareko on 17.08.2017.
- */
-public final class BukkitBootstrap extends JavaPlugin implements Runnable {
-
- @Override
- public void onLoad()
- {
- CloudAPI cloudAPI = new CloudAPI(new CloudConfigLoader(Paths.get("CLOUD/connection.json"), Paths.get("CLOUD/config.json"), ConfigTypeLoader.INTERNAL), this);
- cloudAPI.getNetworkConnection().getPacketManager().registerHandler(PacketRC.SERVER_SELECTORS + 1, PacketInSignSelector.class);
- cloudAPI.getNetworkConnection().getPacketManager().registerHandler(PacketRC.SERVER_SELECTORS + 2, PacketInMobSelector.class);
- }
-
- @Override
- public void onEnable()
- {
- new CloudServer(this, CloudAPI.getInstance());
-
- CloudAPI.getInstance().bootstrap();
- checkRegistryAccess();
-
- try
- {
- Field field = Class.forName("org.spigotmc.AsyncCatcher").getDeclaredField("enabled");
- field.setAccessible(true);
- field.set(null, false);
- } catch (Exception ex)
- {
- }
-
- getServer().getPluginManager().registerEvents(new BukkitListener(), this);
-
- CloudServer.getInstance().registerCommand(new CommandResource());
- getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
- getServer().getMessenger().registerOutgoingPluginChannel(this, "cloudnet:main");
-
- enableTasks();
- loadPlayers();
- }
-
- @Override
- public void onDisable()
- {
-
- getServer().getMessenger().unregisterOutgoingPluginChannel(this);
-
- if (CloudAPI.getInstance() != null)
- {
- CloudServer.getInstance().updateDisable();
- CloudAPI.getInstance().shutdown();
- }
-
- CloudAPI.getInstance().getNetworkHandlerProvider().clear();
-
- if (SignSelector.getInstance() != null && SignSelector.getInstance().getWorker() != null)
- SignSelector.getInstance().getWorker().stop();
-
- if (MobSelector.getInstance() != null)
- MobSelector.getInstance().shutdown();
-
- Bukkit.getScheduler().cancelTasks(this);
- }
-
- @Deprecated
- @Override
- public void run()
- {
- getServer().getPluginManager().disablePlugin(this);
- Bukkit.shutdown();
- }
-
- private void checkRegistryAccess()
- {
- try
- {
- Class.forName("net.md_5.bungee.api.chat.BaseComponent");
- Class.forName("de.dytanic.cloudnet.bridge.internal.chat.DocumentRegistry").getMethod("fire").invoke(null);
- } catch (Exception ignored)
- {
- }
- }
-
- private void loadPlayers()
- {
- for (Player all : getServer().getOnlinePlayers())
- CloudServer.getInstance().getPlayerAndCache(all.getUniqueId());
- }
-
- private void enableTasks()
- {
- Bukkit.getScheduler().runTask(this, new Runnable() {
- @Override
- public void run()
- {
- if (CloudServer.getInstance().getGroupData() != null)
- {
- if (CloudAPI.getInstance().getServerGroupData(CloudAPI.getInstance().getGroup()).getMode().equals(ServerGroupMode.LOBBY) ||
- CloudAPI.getInstance().getServerGroupData(CloudAPI.getInstance().getGroup()).getMode().equals(ServerGroupMode.STATIC_LOBBY))
- {
- CommandCloudServer server = new CommandCloudServer();
-
- getCommand("cloudserver").setExecutor(server);
- getCommand("cloudserver").setPermission("cloudnet.command.cloudserver");
- getCommand("cloudserver").setTabCompleter(server);
- }
-
- Bukkit.getPluginManager().callEvent(new BukkitCloudServerInitEvent(CloudServer.getInstance()));
- CloudServer.getInstance().update();
-
- if (CloudAPI.getInstance().getServerGroupData(CloudAPI.getInstance().getGroup()).getAdvancedServerConfig().isDisableAutoSavingForWorlds())
- for (World world : Bukkit.getWorlds())
- world.setAutoSave(false);
- }
-
- if (CloudServer.getInstance().getGroupData() != null)
- {
- getServer().getScheduler().runTaskTimer(BukkitBootstrap.this, new Runnable() {
- @Override
- public void run()
- {
- try
- {
- ServerListPingEvent serverListPingEvent = new ServerListPingEvent(
- new InetSocketAddress("127.0.0.1", 53345).getAddress(),
- CloudServer.getInstance().getMotd(), Bukkit.getOnlinePlayers().size(), CloudServer.getInstance().getMaxPlayers()
- );
- Bukkit.getPluginManager().callEvent(serverListPingEvent);
- if (!serverListPingEvent.getMotd().equals(CloudServer.getInstance().getMotd()))
- {
- CloudServer.getInstance().setMotd(serverListPingEvent.getMotd());
- if (serverListPingEvent.getMotd().toLowerCase().contains("running") || serverListPingEvent.getMotd().toLowerCase().contains("ingame"))
- {
- CloudServer.getInstance().changeToIngame();
- }
- }
-
- if (serverListPingEvent.getMaxPlayers() != CloudServer.getInstance().getMaxPlayers())
- {
- CloudServer.getInstance().setMaxPlayers(serverListPingEvent.getMaxPlayers());
- }
- } catch (Exception ex)
- {
- }
- }
- }, 0, 5);
- }
-
- if (CloudAPI.getInstance().getPermissionPool() != null &&
- (getServer().getPluginManager().isPluginEnabled("VaultAPI") || getServer().getPluginManager().isPluginEnabled("Vault")))
- try
- {
- Class.forName("de.dytanic.cloudnet.bridge.vault.VaultInvoker").getMethod("invoke").invoke(null);
- } catch (IllegalAccessException | ClassNotFoundException | NoSuchMethodException | InvocationTargetException e)
- {
- e.printStackTrace();
- }
- }
- });
- }
-
-}
+/*
+ * Copyright (c) Tarek Hosni El Alaoui 2017
+ */
+
+package de.dytanic.cloudnet.bridge;
+
+import de.dytanic.cloudnet.api.CloudAPI;
+import de.dytanic.cloudnet.api.config.CloudConfigLoader;
+import de.dytanic.cloudnet.api.config.ConfigTypeLoader;
+import de.dytanic.cloudnet.bridge.event.bukkit.BukkitCloudServerInitEvent;
+import de.dytanic.cloudnet.bridge.internal.command.bukkit.CommandCloudServer;
+import de.dytanic.cloudnet.bridge.internal.command.bukkit.CommandResource;
+import de.dytanic.cloudnet.bridge.internal.listener.bukkit.BukkitListener;
+import de.dytanic.cloudnet.bridge.internal.serverselectors.MobSelector;
+import de.dytanic.cloudnet.bridge.internal.serverselectors.SignSelector;
+import de.dytanic.cloudnet.bridge.internal.serverselectors.packet.in.PacketInMobSelector;
+import de.dytanic.cloudnet.bridge.internal.serverselectors.packet.in.PacketInSignSelector;
+import de.dytanic.cloudnet.lib.network.protocol.packet.PacketRC;
+import de.dytanic.cloudnet.lib.server.ServerGroupMode;
+import org.bukkit.Bukkit;
+import org.bukkit.World;
+import org.bukkit.entity.Player;
+import org.bukkit.event.server.ServerListPingEvent;
+import org.bukkit.plugin.java.JavaPlugin;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.net.InetSocketAddress;
+import java.nio.file.Paths;
+
+/**
+ * Created by Tareko on 17.08.2017.
+ */
+public final class BukkitBootstrap extends JavaPlugin implements Runnable {
+
+ @Override
+ public void onLoad()
+ {
+ CloudAPI cloudAPI = new CloudAPI(new CloudConfigLoader(Paths.get("CLOUD/connection.json"), Paths.get("CLOUD/config.json"), ConfigTypeLoader.INTERNAL), this);
+ cloudAPI.getNetworkConnection().getPacketManager().registerHandler(PacketRC.SERVER_SELECTORS + 1, PacketInSignSelector.class);
+ cloudAPI.getNetworkConnection().getPacketManager().registerHandler(PacketRC.SERVER_SELECTORS + 2, PacketInMobSelector.class);
+
+ cloudAPI.setLogger(getLogger());
+ }
+
+ @Override
+ public void onEnable()
+ {
+ new CloudServer(this, CloudAPI.getInstance());
+
+ CloudAPI.getInstance().bootstrap();
+ checkRegistryAccess();
+
+ try
+ {
+ Field field = Class.forName("org.spigotmc.AsyncCatcher").getDeclaredField("enabled");
+ field.setAccessible(true);
+ field.set(null, false);
+ } catch (Exception ex)
+ {
+ }
+
+ getServer().getPluginManager().registerEvents(new BukkitListener(), this);
+
+ CloudServer.getInstance().registerCommand(new CommandResource());
+ getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
+ getServer().getMessenger().registerOutgoingPluginChannel(this, "cloudnet:main");
+
+ enableTasks();
+ loadPlayers();
+ }
+
+ @Override
+ public void onDisable()
+ {
+
+ getServer().getMessenger().unregisterOutgoingPluginChannel(this);
+
+ if (CloudAPI.getInstance() != null)
+ {
+ CloudServer.getInstance().updateDisable();
+ CloudAPI.getInstance().shutdown();
+ }
+
+ CloudAPI.getInstance().getNetworkHandlerProvider().clear();
+
+ if (SignSelector.getInstance() != null && SignSelector.getInstance().getWorker() != null)
+ SignSelector.getInstance().getWorker().stop();
+
+ if (MobSelector.getInstance() != null)
+ MobSelector.getInstance().shutdown();
+
+ Bukkit.getScheduler().cancelTasks(this);
+ }
+
+ @Deprecated
+ @Override
+ public void run()
+ {
+ getServer().getPluginManager().disablePlugin(this);
+ Bukkit.shutdown();
+ }
+
+ private void checkRegistryAccess()
+ {
+ try
+ {
+ Class.forName("net.md_5.bungee.api.chat.BaseComponent");
+ Class.forName("de.dytanic.cloudnet.bridge.internal.chat.DocumentRegistry").getMethod("fire").invoke(null);
+ } catch (Exception ignored)
+ {
+ }
+ }
+
+ private void loadPlayers()
+ {
+ for (Player all : getServer().getOnlinePlayers())
+ CloudServer.getInstance().getPlayerAndCache(all.getUniqueId());
+ }
+
+ private void enableTasks()
+ {
+ Bukkit.getScheduler().runTask(this, new Runnable() {
+ @Override
+ public void run()
+ {
+ if (CloudServer.getInstance().getGroupData() != null)
+ {
+ if (CloudAPI.getInstance().getServerGroupData(CloudAPI.getInstance().getGroup()).getMode().equals(ServerGroupMode.LOBBY) ||
+ CloudAPI.getInstance().getServerGroupData(CloudAPI.getInstance().getGroup()).getMode().equals(ServerGroupMode.STATIC_LOBBY))
+ {
+ CommandCloudServer server = new CommandCloudServer();
+
+ getCommand("cloudserver").setExecutor(server);
+ getCommand("cloudserver").setPermission("cloudnet.command.cloudserver");
+ getCommand("cloudserver").setTabCompleter(server);
+ }
+
+ Bukkit.getPluginManager().callEvent(new BukkitCloudServerInitEvent(CloudServer.getInstance()));
+ CloudServer.getInstance().update();
+
+ if (CloudAPI.getInstance().getServerGroupData(CloudAPI.getInstance().getGroup()).getAdvancedServerConfig().isDisableAutoSavingForWorlds())
+ for (World world : Bukkit.getWorlds())
+ world.setAutoSave(false);
+ }
+
+ if (CloudServer.getInstance().getGroupData() != null)
+ {
+ getServer().getScheduler().runTaskTimer(BukkitBootstrap.this, new Runnable() {
+ @Override
+ public void run()
+ {
+ try
+ {
+ ServerListPingEvent serverListPingEvent = new ServerListPingEvent(
+ new InetSocketAddress("127.0.0.1", 53345).getAddress(),
+ CloudServer.getInstance().getMotd(), Bukkit.getOnlinePlayers().size(), CloudServer.getInstance().getMaxPlayers()
+ );
+ Bukkit.getPluginManager().callEvent(serverListPingEvent);
+ if (!serverListPingEvent.getMotd().equals(CloudServer.getInstance().getMotd()))
+ {
+ CloudServer.getInstance().setMotd(serverListPingEvent.getMotd());
+ if (serverListPingEvent.getMotd().toLowerCase().contains("running") || serverListPingEvent.getMotd().toLowerCase().contains("ingame"))
+ {
+ CloudServer.getInstance().changeToIngame();
+ }
+ }
+
+ if (serverListPingEvent.getMaxPlayers() != CloudServer.getInstance().getMaxPlayers())
+ {
+ CloudServer.getInstance().setMaxPlayers(serverListPingEvent.getMaxPlayers());
+ }
+ } catch (Exception ex)
+ {
+ }
+ }
+ }, 0, 5);
+ }
+
+ if (CloudAPI.getInstance().getPermissionPool() != null &&
+ (getServer().getPluginManager().isPluginEnabled("VaultAPI") || getServer().getPluginManager().isPluginEnabled("Vault")))
+ try
+ {
+ Class.forName("de.dytanic.cloudnet.bridge.vault.VaultInvoker").getMethod("invoke").invoke(null);
+ } catch (IllegalAccessException | ClassNotFoundException | NoSuchMethodException | InvocationTargetException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ });
+ }
+
+}
diff --git a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/CloudServer.java b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/CloudServer.java
index a11c603b4..53b322e95 100644
--- a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/CloudServer.java
+++ b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/CloudServer.java
@@ -40,8 +40,8 @@
import java.io.File;
import java.io.IOException;
-import java.io.UnsupportedEncodingException;
import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLConnection;
import java.nio.file.Files;
@@ -448,11 +448,9 @@ public void updateNameTags(Player player, Function play
if (CloudAPI.getInstance().getPermissionPool() == null || !CloudAPI.getInstance().getPermissionPool().isAvailable())
return;
- PermissionGroup playerPermissionGroup = playerPermissionGroupFunction != null ? playerPermissionGroupFunction.apply(player) : null;
-
- if (playerPermissionGroup == null)
- playerPermissionGroup = getCloudPlayers().get(player.getUniqueId())
- .getPermissionEntity().getHighestPermissionGroup(CloudAPI.getInstance().getPermissionPool());
+ PermissionGroup playerPermissionGroup = playerPermissionGroupFunction != null
+ ? playerPermissionGroupFunction.apply(player)
+ : getCloudPlayers().get(player.getUniqueId()).getPermissionEntity().getHighestPermissionGroup(CloudAPI.getInstance().getPermissionPool());
initScoreboard(player);
@@ -483,46 +481,49 @@ public Map getClonedCloudPlayers()
private void addTeamEntry(Player target, Player all, PermissionGroup permissionGroup)
{
String teamName = permissionGroup.getTagId() + permissionGroup.getName();
- try
- {
- if (teamName.length() > 16)
- {
- teamName = shortenStringTo16Bytes(teamName);
- CloudAPI.getInstance().dispatchConsoleMessage("In order to prevent issues, the name (+ tagID) of the group " + permissionGroup.getName() + " was temporarily shortened to 16 characters!");
- CloudAPI.getInstance().dispatchConsoleMessage("Please fix this issue by changing the name of the group in your perms.yml");
- Bukkit.broadcast("In order to prevent issues, the name (+ tagID) of the group " + permissionGroup.getName() + " was temporarily shortened to 16 characters!", "cloudnet.notify");
- Bukkit.broadcast("Please fix this issue by changing the name of the group in your perms.yml", "cloudnet.notify");
- }
- } catch (UnsupportedEncodingException e)
+ if (teamName.length() > 16)
{
- e.printStackTrace();
+ teamName = teamName.substring(0, 16);
+ CloudAPI.getInstance().dispatchConsoleMessage("In order to prevent issues, the name (+ tagID) of the group " + permissionGroup.getName() + " was temporarily shortened to 16 characters!");
+ CloudAPI.getInstance().dispatchConsoleMessage("Please fix this issue by changing the name of the group in your perms.yml");
+ Bukkit.broadcast("In order to prevent issues, the name (+ tagID) of the group " + permissionGroup.getName() + " was temporarily shortened to 16 characters!", "cloudnet.notify");
+ Bukkit.broadcast("Please fix this issue by changing the name of the group in your perms.yml", "cloudnet.notify");
}
Team team = all.getScoreboard().getTeam(teamName);
if (team == null)
team = all.getScoreboard().registerNewTeam(teamName);
- try
+ if (permissionGroup.getPrefix().length() > 16)
{
- if (permissionGroup.getPrefix().length() > 16)
- {
- permissionGroup.setPrefix(shortenStringTo16Bytes(permissionGroup.getPrefix()));
- CloudAPI.getInstance().dispatchConsoleMessage("In order to prevent issues, the prefix of the group " + permissionGroup.getName() + " was temporarily shortened to 16 characters!");
- CloudAPI.getInstance().dispatchConsoleMessage("Please fix this issue by changing the prefix in your perms.yml");
- Bukkit.broadcast("In order to prevent issues, the prefix of the group " + permissionGroup.getName() + " was temporarily shortened to 16 characters!", "cloudnet.notify");
- Bukkit.broadcast("Please fix this issue by changing the prefix in your perms.yml", "cloudnet.notify");
- }
- if (permissionGroup.getSuffix().length() > 16)
- {
- permissionGroup.setSuffix(shortenStringTo16Bytes(permissionGroup.getSuffix()));
- CloudAPI.getInstance().dispatchConsoleMessage("In order to prevent issues, the suffix of the group " + permissionGroup.getName() + " was temporarily shortened to 16 characters!");
- CloudAPI.getInstance().dispatchConsoleMessage("Please fix this issue by changing the suffix in your perms.yml");
- Bukkit.broadcast("In order to prevent issues, the suffix of the group " + permissionGroup.getName() + " was temporarily shortened to 16 characters!", "cloudnet.notify");
- Bukkit.broadcast("Please fix this issue by changing the suffix in your perms.yml", "cloudnet.notify");
- }
- } catch (UnsupportedEncodingException e)
+ permissionGroup.setPrefix(permissionGroup.getPrefix().substring(0, 16));
+ CloudAPI.getInstance().dispatchConsoleMessage("In order to prevent issues, the prefix of the group " + permissionGroup.getName() + " was temporarily shortened to 16 characters!");
+ CloudAPI.getInstance().dispatchConsoleMessage("Please fix this issue by changing the prefix in your perms.yml");
+ Bukkit.broadcast("In order to prevent issues, the prefix of the group " + permissionGroup.getName() + " was temporarily shortened to 16 characters!", "cloudnet.notify");
+ Bukkit.broadcast("Please fix this issue by changing the prefix in your perms.yml", "cloudnet.notify");
+ }
+ if (permissionGroup.getSuffix().length() > 16)
{
+ permissionGroup.setSuffix(permissionGroup.getSuffix().substring(0, 16));
+ CloudAPI.getInstance().dispatchConsoleMessage("In order to prevent issues, the suffix of the group " + permissionGroup.getName() + " was temporarily shortened to 16 characters!");
+ CloudAPI.getInstance().dispatchConsoleMessage("Please fix this issue by changing the suffix in your perms.yml");
+ Bukkit.broadcast("In order to prevent issues, the suffix of the group " + permissionGroup.getName() + " was temporarily shortened to 16 characters!", "cloudnet.notify");
+ Bukkit.broadcast("Please fix this issue by changing the suffix in your perms.yml", "cloudnet.notify");
+ }
+
+ try {
+ Method setColor = team.getClass().getDeclaredMethod("setColor", ChatColor.class);
+ setColor.setAccessible(true);
+ if(permissionGroup.getColor().length() != 0) {
+ setColor.invoke(team, ChatColor.getByChar(permissionGroup.getColor().replaceAll("&","").replaceAll("§","")));
+ } else {
+ setColor.invoke(team, ChatColor.getByChar(ChatColor.getLastColors(permissionGroup.getPrefix().replace('&','§')).replaceAll("&","").replaceAll("§","")));
+ }
+ } catch (NoSuchMethodException ignored) {
+ } catch (IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
+
+
team.setPrefix(ChatColor.translateAlternateColorCodes('&', permissionGroup.getPrefix()));
team.setSuffix(ChatColor.translateAlternateColorCodes('&', permissionGroup.getSuffix()));
@@ -531,10 +532,6 @@ private void addTeamEntry(Player target, Player all, PermissionGroup permissionG
target.setDisplayName(ChatColor.translateAlternateColorCodes('&', permissionGroup.getDisplay() + target.getName()));
}
- private String shortenStringTo16Bytes(String input) throws UnsupportedEncodingException
- {
- return input.substring(0, 16);
- }
private void initScoreboard(Player all)
{
@@ -611,9 +608,17 @@ public void onCustomSubChannelMessageReceive(String channel, String message, Doc
Files.copy(urlConnection.getInputStream(), Paths.get("plugins/" + document.getString("name") + ".jar"));
File file = new File("plugins/" + document.getString("name") + ".jar");
- Plugin plugin = Bukkit.getPluginManager().loadPlugin(file);
- Bukkit.getPluginManager().enablePlugin(plugin);
- } catch (IOException | InvalidDescriptionException | InvalidPluginException e)
+ Bukkit.getScheduler().runTask(CloudServer.this.getPlugin(), () -> {
+ try
+ {
+ Plugin plugin = Bukkit.getPluginManager().loadPlugin(file);
+ Bukkit.getPluginManager().enablePlugin(plugin);
+ } catch (InvalidPluginException | InvalidDescriptionException e)
+ {
+ e.printStackTrace();
+ }
+ });
+ } catch (IOException e)
{
e.printStackTrace();
}
diff --git a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/ProxiedBootstrap.java b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/ProxiedBootstrap.java
index 0546c2a4d..2c7ed836a 100644
--- a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/ProxiedBootstrap.java
+++ b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/ProxiedBootstrap.java
@@ -37,6 +37,7 @@ public void run()
getProxy().stop("CloudNet-Stop!");
}
});
+ CloudAPI.getInstance().setLogger(getLogger());
}
@Override
@@ -97,4 +98,4 @@ public void onDisable()
if (CloudAPI.getInstance() != null)
CloudAPI.getInstance().shutdown();
}
-}
\ No newline at end of file
+}
diff --git a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/event/bukkit/BukkitCloudEvent.java b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/event/bukkit/BukkitCloudEvent.java
index b90043caa..fe83f1c23 100644
--- a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/event/bukkit/BukkitCloudEvent.java
+++ b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/event/bukkit/BukkitCloudEvent.java
@@ -6,6 +6,7 @@
import de.dytanic.cloudnet.api.CloudAPI;
import de.dytanic.cloudnet.bridge.CloudServer;
+import org.bukkit.Bukkit;
import org.bukkit.event.Event;
/**
@@ -13,6 +14,13 @@
*/
public abstract class BukkitCloudEvent extends Event {
+ /**
+ * Marks this BukkitCloudEvent as async or sync based on on which thread it's being called
+ */
+ public BukkitCloudEvent() {
+ super(!Bukkit.isPrimaryThread());
+ }
+
/**
* Returns the CloudAPI instance
*
diff --git a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/command/bukkit/CommandCloudServer.java b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/command/bukkit/CommandCloudServer.java
index bec70a44c..8a159d6f6 100644
--- a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/command/bukkit/CommandCloudServer.java
+++ b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/command/bukkit/CommandCloudServer.java
@@ -19,6 +19,11 @@
import de.dytanic.cloudnet.lib.utility.CollectionWrapper;
import de.dytanic.cloudnet.lib.utility.document.Document;
import de.dytanic.cloudnet.lib.utility.threading.Runnabled;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.config.LoggerConfig;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.command.Command;
@@ -28,10 +33,7 @@
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import java.util.UUID;
+import java.util.*;
/**
* Created by Tareko on 23.08.2017.
@@ -39,8 +41,12 @@
public final class CommandCloudServer implements CommandExecutor, TabExecutor {
@Override
- public boolean onCommand(CommandSender commandSender, Command command, String s, String[] args)
+ public boolean onCommand(CommandSender commandSender, Command command, String label, String[] args)
{
+ CloudAPI.getInstance().getLogger().finest(
+ String.format("%s executed %s (label = %s) with arguments %s",
+ commandSender, command, label, Arrays.toString(args))
+ );
if (!(commandSender instanceof Player)) return false;
Player player = (Player) commandSender;
@@ -74,12 +80,20 @@ public boolean isAccepted(MobSelector.MobImpl value)
if (stringBuilder.length() > 32)
{
- commandSender.sendMessage(CloudAPI.getInstance().getPrefix() + "The display cannot be longe then 32 characters");
+ commandSender.sendMessage(CloudAPI.getInstance().getPrefix() + "The display cannot be longer then 32 characters");
return false;
}
+
+ String material = args[4].toUpperCase();
+
+ if(Material.getMaterial(material) == null)
+ {
+ commandSender.sendMessage(CloudAPI.getInstance().getPrefix() + "An item with this itemName does not exist");
+ return false;
+ }
+
ServerMob serverMob = new ServerMob(UUID.randomUUID(), stringBuilder.substring(0, stringBuilder.length() - 1), args[2], entityType.name(), args[3],
- NetworkUtils.checkIsNumber(args[4]) ? (Integer.parseInt(args[4]) != 0 ? Integer.parseInt(args[4]) : 138) : 138
- , args[5].equalsIgnoreCase("true"),
+ -1, material, args[5].equalsIgnoreCase("true"),
MobSelector.getInstance().toPosition(CloudAPI.getInstance().getGroup(), player.getLocation()), "§8#§c%group% &bPlayers online §8|§7 %group_online% of %max_players%", new Document());
CloudAPI.getInstance().getNetworkConnection().sendPacket(new PacketOutAddMob(serverMob));
player.sendMessage(CloudAPI.getInstance().getPrefix() + "The mob will be created, please wait...");
@@ -294,6 +308,22 @@ public void run(MobSelector.MobImpl obj)
commandSender.sendMessage("- " + entityType.name());
}
}
+ if (args[0].equalsIgnoreCase("debug")) {
+ CloudAPI.getInstance().setDebug(!CloudAPI.getInstance().isDebug());
+
+ final LoggerContext context = (LoggerContext) LogManager.getContext(false);
+ final Configuration configuration = context.getConfiguration();
+ final LoggerConfig rootLoggerConfig = configuration.getLoggerConfig(LogManager.ROOT_LOGGER_NAME);
+
+ if (CloudAPI.getInstance().isDebug()) {
+ rootLoggerConfig.setLevel(Level.ALL);
+ commandSender.sendMessage("§aDebug output for server has been enabled.");
+ } else {
+ rootLoggerConfig.setLevel(Level.INFO);
+ commandSender.sendMessage("§cDebug output for server has been disabled.");
+ }
+ context.updateLoggers(configuration);
+ }
break;
case 3:
if (args[0].equalsIgnoreCase("setItem"))
@@ -331,7 +361,7 @@ public boolean isAccepted(MobSelector.MobImpl value)
}
if (MobSelector.getInstance() != null)
{
- commandSender.sendMessage(CloudAPI.getInstance().getPrefix() + "/cs createMob ");
+ commandSender.sendMessage(CloudAPI.getInstance().getPrefix() + "/cs createMob ");
commandSender.sendMessage(CloudAPI.getInstance().getPrefix() + "/cs removeMob ");
commandSender.sendMessage(CloudAPI.getInstance().getPrefix() + "/cs listMobs");
commandSender.sendMessage(CloudAPI.getInstance().getPrefix() + "/cs moblist");
@@ -339,6 +369,7 @@ public boolean isAccepted(MobSelector.MobImpl value)
commandSender.sendMessage(CloudAPI.getInstance().getPrefix() + "/cs setItem ");
commandSender.sendMessage(CloudAPI.getInstance().getPrefix() + "/cs editMobLine ");
}
+ commandSender.sendMessage(CloudAPI.getInstance().getPrefix() + "/cs debug");
break;
}
@@ -350,4 +381,4 @@ public List onTabComplete(CommandSender commandSender, Command command,
{
return new LinkedList<>(CloudAPI.getInstance().getServerGroupMap().keySet());
}
-}
\ No newline at end of file
+}
diff --git a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/command/bukkit/CommandResource.java b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/command/bukkit/CommandResource.java
index eb0e35811..3afeea181 100644
--- a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/command/bukkit/CommandResource.java
+++ b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/command/bukkit/CommandResource.java
@@ -11,6 +11,7 @@
import org.bukkit.command.CommandSender;
import java.lang.management.ManagementFactory;
+import java.util.Arrays;
/**
* Created by Tareko on 07.07.2017.
@@ -25,8 +26,12 @@ public CommandResource()
}
@Override
- public boolean execute(CommandSender sender, String s, String[] args)
+ public boolean execute(CommandSender sender, String alias, String[] args)
{
+ CloudAPI.getInstance().getLogger().finest(
+ String.format("%s executed %s with arguments %s",
+ sender, alias, Arrays.toString(args))
+ );
if (!testPermission(sender)) return false;
long used = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed() / 1048576L;
long max = Runtime.getRuntime().maxMemory() / 1048576L;
@@ -40,4 +45,4 @@ public boolean execute(CommandSender sender, String s, String[] args)
sender.sendMessage(CloudAPI.getInstance().getPrefix() + NetworkUtils.SPACE_STRING);
return false;
}
-}
\ No newline at end of file
+}
diff --git a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/command/proxied/CommandCloud.java b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/command/proxied/CommandCloud.java
index 777aa78c6..85fcf6eec 100644
--- a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/command/proxied/CommandCloud.java
+++ b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/command/proxied/CommandCloud.java
@@ -49,6 +49,10 @@ public CommandCloud()
@Override
public void execute(CommandSender commandSender, String[] args)
{
+ CloudAPI.getInstance().getLogger().finest(
+ String.format("%s executed %s with arguments %s",
+ commandSender, this, Arrays.toString(args))
+ );
if (args.length > 2)
{
if (args[0].equalsIgnoreCase("cmds") && commandSender.hasPermission("cloudnet.command.cloud.commandserver"))
@@ -210,6 +214,14 @@ public void execute(CommandSender commandSender, String[] args)
commandSender.sendMessage(builder.substring(0));
return;
}
+ if (args[0].equalsIgnoreCase("debug") && commandSender.hasPermission("cloudnet.command.cloud.debug")) {
+ CloudAPI.getInstance().setDebug(!CloudAPI.getInstance().isDebug());
+ if(CloudAPI.getInstance().isDebug()) {
+ commandSender.sendMessage(TextComponent.fromLegacyText("§aDebug output for proxy has been enabled."));
+ } else {
+ commandSender.sendMessage(TextComponent.fromLegacyText("§cDebug output for proxy has been disabled."));
+ }
+ }
break;
case 2:
if (args[0].equalsIgnoreCase("toggle"))
@@ -570,6 +582,7 @@ public boolean isAccepted(Template value)
CloudAPI.getInstance().getPrefix() + "§7/cloud copy ",
CloudAPI.getInstance().getPrefix() + "§7/cloud version",
CloudAPI.getInstance().getPrefix() + "§7/cloud statistics",
+ CloudAPI.getInstance().getPrefix() + "§7/cloud debug",
NetworkUtils.SPACE_STRING
);
break;
@@ -601,7 +614,7 @@ public Iterable onTabComplete(CommandSender commandSender, String[] args
tabCompletes = ImmutableList
.of("toggle", "setMaxPlayers", "whitelist", "start", "startcs", "cmds", "cmdp", "stop", "stopGroup"
, "ustopGroup", "listProxys", "listOnline", "listServers", "log", "listGroups", "rl", "list"
- , "maintenance", "copy", "version", "statistics");
+ , "maintenance", "copy", "version", "statistics", "debug");
break;
}
case 2:
diff --git a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/command/proxied/CommandHub.java b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/command/proxied/CommandHub.java
index 5b752a721..ed5021e68 100644
--- a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/command/proxied/CommandHub.java
+++ b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/command/proxied/CommandHub.java
@@ -14,6 +14,8 @@
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.plugin.Command;
+import java.util.Arrays;
+
/**
* Created by Tareko on 20.08.2017.
*/
@@ -33,6 +35,10 @@ public String[] getAliases()
@Override
public void execute(CommandSender commandSender, String[] args)
{
+ CloudAPI.getInstance().getLogger().finest(
+ String.format("%s executed %s with arguments %s",
+ commandSender, this, Arrays.toString(args))
+ );
if (!(commandSender instanceof ProxiedPlayer)) return;
ServerInfo serverInfo = CloudProxy.getInstance().getCachedServers().get(((ProxiedPlayer) commandSender).getServer().getInfo().getName());
@@ -61,4 +67,4 @@ public void execute(CommandSender commandSender, String[] args)
CloudAPI.getInstance().getCloudNetwork().getMessages().getString("hubCommandNoServerFound")));
else ((ProxiedPlayer) commandSender).connect(ProxyServer.getInstance().getServerInfo(fallback));
}
-}
\ No newline at end of file
+}
diff --git a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/command/proxied/CommandPermissions.java b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/command/proxied/CommandPermissions.java
index b8c804ad0..d9870093b 100644
--- a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/command/proxied/CommandPermissions.java
+++ b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/command/proxied/CommandPermissions.java
@@ -35,6 +35,10 @@ public CommandPermissions()
@Override
public void execute(CommandSender sender, String[] args)
{
+ CloudAPI.getInstance().getLogger().finest(
+ String.format("%s executed %s with arguments %s",
+ sender, this, Arrays.toString(args))
+ );
PermissionPool permissionPool = CloudAPI.getInstance().getPermissionPool();
if (args.length > 0)
{
@@ -150,6 +154,19 @@ public void execute(CommandSender sender, String[] args)
sender.sendMessage("The specified permission group doesn't exist");
}
}
+ if (args[2].equalsIgnoreCase("setColor"))
+ {
+ if (permissionPool.getGroups().containsKey(args[1]))
+ {
+ PermissionGroup permissionGroup = permissionPool.getGroups().get(args[1]);
+ permissionGroup.setColor(args[3]);
+ CloudAPI.getInstance().updatePermissionGroup(permissionGroup);
+ sender.sendMessage("You set the needed color of the permission group " + permissionGroup.getName() + " to \"" + permissionGroup.getColor() + "\"");
+ } else
+ {
+ sender.sendMessage("The specified permission group doesn't exist");
+ }
+ }
if (args[2].equalsIgnoreCase("setTagId"))
{
@@ -494,6 +511,7 @@ public void accept(PermissionGroup permissionGroup)
CloudAPI.getInstance().getPrefix() + "/cperms GROUP setPrefix ",
CloudAPI.getInstance().getPrefix() + "/cperms GROUP setTagId ",
CloudAPI.getInstance().getPrefix() + "/cperms GROUP setDefault ",
+ CloudAPI.getInstance().getPrefix() + "/cperms GROUP setColor ",
CloudAPI.getInstance().getPrefix() + "/cperms USER ",
CloudAPI.getInstance().getPrefix() + "/cperms USER GROUP SET ",
CloudAPI.getInstance().getPrefix() + "/cperms USER GROUP ADD ",
@@ -528,4 +546,4 @@ private boolean permissionIsSet(Map permissions, String permiss
}
return false;
}
-}
\ No newline at end of file
+}
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 74075a7b3..63e07cb56 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
@@ -28,6 +28,7 @@
import java.util.HashSet;
import java.util.UUID;
import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.logging.Level;
/**
* Created by Tareko on 17.08.2017.
@@ -39,6 +40,11 @@ public final class BukkitListener implements Listener {
@EventHandler(priority = EventPriority.HIGHEST)
public void handle0(AsyncPlayerPreLoginEvent e)
{
+ CloudAPI.getInstance().getLogger().logp(
+ Level.FINEST,
+ this.getClass().getSimpleName(),
+ "handle0",
+ String.format("Handling async player pre login event: %s", e));
for (Player all : Bukkit.getOnlinePlayers())
if (all.getUniqueId().equals(e.getUniqueId()))
{
@@ -52,6 +58,11 @@ public void handle0(AsyncPlayerPreLoginEvent e)
@EventHandler
public void handle(BukkitSubChannelMessageEvent event)
{
+ CloudAPI.getInstance().getLogger().logp(
+ Level.FINEST,
+ this.getClass().getSimpleName(),
+ "handle",
+ String.format("Handling bukkit sub channel message event: %s", event));
if (event.getChannel().equalsIgnoreCase("cloudnet_internal") ||
event.getMessage().equalsIgnoreCase("server_connect_request"))
{
@@ -73,6 +84,11 @@ public void run()
@EventHandler(priority = EventPriority.HIGHEST)
public void handleLast(PlayerLoginEvent event)
{
+ CloudAPI.getInstance().getLogger().logp(
+ Level.FINEST,
+ this.getClass().getSimpleName(),
+ "handleLast",
+ String.format("Handling player login event: %s", event));
if (this.kicks.contains(event.getPlayer().getUniqueId()))
{
this.kicks.remove(event.getPlayer().getUniqueId());
@@ -84,6 +100,11 @@ public void handleLast(PlayerLoginEvent event)
@EventHandler(priority = EventPriority.LOWEST)
public void handleFirst(PlayerLoginEvent event)
{
+ CloudAPI.getInstance().getLogger().logp(
+ Level.FINEST,
+ this.getClass().getSimpleName(),
+ "handleFirst",
+ String.format("Handling player login event: %s", event));
if (CloudServer.getInstance().getCloudPlayers().containsKey(event.getPlayer().getUniqueId()) && requests.contains(event.getPlayer().getUniqueId()))
{
requests.remove(event.getPlayer().getUniqueId());
diff --git a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/listener/proxied/ProxiedListener.java b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/listener/proxied/ProxiedListener.java
index 47f1d8196..b72a81907 100644
--- a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/listener/proxied/ProxiedListener.java
+++ b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/listener/proxied/ProxiedListener.java
@@ -46,6 +46,7 @@
import java.util.List;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
+import java.util.logging.Level;
/**
* Created by Tareko on 18.08.2017.
@@ -89,6 +90,11 @@ public void handleProxyPing(ProxyPingEvent event)
@EventHandler
public void handlePluginMessage(PluginMessageEvent e)
{
+ CloudAPI.getInstance().getLogger().logp(
+ Level.FINEST,
+ this.getClass().getSimpleName(),
+ "handlePluginMessage",
+ String.format("Handling plugin message event: %s", e));
if (e.getTag().equals("MC|BSign") || e.getTag().equals("MC|BEdit"))
if (CloudProxy.getInstance().getProxyGroup() != null && CloudProxy.getInstance().getProxyGroup().getProxyConfig().getCustomPayloadFixer())
e.setCancelled(true);
@@ -97,42 +103,53 @@ public void handlePluginMessage(PluginMessageEvent e)
@EventHandler(priority = EventPriority.HIGHEST)
public void handlePlayerServerSwitch(ServerSwitchEvent e)
{
+ CloudAPI.getInstance().getLogger().logp(
+ Level.FINEST,
+ this.getClass().getSimpleName(),
+ "handlePlayerServerSwitch",
+ String.format("Handling server switch event: %s", e));
CloudPlayer cloudPlayer = CloudProxy.getInstance().getCloudPlayers().get(e.getPlayer().getUniqueId());
cloudPlayer.setServer(e.getPlayer().getServer().getInfo().getName());
CloudAPI.getInstance().getNetworkConnection().sendPacket(new PacketOutUpdateOnlinePlayer(cloudPlayer));
CloudAPI.getInstance().sendCustomSubProxyMessage(
- "cloudnet_internal",
- "player_server_switch",
- new Document("player", cloudPlayer)
- .append("server", e.getPlayer().getServer().getInfo().getName())
+ "cloudnet_internal",
+ "player_server_switch",
+ new Document("player", cloudPlayer)
+ .append("server", e.getPlayer().getServer().getInfo().getName())
);
if (CloudProxy.getInstance().getProxyGroup() != null && CloudProxy.getInstance().getProxyGroup().getProxyConfig().isEnabled() &&
- CloudProxy.getInstance().getProxyGroup().getProxyConfig().getTabList().isEnabled())
+ CloudProxy.getInstance().getProxyGroup().getProxyConfig().getTabList().isEnabled())
initTabHeaderFooter(e.getPlayer());
}
@EventHandler(priority = EventPriority.LOWEST)
public void handleLogin(LoginEvent e)
{
+ CloudAPI.getInstance().getLogger().logp(
+ Level.FINEST,
+ this.getClass().getSimpleName(),
+ "handleLogin",
+ String.format("Handling login event: %s", e));
PlayerConnection playerConnection = new PlayerConnection(
- e.getConnection().getUniqueId(),
- e.getConnection().getName(), e.getConnection().getVersion(),
- e.getConnection().getAddress().getAddress().getHostAddress(),
- e.getConnection().getAddress().getPort(), e.getConnection().isOnlineMode(),
- e.getConnection().isLegacy()
+ e.getConnection().getUniqueId(),
+ e.getConnection().getName(), e.getConnection().getVersion(),
+ e.getConnection().getAddress().getAddress().getHostAddress(),
+ e.getConnection().getAddress().getPort(), e.getConnection().isOnlineMode(),
+ e.getConnection().isLegacy()
);
Document result = CloudAPI.getInstance().getNetworkConnection().getPacketManager().sendQuery(new PacketOutPlayerLoginRequest(playerConnection),
- CloudAPI.getInstance().getNetworkConnection()).getResult();
+ CloudAPI.getInstance().getNetworkConnection()).getResult();
CloudPlayer cloudPlayer = result.getObject("player", new TypeToken() {
}.getType());
if (cloudPlayer == null)
{
+ CloudAPI.getInstance().getLogger().finest("cloudPlayer is null!");
e.setCancelReason(TextComponent.fromLegacyText("§cUnverified login. Reason: §e" + (result.contains("reason") ? result.getString("reason") : "no reason defined")));
e.setCancelled(true);
return;
@@ -148,9 +165,9 @@ public void handleLogin(LoginEvent e)
PermissionCheckEvent permissionCheckEvent = new PermissionCheckEvent(cloudCommandSender, "cloudnet.maintenance", false);
if (!proxyConfig.getWhitelist().contains(e.getConnection().getName()) &&
- !proxyConfig.getWhitelist().contains(e.getConnection().getUniqueId().toString())
- &&
- !ProxyServer.getInstance().getPluginManager().callEvent(permissionCheckEvent).hasPermission())
+ !proxyConfig.getWhitelist().contains(e.getConnection().getUniqueId().toString())
+ &&
+ !ProxyServer.getInstance().getPluginManager().callEvent(permissionCheckEvent).hasPermission())
{
e.setCancelled(true);
e.setCancelReason(ChatColor.translateAlternateColorCodes('&', CloudAPI.getInstance().getCloudNetwork().getMessages().getString("kick-maintenance")));
@@ -181,6 +198,12 @@ public void handleLogin(LoginEvent e)
@EventHandler
public void handlePost(PostLoginEvent e)
{
+ CloudAPI.getInstance().getLogger().logp(
+ Level.FINEST,
+ this.getClass().getSimpleName(),
+ "handlePost",
+ String.format("Handling post login event: %s", e));
+
CloudProxy.getInstance().update();
CloudAPI.getInstance().getNetworkConnection().sendPacket(new PacketOutLoginSuccess(e.getPlayer().getUniqueId()));
@@ -252,11 +275,11 @@ public void handlePermissionCheck(PermissionCheckEvent e)
{
if (CloudProxy.getInstance().getCloudPlayers().containsKey(((ProxiedPlayer) e.getSender()).getUniqueId()))
e.setHasPermission(CloudProxy.getInstance().getCloudPlayers().get(((ProxiedPlayer) e.getSender()).getUniqueId())
- .getPermissionEntity().hasPermission(CloudAPI.getInstance().getPermissionPool(), e.getPermission(), CloudAPI.getInstance().getGroup()));
+ .getPermissionEntity().hasPermission(CloudAPI.getInstance().getPermissionPool(), e.getPermission(), CloudAPI.getInstance().getGroup()));
} else if (e.getSender() instanceof CloudPlayerCommandSender)
{
e.setHasPermission(((CloudPlayerCommandSender) e.getSender()).getCloudPlayer()
- .getPermissionEntity().hasPermission(CloudAPI.getInstance().getPermissionPool(), e.getPermission(), CloudAPI.getInstance().getGroup()));
+ .getPermissionEntity().hasPermission(CloudAPI.getInstance().getPermissionPool(), e.getPermission(), CloudAPI.getInstance().getGroup()));
}
}
@@ -284,15 +307,19 @@ public void run()
@EventHandler(priority = EventPriority.HIGHEST)
public void handleServerConnect(ServerConnectEvent event)
{
-
+ CloudAPI.getInstance().getLogger().logp(
+ Level.FINEST,
+ this.getClass().getSimpleName(),
+ "handleServerConnect",
+ String.format("Handling server connect event: %s", event));
if (event.getPlayer().getServer() == null)
{
String fallback = CloudProxy.getInstance().fallback(event.getPlayer());
ProxiedPlayerFallbackEvent proxiedPlayerFallbackEvent = new ProxiedPlayerFallbackEvent(
- event.getPlayer(),
- CloudAPI.getInstance().getOnlinePlayer(event.getPlayer().getUniqueId()),
- ProxiedPlayerFallbackEvent.FallbackType.SERVER_KICK,
- fallback
+ event.getPlayer(),
+ CloudAPI.getInstance().getOnlinePlayer(event.getPlayer().getUniqueId()),
+ ProxiedPlayerFallbackEvent.FallbackType.SERVER_KICK,
+ fallback
);
ProxyServer.getInstance().getPluginManager().callEvent(proxiedPlayerFallbackEvent);
@@ -303,12 +330,12 @@ public void handleServerConnect(ServerConnectEvent event)
event.setTarget(ProxyServer.getInstance().getServerInfo(fallback));
CloudAPI.getInstance().getNetworkConnection().getChannel().writeAndFlush(new PacketOutCustomSubChannelMessage(DefaultType.BUKKIT, event.getTarget().getName(), "cloudnet_internal", "server_connect_request", new Document("uniqueId", event.getPlayer().getUniqueId())));
- NetworkUtils.sleepUninterruptedly(6);
+ NetworkUtils.sleepUninterruptedly(25);
} else event.setCancelled(true);
} else
{
CloudAPI.getInstance().getNetworkConnection().getChannel().writeAndFlush(new PacketOutCustomSubChannelMessage(DefaultType.BUKKIT, event.getTarget().getName(), "cloudnet_internal", "server_connect_request", new Document("uniqueId", event.getPlayer().getUniqueId())));
- NetworkUtils.sleepUninterruptedly(6);
+ NetworkUtils.sleepUninterruptedly(25);
}
}
@@ -328,10 +355,10 @@ public void handleServerKick(ServerKickEvent e)
}
ProxiedPlayerFallbackEvent proxiedPlayerFallbackEvent = new ProxiedPlayerFallbackEvent(
- e.getPlayer(),
- CloudAPI.getInstance().getOnlinePlayer(e.getPlayer().getUniqueId()),
- ProxiedPlayerFallbackEvent.FallbackType.SERVER_KICK,
- fallback
+ e.getPlayer(),
+ CloudAPI.getInstance().getOnlinePlayer(e.getPlayer().getUniqueId()),
+ ProxiedPlayerFallbackEvent.FallbackType.SERVER_KICK,
+ fallback
);
ProxyServer.getInstance().getPluginManager().callEvent(proxiedPlayerFallbackEvent);
@@ -354,7 +381,7 @@ public void handleOnlineCountUpdate(ProxiedOnlineCountUpdateEvent e)
public void run()
{
if (CloudProxy.getInstance().getProxyGroup() != null && CloudProxy.getInstance().getProxyGroup().getProxyConfig().isEnabled() &&
- CloudProxy.getInstance().getProxyGroup().getProxyConfig().getTabList().isEnabled())
+ CloudProxy.getInstance().getProxyGroup().getProxyConfig().getTabList().isEnabled())
{
for (ProxiedPlayer proxiedPlayer : ProxyServer.getInstance().getPlayers())
initTabHeaderFooter(proxiedPlayer);
@@ -379,8 +406,8 @@ public void handleChannel(PluginMessageEvent pluginMessageEvent)
break;
case "fallback":
((ProxiedPlayer) pluginMessageEvent.getReceiver()).connect(ProxyServer.getInstance()
- .getServerInfo(CloudProxy.getInstance()
- .fallback(((ProxiedPlayer) pluginMessageEvent.getReceiver()))));
+ .getServerInfo(CloudProxy.getInstance()
+ .fallback(((ProxiedPlayer) pluginMessageEvent.getReceiver()))));
break;
case "command":
ProxyServer.getInstance().getPluginManager().dispatchCommand(((ProxiedPlayer) pluginMessageEvent.getReceiver()), byteArrayDataInput.readUTF());
@@ -393,22 +420,22 @@ private void initTabHeaderFooter(ProxiedPlayer proxiedPlayer)
{
TabList tabList = CloudProxy.getInstance().getProxyGroup().getProxyConfig().getTabList();
proxiedPlayer.setTabHeader(
- new TextComponent(ChatColor.translateAlternateColorCodes('&', tabList.getHeader()
- .replace("%proxy%", CloudAPI.getInstance().getServerId())
- .replace("%server%", (proxiedPlayer.getServer() != null ? proxiedPlayer.getServer().getInfo().getName() : CloudProxy.getInstance().getProxyGroup().getName()))
- .replace("%online_players%", CloudAPI.getInstance().getOnlineCount() + NetworkUtils.EMPTY_STRING)
- .replace("%max_players%", CloudProxy.getInstance().getProxyGroup().getProxyConfig().getMaxPlayers() + NetworkUtils.EMPTY_STRING)
- .replace("%group%", (proxiedPlayer.getServer() != null && CloudProxy.getInstance().getCachedServers().containsKey(proxiedPlayer.getServer().getInfo().getName()) ? CloudProxy.getInstance().getCachedServers().get(proxiedPlayer.getServer().getInfo().getName()).getServiceId().getGroup() : "Hub"))
- .replace("%proxy_group%", CloudProxy.getInstance().getProxyGroup().getName())
- )),
- new TextComponent(ChatColor.translateAlternateColorCodes('&', tabList.getFooter()
- .replace("%proxy%", CloudAPI.getInstance().getServerId())
- .replace("%server%", (proxiedPlayer.getServer() != null ? proxiedPlayer.getServer().getInfo().getName() : CloudProxy.getInstance().getProxyGroup().getName()))
- .replace("%online_players%", CloudAPI.getInstance().getOnlineCount() + NetworkUtils.EMPTY_STRING)
- .replace("%max_players%", CloudProxy.getInstance().getProxyGroup().getProxyConfig().getMaxPlayers() + NetworkUtils.EMPTY_STRING)
- .replace("%group%", (proxiedPlayer.getServer() != null && CloudProxy.getInstance().getCachedServers().containsKey(proxiedPlayer.getServer().getInfo().getName()) ? CloudProxy.getInstance().getCachedServers().get(proxiedPlayer.getServer().getInfo().getName()).getServiceId().getGroup() : "Hub"))
- .replace("%proxy_group%", CloudProxy.getInstance().getProxyGroup().getName())
- )));
+ new TextComponent(ChatColor.translateAlternateColorCodes('&', tabList.getHeader()
+ .replace("%proxy%", CloudAPI.getInstance().getServerId())
+ .replace("%server%", (proxiedPlayer.getServer() != null ? proxiedPlayer.getServer().getInfo().getName() : CloudProxy.getInstance().getProxyGroup().getName()))
+ .replace("%online_players%", CloudAPI.getInstance().getOnlineCount() + NetworkUtils.EMPTY_STRING)
+ .replace("%max_players%", CloudProxy.getInstance().getProxyGroup().getProxyConfig().getMaxPlayers() + NetworkUtils.EMPTY_STRING)
+ .replace("%group%", (proxiedPlayer.getServer() != null && CloudProxy.getInstance().getCachedServers().containsKey(proxiedPlayer.getServer().getInfo().getName()) ? CloudProxy.getInstance().getCachedServers().get(proxiedPlayer.getServer().getInfo().getName()).getServiceId().getGroup() : "Hub"))
+ .replace("%proxy_group%", CloudProxy.getInstance().getProxyGroup().getName())
+ )),
+ new TextComponent(ChatColor.translateAlternateColorCodes('&', tabList.getFooter()
+ .replace("%proxy%", CloudAPI.getInstance().getServerId())
+ .replace("%server%", (proxiedPlayer.getServer() != null ? proxiedPlayer.getServer().getInfo().getName() : CloudProxy.getInstance().getProxyGroup().getName()))
+ .replace("%online_players%", CloudAPI.getInstance().getOnlineCount() + NetworkUtils.EMPTY_STRING)
+ .replace("%max_players%", CloudProxy.getInstance().getProxyGroup().getProxyConfig().getMaxPlayers() + NetworkUtils.EMPTY_STRING)
+ .replace("%group%", (proxiedPlayer.getServer() != null && CloudProxy.getInstance().getCachedServers().containsKey(proxiedPlayer.getServer().getInfo().getName()) ? CloudProxy.getInstance().getCachedServers().get(proxiedPlayer.getServer().getInfo().getName()).getServiceId().getGroup() : "Hub"))
+ .replace("%proxy_group%", CloudProxy.getInstance().getProxyGroup().getName())
+ )));
}
-}
\ No newline at end of file
+}
diff --git a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/serverselectors/MobSelector.java b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/serverselectors/MobSelector.java
index 5a80dceaf..233cf53f7 100644
--- a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/serverselectors/MobSelector.java
+++ b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/serverselectors/MobSelector.java
@@ -156,7 +156,8 @@ public Inventory create(MobConfig mobConfig, ServerMob mob)
private ItemStack transform(MobItemLayout mobItemLayout)
{
- return ItemStackBuilder.builder(mobItemLayout.getItemId(), 1, mobItemLayout.getSubId())
+ Material material = ItemStackBuilder.getMaterialIgnoreVersion(mobItemLayout.getItemName(), mobItemLayout.getItemId());
+ return material == null ? null : ItemStackBuilder.builder(material, 1, mobItemLayout.getSubId())
.lore(new ArrayList<>(CollectionWrapper.transform(mobItemLayout.getLore(), new Catcher() {
@Override
public String doCatch(String key)
@@ -168,7 +169,8 @@ public String doCatch(String key)
private ItemStack transform(MobItemLayout mobItemLayout, ServerInfo serverInfo)
{
- return ItemStackBuilder.builder(mobItemLayout.getItemId(), 1, mobItemLayout.getSubId())
+ Material material = ItemStackBuilder.getMaterialIgnoreVersion(mobItemLayout.getItemName(), mobItemLayout.getItemId());
+ return material == null ? null : ItemStackBuilder.builder(material, 1, mobItemLayout.getSubId())
.lore(new ArrayList<>(CollectionWrapper.transform(mobItemLayout.getLore(), new Catcher() {
@Override
public String doCatch(String key)
@@ -457,7 +459,7 @@ public void handleInventoryClick(InventoryClickEvent e)
if (inventories().contains(e.getInventory()) && e.getCurrentItem() != null && e.getSlot() == e.getRawSlot())
{
e.setCancelled(true);
- if (mobConfig.getItemLayout().getItemId() == e.getCurrentItem().getTypeId())
+ if (ItemStackBuilder.getMaterialIgnoreVersion(mobConfig.getItemLayout().getItemName(), mobConfig.getItemLayout().getItemId()) == e.getCurrentItem().getType())
{
MobImpl mob = find(e.getInventory());
if (mob.getServerPosition().containsKey(e.getSlot()))
@@ -517,10 +519,13 @@ public MobImpl doCatch(ServerMob key)
Entity armor = (Entity) armorStand;
if (armor.getPassenger() == null && key.getItemId() != null)
{
- Item item = Bukkit.getWorld(key.getPosition().getWorld()).dropItem(armor.getLocation(), new ItemStack(key.getItemId()));
- item.setPickupDelay(Integer.MAX_VALUE);
- item.setTicksLived(Integer.MAX_VALUE);
- armor.setPassenger(item);
+ Material material = ItemStackBuilder.getMaterialIgnoreVersion(key.getItemName(), key.getItemId());
+ if(material != null) {
+ Item item = Bukkit.getWorld(key.getPosition().getWorld()).dropItem(armor.getLocation(), new ItemStack(material));
+ item.setPickupDelay(Integer.MAX_VALUE);
+ item.setTicksLived(Integer.MAX_VALUE);
+ armor.setPassenger(item);
+ }
}
}
diff --git a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/serverselectors/SignSelector.java b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/serverselectors/SignSelector.java
index 4a2eb03a3..3a4661c52 100644
--- a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/serverselectors/SignSelector.java
+++ b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/serverselectors/SignSelector.java
@@ -9,6 +9,7 @@
import de.dytanic.cloudnet.api.CloudAPI;
import de.dytanic.cloudnet.api.handlers.adapter.NetworkHandlerAdapter;
import de.dytanic.cloudnet.bridge.CloudServer;
+import de.dytanic.cloudnet.bridge.internal.util.ItemStackBuilder;
import de.dytanic.cloudnet.lib.NetworkUtils;
import de.dytanic.cloudnet.lib.server.ServerState;
import de.dytanic.cloudnet.lib.server.info.ServerInfo;
@@ -23,12 +24,15 @@
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.block.BlockState;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
+import org.bukkit.material.MaterialData;
import org.bukkit.util.Vector;
import java.util.*;
@@ -87,7 +91,7 @@ public String doCatch(ServerInfo key)
@EventHandler
public void handleInteract(PlayerInteractEvent e)
{
- if ((e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) && (e.getClickedBlock().getType().equals(Material.SIGN_POST) || e.getClickedBlock().getType().equals(Material.WALL_SIGN)))
+ if ((e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) && e.getClickedBlock() != null && e.getClickedBlock().getState() instanceof org.bukkit.block.Sign)
if (containsPosition(e.getClickedBlock().getLocation()))
{
Sign sign = getSignByPosition(e.getClickedBlock().getLocation());
@@ -272,7 +276,7 @@ public void run()
@Override
public void run()
{
- if (location.getBlock().getType().equals(Material.SIGN_POST) || location.getBlock().getType().equals(Material.WALL_SIGN))
+ if (location.getBlock().getState() instanceof org.bukkit.block.Sign)
try
{
Location entityLocation = entity.getLocation();
@@ -320,7 +324,7 @@ public void run()
String[] layout = updateOfflineAndMaintenance(_signLayout.getSignLayout().clone(), sign);
sign.setServerInfo(null);
sendUpdateSynchronized(toLocation(sign.getPosition()), layout);
- changeBlock(toLocation(sign.getPosition()), _signLayout.getBlockId(), _signLayout.getSubId());
+ changeBlock(toLocation(sign.getPosition()), _signLayout.getBlockName(), _signLayout.getBlockId(),_signLayout.getSubId());
continue;
}
@@ -339,7 +343,7 @@ public void run()
String[] layout = updateOfflineAndMaintenance(searchLayer.getSignLayout().clone(), sign);
layout = updateOfflineAndMaintenance(layout, sign);
sendUpdateSynchronized(location, layout);
- changeBlock(location, searchLayer.getBlockId(), searchLayer.getSubId());
+ changeBlock(location, searchLayer.getBlockName(), searchLayer.getBlockId(), searchLayer.getSubId());
continue;
}
@@ -361,7 +365,7 @@ public void run()
}
updateArray(layout, serverInfo);
sendUpdateSynchronized(location, layout);
- changeBlock(location, signLayout.getBlockId(), signLayout.getSubId());
+ changeBlock(location, signLayout.getBlockName(), signLayout.getBlockId(), signLayout.getSubId());
} else
{
sign.setServerInfo(null);
@@ -373,7 +377,7 @@ public void run()
sign.setServerInfo(null);
String[] layout = updateOfflineAndMaintenance(searchLayer.getSignLayout().clone(), sign);
sendUpdateSynchronized(location, layout);
- changeBlock(location, searchLayer.getBlockId(), searchLayer.getSubId());
+ changeBlock(location, searchLayer.getBlockName(), searchLayer.getBlockId(), searchLayer.getSubId());
}
continue;
@@ -413,7 +417,7 @@ public void run()
sign.setServerInfo(serverInfo);
updateArray(layout, serverInfo);
sendUpdateSynchronized(location, layout);
- changeBlock(location, signLayout.getBlockId(), signLayout.getSubId());
+ changeBlock(location, signLayout.getBlockName(), signLayout.getBlockId(), signLayout.getSubId());
} else
{
sign.setServerInfo(null);
@@ -426,7 +430,7 @@ public void run()
SignLayout _signLayout = getLayout(sign.getTargetGroup(), "maintenance");
String[] layout = updateOfflineAndMaintenance(_signLayout.getSignLayout().clone(), sign);
sendUpdateSynchronized(location, layout);
- changeBlock(location, _signLayout.getBlockId(), _signLayout.getSubId());
+ changeBlock(location, _signLayout.getBlockName(), _signLayout.getBlockId(), _signLayout.getSubId());
}
}
}
@@ -459,7 +463,7 @@ public boolean exists(Sign sign)
if (Bukkit.getWorld(sign.getPosition().getWorld()) != null)
{
Location location = toLocation(sign.getPosition());
- return location.getBlock().getType() == Material.SIGN_POST || location.getBlock().getType() == Material.WALL_SIGN;
+ return location.getBlock().getState() instanceof org.bukkit.block.Sign;
} else
{
return false;
@@ -470,16 +474,23 @@ public boolean exists(Sign sign)
}
}
- public void changeBlock(Location location, int id, int subId)
- {
- Bukkit.getScheduler().runTask(CloudServer.getInstance().getPlugin(), new Runnable() {
- @Override
- public void run()
- {
- if (id != -1 && id != 0 && subId != -1)
- {
- org.bukkit.material.Sign sign = (org.bukkit.material.Sign) location.getBlock().getState().getData();
- location.getBlock().getRelative(sign.getAttachedFace()).setTypeIdAndData(id, (byte) subId, true);
+ public void changeBlock(Location location, String blockName, int blockId, int subId) {
+ Bukkit.getScheduler().runTask(CloudServer.getInstance().getPlugin(), () -> {
+ Material material = ItemStackBuilder.getMaterialIgnoreVersion(blockName, blockId);
+ BlockState signBlockState = location.getBlock().getState();
+
+ if (material != null && subId != -1 && signBlockState instanceof org.bukkit.block.Sign) {
+ MaterialData materialData = signBlockState.getData();
+
+ if(materialData instanceof org.bukkit.material.Sign) { // this will return false in newer 1.14 spigot versions, even if it's a sign
+ org.bukkit.material.Sign materialSign = (org.bukkit.material.Sign) materialData;
+ if(materialSign.isWallSign()) {
+ Block backBlock = location.getBlock().getRelative(materialSign.getAttachedFace());
+ BlockState blockState = backBlock.getState();
+ blockState.setType(material);
+ blockState.setData(new MaterialData(material, (byte) subId));
+ blockState.update(true);
+ }
}
}
});
@@ -597,7 +608,7 @@ public void handleUpdate(Sign sign, ServerInfo serverInfo)
for (Player all : Bukkit.getOnlinePlayers())
sendUpdate(all, location, layout);
sendUpdateSynchronizedTask(toLocation(sign.getPosition()), layout);
- changeBlock(location, _signLayout.getBlockId(), _signLayout.getSubId());
+ changeBlock(location, _signLayout.getBlockName(), _signLayout.getBlockId(), _signLayout.getSubId());
return;
}
@@ -634,7 +645,7 @@ public void handleUpdate(Sign sign, ServerInfo serverInfo)
for (Player all : Bukkit.getOnlinePlayers())
sendUpdate(all, location, layout);
sendUpdateSynchronizedTask(location, layout);
- changeBlock(location, signLayout.getBlockId(), signLayout.getSubId());
+ changeBlock(location, signLayout.getBlockName(), signLayout.getBlockId(), signLayout.getSubId());
} else
{
sign.setServerInfo(null);
@@ -670,7 +681,7 @@ public void onServerAdd(ServerInfo serverInfo)
for (Player all : Bukkit.getOnlinePlayers())
sendUpdate(all, location, layout);
sendUpdateSynchronizedTask(toLocation(sign.getPosition()), layout);
- changeBlock(location, signLayout.getBlockId(), signLayout.getSubId());
+ changeBlock(location, signLayout.getBlockName(), signLayout.getBlockId(), signLayout.getSubId());
return;
}
String[] layout;
@@ -693,7 +704,7 @@ public void onServerAdd(ServerInfo serverInfo)
for (Player all : Bukkit.getOnlinePlayers())
sendUpdate(all, location, layout);
sendUpdateSynchronizedTask(location, layout);
- changeBlock(location, signLayout.getBlockId(), signLayout.getSubId());
+ changeBlock(location, signLayout.getBlockName(), signLayout.getBlockId(), signLayout.getSubId());
} else
{
sign.setServerInfo(null);
@@ -719,7 +730,7 @@ public void onServerAdd(ServerInfo serverInfo)
for (Player all : Bukkit.getOnlinePlayers())
sendUpdate(all, location, layout);
sendUpdateSynchronizedTask(toLocation(next.getPosition()), layout);
- changeBlock(location, signLayout.getBlockId(), signLayout.getSubId());
+ changeBlock(location, signLayout.getBlockName(), signLayout.getBlockId(), signLayout.getSubId());
return;
}
String[] layout;
@@ -742,7 +753,7 @@ public void onServerAdd(ServerInfo serverInfo)
for (Player all : Bukkit.getOnlinePlayers())
sendUpdate(all, location, layout);
sendUpdateSynchronizedTask(location, layout);
- changeBlock(location, signLayout.getBlockId(), signLayout.getSubId());
+ changeBlock(location, signLayout.getBlockName(), signLayout.getBlockId(), signLayout.getSubId());
} else
{
sign.setServerInfo(null);
@@ -751,7 +762,7 @@ public void onServerAdd(ServerInfo serverInfo)
for (Player all : Bukkit.getOnlinePlayers())
sendUpdate(all, location, layout);
sendUpdateSynchronizedTask(location, layout);
- changeBlock(location, signLayout.getBlockId(), signLayout.getSubId());
+ changeBlock(location, signLayout.getBlockName(), signLayout.getBlockId(), signLayout.getSubId());
}
}
else
@@ -772,7 +783,7 @@ public void onServerAdd(ServerInfo serverInfo)
for (Player all : Bukkit.getOnlinePlayers())
sendUpdate(all, location, layout);
sendUpdateSynchronizedTask(toLocation(sign.getPosition()), layout);
- changeBlock(location, signLayout.getBlockId(), signLayout.getSubId());
+ changeBlock(location, signLayout.getBlockName(), signLayout.getBlockId(), signLayout.getSubId());
return;
}
@@ -796,7 +807,7 @@ public void onServerAdd(ServerInfo serverInfo)
for (Player all : Bukkit.getOnlinePlayers())
sendUpdate(all, location, layout);
sendUpdateSynchronizedTask(location, layout);
- changeBlock(location, signLayout.getBlockId(), signLayout.getSubId());
+ changeBlock(location, signLayout.getBlockName(), signLayout.getBlockId(), signLayout.getSubId());
} else
{
newSign.setServerInfo(null);
@@ -805,7 +816,7 @@ public void onServerAdd(ServerInfo serverInfo)
for (Player all : Bukkit.getOnlinePlayers())
sendUpdate(all, location, layout);
sendUpdateSynchronizedTask(location, layout);
- changeBlock(location, signLayout.getBlockId(), signLayout.getSubId());
+ changeBlock(location, signLayout.getBlockName(), signLayout.getBlockId(), signLayout.getSubId());
}
}
}
@@ -875,14 +886,14 @@ public void run()
sign.setServerInfo(serverInfo);
updateArray(layout, serverInfo);
sendUpdateSynchronized(location, layout);
- changeBlock(location, signLayout.getBlockId(), signLayout.getSubId());
+ changeBlock(location, signLayout.getBlockName(), signLayout.getBlockId(), signLayout.getSubId());
} else
{
sign.setServerInfo(null);
SignLayout signLayout = getSearchingLayout(((ThreadImpl) worker).animationTick);
String[] layout = updateOfflineAndMaintenance(signLayout.getSignLayout().clone(), sign);
sendUpdateSynchronized(location, layout);
- changeBlock(location, signLayout.getBlockId(), signLayout.getSubId());
+ changeBlock(location, signLayout.getBlockName(), signLayout.getBlockId(), signLayout.getSubId());
}
} else
diff --git a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/serverselectors/packet/in/PacketInMobSelector.java b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/serverselectors/packet/in/PacketInMobSelector.java
index 05fd9544e..584fb2037 100644
--- a/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/serverselectors/packet/in/PacketInMobSelector.java
+++ b/cloudnet-api/cloudnet-api-bridge/src/main/java/de/dytanic/cloudnet/bridge/internal/serverselectors/packet/in/PacketInMobSelector.java
@@ -10,6 +10,7 @@
import de.dytanic.cloudnet.bridge.CloudServer;
import de.dytanic.cloudnet.bridge.event.bukkit.BukkitMobInitEvent;
import de.dytanic.cloudnet.bridge.internal.serverselectors.MobSelector;
+import de.dytanic.cloudnet.bridge.internal.util.ItemStackBuilder;
import de.dytanic.cloudnet.bridge.internal.util.ReflectionUtil;
import de.dytanic.cloudnet.lib.NetworkUtils;
import de.dytanic.cloudnet.lib.network.protocol.packet.PacketSender;
@@ -39,8 +40,7 @@
public class PacketInMobSelector extends PacketInHandlerDefault {
@Override
- public void handleInput(Document data, PacketSender packetSender)
- {
+ public void handleInput(Document data, PacketSender packetSender) {
Map mobMap = data.getObject("mobs", new TypeToken