diff --git a/src/pocketmine/network/mcpe/protocol/types/NetworkInventoryAction.php b/src/pocketmine/network/mcpe/protocol/types/NetworkInventoryAction.php index 4b0f07288..d4c64f342 100644 --- a/src/pocketmine/network/mcpe/protocol/types/NetworkInventoryAction.php +++ b/src/pocketmine/network/mcpe/protocol/types/NetworkInventoryAction.php @@ -36,6 +36,7 @@ class NetworkInventoryAction{ public const SOURCE_WORLD = 2; //drop/pickup item entity public const SOURCE_CREATIVE = 3; + public const SOURCE_CRAFTING_GRID = 100; public const SOURCE_TODO = 99999; /** @@ -47,8 +48,8 @@ class NetworkInventoryAction{ * * Expect these to change in the future. */ - public const SOURCE_TYPE_CRAFTING_ADD_INGREDIENT = -2; - public const SOURCE_TYPE_CRAFTING_REMOVE_INGREDIENT = -3; + public const SOURCE_TYPE_CRAFTING_USELESS_MAGIC_NUMBER = -2; + public const SOURCE_TYPE_CRAFTING_RESULT = -4; public const SOURCE_TYPE_CRAFTING_USE_INGREDIENT = -5; @@ -107,6 +108,12 @@ class NetworkInventoryAction{ break; case self::SOURCE_CREATIVE: break; + case self::SOURCE_CRAFTING_GRID: + $dummy = $packet->getVarInt(); + if($dummy !== self::SOURCE_TYPE_CRAFTING_USELESS_MAGIC_NUMBER){ + throw new \UnexpectedValueException("Useless magic number for crafting-grid type was $dummy, expected " . self::SOURCE_TYPE_CRAFTING_USELESS_MAGIC_NUMBER); + } + break; case self::SOURCE_TODO: $this->windowId = $packet->getVarInt(); switch($this->windowId){ @@ -144,6 +151,9 @@ class NetworkInventoryAction{ break; case self::SOURCE_CREATIVE: break; + case self::SOURCE_CRAFTING_GRID: + $packet->putVarInt(self::SOURCE_TYPE_CRAFTING_USELESS_MAGIC_NUMBER); + break; case self::SOURCE_TODO: $packet->putVarInt($this->windowId); break; @@ -190,13 +200,11 @@ class NetworkInventoryAction{ } return new CreativeInventoryAction($this->oldItem, $this->newItem, $type); + case self::SOURCE_CRAFTING_GRID: + return new SlotChangeAction($player->getCraftingGrid(), $this->inventorySlot, $this->oldItem, $this->newItem); case self::SOURCE_TODO: //These types need special handling. switch($this->windowId){ - case self::SOURCE_TYPE_CRAFTING_ADD_INGREDIENT: - case self::SOURCE_TYPE_CRAFTING_REMOVE_INGREDIENT: - $window = $player->getCraftingGrid(); - return new SlotChangeAction($window, $this->inventorySlot, $this->oldItem, $this->newItem); case self::SOURCE_TYPE_CRAFTING_RESULT: case self::SOURCE_TYPE_CRAFTING_USE_INGREDIENT: return null;