I tried to add nbt tag to item in customcraft. It didnt show any errors message but when i crafted it, it returned back the ingredient My code: PHP: public function cupObisidian(){ $cupobsidian = Item::get(Item::DIAMOND_PICKAXE); $nbt = $cupobsidian->getNamedTag() ?? new CompoundTag("", []); $nbt->setTag(new StringTag("Name", "CupObsidian")); $nbt->setTag(new StringTag("ToggleThoiGianHoi", "true")); $nbt->setTag(new StringTag("Owner", "$")); $nbt->setTag(new IntTag("SoThoiGianHoi", 15)); $cupobsidian->setNamedTag($nbt); $cupobsidian->setCustomName("§d✠§l§9 「 §cCÚP§5 OBSIDIAN §9」 §r§d✠"); $cupobsidian->addEnchantment(new EnchantmentInstance(Enchantment::getEnchantment(17), 10)); $cupobsidian->addEnchantment(new EnchantmentInstance(Enchantment::getEnchantment(15), 15)); $unbreaking = new EnchantmentInstance(Enchantment::getEnchantment(17)); $unbreaking->setLevel(10); $effective = new EnchantmentInstance(Enchantment::getEnchantment(15)); $effective->setLevel(15); $cupobsidian->addEnchantment($unbreaking); $cupobsidian->addEnchantment($effective); $cupobsidianrecipe = new ShapedRecipe(["AAA","ABA","AAA"],[ "A"=>Item::get(Item::OBSIDIAN), "B"=>Item::get(Item::DIAMOND_PICKAXE)] ,[$cupobsidian]); $cupobsidianrecipe->registerToCraftingManager($this->getServer()->getCraftingManager()); }
i tried it but it doesnt do anything My ItemCraftEvent: PHP: public function onCraft(CraftItemEvent $event){ $player = $event->getPlayer(); $items = $event->getOutputs(); foreach($items as $item){ if($item->getCustomName() === "§d✠§l§9 「 §cCÚP§5 OBSIDIAN §9」 §r§d✠"){ $item->setCustomName("§d✠§l§9 「 §cCÚP§5 OBSIDIAN §9」 §r§d✠ ĐÃ UP"); $nbt = $item->getNamedTag() ?? new CompoundTag("", []); $nbt->setTag(new StringTag("Name", "CupObsidian")); $nbt->setTag(new StringTag("ToggleThoiGianHoi", "true")); $nbt->setTag(new StringTag("Owner", $player->getName())); $nbt->setTag(new IntTag("SoThoiGianHoi", 15)); $item->setNamedTag($nbt); } } }
but when the event is cancelled, it return back the ingredients and add the item. It shouldnt return any ingredients
make sure your recipe is registered before any players join onEnable or onLoad is a good time to do that in a plugin your code also appears to be registering the recipe incorrectly this is correct: PHP: $this->getServer()->getCraftingManager()->registerRecipe($recipe)
This bug is client sided, mc doesn't support crafting custom-nbt items That code is from my uhc run plugin, it was made for pmmp +- 3.1.0 but it can still work PHP: /** * @param CraftItemEvent $event */ public function onCraft(CraftItemEvent $event) { $player = $event->getPlayer(); $item = null; foreach ($event->getOutputs() as $output) { if(in_array($output->getId(), [Item::WOODEN_PICKAXE, Item::STONE_PICKAXE, Item::IRON_PICKAXE, Item::DIAMOND_PICKAXE, Item::WOODEN_AXE, Item::STONE_AXE, Item::IRON_AXE, Item::DIAMOND_AXE])) { $item = $output; } } if(!$this->inGame($player) || $item === null && $this->phase > 0 ) return; $event->setCancelled(true); foreach ($event->getTransaction()->getInventories() as $inventory) { if ($inventory instanceof CraftingGrid) { foreach ($event->getInputs() as $input) { $inventory->removeItem($input); } } } $item->addEnchantment(new EnchantmentInstance(Enchantment::getEnchantment(Enchantment::UNBREAKING), 4)); $item->addEnchantment(new EnchantmentInstance(Enchantment::getEnchantment(Enchantment::EFFICIENCY), 3)); $player->getInventory()->addItem($item); } PHP: public function registerCrafting() { $mgr = $this->getServer()->getCraftingManager(); $mgr->registerShapedRecipe(new ShapedRecipe(["xax", "aba", "xax"], [ "x" => Item::get(Item::AIR), "a" => Item::get(Item::GOLD_INGOT), "b" => Item::get(Item::APPLE) ], [Item::get(Item::GOLDEN_APPLE)])); $mgr->registerShapedRecipe(new ShapedRecipe(["aaa", "xbx", "aaa"], [ "x" => Item::get(Item::AIR), "a" => Item::get(Item::IRON_INGOT), "b" => Item::get(Item::IRON_BLOCK) ], [Item::get(Item::ANVIL)])); // pickaxes (useless) $stone = Item::get(Item::STONE_PICKAXE); $iron = Item::get(Item::IRON_PICKAXE); $diamond = Item::get(Item::DIAMOND_PICKAXE); foreach ([$stone, $iron, $diamond] as $pickaxe) { $pickaxe->addEnchantment(new EnchantmentInstance(Enchantment::getEnchantment(Enchantment::UNBREAKING), 4)); $pickaxe->addEnchantment(new EnchantmentInstance(Enchantment::getEnchantment(Enchantment::EFFICIENCY), 3)); } $recipes = [ [Item::PLANKS, $stone], [Item::COBBLESTONE, $stone], [Item::IRON_INGOT, $iron], [Item::DIAMOND, $diamond] ]; foreach ($recipes as [$id, $result]) { $mgr->registerShapedRecipe(new ShapedRecipe(["aaa", "xbx", "aaa"], [ "x" => Item::get(Item::AIR), "a" => Item::get($id), "b" => Item::get(Item::STICK) ], [$result])); } // axes (useless) $stone = Item::get(Item::STONE_AXE); $iron = Item::get(Item::IRON_AXE); $diamond = Item::get(Item::DIAMOND_AXE); foreach ([$stone, $iron, $diamond] as $axe) { $axe->addEnchantment(new EnchantmentInstance(Enchantment::getEnchantment(Enchantment::UNBREAKING), 4)); $axe->addEnchantment(new EnchantmentInstance(Enchantment::getEnchantment(Enchantment::EFFICIENCY), 3)); } $recipes = [ [Item::PLANKS, $stone], [Item::COBBLESTONE, $stone], [Item::IRON_INGOT, $iron], [Item::DIAMOND, $diamond] ]; foreach ($recipes as [$id, $result]) { $mgr->registerShapedRecipe(new ShapedRecipe(["aaa", "xbx", "aaa"], [ "x" => Item::get(Item::AIR), "a" => Item::get($id), "b" => Item::get(Item::STICK) ], [$result])); } }