From 424f65b2877e2bd4c7dbfaad8e930f6ba0722441 Mon Sep 17 00:00:00 2001 From: Brianna O'Keefe Date: Tue, 12 Mar 2024 17:12:07 -0500 Subject: [PATCH] Improved performance for particles. --- .../ultimaterepairing/UltimateRepairing.java | 6 +- .../gui/AnvilSettingsGui.java | 2 + .../handlers/ParticleTask.java | 54 ---------------- .../listeners/PlayerListeners.java | 1 - .../ultimaterepairing/task/ParticleTask.java | 63 +++++++++++++++++++ 5 files changed, 70 insertions(+), 56 deletions(-) delete mode 100644 src/main/java/com/craftaro/ultimaterepairing/handlers/ParticleTask.java create mode 100644 src/main/java/com/craftaro/ultimaterepairing/task/ParticleTask.java diff --git a/src/main/java/com/craftaro/ultimaterepairing/UltimateRepairing.java b/src/main/java/com/craftaro/ultimaterepairing/UltimateRepairing.java index bafd5c8..a46ba70 100644 --- a/src/main/java/com/craftaro/ultimaterepairing/UltimateRepairing.java +++ b/src/main/java/com/craftaro/ultimaterepairing/UltimateRepairing.java @@ -14,7 +14,7 @@ import com.craftaro.ultimaterepairing.anvil.UAnvil; import com.craftaro.ultimaterepairing.commands.CommandReload; import com.craftaro.ultimaterepairing.commands.CommandSettings; import com.craftaro.ultimaterepairing.commands.CommandURAnvil; -import com.craftaro.ultimaterepairing.handlers.ParticleTask; +import com.craftaro.ultimaterepairing.task.ParticleTask; import com.craftaro.ultimaterepairing.handlers.RepairHandler; import com.craftaro.ultimaterepairing.listeners.BlockListeners; import com.craftaro.ultimaterepairing.listeners.InteractListeners; @@ -171,4 +171,8 @@ public class UltimateRepairing extends SongodaPlugin { public GuiManager getGuiManager() { return guiManager; } + + public ParticleTask getParticleTask() { + return particleTask; + } } diff --git a/src/main/java/com/craftaro/ultimaterepairing/gui/AnvilSettingsGui.java b/src/main/java/com/craftaro/ultimaterepairing/gui/AnvilSettingsGui.java index f4bc6b4..f89d785 100644 --- a/src/main/java/com/craftaro/ultimaterepairing/gui/AnvilSettingsGui.java +++ b/src/main/java/com/craftaro/ultimaterepairing/gui/AnvilSettingsGui.java @@ -1,6 +1,7 @@ package com.craftaro.ultimaterepairing.gui; import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; +import com.craftaro.ultimaterepairing.UltimateRepairing; import com.craftaro.ultimaterepairing.anvil.UAnvil; import com.craftaro.core.gui.Gui; import com.craftaro.core.gui.GuiUtils; @@ -52,6 +53,7 @@ public class AnvilSettingsGui extends Gui { (event) -> { anvil.setParticles(!anvil.isParticles()); updateItemLore(event.slot, ChatColor.GRAY + "Currently: " + (anvil.isParticles() ? ChatColor.GREEN + "Enabled" : ChatColor.RED + "Disabled") + ChatColor.GRAY + "."); + UltimateRepairing.getInstance().getParticleTask().start(); }); } diff --git a/src/main/java/com/craftaro/ultimaterepairing/handlers/ParticleTask.java b/src/main/java/com/craftaro/ultimaterepairing/handlers/ParticleTask.java deleted file mode 100644 index 965eeb8..0000000 --- a/src/main/java/com/craftaro/ultimaterepairing/handlers/ParticleTask.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.craftaro.ultimaterepairing.handlers; - -import com.craftaro.ultimaterepairing.UltimateRepairing; -import com.craftaro.core.compatibility.CompatibleParticleHandler; -import com.craftaro.core.compatibility.CompatibleParticleHandler.ParticleType; -import org.bukkit.Bukkit; -import org.bukkit.event.Listener; -import org.bukkit.scheduler.BukkitTask; - -/** - * Created by songoda on 2/24/2017. - */ -public class ParticleTask implements Listener { - - private final UltimateRepairing instance; - int amt; - String typeName; - ParticleType type; - BukkitTask task = null; - - public ParticleTask(UltimateRepairing instance) { - this.instance = instance; - } - - public void start() { - reload(); - if (task == null) { - task = Bukkit.getServer().getScheduler().runTaskTimerAsynchronously(instance, this::applyParticles, 0L, 4L); - } - } - - public void stop() { - if (task != null) { - Bukkit.getServer().getScheduler().cancelTask(task.getTaskId()); - task = null; - } - } - - public void reload() { - amt = instance.getConfig().getInt("Main.Particle Amount", 24) / 2; - typeName = instance.getConfig().getString("Main.Particle Type", "SPELL_WITCH"); - type = ParticleType.getParticle(typeName); - if (type == null) { - type = ParticleType.SPELL_WITCH; - } - } - - public void applyParticles() { - if (instance.getAnvilManager().getAnvils().isEmpty()) return; - instance.getAnvilManager().getAnvils().parallelStream() - .filter(anvil -> anvil.isParticles() && anvil.isInLoadedChunk()) - .forEach(anvil -> CompatibleParticleHandler.spawnParticles(type, anvil.getLocation().add(.5, 0, .5), amt, 0.25, 0.25, 0.25)); - } -} diff --git a/src/main/java/com/craftaro/ultimaterepairing/listeners/PlayerListeners.java b/src/main/java/com/craftaro/ultimaterepairing/listeners/PlayerListeners.java index e21644c..085b0a4 100644 --- a/src/main/java/com/craftaro/ultimaterepairing/listeners/PlayerListeners.java +++ b/src/main/java/com/craftaro/ultimaterepairing/listeners/PlayerListeners.java @@ -16,7 +16,6 @@ public class PlayerListeners implements Listener { @EventHandler public void onLeave(PlayerQuitEvent event) { - if (!plugin.getRepairHandler().hasInstance(event.getPlayer()) || !plugin.getRepairHandler().getDataFor(event.getPlayer()).getInRepair()) return; diff --git a/src/main/java/com/craftaro/ultimaterepairing/task/ParticleTask.java b/src/main/java/com/craftaro/ultimaterepairing/task/ParticleTask.java new file mode 100644 index 0000000..2186e47 --- /dev/null +++ b/src/main/java/com/craftaro/ultimaterepairing/task/ParticleTask.java @@ -0,0 +1,63 @@ +package com.craftaro.ultimaterepairing.task; + +import com.craftaro.core.compatibility.CompatibleParticleHandler; +import com.craftaro.core.compatibility.CompatibleParticleHandler.ParticleType; +import com.craftaro.ultimaterepairing.UltimateRepairing; +import com.craftaro.ultimaterepairing.anvil.UAnvil; +import com.craftaro.ultimaterepairing.settings.Settings; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * Created by songoda on 2/24/2017. + */ +public class ParticleTask extends BukkitRunnable { + + private final UltimateRepairing plugin; + private int amt; + private String typeName; + private ParticleType type; + + public ParticleTask(UltimateRepairing plugin) { + this.plugin = plugin; + } + + public void start() { + if (isCancelled()) + return; + + reload(); + runTaskTimerAsynchronously(plugin, 0L, 4L); + } + + public void reload() { + amt = Settings.PARTICLE_AMOUNT.getInt(24) / 2; + typeName = Settings.PARTICLE_TYPE.getString("SPELL_WITCH"); + type = ParticleType.getParticle(typeName); + if (type == null) + type = ParticleType.SPELL_WITCH; + } + + @Override + public void run() { + if (plugin.getAnvilManager().getAnvils().isEmpty()) { + cancel(); + return; + } + + List anvils = plugin.getAnvilManager().getAnvils().parallelStream() + .filter(UAnvil::isParticles).collect(Collectors.toList()); + + if (anvils.isEmpty()) { + cancel(); + return; + } + + anvils.stream().filter(UAnvil::isInLoadedChunk) + .forEach(anvil -> CompatibleParticleHandler + .spawnParticles(type, anvil.getLocation().add(.5, 0, .5), amt, + 0.25, 0.25, 0.25)); + } +}