Jelajahi Sumber

Check if brewing stand still exists before processing AlchemyBrewTask

TfT_02 11 tahun lalu
induk
melakukan
9349416326

+ 3 - 3
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();

+ 23 - 12
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);
     }