Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

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

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.

Edited by Danebi

  • Author
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...

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.

  • Author
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.

  • Author
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? 

[deleted]

Edited by Vinyarion

Have you ever want the new operator to return a type that you didn't ask for? Well, now you can!

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...

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.