From 9349416326a573df688fb3e548177fe152f9c7d0 Mon Sep 17 00:00:00 2001 From: TfT_02 Date: Sat, 18 Jan 2014 19:11:15 +0100 Subject: [PATCH] Check if brewing stand still exists before processing AlchemyBrewTask --- .../skills/AlchemyBrewCheckTask.java | 6 ++-- .../runnables/skills/AlchemyBrewTask.java | 35 ++++++++++++------- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/gmail/nossr50/runnables/skills/AlchemyBrewCheckTask.java b/src/main/java/com/gmail/nossr50/runnables/skills/AlchemyBrewCheckTask.java index 7abcbd11e..72bdf9b45 100644 --- a/src/main/java/com/gmail/nossr50/runnables/skills/AlchemyBrewCheckTask.java +++ b/src/main/java/com/gmail/nossr50/runnables/skills/AlchemyBrewCheckTask.java @@ -18,17 +18,17 @@ public class AlchemyBrewCheckTask extends BukkitRunnable { private Block brewingStand; private ItemStack[] oldInventory; private ItemStack[] newInventory; - + public AlchemyBrewCheckTask(Player player, BrewingStand brewingStand) { this.player = player; this.brewingStand = brewingStand.getBlock(); this.oldInventory = Arrays.copyOfRange(brewingStand.getInventory().getContents(), 0, 4); } - + @Override public void run() { this.newInventory = Arrays.copyOfRange(((BrewingStand) brewingStand.getState()).getInventory().getContents(), 0, 4); - + if (Alchemy.brewingStandMap.containsKey(brewingStand)) { if (oldInventory[INGREDIENT_SLOT] == null || newInventory[INGREDIENT_SLOT] == null || !oldInventory[INGREDIENT_SLOT].isSimilar(newInventory[INGREDIENT_SLOT]) || !AlchemyPotionBrewer.isValidBrew(player, newInventory)) { Alchemy.brewingStandMap.get(brewingStand).cancelBrew(); diff --git a/src/main/java/com/gmail/nossr50/runnables/skills/AlchemyBrewTask.java b/src/main/java/com/gmail/nossr50/runnables/skills/AlchemyBrewTask.java index 7178a597f..f7bccd797 100644 --- a/src/main/java/com/gmail/nossr50/runnables/skills/AlchemyBrewTask.java +++ b/src/main/java/com/gmail/nossr50/runnables/skills/AlchemyBrewTask.java @@ -1,6 +1,7 @@ package com.gmail.nossr50.runnables.skills; import org.bukkit.Bukkit; +import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BrewingStand; import org.bukkit.entity.Player; @@ -20,7 +21,7 @@ import com.gmail.nossr50.util.player.UserManager; public class AlchemyBrewTask extends BukkitRunnable { private final double DEFAULT_BREW_SPEED = 1.0; private final int DEFAULT_BREW_TICKS = 400; - + private Block brewingStand; private double brewSpeed; private double brewTimer; @@ -32,31 +33,41 @@ public class AlchemyBrewTask extends BukkitRunnable { brewSpeed = DEFAULT_BREW_SPEED; brewTimer = DEFAULT_BREW_TICKS; - + if (player != null && !Misc.isNPCEntity(player) && Permissions.secondaryAbilityEnabled(player, SecondaryAbility.CATALYSIS)) { double catalysis = UserManager.getPlayer(player).getAlchemyManager().getBrewSpeed(); - + if (Permissions.lucky(player, SkillType.ALCHEMY)) { catalysis = UserManager.getPlayer(player).getAlchemyManager().getBrewSpeedLucky(); } - + McMMOPlayerCatalysisEvent event = new McMMOPlayerCatalysisEvent(player, catalysis); Bukkit.getPluginManager().callEvent(event); if (!event.isCancelled()) { brewSpeed = catalysis; } } - + if (Alchemy.brewingStandMap.containsKey(brewingStand)) { Alchemy.brewingStandMap.get(brewingStand).cancel(); } - + Alchemy.brewingStandMap.put(brewingStand, this); this.runTaskTimer(mcMMO.p, 1, 1); } @Override public void run() { + if (brewingStand.getType() != Material.BREWING_STAND) { + if (Alchemy.brewingStandMap.containsKey(brewingStand)) { + Alchemy.brewingStandMap.remove(brewingStand); + } + + this.cancel(); + + return; + } + brewTimer -= brewSpeed; // Vanilla potion brewing completes when BrewingTime == 1 @@ -72,24 +83,24 @@ public class AlchemyBrewTask extends BukkitRunnable { private void finish() { McMMOPlayerBrewEvent event = new McMMOPlayerBrewEvent(player, brewingStand); Bukkit.getPluginManager().callEvent(event); - + if (!event.isCancelled()) { AlchemyPotionBrewer.finishBrewing(brewingStand, player, false); } - + Alchemy.brewingStandMap.remove(brewingStand); } - + public void finishImmediately() { this.cancel(); - + AlchemyPotionBrewer.finishBrewing(brewingStand, player, true); Alchemy.brewingStandMap.remove(brewingStand); } - + public void cancelBrew() { this.cancel(); - + ((BrewingStand) brewingStand.getState()).setBrewingTime(-1); Alchemy.brewingStandMap.remove(brewingStand); }