From 7d85c153a4e3b6d7038572d1e55b69dc7e6d92d4 Mon Sep 17 00:00:00 2001 From: Brianna O'Keefe Date: Tue, 12 Mar 2024 19:35:11 -0500 Subject: [PATCH] Redid the sound to have better performance. --- .../handlers/RepairHandler.java | 96 ++++++++++++------- 1 file changed, 59 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/craftaro/ultimaterepairing/handlers/RepairHandler.java b/src/main/java/com/craftaro/ultimaterepairing/handlers/RepairHandler.java index aa9b340..314bb55 100644 --- a/src/main/java/com/craftaro/ultimaterepairing/handlers/RepairHandler.java +++ b/src/main/java/com/craftaro/ultimaterepairing/handlers/RepairHandler.java @@ -31,13 +31,13 @@ import java.util.UUID; */ public class RepairHandler { - private final UltimateRepairing instance; + private final UltimateRepairing plugin; private final GuiManager guiManager; private final Map playerAnvilData = new HashMap<>(); - public RepairHandler(UltimateRepairing instance, GuiManager guiManager) { - this.instance = instance; + public RepairHandler(UltimateRepairing plugin, GuiManager guiManager) { + this.plugin = plugin; this.guiManager = guiManager; } @@ -60,16 +60,16 @@ public class RepairHandler { Item item = player.getWorld().dropItem(anvil.add(0.5, 2, 0.5), itemStack); // Support for EpicHoppers suction. - item.setMetadata("grabbed", new FixedMetadataValue(instance, "true")); + item.setMetadata("grabbed", new FixedMetadataValue(plugin, "true")); - item.setMetadata("betterdrops_ignore", new FixedMetadataValue(instance, true)); + item.setMetadata("betterdrops_ignore", new FixedMetadataValue(plugin, true)); Vector vec = player.getEyeLocation().getDirection(); vec.setX(0); vec.setY(0); vec.setZ(0); item.setVelocity(vec); item.setPickupDelay(3600); - item.setMetadata("UltimateRepairing", new FixedMetadataValue(instance, "")); + item.setMetadata("UltimateRepairing", new FixedMetadataValue(plugin, "")); playerData.setItem(item); playerData.setToBeRepaired(itemStack); @@ -77,20 +77,20 @@ public class RepairHandler { yesNo(player, type, itemStack); - Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> { + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { if (item.isValid() && !playerData.isBeingRepaired()) { - instance.getLocale().getMessage("event.repair.timeout").sendPrefixedMessage(player); + plugin.getLocale().getMessage("event.repair.timeout").sendPrefixedMessage(player); removeItem(playerData, player); player.closeInventory(); } - }, instance.getConfig().getLong("Main.Time Before Repair Auto Canceled")); + }, plugin.getConfig().getLong("Main.Time Before Repair Auto Canceled")); } public void initRepair(Player player, Location anvil) { if (anvil.add(0, 1, 0).getBlock().getType() != Material.AIR) { - instance.getLocale().getMessage("event.repair.needspace").sendPrefixedMessage(player); + plugin.getLocale().getMessage("event.repair.needspace").sendPrefixedMessage(player); return; } @@ -117,7 +117,7 @@ public class RepairHandler { PlayerAnvilData playerData = playerAnvilData.computeIfAbsent(player.getUniqueId(), uuid -> new PlayerAnvilData()); if (!answer) { removeItem(playerData, player); - instance.getLocale().getMessage("event.repair.cancelled").sendPrefixedMessage(player); + plugin.getLocale().getMessage("event.repair.cancelled").sendPrefixedMessage(player); return; } RepairType type = playerData.getType(); @@ -168,43 +168,65 @@ public class RepairHandler { Location location = playerData.getLocations(); player.getWorld().playEffect(location, effect, blockTypeFinal); - Runnable runnable = () -> player.getWorld().playEffect(location, effect, blockTypeFinal); - Bukkit.getScheduler().scheduleSyncDelayedTask(instance, runnable, 5L); - Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> { - player.getWorld().playEffect(location, effect, blockTypeFinal); - player.getWorld().playEffect(location, effect, Material.STONE); - XSound.BLOCK_ANVIL_LAND.play(player); - }, 10L); - Bukkit.getScheduler().scheduleSyncDelayedTask(instance, runnable, 15L); - Bukkit.getScheduler().scheduleSyncDelayedTask(instance, runnable, 20L); - Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> { - XSound.BLOCK_ANVIL_LAND.play(player); - player.getWorld().playEffect(location, effect, blockTypeFinal); - player.getWorld().playEffect(location, effect, Material.ANVIL); - instance.getLocale().getMessage("event.repair.success").sendPrefixedMessage(player); + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { + try { + Runnable runnable = () -> player.getWorld().playEffect(location, effect, blockTypeFinal); - playerData.getToBeRepaired().setDurability((short) 0); - removeItem(playerData, player); + // Delay for 5 ticks (0.25 seconds) + Thread.sleep(250); + Bukkit.getScheduler().runTask(plugin, runnable); - if (player.getGameMode() != GameMode.CREATIVE && - type == RepairType.EXPERIENCE) { - player.setLevel(player.getLevel() - playerData.getPrice()); + // Delay for 10 ticks (0.5 seconds) + Thread.sleep(500); + Bukkit.getScheduler().runTask(plugin, () -> { + player.getWorld().playEffect(location, effect, blockTypeFinal); + player.getWorld().playEffect(location, effect, Material.STONE); + XSound.BLOCK_ANVIL_LAND.play(player); + }); + + // Delay for 15 ticks (0.75 seconds) + Thread.sleep(500); + Bukkit.getScheduler().runTask(plugin, runnable); + + // Delay for 20 ticks (1 second) + Thread.sleep(250); + Bukkit.getScheduler().runTask(plugin, runnable); + + // Delay for 20 ticks (1 second) + Thread.sleep(250); + Bukkit.getScheduler().runTask(plugin, runnable); + + // Delay for 25 ticks (1.25 seconds) + Thread.sleep(500); + Bukkit.getScheduler().runTask(plugin, () -> { + XSound.BLOCK_ANVIL_LAND.play(player); + player.getWorld().playEffect(location, effect, blockTypeFinal); + player.getWorld().playEffect(location, effect, Material.ANVIL); + plugin.getLocale().getMessage("event.repair.success").sendPrefixedMessage(player); + playerData.getToBeRepaired().setDurability((short) 0); + removeItem(playerData, player); + if (player.getGameMode() != GameMode.CREATIVE && type == RepairType.EXPERIENCE) { + player.setLevel(player.getLevel() - playerData.getPrice()); + } + player.closeInventory(); + }); + } catch (InterruptedException e) { + e.printStackTrace(); } - player.closeInventory(); - }, 25L); + }); return; } if (type == RepairType.ECONOMY) { - instance.getLocale().getMessage("event.repair.notenough") - .processPlaceholder("type", instance.getLocale().getMessage("interface.repair.eco").getMessage()) + plugin.getLocale().getMessage("event.repair.notenough") + .processPlaceholder("type", plugin.getLocale().getMessage("interface.repair.eco").getMessage()) .sendPrefixedMessage(player); } else if (type == RepairType.EXPERIENCE) - instance.getLocale().getMessage("event.repair.notenough") - .processPlaceholder("type", instance.getLocale().getMessage("interface.repair.xp").getMessage()) + plugin.getLocale().getMessage("event.repair.notenough") + .processPlaceholder("type", plugin.getLocale().getMessage("interface.repair.xp").getMessage()) .sendPrefixedMessage(player); else - instance.getLocale().getMessage("event.repair.notenough") + plugin.getLocale().getMessage("event.repair.notenough") .processPlaceholder("type", name).sendPrefixedMessage(player); // we've failed to repair, so return the item