1. The forums will be archived and moved to a read only mode in about 2 weeks (mid march).

Cant add nbt tag to item in customcraft

Discussion in 'Development' started by ZackyVN, Apr 28, 2019.

  1. ZackyVN

    ZackyVN Baby Zombie

    Messages:
    150
    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());
        }
     
  2. GamakCZ

    GamakCZ Zombie Pigman

    Messages:
    598
    GitHub:
    GamakCZ
    This way is buggy. Try use CraftItemEvent instead
     
  3. ZackyVN

    ZackyVN Baby Zombie

    Messages:
    150
    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);
                }
            }
        }
     
  4. GamakCZ

    GamakCZ Zombie Pigman

    Messages:
    598
    GitHub:
    GamakCZ
    cancell the event and put the item into the players inventory manually
     
    MalakasPlayzMCPE likes this.
  5. ZackyVN

    ZackyVN Baby Zombie

    Messages:
    150
    but when the event is cancelled, it return back the ingredients and add the item. It shouldnt return any ingredients
     
  6. GamakCZ

    GamakCZ Zombie Pigman

    Messages:
    598
    GitHub:
    GamakCZ
    remove items from player's inventory manually
     
  7. jasonwynn10

    jasonwynn10 Moderator Poggit Reviewer

    Messages:
    1,489
    GitHub:
    jasonwynn10
    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)
     
  8. GamakCZ

    GamakCZ Zombie Pigman

    Messages:
    598
    GitHub:
    GamakCZ
    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_PICKAXEItem::STONE_PICKAXEItem::IRON_PICKAXEItem::DIAMOND_PICKAXEItem::WOODEN_AXEItem::STONE_AXEItem::IRON_AXEItem::DIAMOND_AXE])) {
                    
    $item $output;
                }
            }

            if(!
    $this->inGame($player) || $item === null && $this->phase ) 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]));
            }
        }
     
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.