示例#1
0
 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();
 }
示例#2
0
 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();
 }
示例#3
0
 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);
             }
         }
     }
 }
示例#4
0
 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();
 }
示例#5
0
 public function save($async = false)
 {
     $this->attributeLoader->save($async);
     $this->attributeProvider->save($async);
 }