mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-04-20 16:00:20 +00:00
Merge branch 'next-minor' into next-major
This commit is contained in:
commit
b6982a84ef
@ -1 +1 @@
|
||||
Subproject commit 14ed8eaadd921407c87be4964a8726b22427e80e
|
||||
Subproject commit 9353116fa8c78ed4f588b983088cabd96885286e
|
@ -37,13 +37,13 @@
|
||||
"pocketmine/bedrock-block-upgrade-schema": "dev-master@dev",
|
||||
"pocketmine/bedrock-data": "dev-modern-world-support@dev",
|
||||
"pocketmine/bedrock-item-upgrade-schema": "dev-master",
|
||||
"pocketmine/bedrock-protocol": "~14.0.0+bedrock-1.19.40",
|
||||
"pocketmine/bedrock-protocol": "~16.0.0+bedrock-1.19.40",
|
||||
"pocketmine/binaryutils": "^0.2.1",
|
||||
"pocketmine/callback-validator": "^1.0.2",
|
||||
"pocketmine/classloader": "^0.2.0",
|
||||
"pocketmine/color": "^0.2.0",
|
||||
"pocketmine/errorhandler": "^0.6.0",
|
||||
"pocketmine/locale-data": "~2.9.0",
|
||||
"pocketmine/locale-data": "~2.10.0",
|
||||
"pocketmine/log": "^0.4.0",
|
||||
"pocketmine/log-pthreads": "^0.4.0",
|
||||
"pocketmine/math": "^0.4.0",
|
||||
@ -55,7 +55,7 @@
|
||||
"symfony/filesystem": "^5.4"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpstan/phpstan": "1.9.1",
|
||||
"phpstan/phpstan": "1.9.2",
|
||||
"phpstan/phpstan-phpunit": "^1.1.0",
|
||||
"phpstan/phpstan-strict-rules": "^1.2.0",
|
||||
"phpunit/phpunit": "^9.2"
|
||||
|
40
composer.lock
generated
40
composer.lock
generated
@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "6bcf382aecdbb6f170fd825727b4d621",
|
||||
"content-hash": "abed149b2fde59580fceb9513fd35c04",
|
||||
"packages": [
|
||||
{
|
||||
"name": "adhocore/json-comment",
|
||||
@ -329,16 +329,16 @@
|
||||
},
|
||||
{
|
||||
"name": "pocketmine/bedrock-protocol",
|
||||
"version": "14.0.0+bedrock-1.19.40",
|
||||
"version": "16.0.0+bedrock-1.19.40",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/pmmp/BedrockProtocol.git",
|
||||
"reference": "b455a742779fee94d25f931cc2cbf6b2c5d61c1f"
|
||||
"reference": "ce900ffa6a4cc07af92686f27d580dd2e2541382"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/pmmp/BedrockProtocol/zipball/b455a742779fee94d25f931cc2cbf6b2c5d61c1f",
|
||||
"reference": "b455a742779fee94d25f931cc2cbf6b2c5d61c1f",
|
||||
"url": "https://api.github.com/repos/pmmp/BedrockProtocol/zipball/ce900ffa6a4cc07af92686f27d580dd2e2541382",
|
||||
"reference": "ce900ffa6a4cc07af92686f27d580dd2e2541382",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -352,7 +352,7 @@
|
||||
"ramsey/uuid": "^4.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpstan/phpstan": "1.8.8",
|
||||
"phpstan/phpstan": "1.9.0",
|
||||
"phpstan/phpstan-phpunit": "^1.0.0",
|
||||
"phpstan/phpstan-strict-rules": "^1.0.0",
|
||||
"phpunit/phpunit": "^9.5"
|
||||
@ -370,9 +370,9 @@
|
||||
"description": "An implementation of the Minecraft: Bedrock Edition protocol in PHP",
|
||||
"support": {
|
||||
"issues": "https://github.com/pmmp/BedrockProtocol/issues",
|
||||
"source": "https://github.com/pmmp/BedrockProtocol/tree/bedrock-1.19.40"
|
||||
"source": "https://github.com/pmmp/BedrockProtocol/tree/16.0.0+bedrock-1.19.40"
|
||||
},
|
||||
"time": "2022-10-25T21:51:46+00:00"
|
||||
"time": "2022-11-19T16:11:48+00:00"
|
||||
},
|
||||
{
|
||||
"name": "pocketmine/binaryutils",
|
||||
@ -590,16 +590,16 @@
|
||||
},
|
||||
{
|
||||
"name": "pocketmine/locale-data",
|
||||
"version": "2.9.3",
|
||||
"version": "2.10.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/pmmp/Language.git",
|
||||
"reference": "73db4397b4150b29819bf39cc371924cc2e3f502"
|
||||
"reference": "d641577c8b15d9e60750dd681c0d684b89ae55e1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/pmmp/Language/zipball/73db4397b4150b29819bf39cc371924cc2e3f502",
|
||||
"reference": "73db4397b4150b29819bf39cc371924cc2e3f502",
|
||||
"url": "https://api.github.com/repos/pmmp/Language/zipball/d641577c8b15d9e60750dd681c0d684b89ae55e1",
|
||||
"reference": "d641577c8b15d9e60750dd681c0d684b89ae55e1",
|
||||
"shasum": ""
|
||||
},
|
||||
"type": "library",
|
||||
@ -607,9 +607,9 @@
|
||||
"description": "Language resources used by PocketMine-MP",
|
||||
"support": {
|
||||
"issues": "https://github.com/pmmp/Language/issues",
|
||||
"source": "https://github.com/pmmp/Language/tree/2.9.3"
|
||||
"source": "https://github.com/pmmp/Language/tree/2.10.3"
|
||||
},
|
||||
"time": "2022-11-12T13:59:25+00:00"
|
||||
"time": "2022-11-25T14:21:36+00:00"
|
||||
},
|
||||
{
|
||||
"name": "pocketmine/log",
|
||||
@ -1765,16 +1765,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan",
|
||||
"version": "1.9.1",
|
||||
"version": "1.9.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/phpstan.git",
|
||||
"reference": "a59c8b5bfd4a236f27efc8b5ce72c313c2b54b5f"
|
||||
"reference": "d6fdf01c53978b6429f1393ba4afeca39cc68afa"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/a59c8b5bfd4a236f27efc8b5ce72c313c2b54b5f",
|
||||
"reference": "a59c8b5bfd4a236f27efc8b5ce72c313c2b54b5f",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/d6fdf01c53978b6429f1393ba4afeca39cc68afa",
|
||||
"reference": "d6fdf01c53978b6429f1393ba4afeca39cc68afa",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -1804,7 +1804,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/phpstan/phpstan/issues",
|
||||
"source": "https://github.com/phpstan/phpstan/tree/1.9.1"
|
||||
"source": "https://github.com/phpstan/phpstan/tree/1.9.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -1820,7 +1820,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-11-04T13:35:59+00:00"
|
||||
"time": "2022-11-10T09:56:11+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan-phpunit",
|
||||
|
@ -26,6 +26,7 @@ namespace pocketmine\block;
|
||||
use pocketmine\block\utils\CoralType;
|
||||
use pocketmine\block\utils\CoralTypeTrait;
|
||||
use pocketmine\block\utils\SupportType;
|
||||
use pocketmine\event\block\BlockDeathEvent;
|
||||
use pocketmine\item\Item;
|
||||
use function mt_rand;
|
||||
|
||||
@ -45,7 +46,11 @@ abstract class BaseCoral extends Transparent{
|
||||
|
||||
public function onScheduledUpdate() : void{
|
||||
if(!$this->dead && !$this->isCoveredWithWater()){
|
||||
$this->position->getWorld()->setBlock($this->position, $this->setDead(true));
|
||||
$ev = new BlockDeathEvent($this, $this->setDead(true));
|
||||
$ev->call();
|
||||
if(!$ev->isCancelled()){
|
||||
$this->position->getWorld()->setBlock($this->position, $ev->getNewState());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -25,6 +25,7 @@ namespace pocketmine\block;
|
||||
|
||||
use pocketmine\block\utils\CoralType;
|
||||
use pocketmine\block\utils\CoralTypeTrait;
|
||||
use pocketmine\event\block\BlockDeathEvent;
|
||||
use pocketmine\item\Item;
|
||||
use function mt_rand;
|
||||
|
||||
@ -54,7 +55,11 @@ final class CoralBlock extends Opaque{
|
||||
}
|
||||
}
|
||||
if(!$hasWater){
|
||||
$world->setBlock($this->position, $this->setDead(true));
|
||||
$ev = new BlockDeathEvent($this, $this->setDead(true));
|
||||
$ev->call();
|
||||
if(!$ev->isCancelled()){
|
||||
$world->setBlock($this->position, $ev->getNewState());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -32,6 +32,9 @@ use pocketmine\math\Facing;
|
||||
use pocketmine\math\Vector3;
|
||||
use pocketmine\player\Player;
|
||||
use pocketmine\world\BlockTransaction;
|
||||
use pocketmine\world\sound\ItemFrameAddItemSound;
|
||||
use pocketmine\world\sound\ItemFrameRemoveItemSound;
|
||||
use pocketmine\world\sound\ItemFrameRotateItemSound;
|
||||
use function is_infinite;
|
||||
use function is_nan;
|
||||
use function lcg_value;
|
||||
@ -149,8 +152,12 @@ class ItemFrame extends Flowable{
|
||||
public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player $player = null, array &$returnedItems = []) : bool{
|
||||
if($this->framedItem !== null){
|
||||
$this->itemRotation = ($this->itemRotation + 1) % self::ROTATIONS;
|
||||
|
||||
$this->position->getWorld()->addSound($this->position, new ItemFrameRotateItemSound());
|
||||
}elseif(!$item->isNull()){
|
||||
$this->framedItem = $item->pop();
|
||||
|
||||
$this->position->getWorld()->addSound($this->position, new ItemFrameAddItemSound());
|
||||
}else{
|
||||
return true;
|
||||
}
|
||||
@ -167,6 +174,7 @@ class ItemFrame extends Flowable{
|
||||
$world = $this->position->getWorld();
|
||||
if(lcg_value() <= $this->itemDropChance){
|
||||
$world->dropItem($this->position->add(0.5, 0.5, 0.5), clone $this->framedItem);
|
||||
$world->addSound($this->position, new ItemFrameRemoveItemSound());
|
||||
}
|
||||
$this->setFramedItem(null);
|
||||
$world->setBlock($this->position, $this);
|
||||
|
@ -53,7 +53,7 @@ class FormattedCommandAlias extends Command{
|
||||
string $alias,
|
||||
private array $formatStrings
|
||||
){
|
||||
parent::__construct($alias);
|
||||
parent::__construct($alias, KnownTranslationFactory::pocketmine_command_userDefined_description());
|
||||
}
|
||||
|
||||
public function execute(CommandSender $sender, string $commandLabel, array $args){
|
||||
|
@ -43,6 +43,7 @@ use function get_loaded_extensions;
|
||||
use function json_encode;
|
||||
use function ksort;
|
||||
use function max;
|
||||
use function mb_scrub;
|
||||
use function mb_strtoupper;
|
||||
use function microtime;
|
||||
use function ob_end_clean;
|
||||
@ -196,12 +197,14 @@ class CrashDump{
|
||||
$error["message"] = substr($error["message"], 0, $pos);
|
||||
}
|
||||
}
|
||||
$error["message"] = mb_scrub($error["message"], 'UTF-8');
|
||||
|
||||
if(isset($lastError)){
|
||||
if(isset($lastError["trace"])){
|
||||
$lastError["trace"] = Utils::printableTrace($lastError["trace"]);
|
||||
}
|
||||
$this->data->lastError = $lastError;
|
||||
$this->data->lastError["message"] = mb_scrub($this->data->lastError["message"], 'UTF-8');
|
||||
}
|
||||
|
||||
$this->data->error = $error;
|
||||
|
32
src/event/block/BlockDeathEvent.php
Normal file
32
src/event/block/BlockDeathEvent.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace pocketmine\event\block;
|
||||
|
||||
/**
|
||||
* Called when a block dies.
|
||||
* This could be things like corals dying due to no water being nearby.
|
||||
*/
|
||||
class BlockDeathEvent extends BaseBlockChangeEvent{
|
||||
|
||||
}
|
@ -23,11 +23,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace pocketmine\event\block;
|
||||
|
||||
use pocketmine\event\Cancellable;
|
||||
|
||||
/**
|
||||
* Called when plants or crops grow.
|
||||
*/
|
||||
class BlockGrowEvent extends BaseBlockChangeEvent implements Cancellable{
|
||||
class BlockGrowEvent extends BaseBlockChangeEvent{
|
||||
|
||||
}
|
||||
|
@ -26,6 +26,7 @@ namespace pocketmine\event\player;
|
||||
use pocketmine\command\CommandSender;
|
||||
use pocketmine\event\Cancellable;
|
||||
use pocketmine\event\CancellableTrait;
|
||||
use pocketmine\lang\KnownTranslationKeys;
|
||||
use pocketmine\player\Player;
|
||||
use pocketmine\utils\Utils;
|
||||
|
||||
@ -42,7 +43,7 @@ class PlayerChatEvent extends PlayerEvent implements Cancellable{
|
||||
Player $player,
|
||||
protected string $message,
|
||||
protected array $recipients,
|
||||
protected string $format = "chat.type.text"
|
||||
protected string $format = KnownTranslationKeys::CHAT_TYPE_TEXT
|
||||
){
|
||||
$this->player = $player;
|
||||
}
|
||||
|
@ -30,7 +30,20 @@ use pocketmine\utils\Utils;
|
||||
use function is_a;
|
||||
|
||||
/**
|
||||
* Allows the creation of players overriding the base Player class
|
||||
* Allows the use of custom Player classes. This enables overriding built-in Player methods to change behaviour that is
|
||||
* not possible to alter any other way.
|
||||
*
|
||||
* You probably don't need this event, and found your way here because you looked at some code in an old plugin that
|
||||
* abused it (very common). Instead of using custom player classes, you should consider making session classes instead.
|
||||
*
|
||||
* @see https://github.com/pmmp/SessionsDemo
|
||||
*
|
||||
* This event is a power-user feature, and multiple plugins using it at the same time will conflict and break unless
|
||||
* they've been designed to work together. This means that it's only usually useful in private plugins.
|
||||
*
|
||||
* WARNING: This should NOT be used for adding extra functions or properties. This is intended for **overriding existing
|
||||
* core behaviour**, and should only be used if you know EXACTLY what you're doing.
|
||||
* Custom player classes may break in any update without warning. This event isn't much more than glorified reflection.
|
||||
*/
|
||||
class PlayerCreationEvent extends Event{
|
||||
|
||||
@ -54,6 +67,8 @@ class PlayerCreationEvent extends Event{
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the base class that the final player class must extend.
|
||||
*
|
||||
* @phpstan-return class-string<Player>
|
||||
*/
|
||||
public function getBaseClass() : string{
|
||||
@ -61,6 +76,10 @@ class PlayerCreationEvent extends Event{
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the class that the final player class must extend.
|
||||
* The new base class must be a subclass of the current base class.
|
||||
* This can (perhaps) be used to limit the options for custom player classes provided by other plugins.
|
||||
*
|
||||
* @phpstan-param class-string<Player> $class
|
||||
*/
|
||||
public function setBaseClass(string $class) : void{
|
||||
@ -72,6 +91,8 @@ class PlayerCreationEvent extends Event{
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the class that will be instantiated to create the player after the event.
|
||||
*
|
||||
* @phpstan-return class-string<Player>
|
||||
*/
|
||||
public function getPlayerClass() : string{
|
||||
@ -79,6 +100,9 @@ class PlayerCreationEvent extends Event{
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the class that will be instantiated to create the player after the event. The class must not be abstract,
|
||||
* and must be an instance of the base class.
|
||||
*
|
||||
* @phpstan-param class-string<Player> $class
|
||||
*/
|
||||
public function setPlayerClass(string $class) : void{
|
||||
|
@ -33,12 +33,25 @@ use pocketmine\utils\ObjectSet;
|
||||
interface Inventory{
|
||||
public const MAX_STACK = 64;
|
||||
|
||||
/**
|
||||
* Returns the number of slots in the inventory.
|
||||
*/
|
||||
public function getSize() : int;
|
||||
|
||||
/**
|
||||
* Returns the maximum stack size for items in this inventory. Individual item types (such as armor or tools) may
|
||||
* have a smaller maximum stack size.
|
||||
*/
|
||||
public function getMaxStackSize() : int;
|
||||
|
||||
/**
|
||||
* Sets the maximum stack size for items in this inventory.
|
||||
*/
|
||||
public function setMaxStackSize(int $size) : void;
|
||||
|
||||
/**
|
||||
* Returns the item in the specified slot.
|
||||
*/
|
||||
public function getItem(int $index) : Item;
|
||||
|
||||
/**
|
||||
@ -65,10 +78,11 @@ interface Inventory{
|
||||
public function setContents(array $items) : void;
|
||||
|
||||
/**
|
||||
* Stores the given Items in the inventory. This will try to fill
|
||||
* existing stacks and empty slots as well as it can.
|
||||
* Stores the given Items in the inventory.
|
||||
* This will add to any non-full existing stacks first, and then put the remaining items in empty slots if there are
|
||||
* any available.
|
||||
*
|
||||
* Returns the Items that did not fit.
|
||||
* Returns an array of items which could not fit in the inventory.
|
||||
*
|
||||
* @return Item[]
|
||||
*/
|
||||
@ -85,15 +99,20 @@ interface Inventory{
|
||||
public function getAddableItemQuantity(Item $item) : int;
|
||||
|
||||
/**
|
||||
* Checks if the inventory contains any Item with the same material data.
|
||||
* It will check id, amount, and metadata (if not null)
|
||||
* Returns whether the total amount of matching items is at least the stack size of the given item. Multiple stacks
|
||||
* of the same item are added together.
|
||||
*
|
||||
* If the input item has specific NBT, only items with the same type and NBT will match. Otherwise, only the item
|
||||
* type is checked.
|
||||
*/
|
||||
public function contains(Item $item) : bool;
|
||||
|
||||
/**
|
||||
* Will return all the Items that has the same id and metadata (if not null).
|
||||
* Won't check amount
|
||||
* The returned array is indexed by slot number.
|
||||
* Returns all matching items in the inventory, irrespective of stack size. The returned array is indexed by slot
|
||||
* number.
|
||||
*
|
||||
* If the input item has specific NBT, only items with the same type and NBT will match. Otherwise, only the item
|
||||
* type is checked.
|
||||
*
|
||||
* @return Item[]
|
||||
* @phpstan-return array<int, Item>
|
||||
@ -101,10 +120,10 @@ interface Inventory{
|
||||
public function all(Item $item) : array;
|
||||
|
||||
/**
|
||||
* Returns the first slot number containing an item with the same ID, damage (if not any-damage), NBT (if not empty)
|
||||
* and count >= to the count of the specified item stack.
|
||||
* Returns the first slot number containing a matching item with a stack size greater than or equal to the input item.
|
||||
*
|
||||
* If $exact is true, only items with equal ID, damage, NBT and count will match.
|
||||
* If the input item has specific NBT, or if $exact is true, only items with the same type and NBT will match.
|
||||
* Otherwise, only the item type is checked.
|
||||
*/
|
||||
public function first(Item $item, bool $exact = false) : int;
|
||||
|
||||
@ -119,13 +138,19 @@ interface Inventory{
|
||||
public function isSlotEmpty(int $index) : bool;
|
||||
|
||||
/**
|
||||
* Will remove all the Items that has the same id and metadata (if not null)
|
||||
* Clears all slots containing items equivalent to the given item.
|
||||
*
|
||||
* If the input item has specific NBT, only items with the same type and NBT will match. Otherwise, only the item
|
||||
* type is checked.
|
||||
*/
|
||||
public function remove(Item $item) : void;
|
||||
|
||||
/**
|
||||
* Removes the given Item from the inventory.
|
||||
* It will return the Items that couldn't be removed.
|
||||
* Removes items from the inventory in the amounts specified by the given itemstacks.
|
||||
* Returns an array of items that couldn't be removed.
|
||||
*
|
||||
* If the input item has specific NBT, only items with the same type and NBT will match. Otherwise, only the item
|
||||
* type is checked.
|
||||
*
|
||||
* @return Item[]
|
||||
*/
|
||||
|
@ -863,6 +863,10 @@ final class KnownTranslationFactory{
|
||||
return new Translatable(KnownTranslationKeys::ENCHANTMENT_SOUL_SPEED, []);
|
||||
}
|
||||
|
||||
public static function enchantment_swift_sneak() : Translatable{
|
||||
return new Translatable(KnownTranslationKeys::ENCHANTMENT_SWIFT_SNEAK, []);
|
||||
}
|
||||
|
||||
public static function enchantment_thorns() : Translatable{
|
||||
return new Translatable(KnownTranslationKeys::ENCHANTMENT_THORNS, []);
|
||||
}
|
||||
@ -954,6 +958,10 @@ final class KnownTranslationFactory{
|
||||
return new Translatable(KnownTranslationKeys::ITEM_RECORD_13_DESC, []);
|
||||
}
|
||||
|
||||
public static function item_record_5_desc() : Translatable{
|
||||
return new Translatable(KnownTranslationKeys::ITEM_RECORD_5_DESC, []);
|
||||
}
|
||||
|
||||
public static function item_record_blocks_desc() : Translatable{
|
||||
return new Translatable(KnownTranslationKeys::ITEM_RECORD_BLOCKS_DESC, []);
|
||||
}
|
||||
@ -978,6 +986,10 @@ final class KnownTranslationFactory{
|
||||
return new Translatable(KnownTranslationKeys::ITEM_RECORD_MELLOHI_DESC, []);
|
||||
}
|
||||
|
||||
public static function item_record_otherside_desc() : Translatable{
|
||||
return new Translatable(KnownTranslationKeys::ITEM_RECORD_OTHERSIDE_DESC, []);
|
||||
}
|
||||
|
||||
public static function item_record_pigstep_desc() : Translatable{
|
||||
return new Translatable(KnownTranslationKeys::ITEM_RECORD_PIGSTEP_DESC, []);
|
||||
}
|
||||
|
@ -190,6 +190,7 @@ final class KnownTranslationKeys{
|
||||
public const ENCHANTMENT_PROTECT_FIRE = "enchantment.protect.fire";
|
||||
public const ENCHANTMENT_PROTECT_PROJECTILE = "enchantment.protect.projectile";
|
||||
public const ENCHANTMENT_SOUL_SPEED = "enchantment.soul_speed";
|
||||
public const ENCHANTMENT_SWIFT_SNEAK = "enchantment.swift_sneak";
|
||||
public const ENCHANTMENT_THORNS = "enchantment.thorns";
|
||||
public const ENCHANTMENT_TRIDENTCHANNELING = "enchantment.tridentChanneling";
|
||||
public const ENCHANTMENT_TRIDENTIMPALING = "enchantment.tridentImpaling";
|
||||
@ -211,12 +212,14 @@ final class KnownTranslationKeys{
|
||||
public const IP_WARNING = "ip_warning";
|
||||
public const ITEM_RECORD_11_DESC = "item.record_11.desc";
|
||||
public const ITEM_RECORD_13_DESC = "item.record_13.desc";
|
||||
public const ITEM_RECORD_5_DESC = "item.record_5.desc";
|
||||
public const ITEM_RECORD_BLOCKS_DESC = "item.record_blocks.desc";
|
||||
public const ITEM_RECORD_CAT_DESC = "item.record_cat.desc";
|
||||
public const ITEM_RECORD_CHIRP_DESC = "item.record_chirp.desc";
|
||||
public const ITEM_RECORD_FAR_DESC = "item.record_far.desc";
|
||||
public const ITEM_RECORD_MALL_DESC = "item.record_mall.desc";
|
||||
public const ITEM_RECORD_MELLOHI_DESC = "item.record_mellohi.desc";
|
||||
public const ITEM_RECORD_OTHERSIDE_DESC = "item.record_otherside.desc";
|
||||
public const ITEM_RECORD_PIGSTEP_DESC = "item.record_pigstep.desc";
|
||||
public const ITEM_RECORD_STAL_DESC = "item.record_stal.desc";
|
||||
public const ITEM_RECORD_STRAD_DESC = "item.record_strad.desc";
|
||||
|
@ -171,6 +171,14 @@ class Language{
|
||||
return $this->internalGet($id) ?? $id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
* @phpstan-return array<string, string>
|
||||
*/
|
||||
public function getAll() : array{
|
||||
return $this->lang;
|
||||
}
|
||||
|
||||
protected function parseTranslation(string $text, ?string $onlyPrefix = null) : string{
|
||||
$newString = "";
|
||||
|
||||
|
@ -54,7 +54,7 @@ class Network{
|
||||
|
||||
private BidirectionalBandwidthStatsTracker $bandwidthTracker;
|
||||
private string $name;
|
||||
private NetworkSessionManager$sessionManager;
|
||||
private NetworkSessionManager $sessionManager;
|
||||
|
||||
public function __construct(
|
||||
private \Logger $logger
|
||||
|
@ -166,8 +166,10 @@ abstract class Terminal{
|
||||
case Utils::OS_LINUX:
|
||||
case Utils::OS_MACOS:
|
||||
case Utils::OS_BSD:
|
||||
self::getEscapeCodes();
|
||||
return;
|
||||
if(getenv('TERM') !== false){
|
||||
self::getEscapeCodes();
|
||||
return;
|
||||
}
|
||||
|
||||
case Utils::OS_WINDOWS:
|
||||
case Utils::OS_ANDROID:
|
||||
|
35
src/world/sound/ItemFrameAddItemSound.php
Normal file
35
src/world/sound/ItemFrameAddItemSound.php
Normal file
@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace pocketmine\world\sound;
|
||||
|
||||
use pocketmine\math\Vector3;
|
||||
use pocketmine\network\mcpe\protocol\LevelEventPacket;
|
||||
use pocketmine\network\mcpe\protocol\types\LevelEvent;
|
||||
|
||||
class ItemFrameAddItemSound implements Sound{
|
||||
|
||||
public function encode(Vector3 $pos) : array{
|
||||
return [LevelEventPacket::create(LevelEvent::SOUND_ITEMFRAME_ADD_ITEM, 0, $pos)];
|
||||
}
|
||||
}
|
35
src/world/sound/ItemFrameRemoveItemSound.php
Normal file
35
src/world/sound/ItemFrameRemoveItemSound.php
Normal file
@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace pocketmine\world\sound;
|
||||
|
||||
use pocketmine\math\Vector3;
|
||||
use pocketmine\network\mcpe\protocol\LevelEventPacket;
|
||||
use pocketmine\network\mcpe\protocol\types\LevelEvent;
|
||||
|
||||
class ItemFrameRemoveItemSound implements Sound{
|
||||
|
||||
public function encode(Vector3 $pos) : array{
|
||||
return [LevelEventPacket::create(LevelEvent::SOUND_ITEMFRAME_REMOVE_ITEM, 0, $pos)];
|
||||
}
|
||||
}
|
35
src/world/sound/ItemFrameRotateItemSound.php
Normal file
35
src/world/sound/ItemFrameRotateItemSound.php
Normal file
@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace pocketmine\world\sound;
|
||||
|
||||
use pocketmine\math\Vector3;
|
||||
use pocketmine\network\mcpe\protocol\LevelEventPacket;
|
||||
use pocketmine\network\mcpe\protocol\types\LevelEvent;
|
||||
|
||||
class ItemFrameRotateItemSound implements Sound{
|
||||
|
||||
public function encode(Vector3 $pos) : array{
|
||||
return [LevelEventPacket::create(LevelEvent::SOUND_ITEMFRAME_ROTATE_ITEM, 0, $pos)];
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user