Jump to content

Cannot figure out how to add Tool properties to item


Jemtao

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.

 

Quote

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

The above error hi-lites:

JemPickaxe::new

in the 3rd method.

 

public class JemPickaxes {

    public static final JemRegistry<Item> PICKAXE = new JemRegistry<>(ForgeRegistries.ITEMS, JemCore.MOD_ID);
    
    public static void init()
    {
        PICKAXE.register(FMLJavaModLoadingContext.get().getModEventBus());
    }
    
    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") {
		   @Override   
		   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;
    }

    @SuppressWarnings("unchecked")
    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.");
        Objects.requireNonNull(name);
        Objects.requireNonNull(sup);
        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);
        else
            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)
    {
        bus.addListener(this::addEntries);
        if (this.type == null) {
            if (this.registryFactory != null)
                bus.addListener(this::createRegistry);
            else
                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;
            @SuppressWarnings("unchecked")
            IForgeRegistry<T> reg = (IForgeRegistry<T>)event.getRegistry();
            for (Entry<RegistryObject<T>, Supplier<? extends T>> e : entries.entrySet())
            {
                reg.register(e.getValue().get());
                e.getKey().updateReference(reg);
            }
        }
    }

    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");
        }
        else
            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:

Quote

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.

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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Muyern Trust Hacker stands as a beacon of trust and reliability in the ever-expanding realm of digital asset recovery. In a world where online scams and cybercrime proliferate, finding a trustworthy ally like Muyern Trust Hacker can be a game-changer for those who have fallen victim to fraudulent schemes. My journey with Muyern Trust Hacker began after a devastating loss to a fake investment firm. Amidst the despair and frustration, Muyern Trust Hacker emerged as a guiding light, offering hope and tangible solutions to reclaim what was rightfully mine. What truly sets Muyern Trust Hacker apart is its unwavering commitment to its clients. Unlike other recovery firms that may prioritize profit over people, Muyern Trust Hacker operates with integrity and transparency at every turn. From the initial consultation to the successful recovery of funds, their dedication to providing top-notch service is evident in every interaction. Muyern Trust Hacker's expertise is nothing short of exceptional. With a deep understanding of cybersecurity protocols and digital forensics, they possess the technical acumen to navigate even the most complex cases. Whether recovering stolen cryptocurrencies, tracing fraudulent transactions, or combating identity theft, Muyern Trust Hacker approaches each challenge with precision and skill. What truly impressed me about Muyern Trust Hacker was their commitment to delivering results promptly. In an industry where time is of the essence, their swift action and efficient approach ensure that clients can reclaim their assets with minimal delay. This alleviates the financial strain caused by the loss and provides much-needed peace of mind. Furthermore, the level of personalized attention and support provided by Muyern Trust Hacker is unparalleled. Unlike larger firms where clients may feel like just another case number, Muyern Trust Hacker fosters a genuine connection with each individual. From regular updates on the progress of the recovery process to tailored strategies based on the specific circumstances, clients can rest assured knowing that their case is receiving the attention it deserves. In addition to their impressive track record of success, Muyern Trust Hacker's commitment to ongoing support is commendable. Even after the recovery process is complete, they continue to offer guidance and advice to ensure that clients are equipped with the knowledge and tools necessary to safeguard their assets in the future. In conclusion, Muyern Trust Hacker is more than just a recovery firm – they are a trusted partner in the fight against online scams and fraud. With their unwavering dedication to their clients, unmatched technical expertise, and proven track record of success, Muyern Trust Hacker stands as a beacon of hope for those seeking justice in the digital world. Tele gram at: muyerntrusthackertech
    • I'm having the same problem as this other post and it seems whoever answered it deleted their account or something, so I cannot see the answer. I followed the same steps they said in their post. Can someone pls help. Other Post:   
    • idk why https://pastebin.com/uiaAQXRS
    • now it just says this -> https://pastebin.com/eAEFjLkJ
    • Well, I gave up so thanks for the help, it crashed with a mod that I can’t name with the infamous mod of Jenny’s 
  • Topics

×
×
  • Create New...

Important Information

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