From d601049117fd2a4a71a7789ee3629a18a2da67ff Mon Sep 17 00:00:00 2001 From: Fernando Pettinelli Date: Mon, 20 Dec 2021 19:34:57 -0300 Subject: [PATCH] Update for the new HologramManager changes. --- .../songoda/epicfurnaces/EpicFurnaces.java | 95 ++++++++++--------- .../songoda/epicfurnaces/furnace/Furnace.java | 18 ++++ .../listeners/BlockListeners.java | 5 +- src/main/resources/plugin.yml | 2 +- 4 files changed, 73 insertions(+), 47 deletions(-) diff --git a/src/main/java/com/songoda/epicfurnaces/EpicFurnaces.java b/src/main/java/com/songoda/epicfurnaces/EpicFurnaces.java index 20c507c..a838247 100644 --- a/src/main/java/com/songoda/epicfurnaces/EpicFurnaces.java +++ b/src/main/java/com/songoda/epicfurnaces/EpicFurnaces.java @@ -226,6 +226,7 @@ public class EpicFurnaces extends SongodaPlugin { } this.dataManager.getFurnaces((furnaces) -> { + furnaces.values().forEach(Furnace::createHologram); this.furnaceManager.addFurnaces(furnaces.values()); this.dataManager.getBoosts((boosts) -> this.boostManager.addBoosts(boosts)); }); @@ -266,68 +267,76 @@ public class EpicFurnaces extends SongodaPlugin { } public void clearHologram(Furnace furnace) { - HologramManager.removeHologram(furnace.getLocation().add(0, .15, 0)); + furnace.removeHologram(); } public void updateHolograms(Collection furnaces) { // are holograms enabled? if (!Settings.HOLOGRAMS.getBoolean() || !HologramManager.getManager().isEnabled()) return; - Map> holograms = new HashMap<>(furnaces.size()); + Map> holograms = new HashMap<>(furnaces.size()); for (Furnace furnace : furnaces) { // don't try to load furnaces in chunks that aren't loaded if (!furnace.isInLoadedChunk()) continue; - BlockState state = furnace.getLocation().getBlock().getState(); - - // verify that this is a furnace - if (!(state instanceof org.bukkit.block.Furnace)) continue; - - org.bukkit.block.Furnace furnaceBlock = ((org.bukkit.block.Furnace) state); - - int performance = (furnaceBlock.getCookTime() - furnace.getPerformanceTotal(furnaceBlock.getType())) <= 0 ? 0 : furnace.getPerformanceTotal(furnaceBlock.getType()); - float percent = (float) (furnaceBlock.getCookTime() - performance) / (200 - performance); - - int progressBars = (int) (6 * percent) + (percent == 0 ? 0 : 1); - int leftOver = (6 - progressBars); - - String progress; - - if (furnaceBlock.getInventory().getFuel() != null) { - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < progressBars; i++) { - sb.append("&a="); - } - for (int i = 0; i < leftOver; i++) { - sb.append("&c="); - } - - progress = Methods.formatText(sb.toString()); - } else { - progress = getLocale().getMessage("general.hologram.outoffuel").getMessage(); + if (!HologramManager.isHologramLoaded(furnace.getHologramId())) { + continue; } - int inAmt = 0; - int outAmt = 0; - if (furnaceBlock.getInventory().getSmelting() != null) { - inAmt = furnaceBlock.getInventory().getSmelting().getAmount(); - } - if (furnaceBlock.getInventory().getResult() != null) { - outAmt = furnaceBlock.getInventory().getResult().getAmount(); - } - - String stats = getLocale().getMessage("general.hologram.stats") - .processPlaceholder("in", inAmt) - .processPlaceholder("out", Math.min(outAmt, 64)).getMessage(); - - holograms.put(furnace.getLocation().add(0, .15, 0), Arrays.asList(progress, stats)); + holograms.put(furnace.getHologramId(), getHologramLines(furnace)); } // Update holograms HologramManager.bulkUpdateHolograms(holograms); } + public List getHologramLines(Furnace furnace) { + BlockState state = furnace.getLocation().getBlock().getState(); + + // verify that this is a furnace + if (!(state instanceof org.bukkit.block.Furnace)) return Collections.emptyList(); + + org.bukkit.block.Furnace furnaceBlock = ((org.bukkit.block.Furnace) state); + + int performance = (furnaceBlock.getCookTime() - furnace.getPerformanceTotal(furnaceBlock.getType())) <= 0 ? 0 : furnace.getPerformanceTotal(furnaceBlock.getType()); + float percent = (float) (furnaceBlock.getCookTime() - performance) / (200 - performance); + + int progressBars = (int) (6 * percent) + (percent == 0 ? 0 : 1); + int leftOver = (6 - progressBars); + + String progress; + + if (furnaceBlock.getInventory().getFuel() != null) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < progressBars; i++) { + sb.append("&a="); + } + for (int i = 0; i < leftOver; i++) { + sb.append("&c="); + } + + progress = Methods.formatText(sb.toString()); + } else { + progress = getLocale().getMessage("general.hologram.outoffuel").getMessage(); + } + + int inAmt = 0; + int outAmt = 0; + if (furnaceBlock.getInventory().getSmelting() != null) { + inAmt = furnaceBlock.getInventory().getSmelting().getAmount(); + } + if (furnaceBlock.getInventory().getResult() != null) { + outAmt = furnaceBlock.getInventory().getResult().getAmount(); + } + + String stats = getLocale().getMessage("general.hologram.stats") + .processPlaceholder("in", inAmt) + .processPlaceholder("out", Math.min(outAmt, 64)).getMessage(); + + return Arrays.asList(progress, stats); + } + private void loadLevelManager() { if (!levelsFile.getFile().exists()) this.saveResource("levels.yml", false); diff --git a/src/main/java/com/songoda/epicfurnaces/furnace/Furnace.java b/src/main/java/com/songoda/epicfurnaces/furnace/Furnace.java index 0f89bd1..229182d 100644 --- a/src/main/java/com/songoda/epicfurnaces/furnace/Furnace.java +++ b/src/main/java/com/songoda/epicfurnaces/furnace/Furnace.java @@ -4,6 +4,7 @@ import com.songoda.core.compatibility.CompatibleMaterial; import com.songoda.core.compatibility.ServerVersion; import com.songoda.core.gui.GuiManager; import com.songoda.core.hooks.EconomyManager; +import com.songoda.core.hooks.HologramManager; import com.songoda.core.math.MathUtils; import com.songoda.core.hooks.ProtectionManager; import com.songoda.epicfurnaces.EpicFurnaces; @@ -42,6 +43,11 @@ public class Furnace { private final EpicFurnaces plugin = EpicFurnaces.getInstance(); + // This is the unique identifier for this furnace. + // It is reset on every plugin load. + // Used for holograms. + private final UUID uniqueId = UUID.randomUUID(); + // Identifier for database use. private int id; @@ -402,4 +408,16 @@ public class Furnace { if (result != null) world.dropItemNaturally(location, result); } + + public String getHologramId() { + return "EpicFurnaces-" + uniqueId; + } + + public void createHologram() { + HologramManager.createHologram(getHologramId(), getLocation().add(0, 0.15, 0), plugin.getHologramLines(this)); + } + + public void removeHologram() { + HologramManager.removeHologram(getHologramId()); + } } diff --git a/src/main/java/com/songoda/epicfurnaces/listeners/BlockListeners.java b/src/main/java/com/songoda/epicfurnaces/listeners/BlockListeners.java index 04cdbfb..a34fe99 100644 --- a/src/main/java/com/songoda/epicfurnaces/listeners/BlockListeners.java +++ b/src/main/java/com/songoda/epicfurnaces/listeners/BlockListeners.java @@ -18,7 +18,6 @@ import org.bukkit.event.block.BlockFormEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.inventory.ItemStack; -import java.util.Collections; import java.util.List; /** @@ -90,10 +89,10 @@ public class BlockListeners implements Listener { .setPlacedBy(event.getPlayer().getUniqueId()).build() : new FurnaceBuilder(location).setPlacedBy(event.getPlayer().getUniqueId()).build(); - plugin.getFurnaceManager().addFurnace(furnace); plugin.getDataManager().createFurnace(furnace); + plugin.getFurnaceManager().addFurnace(furnace); - plugin.updateHolograms(Collections.singleton(furnace)); + furnace.createHologram(); } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index ab1a926..b99685b 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: EpicFurnaces description: EpicFurnaces version: maven-version-number -softdepend: [ FabledSkyBlock, HolographicDisplays, PlotSquared, GriefPrevention, USkyBlock, SkyBlock, WorldGuard, Factions, Lands, RedProtect, UltimateClaims, BentoBox, Vault ] +softdepend: [ FabledSkyBlock, HolographicDisplays, PlotSquared, GriefPrevention, USkyBlock, SkyBlock, WorldGuard, Factions, Lands, RedProtect, UltimateClaims, BentoBox, Vault, DecentHolograms ] main: com.songoda.epicfurnaces.EpicFurnaces author: songoda api-version: 1.13