diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7821f4fc..c2d567e2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,6 +2,9 @@ name: Build plugin on: push: + pull_request: + types: + - opened jobs: build-plugin: diff --git a/build.gradle.kts b/build.gradle.kts index a16ed981..a98c4c97 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -19,7 +19,7 @@ runPaper.folia.registerTask() allprojects { group = "de.oliver" val buildId = System.getenv("BUILD_ID") - version = "2.3.0" + (if (buildId != null) ".$buildId" else "") + version = "2.3.1" + (if (buildId != null) ".$buildId" else "") description = "Simple, lightweight and fast hologram plugin using display entities" repositories { diff --git a/gradle.properties b/gradle.properties index 43708b3a..c242cb63 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ minecraftVersion=1.21 fancyNpcsVersion=2.2.1 -fancyLibVersion=1.0.28 +fancyLibVersion=1.0.31 fancySitulaVersion=0.0.5 viaversionVersion=5.0.1 chatcolorhandlerVersion=v2.5.3 \ No newline at end of file diff --git a/src/main/java/de/oliver/fancyholograms/FancyHolograms.java b/src/main/java/de/oliver/fancyholograms/FancyHolograms.java index 2147876c..0c5bbc54 100644 --- a/src/main/java/de/oliver/fancyholograms/FancyHolograms.java +++ b/src/main/java/de/oliver/fancyholograms/FancyHolograms.java @@ -108,7 +108,7 @@ Please update the server to one of (%s). public void onEnable() { getHologramConfiguration().reload(this); // initialize configuration - FancyLib.setPlugin(this); + FancyLib.setPlugin(this, getFile()); if (!ServerSoftware.isPaper()) { getLogger().warning(""" diff --git a/src/main/java/de/oliver/fancyholograms/HologramManagerImpl.java b/src/main/java/de/oliver/fancyholograms/HologramManagerImpl.java index 1dcaa878..5a4c3a13 100644 --- a/src/main/java/de/oliver/fancyholograms/HologramManagerImpl.java +++ b/src/main/java/de/oliver/fancyholograms/HologramManagerImpl.java @@ -106,15 +106,15 @@ public void removeHologram(@NotNull final Hologram hologram) { Optional optionalHologram = Optional.ofNullable(this.holograms.remove(name.toLowerCase(Locale.ROOT))); optionalHologram.ifPresent(hologram -> { - for (UUID viewer : hologram.getViewers()) { - Player player = Bukkit.getPlayer(viewer); - if (player != null) { - FancyHolograms.get().getHologramThread().submit(() -> hologram.forceHideHologram(player)); + for (UUID viewer : hologram.getViewers()) { + Player player = Bukkit.getPlayer(viewer); + if (player != null) { + FancyHolograms.get().getHologramThread().submit(() -> hologram.forceHideHologram(player)); + } } - } - FancyHolograms.get().getHologramThread().submit(() -> plugin.getHologramStorage().delete(hologram)); - } + FancyHolograms.get().getHologramThread().submit(() -> plugin.getHologramStorage().delete(hologram)); + } ); return optionalHologram; @@ -152,7 +152,7 @@ public void loadHolograms() { } isLoaded = true; - Bukkit.getPluginManager().callEvent(new HologramsLoadedEvent(ImmutableList.copyOf(allLoaded))); + FancyHolograms.get().getHologramThread().submit(() -> Bukkit.getPluginManager().callEvent(new HologramsLoadedEvent(ImmutableList.copyOf(allLoaded)))); FancyHolograms.get().getLogger().info(String.format("Loaded %d holograms for all loaded worlds", allLoaded.size())); } @@ -188,8 +188,8 @@ void initializeTasks() { }); final var updateTimes = CacheBuilder.newBuilder() - .expireAfterAccess(Duration.ofMinutes(5)) - .build(); + .expireAfterAccess(Duration.ofMinutes(5)) + .build(); hologramThread.scheduleAtFixedRate(() -> { final var time = System.currentTimeMillis(); @@ -204,24 +204,32 @@ void initializeTasks() { if (data instanceof TextHologramData) { updateTimes.put(hologram.getData().getName(), time); } - } else if (data instanceof TextHologramData textData) { + } + } + }, 50, 1000, TimeUnit.MILLISECONDS); + + hologramThread.scheduleAtFixedRate(() -> { + final var time = System.currentTimeMillis(); + + for (final var hologram : getHolograms()) { + if (hologram.getData() instanceof TextHologramData textData) { final var interval = textData.getTextUpdateInterval(); if (interval < 1) { continue; // doesn't update } - final var lastUpdate = updateTimes.asMap().get(data.getName()); + final var lastUpdate = updateTimes.asMap().get(textData.getName()); if (lastUpdate != null && time < (lastUpdate + interval)) { continue; } if (lastUpdate == null || time > (lastUpdate + interval)) { hologram.refreshForViewersInWorld(); - updateTimes.put(data.getName(), time); + updateTimes.put(textData.getName(), time); } } } - }, 50, 1000, TimeUnit.MILLISECONDS); + }, 50, 50, TimeUnit.MILLISECONDS); } /** @@ -233,15 +241,19 @@ public void reloadHolograms() { } public void unloadHolograms() { - final var online = List.copyOf(Bukkit.getOnlinePlayers()); - FancyHolograms.get().getHologramThread().submit(() -> { List unloaded = new ArrayList<>(); for (final var hologram : this.getPersistentHolograms()) { this.holograms.remove(hologram.getName()); unloaded.add(hologram); - online.forEach(hologram::forceHideHologram); + + for (UUID viewer : hologram.getViewers()) { + Player player = Bukkit.getPlayer(viewer); + if (player != null) { + hologram.forceHideHologram(player); + } + } } Bukkit.getPluginManager().callEvent(new HologramsUnloadedEvent(ImmutableList.copyOf(unloaded))); @@ -253,8 +265,8 @@ public void unloadHolograms(String world) { FancyHolograms.get().getHologramThread().submit(() -> { List h = getPersistentHolograms().stream() - .filter(hologram -> hologram.getData().getLocation().getWorld().getName().equals(world)) - .toList(); + .filter(hologram -> hologram.getData().getLocation().getWorld().getName().equals(world)) + .toList(); FancyHolograms.get().getHologramStorage().saveBatch(h, true);