Jump to content

Can't get custom item in ItemStack


Ilay

Recommended Posts

Hey, I'm new to modding nd I tried to create a mod for minecraft 1.15.2 but I've encountered  problem.

I want to return a custom item from the mod as an ItemStack but the parameter of the constructor requires an IItemProvider and I'm not sure how to do that.

I tried to return Item but the Item requires the id of the item and I don't know what is the id of the custom block or how to check it.

I want to return the item "elementum:deep_earth_axe_capsule".

package com.ri.elementum.items;

import com.ri.elementum.Elementum;
import com.ri.elementum.blocks.ShapeForge;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUseContext;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.IItemProvider;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;

public class EmptyCapsuleBase extends Item {

    public EmptyCapsuleBase() {
        super(new Item.Properties().maxStackSize(1).group(Elementum.TAB));
    }

    private ItemStack getCapsuleType(ItemStack item, String kind){
        switch (kind){
            case "deep earth":
                switch (item.getDisplayName().getString()){
                    case "Empty Axe Capsule":
                        return new ItemStack(getItemById(0));  //What I want to change: I don't know the item id so I used 0 as a placeholder for the example. 
                }
                break;
        }
        return new ItemStack(getItemById(0));
    }


    @Override
    public ActionResultType onItemUse(ItemUseContext context){
        final World world = context.getWorld();
        final BlockPos pos = context.getPos();
        final PlayerEntity playerIn = context.getPlayer();
        final ItemStack item = context.getItem();
        final Block block = world.getBlockState(pos).getBlock();
        //System.out.println("World "+world+"\nPos "+pos+"\nPlayer "+playerIn+"\nItem: "+item+"\nblock "+block);

        if (block == Blocks.GRASS_BLOCK || block == Blocks.DIRT){
            playerIn.replaceItemInInventory(playerIn.inventory.currentItem, getCapsuleType(item, "deep earth"));
            getCapsuleType(item, "deep earth");
        }
        return super.onItemUse(context);
    }
}

 

 

 

package com.ri.elementum.util;

import com.ri.elementum.blocks.*;
import com.ri.elementum.Elementum;
import com.ri.elementum.items.EmptyCapsuleBase;
import com.ri.elementum.items.ItemBase;
import net.minecraft.item.Item;
import net.minecraft.block.Block;
import net.minecraft.item.PickaxeItem;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;

public class RegistryHandler {
    public static final DeferredRegister<Item> ITEMS = new DeferredRegister<>(ForgeRegistries.ITEMS, Elementum.MOD_ID);
    public static final DeferredRegister<Block> BLOCKS = new DeferredRegister<>(ForgeRegistries.BLOCKS, Elementum.MOD_ID);

    private static void RegisterToolsCapsules() {
        final String[] elements = {"empty", "hellfire", "aquarium", "deep_earth", "airium"};
        final String[] items = {"pickaxe", "axe", "sword", "hoe", "shovel", "helmet", "chestplate", "leggings", "boots"};
        final int[] durability = {0 ,500, 500, 750, 250};
        for (int e=0; e<elements.length; e++) {
            final int e2 = e;
            for (String i: items) {
                if (e==0){
                    ITEMS.register(elements[e]+"_"+i+"_capsule", () -> new EmptyCapsuleBase()); //Where's the items registered.
                } else {
                    ITEMS.register(elements[e] + "_" + i + "_capsule", () -> new ItemBase(1, durability[e2]));
                }
            }
        }
    }

    public static void init() {
        RegisterToolsCapsules();
        ITEMS.register(FMLJavaModLoadingContext.get().getModEventBus());
        BLOCKS.register(FMLJavaModLoadingContext.get().getModEventBus());
    }

    public static final RegistryObject<Item> CAPSULE = ITEMS.register("capsule", () -> new ItemBase(16));
    public static final RegistryObject<Item> THE_CAPSULE_OF_CONFUSION = ITEMS.register("the_capsule_of_confusion", ItemBase::new);
    public static final RegistryObject<Item> AQUARIUM = ITEMS.register("aquarium", ItemBase::new);
    public static final RegistryObject<Item> HELLFIRE = ITEMS.register("hellfire", ItemBase::new);
    public static final RegistryObject<Item> DEEP_EARTH = ITEMS.register("deep_earth", ItemBase::new);
    public static final RegistryObject<Item> AIRIUM = ITEMS.register("airium", ItemBase::new);
    public static final RegistryObject<Item> BOSS_ESSENCE = ITEMS.register("boss_essence", () -> new ItemBase(16));


    public static final RegistryObject<Block> SHAPE_FORGE = BLOCKS.register("shape_forge", ShapeForge::new);
    public static final RegistryObject<Block> ENHANCEMENT_FORGE = BLOCKS.register("enhancement_forge", EnhancementForge::new);
    public static final RegistryObject<Block> ELEMENTUM_FORGE = BLOCKS.register("elementum_forge", ElementumForge::new);
    public static final RegistryObject<Block> AQUARIUM_ORE = BLOCKS.register("aquarium_ore",  AquariumOre::new);
    public static final RegistryObject<Block> HELLFIRE_ORE = BLOCKS.register("hellfire_ore", HellfireOre::new);
    public static final RegistryObject<Block> DEEP_EARTH_ORE = BLOCKS.register("deep_earth_ore", DeepEarthOre::new);
    public static final RegistryObject<Block> AIRIUM_ORE = BLOCKS.register("airium_ore", AiriumOre::new);


    public static final RegistryObject<Item> SHAPE_FORGE_ITEM = ITEMS.register("shape_forge", () -> new BlockItemBase(SHAPE_FORGE.get()));
    public static final RegistryObject<Item> ENHANCEMENT_FORGE_ITEM = ITEMS.register("enhancement_forge", () -> new BlockItemBase(ENHANCEMENT_FORGE.get()));
    public static final RegistryObject<Item> ELEMENTUM_FORGE_ITEM = ITEMS.register("elementum_forge", () -> new BlockItemBase(ELEMENTUM_FORGE.get()));
    public static final RegistryObject<Item> AQUARIUM_ORE_ITEM = ITEMS.register("aquarium_ore", () -> new BlockItemBase(AQUARIUM_ORE.get()));
    public static final RegistryObject<Item> HELLFIRE_ORE_ITEM = ITEMS.register("hellfire_ore", () -> new BlockItemBase(HELLFIRE_ORE.get()));
    public static final RegistryObject<Item> DEEP_EARTH_ORE_ITEM = ITEMS.register("deep_earth_ore", () -> new BlockItemBase(DEEP_EARTH_ORE.get()));
    public static final RegistryObject<Item> AIRIUM_ORE_ITEM = ITEMS.register("airium_ore", () -> new BlockItemBase(AIRIUM_ORE.get()));


}

 

Edited by Ilay
Link to comment
Share on other sites

23 minutes ago, Danebi said:

Sorry, but i can't make any sense of what you sent... maybe there was some problem when copying the code?

If what you posted is really your code learn Java.

The code was a bit twisted so I think I fixed it. In addition, it's just part of the code, I didn't finish it because I need to know the ID to proceed. I'm also pretty new to java...

Link to comment
Share on other sites

Do not use item IDs. You do not need to know what they are or interact with them in any way.

1 hour ago, Ilay said:

EmptyCapsuleBase extends Item

Your class extends Item

Your method is an instance method

new ItemStack(this)

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

7 minutes ago, Draco18s said:

Do not use item IDs. You do not need to know what they are or interact with them in any way.

Your class extends Item

Your method is an instance method

new ItemStack(this)

It doesn't work. I want to return in this case the item "elementum:deep_earth_axe_capsule" and not the empty capsule which "this" referring.

Link to comment
Share on other sites

11 minutes ago, Danebi said:
  1. Problematic Code #8 and Code-Style #4
  2. Don't register items and blocks dynamically.

  3. To get the instance of a registry entry (like Item and Block) use RegistryObject#get.

I'm sorry for being dumb but I don't understand:

where and how to use the RegistyObject#get?

I forgot to mention it in the post but I want to return the item "elementum:deep_earth_axe_capsule". Can you send me an example code that will return that, further explanation or a tutorial that will do that?

Also what does register items and blocks dynamically mean and how to fix that? 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.