Refactored effects handling, split up concerns of effect types and instances

Removed json insanity for effects

Split up effect types and effect instances

Saturation is an instant effect
This commit is contained in:
Dylan K. Taylor
2018-03-07 12:42:31 +00:00
parent c7f8796136
commit dc3bf8546e
17 changed files with 442 additions and 453 deletions

View File

@ -24,7 +24,7 @@ declare(strict_types=1);
namespace pocketmine\item;
use pocketmine\block\Block;
use pocketmine\entity\Effect;
use pocketmine\entity\EffectInstance;
use pocketmine\entity\Living;
/**
@ -41,7 +41,7 @@ interface Consumable{
public function getResidue();
/**
* @return Effect[]
* @return EffectInstance[]
*/
public function getAdditionalEffects() : array;

View File

@ -24,6 +24,7 @@ declare(strict_types=1);
namespace pocketmine\item;
use pocketmine\entity\Effect;
use pocketmine\entity\EffectInstance;
class Fish extends Food{
public const FISH_FISH = 0;
@ -71,9 +72,9 @@ class Fish extends Food{
public function getAdditionalEffects() : array{
return $this->meta === self::FISH_PUFFERFISH ? [
Effect::getEffect(Effect::HUNGER)->setDuration(300)->setAmplifier(2),
Effect::getEffect(Effect::NAUSEA)->setDuration(300)->setAmplifier(1),
Effect::getEffect(Effect::POISON)->setDuration(1200)->setAmplifier(3),
new EffectInstance(Effect::getEffect(Effect::HUNGER), 300, 2),
new EffectInstance(Effect::getEffect(Effect::NAUSEA), 300, 1),
new EffectInstance(Effect::getEffect(Effect::POISON), 1200, 3)
] : [];
}
}

View File

@ -24,6 +24,7 @@ declare(strict_types=1);
namespace pocketmine\item;
use pocketmine\entity\Effect;
use pocketmine\entity\EffectInstance;
class GoldenApple extends Food{
@ -45,8 +46,8 @@ class GoldenApple extends Food{
public function getAdditionalEffects() : array{
return [
Effect::getEffect(Effect::REGENERATION)->setDuration(100)->setAmplifier(1),
Effect::getEffect(Effect::ABSORPTION)->setDuration(2400)
new EffectInstance(Effect::getEffect(Effect::REGENERATION), 100, 1),
new EffectInstance(Effect::getEffect(Effect::ABSORPTION), 2400)
];
}
}

View File

@ -24,6 +24,7 @@ declare(strict_types=1);
namespace pocketmine\item;
use pocketmine\entity\Effect;
use pocketmine\entity\EffectInstance;
class GoldenAppleEnchanted extends GoldenApple{
@ -33,10 +34,10 @@ class GoldenAppleEnchanted extends GoldenApple{
public function getAdditionalEffects() : array{
return [
Effect::getEffect(Effect::REGENERATION)->setDuration(600)->setAmplifier(4),
Effect::getEffect(Effect::ABSORPTION)->setDuration(2400)->setAmplifier(3),
Effect::getEffect(Effect::DAMAGE_RESISTANCE)->setDuration(6000),
Effect::getEffect(Effect::FIRE_RESISTANCE)->setDuration(6000),
new EffectInstance(Effect::getEffect(Effect::REGENERATION), 600, 4),
new EffectInstance(Effect::getEffect(Effect::ABSORPTION), 2400, 3),
new EffectInstance(Effect::getEffect(Effect::RESISTANCE), 6000),
new EffectInstance(Effect::getEffect(Effect::FIRE_RESISTANCE), 6000)
];
}
}

View File

@ -24,6 +24,7 @@ declare(strict_types=1);
namespace pocketmine\item;
use pocketmine\entity\Effect;
use pocketmine\entity\EffectInstance;
use pocketmine\entity\Living;
class Potion extends Item implements Consumable{
@ -70,7 +71,7 @@ class Potion extends Item implements Consumable{
* Returns a list of effects applied by potions with the specified ID.
*
* @param int $id
* @return Effect[]
* @return EffectInstance[]
*
* @throws \InvalidArgumentException if the potion type is unknown
*/
@ -84,131 +85,131 @@ class Potion extends Item implements Consumable{
return [];
case self::NIGHT_VISION:
return [
Effect::getEffect(Effect::NIGHT_VISION)->setDuration(3600)
new EffectInstance(Effect::getEffect(Effect::NIGHT_VISION), 3600)
];
case self::LONG_NIGHT_VISION:
return [
Effect::getEffect(Effect::NIGHT_VISION)->setDuration(9600)
new EffectInstance(Effect::getEffect(Effect::NIGHT_VISION), 9600)
];
case self::INVISIBILITY:
return [
Effect::getEffect(Effect::INVISIBILITY)->setDuration(3600)
new EffectInstance(Effect::getEffect(Effect::INVISIBILITY), 3600)
];
case self::LONG_INVISIBILITY:
return [
Effect::getEffect(Effect::INVISIBILITY)->setDuration(9600)
new EffectInstance(Effect::getEffect(Effect::INVISIBILITY), 9600)
];
case self::LEAPING:
return [
Effect::getEffect(Effect::JUMP_BOOST)->setDuration(3600)
new EffectInstance(Effect::getEffect(Effect::JUMP_BOOST), 3600)
];
case self::LONG_LEAPING:
return [
Effect::getEffect(Effect::JUMP_BOOST)->setDuration(9600)
new EffectInstance(Effect::getEffect(Effect::JUMP_BOOST), 9600)
];
case self::STRONG_LEAPING:
return [
Effect::getEffect(Effect::JUMP_BOOST)->setDuration(1800)->setAmplifier(1)
new EffectInstance(Effect::getEffect(Effect::JUMP_BOOST), 1800, 1)
];
case self::FIRE_RESISTANCE:
return [
Effect::getEffect(Effect::FIRE_RESISTANCE)->setDuration(3600)
new EffectInstance(Effect::getEffect(Effect::FIRE_RESISTANCE), 3600)
];
case self::LONG_FIRE_RESISTANCE:
return [
Effect::getEffect(Effect::FIRE_RESISTANCE)->setDuration(9600)
new EffectInstance(Effect::getEffect(Effect::FIRE_RESISTANCE), 9600)
];
case self::SWIFTNESS:
return [
Effect::getEffect(Effect::SPEED)->setDuration(3600)
new EffectInstance(Effect::getEffect(Effect::SPEED), 3600)
];
case self::LONG_SWIFTNESS:
return [
Effect::getEffect(Effect::SPEED)->setDuration(9600)
new EffectInstance(Effect::getEffect(Effect::SPEED), 9600)
];
case self::STRONG_SWIFTNESS:
return [
Effect::getEffect(Effect::SPEED)->setDuration(1800)->setAmplifier(1)
new EffectInstance(Effect::getEffect(Effect::SPEED), 1800, 1)
];
case self::SLOWNESS:
return [
Effect::getEffect(Effect::SLOWNESS)->setDuration(1800)
new EffectInstance(Effect::getEffect(Effect::SLOWNESS), 1800)
];
case self::LONG_SLOWNESS:
return [
Effect::getEffect(Effect::SLOWNESS)->setDuration(4800)
new EffectInstance(Effect::getEffect(Effect::SLOWNESS), 4800)
];
case self::WATER_BREATHING:
return [
Effect::getEffect(Effect::WATER_BREATHING)->setDuration(3600)
new EffectInstance(Effect::getEffect(Effect::WATER_BREATHING), 3600)
];
case self::LONG_WATER_BREATHING:
return [
Effect::getEffect(Effect::WATER_BREATHING)->setDuration(9600)
new EffectInstance(Effect::getEffect(Effect::WATER_BREATHING), 9600)
];
case self::HEALING:
return [
Effect::getEffect(Effect::INSTANT_HEALTH)
new EffectInstance(Effect::getEffect(Effect::INSTANT_HEALTH))
];
case self::STRONG_HEALING:
return [
Effect::getEffect(Effect::INSTANT_HEALTH)->setAmplifier(1)
new EffectInstance(Effect::getEffect(Effect::INSTANT_HEALTH), null, 1)
];
case self::HARMING:
return [
Effect::getEffect(Effect::INSTANT_DAMAGE)
new EffectInstance(Effect::getEffect(Effect::INSTANT_DAMAGE))
];
case self::STRONG_HARMING:
return [
Effect::getEffect(Effect::INSTANT_DAMAGE)->setAmplifier(1)
new EffectInstance(Effect::getEffect(Effect::INSTANT_DAMAGE), null, 1)
];
case self::POISON:
return [
Effect::getEffect(Effect::POISON)->setDuration(900)
new EffectInstance(Effect::getEffect(Effect::POISON), 900)
];
case self::LONG_POISON:
return [
Effect::getEffect(Effect::POISON)->setDuration(2400)
new EffectInstance(Effect::getEffect(Effect::POISON), 2400)
];
case self::STRONG_POISON:
return [
Effect::getEffect(Effect::POISON)->setDuration(440)->setAmplifier(1)
new EffectInstance(Effect::getEffect(Effect::POISON), 440, 1)
];
case self::REGENERATION:
return [
Effect::getEffect(Effect::REGENERATION)->setDuration(900)
new EffectInstance(Effect::getEffect(Effect::REGENERATION), 900)
];
case self::LONG_REGENERATION:
return [
Effect::getEffect(Effect::REGENERATION)->setDuration(2400)
new EffectInstance(Effect::getEffect(Effect::REGENERATION), 2400)
];
case self::STRONG_REGENERATION:
return [
Effect::getEffect(Effect::REGENERATION)->setDuration(440)->setAmplifier(1)
new EffectInstance(Effect::getEffect(Effect::REGENERATION), 440, 1)
];
case self::STRENGTH:
return [
Effect::getEffect(Effect::STRENGTH)->setDuration(3600)
new EffectInstance(Effect::getEffect(Effect::STRENGTH), 3600)
];
case self::LONG_STRENGTH:
return [
Effect::getEffect(Effect::STRENGTH)->setDuration(9600)
new EffectInstance(Effect::getEffect(Effect::STRENGTH), 9600)
];
case self::STRONG_STRENGTH:
return [
Effect::getEffect(Effect::STRENGTH)->setDuration(1800)->setAmplifier(1)
new EffectInstance(Effect::getEffect(Effect::STRENGTH), 1800, 1)
];
case self::WEAKNESS:
return [
Effect::getEffect(Effect::WEAKNESS)->setDuration(1800)
new EffectInstance(Effect::getEffect(Effect::WEAKNESS), 1800)
];
case self::LONG_WEAKNESS:
return [
Effect::getEffect(Effect::WEAKNESS)->setDuration(4800)
new EffectInstance(Effect::getEffect(Effect::WEAKNESS), 4800)
];
case self::WITHER:
return [
Effect::getEffect(Effect::WITHER)->setDuration(800)->setAmplifier(1)
new EffectInstance(Effect::getEffect(Effect::WITHER), 800, 1)
];
}

View File

@ -24,6 +24,7 @@ declare(strict_types=1);
namespace pocketmine\item;
use pocketmine\entity\Effect;
use pocketmine\entity\EffectInstance;
class RawChicken extends Food{
public function __construct(int $meta = 0){
@ -39,7 +40,7 @@ class RawChicken extends Food{
}
public function getAdditionalEffects() : array{
return mt_rand(0, 9) < 3 ? [Effect::getEffect(Effect::HUNGER)->setDuration(600)] : [];
return mt_rand(0, 9) < 3 ? [new EffectInstance(Effect::getEffect(Effect::HUNGER), 600)] : [];
}
}

View File

@ -24,6 +24,7 @@ declare(strict_types=1);
namespace pocketmine\item;
use pocketmine\entity\Effect;
use pocketmine\entity\EffectInstance;
class RottenFlesh extends Food{
@ -42,7 +43,7 @@ class RottenFlesh extends Food{
public function getAdditionalEffects() : array{
if(lcg_value() <= 0.8){
return [
Effect::getEffect(Effect::HUNGER)->setDuration(600)
new EffectInstance(Effect::getEffect(Effect::HUNGER), 600)
];
}

View File

@ -24,6 +24,7 @@ declare(strict_types=1);
namespace pocketmine\item;
use pocketmine\entity\Effect;
use pocketmine\entity\EffectInstance;
class SpiderEye extends Food{
public function __construct(int $meta = 0){
@ -39,6 +40,6 @@ class SpiderEye extends Food{
}
public function getAdditionalEffects() : array{
return [Effect::getEffect(Effect::POISON)->setDuration(80)];
return [new EffectInstance(Effect::getEffect(Effect::POISON), 80)];
}
}