diff --git a/HolographicDisplays/API/com/gmail/filoghost/holographicdisplays/api/Hologram.java b/HolographicDisplays/API/com/gmail/filoghost/holographicdisplays/api/Hologram.java index 2c7d63d5..673a6fe7 100644 --- a/HolographicDisplays/API/com/gmail/filoghost/holographicdisplays/api/Hologram.java +++ b/HolographicDisplays/API/com/gmail/filoghost/holographicdisplays/api/Hologram.java @@ -89,6 +89,14 @@ public interface Hologram { public int size(); + /** + * The physical height of the hologram, counting all the lines. Since: v2.1.4 + * + * @return the height of the hologram, counting all the lines and the gaps between them + */ + public double getHeight(); + + /** * Teleports a hologram to the given location. * diff --git a/HolographicDisplays/Plugin/com/gmail/filoghost/holographicdisplays/bridge/bungeecord/serverpinger/PingResponse.java b/HolographicDisplays/Plugin/com/gmail/filoghost/holographicdisplays/bridge/bungeecord/serverpinger/PingResponse.java index eecda0f9..b487fb7c 100644 --- a/HolographicDisplays/Plugin/com/gmail/filoghost/holographicdisplays/bridge/bungeecord/serverpinger/PingResponse.java +++ b/HolographicDisplays/Plugin/com/gmail/filoghost/holographicdisplays/bridge/bungeecord/serverpinger/PingResponse.java @@ -3,6 +3,7 @@ package com.gmail.filoghost.holographicdisplays.bridge.bungeecord.serverpinger; import java.lang.String; import org.json.simple.JSONObject; +import org.json.simple.JSONValue; import com.gmail.filoghost.holographicdisplays.util.DebugHandler; @@ -20,7 +21,23 @@ public class PingResponse this.maxPlayers = maxPlayers; } - public PingResponse(JSONObject json) { + public PingResponse(String jsonString, ServerAddress address) { + + if (jsonString == null || jsonString.isEmpty()) { + motd = "Invalid ping response"; + DebugHandler.logToConsole("Received empty Json response from IP \"" + address.toString() + "\"!"); + return; + } + + Object jsonObject = JSONValue.parse(jsonString); + + if (!(jsonObject instanceof JSONObject)) { + motd = "Invalid ping response"; + DebugHandler.logToConsole("Received invalid Json response from IP \"" + address.toString() + "\": " + jsonString); + return; + } + + JSONObject json = (JSONObject) jsonObject; isOnline = true; Object descriptionObject = json.get("description"); @@ -29,7 +46,7 @@ public class PingResponse motd = descriptionObject.toString(); } else { motd = "Invalid ping response"; - DebugHandler.logToConsole("Received invalid ping response: " + json.toString()); + DebugHandler.logToConsole("Received invalid Json response from IP \"" + address.toString() + "\": " + jsonString); } Object playersObject = json.get("players"); diff --git a/HolographicDisplays/Plugin/com/gmail/filoghost/holographicdisplays/bridge/bungeecord/serverpinger/ServerPingerPostNetty.java b/HolographicDisplays/Plugin/com/gmail/filoghost/holographicdisplays/bridge/bungeecord/serverpinger/ServerPingerPostNetty.java index 63615270..cae928ea 100644 --- a/HolographicDisplays/Plugin/com/gmail/filoghost/holographicdisplays/bridge/bungeecord/serverpinger/ServerPingerPostNetty.java +++ b/HolographicDisplays/Plugin/com/gmail/filoghost/holographicdisplays/bridge/bungeecord/serverpinger/ServerPingerPostNetty.java @@ -8,9 +8,6 @@ import java.net.Socket; import java.net.SocketTimeoutException; import java.net.UnknownHostException; -import org.json.simple.JSONObject; -import org.json.simple.JSONValue; - final class ServerPingerPostNetty extends ServerPinger { @Override @@ -43,7 +40,7 @@ final class ServerPingerPostNetty extends ServerPinger { final byte[] responseData = new byte[PacketUtils.readVarInt(dataIn)]; dataIn.readFully(responseData); final String jsonString = new String(responseData, PacketUtils.UTF8); - return new PingResponse((JSONObject) JSONValue.parse(jsonString)); + return new PingResponse(jsonString, serverAddress); } finally { PacketUtils.closeQuietly(dataOut); diff --git a/HolographicDisplays/Plugin/com/gmail/filoghost/holographicdisplays/bridge/bungeecord/serverpinger/ServerPingerPreNetty.java b/HolographicDisplays/Plugin/com/gmail/filoghost/holographicdisplays/bridge/bungeecord/serverpinger/ServerPingerPreNetty.java index 88987dec..0082a008 100644 --- a/HolographicDisplays/Plugin/com/gmail/filoghost/holographicdisplays/bridge/bungeecord/serverpinger/ServerPingerPreNetty.java +++ b/HolographicDisplays/Plugin/com/gmail/filoghost/holographicdisplays/bridge/bungeecord/serverpinger/ServerPingerPreNetty.java @@ -8,8 +8,11 @@ import java.lang.Integer; import java.io.DataInputStream; import java.io.DataOutputStream; import java.net.Socket; +import java.util.Arrays; import java.lang.String; +import com.gmail.filoghost.holographicdisplays.util.DebugHandler; + final class ServerPingerPreNetty extends ServerPinger { @Override @@ -33,6 +36,12 @@ final class ServerPingerPreNetty extends ServerPinger { dataIn.readFully(bytes); socket.close(); final String[] info = new String(bytes, PacketUtils.UTF16BE).split(String.valueOf('\0')); + + if (info.length < 6) { + DebugHandler.logToConsole("Received invalid ping response: " + Arrays.toString(info)); + return new PingResponse(true, "Invalid ping response", 0, 0); + } + final PingResponse response = new PingResponse(true, info[3], Integer.parseInt(info[4]), Integer.parseInt(info[5])); // String versionName = info[2]; // String protocol = info[1]; diff --git a/HolographicDisplays/Plugin/com/gmail/filoghost/holographicdisplays/object/CraftHologram.java b/HolographicDisplays/Plugin/com/gmail/filoghost/holographicdisplays/object/CraftHologram.java index 55c2ffd6..73a524c7 100644 --- a/HolographicDisplays/Plugin/com/gmail/filoghost/holographicdisplays/object/CraftHologram.java +++ b/HolographicDisplays/Plugin/com/gmail/filoghost/holographicdisplays/object/CraftHologram.java @@ -183,6 +183,21 @@ public class CraftHologram implements Hologram, com.gmail.filoghost.holograms.ap return lines.size(); } + @Override + public double getHeight() { + if (lines.isEmpty()) { + return 0; + } + + double height = 0.0; + + for (CraftHologramLine line : lines) { + height += line.getHeight(); + } + + height += Configuration.spaceBetweenLines * (lines.size() - 1); + return height; + } @Override public CraftVisibilityManager getVisibilityManager() { @@ -241,10 +256,11 @@ public class CraftHologram implements Hologram, com.gmail.filoghost.holograms.ap for (CraftHologramLine line : lines) { + currentY -= line.getHeight(); + if (first) { first = false; } else { - currentY -= line.getHeight(); currentY -= Configuration.spaceBetweenLines; } @@ -273,10 +289,11 @@ public class CraftHologram implements Hologram, com.gmail.filoghost.holograms.ap for (CraftHologramLine line : lines) { + currentY -= line.getHeight(); + if (first) { first = false; } else { - currentY -= line.getHeight(); currentY -= Configuration.spaceBetweenLines; } @@ -325,10 +342,11 @@ public class CraftHologram implements Hologram, com.gmail.filoghost.holograms.ap continue; } + currentY -= line.getHeight(); + if (first) { first = false; } else { - currentY -= line.getHeight(); currentY -= Configuration.spaceBetweenLines; }