mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-07-24 20:04:28 +00:00
Human: do not mutate parameter variables in setXpAndProgress()
this caused a mystery that took 3 entire years to debug.
This commit is contained in:
parent
06eaf9f273
commit
911ad344c9
@ -447,24 +447,26 @@ class Human extends Creature implements ProjectileSource, InventoryHolder{
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected function setXpAndProgress(?int $level, ?float $progress) : bool{
|
protected function setXpAndProgress(?int $level, ?float $progress) : bool{
|
||||||
|
$newLevel = $level;
|
||||||
|
$newProgress = $progress;
|
||||||
if(!$this->justCreated){
|
if(!$this->justCreated){
|
||||||
$ev = new PlayerExperienceChangeEvent($this, $this->getXpLevel(), $this->getXpProgress(), $level, $progress);
|
$ev = new PlayerExperienceChangeEvent($this, $this->getXpLevel(), $this->getXpProgress(), $newLevel, $newProgress);
|
||||||
$ev->call();
|
$ev->call();
|
||||||
|
|
||||||
if($ev->isCancelled()){
|
if($ev->isCancelled()){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$level = $ev->getNewLevel();
|
$newLevel = $ev->getNewLevel();
|
||||||
$progress = $ev->getNewProgress();
|
$newProgress = $ev->getNewProgress();
|
||||||
}
|
}
|
||||||
|
|
||||||
if($level !== null){
|
if($newLevel !== null){
|
||||||
$this->getAttributeMap()->getAttribute(Attribute::EXPERIENCE_LEVEL)->setValue($level);
|
$this->getAttributeMap()->getAttribute(Attribute::EXPERIENCE_LEVEL)->setValue($newLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
if($progress !== null){
|
if($newProgress !== null){
|
||||||
$this->getAttributeMap()->getAttribute(Attribute::EXPERIENCE)->setValue($progress);
|
$this->getAttributeMap()->getAttribute(Attribute::EXPERIENCE)->setValue($newProgress);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user