public static function setExp(Player $player, $exp) { $attribute = AttributeProvider::getInstance()->getAttribute($player); if ($attribute->getExp() == $exp) { return; } $level = 0; $last = 0; $current = $exp; for (;;) { if ($last > $current) { $percent = sprintf("%.1f", $current / $last); break; } else { if ($level == 0) { $level = 1; $current -= $last; $last = 7; } else { $level++; $current -= $last; $last += 2; } } } $attribute->setExp($exp); $attribute->setExpLast($last); $attribute->setExpCurrent($current); $attribute->setExpLevel($level); $attribute->setExpBarPercent($percent); $attribute->updateAttribute(); }
public static function saturation(Player $player, $itemId) { switch ($itemId) { case Item::GOLDEN_APPLE: $point = 8; break; default: $point = 0; break; // Reference http://minecraft.gamepedia.com/Hunger } $attribute = AttributeProvider::getInstance()->getAttribute($player); $attribute->setHunger($attribute->getHunger() + $point); $attribute->updateAttribute(); }
public function hungerTick() { foreach ($this->getServer()->getOnlinePlayers() as $player) { $attribute = AttributeProvider::getInstance()->getAttribute($player); if ($player->getMaxHealth() > $player->getHealth()) { if ($attribute->getHunger() == 20) { $ev = new EntityRegainHealthEvent($player, 1, EntityRegainHealthEvent::CAUSE_MAGIC); $player->heal(1, $ev); } } if ($attribute->getHunger() == 0) { if ($player->getHealth() - 1 < 1) { $ev = new EntityDamageEvent($player, EntityDamageEvent::CAUSE_MAGIC, 1); $player->attack($ev->getDamage(), $ev); } } } }
public static function saturation(Player $player, $itemId) { switch ($itemId) { case Item::APPLE: $point = 4; break; case Item::BAKED_POTATO: $point = 5; break; case Item::BEETROOT: $point = 1; break; case Item::BEETROOT_SOUP: $point = 6; break; case Item::BREAD: $point = 5; break; case Item::CAKE: case Item::CAKE_BLOCK: $point = 2; break; case Item::CARROT: case Item::CARROT_BLOCK: case Item::CARROTS: $point = 3; break; case Item::COOKED_CHICKEN: case Item::COOKED_BEEF: $point = 6; break; case Item::COOKED_FISH: $point = 5; break; case Item::COOKIE: $point = 2; break; case Item::GOLDEN_APPLE: $point = 4; break; case Item::MELON: $point = 2; break; case Item::MUSHROOM_STEW: $point = 6; break; case Item::POTATO: $point = 1; break; case Item::PUMPKIN_PIE: $point = 8; break; case Item::RAW_BEEF: $point = 3; break; case Item::RAW_CHICKEN: case Item::RAW_BEEF: $point = 2; break; case Item::RAW_FISH: $point = 2; break; case Item::STEAK: $point = 8; break; default: $point = 0; break; // Reference http://minecraft.gamepedia.com/Hunger } $attribute = AttributeProvider::getInstance()->getAttribute($player); $attribute->setHunger($attribute->getHunger() + $point); $attribute->updateAttribute(); }