mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-07 10:22:56 +00:00
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:
@ -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;
|
||||
|
||||
|
@ -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)
|
||||
] : [];
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -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)] : [];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -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)];
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user