Jump to content

Cannot figure out how to add Tool properties to item


Recommended Posts

I cannot for the love of me figure out how the new objectregister system works. Been scratching my head at this for a week.



The type JemPickaxe does not define JemPickaxe() that is applicable here

The above error hi-lites:


in the 3rd method.


public class JemPickaxes {

    public static final JemRegistry<Item> PICKAXE = new JemRegistry<>(ForgeRegistries.ITEMS, JemCore.MOD_ID);
    public static void init()
    public static RegistryObject<Item> OBSIDIAN = PICKAXE.register("obsidian_pickaxe", JemPickaxe::new);;
/**public static <OBSIDIAN extends PickaxeItem> OBSIDIAN PickaxeProperties(String item, IItemTier tier, int damage, float speed, Properties properties)
    *    PickaxeProperties("obsidian_pickaxe", ItemTier.NETHERITE, 1, -2.8F, new Item.Properties().group(JemPickaxe.TOOLS));
    *    return JemPickaxes.OBSIDIAN = PickaxeProperties("obsidian_pickaxe", ItemTier.NETHERITE, 1, -2.8F, properties);
    *public static RegistryObject<Item> TEST()
    *    return PICKAXE.register("test_pickaxe", JemPickaxe::new);


This is what my JemPickaxe class looks like:

public class JemPickaxe extends PickaxeItem {

	   public static final ItemGroup TOOLS = new ItemGroup("tools") {
		   public ItemStack createIcon() {
		         return new ItemStack(JemPickaxes.OBSIDIAN.get());
	public JemPickaxe(IItemTier tier, int attackDamage, float attackSpeedIn) {
		super(tier, attackDamage, attackSpeedIn, new Item.Properties().group(TOOLS));
		//JemPickaxe.PickaxeProperties(tier, attackDamage, attackSpeedIn, new Item.Properties().group(TOOLS));

/**public static void PickaxeProperties(String string, ItemTier netherite, int i, float f, Properties group) {
*	public static void OBSIDIAN(IItemTier tier, int attackDamage, float attackSpeedIn) {
*		super(ItemTier.NETHERITE, 1, -2.8F, new Item.Properties().group(TOOLS));
*		JemPickaxe.PickaxeProperties(ItemTier.NETHERITE, 1, -2.8F, new Item.Properties().group(TOOLS));
*	}


The error only resolves when I remove the parameters from 

public JemPickaxe(...)

so that the brackets are empty and when I change the extend from "Pickaxeitem" to just "Item".


Am I completely wrong about how I'm going about this or am I just adding the parameters incorrectly to the new object (Obsidian pickaxe) itself?

Edited by Jemtao
Link to comment
Share on other sites

7 minutes ago, diesieben07 said:

Show this class...

It's a 1:1 of DeferredRegister.java because after updating from 1.15.2 to 1.16.1 it gave me the error that the particular method called to wasn't accessible because it's been changed to private. Why it suddenly works copied into another class, I don't know.


package com.jemmy.core;

import net.minecraft.util.ResourceLocation;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.EventPriority;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.registries.IForgeRegistry;
import net.minecraftforge.registries.IForgeRegistryEntry;
import net.minecraftforge.registries.RegistryBuilder;
import net.minecraftforge.registries.RegistryManager;

import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.Set;
import java.util.function.Supplier;

public class JemRegistry<T extends IForgeRegistryEntry<T>>

    public static <B extends IForgeRegistryEntry<B>> JemRegistry<B> create(IForgeRegistry<B> reg, String modid)
        return new JemRegistry<B>(reg, modid);

    public static <B extends IForgeRegistryEntry<B>> JemRegistry<B> create(Class<B> base, String modid)
        return new JemRegistry<B>(base, modid);

    private final Class<T> superType;
    private final String modid;
    private final Map<RegistryObject<T>, Supplier<? extends T>> entries = new LinkedHashMap<>();
    private final Set<RegistryObject<T>> entriesView = Collections.unmodifiableSet(entries.keySet());

    private IForgeRegistry<T> type;
    private Supplier<RegistryBuilder<T>> registryFactory;
    private boolean seenRegisterEvent = false;

    private JemRegistry(Class<T> base, String modid)
        this.superType = base;
        this.modid = modid;

    public JemRegistry(IForgeRegistry<T> reg, String modid)
        this(reg.getRegistrySuperType(), modid);
        this.type = reg;

    public <I extends T> RegistryObject<I> register(final String name, final Supplier<? extends I> sup)
        if (seenRegisterEvent)
            throw new IllegalStateException("Cannot register new entries to DeferredRegister after RegistryEvent.Register has been fired.");
        final ResourceLocation key = new ResourceLocation(modid, name);

        RegistryObject<I> ret;
        if (this.type != null)
            ret = RegistryObject.of(key, this.type);
        else if (this.superType != null)
            ret = RegistryObject.of(key, this.superType, this.modid);
            throw new IllegalStateException("Could not create RegistryObject in DeferredRegister");

        if (entries.putIfAbsent((RegistryObject<T>) ret, () -> sup.get().setRegistryName(key)) != null) {
            throw new IllegalArgumentException("Duplicate registration " + name);

        return ret;

    public Supplier<IForgeRegistry<T>> makeRegistry(final String name, final Supplier<RegistryBuilder<T>> sup) {
        if (this.superType == null)
            throw new IllegalStateException("Cannot create a registry without specifying a base type");
        if (this.type != null || this.registryFactory != null)
            throw new IllegalStateException("Cannot create a registry for a type that already exists");

        this.registryFactory = () -> sup.get().setName(new ResourceLocation(modid, name)).setType(this.superType);
        return () -> this.type;

    public void register(IEventBus bus)
        if (this.type == null) {
            if (this.registryFactory != null)
                bus.addListener(EventPriority.LOWEST, this::captureRegistry);

    public Collection<RegistryObject<T>> getEntries()
        return entriesView;

    private void addEntries(RegistryEvent.Register<?> event)
        if (this.type != null && event.getGenericType() == this.type.getRegistrySuperType())
            this.seenRegisterEvent = true;
            IForgeRegistry<T> reg = (IForgeRegistry<T>)event.getRegistry();
            for (Entry<RegistryObject<T>, Supplier<? extends T>> e : entries.entrySet())

    private void createRegistry(RegistryEvent.NewRegistry event)
        this.type = this.registryFactory.get().create();

    private void captureRegistry(RegistryEvent.NewRegistry event)
        if (this.superType != null)
            this.type = RegistryManager.ACTIVE.getRegistry(this.superType);
            if (this.type == null)
                throw new IllegalStateException("Unable to find registry for type " + this.superType.getName() + " for modid \"" + modid + "\" after NewRegistry event");
            throw new IllegalStateException("Unable to find registry for mod \"" + modid + "\" No lookup criteria specified.");


Link to comment
Share on other sites

46 minutes ago, diesieben07 said:

Dude... wtf.

Use DeferredRegister. Please spend like... 2 minutes trying to find how it changed. The constructor is private now, use the provided factory method.

I'm sorry about that,.. but for the last half hour I've been trying to figure out why

public static final DeferredRegister<Item> GEMS = new DeferredRegister<>(ForgeRegistries.ITEMS, JemCore.MOD_ID);

Doesn't work (as supplied by DeferredRegister).

I get:


Cannot infer type arguments for DeferredRegister<>

I cannot figure out what I'm missing

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.

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.

  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Also wondering how to create these manually.  First time creating a forge server.
    • Exception in thread "main" java.lang.IllegalStateException: Could not find forge-1.19-41.1.0 in classpath at MC-BOOTSTRAP/fmlloader@1.19.2-43.3.5/net.minecraftforge.fml.loading.targets.CommonDevLaunchHandler.lambda$findJarOnClasspath$3(CommonDevLaunchHandler.java:90) at java.base/java.util.Optional.orElseThrow(Optional.java:403) at MC-BOOTSTRAP/fmlloader@1.19.2-43.3.5/net.minecraftforge.fml.loading.targets.CommonDevLaunchHandler.findJarOnClasspath(CommonDevLaunchHandler.java:90) at MC-BOOTSTRAP/fmlloader@1.19.2-43.3.5/net.minecraftforge.fml.loading.targets.ForgeUserdevLaunchHandler.processStreams(ForgeUserdevLaunchHandler.java:17) at MC-BOOTSTRAP/fmlloader@1.19.2-43.3.5/net.minecraftforge.fml.loading.targets.CommonUserdevLaunchHandler.getMinecraftPaths(CommonUserdevLaunchHandler.java:32) at MC-BOOTSTRAP/fmlloader@1.19.2-43.3.5/net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator.scanMods(MinecraftLocator.java:36) at MC-BOOTSTRAP/fmlloader@1.19.2-43.3.5/net.minecraftforge.fml.loading.moddiscovery.ModDiscoverer.discoverMods(ModDiscoverer.java:74) at MC-BOOTSTRAP/fmlloader@1.19.2-43.3.5/net.minecraftforge.fml.loading.FMLLoader.beginModScan(FMLLoader.java:166) at MC-BOOTSTRAP/fmlloader@1.19.2-43.3.5/net.minecraftforge.fml.loading.FMLServiceProvider.beginScanning(FMLServiceProvider.java:86) at MC-BOOTSTRAP/cpw.mods.modlauncher@10.0.9/cpw.mods.modlauncher.TransformationServiceDecorator.runScan(TransformationServiceDecorator.java:112) at MC-BOOTSTRAP/cpw.mods.modlauncher@10.0.9/cpw.mods.modlauncher.TransformationServicesHandler.lambda$runScanningTransformationServices$8(TransformationServicesHandler.java:100) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/java.util.HashMap$ValueSpliterator.forEachRemaining(HashMap.java:1779) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) at MC-BOOTSTRAP/cpw.mods.modlauncher@10.0.9/cpw.mods.modlauncher.TransformationServicesHandler.runScanningTransformationServices(TransformationServicesHandler.java:102) at MC-BOOTSTRAP/cpw.mods.modlauncher@10.0.9/cpw.mods.modlauncher.TransformationServicesHandler.initializeTransformationServices(TransformationServicesHandler.java:55) at MC-BOOTSTRAP/cpw.mods.modlauncher@10.0.9/cpw.mods.modlauncher.Launcher.run(Launcher.java:88) at MC-BOOTSTRAP/cpw.mods.modlauncher@10.0.9/cpw.mods.modlauncher.Launcher.main(Launcher.java:78) at MC-BOOTSTRAP/cpw.mods.modlauncher@10.0.9/cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) at MC-BOOTSTRAP/cpw.mods.modlauncher@10.0.9/cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) at cpw.mods.bootstraplauncher@1.1.2/cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:141) I tried to make a minecraft mod but this error appears every time I click on the RunClient button and it won't start. Does anyone know how to get rid of this? (btw. I'm using version 1.19.2-43.3.5) https://pastebin.com/mQ3q4SwW
    • I've been following the discussion on automatically downloading mods from server to client, and I thought I'd share a helpful resource I stumbled upon. If you're looking for high-quality images for your mods or any other project, Depositphotos offers a fantastic collection for free download: free download images. In the spirit of collaboration, I believe that access to free, high-resolution visuals can greatly enhance the overall modding experience. Feel free to explore the link, and let me know what you think. Looking forward to hearing your thoughts and ideas on how we can collectively improve mod development efficiency.
    • Indian & Pakistani Girls (+971525382202{{ Dubai House Wife Indian Call 'Girl Deira Indian & Pakistani Girls (+971525382202{{ Dubai House Wife Indian Call 'Girl Deira Indian & Pakistani Girls (+971525382202{{ Dubai House Wife Indian Call 'Girl Deira Indian & Pakistani Girls (+971525382202{{ Dubai House Wife Indian Call 'Girl Deira Indian & Pakistani Girls (+971525382202{{ Dubai House Wife Indian Call 'Girl Deira Indian & Pakistani Girls (+971525382202{{ Dubai House Wife Indian Call 'Girl Deira
    • full-service 0506530048 pakistani call 'girls in deira by dubai full-service 0506530048 pakistani call 'girls in deira by dubai full-service 0506530048 pakistani call 'girls in deira by dubai full-service 0506530048 pakistani call 'girls in deira by dubai full-service 0506530048 pakistani call 'girls in deira by dubai full-service 0506530048 pakistani call 'girls in deira by dubai
  • Topics

  • Create New...

Important Information

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