Custom potion brewing now consume fuel from the brewing stand.

Fixed a glitch that let players remove the ingredient of a custom potion
from the brewing stand without cancelling the brewing task (this doesn't
seem to have caused any duplicates, once the task finished nothing
happened).
This commit is contained in:
Dor 2016-03-16 15:16:48 +02:00
parent d942cedb8e
commit 4054315c19
2 changed files with 7 additions and 2 deletions

View File

@ -26,7 +26,7 @@ public class AlchemyBrewCheckTask extends BukkitRunnable {
public void run() { public void run() {
Location location = brewingStand.getLocation(); Location location = brewingStand.getLocation();
ItemStack[] newInventory = Arrays.copyOfRange(brewingStand.getInventory().getContents(), 0, 4); ItemStack[] newInventory = Arrays.copyOfRange(brewingStand.getInventory().getContents(), 0, 4);
boolean validBrew = AlchemyPotionBrewer.isValidBrew(player, newInventory); boolean validBrew = brewingStand.getFuelLevel() > 0 && AlchemyPotionBrewer.isValidBrew(player, newInventory);
if (Alchemy.brewingStandMap.containsKey(location)) { if (Alchemy.brewingStandMap.containsKey(location)) {
if (oldInventory[Alchemy.INGREDIENT_SLOT] == null || newInventory[Alchemy.INGREDIENT_SLOT] == null || !oldInventory[Alchemy.INGREDIENT_SLOT].isSimilar(newInventory[Alchemy.INGREDIENT_SLOT]) || !validBrew) { if (oldInventory[Alchemy.INGREDIENT_SLOT] == null || newInventory[Alchemy.INGREDIENT_SLOT] == null || !oldInventory[Alchemy.INGREDIENT_SLOT].isSimilar(newInventory[Alchemy.INGREDIENT_SLOT]) || !validBrew) {

View File

@ -27,6 +27,7 @@ public class AlchemyBrewTask extends BukkitRunnable {
private double brewSpeed; private double brewSpeed;
private double brewTimer; private double brewTimer;
private Player player; private Player player;
private int fuel;
public AlchemyBrewTask(BlockState brewingStand, Player player) { public AlchemyBrewTask(BlockState brewingStand, Player player) {
this.brewingStand = brewingStand; this.brewingStand = brewingStand;
@ -51,13 +52,15 @@ public class AlchemyBrewTask extends BukkitRunnable {
Alchemy.brewingStandMap.get(location).cancel(); Alchemy.brewingStandMap.get(location).cancel();
} }
fuel = ((BrewingStand) brewingStand).getFuelLevel() - 1;
Alchemy.brewingStandMap.put(location, this); Alchemy.brewingStandMap.put(location, this);
this.runTaskTimer(mcMMO.p, 1, 1); this.runTaskTimer(mcMMO.p, 1, 1);
} }
@Override @Override
public void run() { public void run() {
if (player == null || !player.isValid() || brewingStand == null || brewingStand.getType() != Material.BREWING_STAND) { if (player == null || !player.isValid() || brewingStand == null || brewingStand.getType() != Material.BREWING_STAND || !AlchemyPotionBrewer.isValidIngredient(player, ((BrewingStand) brewingStand).getInventory().getContents()[Alchemy.INGREDIENT_SLOT])) {
if (Alchemy.brewingStandMap.containsKey(location)) { if (Alchemy.brewingStandMap.containsKey(location)) {
Alchemy.brewingStandMap.remove(location); Alchemy.brewingStandMap.remove(location);
} }
@ -67,6 +70,8 @@ public class AlchemyBrewTask extends BukkitRunnable {
return; return;
} }
((BrewingStand) brewingStand).setFuelLevel(fuel);
brewTimer -= brewSpeed; brewTimer -= brewSpeed;
// Vanilla potion brewing completes when BrewingTime == 1 // Vanilla potion brewing completes when BrewingTime == 1