diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/DefaultBackendAPI.java b/plugin/src/main/java/me/filoghost/holographicdisplays/DefaultBackendAPI.java index 49aac190..2777a325 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/DefaultBackendAPI.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/DefaultBackendAPI.java @@ -10,7 +10,7 @@ import me.filoghost.holographicdisplays.api.Hologram; import me.filoghost.holographicdisplays.api.internal.BackendAPI; import me.filoghost.holographicdisplays.api.placeholder.PlaceholderReplacer; import me.filoghost.holographicdisplays.nms.interfaces.NMSManager; -import me.filoghost.holographicdisplays.object.APIHologramManager; +import me.filoghost.holographicdisplays.object.api.APIHologramManager; import me.filoghost.holographicdisplays.placeholder.Placeholder; import me.filoghost.holographicdisplays.placeholder.PlaceholdersRegister; import org.bukkit.Bukkit; diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/HolographicDisplays.java b/plugin/src/main/java/me/filoghost/holographicdisplays/HolographicDisplays.java index d260b907..0d07265b 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/HolographicDisplays.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/HolographicDisplays.java @@ -29,11 +29,11 @@ import me.filoghost.holographicdisplays.listener.UpdateNotificationListener; import me.filoghost.holographicdisplays.nms.interfaces.ItemPickupManager; import me.filoghost.holographicdisplays.nms.interfaces.NMSManager; import me.filoghost.holographicdisplays.nms.interfaces.PacketController; -import me.filoghost.holographicdisplays.object.APIHologram; -import me.filoghost.holographicdisplays.object.APIHologramManager; -import me.filoghost.holographicdisplays.object.BaseHologram; -import me.filoghost.holographicdisplays.object.InternalHologram; -import me.filoghost.holographicdisplays.object.InternalHologramManager; +import me.filoghost.holographicdisplays.object.api.APIHologram; +import me.filoghost.holographicdisplays.object.api.APIHologramManager; +import me.filoghost.holographicdisplays.object.base.BaseHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramManager; import me.filoghost.holographicdisplays.placeholder.AnimationsRegister; import me.filoghost.holographicdisplays.placeholder.PlaceholdersManager; import me.filoghost.holographicdisplays.task.BungeeCleanupTask; @@ -175,7 +175,7 @@ public class HolographicDisplays extends FCommonsPlugin implements PacketControl // Then trigger a refresh for all of them for (BaseHologram hologram : internalHologramManager.getHolograms()) { - hologram.refreshAll(); + hologram.refresh(); } } diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/bridge/protocollib/PacketListener.java b/plugin/src/main/java/me/filoghost/holographicdisplays/bridge/protocollib/PacketListener.java index 899b5a88..8cc02212 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/bridge/protocollib/PacketListener.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/bridge/protocollib/PacketListener.java @@ -20,8 +20,8 @@ import me.filoghost.holographicdisplays.bridge.protocollib.packet.WrapperPlaySer import me.filoghost.holographicdisplays.nms.interfaces.NMSManager; import me.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand; import me.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase; -import me.filoghost.holographicdisplays.object.line.HologramLineImpl; -import me.filoghost.holographicdisplays.object.line.TextLineImpl; +import me.filoghost.holographicdisplays.object.base.BaseHologramLine; +import me.filoghost.holographicdisplays.object.base.BaseTextLine; import me.filoghost.holographicdisplays.placeholder.RelativePlaceholder; import me.filoghost.holographicdisplays.util.NMSVersion; import org.bukkit.World; @@ -67,7 +67,7 @@ class PacketListener extends PacketAdapter { // Spawn entity packet if (packet.getType() == PacketType.Play.Server.SPAWN_ENTITY_LIVING) { WrapperPlayServerSpawnEntityLiving spawnEntityPacket = new WrapperPlayServerSpawnEntityLiving(packet); - HologramLineImpl hologramLine = getHologramLine(event, spawnEntityPacket); + BaseHologramLine hologramLine = getHologramLine(event, spawnEntityPacket); if (hologramLine == null) { return; @@ -83,10 +83,10 @@ class PacketListener extends PacketAdapter { return; } - if (!(hologramLine instanceof TextLineImpl)) { + if (!(hologramLine instanceof BaseTextLine)) { return; } - TextLineImpl textLine = (TextLineImpl) hologramLine; + BaseTextLine textLine = (BaseTextLine) hologramLine; if (!hologramLine.getParent().isAllowPlaceholders() || !textLine.hasRelativePlaceholders()) { return; @@ -104,7 +104,7 @@ class PacketListener extends PacketAdapter { } else if (packet.getType() == PacketType.Play.Server.SPAWN_ENTITY) { WrapperPlayServerSpawnEntity spawnEntityPacket = new WrapperPlayServerSpawnEntity(packet); - HologramLineImpl hologramLine = getHologramLine(event, spawnEntityPacket); + BaseHologramLine hologramLine = getHologramLine(event, spawnEntityPacket); if (hologramLine == null) { return; @@ -117,7 +117,7 @@ class PacketListener extends PacketAdapter { } else if (packet.getType() == PacketType.Play.Server.ENTITY_METADATA) { WrapperPlayServerEntityMetadata entityMetadataPacket = new WrapperPlayServerEntityMetadata(packet); - HologramLineImpl hologramLine = getHologramLine(event, entityMetadataPacket); + BaseHologramLine hologramLine = getHologramLine(event, entityMetadataPacket); if (hologramLine == null) { return; @@ -128,10 +128,10 @@ class PacketListener extends PacketAdapter { return; } - if (!(hologramLine instanceof TextLineImpl)) { + if (!(hologramLine instanceof BaseTextLine)) { return; } - TextLineImpl textLine = (TextLineImpl) hologramLine; + BaseTextLine textLine = (BaseTextLine) hologramLine; if (!hologramLine.getParent().isAllowPlaceholders() || !textLine.hasRelativePlaceholders()) { return; @@ -183,11 +183,11 @@ class PacketListener extends PacketAdapter { return true; } - private HologramLineImpl getHologramLine(PacketEvent packetEvent, EntityRelatedPacketWrapper packetWrapper) { + private BaseHologramLine getHologramLine(PacketEvent packetEvent, EntityRelatedPacketWrapper packetWrapper) { return getHologramLine(packetEvent.getPlayer().getWorld(), packetWrapper.getEntityID()); } - private HologramLineImpl getHologramLine(World world, int entityID) { + private BaseHologramLine getHologramLine(World world, int entityID) { if (entityID < 0) { return null; } @@ -197,7 +197,7 @@ class PacketListener extends PacketAdapter { return null; // Entity not existing or not related to holograms. } - return (HologramLineImpl) nmsEntity.getHologramLine(); + return (BaseHologramLine) nmsEntity.getHologramLine(); } } diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/bridge/protocollib/PacketSender.java b/plugin/src/main/java/me/filoghost/holographicdisplays/bridge/protocollib/PacketSender.java index 70f51327..a4b27139 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/bridge/protocollib/PacketSender.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/bridge/protocollib/PacketSender.java @@ -18,12 +18,11 @@ import me.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand; import me.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase; import me.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem; import me.filoghost.holographicdisplays.nms.interfaces.entity.NMSSlime; -import me.filoghost.holographicdisplays.object.BaseHologram; -import me.filoghost.holographicdisplays.object.line.HologramLineImpl; -import me.filoghost.holographicdisplays.object.line.ItemLineImpl; -import me.filoghost.holographicdisplays.object.line.TextLineImpl; -import me.filoghost.holographicdisplays.object.line.TouchSlimeLineImpl; -import me.filoghost.holographicdisplays.object.line.TouchableLineImpl; +import me.filoghost.holographicdisplays.object.base.BaseHologram; +import me.filoghost.holographicdisplays.object.base.BaseItemLine; +import me.filoghost.holographicdisplays.object.base.BaseTextLine; +import me.filoghost.holographicdisplays.object.base.BaseTouchableLine; +import me.filoghost.holographicdisplays.object.base.SpawnableHologramLine; import me.filoghost.holographicdisplays.util.NMSVersion; import org.bukkit.entity.Player; @@ -40,12 +39,8 @@ class PacketSender { public void sendDestroyEntitiesPacket(Player player, BaseHologram hologram) { List ids = new ArrayList<>(); - for (HologramLineImpl line : hologram.getLinesUnsafe()) { - if (line.isSpawned()) { - for (int id : line.getEntitiesIDs()) { - ids.add(id); - } - } + for (SpawnableHologramLine line : hologram.getLinesUnsafe()) { + line.collectEntityIDs(ids); } if (!ids.isEmpty()) { @@ -54,45 +49,39 @@ class PacketSender { } public void sendCreateEntitiesPacket(Player player, BaseHologram hologram) { - for (HologramLineImpl line : hologram.getLinesUnsafe()) { + for (SpawnableHologramLine line : hologram.getLinesUnsafe()) { sendCreateEntitiesPacket(player, line); } } - private void sendCreateEntitiesPacket(Player player, HologramLineImpl line) { - if (!line.isSpawned()) { - return; - } + private void sendCreateEntitiesPacket(Player player, SpawnableHologramLine line) { + if (line instanceof BaseTextLine) { + BaseTextLine textLine = (BaseTextLine) line; + + if (textLine.getNMSNameable() != null) { + sendSpawnArmorStandPacket(player, textLine.getNMSNameable()); + } - TouchableLineImpl touchableLine; - - if (line instanceof TextLineImpl) { - TextLineImpl textLine = (TextLineImpl) line; - touchableLine = textLine; - - sendSpawnArmorStandPacket(player, (NMSArmorStand) textLine.getNmsNameable()); - - } else if (line instanceof ItemLineImpl) { - ItemLineImpl itemLine = (ItemLineImpl) line; - touchableLine = itemLine; - - sendSpawnArmorStandPacket(player, (NMSArmorStand) itemLine.getNmsVehicle()); - sendSpawnItemPacket(player, itemLine.getNmsItem()); - sendVehicleAttachPacket(player, itemLine.getNmsVehicle(), itemLine.getNmsItem()); - sendItemMetadataPacket(player, itemLine.getNmsItem()); + } else if (line instanceof BaseItemLine) { + BaseItemLine itemLine = (BaseItemLine) line; + if (itemLine.getNMSItem() != null && itemLine.getNMSVehicle() != null) { + sendSpawnArmorStandPacket(player, itemLine.getNMSVehicle()); + sendSpawnItemPacket(player, itemLine.getNMSItem()); + sendVehicleAttachPacket(player, itemLine.getNMSVehicle(), itemLine.getNMSItem()); + sendItemMetadataPacket(player, itemLine.getNMSItem()); + } } else { throw new IllegalArgumentException("Unexpected hologram line type: " + line.getClass().getName()); } - if (touchableLine.getTouchSlime() != null) { - TouchSlimeLineImpl touchSlime = touchableLine.getTouchSlime(); + // All sub-types of lines are touchable, no need to check instance type + BaseTouchableLine touchableLine = (BaseTouchableLine) line; - if (touchSlime.isSpawned()) { - sendSpawnArmorStandPacket(player, (NMSArmorStand) touchSlime.getNmsVehicle()); - sendSpawnSlimePacket(player, touchSlime.getNmsSlime()); - sendVehicleAttachPacket(player, touchSlime.getNmsVehicle(), touchSlime.getNmsSlime()); - } + if (touchableLine.getNMSSlime() != null && touchableLine.getNMSVehicle() != null) { + sendSpawnArmorStandPacket(player, touchableLine.getNMSVehicle()); + sendSpawnSlimePacket(player, touchableLine.getNMSSlime()); + sendVehicleAttachPacket(player, touchableLine.getNMSVehicle(), touchableLine.getNMSSlime()); } } diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/bridge/protocollib/ProtocolLibHook.java b/plugin/src/main/java/me/filoghost/holographicdisplays/bridge/protocollib/ProtocolLibHook.java index bcc5c571..f427c7db 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/bridge/protocollib/ProtocolLibHook.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/bridge/protocollib/ProtocolLibHook.java @@ -8,7 +8,7 @@ package me.filoghost.holographicdisplays.bridge.protocollib; import com.google.common.base.Preconditions; import me.filoghost.fcommons.logging.Log; import me.filoghost.holographicdisplays.nms.interfaces.NMSManager; -import me.filoghost.holographicdisplays.object.BaseHologram; +import me.filoghost.holographicdisplays.object.base.BaseHologram; import me.filoghost.holographicdisplays.util.VersionUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/HologramCommandManager.java b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/HologramCommandManager.java index 0d58e8f7..d8d4e859 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/HologramCommandManager.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/HologramCommandManager.java @@ -35,8 +35,8 @@ import me.filoghost.holographicdisplays.common.Utils; import me.filoghost.holographicdisplays.disk.ConfigManager; import me.filoghost.holographicdisplays.disk.Configuration; import me.filoghost.holographicdisplays.nms.interfaces.NMSManager; -import me.filoghost.holographicdisplays.object.InternalHologram; -import me.filoghost.holographicdisplays.object.InternalHologramManager; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramManager; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ComponentBuilder; diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/HologramCommandValidate.java b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/HologramCommandValidate.java index 72fe73c0..83b10ac3 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/HologramCommandValidate.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/HologramCommandValidate.java @@ -10,9 +10,9 @@ import me.filoghost.fcommons.command.validation.CommandValidate; import me.filoghost.holographicdisplays.common.Utils; import me.filoghost.holographicdisplays.disk.HologramLineParser; import me.filoghost.holographicdisplays.disk.HologramLoadException; -import me.filoghost.holographicdisplays.object.InternalHologram; -import me.filoghost.holographicdisplays.object.InternalHologramManager; -import me.filoghost.holographicdisplays.object.line.HologramLineImpl; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramLine; +import me.filoghost.holographicdisplays.object.internal.InternalHologramManager; import me.filoghost.holographicdisplays.util.FileUtils; import java.nio.file.Files; @@ -20,7 +20,7 @@ import java.nio.file.Path; public class HologramCommandValidate { - public static HologramLineImpl parseHologramLine(InternalHologram hologram, String serializedLine, boolean validateMaterial) throws CommandException { + public static InternalHologramLine parseHologramLine(InternalHologram hologram, String serializedLine, boolean validateMaterial) throws CommandException { try { return HologramLineParser.parseLine(hologram, serializedLine, validateMaterial); } catch (HologramLoadException e) { diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/AddlineCommand.java b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/AddlineCommand.java index 93dd0d88..a759cc82 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/AddlineCommand.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/AddlineCommand.java @@ -13,9 +13,9 @@ import me.filoghost.holographicdisplays.commands.HologramCommandValidate; import me.filoghost.holographicdisplays.common.Utils; import me.filoghost.holographicdisplays.disk.ConfigManager; import me.filoghost.holographicdisplays.event.InternalHologramEditEvent; -import me.filoghost.holographicdisplays.object.InternalHologram; -import me.filoghost.holographicdisplays.object.InternalHologramManager; -import me.filoghost.holographicdisplays.object.line.HologramLineImpl; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramLine; +import me.filoghost.holographicdisplays.object.internal.InternalHologramManager; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; @@ -41,9 +41,9 @@ public class AddlineCommand extends LineEditingCommand implements QuickEditComma InternalHologram hologram = HologramCommandValidate.getNamedHologram(internalHologramManager, args[0]); String serializedLine = Utils.join(args, " ", 1, args.length); - HologramLineImpl line = HologramCommandValidate.parseHologramLine(hologram, serializedLine, true); + InternalHologramLine line = HologramCommandValidate.parseHologramLine(hologram, serializedLine, true); hologram.getLinesUnsafe().add(line); - hologram.refreshAll(); + hologram.refresh(); configManager.getHologramDatabase().addOrUpdate(hologram); configManager.saveHologramDatabase(); diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/AlignCommand.java b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/AlignCommand.java index d1424dfd..78888dd1 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/AlignCommand.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/AlignCommand.java @@ -12,8 +12,8 @@ import me.filoghost.holographicdisplays.Colors; import me.filoghost.holographicdisplays.commands.HologramCommandValidate; import me.filoghost.holographicdisplays.commands.HologramSubCommand; import me.filoghost.holographicdisplays.disk.ConfigManager; -import me.filoghost.holographicdisplays.object.InternalHologram; -import me.filoghost.holographicdisplays.object.InternalHologramManager; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramManager; import org.bukkit.Location; import org.bukkit.command.CommandSender; @@ -55,9 +55,7 @@ public class AlignCommand extends HologramSubCommand { throw new CommandException("You must specify either X, Y, Z or XZ, " + axis + " is not a valid axis."); } - hologram.teleport(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ()); - hologram.despawnEntities(); - hologram.refreshAll(); + hologram.teleport(loc); configManager.getHologramDatabase().addOrUpdate(hologram); configManager.saveHologramDatabase(); diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/CopyCommand.java b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/CopyCommand.java index 3286b53d..20e9fb5c 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/CopyCommand.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/CopyCommand.java @@ -11,9 +11,9 @@ import me.filoghost.holographicdisplays.Colors; import me.filoghost.holographicdisplays.commands.HologramCommandValidate; import me.filoghost.holographicdisplays.commands.HologramSubCommand; import me.filoghost.holographicdisplays.disk.ConfigManager; -import me.filoghost.holographicdisplays.object.InternalHologram; -import me.filoghost.holographicdisplays.object.InternalHologramManager; -import me.filoghost.holographicdisplays.object.line.HologramLineImpl; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramLine; +import me.filoghost.holographicdisplays.object.internal.InternalHologramManager; import org.bukkit.command.CommandSender; public class CopyCommand extends HologramSubCommand { @@ -37,12 +37,12 @@ public class CopyCommand extends HologramSubCommand { InternalHologram toHologram = HologramCommandValidate.getNamedHologram(internalHologramManager, args[1]); toHologram.clearLines(); - for (HologramLineImpl line : fromHologram.getLinesUnsafe()) { - HologramLineImpl clonedLine = HologramCommandValidate.parseHologramLine(toHologram, line.getSerializedConfigValue(), false); + for (InternalHologramLine line : fromHologram.getLinesUnsafe()) { + InternalHologramLine clonedLine = HologramCommandValidate.parseHologramLine(toHologram, line.getSerializedConfigValue(), false); toHologram.getLinesUnsafe().add(clonedLine); } - toHologram.refreshAll(); + toHologram.refresh(); configManager.getHologramDatabase().addOrUpdate(toHologram); configManager.saveHologramDatabase(); diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/CreateCommand.java b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/CreateCommand.java index 6f565584..40b87467 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/CreateCommand.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/CreateCommand.java @@ -13,9 +13,9 @@ import me.filoghost.holographicdisplays.commands.HologramCommandValidate; import me.filoghost.holographicdisplays.commands.HologramSubCommand; import me.filoghost.holographicdisplays.common.Utils; import me.filoghost.holographicdisplays.disk.ConfigManager; -import me.filoghost.holographicdisplays.object.InternalHologram; -import me.filoghost.holographicdisplays.object.InternalHologramManager; -import me.filoghost.holographicdisplays.object.line.HologramLineImpl; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramLine; +import me.filoghost.holographicdisplays.object.internal.InternalHologramManager; import org.bukkit.Location; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -63,14 +63,14 @@ public class CreateCommand extends HologramSubCommand { String text = Utils.join(args, " ", 1, args.length); CommandValidate.check(!text.equalsIgnoreCase("{empty}"), "The first line should not be empty."); - HologramLineImpl line = HologramCommandValidate.parseHologramLine(hologram, text, true); + InternalHologramLine line = HologramCommandValidate.parseHologramLine(hologram, text, true); hologram.getLinesUnsafe().add(line); player.sendMessage(Colors.SECONDARY_SHADOW + "(Change the lines with /" + context.getRootLabel() + " edit " + hologram.getName() + ")"); } else { hologram.appendTextLine("Default hologram. Change it with " + Colors.PRIMARY + "/" + context.getRootLabel() + " edit " + hologram.getName()); } - hologram.refreshAll(); + hologram.refresh(); configManager.getHologramDatabase().addOrUpdate(hologram); configManager.saveHologramDatabase(); diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/DebugCommand.java b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/DebugCommand.java index 7a512fa0..bfb6f344 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/DebugCommand.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/DebugCommand.java @@ -11,8 +11,8 @@ import me.filoghost.holographicdisplays.api.Hologram; import me.filoghost.holographicdisplays.commands.HologramSubCommand; import me.filoghost.holographicdisplays.nms.interfaces.NMSManager; import me.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase; -import me.filoghost.holographicdisplays.object.APIHologram; -import me.filoghost.holographicdisplays.object.InternalHologram; +import me.filoghost.holographicdisplays.object.api.APIHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.World; diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/DeleteCommand.java b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/DeleteCommand.java index 02f12c3f..105a3033 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/DeleteCommand.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/DeleteCommand.java @@ -11,8 +11,8 @@ import me.filoghost.holographicdisplays.Colors; import me.filoghost.holographicdisplays.commands.HologramCommandValidate; import me.filoghost.holographicdisplays.commands.HologramSubCommand; import me.filoghost.holographicdisplays.disk.ConfigManager; -import me.filoghost.holographicdisplays.object.InternalHologram; -import me.filoghost.holographicdisplays.object.InternalHologramManager; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramManager; import org.bukkit.command.CommandSender; public class DeleteCommand extends HologramSubCommand { @@ -34,7 +34,7 @@ public class DeleteCommand extends HologramSubCommand { public void execute(CommandSender sender, String[] args, SubCommandContext context) throws CommandException { InternalHologram hologram = HologramCommandValidate.getNamedHologram(internalHologramManager, args[0]); - hologram.delete(); + internalHologramManager.deleteHologram(hologram); configManager.getHologramDatabase().removeHologram(hologram); configManager.saveHologramDatabase(); diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/EditCommand.java b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/EditCommand.java index 127e24bd..a5ea9bb8 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/EditCommand.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/EditCommand.java @@ -12,8 +12,8 @@ import me.filoghost.holographicdisplays.commands.HologramCommandManager; import me.filoghost.holographicdisplays.commands.HologramCommandValidate; import me.filoghost.holographicdisplays.commands.HologramSubCommand; import me.filoghost.holographicdisplays.commands.Messages; -import me.filoghost.holographicdisplays.object.InternalHologram; -import me.filoghost.holographicdisplays.object.InternalHologramManager; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramManager; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ComponentBuilder; diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/InfoCommand.java b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/InfoCommand.java index 83f19592..16f58475 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/InfoCommand.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/InfoCommand.java @@ -11,9 +11,9 @@ import me.filoghost.holographicdisplays.Colors; import me.filoghost.holographicdisplays.commands.HologramCommandManager; import me.filoghost.holographicdisplays.commands.HologramCommandValidate; import me.filoghost.holographicdisplays.commands.Messages; -import me.filoghost.holographicdisplays.object.InternalHologram; -import me.filoghost.holographicdisplays.object.InternalHologramManager; -import me.filoghost.holographicdisplays.object.line.HologramLineImpl; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramLine; +import me.filoghost.holographicdisplays.object.internal.InternalHologramManager; import org.bukkit.command.CommandSender; public class InfoCommand extends LineEditingCommand implements QuickEditCommand { @@ -39,7 +39,7 @@ public class InfoCommand extends LineEditingCommand implements QuickEditCommand Messages.sendTitle(sender, "Lines of the hologram '" + hologram.getName() + "'"); int index = 0; - for (HologramLineImpl line : hologram.getLinesUnsafe()) { + for (InternalHologramLine line : hologram.getLinesUnsafe()) { sender.sendMessage(Colors.SECONDARY + Colors.BOLD + (++index) + Colors.SECONDARY_SHADOW + ". " + Colors.SECONDARY + line.getSerializedConfigValue()); } commandManager.sendQuickEditCommands(context, hologram); diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/InsertlineCommand.java b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/InsertlineCommand.java index 26eb72bb..98505edb 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/InsertlineCommand.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/InsertlineCommand.java @@ -15,9 +15,9 @@ import me.filoghost.holographicdisplays.commands.Messages; import me.filoghost.holographicdisplays.common.Utils; import me.filoghost.holographicdisplays.disk.ConfigManager; import me.filoghost.holographicdisplays.event.InternalHologramEditEvent; -import me.filoghost.holographicdisplays.object.InternalHologram; -import me.filoghost.holographicdisplays.object.InternalHologramManager; -import me.filoghost.holographicdisplays.object.line.HologramLineImpl; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramLine; +import me.filoghost.holographicdisplays.object.internal.InternalHologramManager; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; @@ -51,9 +51,9 @@ public class InsertlineCommand extends LineEditingCommand implements QuickEditCo CommandValidate.check(insertAfter >= 0 && insertAfter <= oldLinesAmount, "The number must be between 0 and " + hologram.size() + "(amount of lines of the hologram)."); - HologramLineImpl line = HologramCommandValidate.parseHologramLine(hologram, serializedLine, true); + InternalHologramLine line = HologramCommandValidate.parseHologramLine(hologram, serializedLine, true); hologram.getLinesUnsafe().add(insertAfter, line); - hologram.refreshAll(); + hologram.refresh(); configManager.getHologramDatabase().addOrUpdate(hologram); configManager.saveHologramDatabase(); diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/ListCommand.java b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/ListCommand.java index f691d5ba..e3cfd10f 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/ListCommand.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/ListCommand.java @@ -11,8 +11,8 @@ import me.filoghost.fcommons.command.validation.CommandValidate; import me.filoghost.holographicdisplays.Colors; import me.filoghost.holographicdisplays.commands.HologramSubCommand; import me.filoghost.holographicdisplays.commands.Messages; -import me.filoghost.holographicdisplays.object.InternalHologram; -import me.filoghost.holographicdisplays.object.InternalHologramManager; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramManager; import org.bukkit.command.CommandSender; import java.util.List; diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/MovehereCommand.java b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/MovehereCommand.java index da648f42..760e02a0 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/MovehereCommand.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/MovehereCommand.java @@ -12,8 +12,8 @@ import me.filoghost.holographicdisplays.Colors; import me.filoghost.holographicdisplays.commands.HologramCommandValidate; import me.filoghost.holographicdisplays.commands.HologramSubCommand; import me.filoghost.holographicdisplays.disk.ConfigManager; -import me.filoghost.holographicdisplays.object.InternalHologram; -import me.filoghost.holographicdisplays.object.InternalHologramManager; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramManager; import org.bukkit.Location; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -39,9 +39,7 @@ public class MovehereCommand extends HologramSubCommand { Player player = CommandValidate.getPlayerSender(sender); InternalHologram hologram = HologramCommandValidate.getNamedHologram(internalHologramManager, args[0]); - hologram.teleport(player.getWorld(), player.getLocation().getX(), player.getLocation().getY(), player.getLocation().getZ()); - hologram.despawnEntities(); - hologram.refreshAll(); + hologram.teleport(player.getLocation()); configManager.getHologramDatabase().addOrUpdate(hologram); configManager.saveHologramDatabase(); diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/NearCommand.java b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/NearCommand.java index d4ea39d6..119b1f48 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/NearCommand.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/NearCommand.java @@ -11,8 +11,8 @@ import me.filoghost.fcommons.command.validation.CommandValidate; import me.filoghost.holographicdisplays.Colors; import me.filoghost.holographicdisplays.commands.HologramSubCommand; import me.filoghost.holographicdisplays.commands.Messages; -import me.filoghost.holographicdisplays.object.InternalHologram; -import me.filoghost.holographicdisplays.object.InternalHologramManager; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramManager; import org.bukkit.World; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -44,7 +44,7 @@ public class NearCommand extends HologramSubCommand { List nearHolograms = new ArrayList<>(); for (InternalHologram hologram : internalHologramManager.getHolograms()) { - if (hologram.getLocation().getWorld().equals(world) && hologram.getLocation().distanceSquared(player.getLocation()) <= radiusSquared) { + if (hologram.getWorld().equals(world) && hologram.getLocation().distanceSquared(player.getLocation()) <= radiusSquared) { nearHolograms.add(hologram); } } diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/ReadimageCommand.java b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/ReadimageCommand.java index 42e38a58..0c4bc48d 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/ReadimageCommand.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/ReadimageCommand.java @@ -19,9 +19,9 @@ import me.filoghost.holographicdisplays.image.ImageMessage; import me.filoghost.holographicdisplays.image.ImageReadException; import me.filoghost.holographicdisplays.image.ImageReader; import me.filoghost.holographicdisplays.image.ImageTooWideException; -import me.filoghost.holographicdisplays.object.InternalHologram; -import me.filoghost.holographicdisplays.object.InternalHologramManager; -import me.filoghost.holographicdisplays.object.line.TextLineImpl; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramManager; +import me.filoghost.holographicdisplays.object.internal.InternalTextLine; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; @@ -114,11 +114,10 @@ public class ReadimageCommand extends LineEditingCommand { hologram.clearLines(); } for (String newLine : newLines) { - TextLineImpl line = new TextLineImpl(hologram, newLine); - line.setSerializedConfigValue(newLine); + InternalTextLine line = new InternalTextLine(hologram, newLine, newLine); hologram.getLinesUnsafe().add(line); } - hologram.refreshAll(); + hologram.refresh(); if (newLines.length < 5) { Messages.sendTip(sender, "The image has a very low height. You can increase it by increasing the width, it will scale automatically."); diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/ReadtextCommand.java b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/ReadtextCommand.java index f53218e9..d8896c38 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/ReadtextCommand.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/ReadtextCommand.java @@ -15,9 +15,9 @@ import me.filoghost.holographicdisplays.disk.ConfigManager; import me.filoghost.holographicdisplays.disk.HologramLineParser; import me.filoghost.holographicdisplays.disk.HologramLoadException; import me.filoghost.holographicdisplays.event.InternalHologramEditEvent; -import me.filoghost.holographicdisplays.object.InternalHologram; -import me.filoghost.holographicdisplays.object.InternalHologramManager; -import me.filoghost.holographicdisplays.object.line.HologramLineImpl; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramLine; +import me.filoghost.holographicdisplays.object.internal.InternalHologramManager; import me.filoghost.holographicdisplays.util.FileUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -73,10 +73,10 @@ public class ReadtextCommand extends LineEditingCommand { linesAmount = 40; } - List linesToAdd = new ArrayList<>(); + List linesToAdd = new ArrayList<>(); for (int i = 0; i < linesAmount; i++) { try { - HologramLineImpl line = HologramLineParser.parseLine(hologram, serializedLines.get(i), true); + InternalHologramLine line = HologramLineParser.parseLine(hologram, serializedLines.get(i), true); linesToAdd.add(line); } catch (HologramLoadException e) { throw new CommandException("Error at line " + (i + 1) + ": " + e.getMessage()); @@ -85,7 +85,7 @@ public class ReadtextCommand extends LineEditingCommand { hologram.clearLines(); hologram.getLinesUnsafe().addAll(linesToAdd); - hologram.refreshAll(); + hologram.refresh(); configManager.getHologramDatabase().addOrUpdate(hologram); configManager.saveHologramDatabase(); diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/RemovelineCommand.java b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/RemovelineCommand.java index 9c113624..b6387bc2 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/RemovelineCommand.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/RemovelineCommand.java @@ -13,8 +13,8 @@ import me.filoghost.holographicdisplays.commands.HologramCommandManager; import me.filoghost.holographicdisplays.commands.HologramCommandValidate; import me.filoghost.holographicdisplays.disk.ConfigManager; import me.filoghost.holographicdisplays.event.InternalHologramEditEvent; -import me.filoghost.holographicdisplays.object.InternalHologram; -import me.filoghost.holographicdisplays.object.InternalHologramManager; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramManager; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; @@ -47,7 +47,7 @@ public class RemovelineCommand extends LineEditingCommand implements QuickEditCo CommandValidate.check(hologram.size() > 1, "The hologram should have at least 1 line. If you want to delete it, use /" + context.getRootLabel() + " delete."); hologram.removeLine(index); - hologram.refreshAll(); + hologram.refresh(); configManager.getHologramDatabase().addOrUpdate(hologram); configManager.saveHologramDatabase(); diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/SetlineCommand.java b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/SetlineCommand.java index cff9d8ff..62318eee 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/SetlineCommand.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/SetlineCommand.java @@ -14,9 +14,9 @@ import me.filoghost.holographicdisplays.commands.HologramCommandValidate; import me.filoghost.holographicdisplays.common.Utils; import me.filoghost.holographicdisplays.disk.ConfigManager; import me.filoghost.holographicdisplays.event.InternalHologramEditEvent; -import me.filoghost.holographicdisplays.object.InternalHologram; -import me.filoghost.holographicdisplays.object.InternalHologramManager; -import me.filoghost.holographicdisplays.object.line.HologramLineImpl; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramLine; +import me.filoghost.holographicdisplays.object.internal.InternalHologramManager; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; @@ -46,11 +46,11 @@ public class SetlineCommand extends LineEditingCommand implements QuickEditComma CommandValidate.check(lineNumber >= 1 && lineNumber <= hologram.size(), "The line number must be between 1 and " + hologram.size() + "."); int index = lineNumber - 1; - HologramLineImpl line = HologramCommandValidate.parseHologramLine(hologram, serializedLine, true); - - hologram.getLinesUnsafe().get(index).despawn(); - hologram.getLinesUnsafe().set(index, line); - hologram.refreshAll(); + InternalHologramLine line = HologramCommandValidate.parseHologramLine(hologram, serializedLine, true); + + InternalHologramLine prevLine = hologram.getLinesUnsafe().set(index, line); + prevLine.despawn(); + hologram.refresh(); configManager.getHologramDatabase().addOrUpdate(hologram); configManager.saveHologramDatabase(); diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/TeleportCommand.java b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/TeleportCommand.java index 39fb7d70..db31a652 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/TeleportCommand.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/commands/subs/TeleportCommand.java @@ -11,8 +11,8 @@ import me.filoghost.fcommons.command.validation.CommandValidate; import me.filoghost.holographicdisplays.Colors; import me.filoghost.holographicdisplays.commands.HologramCommandValidate; import me.filoghost.holographicdisplays.commands.HologramSubCommand; -import me.filoghost.holographicdisplays.object.InternalHologram; -import me.filoghost.holographicdisplays.object.InternalHologramManager; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramManager; import org.bukkit.Location; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/disk/HologramConfig.java b/plugin/src/main/java/me/filoghost/holographicdisplays/disk/HologramConfig.java index 0360bf50..65435730 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/disk/HologramConfig.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/disk/HologramConfig.java @@ -7,9 +7,9 @@ package me.filoghost.holographicdisplays.disk; import me.filoghost.fcommons.Strings; import me.filoghost.fcommons.config.ConfigSection; -import me.filoghost.holographicdisplays.object.InternalHologram; -import me.filoghost.holographicdisplays.object.InternalHologramManager; -import me.filoghost.holographicdisplays.object.line.HologramLineImpl; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramLine; +import me.filoghost.holographicdisplays.object.internal.InternalHologramManager; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; @@ -38,7 +38,7 @@ public class HologramConfig { public HologramConfig(InternalHologram hologram) { this.name = hologram.getName(); this.serializedLines = new ArrayList<>(); - for (HologramLineImpl line : hologram.getLinesUnsafe()) { + for (InternalHologramLine line : hologram.getLinesUnsafe()) { serializedLines.add(line.getSerializedConfigValue()); } @@ -65,7 +65,7 @@ public class HologramConfig { for (String serializedLine : serializedLines) { try { - HologramLineImpl line = HologramLineParser.parseLine(hologram, serializedLine, false); + InternalHologramLine line = HologramLineParser.parseLine(hologram, serializedLine, false); hologram.getLinesUnsafe().add(line); } catch (HologramLoadException e) { // Rethrow with more details diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/disk/HologramDatabase.java b/plugin/src/main/java/me/filoghost/holographicdisplays/disk/HologramDatabase.java index 1177a1c9..2024076c 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/disk/HologramDatabase.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/disk/HologramDatabase.java @@ -7,7 +7,7 @@ package me.filoghost.holographicdisplays.disk; import me.filoghost.fcommons.config.Config; import me.filoghost.fcommons.config.ConfigSection; -import me.filoghost.holographicdisplays.object.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; import java.util.Collection; import java.util.LinkedHashMap; diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/disk/HologramLineParser.java b/plugin/src/main/java/me/filoghost/holographicdisplays/disk/HologramLineParser.java index 422bc11c..f1ddaa21 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/disk/HologramLineParser.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/disk/HologramLineParser.java @@ -9,10 +9,10 @@ import me.filoghost.fcommons.MaterialsHelper; import me.filoghost.fcommons.Strings; import me.filoghost.holographicdisplays.nbt.parser.MojangsonParseException; import me.filoghost.holographicdisplays.nbt.parser.MojangsonParser; -import me.filoghost.holographicdisplays.object.InternalHologram; -import me.filoghost.holographicdisplays.object.line.HologramLineImpl; -import me.filoghost.holographicdisplays.object.line.ItemLineImpl; -import me.filoghost.holographicdisplays.object.line.TextLineImpl; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramLine; +import me.filoghost.holographicdisplays.object.internal.InternalItemLine; +import me.filoghost.holographicdisplays.object.internal.InternalTextLine; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -21,23 +21,22 @@ public class HologramLineParser { private static final String ICON_PREFIX = "icon:"; - public static HologramLineImpl parseLine(InternalHologram hologram, String serializedLine, boolean checkMaterialValidity) throws HologramLoadException { - HologramLineImpl hologramLine; + public static InternalHologramLine parseLine(InternalHologram hologram, String serializedLine, boolean checkMaterialValidity) throws HologramLoadException { + InternalHologramLine hologramLine; if (serializedLine.toLowerCase().startsWith(ICON_PREFIX)) { String serializedIcon = serializedLine.substring(ICON_PREFIX.length()); ItemStack icon = parseItemStack(serializedIcon, checkMaterialValidity); - hologramLine = new ItemLineImpl(hologram, icon); + hologramLine = new InternalItemLine(hologram, icon, serializedLine); } else { if (serializedLine.trim().equalsIgnoreCase("{empty}")) { - hologramLine = new TextLineImpl(hologram, ""); + hologramLine = new InternalTextLine(hologram, "", serializedLine); } else { - hologramLine = new TextLineImpl(hologram, StringConverter.toReadableFormat(serializedLine)); + hologramLine = new InternalTextLine(hologram, StringConverter.toReadableFormat(serializedLine), serializedLine); } } - hologramLine.setSerializedConfigValue(serializedLine); return hologramLine; } diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/event/InternalHologramEditEvent.java b/plugin/src/main/java/me/filoghost/holographicdisplays/event/InternalHologramEditEvent.java index ec44ebba..0f7ed0c5 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/event/InternalHologramEditEvent.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/event/InternalHologramEditEvent.java @@ -5,7 +5,7 @@ */ package me.filoghost.holographicdisplays.event; -import me.filoghost.holographicdisplays.object.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/listener/ChunkListener.java b/plugin/src/main/java/me/filoghost/holographicdisplays/listener/ChunkListener.java index e49da87b..d25bb623 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/listener/ChunkListener.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/listener/ChunkListener.java @@ -2,9 +2,9 @@ package me.filoghost.holographicdisplays.listener; import me.filoghost.holographicdisplays.nms.interfaces.NMSManager; import me.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase; -import me.filoghost.holographicdisplays.object.APIHologramManager; -import me.filoghost.holographicdisplays.object.BaseHologram; -import me.filoghost.holographicdisplays.object.InternalHologramManager; +import me.filoghost.holographicdisplays.object.api.APIHologramManager; +import me.filoghost.holographicdisplays.object.base.BaseHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramManager; import me.filoghost.holographicdisplays.util.SchedulerUtils; import org.bukkit.Chunk; import org.bukkit.entity.Entity; diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/listener/MainListener.java b/plugin/src/main/java/me/filoghost/holographicdisplays/listener/MainListener.java index 5286c556..5721d5ee 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/listener/MainListener.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/listener/MainListener.java @@ -9,8 +9,8 @@ import me.filoghost.fcommons.logging.Log; import me.filoghost.holographicdisplays.HolographicDisplays; import me.filoghost.holographicdisplays.nms.interfaces.NMSManager; import me.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase; -import me.filoghost.holographicdisplays.object.APIHologram; -import me.filoghost.holographicdisplays.object.line.TouchSlimeLineImpl; +import me.filoghost.holographicdisplays.object.api.APIHologram; +import me.filoghost.holographicdisplays.object.base.BaseTouchableLine; import org.bukkit.GameMode; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; @@ -46,12 +46,12 @@ public class MainListener implements Listener { } NMSEntityBase entityBase = nmsManager.getNMSEntityBase(event.getRightClicked()); - if (entityBase == null || !(entityBase.getHologramLine() instanceof TouchSlimeLineImpl)) { + if (entityBase == null || !(entityBase.getHologramLine() instanceof BaseTouchableLine)) { return; } - TouchSlimeLineImpl touchSlime = (TouchSlimeLineImpl) entityBase.getHologramLine(); - if (touchSlime.getTouchablePiece().getTouchHandler() == null || !touchSlime.getParent().getVisibilityManager().isVisibleTo(clicker)) { + BaseTouchableLine touchableLine = (BaseTouchableLine) entityBase.getHologramLine(); + if (touchableLine.getTouchHandler() == null || !touchableLine.getParent().getVisibilityManager().isVisibleTo(clicker)) { return; } @@ -63,9 +63,9 @@ public class MainListener implements Listener { anticlickSpam.put(event.getPlayer(), System.currentTimeMillis()); try { - touchSlime.getTouchablePiece().getTouchHandler().onTouch(event.getPlayer()); + touchableLine.getTouchHandler().onTouch(event.getPlayer()); } catch (Throwable t) { - Plugin plugin = touchSlime.getParent() instanceof APIHologram ? ((APIHologram) touchSlime.getParent()).getOwner() : HolographicDisplays.getInstance(); + Plugin plugin = touchableLine.getParent() instanceof APIHologram ? ((APIHologram) touchableLine.getParent()).getOwner() : HolographicDisplays.getInstance(); Log.warning("The plugin " + plugin.getName() + " generated an exception when the player " + event.getPlayer().getName() + " touched a hologram.", t); } } diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/APIHologram.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/APIHologram.java deleted file mode 100644 index 04513475..00000000 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/object/APIHologram.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) filoghost and contributors - * - * SPDX-License-Identifier: GPL-3.0-or-later - */ -package me.filoghost.holographicdisplays.object; - -import me.filoghost.fcommons.Preconditions; -import me.filoghost.holographicdisplays.nms.interfaces.NMSManager; -import org.bukkit.Location; -import org.bukkit.plugin.Plugin; - -public class APIHologram extends BaseHologram { - - private final Plugin plugin; - private final APIHologramManager apiHologramManager; - - protected APIHologram(Location source, Plugin plugin, NMSManager nmsManager, APIHologramManager apiHologramManager) { - super(source, nmsManager); - Preconditions.notNull(plugin, "plugin"); - this.plugin = plugin; - this.apiHologramManager = apiHologramManager; - } - - public Plugin getOwner() { - return plugin; - } - - @Override - public void delete() { - apiHologramManager.deleteHologram(this); - } - -} diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/BaseHologram.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/BaseHologram.java deleted file mode 100644 index 8f502373..00000000 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/object/BaseHologram.java +++ /dev/null @@ -1,354 +0,0 @@ -/* - * Copyright (C) filoghost and contributors - * - * SPDX-License-Identifier: GPL-3.0-or-later - */ -package me.filoghost.holographicdisplays.object; - -import me.filoghost.fcommons.Preconditions; -import me.filoghost.holographicdisplays.api.Hologram; -import me.filoghost.holographicdisplays.api.VisibilityManager; -import me.filoghost.holographicdisplays.api.line.HologramLine; -import me.filoghost.holographicdisplays.api.line.ItemLine; -import me.filoghost.holographicdisplays.api.line.TextLine; -import me.filoghost.holographicdisplays.common.Utils; -import me.filoghost.holographicdisplays.disk.Configuration; -import me.filoghost.holographicdisplays.nms.interfaces.NMSManager; -import me.filoghost.holographicdisplays.object.line.HologramLineImpl; -import me.filoghost.holographicdisplays.object.line.ItemLineImpl; -import me.filoghost.holographicdisplays.object.line.TextLineImpl; -import me.filoghost.holographicdisplays.placeholder.PlaceholdersManager; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.inventory.ItemStack; - -import java.util.ArrayList; -import java.util.List; - -public abstract class BaseHologram implements Hologram { - - private final NMSManager nmsManager; - - // Position variables. - private World world; - private double x, y, z; - private int chunkX, chunkZ; - - // The entities that represent lines. - private final List lines; - - private final VisibilityManager visibilityManager; - private boolean allowPlaceholders; - private final long creationTimestamp; - private boolean deleted; - - public BaseHologram(Location location, NMSManager nmsManager) { - Preconditions.notNull(location, "location"); - setLocation(location.getWorld(), location.getX(), location.getY(), location.getZ()); - - this.nmsManager = nmsManager; - this.lines = new ArrayList<>(); - this.creationTimestamp = System.currentTimeMillis(); - this.visibilityManager = new VisibilityManagerImpl(this); - - this.allowPlaceholders = false; - } - - public boolean isInChunk(Chunk chunk) { - return chunk.getWorld() == world && chunk.getX() == chunkX && chunk.getZ() == chunkZ; - } - - @Override - public World getWorld() { - return world; - } - - @Override - public double getX() { - return x; - } - - @Override - public double getY() { - return y; - } - - @Override - public double getZ() { - return z; - } - - @Override - public Location getLocation() { - return new Location(world, x, y, z); - } - - private void setLocation(World world, double x, double y, double z) { - Preconditions.notNull(world, "world"); - - this.world = world; - this.x = x; - this.y = y; - this.z = z; - chunkX = Utils.floor(x) >> 4; - chunkZ = Utils.floor(z) >> 4; - } - - @Override - public boolean isDeleted() { - return deleted; - } - - public void setDeleted() { - if (!deleted) { - deleted = true; - clearLines(); - } - } - - public List getLinesUnsafe() { - return lines; - } - - @Override - public HologramLine getLine(int index) { - return lines.get(index); - } - - @Override - public TextLine appendTextLine(String text) { - checkState(); - - TextLineImpl line = new TextLineImpl(this, text); - lines.add(line); - refreshSingleLines(); - return line; - } - - @Override - public ItemLine appendItemLine(ItemStack itemStack) { - checkState(); - Preconditions.notNull(itemStack, "itemStack"); - - ItemLineImpl line = new ItemLineImpl(this, itemStack); - lines.add(line); - refreshSingleLines(); - return line; - } - - @Override - public TextLine insertTextLine(int index, String text) { - checkState(); - - TextLineImpl line = new TextLineImpl(this, text); - lines.add(index, line); - refreshSingleLines(); - return line; - } - - @Override - public ItemLine insertItemLine(int index, ItemStack itemStack) { - checkState(); - Preconditions.notNull(itemStack, "itemStack"); - - ItemLineImpl line = new ItemLineImpl(this, itemStack); - lines.add(index, line); - refreshSingleLines(); - return line; - } - - @Override - public void removeLine(int index) { - checkState(); - - lines.remove(index).despawn(); - refreshSingleLines(); - } - - public void removeLine(HologramLineImpl line) { - checkState(); - - lines.remove(line); - line.despawn(); - refreshSingleLines(); - } - - @Override - public void clearLines() { - for (HologramLineImpl line : lines) { - line.despawn(); - } - - lines.clear(); - } - - @Override - public int size() { - return lines.size(); - } - - @Override - public double getHeight() { - if (lines.isEmpty()) { - return 0; - } - - double height = 0.0; - - for (HologramLineImpl line : lines) { - height += line.getHeight(); - } - - height += Configuration.spaceBetweenLines * (lines.size() - 1); - return height; - } - - @Override - public VisibilityManager getVisibilityManager() { - return visibilityManager; - } - - @Override - public long getCreationTimestamp() { - return creationTimestamp; - } - - @Override - public boolean isAllowPlaceholders() { - return allowPlaceholders; - } - - @Override - public void setAllowPlaceholders(boolean allowPlaceholders) { - if (this.allowPlaceholders == allowPlaceholders) { - return; - } - - this.allowPlaceholders = allowPlaceholders; - refreshAll(); - } - - public NMSManager getNMSManager() { - return nmsManager; - } - - public void refreshAll() { - if (world.isChunkLoaded(chunkX, chunkZ)) { - spawnEntities(); - } - } - - public void refreshSingleLines() { - if (world.isChunkLoaded(chunkX, chunkZ)) { - double currentY = this.y; - boolean first = true; - - for (HologramLineImpl line : lines) { - currentY -= line.getHeight(); - - if (first) { - first = false; - } else { - currentY -= Configuration.spaceBetweenLines; - } - - if (line.isSpawned()) { - line.teleport(x, currentY, z); - } else { - line.spawn(world, x, currentY, z); - if (allowPlaceholders && line instanceof TextLineImpl) { - PlaceholdersManager.trackIfNecessary((TextLineImpl) line); - } - } - } - } - } - - /** - * Forces the entities to (re)spawn, without checking if the chunk is loaded. - */ - public void spawnEntities() { - checkState(); - - despawnEntities(); - - double currentY = this.y; - boolean first = true; - - for (HologramLineImpl line : lines) { - currentY -= line.getHeight(); - - if (first) { - first = false; - } else { - currentY -= Configuration.spaceBetweenLines; - } - - line.spawn(world, x, currentY, z); - if (allowPlaceholders && line instanceof TextLineImpl) { - PlaceholdersManager.trackIfNecessary((TextLineImpl) line); - } - } - } - - public void despawnEntities() { - for (HologramLineImpl piece : lines) { - piece.despawn(); - } - } - - @Override - public void teleport(Location location) { - Preconditions.notNull(location, "location"); - teleport(location.getWorld(), location.getX(), location.getY(), location.getZ()); - } - - @Override - public void teleport(World world, double x, double y, double z) { - checkState(); - Preconditions.notNull(world, "world"); - - setLocation(world, x, y, z); - - if (this.world != world) { - despawnEntities(); - refreshAll(); - return; - } - - double currentY = y; - boolean first = true; - - for (HologramLineImpl line : lines) { - if (!line.isSpawned()) { - continue; - } - - currentY -= line.getHeight(); - - if (first) { - first = false; - } else { - currentY -= Configuration.spaceBetweenLines; - } - - line.teleport(x, currentY, z); - } - } - - private void checkState() { - Preconditions.checkState(!deleted, "hologram already deleted"); - } - - @Override - public String toString() { - return "BaseHologram [world=" + world + ", x=" + x + ", y=" + y + ", z=" + z + ", lines=" + lines + ", deleted=" + deleted + "]"; - } - - /* - * Object.equals() and Object.hashCode() are not overridden: - * two holograms are equal only if they are the same exact instance. - */ - -} diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/HologramComponent.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/HologramComponent.java new file mode 100644 index 00000000..ef799812 --- /dev/null +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/object/HologramComponent.java @@ -0,0 +1,66 @@ +/* + * Copyright (C) filoghost and contributors + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ +package me.filoghost.holographicdisplays.object; + +import me.filoghost.fcommons.Preconditions; +import me.filoghost.holographicdisplays.common.Utils; +import org.bukkit.Chunk; +import org.bukkit.Location; +import org.bukkit.World; + +public abstract class HologramComponent { + + private World world; + private double x, y, z; + private int chunkX, chunkZ; + + public boolean isInChunk(Chunk chunk) { + return world != null + && chunk.getWorld() == world + && chunk.getX() == chunkX + && chunk.getZ() == chunkZ; + } + + public boolean isInLoadedChunk() { + return world.isChunkLoaded(chunkX, chunkZ); + } + + public Location getLocation() { + return new Location(world, x, y, z); + } + + protected void setLocation(Location location) { + setLocation(location.getWorld(), location.getX(), location.getY(), location.getZ()); + } + + protected void setLocation(World world, double x, double y, double z) { + Preconditions.notNull(world, "world"); + + this.world = world; + this.x = x; + this.y = y; + this.z = z; + this.chunkX = Utils.floor(x) >> 4; + this.chunkZ = Utils.floor(z) >> 4; + } + + public World getWorld() { + return world; + } + + public double getX() { + return x; + } + + public double getY() { + return y; + } + + public double getZ() { + return z; + } + +} diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/InternalHologram.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/InternalHologram.java deleted file mode 100644 index b6478e16..00000000 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/object/InternalHologram.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) filoghost and contributors - * - * SPDX-License-Identifier: GPL-3.0-or-later - */ -package me.filoghost.holographicdisplays.object; - -import me.filoghost.holographicdisplays.nms.interfaces.NMSManager; -import org.bukkit.Location; - -public class InternalHologram extends BaseHologram { - - private final String name; - private final InternalHologramManager internalHologramManager; - - protected InternalHologram(Location source, String name, NMSManager nmsManager, InternalHologramManager internalHologramManager) { - super(source, nmsManager); - this.name = name; - this.internalHologramManager = internalHologramManager; - setAllowPlaceholders(true); - } - - public String getName() { - return name; - } - - @Override - public void delete() { - internalHologramManager.deleteHologram(this); - } - - @Override - public String toString() { - return "InternalHologram [name=" + name + ", super=" + super.toString() + "]"; - } - -} diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/api/APIHologram.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/api/APIHologram.java new file mode 100644 index 00000000..d95664eb --- /dev/null +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/object/api/APIHologram.java @@ -0,0 +1,95 @@ +/* + * Copyright (C) filoghost and contributors + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ +package me.filoghost.holographicdisplays.object.api; + +import me.filoghost.fcommons.Preconditions; +import me.filoghost.holographicdisplays.api.Hologram; +import me.filoghost.holographicdisplays.api.line.ItemLine; +import me.filoghost.holographicdisplays.api.line.TextLine; +import me.filoghost.holographicdisplays.nms.interfaces.NMSManager; +import me.filoghost.holographicdisplays.object.base.BaseHologram; +import me.filoghost.holographicdisplays.object.base.BaseHologramLine; +import me.filoghost.holographicdisplays.object.base.BaseItemLine; +import me.filoghost.holographicdisplays.object.base.BaseTextLine; +import org.bukkit.Location; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.Plugin; + +import java.util.ArrayList; +import java.util.List; + +public class APIHologram extends BaseHologram implements Hologram { + + private final Plugin plugin; + private final APIHologramManager apiHologramManager; + private final List lines; + + protected APIHologram(Location source, Plugin plugin, NMSManager nmsManager, APIHologramManager apiHologramManager) { + super(source, nmsManager); + Preconditions.notNull(plugin, "plugin"); + this.plugin = plugin; + this.apiHologramManager = apiHologramManager; + this.lines = new ArrayList<>(); + + } + + public Plugin getOwner() { + return plugin; + } + + @Override + public List getLinesUnsafe() { + return lines; + } + + @Override + public TextLine appendTextLine(String text) { + checkState(); + + BaseTextLine line = new BaseTextLine(this, text); + lines.add(line); + refresh(); + return line; + } + + @Override + public ItemLine appendItemLine(ItemStack itemStack) { + checkState(); + Preconditions.notNull(itemStack, "itemStack"); + + BaseItemLine line = new BaseItemLine(this, itemStack); + lines.add(line); + refresh(); + return line; + } + + @Override + public TextLine insertTextLine(int index, String text) { + checkState(); + + BaseTextLine line = new BaseTextLine(this, text); + lines.add(index, line); + refresh(); + return line; + } + + @Override + public ItemLine insertItemLine(int index, ItemStack itemStack) { + checkState(); + Preconditions.notNull(itemStack, "itemStack"); + + BaseItemLine line = new BaseItemLine(this, itemStack); + lines.add(index, line); + refresh(); + return line; + } + + @Override + public void delete() { + apiHologramManager.deleteHologram(this); + } + +} diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/APIHologramManager.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/api/APIHologramManager.java similarity index 65% rename from plugin/src/main/java/me/filoghost/holographicdisplays/object/APIHologramManager.java rename to plugin/src/main/java/me/filoghost/holographicdisplays/object/api/APIHologramManager.java index 9bc8c989..ae25484d 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/object/APIHologramManager.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/object/api/APIHologramManager.java @@ -3,18 +3,20 @@ * * SPDX-License-Identifier: GPL-3.0-or-later */ -package me.filoghost.holographicdisplays.object; +package me.filoghost.holographicdisplays.object.api; import me.filoghost.holographicdisplays.api.Hologram; import me.filoghost.holographicdisplays.nms.interfaces.NMSManager; +import me.filoghost.holographicdisplays.object.base.BaseHologramManager; import org.bukkit.Location; import org.bukkit.plugin.Plugin; +import java.util.Collection; import java.util.Collections; -import java.util.HashSet; -import java.util.Set; +import java.util.LinkedList; +import java.util.List; -public class APIHologramManager extends HologramManager { +public class APIHologramManager extends BaseHologramManager { private final NMSManager nmsManager; @@ -28,8 +30,8 @@ public class APIHologramManager extends HologramManager { return hologram; } - public Set getHologramsByPlugin(Plugin plugin) { - Set ownedHolograms = new HashSet<>(); + public Collection getHologramsByPlugin(Plugin plugin) { + List ownedHolograms = new LinkedList<>(); for (APIHologram hologram : getHolograms()) { if (hologram.getOwner().equals(plugin)) { @@ -37,7 +39,7 @@ public class APIHologramManager extends HologramManager { } } - return Collections.unmodifiableSet(ownedHolograms); + return Collections.unmodifiableList(ownedHolograms); } } diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/base/BaseHologram.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/base/BaseHologram.java new file mode 100644 index 00000000..378dd777 --- /dev/null +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/object/base/BaseHologram.java @@ -0,0 +1,207 @@ +/* + * Copyright (C) filoghost and contributors + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ +package me.filoghost.holographicdisplays.object.base; + +import me.filoghost.fcommons.Preconditions; +import me.filoghost.holographicdisplays.api.Hologram; +import me.filoghost.holographicdisplays.api.VisibilityManager; +import me.filoghost.holographicdisplays.api.line.HologramLine; +import me.filoghost.holographicdisplays.disk.Configuration; +import me.filoghost.holographicdisplays.nms.interfaces.NMSManager; +import me.filoghost.holographicdisplays.object.HologramComponent; +import org.bukkit.Location; +import org.bukkit.World; + +import java.util.List; + +public abstract class BaseHologram extends HologramComponent implements Hologram { + + private final NMSManager nmsManager; + private final VisibilityManager visibilityManager; + private final long creationTimestamp; + + private boolean allowPlaceholders; + private boolean deleted; + + public BaseHologram(Location location, NMSManager nmsManager) { + Preconditions.notNull(location, "location"); + this.setLocation(location); + this.nmsManager = nmsManager; + this.visibilityManager = new DefaultVisibilityManager(this); + this.creationTimestamp = System.currentTimeMillis(); + this.allowPlaceholders = false; + } + + public abstract List getLinesUnsafe(); + + @Override + public boolean isDeleted() { + return deleted; + } + + public void setDeleted() { + if (!deleted) { + deleted = true; + clearLines(); + } + } + + @Override + public long getCreationTimestamp() { + return creationTimestamp; + } + + @Override + public void setAllowPlaceholders(boolean allowPlaceholders) { + if (this.allowPlaceholders == allowPlaceholders) { + return; + } + + this.allowPlaceholders = allowPlaceholders; + refresh(true); + } + + @Override + public boolean isAllowPlaceholders() { + return allowPlaceholders; + } + + public NMSManager getNMSManager() { + return nmsManager; + } + + @Override + public HologramLine getLine(int index) { + return getLinesUnsafe().get(index); + } + + @Override + public void removeLine(int index) { + checkState(); + + getLinesUnsafe().remove(index).despawn(); + refresh(); + } + + public void removeLine(SpawnableHologramLine line) { + checkState(); + + getLinesUnsafe().remove(line); + line.despawn(); + refresh(); + } + + @Override + public void clearLines() { + for (SpawnableHologramLine line : getLinesUnsafe()) { + line.despawn(); + } + + getLinesUnsafe().clear(); + } + + @Override + public int size() { + return getLinesUnsafe().size(); + } + + @Override + public void teleport(Location location) { + Preconditions.notNull(location, "location"); + teleport(location.getWorld(), location.getX(), location.getY(), location.getZ()); + } + + @Override + public void teleport(World world, double x, double y, double z) { + checkState(); + Preconditions.notNull(world, "world"); + + setLocation(world, x, y, z); + refresh(); + } + + public void refresh() { + refresh(false); + } + + public void refresh(boolean forceRespawn) { + refresh(forceRespawn, isInLoadedChunk()); + } + + public void refresh(boolean forceRespawn, boolean isChunkLoaded) { + checkState(); + + if (isChunkLoaded) { + respawnEntities(forceRespawn); + } else { + despawnEntities(); + } + } + + @Override + public double getHeight() { + if (getLinesUnsafe().isEmpty()) { + return 0; + } + + double height = 0.0; + + for (SpawnableHologramLine line : getLinesUnsafe()) { + height += line.getHeight(); + } + + height += Configuration.spaceBetweenLines * (getLinesUnsafe().size() - 1); + return height; + } + + /* + * When spawning at a location, the top part of the first line should be exactly on that location. + * The second line is below the first, and so on. + */ + private void respawnEntities(boolean forceRespawn) { + double currentLineY = getY(); + + for (int i = 0; i < getLinesUnsafe().size(); i++) { + SpawnableHologramLine line = getLinesUnsafe().get(i); + + currentLineY -= line.getHeight(); + if (i > 0) { + currentLineY -= Configuration.spaceBetweenLines; + } + + if (forceRespawn) { + line.despawn(); + } + line.respawn(getWorld(), getX(), currentLineY, getZ()); + } + } + + public void despawnEntities() { + for (SpawnableHologramLine line : getLinesUnsafe()) { + line.despawn(); + } + } + + @Override + public VisibilityManager getVisibilityManager() { + return visibilityManager; + } + + protected void checkState() { + Preconditions.checkState(!deleted, "hologram already deleted"); + } + + @Override + public String toString() { + return "BaseHologram [location=" + getLocation() + ", lines=" + getLinesUnsafe() + ", deleted=" + deleted + "]"; + } + + /* + * Object.equals() and Object.hashCode() are not overridden: + * two holograms are equal only if they are the same exact instance. + */ + +} diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/base/BaseHologramLine.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/base/BaseHologramLine.java new file mode 100644 index 00000000..cc49c4b9 --- /dev/null +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/object/base/BaseHologramLine.java @@ -0,0 +1,77 @@ +/* + * Copyright (C) filoghost and contributors + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ +package me.filoghost.holographicdisplays.object.base; + +import me.filoghost.fcommons.Preconditions; +import me.filoghost.holographicdisplays.nms.interfaces.NMSManager; +import me.filoghost.holographicdisplays.object.HologramComponent; +import org.bukkit.World; + +public abstract class BaseHologramLine extends HologramComponent implements SpawnableHologramLine { + + private final BaseHologram parent; + + private boolean isSpawned; + + protected BaseHologramLine(BaseHologram parent) { + Preconditions.notNull(parent, "parent hologram"); + this.parent = parent; + } + + public final BaseHologram getParent() { + return parent; + } + + protected final NMSManager getNMSManager() { + return parent.getNMSManager(); + } + + @Override + public final void removeLine() { + parent.removeLine(this); + } + + @Override + public final void respawn(World world, double x, double y, double z) { + Preconditions.notNull(world, "world"); + + boolean changedWorld = world != getWorld(); + setLocation(world, x, y, z); + + if (changedWorld) { + // World has changed, entities must be fully respawned + despawnEntities(); + spawnEntities(world, x, y, z); + + } else if (isSpawned) { + // Line is already spawned, respawn can be avoided + teleportEntities(x, y, z); + + } else { + // Line is not spawned, entities must be spawned + spawnEntities(world, x, y, z); + } + + isSpawned = true; + } + + @Override + public final void despawn() { + despawnEntities(); + isSpawned = false; + } + + protected boolean isSpawned() { + return isSpawned; + } + + protected abstract void spawnEntities(World world, double x, double y, double z); + + protected abstract void teleportEntities(double x, double y, double z); + + protected abstract void despawnEntities(); + +} diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/HologramManager.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/base/BaseHologramManager.java similarity index 82% rename from plugin/src/main/java/me/filoghost/holographicdisplays/object/HologramManager.java rename to plugin/src/main/java/me/filoghost/holographicdisplays/object/base/BaseHologramManager.java index d5ff2d05..e45e94ad 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/object/HologramManager.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/object/base/BaseHologramManager.java @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: GPL-3.0-or-later */ -package me.filoghost.holographicdisplays.object; +package me.filoghost.holographicdisplays.object.base; import me.filoghost.fcommons.Preconditions; import org.bukkit.Chunk; @@ -12,7 +12,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -public class HologramManager { +public class BaseHologramManager { private final List holograms = new ArrayList<>(); private final List unmodifiableHologramsView = Collections.unmodifiableList(holograms); @@ -21,7 +21,7 @@ public class HologramManager { holograms.add(hologram); } - protected void deleteHologram(H hologram) { + public void deleteHologram(H hologram) { Preconditions.checkArgument(hologram.isDeleted(), "hologram must be deleted first"); holograms.remove(hologram); hologram.setDeleted(); @@ -36,7 +36,7 @@ public class HologramManager { holograms.clear(); for (H hologram : oldHolograms) { - hologram.delete(); + hologram.setDeleted(); } } @@ -44,7 +44,7 @@ public class HologramManager { // Load the holograms in that chunk. for (H hologram : holograms) { if (hologram.isInChunk(chunk)) { - hologram.spawnEntities(); + hologram.refresh(false, true); } } } diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/base/BaseItemLine.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/base/BaseItemLine.java new file mode 100644 index 00000000..d6232dbb --- /dev/null +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/object/base/BaseItemLine.java @@ -0,0 +1,130 @@ +/* + * Copyright (C) filoghost and contributors + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ +package me.filoghost.holographicdisplays.object.base; + +import me.filoghost.fcommons.Preconditions; +import me.filoghost.holographicdisplays.api.handler.PickupHandler; +import me.filoghost.holographicdisplays.api.line.ItemLine; +import me.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand; +import me.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem; +import org.bukkit.World; +import org.bukkit.inventory.ItemStack; + +import java.util.Collection; + +public class BaseItemLine extends BaseTouchableLine implements ItemLine { + + private ItemStack itemStack; + private PickupHandler pickupHandler; + + private NMSItem itemEntity; + private NMSArmorStand vehicleEntity; + + public BaseItemLine(BaseHologram parent, ItemStack itemStack) { + super(parent); + setItemStack(itemStack); + } + + @Override + public ItemStack getItemStack() { + return itemStack; + } + + @Override + public void setItemStack(ItemStack itemStack) { + Preconditions.notNull(itemStack, "itemStack"); + Preconditions.checkArgument(0 < itemStack.getAmount() && itemStack.getAmount() <= 64, "Item must have amount between 1 and 64"); + this.itemStack = itemStack; + + if (itemEntity != null) { + itemEntity.setItemStackNMS(itemStack); + } + } + + @Override + public PickupHandler getPickupHandler() { + return pickupHandler; + } + + @Override + public void setPickupHandler(PickupHandler pickupHandler) { + this.pickupHandler = pickupHandler; + } + + @Override + public void spawnEntities(World world, double x, double y, double z) { + super.spawnEntities(world, x, y, z); + + if (itemStack != null) { + itemEntity = getNMSManager().spawnNMSItem(world, x, y + getItemSpawnOffset(), z, this, itemStack); + vehicleEntity = getNMSManager().spawnNMSArmorStand(world, x, y + getItemSpawnOffset(), z, this); + + itemEntity.setPassengerOfNMS(vehicleEntity); + } + } + + @Override + public void teleportEntities(double x, double y, double z) { + super.teleportEntities(x, y, z); + + if (vehicleEntity != null) { + vehicleEntity.setLocationNMS(x, y + getItemSpawnOffset(), z); + } + if (itemEntity != null) { + itemEntity.setLocationNMS(x, y + getItemSpawnOffset(), z); + } + } + + @Override + public void despawnEntities() { + super.despawnEntities(); + + if (vehicleEntity != null) { + vehicleEntity.killEntityNMS(); + vehicleEntity = null; + } + + if (itemEntity != null) { + itemEntity.killEntityNMS(); + itemEntity = null; + } + } + + @Override + public double getHeight() { + return 0.7; + } + + @Override + public void collectEntityIDs(Collection collector) { + super.collectEntityIDs(collector); + + if (vehicleEntity != null) { + collector.add(vehicleEntity.getIdNMS()); + } + if (itemEntity != null) { + collector.add(itemEntity.getIdNMS()); + } + } + + public NMSItem getNMSItem() { + return itemEntity; + } + + public NMSArmorStand getNMSVehicle() { + return vehicleEntity; + } + + private double getItemSpawnOffset() { + return 0; + } + + @Override + public String toString() { + return "ItemLine [itemStack=" + itemStack + ", pickupHandler=" + pickupHandler + "]"; + } + +} diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/line/TextLineImpl.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/base/BaseTextLine.java similarity index 57% rename from plugin/src/main/java/me/filoghost/holographicdisplays/object/line/TextLineImpl.java rename to plugin/src/main/java/me/filoghost/holographicdisplays/object/base/BaseTextLine.java index 05420eee..1f62a00d 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/object/line/TextLineImpl.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/object/base/BaseTextLine.java @@ -3,52 +3,45 @@ * * SPDX-License-Identifier: GPL-3.0-or-later */ -package me.filoghost.holographicdisplays.object.line; +package me.filoghost.holographicdisplays.object.base; -import me.filoghost.holographicdisplays.api.handler.TouchHandler; import me.filoghost.holographicdisplays.api.line.TextLine; import me.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand; -import me.filoghost.holographicdisplays.nms.interfaces.entity.NMSNameable; -import me.filoghost.holographicdisplays.object.BaseHologram; import me.filoghost.holographicdisplays.placeholder.PlaceholdersManager; import me.filoghost.holographicdisplays.placeholder.RelativePlaceholder; -import org.apache.commons.lang.ArrayUtils; -import org.bukkit.Location; import org.bukkit.World; import java.util.ArrayList; import java.util.Collection; import java.util.List; -public class TextLineImpl extends TouchableLineImpl implements TextLine { +public class BaseTextLine extends BaseTouchableLine implements TextLine { private String text; private List relativePlaceholders; - private NMSArmorStand nmsNameable; + private NMSArmorStand nameableEntity; - public TextLineImpl(BaseHologram parent, String text) { + public BaseTextLine(BaseHologram parent, String text) { super(parent); setText(text); } - @Override public String getText() { return text; } - @Override public void setText(String text) { this.text = text; - if (nmsNameable != null) { + if (nameableEntity != null) { if (text != null && !text.isEmpty()) { - nmsNameable.setCustomNameNMS(text); + nameableEntity.setCustomNameNMS(text); if (getParent().isAllowPlaceholders()) { PlaceholdersManager.trackIfNecessary(this); } } else { - nmsNameable.setCustomNameNMS(""); // It will not appear + nameableEntity.setCustomNameNMS(""); // It will not appear if (getParent().isAllowPlaceholders()) { PlaceholdersManager.untrack(this); } @@ -71,39 +64,41 @@ public class TextLineImpl extends TouchableLineImpl implements TextLine { relativePlaceholders = null; } } - - @Override - public void setTouchHandler(TouchHandler touchHandler) { - if (nmsNameable != null) { - Location loc = nmsNameable.getBukkitEntityNMS().getLocation(); - super.setTouchHandler(touchHandler, loc.getWorld(), loc.getX(), loc.getY() - getTextOffset(), loc.getZ()); - } else { - super.setTouchHandler(touchHandler, null, 0, 0, 0); - } - } @Override public void spawnEntities(World world, double x, double y, double z) { super.spawnEntities(world, x, y, z); - nmsNameable = getNMSManager().spawnNMSArmorStand(world, x, y + getTextOffset(), z, this); + nameableEntity = getNMSManager().spawnNMSArmorStand(world, x, y + getTextSpawnOffset(), z, this); if (text != null && !text.isEmpty()) { - nmsNameable.setCustomNameNMS(text); + nameableEntity.setCustomNameNMS(text); + } + + if (getParent().isAllowPlaceholders()) { + PlaceholdersManager.trackIfNecessary(this); + } + } + + @Override + public void teleportEntities(double x, double y, double z) { + super.teleportEntities(x, y, z); + + if (nameableEntity != null) { + nameableEntity.setLocationNMS(x, y + getTextSpawnOffset(), z); } } - @Override public void despawnEntities() { super.despawnEntities(); - if (nmsNameable != null) { - nmsNameable.killEntityNMS(); - nmsNameable = null; + if (nameableEntity != null) { + nameableEntity.killEntityNMS(); + nameableEntity = null; } } - + public Collection getRelativePlaceholders() { return relativePlaceholders; } @@ -116,35 +111,22 @@ public class TextLineImpl extends TouchableLineImpl implements TextLine { public double getHeight() { return 0.23; } - - @Override - public void teleport(double x, double y, double z) { - super.teleport(x, y, z); - - if (nmsNameable != null) { - nmsNameable.setLocationNMS(x, y + getTextOffset(), z); - } - } @Override - public int[] getEntitiesIDs() { - if (isSpawned()) { - if (touchSlime != null) { - return ArrayUtils.add(touchSlime.getEntitiesIDs(), nmsNameable.getIdNMS()); - } else { - return new int[] {nmsNameable.getIdNMS()}; - } - } else { - return new int[0]; + public void collectEntityIDs(Collection collector) { + super.collectEntityIDs(collector); + + if (nameableEntity != null) { + collector.add(nameableEntity.getIdNMS()); } } - public NMSNameable getNmsNameable() { - return nmsNameable; + public NMSArmorStand getNMSNameable() { + return nameableEntity; } - private double getTextOffset() { - return Offsets.ARMOR_STAND_ALONE; + private double getTextSpawnOffset() { + return -0.29; } @Override diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/base/BaseTouchableLine.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/base/BaseTouchableLine.java new file mode 100644 index 00000000..84cc5bcc --- /dev/null +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/object/base/BaseTouchableLine.java @@ -0,0 +1,123 @@ +/* + * Copyright (C) filoghost and contributors + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ +package me.filoghost.holographicdisplays.object.base; + +import me.filoghost.holographicdisplays.api.handler.TouchHandler; +import me.filoghost.holographicdisplays.api.line.TouchableLine; +import me.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand; +import me.filoghost.holographicdisplays.nms.interfaces.entity.NMSSlime; +import org.bukkit.World; + +import java.util.Collection; + +/** + * Useful class that implements TouchablePiece. The downside is that subclasses must extend this, and cannot extend other classes. + * But all the current items are touchable. + */ +public abstract class BaseTouchableLine extends BaseHologramLine implements TouchableLine { + + private static final double SLIME_HEIGHT = 0.5; + + private TouchHandler touchHandler; + + private NMSSlime slimeEntity; + private NMSArmorStand vehicleEntity; + + protected BaseTouchableLine(BaseHologram parent) { + super(parent); + } + + @Override + public void setTouchHandler(TouchHandler touchHandler) { + this.touchHandler = touchHandler; + + if (touchHandler != null && slimeEntity == null && super.isSpawned()) { + // If the touch handler was null before and no entity has been spawned, spawn it now. + spawnSlime(getWorld(), getX(), getY(), getZ()); + + } else if (touchHandler == null) { + // Opposite case, the touch handler was not null and an entity was spawned, but now it's useless. + despawnSlime(); + } + } + + @Override + public TouchHandler getTouchHandler() { + return this.touchHandler; + } + + @Override + public void spawnEntities(World world, double x, double y, double z) { + if (touchHandler != null) { + spawnSlime(world, x, y, z); + } + } + + @Override + public void teleportEntities(double x, double y, double z) { + if (vehicleEntity != null) { + vehicleEntity.setLocationNMS(x, getSlimeSpawnY(y), z); + } + if (slimeEntity != null) { + slimeEntity.setLocationNMS(x, getSlimeSpawnY(y), z); + } + } + + @Override + public void despawnEntities() { + despawnSlime(); + } + + private void spawnSlime(World world, double x, double y, double z) { + despawnSlime(); + + if (world != null) { + slimeEntity = getNMSManager().spawnNMSSlime(world, x, getSlimeSpawnY(y), z, this); + vehicleEntity = getNMSManager().spawnNMSArmorStand(world, x, getSlimeSpawnY(y), z, this); + + slimeEntity.setPassengerOfNMS(vehicleEntity); + } + } + + private void despawnSlime() { + if (slimeEntity != null) { + slimeEntity.killEntityNMS(); + slimeEntity = null; + } + + if (vehicleEntity != null) { + vehicleEntity.killEntityNMS(); + vehicleEntity = null; + } + } + + private double getSlimeSpawnY(double y) { + return y + ((getHeight() - SLIME_HEIGHT) / 2) + getSlimeSpawnOffset(); + } + + private double getSlimeSpawnOffset() { + return 0; + } + + @Override + public void collectEntityIDs(Collection collector) { + if (vehicleEntity != null) { + collector.add(vehicleEntity.getIdNMS()); + } + if (slimeEntity != null) { + collector.add(slimeEntity.getIdNMS()); + } + } + + public NMSArmorStand getNMSVehicle() { + return vehicleEntity; + } + + public NMSSlime getNMSSlime() { + return slimeEntity; + } + +} diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/VisibilityManagerImpl.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/base/DefaultVisibilityManager.java similarity index 94% rename from plugin/src/main/java/me/filoghost/holographicdisplays/object/VisibilityManagerImpl.java rename to plugin/src/main/java/me/filoghost/holographicdisplays/object/base/DefaultVisibilityManager.java index d7d137b9..de25aea4 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/object/VisibilityManagerImpl.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/object/base/DefaultVisibilityManager.java @@ -3,10 +3,9 @@ * * SPDX-License-Identifier: GPL-3.0-or-later */ -package me.filoghost.holographicdisplays.object; +package me.filoghost.holographicdisplays.object.base; import me.filoghost.fcommons.Preconditions; -import me.filoghost.holographicdisplays.api.Hologram; import me.filoghost.holographicdisplays.api.VisibilityManager; import me.filoghost.holographicdisplays.bridge.protocollib.ProtocolLibHook; import org.bukkit.Bukkit; @@ -17,15 +16,15 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -public class VisibilityManagerImpl implements VisibilityManager { - - private final BaseHologram hologram; - private Map playersVisibilityMap; - private boolean visibleByDefault; +public class DefaultVisibilityManager implements VisibilityManager { private static final int VISIBILITY_DISTANCE_SQUARED = 64 * 64; - public VisibilityManagerImpl(BaseHologram hologram) { + private final BaseHologram hologram; + private Map playersVisibilityMap; + private boolean visibleByDefault; + + public DefaultVisibilityManager(BaseHologram hologram) { Preconditions.notNull(hologram, "hologram"); this.hologram = hologram; this.visibleByDefault = true; @@ -161,7 +160,7 @@ public class VisibilityManagerImpl implements VisibilityManager { } } - private boolean isNear(Player player, Hologram hologram) { + private boolean isNear(Player player, BaseHologram hologram) { return player.isOnline() && player.getWorld().equals(hologram.getWorld()) && player.getLocation().distanceSquared(hologram.getLocation()) < VISIBILITY_DISTANCE_SQUARED; diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/base/SpawnableHologramLine.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/base/SpawnableHologramLine.java new file mode 100644 index 00000000..14afa02f --- /dev/null +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/object/base/SpawnableHologramLine.java @@ -0,0 +1,23 @@ +/* + * Copyright (C) filoghost and contributors + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ +package me.filoghost.holographicdisplays.object.base; + +import me.filoghost.holographicdisplays.api.line.HologramLine; +import org.bukkit.World; + +import java.util.Collection; + +public interface SpawnableHologramLine extends HologramLine { + + void respawn(World world, double x, double y, double z); + + void despawn(); + + double getHeight(); + + void collectEntityIDs(Collection collector); + +} diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/internal/InternalHologram.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/internal/InternalHologram.java new file mode 100644 index 00000000..417a59f2 --- /dev/null +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/object/internal/InternalHologram.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) filoghost and contributors + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ +package me.filoghost.holographicdisplays.object.internal; + +import me.filoghost.holographicdisplays.api.line.ItemLine; +import me.filoghost.holographicdisplays.api.line.TextLine; +import me.filoghost.holographicdisplays.nms.interfaces.NMSManager; +import me.filoghost.holographicdisplays.object.base.BaseHologram; +import org.bukkit.Location; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.List; + +public class InternalHologram extends BaseHologram { + + private final String name; + private final List lines; + + protected InternalHologram(Location source, String name, NMSManager nmsManager) { + super(source, nmsManager); + super.setAllowPlaceholders(true); + this.name = name; + this.lines = new ArrayList<>(); + } + + public String getName() { + return name; + } + + @Override + public List getLinesUnsafe() { + return lines; + } + + @Override + public String toString() { + return "InternalHologram [name=" + name + ", super=" + super.toString() + "]"; + } + + @Override + public TextLine appendTextLine(String text) { + throw new UnsupportedOperationException(); + } + + @Override + public ItemLine appendItemLine(ItemStack itemStack) { + throw new UnsupportedOperationException(); + } + + @Override + public TextLine insertTextLine(int index, String text) { + throw new UnsupportedOperationException(); + } + + @Override + public ItemLine insertItemLine(int index, ItemStack itemStack) { + throw new UnsupportedOperationException(); + } + + @Override + public void delete() { + throw new UnsupportedOperationException(); + } + +} diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/internal/InternalHologramLine.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/internal/InternalHologramLine.java new file mode 100644 index 00000000..7e120f54 --- /dev/null +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/object/internal/InternalHologramLine.java @@ -0,0 +1,14 @@ +/* + * Copyright (C) filoghost and contributors + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ +package me.filoghost.holographicdisplays.object.internal; + +import me.filoghost.holographicdisplays.object.base.SpawnableHologramLine; + +public interface InternalHologramLine extends SpawnableHologramLine { + + String getSerializedConfigValue(); + +} diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/InternalHologramManager.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/internal/InternalHologramManager.java similarity index 79% rename from plugin/src/main/java/me/filoghost/holographicdisplays/object/InternalHologramManager.java rename to plugin/src/main/java/me/filoghost/holographicdisplays/object/internal/InternalHologramManager.java index 7630b75c..c9f1c541 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/object/InternalHologramManager.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/object/internal/InternalHologramManager.java @@ -3,12 +3,13 @@ * * SPDX-License-Identifier: GPL-3.0-or-later */ -package me.filoghost.holographicdisplays.object; +package me.filoghost.holographicdisplays.object.internal; import me.filoghost.holographicdisplays.nms.interfaces.NMSManager; +import me.filoghost.holographicdisplays.object.base.BaseHologramManager; import org.bukkit.Location; -public class InternalHologramManager extends HologramManager { +public class InternalHologramManager extends BaseHologramManager { private final NMSManager nmsManager; @@ -17,7 +18,7 @@ public class InternalHologramManager extends HologramManager { } public InternalHologram createHologram(Location source, String name) { - InternalHologram hologram = new InternalHologram(source, name, nmsManager, this); + InternalHologram hologram = new InternalHologram(source, name, nmsManager); super.addHologram(hologram); return hologram; } diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/internal/InternalItemLine.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/internal/InternalItemLine.java new file mode 100644 index 00000000..a89d5df1 --- /dev/null +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/object/internal/InternalItemLine.java @@ -0,0 +1,25 @@ +/* + * Copyright (C) filoghost and contributors + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ +package me.filoghost.holographicdisplays.object.internal; + +import me.filoghost.holographicdisplays.object.base.BaseHologram; +import me.filoghost.holographicdisplays.object.base.BaseItemLine; +import org.bukkit.inventory.ItemStack; + +public class InternalItemLine extends BaseItemLine implements InternalHologramLine { + + private final String serializedConfigValue; + + public InternalItemLine(BaseHologram parent, ItemStack itemStack, String serializedConfigValue) { + super(parent, itemStack); + this.serializedConfigValue = serializedConfigValue; + } + + public String getSerializedConfigValue() { + return serializedConfigValue; + } + +} diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/internal/InternalTextLine.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/internal/InternalTextLine.java new file mode 100644 index 00000000..e9d60ebd --- /dev/null +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/object/internal/InternalTextLine.java @@ -0,0 +1,24 @@ +/* + * Copyright (C) filoghost and contributors + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ +package me.filoghost.holographicdisplays.object.internal; + +import me.filoghost.holographicdisplays.object.base.BaseHologram; +import me.filoghost.holographicdisplays.object.base.BaseTextLine; + +public class InternalTextLine extends BaseTextLine implements InternalHologramLine { + + private final String serializedConfigValue; + + public InternalTextLine(BaseHologram parent, String text, String serializedConfigValue) { + super(parent, text); + this.serializedConfigValue = serializedConfigValue; + } + + public String getSerializedConfigValue() { + return serializedConfigValue; + } + +} diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/line/HologramLineImpl.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/line/HologramLineImpl.java deleted file mode 100644 index e184b074..00000000 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/object/line/HologramLineImpl.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) filoghost and contributors - * - * SPDX-License-Identifier: GPL-3.0-or-later - */ -package me.filoghost.holographicdisplays.object.line; - -import me.filoghost.fcommons.Preconditions; -import me.filoghost.holographicdisplays.api.line.HologramLine; -import me.filoghost.holographicdisplays.nms.interfaces.NMSManager; -import me.filoghost.holographicdisplays.object.BaseHologram; -import org.bukkit.World; - -public abstract class HologramLineImpl implements HologramLine { - - private final BaseHologram parent; - - // This field is necessary for teleport. - private boolean isSpawned; - - // Useful for saving to disk. - private String serializedConfigValue; - - protected HologramLineImpl(BaseHologram parent) { - Preconditions.notNull(parent, "parent hologram"); - this.parent = parent; - } - - @Override - public final BaseHologram getParent() { - return parent; - } - - protected final NMSManager getNMSManager() { - return parent.getNMSManager(); - } - - @Override - public void removeLine() { - parent.removeLine(this); - } - - public void spawn(World world, double x, double y, double z) { - Preconditions.notNull(world, "world"); - - // Remove the old entities when spawning the new ones. - despawn(); - isSpawned = true; - - spawnEntities(world, x, y, z); - } - - public final void despawn() { - isSpawned = false; - despawnEntities(); - } - - public String getSerializedConfigValue() { - return serializedConfigValue; - } - - public void setSerializedConfigValue(String serializedConfigValue) { - this.serializedConfigValue = serializedConfigValue; - } - - public final boolean isSpawned() { - return isSpawned; - } - - protected abstract void spawnEntities(World world, double x, double y, double z); - - protected abstract void despawnEntities(); - - public abstract void teleport(double x, double y, double z); - - public abstract double getHeight(); - - public abstract int[] getEntitiesIDs(); - -} diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/line/ItemLineImpl.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/line/ItemLineImpl.java deleted file mode 100644 index 3e349e99..00000000 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/object/line/ItemLineImpl.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright (C) filoghost and contributors - * - * SPDX-License-Identifier: GPL-3.0-or-later - */ -package me.filoghost.holographicdisplays.object.line; - -import me.filoghost.fcommons.Preconditions; -import me.filoghost.holographicdisplays.api.handler.PickupHandler; -import me.filoghost.holographicdisplays.api.handler.TouchHandler; -import me.filoghost.holographicdisplays.api.line.ItemLine; -import me.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand; -import me.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase; -import me.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem; -import me.filoghost.holographicdisplays.object.BaseHologram; -import org.apache.commons.lang.ArrayUtils; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.inventory.ItemStack; - -public class ItemLineImpl extends TouchableLineImpl implements ItemLine { - - private ItemStack itemStack; - private PickupHandler pickupHandler; - - private NMSItem nmsItem; - private NMSArmorStand nmsVehicle; - - public ItemLineImpl(BaseHologram parent, ItemStack itemStack) { - super(parent); - setItemStack(itemStack); - } - - @Override - public ItemStack getItemStack() { - return itemStack; - } - - @Override - public void setItemStack(ItemStack itemStack) { - Preconditions.notNull(itemStack, "itemStack"); - Preconditions.checkArgument(0 < itemStack.getAmount() && itemStack.getAmount() <= 64, "Item must have amount between 1 and 64"); - this.itemStack = itemStack; - - if (nmsItem != null) { - nmsItem.setItemStackNMS(itemStack); - } - } - - @Override - public PickupHandler getPickupHandler() { - return pickupHandler; - } - - @Override - public void setPickupHandler(PickupHandler pickupHandler) { - this.pickupHandler = pickupHandler; - } - - @Override - public void setTouchHandler(TouchHandler touchHandler) { - if (nmsVehicle != null) { - Location loc = nmsVehicle.getBukkitEntityNMS().getLocation(); - super.setTouchHandler(touchHandler, loc.getWorld(), loc.getX(), loc.getY() - getItemOffset(), loc.getZ()); - } else { - super.setTouchHandler(touchHandler, null, 0, 0, 0); - } - } - - @Override - public void spawnEntities(World world, double x, double y, double z) { - super.spawnEntities(world, x, y, z); - - if (itemStack != null) { - nmsItem = getNMSManager().spawnNMSItem(world, x, y + getItemOffset(), z, this, itemStack); - nmsVehicle = getNMSManager().spawnNMSArmorStand(world, x, y + getItemOffset(), z, this); - - nmsItem.setPassengerOfNMS(nmsVehicle); - } - } - - - @Override - public void despawnEntities() { - super.despawnEntities(); - - if (nmsVehicle != null) { - nmsVehicle.killEntityNMS(); - nmsVehicle = null; - } - - if (nmsItem != null) { - nmsItem.killEntityNMS(); - nmsItem = null; - } - } - - @Override - public double getHeight() { - return 0.7; - } - - @Override - public void teleport(double x, double y, double z) { - super.teleport(x, y, z); - - if (nmsVehicle != null) { - nmsVehicle.setLocationNMS(x, y + getItemOffset(), z); - } - if (nmsItem != null) { - nmsItem.setLocationNMS(x, y + getItemOffset(), z); - } - } - - @Override - public int[] getEntitiesIDs() { - if (isSpawned()) { - if (touchSlime != null) { - return ArrayUtils.addAll(new int[] {nmsVehicle.getIdNMS(), nmsItem.getIdNMS()}, touchSlime.getEntitiesIDs()); - } else { - return new int[] {nmsVehicle.getIdNMS(), nmsItem.getIdNMS()}; - } - } else { - return new int[0]; - } - } - - public NMSItem getNmsItem() { - return nmsItem; - } - - public NMSEntityBase getNmsVehicle() { - return nmsVehicle; - } - - private double getItemOffset() { - return Offsets.ARMOR_STAND_WITH_ITEM; - } - - @Override - public String toString() { - return "ItemLine [itemStack=" + itemStack + ", pickupHandler=" + pickupHandler + "]"; - } - -} diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/line/Offsets.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/line/Offsets.java deleted file mode 100644 index d60dd09f..00000000 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/object/line/Offsets.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (C) filoghost and contributors - * - * SPDX-License-Identifier: GPL-3.0-or-later - */ -package me.filoghost.holographicdisplays.object.line; - -/** - * When spawning a hologram at a location, the top part of the first line should be exactly on that location. - * The second line is below the first, and so on. - */ -public class Offsets { - - // A single armor stand. - public static final double ARMOR_STAND_ALONE = -0.29; - - // An armor stand holding an item. - public static final double ARMOR_STAND_WITH_ITEM = 0; - - // An armor stand holding a slime. - public static final double ARMOR_STAND_WITH_SLIME = 0; - -} diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/line/TouchSlimeLineImpl.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/line/TouchSlimeLineImpl.java deleted file mode 100644 index 94df4812..00000000 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/object/line/TouchSlimeLineImpl.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) filoghost and contributors - * - * SPDX-License-Identifier: GPL-3.0-or-later - */ -package me.filoghost.holographicdisplays.object.line; - -import me.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand; -import me.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase; -import me.filoghost.holographicdisplays.nms.interfaces.entity.NMSSlime; -import me.filoghost.holographicdisplays.object.BaseHologram; -import org.bukkit.World; - -/** - * A touch slime that can be applied to a line. - */ -public class TouchSlimeLineImpl extends HologramLineImpl { - - // The touchable piece associated with this piece - private final TouchableLineImpl touchablePiece; - - private NMSSlime nmsSlime; - private NMSArmorStand nmsVehicle; - - - protected TouchSlimeLineImpl(BaseHologram parent, TouchableLineImpl touchablePiece) { - super(parent); - this.touchablePiece = touchablePiece; - } - - public TouchableLineImpl getTouchablePiece() { - return touchablePiece; - } - - - @Override - public void spawnEntities(World world, double x, double y, double z) { - nmsSlime = getNMSManager().spawnNMSSlime(world, x, y + getSlimeOffset(), z, this); - nmsVehicle = getNMSManager().spawnNMSArmorStand(world, x, y + getSlimeOffset(), z, this); - - nmsSlime.setPassengerOfNMS(nmsVehicle); - } - - - @Override - public void despawnEntities() { - if (nmsSlime != null) { - nmsSlime.killEntityNMS(); - nmsSlime = null; - } - - if (nmsVehicle != null) { - nmsVehicle.killEntityNMS(); - nmsVehicle = null; - } - } - - @Override - public double getHeight() { - return 0.5; - } - - @Override - public void teleport(double x, double y, double z) { - if (nmsVehicle != null) { - nmsVehicle.setLocationNMS(x, y + getSlimeOffset(), z); - } - if (nmsSlime != null) { - nmsSlime.setLocationNMS(x, y + getSlimeOffset(), z); - } - } - - @Override - public int[] getEntitiesIDs() { - if (isSpawned()) { - return new int[] {nmsVehicle.getIdNMS(), nmsSlime.getIdNMS()}; - } else { - return new int[0]; - } - } - - public NMSSlime getNmsSlime() { - return nmsSlime; - } - - public NMSEntityBase getNmsVehicle() { - return nmsVehicle; - } - - private double getSlimeOffset() { - return Offsets.ARMOR_STAND_WITH_SLIME; - } - - @Override - public String toString() { - return "TouchSlimeLine [touchablePiece=" + touchablePiece + "]"; - } - -} diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/object/line/TouchableLineImpl.java b/plugin/src/main/java/me/filoghost/holographicdisplays/object/line/TouchableLineImpl.java deleted file mode 100644 index 070dcb3a..00000000 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/object/line/TouchableLineImpl.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (C) filoghost and contributors - * - * SPDX-License-Identifier: GPL-3.0-or-later - */ -package me.filoghost.holographicdisplays.object.line; - -import me.filoghost.holographicdisplays.api.handler.TouchHandler; -import me.filoghost.holographicdisplays.object.BaseHologram; -import org.bukkit.World; - -/** - * Useful class that implements TouchablePiece. The downside is that subclasses must extend this, and cannot extend other classes. - * But all the current items are touchable. - */ -public abstract class TouchableLineImpl extends HologramLineImpl { - - protected TouchSlimeLineImpl touchSlime; - private TouchHandler touchHandler; - - - protected TouchableLineImpl(BaseHologram parent) { - super(parent); - } - - - protected void setTouchHandler(TouchHandler touchHandler, World world, double x, double y, double z) { - this.touchHandler = touchHandler; - - if (touchHandler != null && touchSlime == null && world != null) { - // If the touch handler was null before and no entity has been spawned, spawn it now. - touchSlime = new TouchSlimeLineImpl(getParent(), this); - touchSlime.spawn(world, x, y + (getHeight() / 2.0 - touchSlime.getHeight() / 2.0), z); - - } else if (touchHandler == null && touchSlime != null) { - // Opposite case, the touch handler was not null and an entity was spawned, but now it's useless. - touchSlime.despawn(); - touchSlime = null; - } - } - - - public TouchHandler getTouchHandler() { - return this.touchHandler; - } - - - @Override - public void spawnEntities(World world, double x, double y, double z) { - if (touchHandler != null) { - touchSlime = new TouchSlimeLineImpl(getParent(), this); - touchSlime.spawn(world, x, y + (getHeight() / 2.0 - touchSlime.getHeight() / 2.0), z); - } - } - - - @Override - public void despawnEntities() { - if (touchSlime != null) { - touchSlime.despawn(); - touchSlime = null; - } - } - - - @Override - public void teleport(double x, double y, double z) { - if (touchSlime != null) { - touchSlime.teleport(x, y + (getHeight() / 2.0 - touchSlime.getHeight() / 2.0), z); - } - } - - - public TouchSlimeLineImpl getTouchSlime() { - return touchSlime; - } - -} diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/placeholder/PlaceholdersManager.java b/plugin/src/main/java/me/filoghost/holographicdisplays/placeholder/PlaceholdersManager.java index d422b366..02186d3d 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/placeholder/PlaceholdersManager.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/placeholder/PlaceholdersManager.java @@ -10,7 +10,7 @@ import me.filoghost.holographicdisplays.api.placeholder.PlaceholderReplacer; import me.filoghost.holographicdisplays.bridge.bungeecord.BungeeServerTracker; import me.filoghost.holographicdisplays.common.Utils; import me.filoghost.holographicdisplays.nms.interfaces.entity.NMSNameable; -import me.filoghost.holographicdisplays.object.line.TextLineImpl; +import me.filoghost.holographicdisplays.object.base.BaseTextLine; import me.filoghost.holographicdisplays.task.WorldPlayerCounterTask; import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; @@ -88,33 +88,29 @@ public class PlaceholdersManager { linesToUpdate.clear(); } - public static void untrack(TextLineImpl line) { - if (line == null || !line.isSpawned()) { - return; - } - + public static void untrack(BaseTextLine line) { Iterator iter = linesToUpdate.iterator(); while (iter.hasNext()) { DynamicLineData data = iter.next(); - if (data.getEntity() == line.getNmsNameable()) { + if (data.getEntity() == line.getNMSNameable()) { iter.remove(); data.getEntity().setCustomNameNMS(data.getOriginalName()); } } } - public static void trackIfNecessary(TextLineImpl line) { - NMSNameable nameableEntity = line.getNmsNameable(); + public static void trackIfNecessary(BaseTextLine line) { + String text = line.getText(); + if (text == null || text.isEmpty()) { + return; + } + + NMSNameable nameableEntity = line.getNMSNameable(); if (nameableEntity == null) { return; - } + } - String name = line.getText(); - if (name == null || name.isEmpty()) { - return; - } - - boolean updateName = false; + boolean updateText = false; // Lazy initialization. Set normalPlaceholders = null; @@ -125,7 +121,7 @@ public class PlaceholdersManager { Matcher matcher; for (Placeholder placeholder : PlaceholdersRegister.getPlaceholders()) { - if (name.contains(placeholder.getTextPlaceholder())) { + if (text.contains(placeholder.getTextPlaceholder())) { if (normalPlaceholders == null) { normalPlaceholders = new HashSet<>(); } @@ -135,7 +131,7 @@ public class PlaceholdersManager { // Players in a world count pattern. - matcher = WORLD_PATTERN.matcher(name); + matcher = WORLD_PATTERN.matcher(text); while (matcher.find()) { if (worldsOnlinePlayersReplacers == null) { worldsOnlinePlayersReplacers = new HashMap<>(); @@ -164,7 +160,7 @@ public class PlaceholdersManager { } // BungeeCord online pattern. - matcher = BUNGEE_ONLINE_PATTERN.matcher(name); + matcher = BUNGEE_ONLINE_PATTERN.matcher(text); while (matcher.find()) { if (bungeeReplacers == null) { bungeeReplacers = new HashMap<>(); @@ -198,7 +194,7 @@ public class PlaceholdersManager { } // BungeeCord max players pattern. - matcher = BUNGEE_MAX_PATTERN.matcher(name); + matcher = BUNGEE_MAX_PATTERN.matcher(text); while (matcher.find()) { if (bungeeReplacers == null) { bungeeReplacers = new HashMap<>(); @@ -214,7 +210,7 @@ public class PlaceholdersManager { } // BungeeCord motd pattern. - matcher = BUNGEE_MOTD_PATTERN.matcher(name); + matcher = BUNGEE_MOTD_PATTERN.matcher(text); while (matcher.find()) { if (bungeeReplacers == null) { bungeeReplacers = new HashMap<>(); @@ -230,7 +226,7 @@ public class PlaceholdersManager { } // BungeeCord motd (line 2) pattern. - matcher = BUNGEE_MOTD_2_PATTERN.matcher(name); + matcher = BUNGEE_MOTD_2_PATTERN.matcher(text); while (matcher.find()) { if (bungeeReplacers == null) { bungeeReplacers = new HashMap<>(); @@ -246,7 +242,7 @@ public class PlaceholdersManager { } // BungeeCord status pattern. - matcher = BUNGEE_STATUS_PATTERN.matcher(name); + matcher = BUNGEE_STATUS_PATTERN.matcher(text); while (matcher.find()) { if (bungeeReplacers == null) { bungeeReplacers = new HashMap<>(); @@ -263,7 +259,7 @@ public class PlaceholdersManager { // Animation pattern. - matcher = ANIMATION_PATTERN.matcher(name); + matcher = ANIMATION_PATTERN.matcher(text); while (matcher.find()) { String fileName = extractArgumentFromPlaceholder(matcher); Placeholder animation = AnimationsRegister.getAnimation(fileName); @@ -277,13 +273,13 @@ public class PlaceholdersManager { animationsPlaceholders.put(matcher.group(), animation); } else { - name = name.replace(matcher.group(), "[Animation not found: " + fileName + "]"); - updateName = true; + text = text.replace(matcher.group(), "[Animation not found: " + fileName + "]"); + updateText = true; } } if (Utils.isThereNonNull(normalPlaceholders, bungeeReplacers, worldsOnlinePlayersReplacers, animationsPlaceholders)) { - DynamicLineData lineData = new DynamicLineData(nameableEntity, name); + DynamicLineData lineData = new DynamicLineData(nameableEntity, text); if (normalPlaceholders != null) { lineData.setPlaceholders(normalPlaceholders); @@ -312,8 +308,8 @@ public class PlaceholdersManager { } else { // The name needs to be updated anyways. - if (updateName) { - nameableEntity.setCustomNameNMS(name); + if (updateText) { + nameableEntity.setCustomNameNMS(text); } } } diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/task/StartupLoadHologramsTask.java b/plugin/src/main/java/me/filoghost/holographicdisplays/task/StartupLoadHologramsTask.java index 77182fa0..e5e4c90b 100644 --- a/plugin/src/main/java/me/filoghost/holographicdisplays/task/StartupLoadHologramsTask.java +++ b/plugin/src/main/java/me/filoghost/holographicdisplays/task/StartupLoadHologramsTask.java @@ -9,8 +9,8 @@ import me.filoghost.fcommons.logging.Log; import me.filoghost.holographicdisplays.common.Utils; import me.filoghost.holographicdisplays.disk.HologramConfig; import me.filoghost.holographicdisplays.disk.HologramLoadException; -import me.filoghost.holographicdisplays.object.InternalHologram; -import me.filoghost.holographicdisplays.object.InternalHologramManager; +import me.filoghost.holographicdisplays.object.internal.InternalHologram; +import me.filoghost.holographicdisplays.object.internal.InternalHologramManager; import java.util.Collection; @@ -29,7 +29,7 @@ public class StartupLoadHologramsTask implements Runnable { for (HologramConfig hologramConfig : hologramConfigsToLoad) { try { InternalHologram hologram = hologramConfig.createHologram(internalHologramManager); - hologram.refreshAll(); + hologram.refresh(); } catch (HologramLoadException e) { Log.warning(Utils.formatExceptionMessage(e)); } catch (Exception e) {