Inheritance: extends ContainerInventory
 public function onUpdate()
 {
     if ($this->closed === true) {
         return false;
     }
     $this->timings->startTiming();
     $ret = false;
     $ingredient = $this->inventory->getIngredient();
     $potions = $this->inventory->getPotions();
     $canBrew = false;
     foreach ($potions as $pot) {
         if ($pot->getId() === Item::POTION) {
             $canBrew = true;
         }
     }
     if ($this->namedtag["BrewTime"] <= self::MAX_BREW_TIME and $canBrew and $ingredient->getCount() > 0) {
         if (!$this->checkIngredient($ingredient)) {
             $canBrew = false;
         }
     } else {
         $canBrew = false;
     }
     if ($canBrew) {
         $this->namedtag->BrewTime = new ShortTag("BrewTime", $this->namedtag["BrewTime"] - 1);
         if ($this->namedtag["BrewTime"] <= 0) {
             //20 seconds
             foreach ($this->inventory->getPotions() as $slot => $potion) {
                 $recipe = Server::getInstance()->getCraftingManager()->matchBrewingRecipe($ingredient, $potion);
                 if ($recipe instanceof BrewingRecipe) {
                     $this->inventory->setPotion($slot, $recipe->getResult());
                 } elseif ($ingredient->getId() === Item::GUNPOWDER && $potion->getId() === Item::POTION) {
                     $this->inventory->setPotion($slot, new SplashPotion($potion->getDamage()));
                 }
             }
             $ingredient->count--;
             $this->inventory->setIngredient($ingredient);
             $this->namedtag->BrewTime = new ShortTag("BrewTime", $this->namedtag["BrewTime"] + 400);
         }
         foreach ($this->getInventory()->getViewers() as $player) {
             $windowId = $player->getWindowId($this->getInventory());
             if ($windowId > 0) {
                 $pk = new ContainerSetDataPacket();
                 $pk->windowid = $windowId;
                 $pk->property = 0;
                 //Brewing
                 $pk->value = floor($this->namedtag["BrewTime"]);
                 $player->dataPacket($pk);
             }
         }
         $ret = true;
     } else {
         $this->namedtag->BrewTime = new ShortTag("BrewTime", self::MAX_BREW_TIME);
         $ret = false;
     }
     $this->lastUpdate = microtime(true);
     $this->timings->stopTiming();
     return $ret;
 }
Example #2
0
 public function onUpdate()
 {
     if ($this->closed === true) {
         return false;
     }
     $this->timings->startTiming();
     $ret = false;
     $ingredient = $this->inventory->getIngredient();
     $canBrew = false;
     for ($i = 1; $i <= 3; $i++) {
         if ($this->inventory->getItem($i)->getId() == Item::POTION) {
             $canBrew = true;
             break;
         }
     }
     if ($this->namedtag["CookTime"] <= self::MAX_BREW_TIME and $canBrew and $ingredient->getCount() > 0) {
         //if(!$this->checkIngredient($ingredient)) $canBrew = false;
         //TODO: check ingredients
     } else {
         $canBrew = false;
     }
     if ($canBrew) {
         $this->namedtag->CookTime = new ShortTag("CookTime", $this->namedtag["CookTime"] - 1);
         if ($this->namedtag["CookTime"] <= 0) {
             for ($i = 1; $i <= 3; $i++) {
                 $potion = $this->inventory->getItem($i);
                 $recipe = Server::getInstance()->getCraftingManager()->matchBrewingRecipe($ingredient, $potion);
                 if ($recipe != null) {
                     $this->inventory->setItem($i, $recipe->getResult());
                 }
             }
             $ingredient->count--;
             if ($ingredient->getCount() <= 0) {
                 $ingredient = Item::get(Item::AIR);
             }
             $this->inventory->setIngredient($ingredient);
         }
         foreach ($this->getInventory()->getViewers() as $player) {
             $windowId = $player->getWindowId($this->getInventory());
             if ($windowId > 0) {
                 $pk = new ContainerSetDataPacket();
                 $pk->windowid = $windowId;
                 $pk->property = 0;
                 //Brew
                 $pk->value = $this->namedtag["CookTime"];
                 $player->dataPacket($pk);
             }
         }
         $ret = true;
     } else {
         $this->namedtag->CookTime = new ShortTag("CookTime", self::MAX_BREW_TIME);
     }
     $this->lastUpdate = microtime(true);
     $this->timings->stopTiming();
     return $ret;
 }
 public function onUpdate()
 {
     if ($this->closed === true) {
         return false;
     }
     $this->timings->startTiming();
     $ret = false;
     $ingredient = $this->inventory->getIngredient();
     $product = $this->inventory->getResult();
     $brew = $this->server->getCraftingManager()->matchBrewingRecipe($ingredient);
     $canbrew = ($brew instanceof BrewingRecipe and $ingredient->getCount() > 0 and ($brew->getResult()->equals($product) and $product->getCount() < $product->getMaxStackSize() or $product->getId() === Item::AIR));
     $this->namedtag->BrewTime = new Short("BrewTime", $this->namedtag["BrewTime"] - 1);
     $this->namedtag->BrewTicks = new Short("BrewTicks", ceil($this->namedtag["BrewTime"] / $this->namedtag["MaxTime"] * 200));
     if ($brew instanceof BrewingRecipe and $canbrew) {
         $product = Item::get($brew->getResult()->getId(), $brew->getResult()->getDamage(), $product->getCount() + 1);
         $this->server->getPluginManager()->callEvent($ev = new BrewingStandBrewEvent($this, $ingredient, $product));
         if (!$ev->isCancelled()) {
             $this->inventory->setResult($ev->getResult());
             $ingredient->setCount($ingredient->getCount() - 1);
             if ($ingredient->getCount() === 0) {
                 $ingredient = Item::get(Item::AIR, 0, 0);
             }
             $this->inventory->setbrewing($ingredient);
         }
     }
     $ret = true;
     foreach ($this->getInventory()->getViewers() as $player) {
         $windowId = $player->getWindowId($this->getInventory());
         if ($windowId > 0) {
             $pk = new ContainerSetDataPacket();
             $pk->windowid = $windowId;
             $pk->property = 0;
             //Brew
             $player->dataPacket($pk);
             $pk = new ContainerSetDataPacket();
             $pk->windowid = $windowId;
             $pk->property = 1;
             //Bubble Icon
             $player->dataPacket($pk);
         }
     }
     $this->lastUpdate = microtime(true);
     $this->timings->stopTiming();
     return $ret;
 }