diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..6fab79718 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,36 @@ +## Introduction + + +### Relevant issues + + + +## Changes +### API changes + + +### Behavioural changes + + +## Backwards compatibility + + +## Follow-up + + + +## Tests + diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 6cf12c859..b4886852e 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -1335,7 +1335,7 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade public function sendSettings(){ $pk = new AdventureSettingsPacket(); $pk->flags = 0; - $pk->worldImmutable = $this->isAdventure(); + $pk->worldImmutable = $this->isSpectator(); $pk->autoJump = $this->autoJump; $pk->allowFlight = $this->allowFlight; $pk->noClip = $this->isSpectator(); @@ -1582,6 +1582,15 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade $this->teleport($ev->getTo()); }else{ $this->level->addEntityMovement($this->x >> 4, $this->z >> 4, $this->getId(), $this->x, $this->y + $this->getEyeHeight(), $this->z, $this->yaw, $this->pitch, $this->yaw); + + $distance = $from->distance($to); + + //TODO: check swimming (adds 0.015 exhaustion in MCPE) + if($this->isSprinting()){ + $this->exhaust(0.1 * $distance, PlayerExhaustEvent::CAUSE_SPRINTING); + }else{ + $this->exhaust(0.01 * $distance, PlayerExhaustEvent::CAUSE_WALKING); + } } } } @@ -2693,9 +2702,13 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade $this->deadTicks = 0; $this->noDamageTicks = 60; + $this->removeAllEffects(); $this->setHealth($this->getMaxHealth()); - $this->removeAllEffects(); + foreach($this->attributeMap->getAll() as $attr){ + $attr->resetToDefault(); + } + $this->sendData($this); $this->sendSettings(); @@ -2706,6 +2719,7 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade $this->scheduleUpdate(); break; case PlayerActionPacket::ACTION_JUMP: + $this->jump(); return true; case PlayerActionPacket::ACTION_START_SPRINT: $ev = new PlayerToggleSprintEvent($this, true); @@ -3561,7 +3575,7 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade * @param string $reason Reason showed in console * @param bool $notify */ - public final function close($message = "", $reason = "generic reason", $notify = true){ + final public function close($message = "", $reason = "generic reason", $notify = true){ if($this->connected and !$this->closed){ if($notify and strlen((string) $reason) > 0){ $pk = new DisconnectPacket(); @@ -3704,6 +3718,17 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade return; } + parent::kill(); + + $pk = new RespawnPacket(); + $pos = $this->getSpawn(); + $pk->x = $pos->x; + $pk->y = $pos->y; + $pk->z = $pos->z; + $this->dataPacket($pk); + } + + protected function callDeathEvent(){ $message = "death.attack.generic"; $params = [ @@ -3813,10 +3838,9 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade break; default: + break; } - Entity::kill(); - $this->server->getPluginManager()->callEvent($ev = new PlayerDeathEvent($this, $this->getDrops(), new TranslationContainer($message, $params))); if(!$ev->getKeepInventory()){ @@ -3834,13 +3858,6 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade if($ev->getDeathMessage() != ""){ $this->server->broadcast($ev->getDeathMessage(), Server::BROADCAST_CHANNEL_USERS); } - - $pk = new RespawnPacket(); - $pos = $this->getSpawn(); - $pk->x = $pos->x; - $pk->y = $pos->y; - $pk->z = $pos->z; - $this->dataPacket($pk); } public function attack($damage, EntityDamageEvent $source){ diff --git a/src/pocketmine/command/Command.php b/src/pocketmine/command/Command.php index 07347c557..189a3b03b 100644 --- a/src/pocketmine/command/Command.php +++ b/src/pocketmine/command/Command.php @@ -132,7 +132,7 @@ abstract class Command{ * * @return mixed */ - public abstract function execute(CommandSender $sender, $commandLabel, array $args); + abstract public function execute(CommandSender $sender, $commandLabel, array $args); /** * @return string diff --git a/src/pocketmine/command/PluginCommand.php b/src/pocketmine/command/PluginCommand.php index 05c01fcc0..eb5fe1dc7 100644 --- a/src/pocketmine/command/PluginCommand.php +++ b/src/pocketmine/command/PluginCommand.php @@ -70,7 +70,7 @@ class PluginCommand extends Command implements PluginIdentifiableCommand{ * @param CommandExecutor $executor */ public function setExecutor(CommandExecutor $executor){ - $this->executor = ($executor != null) ? $executor : $this->owningPlugin; + $this->executor = $executor; } /** diff --git a/src/pocketmine/entity/Attribute.php b/src/pocketmine/entity/Attribute.php index be5a6cfae..c48534c63 100644 --- a/src/pocketmine/entity/Attribute.php +++ b/src/pocketmine/entity/Attribute.php @@ -165,6 +165,10 @@ class Attribute{ return $this; } + public function resetToDefault(){ + $this->setValue($this->getDefaultValue()); + } + public function getValue(){ return $this->currentValue; } diff --git a/src/pocketmine/entity/AttributeMap.php b/src/pocketmine/entity/AttributeMap.php index cdf821c52..b74492f08 100644 --- a/src/pocketmine/entity/AttributeMap.php +++ b/src/pocketmine/entity/AttributeMap.php @@ -38,6 +38,9 @@ class AttributeMap implements \ArrayAccess{ return $this->attributes[$id] ?? null; } + /** + * @return Attribute[] + */ public function getAll(): array{ return $this->attributes; } diff --git a/src/pocketmine/entity/Entity.php b/src/pocketmine/entity/Entity.php index d7f6e939a..cb6ff661e 100644 --- a/src/pocketmine/entity/Entity.php +++ b/src/pocketmine/entity/Entity.php @@ -373,6 +373,7 @@ abstract class Entity extends Location implements Metadatable{ $this->invulnerable = $this->namedtag["Invulnerable"] > 0 ? true : false; $this->attributeMap = new AttributeMap(); + $this->addAttributes(); $this->chunk->addEntity($this); $this->level->addEntity($this); @@ -710,8 +711,6 @@ abstract class Entity extends Location implements Metadatable{ $this->scheduleUpdate(); - $this->addAttributes(); - if(isset($this->namedtag->ActiveEffects)){ foreach($this->namedtag->ActiveEffects->getValue() as $e){ $amplifier = $e["Amplifier"] & 0xff; //0-255 only @@ -1179,7 +1178,7 @@ abstract class Entity extends Location implements Metadatable{ //return !($this instanceof Player); } - public final function scheduleUpdate(){ + final public function scheduleUpdate(){ $this->level->updateEntities[$this->id] = $this; } diff --git a/src/pocketmine/entity/Human.php b/src/pocketmine/entity/Human.php index 732dd23f8..5d8db656c 100644 --- a/src/pocketmine/entity/Human.php +++ b/src/pocketmine/entity/Human.php @@ -99,6 +99,15 @@ class Human extends Creature implements ProjectileSource, InventoryHolder{ $this->skinId = $skinId; } + public function jump(){ + parent::jump(); + if($this->isSprinting()){ + $this->exhaust(0.8, PlayerExhaustEvent::CAUSE_SPRINT_JUMPING); + }else{ + $this->exhaust(0.2, PlayerExhaustEvent::CAUSE_JUMPING); + } + } + public function getFood() : float{ return $this->attributeMap->getAttribute(Attribute::HUNGER)->getValue(); } @@ -355,31 +364,35 @@ class Human extends Creature implements ProjectileSource, InventoryHolder{ if($this->isAlive()){ $food = $this->getFood(); $health = $this->getHealth(); - if($food >= 18){ - $this->foodTickTimer++; - if($this->foodTickTimer >= 80 and $health < $this->getMaxHealth()){ - $this->heal(1, new EntityRegainHealthEvent($this, 1, EntityRegainHealthEvent::CAUSE_SATURATION)); - $this->exhaust(3.0, PlayerExhaustEvent::CAUSE_HEALTH_REGEN); - $this->foodTickTimer = 0; + $difficulty = $this->server->getDifficulty(); + $this->foodTickTimer++; + if($this->foodTickTimer >= 80){ + $this->foodTickTimer = 0; + } + + if($difficulty === 0 and $this->foodTickTimer % 10 === 0){ //Peaceful + if($food < 20){ + $this->addFood(1.0); } - }elseif($food === 0){ - $this->foodTickTimer++; - if($this->foodTickTimer >= 80){ - $diff = $this->server->getDifficulty(); - $can = false; - if($diff === 1){ - $can = $health > 10; - }elseif($diff === 2){ - $can = $health > 1; - }elseif($diff === 3){ - $can = true; + if($this->foodTickTimer % 20 === 0 and $health < $this->getMaxHealth()){ + $this->heal(1, new EntityRegainHealthEvent($this, 1, EntityRegainHealthEvent::CAUSE_SATURATION)); + } + } + + if($this->foodTickTimer === 0){ + if($food >= 18){ + if($health < $this->getMaxHealth()){ + $this->heal(1, new EntityRegainHealthEvent($this, 1, EntityRegainHealthEvent::CAUSE_SATURATION)); + $this->exhaust(3.0, PlayerExhaustEvent::CAUSE_HEALTH_REGEN); } - if($can){ + }elseif($food <= 0){ + if(($difficulty === 1 and $health > 10) or ($difficulty === 2 and $health > 1) or $difficulty === 3){ $this->attack(1, new EntityDamageEvent($this, EntityDamageEvent::CAUSE_STARVATION, 1)); } } } + if($food <= 6){ if($this->isSprinting()){ $this->setSprinting(false); diff --git a/src/pocketmine/entity/Living.php b/src/pocketmine/entity/Living.php index fbdac34e5..e45131d38 100644 --- a/src/pocketmine/entity/Living.php +++ b/src/pocketmine/entity/Living.php @@ -43,6 +43,8 @@ abstract class Living extends Entity implements Damageable{ protected $invisible = false; + protected $jumpVelocity = 0.42; + protected function initEntity(){ parent::initEntity(); @@ -68,7 +70,7 @@ abstract class Living extends Entity implements Damageable{ public function setHealth($amount){ $wasAlive = $this->isAlive(); parent::setHealth($amount); - $this->attributeMap->getAttribute(Attribute::HEALTH)->setValue($this->getHealth()); + $this->attributeMap->getAttribute(Attribute::HEALTH)->setValue($this->getHealth(), true); if($this->isAlive() and !$wasAlive){ $pk = new EntityEventPacket(); $pk->eid = $this->getId(); @@ -98,7 +100,7 @@ abstract class Living extends Entity implements Damageable{ $this->namedtag->Health = new ShortTag("Health", $this->getHealth()); } - public abstract function getName(); + abstract public function getName(); public function hasLineOfSight(Entity $entity){ //TODO: head height @@ -115,6 +117,23 @@ abstract class Living extends Entity implements Damageable{ $this->attackTime = 0; } + /** + * Returns the initial upwards velocity of a jumping entity in blocks/tick, including additional velocity due to effects. + * @return float + */ + public function getJumpVelocity() : float{ + return $this->jumpVelocity + ($this->hasEffect(Effect::JUMP) ? (($this->getEffect(Effect::JUMP)->getAmplifier() + 1) / 10) : 0); + } + + /** + * Called when the entity jumps from the ground. This method adds upwards velocity to the entity. + */ + public function jump(){ + if($this->onGround){ + $this->motionY = $this->getJumpVelocity(); //Y motion should already be 0 if we're jumping from the ground. + } + } + public function attack($damage, EntityDamageEvent $source){ if($this->attackTime > 0 or $this->noDamageTicks > 0){ $lastCause = $this->getLastDamageCause(); @@ -183,6 +202,10 @@ abstract class Living extends Entity implements Damageable{ return; } parent::kill(); + $this->callDeathEvent(); + } + + protected function callDeathEvent(){ $this->server->getPluginManager()->callEvent($ev = new EntityDeathEvent($this, $this->getDrops())); foreach($ev->getDrops() as $item){ $this->getLevel()->dropItem($this, $item); diff --git a/src/pocketmine/entity/Squid.php b/src/pocketmine/entity/Squid.php index becc8cfc2..50a398360 100644 --- a/src/pocketmine/entity/Squid.php +++ b/src/pocketmine/entity/Squid.php @@ -43,8 +43,8 @@ class Squid extends WaterAnimal implements Ageable{ private $switchDirectionTicker = 0; public function initEntity(){ + $this->setMaxHealth(10); parent::initEntity(); - $this->setMaxHealth(5); } public function getName(){ diff --git a/src/pocketmine/event/player/PlayerExhaustEvent.php b/src/pocketmine/event/player/PlayerExhaustEvent.php index 623b5fdf4..747988fb5 100644 --- a/src/pocketmine/event/player/PlayerExhaustEvent.php +++ b/src/pocketmine/event/player/PlayerExhaustEvent.php @@ -34,19 +34,21 @@ class PlayerExhaustEvent extends PlayerEvent implements Cancellable{ const CAUSE_HEALTH_REGEN = 4; const CAUSE_POTION = 5; const CAUSE_WALKING = 6; - const CAUSE_SNEAKING = 7; + const CAUSE_SPRINTING = 7; const CAUSE_SWIMMING = 8; - const CAUSE_JUMPING = 10; + const CAUSE_JUMPING = 9; + const CAUSE_SPRINT_JUMPING = 10; const CAUSE_CUSTOM = 11; - const CAUSE_FLAG_SPRINT = 0x10000; - /** @var float */ private $amount; + /** @var int */ + private $cause; public function __construct(Human $human, float $amount, int $cause){ $this->player = $human; $this->amount = $amount; + $this->cause = $cause; } /** @@ -63,4 +65,12 @@ class PlayerExhaustEvent extends PlayerEvent implements Cancellable{ public function setAmount(float $amount){ $this->amount = $amount; } + + /** + * Returns an int cause of the exhaustion - one of the constants at the top of this class. + * @return int + */ + public function getCause() : int{ + return $this->cause; + } } diff --git a/src/pocketmine/item/Item.php b/src/pocketmine/item/Item.php index 7cc94878c..2305a836c 100644 --- a/src/pocketmine/item/Item.php +++ b/src/pocketmine/item/Item.php @@ -685,7 +685,7 @@ class Item implements ItemIds, \JsonSerializable{ } public function setLore(array $lines){ - $tag = $this->getNamedTag(); + $tag = $this->getNamedTag() ?? new CompoundTag("", []); if(!isset($tag->display)){ $tag->display = new CompoundTag("display", []); } @@ -945,7 +945,7 @@ class Item implements ItemIds, \JsonSerializable{ * * @return bool */ - public final function equals(Item $item, bool $checkDamage = true, bool $checkCompound = true) : bool{ + final public function equals(Item $item, bool $checkDamage = true, bool $checkCompound = true) : bool{ if($this->id === $item->getId() and ($checkDamage === false or $this->getDamage() === $item->getDamage())){ if($checkCompound){ if($item->getCompoundTag() === $this->getCompoundTag()){ @@ -971,7 +971,7 @@ class Item implements ItemIds, \JsonSerializable{ * * @return bool */ - public final function deepEquals(Item $item, bool $checkDamage = true, bool $checkCompound = true) : bool{ + final public function deepEquals(Item $item, bool $checkDamage = true, bool $checkCompound = true) : bool{ return $this->equals($item, $checkDamage, $checkCompound); } diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 0abe8ff61..e3e00e723 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -1544,6 +1544,25 @@ class Level implements ChunkManager, Metadatable{ $ev->setCancelled(); } } + + if($player->isAdventure(true) and !$ev->isCancelled()){ + $tag = $item->getNamedTagEntry("CanDestroy"); + $canBreak = false; + if($tag instanceof ListTag){ + foreach($tag as $v){ + if($v instanceof StringTag){ + $entry = Item::fromString($v->getValue()); + if($entry->getId() > 0 and $entry->getBlock() !== null and $entry->getBlock()->getId() === $target->getId()){ + $canBreak = true; + break; + } + } + } + } + + $ev->setCancelled(!$canBreak); + } + $this->server->getPluginManager()->callEvent($ev); if($ev->isCancelled()){ return false; @@ -1589,24 +1608,6 @@ class Level implements ChunkManager, Metadatable{ } } - $tag = $item->getNamedTagEntry("CanDestroy"); - if($tag instanceof ListTag){ - $canBreak = false; - foreach($tag as $v){ - if($v instanceof StringTag){ - $entry = Item::fromString($v->getValue()); - if($entry->getId() > 0 and $entry->getBlock() !== null and $entry->getBlock()->getId() === $target->getId()){ - $canBreak = true; - break; - } - } - } - - if(!$canBreak){ - return false; - } - } - if($createParticles){ $this->addParticle(new DestroyBlockParticle($target->add(0.5, 0.5, 0.5), $target)); } @@ -1681,6 +1682,25 @@ class Level implements ChunkManager, Metadatable{ $ev->setCancelled(); } } + + if($player->isAdventure(true) and !$ev->isCancelled()){ + $canPlace = false; + $tag = $item->getNamedTagEntry("CanPlaceOn"); + if($tag instanceof ListTag){ + foreach($tag as $v){ + if($v instanceof StringTag){ + $entry = Item::fromString($v->getValue()); + if($entry->getId() > 0 and $entry->getBlock() !== null and $entry->getBlock()->getId() === $target->getId()){ + $canPlace = true; + break; + } + } + } + } + + $ev->setCancelled(!$canPlace); + } + $this->server->getPluginManager()->callEvent($ev); if(!$ev->isCancelled()){ $target->onUpdate(self::BLOCK_UPDATE_TOUCH); @@ -1743,24 +1763,6 @@ class Level implements ChunkManager, Metadatable{ } } - $tag = $item->getNamedTagEntry("CanPlaceOn"); - if($tag instanceof ListTag){ - $canPlace = false; - foreach($tag as $v){ - if($v instanceof StringTag){ - $entry = Item::fromString($v->getValue()); - if($entry->getId() > 0 and $entry->getBlock() !== null and $entry->getBlock()->getId() === $target->getId()){ - $canPlace = true; - break; - } - } - } - - if(!$canPlace){ - return false; - } - } - if($player !== null){ $ev = new BlockPlaceEvent($player, $hand, $block, $target, $item); diff --git a/src/pocketmine/level/format/io/region/Anvil.php b/src/pocketmine/level/format/io/region/Anvil.php index 9b48a2830..084126b5f 100644 --- a/src/pocketmine/level/format/io/region/Anvil.php +++ b/src/pocketmine/level/format/io/region/Anvil.php @@ -101,7 +101,7 @@ class Anvil extends McRegion{ public function nbtDeserialize(string $data){ $nbt = new NBT(NBT::BIG_ENDIAN); try{ - $nbt->readCompressed($data, ZLIB_ENCODING_DEFLATE); + $nbt->readCompressed($data); $chunk = $nbt->getData(); diff --git a/src/pocketmine/level/format/io/region/McRegion.php b/src/pocketmine/level/format/io/region/McRegion.php index 07563c8ab..bf342a705 100644 --- a/src/pocketmine/level/format/io/region/McRegion.php +++ b/src/pocketmine/level/format/io/region/McRegion.php @@ -126,7 +126,7 @@ class McRegion extends BaseLevelProvider{ public function nbtDeserialize(string $data){ $nbt = new NBT(NBT::BIG_ENDIAN); try{ - $nbt->readCompressed($data, ZLIB_ENCODING_DEFLATE); + $nbt->readCompressed($data); $chunk = $nbt->getData(); diff --git a/src/pocketmine/level/format/io/region/PMAnvil.php b/src/pocketmine/level/format/io/region/PMAnvil.php index cb28cb17f..9ec30c203 100644 --- a/src/pocketmine/level/format/io/region/PMAnvil.php +++ b/src/pocketmine/level/format/io/region/PMAnvil.php @@ -104,7 +104,7 @@ class PMAnvil extends Anvil{ public function nbtDeserialize(string $data){ $nbt = new NBT(NBT::BIG_ENDIAN); try{ - $nbt->readCompressed($data, ZLIB_ENCODING_DEFLATE); + $nbt->readCompressed($data); $chunk = $nbt->getData(); diff --git a/src/pocketmine/level/generator/Generator.php b/src/pocketmine/level/generator/Generator.php index 401890484..c29c5d5cb 100644 --- a/src/pocketmine/level/generator/Generator.php +++ b/src/pocketmine/level/generator/Generator.php @@ -233,17 +233,17 @@ abstract class Generator{ return $noiseArray; } - public abstract function __construct(array $settings = []); + abstract public function __construct(array $settings = []); - public abstract function init(ChunkManager $level, Random $random); + abstract public function init(ChunkManager $level, Random $random); - public abstract function generateChunk($chunkX, $chunkZ); + abstract public function generateChunk($chunkX, $chunkZ); - public abstract function populateChunk($chunkX, $chunkZ); + abstract public function populateChunk($chunkX, $chunkZ); - public abstract function getSettings(); + abstract public function getSettings(); - public abstract function getName(); + abstract public function getName(); - public abstract function getSpawn(); + abstract public function getSpawn(); } diff --git a/src/pocketmine/level/generator/biome/Biome.php b/src/pocketmine/level/generator/biome/Biome.php index 17ee242e0..599de0334 100644 --- a/src/pocketmine/level/generator/biome/Biome.php +++ b/src/pocketmine/level/generator/biome/Biome.php @@ -137,7 +137,7 @@ abstract class Biome{ return $this->id; } - public abstract function getName(); + abstract public function getName(); public function getMinElevation(){ return $this->minElevation; diff --git a/src/pocketmine/level/generator/populator/Populator.php b/src/pocketmine/level/generator/populator/Populator.php index 7eab9fde8..e089a0098 100644 --- a/src/pocketmine/level/generator/populator/Populator.php +++ b/src/pocketmine/level/generator/populator/Populator.php @@ -28,5 +28,5 @@ use pocketmine\level\ChunkManager; use pocketmine\utils\Random; abstract class Populator{ - public abstract function populate(ChunkManager $level, $chunkX, $chunkZ, Random $random); + abstract public function populate(ChunkManager $level, $chunkX, $chunkZ, Random $random); } \ No newline at end of file diff --git a/src/pocketmine/metadata/MetadataStore.php b/src/pocketmine/metadata/MetadataStore.php index 586b648af..9cb66dacd 100644 --- a/src/pocketmine/metadata/MetadataStore.php +++ b/src/pocketmine/metadata/MetadataStore.php @@ -136,5 +136,5 @@ abstract class MetadataStore{ * * @throws \InvalidArgumentException */ - public abstract function disambiguate(Metadatable $subject, $metadataKey); + abstract public function disambiguate(Metadatable $subject, $metadataKey); } \ No newline at end of file diff --git a/src/pocketmine/metadata/MetadataValue.php b/src/pocketmine/metadata/MetadataValue.php index 4b927eaaf..4834003fc 100644 --- a/src/pocketmine/metadata/MetadataValue.php +++ b/src/pocketmine/metadata/MetadataValue.php @@ -43,11 +43,11 @@ abstract class MetadataValue{ * * @return mixed */ - public abstract function value(); + abstract public function value(); /** * Invalidates this metadata item, forcing it to recompute when next * accessed. */ - public abstract function invalidate(); + abstract public function invalidate(); } \ No newline at end of file diff --git a/src/pocketmine/nbt/NBT.php b/src/pocketmine/nbt/NBT.php index 5fa2fdd3f..f929f58e3 100644 --- a/src/pocketmine/nbt/NBT.php +++ b/src/pocketmine/nbt/NBT.php @@ -423,11 +423,11 @@ class NBT{ $this->buffer = ""; } - public function readCompressed($buffer, $compression = ZLIB_ENCODING_GZIP){ + public function readCompressed($buffer){ $this->read(zlib_decode($buffer)); } - public function readNetworkCompressed($buffer, $compression = ZLIB_ENCODING_GZIP){ + public function readNetworkCompressed($buffer){ $this->read(zlib_decode($buffer), false, true); } diff --git a/src/pocketmine/nbt/tag/Tag.php b/src/pocketmine/nbt/tag/Tag.php index 9359a5b2f..fa2d395c5 100644 --- a/src/pocketmine/nbt/tag/Tag.php +++ b/src/pocketmine/nbt/tag/Tag.php @@ -34,7 +34,7 @@ abstract class Tag extends \stdClass{ return $this->value; } - public abstract function getType(); + abstract public function getType(); public function setValue($value){ $this->value = $value; diff --git a/src/pocketmine/plugin/PluginBase.php b/src/pocketmine/plugin/PluginBase.php index 1a21698a0..d998ea5bb 100644 --- a/src/pocketmine/plugin/PluginBase.php +++ b/src/pocketmine/plugin/PluginBase.php @@ -72,14 +72,14 @@ abstract class PluginBase implements Plugin{ /** * @return bool */ - public final function isEnabled(){ + final public function isEnabled(){ return $this->isEnabled === true; } /** * @param bool $boolean */ - public final function setEnabled($boolean = true){ + final public function setEnabled($boolean = true){ if($this->isEnabled !== $boolean){ $this->isEnabled = $boolean; if($this->isEnabled === true){ @@ -93,19 +93,19 @@ abstract class PluginBase implements Plugin{ /** * @return bool */ - public final function isDisabled(){ + final public function isDisabled(){ return $this->isEnabled === false; } - public final function getDataFolder(){ + final public function getDataFolder(){ return $this->dataFolder; } - public final function getDescription(){ + final public function getDescription(){ return $this->description; } - public final function init(PluginLoader $loader, Server $server, PluginDescription $description, $dataFolder, $file){ + final public function init(PluginLoader $loader, Server $server, PluginDescription $description, $dataFolder, $file){ if($this->initialized === false){ $this->initialized = true; $this->loader = $loader; @@ -128,7 +128,7 @@ abstract class PluginBase implements Plugin{ /** * @return bool */ - public final function isInitialized(){ + final public function isInitialized(){ return $this->initialized; } @@ -267,21 +267,21 @@ abstract class PluginBase implements Plugin{ /** * @return Server */ - public final function getServer(){ + final public function getServer(){ return $this->server; } /** * @return string */ - public final function getName(){ + final public function getName(){ return $this->description->getName(); } /** * @return string */ - public final function getFullName(){ + final public function getFullName(){ return $this->description->getFullName(); } diff --git a/src/pocketmine/scheduler/AsyncTask.php b/src/pocketmine/scheduler/AsyncTask.php index 455d2e1f4..68491511c 100644 --- a/src/pocketmine/scheduler/AsyncTask.php +++ b/src/pocketmine/scheduler/AsyncTask.php @@ -161,7 +161,7 @@ abstract class AsyncTask extends Collectable{ * * @return void */ - public abstract function onRun(); + abstract public function onRun(); /** * Actions to execute when completed (on main thread) diff --git a/src/pocketmine/scheduler/PluginTask.php b/src/pocketmine/scheduler/PluginTask.php index cacb732e3..645720dbf 100644 --- a/src/pocketmine/scheduler/PluginTask.php +++ b/src/pocketmine/scheduler/PluginTask.php @@ -41,7 +41,7 @@ abstract class PluginTask extends Task{ /** * @return Plugin */ - public final function getOwner(){ + final public function getOwner(){ return $this->owner; } diff --git a/src/pocketmine/scheduler/Task.php b/src/pocketmine/scheduler/Task.php index cbf82a74a..fc0681914 100644 --- a/src/pocketmine/scheduler/Task.php +++ b/src/pocketmine/scheduler/Task.php @@ -32,14 +32,14 @@ abstract class Task{ /** * @return TaskHandler */ - public final function getHandler(){ + final public function getHandler(){ return $this->taskHandler; } /** * @return int */ - public final function getTaskId(){ + final public function getTaskId(){ if($this->taskHandler !== null){ return $this->taskHandler->getTaskId(); } @@ -50,7 +50,7 @@ abstract class Task{ /** * @param TaskHandler $taskHandler */ - public final function setHandler($taskHandler){ + final public function setHandler($taskHandler){ if($this->taskHandler === null or $taskHandler === null){ $this->taskHandler = $taskHandler; } @@ -63,7 +63,7 @@ abstract class Task{ * * @return void */ - public abstract function onRun($currentTick); + abstract public function onRun($currentTick); /** * Actions to execute if the Task is cancelled diff --git a/src/pocketmine/tile/Spawnable.php b/src/pocketmine/tile/Spawnable.php index 33048b00f..0d85b7ea3 100644 --- a/src/pocketmine/tile/Spawnable.php +++ b/src/pocketmine/tile/Spawnable.php @@ -75,7 +75,7 @@ abstract class Spawnable extends Tile{ /** * @return CompoundTag */ - public abstract function getSpawnCompound(); + abstract public function getSpawnCompound(); /** * Called when a player updates a block entity's NBT data diff --git a/src/pocketmine/tile/Tile.php b/src/pocketmine/tile/Tile.php index 6f81bbad3..a66c5f512 100644 --- a/src/pocketmine/tile/Tile.php +++ b/src/pocketmine/tile/Tile.php @@ -170,7 +170,7 @@ abstract class Tile extends Position{ return false; } - public final function scheduleUpdate(){ + final public function scheduleUpdate(){ $this->level->updateTiles[$this->id] = $this; }