Compare commits

..

58 Commits

Author SHA1 Message Date
39c9387efe Implement handlers stuck detection system 2025-08-05 15:37:24 +02:00
31275ba681 Merge remote-tracking branch 'upstream/minor-next' into feat/async-events 2025-07-29 14:12:40 +02:00
a0d69a9fb8 github web editor don't fuck up indentation, challenge impossible 2024-11-29 14:13:25 +00:00
e8ec81d123 fix PHPStan error 2024-11-29 14:08:06 +00:00
866d473553 Merge branch 'minor-next' into feat/async-events 2024-11-29 13:49:20 +00:00
d9080f182c we don't need a fake server instance outside of setUp() in these tests 2024-11-20 16:44:00 +00:00
d9f5634262 CS 2024-11-20 16:37:49 +00:00
406e2c6c57 Convert integration tests to unit tests
this required mocking to get around #6524. Longer term we should make improvements to avoid the need for mocking here.
2024-11-20 16:35:20 +00:00
4451770ca3 Merge branch 'minor-next' into feat/async-events 2024-11-20 15:43:17 +00:00
d2d663b1c9 Simplify handler sorting 2024-11-14 13:11:38 +00:00
117026cb83 Merge branch 'minor-next' into feat/async-events 2024-11-13 23:06:05 +00:00
a7a1077676 CONTRIBUTING: changing an event from sync to async or vice versa is a BC break 2024-11-13 23:00:49 +00:00
0a56cf877b Remove unused class 2024-11-13 22:58:29 +00:00
11fdf79a7c ... 2024-11-13 22:55:08 +00:00
edae9f26e4 Reduce number of classes 2024-11-13 22:23:43 +00:00
667656b1c6 Split AsyncHandlerListManager
this allows further code deduplication at the expense of needing 2 calls to unregister all handlers
2024-11-13 22:08:28 +00:00
972a9fb201 PluginManager: ensure that handler candidates of async events with wrong return types don't attempt to register as sync events
this will cause other, more confusing errors to be thrown.

to be honest, I'm not sure if enforcing the return type here is even necessary (or desirable).
2024-11-13 21:30:24 +00:00
ac1cf73f8e Reduce code duplication 2024-11-13 21:09:52 +00:00
96989d1dc4 cleanup 2024-11-13 20:44:35 +00:00
8aed5d6b27 Handler inheritance is now working
this code should also perform somewhat better
2024-11-13 20:35:14 +00:00
fa796535ff ah hello my old friend, impossible-generics.neon
propagating generics all the way through the likes of HandlerList etc is more trouble than it's worth.
2024-11-13 19:09:52 +00:00
32b1d6c0c2 Fixed test code
the test still doesn't pass, but at least it's actually testing the problem now...
2024-11-13 18:52:56 +00:00
6f40c6fc1d CS 2024-11-13 18:49:58 +00:00
a6a44bde90 Fix doc comments 2024-11-13 18:49:32 +00:00
409066c8f5 AsyncEvent: make the code easier to make sense of 2024-11-13 18:49:15 +00:00
cb2fadeb26 Fixed bug in concurrency integration test 2024-11-13 18:47:46 +00:00
a14afb4bb5 Add integration tests
most of these are failing - needs to be investigated
2024-11-13 18:39:14 +00:00
db88e543fa Fix PHPStan error 2024-11-13 16:04:27 +00:00
c426677841 optimization 2024-11-13 16:03:10 +00:00
17ae932d31 HandlerListManager: added getter 2024-11-13 15:36:51 +00:00
8f48fe4856 Fully separate hierarchies for sync & async events
there's no way to combine these without causing type compatibility issues for one side or the other.
we might be able to use traits to reduce duplication, but the separation here seems to be necessary.
2024-11-13 15:35:41 +00:00
48d2430064 Update PHPStan baseline 2024-11-13 14:58:09 +00:00
b82d47dd32 Merge branch 'minor-next' into feat/async-events 2024-11-13 14:57:03 +00:00
86fb041a65 Merge branch 'minor-next' of github.com:pmmp/PocketMine-MP into feat/async-events 2024-11-13 14:46:32 +00:00
b276133003 Merge remote-tracking branch 'origin/minor-next' into feat/async-events 2024-07-02 13:44:36 +00:00
c1e3903934 fix PHPstan 2024-01-21 12:04:23 +01:00
eb9814197b resolve AsyncEvent with self instance 2024-01-21 11:50:31 +01:00
d6b7a9ed45 merge remote tracking upstream 2024-01-21 11:28:24 +01:00
64bbff6286 Merge remote-tracking branch 'upstream/minor-next' into feat/async-events 2024-01-21 11:25:37 +01:00
f82c422f64 remove using of Event API 2024-01-21 11:25:34 +01:00
aaa37baf2e handlerListe: reduce code complexity 2023-10-27 22:28:04 +02:00
243a3035ba follow up of #6110 2023-10-27 22:14:21 +02:00
823d4ead6a inconsistency correction 2023-10-27 22:12:03 +02:00
ca95b2f28d fix PHPStan 2023-10-27 22:08:49 +02:00
cc6e8ef232 move the asynchronous registration of handlers to a dedicated PluginManager function 2023-10-27 21:58:43 +02:00
5beaa3ce4e correction of various problems 2023-10-27 21:45:22 +02:00
7e87fbbb7a clarifying the exception message 2023-10-27 21:39:18 +02:00
ed739cff4f cannot call async event in sync context + remove Event dependency for AsyncEventDelegate 2023-10-27 21:37:56 +02:00
dc85bba995 merge remote tracking 2023-10-27 21:28:09 +02:00
1176b7090c Update src/player/Player.php
Co-authored-by: Javier León <58715544+JavierLeon9966@users.noreply.github.com>
2023-10-23 17:31:53 +01:00
2b2fa9ddf1 phpstan: populate baseline 2023-10-22 15:45:05 +02:00
58155a77fb fix PHPstan 2023-10-22 15:18:39 +02:00
c250bb0da7 undo Promise covariant + improve array types 2023-10-22 15:08:50 +02:00
b78ff00418 fix style 2023-10-22 15:06:17 +02:00
9b2b92ac1f oops, remove test code 2023-10-22 15:05:06 +02:00
7a4b9a0367 events: asynchandler is defined by their return type and event type
If the event is async and the handler return Promise, it will be handle as an async event.
However, if the event is async and the handler return smth different than Promise, it will be handle synchronously.
An async handler can specify if it wishes to be called with no concurrent handlers with the tag @noConcurrentCall
2023-10-22 15:01:11 +02:00
a84fc2b901 introduce AsyncEvent and ::callAsync()
An asynchronous event is one that allows the addition of promises to be resolved before being completed.
This implementation integrates priority levels, allowing you to wait for all promises added to one level before moving on to the next.
This is made possible by separating the event call logic into several functions, which can then be integrated into AsyncEventTrait::callAsync()
2023-10-14 23:13:35 +02:00
5fe57a8f6f temporaly add Promise::all
code came from #6015 and will be subject to probable changes
2023-10-14 21:36:44 +02:00
308 changed files with 3751 additions and 1508 deletions

View File

@ -15,7 +15,7 @@ jobs:
- name: Setup PHP and tools
uses: shivammathur/setup-php@2.34.1
with:
php-version: 8.3
php-version: 8.2
- name: Restore Composer package cache
uses: actions/cache@v4

View File

@ -51,7 +51,7 @@ jobs:
- name: Setup PHP
uses: shivammathur/setup-php@2.34.1
with:
php-version: 8.3
php-version: 8.2
- name: Restore Composer package cache
uses: actions/cache@v4

View File

@ -18,7 +18,7 @@ on:
- "*"
env:
PHP_VERSION: "8.3"
PHP_VERSION: "8.2"
jobs:
skip:

View File

@ -11,7 +11,7 @@ jobs:
strategy:
fail-fast: false
matrix:
php: ["8.3"]
php: ["8.1", "8.2", "8.3"]
uses: ./.github/workflows/main-php-matrix.yml
with:

3
.gitmodules vendored
View File

@ -1,3 +1,6 @@
[submodule "tests/plugins/DevTools"]
path = tests/plugins/DevTools
url = https://github.com/pmmp/DevTools.git
[submodule "build/php"]
path = build/php
url = https://github.com/pmmp/php-build-scripts.git

View File

@ -5,7 +5,7 @@ $finder = PhpCsFixer\Finder::create()
->in(__DIR__ . '/build')
->in(__DIR__ . '/tests')
->in(__DIR__ . '/tools')
->notPath('plugins/DevTools')
//JsonMapper will break if the FQNs in the doc comments for these are shortened :(
->notPath('crafting/json')
->notPath('inventory/json')

View File

@ -56,6 +56,7 @@ PocketMine-MP has three primary branches of development.
| Deprecating API classes, methods or constants | ❌ | ✔️ | ✔️ |
| Adding optional parameters to an API method | ❌ | ✔️ | ✔️ |
| Changing API behaviour | ❌ | 🟡 Only if backwards-compatible | ✔️ |
| Changing an event from sync to async or vice versa | ❌ | ❌ | ✔️ |
| Removal of API | ❌ | ❌ | ✔️ |
| Backwards-incompatible API change (e.g. renaming a method) | ❌ | ❌ | ✔️ |
| Backwards-incompatible internals change (e.g. changing things in `pocketmine\network\mcpe`) | ❌ | ✔️ | ✔️ |

View File

@ -12,7 +12,7 @@
</p>
<p align="center">
<a href="https://github.com/pmmp/PocketMine-MP/actions/workflows/main.yml"><img src="https://github.com/pmmp/PocketMine-MP/actions/workflows/main.yml/badge.svg" alt="CI" /></a>
<a href="https://github.com/pmmp/PocketMine-MP/actions/workflows/main.yml"><img src="https://github.com/pmmp/PocketMine-MP/workflows/CI/badge.svg" alt="CI" /></a>
<a href="https://github.com/pmmp/PocketMine-MP/releases/latest"><img alt="GitHub release (latest SemVer)" src="https://img.shields.io/github/v/release/pmmp/PocketMine-MP?label=release&sort=semver"></a>
<a href="https://discord.gg/bmSAZBG"><img src="https://img.shields.io/discord/373199722573201408?label=discord&color=7289DA&logo=discord" alt="Discord" /></a>
<br>

View File

@ -5,7 +5,7 @@
"homepage": "https://pmmp.io",
"license": "LGPL-3.0",
"require": {
"php": "^8.3",
"php": "^8.1",
"php-64bit": "*",
"ext-chunkutils2": "^0.3.1",
"ext-crypto": "^0.3.1",
@ -48,14 +48,14 @@
"pocketmine/raklib": "~1.2.0",
"pocketmine/raklib-ipc": "~1.0.0",
"pocketmine/snooze": "^0.5.0",
"ramsey/uuid": "~4.9.0",
"symfony/filesystem": "~7.3.0"
"ramsey/uuid": "~4.8.0",
"symfony/filesystem": "~6.4.0"
},
"require-dev": {
"phpstan/phpstan": "2.1.17",
"phpstan/phpstan-phpunit": "^2.0.0",
"phpstan/phpstan-strict-rules": "^2.0.0",
"phpunit/phpunit": "^12.2.1"
"phpunit/phpunit": "^10.5.24"
},
"replace": {
"symfony/polyfill-ctype": "*",
@ -77,11 +77,12 @@
},
"config": {
"platform": {
"php": "8.3.0"
"php": "8.1.0"
},
"sort-packages": true
},
"scripts": {
"make-devtools": "@php -dphar.readonly=0 tests/plugins/DevTools/src/ConsoleScript.php --make ./ --relative tests/plugins/DevTools --out plugins/DevTools.phar",
"make-server": [
"@composer install --no-dev --classmap-authoritative --ignore-platform-reqs",
"@php -dphar.readonly=0 build/server-phar.php"

755
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -10,7 +10,9 @@ includes:
- vendor/phpstan/phpstan-strict-rules/rules.neon
rules:
- pocketmine\phpstan\rules\DeprecatedLegacyEnumAccessRule
- pocketmine\phpstan\rules\DisallowDynamicNewRule
- pocketmine\phpstan\rules\DisallowEnumComparisonRule
- pocketmine\phpstan\rules\DisallowForeachByReferenceRule
- pocketmine\phpstan\rules\ExplodeLimitRule
- pocketmine\phpstan\rules\UnsafeForeachRule

View File

@ -123,6 +123,13 @@ class MemoryManager{
return $this->globalMemoryLimit;
}
/**
* @deprecated
*/
public function canUseChunkCache() : bool{
return !$this->lowMemory;
}
/**
* Returns the allowed chunk radius based on the current memory usage.
*/
@ -229,4 +236,13 @@ class MemoryManager{
}
}
}
/**
* Static memory dumper accessible from any thread.
* @deprecated
* @see MemoryDump
*/
public static function dumpMemory(mixed $startingObject, string $outputFolder, int $maxNesting, int $maxStringSize, \Logger $logger) : void{
MemoryDump::dumpMemory($startingObject, $outputFolder, $maxNesting, $maxStringSize, $logger);
}
}

View File

@ -55,7 +55,7 @@ namespace pocketmine {
require_once __DIR__ . '/VersionInfo.php';
const MIN_PHP_VERSION = "8.3.0";
const MIN_PHP_VERSION = "8.1.0";
/**
* @param string $message

View File

@ -39,6 +39,7 @@ use pocketmine\crash\CrashDumpRenderer;
use pocketmine\data\bedrock\BedrockDataFiles;
use pocketmine\entity\EntityDataHelper;
use pocketmine\entity\Location;
use pocketmine\event\AsyncHandlerListManager;
use pocketmine\event\HandlerListManager;
use pocketmine\event\player\PlayerCreationEvent;
use pocketmine\event\player\PlayerDataSaveEvent;
@ -80,7 +81,6 @@ use pocketmine\player\PlayerDataLoadException;
use pocketmine\player\PlayerDataProvider;
use pocketmine\player\PlayerDataSaveException;
use pocketmine\player\PlayerInfo;
use pocketmine\plugin\FolderPluginLoader;
use pocketmine\plugin\PharPluginLoader;
use pocketmine\plugin\PluginEnableOrder;
use pocketmine\plugin\PluginGraylist;
@ -347,10 +347,6 @@ class Server{
return $this->maxPlayers;
}
public function setMaxPlayers(int $maxPlayers) : void{
$this->maxPlayers = $maxPlayers;
}
/**
* Returns whether the server requires that players be authenticated to Xbox Live. If true, connecting players who
* are not logged into Xbox Live will be disconnected.
@ -1034,7 +1030,6 @@ class Server{
$this->pluginManager = new PluginManager($this, $this->configGroup->getPropertyBool(Yml::PLUGINS_LEGACY_DATA_DIR, true) ? null : Path::join($this->dataPath, "plugin_data"), $pluginGraylist);
$this->pluginManager->registerInterface(new PharPluginLoader($this->autoloader));
$this->pluginManager->registerInterface(new ScriptPluginLoader());
$this->pluginManager->registerInterface(new FolderPluginLoader($this->autoloader));
$providerManager = new WorldProviderManager();
if(
@ -1533,6 +1528,7 @@ class Server{
$this->logger->debug("Removing event handlers");
HandlerListManager::global()->unregisterAll();
AsyncHandlerListManager::global()->unregisterAll();
if(isset($this->asyncPool)){
$this->logger->debug("Shutting down async task worker pool");

View File

@ -23,10 +23,9 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\PoweredByRedstone;
use pocketmine\block\utils\RailPoweredByRedstoneTrait;
class ActivatorRail extends StraightOnlyRail implements PoweredByRedstone{
class ActivatorRail extends StraightOnlyRail{
use RailPoweredByRedstoneTrait;
//TODO

View File

@ -24,7 +24,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\AmethystTrait;
use pocketmine\block\utils\AnyFacing;
use pocketmine\block\utils\AnyFacingTrait;
use pocketmine\block\utils\FortuneDropHelper;
use pocketmine\block\utils\SupportType;
@ -39,7 +38,7 @@ use pocketmine\player\Player;
use pocketmine\utils\AssumptionFailedError;
use pocketmine\world\BlockTransaction;
final class AmethystCluster extends Transparent implements AnyFacing{
final class AmethystCluster extends Transparent{
use AmethystTrait;
use AnyFacingTrait;

View File

@ -26,7 +26,6 @@ namespace pocketmine\block;
use pocketmine\block\inventory\AnvilInventory;
use pocketmine\block\utils\Fallable;
use pocketmine\block\utils\FallableTrait;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\HorizontalFacingTrait;
use pocketmine\block\utils\SupportType;
use pocketmine\data\runtime\RuntimeDataDescriber;
@ -42,7 +41,7 @@ use pocketmine\world\sound\AnvilFallSound;
use pocketmine\world\sound\Sound;
use function round;
class Anvil extends Transparent implements Fallable, HorizontalFacing{
class Anvil extends Transparent implements Fallable{
use FallableTrait;
use HorizontalFacingTrait;

View File

@ -24,7 +24,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\tile\Barrel as TileBarrel;
use pocketmine\block\utils\AnyFacing;
use pocketmine\block\utils\AnyFacingTrait;
use pocketmine\data\runtime\RuntimeDataDescriber;
use pocketmine\item\Item;
@ -34,7 +33,7 @@ use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
use function abs;
class Barrel extends Opaque implements AnyFacing{
class Barrel extends Opaque{
use AnyFacingTrait;
protected bool $open = false;

View File

@ -25,7 +25,6 @@ namespace pocketmine\block;
use pocketmine\block\tile\Banner as TileBanner;
use pocketmine\block\utils\BannerPatternLayer;
use pocketmine\block\utils\Colored;
use pocketmine\block\utils\ColoredTrait;
use pocketmine\block\utils\SupportType;
use pocketmine\item\Banner as ItemBanner;
@ -37,7 +36,7 @@ use pocketmine\world\BlockTransaction;
use function assert;
use function count;
abstract class BaseBanner extends Transparent implements Colored{
abstract class BaseBanner extends Transparent{
use ColoredTrait;
/**

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\HorizontalFacingTrait;
use pocketmine\block\utils\SupportType;
use pocketmine\event\block\StructureGrowEvent;
@ -34,7 +33,7 @@ use pocketmine\math\Vector3;
use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
abstract class BaseBigDripleaf extends Transparent implements HorizontalFacing{
abstract class BaseBigDripleaf extends Transparent{
use HorizontalFacingTrait;
abstract protected function isHead() : bool;

View File

@ -24,13 +24,12 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\BlockEventHelper;
use pocketmine\block\utils\CoralMaterial;
use pocketmine\block\utils\CoralTypeTrait;
use pocketmine\block\utils\SupportType;
use pocketmine\item\Item;
use function mt_rand;
abstract class BaseCoral extends Transparent implements CoralMaterial{
abstract class BaseCoral extends Transparent{
use CoralTypeTrait;
public function onNearbyBlockChange() : void{

View File

@ -27,7 +27,6 @@ use pocketmine\block\tile\Sign as TileSign;
use pocketmine\block\utils\DyeColor;
use pocketmine\block\utils\SignText;
use pocketmine\block\utils\SupportType;
use pocketmine\block\utils\WoodMaterial;
use pocketmine\block\utils\WoodType;
use pocketmine\block\utils\WoodTypeTrait;
use pocketmine\color\Color;
@ -45,7 +44,7 @@ use function array_map;
use function assert;
use function strlen;
abstract class BaseSign extends Transparent implements WoodMaterial{
abstract class BaseSign extends Transparent{
use WoodTypeTrait;
protected SignText $text;

View File

@ -24,10 +24,8 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\tile\Bed as TileBed;
use pocketmine\block\utils\Colored;
use pocketmine\block\utils\ColoredTrait;
use pocketmine\block\utils\DyeColor;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\HorizontalFacingTrait;
use pocketmine\block\utils\SupportType;
use pocketmine\data\runtime\RuntimeDataDescriber;
@ -43,7 +41,7 @@ use pocketmine\utils\TextFormat;
use pocketmine\world\BlockTransaction;
use pocketmine\world\World;
class Bed extends Transparent implements Colored, HorizontalFacing{
class Bed extends Transparent{
use ColoredTrait;
use HorizontalFacingTrait;

View File

@ -25,7 +25,6 @@ namespace pocketmine\block;
use pocketmine\block\tile\Bell as TileBell;
use pocketmine\block\utils\BellAttachmentType;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\HorizontalFacingTrait;
use pocketmine\block\utils\SupportType;
use pocketmine\data\runtime\RuntimeDataDescriber;
@ -39,7 +38,7 @@ use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
use pocketmine\world\sound\BellRingSound;
final class Bell extends Transparent implements HorizontalFacing{
final class Bell extends Transparent{
use HorizontalFacingTrait;
private BellAttachmentType $attachmentType = BellAttachmentType::FLOOR;

View File

@ -23,9 +23,8 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\PillarRotation;
use pocketmine\block\utils\PillarRotationTrait;
class BoneBlock extends Opaque implements PillarRotation{
class BoneBlock extends Opaque{
use PillarRotationTrait;
}

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\AnyFacing;
use pocketmine\block\utils\AnyFacingTrait;
use pocketmine\data\runtime\RuntimeDataDescriber;
use pocketmine\item\Item;
@ -34,7 +33,7 @@ use pocketmine\world\BlockTransaction;
use pocketmine\world\sound\RedstonePowerOffSound;
use pocketmine\world\sound\RedstonePowerOnSound;
abstract class Button extends Flowable implements AnyFacing{
abstract class Button extends Flowable{
use AnyFacingTrait;
protected bool $pressed = false;

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Ageable;
use pocketmine\block\utils\AgeableTrait;
use pocketmine\block\utils\BlockEventHelper;
use pocketmine\block\utils\StaticSupportTrait;
@ -34,7 +33,7 @@ use pocketmine\event\entity\EntityDamageEvent;
use pocketmine\math\AxisAlignedBB;
use pocketmine\math\Facing;
class Cactus extends Transparent implements Ageable{
class Cactus extends Transparent{
use AgeableTrait;
use StaticSupportTrait;

View File

@ -24,7 +24,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\CandleTrait;
use pocketmine\block\utils\Lightable;
use pocketmine\entity\Living;
use pocketmine\item\Item;
use pocketmine\math\AxisAlignedBB;
@ -32,7 +31,7 @@ use pocketmine\math\Facing;
use pocketmine\math\Vector3;
use pocketmine\player\Player;
class CakeWithCandle extends BaseCake implements Lightable{
class CakeWithCandle extends BaseCake{
use CandleTrait {
onInteract as onInteractCandle;
}

View File

@ -23,11 +23,10 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Colored;
use pocketmine\block\utils\ColoredTrait;
use pocketmine\block\utils\DyeColor;
class CakeWithDyedCandle extends CakeWithCandle implements Colored{
class CakeWithDyedCandle extends CakeWithCandle{
use ColoredTrait;
public function __construct(BlockIdentifier $idInfo, string $name, BlockTypeInfo $typeInfo){

View File

@ -25,9 +25,7 @@ namespace pocketmine\block;
use pocketmine\block\inventory\CampfireInventory;
use pocketmine\block\tile\Campfire as TileCampfire;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\HorizontalFacingTrait;
use pocketmine\block\utils\Lightable;
use pocketmine\block\utils\LightableTrait;
use pocketmine\block\utils\SupportType;
use pocketmine\crafting\FurnaceRecipe;
@ -61,7 +59,7 @@ use function count;
use function min;
use function mt_rand;
class Campfire extends Transparent implements Lightable, HorizontalFacing{
class Campfire extends Transparent{
use HorizontalFacingTrait{
HorizontalFacingTrait::describeBlockOnlyState as encodeFacingState;
}

View File

@ -24,7 +24,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\CandleTrait;
use pocketmine\block\utils\Lightable;
use pocketmine\block\utils\SupportType;
use pocketmine\data\runtime\RuntimeDataDescriber;
use pocketmine\item\Item;
@ -36,7 +35,7 @@ use pocketmine\player\Player;
use pocketmine\utils\AssumptionFailedError;
use pocketmine\world\BlockTransaction;
class Candle extends Transparent implements Lightable{
class Candle extends Transparent{
use CandleTrait {
describeBlockOnlyState as encodeLitState;
getLightLevel as getBaseLightLevel;

View File

@ -23,13 +23,12 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Colored;
use pocketmine\block\utils\ColoredTrait;
use pocketmine\block\utils\StaticSupportTrait;
use pocketmine\math\AxisAlignedBB;
use pocketmine\math\Facing;
class Carpet extends Flowable implements Colored{
class Carpet extends Flowable{
use ColoredTrait;
use StaticSupportTrait;

View File

@ -24,8 +24,7 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
use pocketmine\block\utils\HorizontalFacing;
class CarvedPumpkin extends Opaque implements HorizontalFacing{
class CarvedPumpkin extends Opaque{
use FacesOppositePlacingPlayerTrait;
}

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Ageable;
use pocketmine\block\utils\AgeableTrait;
use pocketmine\block\utils\BlockEventHelper;
use pocketmine\block\utils\StaticSupportTrait;
@ -40,7 +39,7 @@ use pocketmine\world\BlockTransaction;
use pocketmine\world\sound\GlowBerriesPickSound;
use function mt_rand;
class CaveVines extends Flowable implements Ageable{
class CaveVines extends Flowable{
use AgeableTrait;
use StaticSupportTrait;

View File

@ -23,14 +23,13 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\PillarRotation;
use pocketmine\block\utils\PillarRotationTrait;
use pocketmine\block\utils\SupportType;
use pocketmine\math\Axis;
use pocketmine\math\AxisAlignedBB;
use pocketmine\math\Facing;
final class Chain extends Transparent implements PillarRotation{
final class Chain extends Transparent{
use PillarRotationTrait;
public function getSupportType(int $facing) : SupportType{

View File

@ -24,12 +24,11 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\item\Item;
use pocketmine\math\Vector3;
use pocketmine\player\Player;
final class ChemistryTable extends Opaque implements HorizontalFacing{
final class ChemistryTable extends Opaque{
use FacesOppositePlacingPlayerTrait;
public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player $player = null, array &$returnedItems = []) : bool{

View File

@ -25,7 +25,6 @@ namespace pocketmine\block;
use pocketmine\block\tile\Chest as TileChest;
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\SupportType;
use pocketmine\event\block\ChestPairEvent;
use pocketmine\item\Item;
@ -34,7 +33,7 @@ use pocketmine\math\Facing;
use pocketmine\math\Vector3;
use pocketmine\player\Player;
class Chest extends Transparent implements HorizontalFacing{
class Chest extends Transparent{
use FacesOppositePlacingPlayerTrait;
protected function recalculateCollisionBoxes() : array{

View File

@ -26,7 +26,6 @@ namespace pocketmine\block;
use pocketmine\block\tile\ChiseledBookshelf as TileChiseledBookshelf;
use pocketmine\block\utils\ChiseledBookshelfSlot;
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\HorizontalFacingTrait;
use pocketmine\data\runtime\RuntimeDataDescriber;
use pocketmine\item\Book;
@ -39,7 +38,7 @@ use pocketmine\math\Vector3;
use pocketmine\player\Player;
use function spl_object_id;
class ChiseledBookshelf extends Opaque implements HorizontalFacing{
class ChiseledBookshelf extends Opaque{
use HorizontalFacingTrait;
use FacesOppositePlacingPlayerTrait;

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Ageable;
use pocketmine\block\utils\AgeableTrait;
use pocketmine\block\utils\StaticSupportTrait;
use pocketmine\entity\projectile\Projectile;
@ -41,7 +40,7 @@ use function array_rand;
use function min;
use function mt_rand;
final class ChorusFlower extends Flowable implements Ageable{
final class ChorusFlower extends Flowable{
use AgeableTrait;
use StaticSupportTrait;

View File

@ -23,10 +23,8 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Ageable;
use pocketmine\block\utils\AgeableTrait;
use pocketmine\block\utils\BlockEventHelper;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\HorizontalFacingTrait;
use pocketmine\block\utils\WoodType;
use pocketmine\data\runtime\RuntimeDataDescriber;
@ -41,7 +39,7 @@ use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
use function mt_rand;
class CocoaBlock extends Flowable implements Ageable, HorizontalFacing{
class CocoaBlock extends Flowable{
use HorizontalFacingTrait;
use AgeableTrait;

View File

@ -23,9 +23,8 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Colored;
use pocketmine\block\utils\ColoredTrait;
class Concrete extends Opaque implements Colored{
class Concrete extends Opaque{
use ColoredTrait;
}

View File

@ -24,13 +24,12 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\BlockEventHelper;
use pocketmine\block\utils\Colored;
use pocketmine\block\utils\ColoredTrait;
use pocketmine\block\utils\Fallable;
use pocketmine\block\utils\FallableTrait;
use pocketmine\math\Facing;
class ConcretePowder extends Opaque implements Fallable, Colored{
class ConcretePowder extends Opaque implements Fallable{
use ColoredTrait;
use FallableTrait {
onNearbyBlockChange as protected startFalling;

View File

@ -26,13 +26,11 @@ namespace pocketmine\block;
use pocketmine\block\utils\CopperMaterial;
use pocketmine\block\utils\CopperOxidation;
use pocketmine\block\utils\CopperTrait;
use pocketmine\block\utils\Lightable;
use pocketmine\block\utils\LightableTrait;
use pocketmine\block\utils\PoweredByRedstone;
use pocketmine\block\utils\PoweredByRedstoneTrait;
use pocketmine\data\runtime\RuntimeDataDescriber;
class CopperBulb extends Opaque implements CopperMaterial, Lightable, PoweredByRedstone{
class CopperBulb extends Opaque implements CopperMaterial{
use CopperTrait;
use PoweredByRedstoneTrait;
use LightableTrait{

View File

@ -24,12 +24,11 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\BlockEventHelper;
use pocketmine\block\utils\CoralMaterial;
use pocketmine\block\utils\CoralTypeTrait;
use pocketmine\item\Item;
use function mt_rand;
final class CoralBlock extends Opaque implements CoralMaterial{
final class CoralBlock extends Opaque{
use CoralTypeTrait;
public function onNearbyBlockChange() : void{

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Ageable;
use pocketmine\block\utils\AgeableTrait;
use pocketmine\block\utils\BlockEventHelper;
use pocketmine\block\utils\CropGrowthHelper;
@ -35,7 +34,7 @@ use pocketmine\math\Vector3;
use pocketmine\player\Player;
use function mt_rand;
abstract class Crops extends Flowable implements Ageable{
abstract class Crops extends Flowable{
use AgeableTrait;
use StaticSupportTrait;

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\AnalogRedstoneSignalEmitter;
use pocketmine\block\utils\AnalogRedstoneSignalEmitterTrait;
use pocketmine\block\utils\SupportType;
use pocketmine\data\runtime\RuntimeDataDescriber;
@ -37,7 +36,7 @@ use function max;
use function round;
use const M_PI;
class DaylightSensor extends Transparent implements AnalogRedstoneSignalEmitter{
class DaylightSensor extends Transparent{
use AnalogRedstoneSignalEmitterTrait;
protected bool $inverted = false;

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\HorizontalFacingTrait;
use pocketmine\block\utils\SupportType;
use pocketmine\data\runtime\RuntimeDataDescriber;
@ -35,7 +34,7 @@ use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
use pocketmine\world\sound\DoorSound;
class Door extends Transparent implements HorizontalFacing{
class Door extends Transparent{
use HorizontalFacingTrait;
protected bool $top = false;

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Ageable;
use pocketmine\block\utils\AgeableTrait;
use pocketmine\block\utils\CropGrowthHelper;
use pocketmine\data\runtime\RuntimeDataDescriber;
@ -38,7 +37,7 @@ use pocketmine\math\Vector3;
use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
final class DoublePitcherCrop extends DoublePlant implements Ageable{
final class DoublePitcherCrop extends DoublePlant{
use AgeableTrait {
describeBlockOnlyState as describeAge;
}

View File

@ -23,10 +23,9 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Colored;
use pocketmine\block\utils\ColoredTrait;
class DyedCandle extends Candle implements Colored{
class DyedCandle extends Candle{
use ColoredTrait;
protected function getCandleIfCompatibleType(Block $block) : ?Candle{

View File

@ -23,9 +23,8 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Colored;
use pocketmine\block\utils\ColoredTrait;
final class DyedShulkerBox extends ShulkerBox implements Colored{
final class DyedShulkerBox extends ShulkerBox{
use ColoredTrait;
}

View File

@ -24,12 +24,11 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\data\runtime\RuntimeDataDescriber;
use pocketmine\math\AxisAlignedBB;
use pocketmine\math\Facing;
class EndPortalFrame extends Opaque implements HorizontalFacing{
class EndPortalFrame extends Opaque{
use FacesOppositePlacingPlayerTrait;
protected bool $eye = false;

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\AnyFacing;
use pocketmine\block\utils\AnyFacingTrait;
use pocketmine\item\Item;
use pocketmine\math\Axis;
@ -33,7 +32,7 @@ use pocketmine\math\Vector3;
use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
class EndRod extends Flowable implements AnyFacing{
class EndRod extends Flowable{
use AnyFacingTrait;
public function place(BlockTransaction $tx, Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, ?Player $player = null) : bool{

View File

@ -26,7 +26,6 @@ namespace pocketmine\block;
use pocketmine\block\inventory\EnderChestInventory;
use pocketmine\block\tile\EnderChest as TileEnderChest;
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\SupportType;
use pocketmine\item\Item;
use pocketmine\math\AxisAlignedBB;
@ -34,7 +33,7 @@ use pocketmine\math\Facing;
use pocketmine\math\Vector3;
use pocketmine\player\Player;
class EnderChest extends Transparent implements HorizontalFacing{
class EnderChest extends Transparent{
use FacesOppositePlacingPlayerTrait;
public function getLightLevel() : int{

View File

@ -23,10 +23,8 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\HorizontalFacingTrait;
use pocketmine\block\utils\SupportType;
use pocketmine\block\utils\WoodMaterial;
use pocketmine\block\utils\WoodTypeTrait;
use pocketmine\data\runtime\RuntimeDataDescriber;
use pocketmine\item\Item;
@ -37,7 +35,7 @@ use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
use pocketmine\world\sound\DoorSound;
class FenceGate extends Transparent implements HorizontalFacing, WoodMaterial{
class FenceGate extends Transparent{
use WoodTypeTrait;
use HorizontalFacingTrait;

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Ageable;
use pocketmine\block\utils\AgeableTrait;
use pocketmine\block\utils\BlockEventHelper;
use pocketmine\block\utils\SupportType;
@ -36,7 +35,7 @@ use function max;
use function min;
use function mt_rand;
class Fire extends BaseFire implements Ageable{
class Fire extends BaseFire{
use AgeableTrait;
public const MAX_AGE = 15;

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\SignLikeRotation;
use pocketmine\block\utils\SignLikeRotationTrait;
use pocketmine\item\Item;
use pocketmine\math\Facing;
@ -31,7 +30,7 @@ use pocketmine\math\Vector3;
use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
final class FloorBanner extends BaseBanner implements SignLikeRotation{
final class FloorBanner extends BaseBanner{
use SignLikeRotationTrait;
protected function getSupportingFace() : int{

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\SignLikeRotation;
use pocketmine\block\utils\SignLikeRotationTrait;
use pocketmine\item\Item;
use pocketmine\math\Facing;
@ -31,7 +30,7 @@ use pocketmine\math\Vector3;
use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
final class FloorSign extends BaseSign implements SignLikeRotation{
final class FloorSign extends BaseSign{
use SignLikeRotationTrait;
protected function getSupportingFace() : int{

View File

@ -23,12 +23,11 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Ageable;
use pocketmine\block\utils\AgeableTrait;
use pocketmine\block\utils\BlockEventHelper;
use function mt_rand;
class FrostedIce extends Ice implements Ageable{
class FrostedIce extends Ice{
use AgeableTrait;
public const MAX_AGE = 3;

View File

@ -25,7 +25,6 @@ namespace pocketmine\block;
use pocketmine\block\tile\Furnace as TileFurnace;
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
use pocketmine\block\utils\Lightable;
use pocketmine\block\utils\LightableTrait;
use pocketmine\crafting\FurnaceType;
use pocketmine\data\runtime\RuntimeDataDescriber;
@ -34,7 +33,7 @@ use pocketmine\math\Vector3;
use pocketmine\player\Player;
use function mt_rand;
class Furnace extends Opaque implements Lightable{
class Furnace extends Opaque{
use FacesOppositePlacingPlayerTrait;
use LightableTrait;

View File

@ -23,12 +23,10 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Colored;
use pocketmine\block\utils\ColoredTrait;
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
use pocketmine\block\utils\HorizontalFacing;
class GlazedTerracotta extends Opaque implements Colored, HorizontalFacing{
class GlazedTerracotta extends Opaque{
use ColoredTrait;
use FacesOppositePlacingPlayerTrait;
}

View File

@ -25,7 +25,6 @@ namespace pocketmine\block;
use pocketmine\block\utils\BlockEventHelper;
use pocketmine\block\utils\MultiAnySupportTrait;
use pocketmine\block\utils\MultiFacing;
use pocketmine\block\utils\SupportType;
use pocketmine\item\Fertilizer;
use pocketmine\item\Item;
@ -36,7 +35,7 @@ use pocketmine\world\World;
use function count;
use function shuffle;
class GlowLichen extends Transparent implements MultiFacing{
class GlowLichen extends Transparent{
use MultiAnySupportTrait;
public function getLightLevel() : int{

View File

@ -23,11 +23,10 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\PillarRotation;
use pocketmine\block\utils\PillarRotationTrait;
use pocketmine\entity\Entity;
class HayBale extends Opaque implements PillarRotation{
class HayBale extends Opaque{
use PillarRotationTrait;
public function getFlameEncouragement() : int{

View File

@ -24,7 +24,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\tile\Hopper as TileHopper;
use pocketmine\block\utils\PoweredByRedstone;
use pocketmine\block\utils\PoweredByRedstoneTrait;
use pocketmine\block\utils\SupportType;
use pocketmine\data\runtime\RuntimeDataDescriber;
@ -35,7 +34,7 @@ use pocketmine\math\Vector3;
use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
class Hopper extends Transparent implements PoweredByRedstone{
class Hopper extends Transparent{
use PoweredByRedstoneTrait;
private int $facing = Facing::DOWN;

View File

@ -24,7 +24,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\tile\ItemFrame as TileItemFrame;
use pocketmine\block\utils\AnyFacing;
use pocketmine\block\utils\AnyFacingTrait;
use pocketmine\block\utils\SupportType;
use pocketmine\data\runtime\RuntimeDataDescriber;
@ -40,7 +39,7 @@ use pocketmine\world\sound\ItemFrameRotateItemSound;
use function is_infinite;
use function is_nan;
class ItemFrame extends Flowable implements AnyFacing{
class ItemFrame extends Flowable{
use AnyFacingTrait;
public const ROTATIONS = 8;

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\HorizontalFacingTrait;
use pocketmine\block\utils\SupportType;
use pocketmine\entity\Entity;
@ -36,7 +35,7 @@ use pocketmine\math\Vector3;
use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
class Ladder extends Transparent implements HorizontalFacing{
class Ladder extends Transparent{
use HorizontalFacingTrait;
public function hasEntityCollision() : bool{

View File

@ -25,7 +25,6 @@ namespace pocketmine\block;
use pocketmine\block\tile\Lectern as TileLectern;
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\SupportType;
use pocketmine\data\runtime\RuntimeDataDescriber;
use pocketmine\item\Item;
@ -37,7 +36,7 @@ use pocketmine\player\Player;
use pocketmine\world\sound\LecternPlaceBookSound;
use function count;
class Lectern extends Transparent implements HorizontalFacing{
class Lectern extends Transparent{
use FacesOppositePlacingPlayerTrait;
protected int $viewedPage = 0;

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\AnyFacing;
use pocketmine\block\utils\AnyFacingTrait;
use pocketmine\item\Item;
use pocketmine\math\Axis;
@ -33,7 +32,7 @@ use pocketmine\math\Vector3;
use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
final class LightningRod extends Transparent implements AnyFacing{
final class LightningRod extends Transparent{
use AnyFacingTrait;
protected function recalculateCollisionBoxes() : array{

View File

@ -25,12 +25,11 @@ namespace pocketmine\block;
use pocketmine\block\inventory\LoomInventory;
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\item\Item;
use pocketmine\math\Vector3;
use pocketmine\player\Player;
final class Loom extends Opaque implements HorizontalFacing{
final class Loom extends Opaque{
use FacesOppositePlacingPlayerTrait;
public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player $player = null, array &$returnedItems = []) : bool{

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Ageable;
use pocketmine\block\utils\AgeableTrait;
use pocketmine\block\utils\FortuneDropHelper;
use pocketmine\block\utils\StaticSupportTrait;
@ -42,7 +41,7 @@ use function mt_rand;
/**
* This class is used for Weeping & Twisting vines, because they have same behaviour
*/
class NetherVines extends Flowable implements Ageable{
class NetherVines extends Flowable{
use AgeableTrait;
use StaticSupportTrait;

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Ageable;
use pocketmine\block\utils\AgeableTrait;
use pocketmine\block\utils\BlockEventHelper;
use pocketmine\block\utils\FortuneDropHelper;
@ -32,7 +31,7 @@ use pocketmine\item\Item;
use pocketmine\math\Facing;
use function mt_rand;
class NetherWartPlant extends Flowable implements Ageable{
class NetherWartPlant extends Flowable{
use AgeableTrait;
use StaticSupportTrait;

View File

@ -24,7 +24,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\BlockEventHelper;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\HorizontalFacingTrait;
use pocketmine\block\utils\StaticSupportTrait;
use pocketmine\data\runtime\RuntimeDataDescriber;
@ -35,7 +34,7 @@ use pocketmine\math\Vector3;
use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
class PinkPetals extends Flowable implements HorizontalFacing{
class PinkPetals extends Flowable{
use HorizontalFacingTrait;
use StaticSupportTrait {
canBePlacedAt as supportedWhenPlacedAt;

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Ageable;
use pocketmine\block\utils\AgeableTrait;
use pocketmine\block\utils\BlockEventHelper;
use pocketmine\block\utils\CropGrowthHelper;
@ -39,7 +38,7 @@ use pocketmine\math\Vector3;
use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
final class PitcherCrop extends Flowable implements Ageable{
final class PitcherCrop extends Flowable{
use AgeableTrait;
use StaticSupportTrait;

View File

@ -23,10 +23,9 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\WoodMaterial;
use pocketmine\block\utils\WoodTypeTrait;
class Planks extends Opaque implements WoodMaterial{
class Planks extends Opaque{
use WoodTypeTrait;
public function getFuelTime() : int{

View File

@ -23,9 +23,8 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\PoweredByRedstone;
use pocketmine\block\utils\RailPoweredByRedstoneTrait;
class PoweredRail extends StraightOnlyRail implements PoweredByRedstone{
class PoweredRail extends StraightOnlyRail{
use RailPoweredByRedstoneTrait;
}

View File

@ -24,11 +24,8 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\tile\Comparator;
use pocketmine\block\utils\AnalogRedstoneSignalEmitter;
use pocketmine\block\utils\AnalogRedstoneSignalEmitterTrait;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\HorizontalFacingTrait;
use pocketmine\block\utils\PoweredByRedstone;
use pocketmine\block\utils\PoweredByRedstoneTrait;
use pocketmine\block\utils\StaticSupportTrait;
use pocketmine\block\utils\SupportType;
@ -41,7 +38,7 @@ use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
use function assert;
class RedstoneComparator extends Flowable implements AnalogRedstoneSignalEmitter, PoweredByRedstone, HorizontalFacing{
class RedstoneComparator extends Flowable{
use HorizontalFacingTrait;
use AnalogRedstoneSignalEmitterTrait;
use PoweredByRedstoneTrait;

View File

@ -23,11 +23,10 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\PoweredByRedstone;
use pocketmine\block\utils\PoweredByRedstoneTrait;
use pocketmine\data\runtime\RuntimeDataDescriber;
class RedstoneLamp extends Opaque implements PoweredByRedstone{
class RedstoneLamp extends Opaque{
use PoweredByRedstoneTrait;
protected function describeBlockOnlyState(RuntimeDataDescriber $w) : void{

View File

@ -24,7 +24,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\FortuneDropHelper;
use pocketmine\block\utils\Lightable;
use pocketmine\block\utils\LightableTrait;
use pocketmine\item\Item;
use pocketmine\item\VanillaItems;
@ -32,7 +31,7 @@ use pocketmine\math\Vector3;
use pocketmine\player\Player;
use function mt_rand;
class RedstoneOre extends Opaque implements Lightable{
class RedstoneOre extends Opaque{
use LightableTrait;
public function getLightLevel() : int{

View File

@ -23,9 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\HorizontalFacingTrait;
use pocketmine\block\utils\PoweredByRedstone;
use pocketmine\block\utils\PoweredByRedstoneTrait;
use pocketmine\block\utils\StaticSupportTrait;
use pocketmine\block\utils\SupportType;
@ -37,7 +35,7 @@ use pocketmine\math\Vector3;
use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
class RedstoneRepeater extends Flowable implements PoweredByRedstone, HorizontalFacing{
class RedstoneRepeater extends Flowable{
use HorizontalFacingTrait;
use PoweredByRedstoneTrait;
use StaticSupportTrait;

View File

@ -23,11 +23,10 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Lightable;
use pocketmine\block\utils\LightableTrait;
use pocketmine\data\runtime\RuntimeDataDescriber;
class RedstoneTorch extends Torch implements Lightable{
class RedstoneTorch extends Torch{
use LightableTrait;
public function __construct(BlockIdentifier $idInfo, string $name, BlockTypeInfo $typeInfo){

View File

@ -23,14 +23,13 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\AnalogRedstoneSignalEmitter;
use pocketmine\block\utils\AnalogRedstoneSignalEmitterTrait;
use pocketmine\block\utils\StaticSupportTrait;
use pocketmine\item\Item;
use pocketmine\item\VanillaItems;
use pocketmine\math\Facing;
class RedstoneWire extends Flowable implements AnalogRedstoneSignalEmitter{
class RedstoneWire extends Flowable{
use AnalogRedstoneSignalEmitterTrait;
use StaticSupportTrait;

View File

@ -24,10 +24,9 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\MultiAnySupportTrait;
use pocketmine\block\utils\MultiFacing;
use pocketmine\block\utils\SupportType;
final class ResinClump extends Transparent implements MultiFacing{
final class ResinClump extends Transparent{
use MultiAnySupportTrait;
public function isSolid() : bool{

View File

@ -24,7 +24,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\tile\ShulkerBox as TileShulkerBox;
use pocketmine\block\utils\AnyFacing;
use pocketmine\block\utils\AnyFacingTrait;
use pocketmine\block\utils\SupportType;
use pocketmine\data\runtime\RuntimeDataDescriber;
@ -33,7 +32,7 @@ use pocketmine\math\Vector3;
use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
class ShulkerBox extends Opaque implements AnyFacing{
class ShulkerBox extends Opaque{
use AnyFacingTrait;
protected function describeBlockOnlyState(RuntimeDataDescriber $w) : void{

View File

@ -23,13 +23,12 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\PillarRotation;
use pocketmine\block\utils\PillarRotationTrait;
/**
* @internal This class provides a general base for pillar-like blocks. It **should not** be used for contract binding
* in APIs, because not all pillar-like blocks extend this class.
*/
class SimplePillar extends Opaque implements PillarRotation{
class SimplePillar extends Opaque{
use PillarRotationTrait;
}

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\HorizontalFacingTrait;
use pocketmine\block\utils\SupportType;
use pocketmine\data\runtime\RuntimeDataDescriber;
@ -37,7 +36,7 @@ use pocketmine\world\BlockTransaction;
use pocketmine\world\Position;
use function mt_rand;
class SmallDripleaf extends Transparent implements HorizontalFacing{
class SmallDripleaf extends Transparent{
use HorizontalFacingTrait;
protected bool $top = false;

View File

@ -23,9 +23,8 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Colored;
use pocketmine\block\utils\ColoredTrait;
final class StainedGlass extends Glass implements Colored{
final class StainedGlass extends Glass{
use ColoredTrait;
}

View File

@ -23,9 +23,8 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Colored;
use pocketmine\block\utils\ColoredTrait;
final class StainedGlassPane extends GlassPane implements Colored{
final class StainedGlassPane extends GlassPane{
use ColoredTrait;
}

View File

@ -23,9 +23,8 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Colored;
use pocketmine\block\utils\ColoredTrait;
final class StainedHardenedClay extends HardenedClay implements Colored{
final class StainedHardenedClay extends HardenedClay{
use ColoredTrait;
}

View File

@ -23,9 +23,8 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Colored;
use pocketmine\block\utils\ColoredTrait;
final class StainedHardenedGlass extends HardenedGlass implements Colored{
final class StainedHardenedGlass extends HardenedGlass{
use ColoredTrait;
}

View File

@ -23,9 +23,8 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Colored;
use pocketmine\block\utils\ColoredTrait;
final class StainedHardenedGlassPane extends HardenedGlassPane implements Colored{
final class StainedHardenedGlassPane extends HardenedGlassPane{
use ColoredTrait;
}

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\HorizontalFacingTrait;
use pocketmine\block\utils\StairShape;
use pocketmine\block\utils\SupportType;
@ -36,7 +35,7 @@ use pocketmine\math\Vector3;
use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
class Stair extends Transparent implements HorizontalFacing{
class Stair extends Transparent{
use HorizontalFacingTrait;
protected bool $upsideDown = false;

View File

@ -25,7 +25,6 @@ namespace pocketmine\block;
use pocketmine\block\inventory\StonecutterInventory;
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\SupportType;
use pocketmine\item\Item;
use pocketmine\math\AxisAlignedBB;
@ -33,7 +32,7 @@ use pocketmine\math\Facing;
use pocketmine\math\Vector3;
use pocketmine\player\Player;
class Stonecutter extends Transparent implements HorizontalFacing{
class Stonecutter extends Transparent{
use FacesOppositePlacingPlayerTrait;
public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player $player = null, array &$returnedItems = []) : bool{

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Ageable;
use pocketmine\block\utils\AgeableTrait;
use pocketmine\block\utils\BlockEventHelper;
use pocketmine\block\utils\StaticSupportTrait;
@ -35,7 +34,7 @@ use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
use pocketmine\world\Position;
class Sugarcane extends Flowable implements Ageable{
class Sugarcane extends Flowable{
use AgeableTrait;
use StaticSupportTrait {
onNearbyBlockChange as onSupportBlockChange;

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\Ageable;
use pocketmine\block\utils\AgeableTrait;
use pocketmine\block\utils\BlockEventHelper;
use pocketmine\block\utils\FortuneDropHelper;
@ -40,7 +39,7 @@ use pocketmine\player\Player;
use pocketmine\world\sound\SweetBerriesPickSound;
use function mt_rand;
class SweetBerryBush extends Flowable implements Ageable{
class SweetBerryBush extends Flowable{
use AgeableTrait;
use StaticSupportTrait;
@ -59,10 +58,17 @@ class SweetBerryBush extends Flowable implements Ageable{
return 0;
}
/**
* @deprecated
*/
protected function canBeSupportedBy(Block $block) : bool{
return $block->getTypeId() !== BlockTypeIds::FARMLAND && //bedrock-specific thing (bug?)
($block->hasTypeTag(BlockTypeTags::DIRT) || $block->hasTypeTag(BlockTypeTags::MUD));
}
private function canBeSupportedAt(Block $block) : bool{
$supportBlock = $block->getSide(Facing::DOWN);
return $supportBlock->getTypeId() !== BlockTypeIds::FARMLAND && //bedrock-specific thing (bug?)
($supportBlock->hasTypeTag(BlockTypeTags::DIRT) || $supportBlock->hasTypeTag(BlockTypeTags::MUD));
return $this->canBeSupportedBy($supportBlock);
}
public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player $player = null, array &$returnedItems = []) : bool{

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\HorizontalFacingTrait;
use pocketmine\block\utils\SupportType;
use pocketmine\data\runtime\RuntimeDataDescriber;
@ -35,7 +34,7 @@ use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
use pocketmine\world\sound\DoorSound;
class Trapdoor extends Transparent implements HorizontalFacing{
class Trapdoor extends Transparent{
use HorizontalFacingTrait;
protected bool $open = false;

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\HorizontalFacingTrait;
use pocketmine\data\runtime\RuntimeDataDescriber;
use pocketmine\item\Item;
@ -33,7 +32,7 @@ use pocketmine\math\Vector3;
use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
class TripwireHook extends Flowable implements HorizontalFacing{
class TripwireHook extends Flowable{
use HorizontalFacingTrait;
protected bool $connected = false;

View File

@ -805,8 +805,8 @@ use function strtolower;
* @method static Water WATER()
* @method static WaterCauldron WATER_CAULDRON()
* @method static NetherVines WEEPING_VINES()
* @method static WeightedPressurePlate WEIGHTED_PRESSURE_PLATE_HEAVY()
* @method static WeightedPressurePlate WEIGHTED_PRESSURE_PLATE_LIGHT()
* @method static WeightedPressurePlateHeavy WEIGHTED_PRESSURE_PLATE_HEAVY()
* @method static WeightedPressurePlateLight WEIGHTED_PRESSURE_PLATE_LIGHT()
* @method static Wheat WHEAT()
* @method static Flower WHITE_TULIP()
* @method static WitherRose WITHER_ROSE()
@ -1203,14 +1203,14 @@ final class VanillaBlocks{
self::register("lily_pad", fn(BID $id) => new WaterLily($id, "Lily Pad", new Info(BreakInfo::instant())));
$weightedPressurePlateBreakInfo = new Info(BreakInfo::pickaxe(0.5));
self::register("weighted_pressure_plate_heavy", fn(BID $id) => new WeightedPressurePlate(
self::register("weighted_pressure_plate_heavy", fn(BID $id) => new WeightedPressurePlateHeavy(
$id,
"Weighted Pressure Plate Heavy",
$weightedPressurePlateBreakInfo,
deactivationDelayTicks: 10,
signalStrengthFactor: 0.1
));
self::register("weighted_pressure_plate_light", fn(BID $id) => new WeightedPressurePlate(
self::register("weighted_pressure_plate_light", fn(BID $id) => new WeightedPressurePlateLight(
$id,
"Weighted Pressure Plate Light",
$weightedPressurePlateBreakInfo,

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\HorizontalFacingTrait;
use pocketmine\item\Item;
use pocketmine\math\Axis;
@ -32,7 +31,7 @@ use pocketmine\math\Vector3;
use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
final class WallBanner extends BaseBanner implements HorizontalFacing{
final class WallBanner extends BaseBanner{
use HorizontalFacingTrait;
protected function getSupportingFace() : int{

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\HorizontalFacingTrait;
use pocketmine\data\runtime\RuntimeDataDescriber;
use pocketmine\item\Item;
@ -34,7 +33,7 @@ use pocketmine\math\Vector3;
use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
final class WallCoralFan extends BaseCoral implements HorizontalFacing{
final class WallCoralFan extends BaseCoral{
use HorizontalFacingTrait;
protected function describeBlockOnlyState(RuntimeDataDescriber $w) : void{

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\HorizontalFacing;
use pocketmine\block\utils\HorizontalFacingTrait;
use pocketmine\item\Item;
use pocketmine\math\Axis;
@ -32,7 +31,7 @@ use pocketmine\math\Vector3;
use pocketmine\player\Player;
use pocketmine\world\BlockTransaction;
final class WallSign extends BaseSign implements HorizontalFacing{
final class WallSign extends BaseSign{
use HorizontalFacingTrait;
protected function getSupportingFace() : int{

View File

@ -23,14 +23,13 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\AnalogRedstoneSignalEmitter;
use pocketmine\block\utils\AnalogRedstoneSignalEmitterTrait;
use function ceil;
use function count;
use function max;
use function min;
class WeightedPressurePlate extends PressurePlate implements AnalogRedstoneSignalEmitter{
class WeightedPressurePlate extends PressurePlate{
use AnalogRedstoneSignalEmitterTrait;
private readonly float $signalStrengthFactor;

Some files were not shown because too many files have changed in this diff Show More