Merge branch 'next-minor'

This commit is contained in:
Dylan K. Taylor 2020-03-10 13:05:37 +00:00
commit ca909ebc1d
14 changed files with 53 additions and 36 deletions

10
composer.lock generated
View File

@ -636,16 +636,16 @@
},
{
"name": "phpstan/phpstan",
"version": "0.12.11",
"version": "0.12.14",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
"reference": "ca5f2b7cf81c6d8fba74f9576970399c5817e03b"
"reference": "37bdd26a80235d0f9045b49f4151102b7831cbe2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/ca5f2b7cf81c6d8fba74f9576970399c5817e03b",
"reference": "ca5f2b7cf81c6d8fba74f9576970399c5817e03b",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/37bdd26a80235d0f9045b49f4151102b7831cbe2",
"reference": "37bdd26a80235d0f9045b49f4151102b7831cbe2",
"shasum": ""
},
"require": {
@ -671,7 +671,7 @@
"MIT"
],
"description": "PHPStan - PHP Static Analysis Tool",
"time": "2020-02-16T14:00:29+00:00"
"time": "2020-03-02T22:29:43+00:00"
},
{
"name": "phpstan/phpstan-phpunit",

View File

@ -23,6 +23,10 @@ declare(strict_types=1);
namespace pocketmine;
use function define;
use function defined;
use function dirname;
// composer autoload doesn't use require_once and also pthreads can inherit things
if(defined('pocketmine\_CORE_CONSTANTS_INCLUDED')){
return;

View File

@ -19,6 +19,8 @@
*
*/
declare(strict_types=1);
// composer autoload doesn't use require_once and also pthreads can inherit things
if(defined('pocketmine\_GLOBAL_CONSTANTS_INCLUDED')){
return;

View File

@ -23,6 +23,8 @@ declare(strict_types=1);
namespace pocketmine;
use function defined;
// composer autoload doesn't use require_once and also pthreads can inherit things
// TODO: drop this file and use a final class with constants
if(defined('pocketmine\_VERSION_INFO_INCLUDED')){

View File

@ -43,7 +43,7 @@ class Effect{
/**
* @param int $id Effect ID as per Minecraft PE
* @param string $name Translation key used for effect name
* @param Color $color
* @param Color $color Color of bubbles given by this effect
* @param bool $isBad Whether the effect is harmful
* @param bool $hasBubbles Whether the effect has potion bubbles. Some do not (e.g. Instant Damage has its own particles instead of bubbles)
*/

View File

@ -39,14 +39,10 @@ class ExperienceOrb extends Entity{
public const TAG_VALUE_PC = "Value"; //short
public const TAG_VALUE_PE = "experience value"; //int (WTF?)
/**
* Max distance an orb will follow a player across.
*/
/** Max distance an orb will follow a player across. */
public const MAX_TARGET_DISTANCE = 8.0;
/**
* Split sizes used for dropping experience orbs.
*/
/** Split sizes used for dropping experience orbs. */
public const ORB_SPLIT_SIZES = [2477, 1237, 617, 307, 149, 73, 37, 17, 7, 3, 1]; //This is indexed biggest to smallest so that we can return as soon as we found the biggest value.
/**

View File

@ -77,9 +77,7 @@ class AvailableCommandsPacket extends DataPacket implements ClientboundPacket{
*/
public const ARG_FLAG_ENUM = 0x200000;
/**
* This is used for /xp <level: int>L. It can only be applied to integer parameters.
*/
/** This is used for /xp <level: int>L. It can only be applied to integer parameters. */
public const ARG_FLAG_POSTFIX = 0x1000000;
public const HARDCODED_ENUM_NAMES = [

View File

@ -40,17 +40,11 @@ final class ProtocolInfo{
* This file is generated automatically, do not edit it manually.
*/
/**
* Actual Minecraft: PE protocol version
*/
/** Actual Minecraft: PE protocol version */
public const CURRENT_PROTOCOL = 389;
/**
* Current Minecraft PE version reported by the server. This is usually the earliest currently supported version.
*/
/** Current Minecraft PE version reported by the server. This is usually the earliest currently supported version. */
public const MINECRAFT_VERSION = 'v1.14.0';
/**
* Version number sent to clients in ping responses.
*/
/** Version number sent to clients in ping responses. */
public const MINECRAFT_VERSION_NETWORK = '1.14.0';
public const LOGIN_PACKET = 0x01;

View File

@ -1601,7 +1601,7 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
$item = $this->inventory->getItemInHand();
$oldItem = clone $item;
if($this->getWorld()->useBreakOn($pos, $item, $this, true)){
if($this->hasFiniteResources() and !$item->equalsExact($oldItem)){
if($this->hasFiniteResources() and !$item->equalsExact($oldItem) and $oldItem->equalsExact($this->inventory->getItemInHand())){
$this->inventory->setItemInHand($item);
}
$this->hungerManager->exhaust(0.025, PlayerExhaustEvent::CAUSE_MINING);
@ -1625,7 +1625,7 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
$item = $this->inventory->getItemInHand(); //this is a copy of the real item
$oldItem = clone $item;
if($this->getWorld()->useItemOn($pos, $item, $face, $clickOffset, $this, true)){
if($this->hasFiniteResources() and !$item->equalsExact($oldItem)){
if($this->hasFiniteResources() and !$item->equalsExact($oldItem) and $oldItem->equalsExact($this->inventory->getItemInHand())){
$this->inventory->setItemInHand($item);
}
return true;
@ -1694,7 +1694,7 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
if($this->isAlive()){
//reactive damage like thorns might cause us to be killed by attacking another mob, which
//would mean we'd already have dropped the inventory by the time we reached here
if($heldItem->onAttackEntity($entity) and $this->hasFiniteResources()){ //always fire the hook, even if we are survival
if($heldItem->onAttackEntity($entity) and $this->hasFiniteResources() and $heldItem->equalsExact($this->inventory->getItemInHand())){ //always fire the hook, even if we are survival
$this->inventory->setItemInHand($heldItem);
}

View File

@ -53,6 +53,8 @@ class PluginDescription{
private $api;
/** @var int[] */
private $compatibleMcpeProtocols = [];
/** @var string[] */
private $compatibleOperatingSystems = [];
/**
* @var string[][]
* @phpstan-var array<string, list<mixed>>
@ -112,6 +114,7 @@ class PluginDescription{
$this->api = array_map("\strval", (array) ($plugin["api"] ?? []));
$this->compatibleMcpeProtocols = array_map("\intval", (array) ($plugin["mcpe-protocol"] ?? []));
$this->compatibleOperatingSystems = array_map("\strval", (array) ($plugin["os"] ?? []));
if(isset($plugin["commands"]) and is_array($plugin["commands"])){
$this->commands = $plugin["commands"];
@ -185,6 +188,13 @@ class PluginDescription{
return $this->compatibleMcpeProtocols;
}
/**
* @return string[]
*/
public function getCompatibleOperatingSystems() : array{
return $this->compatibleOperatingSystems;
}
/**
* @return string[]
*/

View File

@ -46,6 +46,7 @@ use function explode;
use function file_exists;
use function get_class;
use function implode;
use function in_array;
use function is_a;
use function is_array;
use function is_dir;
@ -251,6 +252,14 @@ class PluginManager{
continue;
}
if(count($description->getCompatibleOperatingSystems()) > 0 and !in_array(Utils::getOS(), $description->getCompatibleOperatingSystems(), true)) {
$this->server->getLogger()->error($this->server->getLanguage()->translateString("pocketmine.plugin.loadError", [
$name,
$this->server->getLanguage()->translateString("%pocketmine.plugin.incompatibleOS", [implode(", ", $description->getCompatibleOperatingSystems())])
]));
continue;
}
if(count($pluginMcpeProtocols = $description->getCompatibleMcpeProtocols()) > 0){
$serverMcpeProtocols = [ProtocolInfo::CURRENT_PROTOCOL];
if(count(array_intersect($pluginMcpeProtocols, $serverMcpeProtocols)) === 0){

View File

@ -22,6 +22,7 @@
declare(strict_types=1);
namespace pocketmine\thread;
use const PTHREADS_INHERIT_ALL;
/**
* This class must be extended by all custom threading classes
@ -29,7 +30,7 @@ namespace pocketmine\thread;
abstract class Thread extends \Thread{
use CommonThreadPartsTrait;
public function start(?int $options = \PTHREADS_INHERIT_ALL) : bool{
public function start(?int $options = PTHREADS_INHERIT_ALL) : bool{
//this is intentionally not traitified
ThreadManager::getInstance()->add($this);

View File

@ -22,6 +22,7 @@
declare(strict_types=1);
namespace pocketmine\thread;
use const PTHREADS_INHERIT_ALL;
/**
* This class must be extended by all custom threading classes
@ -29,7 +30,7 @@ namespace pocketmine\thread;
abstract class Worker extends \Worker{
use CommonThreadPartsTrait;
public function start(?int $options = \PTHREADS_INHERIT_ALL) : bool{
public function start(?int $options = PTHREADS_INHERIT_ALL) : bool{
//this is intentionally not traitified
ThreadManager::getInstance()->add($this);

View File

@ -159,7 +159,7 @@ class Chunk{
* Returns the internal ID of the blockstate at the given coordinates.
*
* @param int $x 0-15
* @param int $y
* @param int $y 0-255
* @param int $z 0-15
*
* @return int bitmap, (id << 4) | meta
@ -180,7 +180,7 @@ class Chunk{
* Returns the sky light level at the specified chunk block coordinates
*
* @param int $x 0-15
* @param int $y
* @param int $y 0-255
* @param int $z 0-15
*
* @return int 0-15
@ -193,7 +193,7 @@ class Chunk{
* Sets the sky light level at the specified chunk block coordinates
*
* @param int $x 0-15
* @param int $y
* @param int $y 0-255
* @param int $z 0-15
* @param int $level 0-15
*/
@ -211,7 +211,7 @@ class Chunk{
* Returns the block light level at the specified chunk block coordinates
*
* @param int $x 0-15
* @param int $y 0-15
* @param int $y 0-255
* @param int $z 0-15
*
* @return int 0-15
@ -224,7 +224,7 @@ class Chunk{
* Sets the block light level at the specified chunk block coordinates
*
* @param int $x 0-15
* @param int $y 0-15
* @param int $y 0-255
* @param int $z 0-15
* @param int $level 0-15
*/
@ -452,7 +452,7 @@ class Chunk{
* Returns the tile at the specified chunk block coordinates, or null if no tile exists.
*
* @param int $x 0-15
* @param int $y
* @param int $y 0-255
* @param int $z 0-15
*/
public function getTile(int $x, int $y, int $z) : ?Tile{
@ -630,7 +630,7 @@ class Chunk{
* Hashes the given chunk block coordinates into a single integer.
*
* @param int $x 0-15
* @param int $y
* @param int $y 0-255
* @param int $z 0-15
*/
public static function blockHash(int $x, int $y, int $z) : int{