diff --git a/src/pocketmine/inventory/CraftingManager.php b/src/pocketmine/inventory/CraftingManager.php index 70d3c7407..91805188e 100644 --- a/src/pocketmine/inventory/CraftingManager.php +++ b/src/pocketmine/inventory/CraftingManager.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace pocketmine\inventory; use pocketmine\item\Item; -use pocketmine\item\ItemFactory; use pocketmine\network\mcpe\protocol\BatchPacket; use pocketmine\network\mcpe\protocol\CraftingDataPacket; use pocketmine\Server; @@ -56,7 +55,7 @@ class CraftingManager{ foreach($recipes as $recipe){ switch($recipe["type"]){ - case 0: + case "shapeless": if($recipe["block"] !== "crafting_table"){ //TODO: filter others out for now to avoid breaking economics break; } @@ -65,7 +64,7 @@ class CraftingManager{ array_map(function(array $data) : Item{ return Item::jsonDeserialize($data); }, $recipe["output"]) )); break; - case 1: + case "shaped": if($recipe["block"] !== "crafting_table"){ //TODO: filter others out for now to avoid breaking economics break; } @@ -75,14 +74,14 @@ class CraftingManager{ array_map(function(array $data) : Item{ return Item::jsonDeserialize($data); }, $recipe["output"]) )); break; - case 2: - case 3: + case "smelting": if($recipe["block"] !== "furnace"){ //TODO: filter others out for now to avoid breaking economics break; } - $result = $recipe["output"]; - $resultItem = Item::jsonDeserialize($result); - $this->registerRecipe(new FurnaceRecipe($resultItem, ItemFactory::get($recipe["inputId"], $recipe["inputDamage"] ?? -1, 1))); + $this->registerRecipe(new FurnaceRecipe( + Item::jsonDeserialize($recipe["output"]), + Item::jsonDeserialize($recipe["input"])) + ); break; default: break; diff --git a/src/pocketmine/network/mcpe/protocol/CraftingDataPacket.php b/src/pocketmine/network/mcpe/protocol/CraftingDataPacket.php index 42565e00f..776be76bd 100644 --- a/src/pocketmine/network/mcpe/protocol/CraftingDataPacket.php +++ b/src/pocketmine/network/mcpe/protocol/CraftingDataPacket.php @@ -30,6 +30,7 @@ use pocketmine\inventory\FurnaceRecipe; use pocketmine\inventory\ShapedRecipe; use pocketmine\inventory\ShapelessRecipe; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\network\mcpe\NetworkBinaryStream; use pocketmine\network\mcpe\NetworkSession; use function count; @@ -106,10 +107,15 @@ class CraftingDataPacket extends DataPacket{ break; case self::ENTRY_FURNACE: case self::ENTRY_FURNACE_DATA: - $entry["inputId"] = $this->getVarInt(); + $inputId = $this->getVarInt(); + $inputData = -1; if($recipeType === self::ENTRY_FURNACE_DATA){ - $entry["inputDamage"] = $this->getVarInt(); + $inputData = $this->getVarInt(); + if($inputData === 0x7fff){ + $inputData = -1; + } } + $entry["input"] = ItemFactory::get($inputId, $inputData); $entry["output"] = $this->getSlot(); $entry["block"] = $this->getString(); diff --git a/src/pocketmine/resources/vanilla b/src/pocketmine/resources/vanilla index 268bfa763..8696a27a5 160000 --- a/src/pocketmine/resources/vanilla +++ b/src/pocketmine/resources/vanilla @@ -1 +1 @@ -Subproject commit 268bfa763de208366c3d9712ecf697172f95bb55 +Subproject commit 8696a27a5d05cdae032bf2503973dedff7d21aa9