Adds sound effects to Blacksmiths and Scrappers
This commit is contained in:
		| @@ -24,6 +24,7 @@ public interface Settings<K extends Setting> { | ||||
|      * @param setting <p>The setting to get</p> | ||||
|      * @return <p>The current raw setting value</p> | ||||
|      */ | ||||
|     @NotNull Object getRawValue(@NotNull K setting); | ||||
|     @NotNull | ||||
|     Object getRawValue(@NotNull K setting); | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -9,6 +9,7 @@ import net.knarcraft.blacksmith.util.ItemHelper; | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.Material; | ||||
| import org.bukkit.Registry; | ||||
| import org.bukkit.Sound; | ||||
| import org.bukkit.enchantments.Enchantment; | ||||
| import org.bukkit.entity.LivingEntity; | ||||
| import org.bukkit.entity.Player; | ||||
| @@ -30,7 +31,6 @@ import static net.knarcraft.blacksmith.formatting.BlacksmithStringFormatter.send | ||||
| public class ReforgeSession extends Session implements Runnable { | ||||
|  | ||||
|     private final BlacksmithTrait blacksmithTrait; | ||||
|     private final NPC npc; | ||||
|     private final ItemStack itemToReforge; | ||||
|     private final BlacksmithNPCSettings config; | ||||
|     private static List<String> enchantments = null; | ||||
| @@ -45,9 +45,8 @@ public class ReforgeSession extends Session implements Runnable { | ||||
|      */ | ||||
|     ReforgeSession(@NotNull BlacksmithTrait blacksmithTrait, @NotNull Player player, @NotNull NPC npc, | ||||
|                    @NotNull BlacksmithNPCSettings config) { | ||||
|         super(player); | ||||
|         super(player, npc); | ||||
|         this.blacksmithTrait = blacksmithTrait; | ||||
|         this.npc = npc; | ||||
|         this.itemToReforge = player.getInventory().getItemInMainHand(); | ||||
|         this.config = config; | ||||
|  | ||||
| @@ -97,7 +96,9 @@ public class ReforgeSession extends Session implements Runnable { | ||||
|      */ | ||||
|     @Override | ||||
|     public void run() { | ||||
|         sendNPCMessage(this.npc, this.player, reforgeItem() ? this.config.getSuccessMessage() : this.config.getFailMessage()); | ||||
|         boolean success = reforgeItem(); | ||||
|         sendNPCMessage(this.npc, this.player, success ? this.config.getSuccessMessage() : this.config.getFailMessage()); | ||||
|         playSound(success ? Sound.BLOCK_ANVIL_USE : Sound.ENTITY_VILLAGER_NO); | ||||
|  | ||||
|         //Stop the reforged item from displaying in the blacksmith's hand | ||||
|         if (this.npc.getEntity() instanceof Player) { | ||||
|   | ||||
| @@ -6,6 +6,7 @@ import net.knarcraft.blacksmith.config.scrapper.ScrapperNPCSettings; | ||||
| import net.knarcraft.blacksmith.manager.EconomyManager; | ||||
| import net.knarcraft.blacksmith.util.ItemHelper; | ||||
| import net.knarcraft.blacksmith.util.SalvageHelper; | ||||
| import org.bukkit.Sound; | ||||
| import org.bukkit.entity.LivingEntity; | ||||
| import org.bukkit.entity.Player; | ||||
| import org.bukkit.inventory.ItemStack; | ||||
| @@ -25,7 +26,6 @@ import static net.knarcraft.blacksmith.formatting.BlacksmithStringFormatter.send | ||||
| public class SalvageSession extends Session implements Runnable { | ||||
|  | ||||
|     private final ScrapperTrait scrapperTrait; | ||||
|     private final NPC npc; | ||||
|     private final ItemStack itemToSalvage; | ||||
|     private final ScrapperNPCSettings config; | ||||
|     private final List<ItemStack> salvage; | ||||
| @@ -47,9 +47,8 @@ public class SalvageSession extends Session implements Runnable { | ||||
|     SalvageSession(@NotNull ScrapperTrait scrapperTrait, @NotNull Player player, @NotNull NPC npc, | ||||
|                    @NotNull ScrapperNPCSettings config, @NotNull List<ItemStack> salvage, | ||||
|                    @NotNull SalvageMethod salvageMethod, int itemsConsumed) { | ||||
|         super(player); | ||||
|         super(player, npc); | ||||
|         this.scrapperTrait = scrapperTrait; | ||||
|         this.npc = npc; | ||||
|         this.itemToSalvage = player.getInventory().getItemInMainHand().clone(); | ||||
|         this.config = config; | ||||
|         this.salvage = salvage; | ||||
| @@ -113,8 +112,10 @@ public class SalvageSession extends Session implements Runnable { | ||||
|      */ | ||||
|     private void salvageItem() { | ||||
|         if (random.nextInt(100) < this.config.getFailChance()) { | ||||
|             playSound(Sound.ENTITY_VILLAGER_NO); | ||||
|             failSalvage(); | ||||
|         } else { | ||||
|             playSound(Sound.BLOCK_ANVIL_USE); | ||||
|             giveSalvage(); | ||||
|             sendNPCMessage(this.npc, this.player, this.config.getSuccessMessage()); | ||||
|         } | ||||
|   | ||||
| @@ -3,6 +3,9 @@ package net.knarcraft.blacksmith.trait; | ||||
| import net.citizensnpcs.api.npc.NPC; | ||||
| import net.knarcraft.blacksmith.BlacksmithPlugin; | ||||
| import net.knarcraft.blacksmith.util.ItemHelper; | ||||
| import org.bukkit.Sound; | ||||
| import org.bukkit.SoundCategory; | ||||
| import org.bukkit.World; | ||||
| import org.bukkit.entity.Player; | ||||
| import org.bukkit.inventory.ItemStack; | ||||
| import org.bukkit.scheduler.BukkitScheduler; | ||||
| @@ -18,6 +21,7 @@ public abstract class Session implements Runnable { | ||||
|  | ||||
|     protected static final Random random = new Random(); | ||||
|     protected final Player player; | ||||
|     protected final NPC npc; | ||||
|     protected long finishTime; | ||||
|     protected int taskId; | ||||
|  | ||||
| @@ -25,9 +29,11 @@ public abstract class Session implements Runnable { | ||||
|      * Instantiates a new session | ||||
|      * | ||||
|      * @param player <p>The player the session belongs to</p> | ||||
|      * @param npc    <p>The NPC involved in the session</p> | ||||
|      */ | ||||
|     public Session(@NotNull Player player) { | ||||
|     public Session(@NotNull Player player, @NotNull NPC npc) { | ||||
|         this.player = player; | ||||
|         this.npc = npc; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -90,6 +96,10 @@ public abstract class Session implements Runnable { | ||||
|         int actionDelay = getActionDelay(); | ||||
|         this.finishTime = System.currentTimeMillis() + (actionDelay * 1000L); | ||||
|         taskId = scheduler.scheduleSyncDelayedTask(BlacksmithPlugin.getInstance(), this, actionDelay * 20L); | ||||
|         int playWorkSound = scheduler.scheduleSyncRepeatingTask(BlacksmithPlugin.getInstance(), | ||||
|                 this::playWorkSound, 20, 20); | ||||
|         scheduler.scheduleSyncDelayedTask(BlacksmithPlugin.getInstance(), () -> scheduler.cancelTask(playWorkSound), | ||||
|                 (actionDelay * 20L) - 20); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -140,4 +150,26 @@ public abstract class Session implements Runnable { | ||||
|      */ | ||||
|     protected abstract int getActionDelay(); | ||||
|  | ||||
|     /** | ||||
|      * Plays an NPC sound | ||||
|      * | ||||
|      * @param sound <p>The sound to play</p> | ||||
|      */ | ||||
|     protected void playSound(Sound sound) { | ||||
|         World world = this.npc.getEntity().getLocation().getWorld(); | ||||
|         if (world != null) { | ||||
|             world.playSound(this.npc.getEntity(), sound, SoundCategory.AMBIENT, 0.5F, 1.0F); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Plays the working NPC sound | ||||
|      */ | ||||
|     protected void playWorkSound() { | ||||
|         World world = this.npc.getEntity().getLocation().getWorld(); | ||||
|         if (world != null) { | ||||
|             world.playSound(this.npc.getEntity(), Sound.BLOCK_PACKED_MUD_BREAK, SoundCategory.AMBIENT, 0.5F, (float) 0.5); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -105,6 +105,9 @@ public final class ItemHelper { | ||||
|     public static @NotNull Set<Material> getAllReforgeAbleMaterials() { | ||||
|         Set<Material> reforgeAbleMaterials = new HashSet<>(); | ||||
|         for (Material material : Material.values()) { | ||||
|             if (!material.isItem()) { | ||||
|                 continue; | ||||
|             } | ||||
|             ItemStack item = new ItemStack(material); | ||||
|             if (isRepairable(item)) { | ||||
|                 reforgeAbleMaterials.add(material); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user