From d2e4eb40b3b2b3624c062eed933f6acc5a5dcdb9 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Fri, 8 Nov 2019 08:29:25 +0000 Subject: [PATCH 1/6] CompletedUsingItemPacket is superfluous --- src/pocketmine/Player.php | 13 +------------ src/pocketmine/item/Bow.php | 5 ----- src/pocketmine/item/Bucket.php | 9 --------- src/pocketmine/item/Food.php | 5 ----- src/pocketmine/item/Item.php | 5 ----- src/pocketmine/item/Potion.php | 5 ----- src/pocketmine/item/ProjectileItem.php | 5 ----- 7 files changed, 1 insertion(+), 46 deletions(-) diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 21cd48b7f..fcb6d9085 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -99,7 +99,6 @@ use pocketmine\nbt\tag\ByteTag; use pocketmine\nbt\tag\CompoundTag; use pocketmine\nbt\tag\DoubleTag; use pocketmine\nbt\tag\ListTag; -use pocketmine\network\mcpe\protocol\CompletedUsingItemPacket; use pocketmine\network\mcpe\PlayerNetworkSessionAdapter; use pocketmine\network\mcpe\protocol\ActorEventPacket; use pocketmine\network\mcpe\protocol\AdventureSettingsPacket; @@ -1114,13 +1113,6 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ } } - protected function sendCompletedUsingItemPacket(int $itemId, int $action){ - $pk = new CompletedUsingItemPacket(); - $pk->itemId = $itemId; - $pk->action = $action; - $this->sendDataPacket($pk); - } - protected function sendRespawnPacket(Vector3 $pos, int $respawnState = RespawnPacket::SEARCHING_FOR_SPAWN){ $pk = new RespawnPacket(); $pk->position = $pos->add(0, $this->baseOffset, 0); @@ -2547,9 +2539,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ } $this->setUsingItem(false); - if($item->onUse($this)){ - $this->sendCompletedUsingItemPacket($item->getId(), $item->getCompletedAction()); - } + $item->onUse($this); return true; default: @@ -2667,7 +2657,6 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ if($item->onReleaseUsing($this)){ $this->resetItemCooldown($item); $this->inventory->setItemInHand($item); - $this->sendCompletedUsingItemPacket($item->getId(), $item->getCompletedAction()); } }else{ break; diff --git a/src/pocketmine/item/Bow.php b/src/pocketmine/item/Bow.php index dbce96828..48428b576 100644 --- a/src/pocketmine/item/Bow.php +++ b/src/pocketmine/item/Bow.php @@ -29,7 +29,6 @@ use pocketmine\entity\projectile\Projectile; use pocketmine\event\entity\EntityShootBowEvent; use pocketmine\event\entity\ProjectileLaunchEvent; use pocketmine\item\enchantment\Enchantment; -use pocketmine\network\mcpe\protocol\CompletedUsingItemPacket; use pocketmine\network\mcpe\protocol\LevelSoundEventPacket; use pocketmine\Player; use function intdiv; @@ -48,10 +47,6 @@ class Bow extends Tool{ return 385; } - public function getCompletedAction(){ - return CompletedUsingItemPacket::ACTION_SHOOT; - } - public function onReleaseUsing(Player $player) : bool{ if($player->isSurvival() and !$player->getInventory()->contains(ItemFactory::get(Item::ARROW, 0, 1))){ $player->getInventory()->sendContents($player); diff --git a/src/pocketmine/item/Bucket.php b/src/pocketmine/item/Bucket.php index 89612a438..380b7a9b3 100644 --- a/src/pocketmine/item/Bucket.php +++ b/src/pocketmine/item/Bucket.php @@ -32,7 +32,6 @@ use pocketmine\event\player\PlayerBucketEmptyEvent; use pocketmine\event\player\PlayerBucketFillEvent; use pocketmine\event\player\PlayerItemConsumeEvent; use pocketmine\math\Vector3; -use pocketmine\network\mcpe\protocol\CompletedUsingItemPacket; use pocketmine\Player; class Bucket extends Item implements Consumable{ @@ -117,14 +116,6 @@ class Bucket extends Item implements Consumable{ $consumer->removeAllEffects(); } - public function getCompletedAction(){ - if($this->canBeConsumed()){ - return CompletedUsingItemPacket::ACTION_CONSUME; - }else{ - return CompletedUsingItemPacket::ACTION_POUR_BUCKET; - } - } - public function onUse(Player $player) : bool{ if($this->canBeConsumed()){ $slot = $player->getInventory()->getItemInHand(); diff --git a/src/pocketmine/item/Food.php b/src/pocketmine/item/Food.php index ac1ca4d2e..a97c02822 100644 --- a/src/pocketmine/item/Food.php +++ b/src/pocketmine/item/Food.php @@ -26,7 +26,6 @@ namespace pocketmine\item; use pocketmine\entity\Living; use pocketmine\event\player\PlayerItemConsumeEvent; use pocketmine\math\Vector3; -use pocketmine\network\mcpe\protocol\CompletedUsingItemPacket; use pocketmine\Player; abstract class Food extends Item implements FoodSource{ @@ -45,10 +44,6 @@ abstract class Food extends Item implements FoodSource{ return []; } - public function getCompletedAction(){ - return CompletedUsingItemPacket::ACTION_EAT; - } - public function onUse(Player $player) : bool{ $slot = $player->getInventory()->getItemInHand(); diff --git a/src/pocketmine/item/Item.php b/src/pocketmine/item/Item.php index bc02fd9f1..16c3df97a 100644 --- a/src/pocketmine/item/Item.php +++ b/src/pocketmine/item/Item.php @@ -41,7 +41,6 @@ use pocketmine\nbt\tag\ListTag; use pocketmine\nbt\tag\NamedTag; use pocketmine\nbt\tag\ShortTag; use pocketmine\nbt\tag\StringTag; -use pocketmine\network\mcpe\protocol\CompletedUsingItemPacket; use pocketmine\Player; use pocketmine\utils\Binary; use function array_map; @@ -849,10 +848,6 @@ class Item implements ItemIds, \JsonSerializable{ return 0; } - public function getCompletedAction(){ - return CompletedUsingItemPacket::ACTION_UNKNOWN; - } - public function onUse(Player $player) : bool{ return false; } diff --git a/src/pocketmine/item/Potion.php b/src/pocketmine/item/Potion.php index 64a0246c4..0221e50a1 100644 --- a/src/pocketmine/item/Potion.php +++ b/src/pocketmine/item/Potion.php @@ -27,7 +27,6 @@ use pocketmine\entity\Effect; use pocketmine\entity\EffectInstance; use pocketmine\entity\Living; use pocketmine\event\player\PlayerItemConsumeEvent; -use pocketmine\network\mcpe\protocol\CompletedUsingItemPacket; use pocketmine\Player; class Potion extends Item implements Consumable{ @@ -239,10 +238,6 @@ class Potion extends Item implements Consumable{ return ItemFactory::get(Item::GLASS_BOTTLE); } - public function getCompletedAction(){ - return CompletedUsingItemPacket::ACTION_CONSUME; - } - public function onUse(Player $player) : bool{ $slot = $player->getInventory()->getItemInHand(); diff --git a/src/pocketmine/item/ProjectileItem.php b/src/pocketmine/item/ProjectileItem.php index 3e824316c..88bebf3e1 100644 --- a/src/pocketmine/item/ProjectileItem.php +++ b/src/pocketmine/item/ProjectileItem.php @@ -29,7 +29,6 @@ use pocketmine\entity\projectile\Projectile; use pocketmine\event\entity\ProjectileLaunchEvent; use pocketmine\math\Vector3; use pocketmine\nbt\tag\CompoundTag; -use pocketmine\network\mcpe\protocol\CompletedUsingItemPacket; use pocketmine\network\mcpe\protocol\LevelSoundEventPacket; use pocketmine\Player; @@ -48,10 +47,6 @@ abstract class ProjectileItem extends Item{ } - public function getCompletedAction(){ - return CompletedUsingItemPacket::ACTION_THROW; - } - public function onClickAir(Player $player, Vector3 $directionVector) : bool{ $nbt = Entity::createBaseNBT($player->add(0, $player->getEyeHeight(), 0), $directionVector, $player->yaw, $player->pitch); $this->addExtraTags($nbt); From 73b923e3a1cc5822f113fb2892392e08bca546e1 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Fri, 8 Nov 2019 11:08:22 +0000 Subject: [PATCH 2/6] cleanup eating clusterfuck --- src/pocketmine/Player.php | 31 ++++++++++++++++++++++--------- src/pocketmine/item/Bucket.php | 24 ------------------------ src/pocketmine/item/Food.php | 28 ---------------------------- src/pocketmine/item/Item.php | 4 ---- src/pocketmine/item/Potion.php | 23 ----------------------- 5 files changed, 22 insertions(+), 88 deletions(-) diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index fcb6d9085..a36d074a4 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -2504,6 +2504,27 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ return true; case InventoryTransactionPacket::USE_ITEM_ACTION_CLICK_AIR: + if($this->isUsingItem()){ + $slot = $this->inventory->getItemInHand(); + if($slot instanceof Consumable){ + $ev = new PlayerItemConsumeEvent($this, $slot); + if($this->hasItemCooldown($slot)){ + $ev->setCancelled(); + } + $ev->call(); + if($ev->isCancelled() or !$this->consumeObject($slot)){ + $this->inventory->sendContents($this); + return true; + } + $this->resetItemCooldown($slot); + if($this->isSurvival()){ + $slot->pop(); + $this->inventory->setItemInHand($slot); + $this->inventory->addItem($slot->getResidue()); + } + $this->setUsingItem(false); + } + } $directionVector = $this->getDirectionVector(); if($this->isCreative()){ @@ -2533,13 +2554,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ } } - if(!$this->isUsingItem()){ - $this->setUsingItem(true); - return true; - } - - $this->setUsingItem(false); - $item->onUse($this); + $this->setUsingItem(true); return true; default: @@ -2663,8 +2678,6 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ } return true; - case InventoryTransactionPacket::RELEASE_ITEM_ACTION_CONSUME: - break; default: break; } diff --git a/src/pocketmine/item/Bucket.php b/src/pocketmine/item/Bucket.php index 380b7a9b3..ffe4faa62 100644 --- a/src/pocketmine/item/Bucket.php +++ b/src/pocketmine/item/Bucket.php @@ -115,28 +115,4 @@ class Bucket extends Item implements Consumable{ public function onConsume(Living $consumer){ $consumer->removeAllEffects(); } - - public function onUse(Player $player) : bool{ - if($this->canBeConsumed()){ - $slot = $player->getInventory()->getItemInHand(); - - $ev = new PlayerItemConsumeEvent($player, $slot); - $ev->call(); - - /** @var $slot Consumable */ - if($ev->isCancelled() or !$player->consumeObject($slot)){ - $player->getInventory()->sendContents($player); - return true; - } - - if($player->isSurvival()){ - $slot->pop(); - $player->getInventory()->setItemInHand($slot); - $player->getInventory()->addItem($slot->getResidue()); - } - - return true; - } - return false; - } } diff --git a/src/pocketmine/item/Food.php b/src/pocketmine/item/Food.php index a97c02822..36f4cee4f 100644 --- a/src/pocketmine/item/Food.php +++ b/src/pocketmine/item/Food.php @@ -24,9 +24,6 @@ declare(strict_types=1); namespace pocketmine\item; use pocketmine\entity\Living; -use pocketmine\event\player\PlayerItemConsumeEvent; -use pocketmine\math\Vector3; -use pocketmine\Player; abstract class Food extends Item implements FoodSource{ public function requiresHunger() : bool{ @@ -44,32 +41,7 @@ abstract class Food extends Item implements FoodSource{ return []; } - public function onUse(Player $player) : bool{ - $slot = $player->getInventory()->getItemInHand(); - - $ev = new PlayerItemConsumeEvent($player, $slot); - $ev->call(); - - /** @var $slot Consumable */ - if($ev->isCancelled() or !$player->consumeObject($slot)){ - $player->getInventory()->sendContents($player); - return true; - } - - if($player->isSurvival()){ - $slot->pop(); - $player->getInventory()->setItemInHand($slot); - $player->getInventory()->addItem($slot->getResidue()); - } - - return true; - } - public function onConsume(Living $consumer){ } - - public function onClickAir(Player $player, Vector3 $directionVector) : bool{ - return true; - } } diff --git a/src/pocketmine/item/Item.php b/src/pocketmine/item/Item.php index 16c3df97a..664e07bba 100644 --- a/src/pocketmine/item/Item.php +++ b/src/pocketmine/item/Item.php @@ -848,10 +848,6 @@ class Item implements ItemIds, \JsonSerializable{ return 0; } - public function onUse(Player $player) : bool{ - return false; - } - /** * Compares an Item to this Item and check if they match. * diff --git a/src/pocketmine/item/Potion.php b/src/pocketmine/item/Potion.php index 0221e50a1..b2b927d54 100644 --- a/src/pocketmine/item/Potion.php +++ b/src/pocketmine/item/Potion.php @@ -26,8 +26,6 @@ namespace pocketmine\item; use pocketmine\entity\Effect; use pocketmine\entity\EffectInstance; use pocketmine\entity\Living; -use pocketmine\event\player\PlayerItemConsumeEvent; -use pocketmine\Player; class Potion extends Item implements Consumable{ @@ -237,25 +235,4 @@ class Potion extends Item implements Consumable{ public function getResidue(){ return ItemFactory::get(Item::GLASS_BOTTLE); } - - public function onUse(Player $player) : bool{ - $slot = $player->getInventory()->getItemInHand(); - - $ev = new PlayerItemConsumeEvent($player, $slot); - $ev->call(); - - /** @var $slot Consumable */ - if($ev->isCancelled() or !$player->consumeObject($slot)){ - $player->getInventory()->sendContents($player); - return true; - } - - if($player->isSurvival()){ - $slot->pop(); - $player->getInventory()->setItemInHand($slot); - $player->getInventory()->addItem($slot->getResidue()); - } - - return true; - } } From f6b5301e173a7389b277239e0e308053fcb052c6 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Fri, 8 Nov 2019 11:10:20 +0000 Subject: [PATCH 3/6] Player: remove unused import --- src/pocketmine/Player.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index a36d074a4..c14f88bc0 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -80,7 +80,6 @@ use pocketmine\item\Consumable; use pocketmine\item\Durable; use pocketmine\item\enchantment\EnchantmentInstance; use pocketmine\item\enchantment\MeleeWeaponEnchantment; -use pocketmine\item\Food; use pocketmine\item\Item; use pocketmine\item\WritableBook; use pocketmine\item\WrittenBook; From e60962c31f5b0dd90fb96ec5f3956bda28dc79f0 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Fri, 8 Nov 2019 11:22:55 +0000 Subject: [PATCH 4/6] reverse BC-breaking change to Player->changeSkin() this change would cause LSP violations for subclasses --- src/pocketmine/Player.php | 4 +++- src/pocketmine/network/mcpe/PlayerNetworkSessionAdapter.php | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index c14f88bc0..e22a42291 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -836,10 +836,12 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ * Plugin developers should not use this, use setSkin() and sendSkin() instead. * * @param Skin $skin + * @param string $newSkinName + * @param string $oldSkinName * * @return bool */ - public function changeSkin(Skin $skin) : bool{ + public function changeSkin(Skin $skin, string $newSkinName, string $oldSkinName) : bool{ if(!$skin->isValid()){ return false; } diff --git a/src/pocketmine/network/mcpe/PlayerNetworkSessionAdapter.php b/src/pocketmine/network/mcpe/PlayerNetworkSessionAdapter.php index 7a41eb194..2500849f5 100644 --- a/src/pocketmine/network/mcpe/PlayerNetworkSessionAdapter.php +++ b/src/pocketmine/network/mcpe/PlayerNetworkSessionAdapter.php @@ -253,7 +253,7 @@ class PlayerNetworkSessionAdapter extends NetworkSession{ } public function handlePlayerSkin(PlayerSkinPacket $packet) : bool{ - return $this->player->changeSkin($packet->skin); + return $this->player->changeSkin($packet->skin, "", ""); } public function handleBookEdit(BookEditPacket $packet) : bool{ From 29cc9283f80bad009b3cf653dd242bfb9c166695 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Fri, 8 Nov 2019 11:29:00 +0000 Subject: [PATCH 5/6] reverse unnecessary formatting changes --- src/pocketmine/Player.php | 2 +- src/pocketmine/inventory/CraftingGrid.php | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index e22a42291..9ee384ba6 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -2721,7 +2721,6 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ if(!$this->spawned or !$this->isAlive()){ return true; } - if($packet->action === InteractPacket::ACTION_MOUSEOVER and $packet->target === 0){ //TODO HACK: silence useless spam (MCPE 1.8) //this packet is EXPECTED to only be sent when interacting with an entity, but due to some messy Mojang @@ -3825,6 +3824,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ $this->addWindow($this->cursorInventory, ContainerIds::UI, true); $this->craftingGrid = new CraftingGrid($this, CraftingGrid::SIZE_SMALL); + //TODO: more windows } diff --git a/src/pocketmine/inventory/CraftingGrid.php b/src/pocketmine/inventory/CraftingGrid.php index 739e17ed9..7d8b02c9a 100644 --- a/src/pocketmine/inventory/CraftingGrid.php +++ b/src/pocketmine/inventory/CraftingGrid.php @@ -40,7 +40,6 @@ class CraftingGrid extends BaseInventory{ public $offset; /** @var Player */ protected $holder; - /** @var int */ private $gridWidth; From a7ed933b37b178905a9e3cb1f9d4ec41d9557009 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Fri, 8 Nov 2019 11:32:09 +0000 Subject: [PATCH 6/6] superfluous import --- src/pocketmine/item/Bucket.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pocketmine/item/Bucket.php b/src/pocketmine/item/Bucket.php index ffe4faa62..3c7834350 100644 --- a/src/pocketmine/item/Bucket.php +++ b/src/pocketmine/item/Bucket.php @@ -30,7 +30,6 @@ use pocketmine\block\Liquid; use pocketmine\entity\Living; use pocketmine\event\player\PlayerBucketEmptyEvent; use pocketmine\event\player\PlayerBucketFillEvent; -use pocketmine\event\player\PlayerItemConsumeEvent; use pocketmine\math\Vector3; use pocketmine\Player;