Jump to content

RegistryEvents issue


LuccaPossamai

Recommended Posts

I'm trying create an item that holds an entity(like an "SpawnEggItem"). But when I try to register the item with an created entity, this entity wasn't been registered yet. There's a priority system to these events? This is my code btw:

Spoiler

public class Registration {

    public static final DeferredRegister<EntityType<?>> ENTITIES = create(ForgeRegistries.ENTITIES);
    public static final DeferredRegister<Item> ITENS = create(ForgeRegistries.ITEMS);


    public static void register(){
        IEventBus fml = FMLJavaModLoadingContext.get().getModEventBus();
        ENTITIES.register(fml);
        ITENS.register(fml);

        ModEntities.register();
        ModItens.register();
    }

    private static <T extends IForgeRegistryEntry<T>> DeferredRegister<T> create(IForgeRegistry<T> registry){
        return DeferredRegister.create(registry, ExampleMod.MOD_ID);
    }

}

 

 

Link to comment
Share on other sites

None of the code you've shown here is registering an item.

 

I also don't know why you wrapped DeferredRegister.create in a function with a convoluted signature rather than just going ENTITIES = DeferredRegister.create(ForgeRegistries.ENTITIES);

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

Here it is the part of the code, the Item:
 

Spoiler

public class ModItens {

  static void register(){ }

  public static Item.Properties getEssenceProperties(){
        return new Item.Properties()
                .tab(ModItemGroups.ESSENCE_TAB)
                .stacksTo(1);
    }
    
    public static final RegistryObject<Item> ESSENCE_PILLAGER_GOLD = Registration.ITENS.register("essence_entity.minecraft.golden_armoured_pillager", () ->
            new Essence(getEssenceProperties(), ModEntities.GOLDEN_ARMOURED_PILLAGER.get(), 5451574, 16167425));

    public static final RegistryObject<Item> ESSENCE_PILLAGER_DIAMOND = Registration.ITENS.register("essence_entity.minecraft.diamond_armoured_pillager", () ->
            new Essence(getEssenceProperties(), ModEntities.DIAMOND_ARMOURED_PILLAGER.get(), 5451574, 9433559));
  
}

 

and the entities' :

Spoiler

public class ModEntities {

    static void register(){
        System.out.println("Registering EntityTypes");
    }

    public static final RegistryObject<EntityType<GoldenArmouredPillager>> GOLDEN_ARMOURED_PILLAGER = Registration.ENTITIES.register("golden_armoured_pillager", () ->
            EntityType.Builder.<GoldenArmouredPillager>of(
                    GoldenArmouredPillager::new,
                    EntityClassification.CREATURE)
                    .canSpawnFarFromPlayer()
                    .sized(0.6F, 1.95F)
                    .clientTrackingRange(8).build("golden_armoured_pillager"));

    public static final RegistryObject<EntityType<DiamondArmouredPillager>> DIAMOND_ARMOURED_PILLAGER = Registration.ENTITIES.register("diamond_armoured_pillager", () ->
            EntityType.Builder.<DiamondArmouredPillager>of(
                    DiamondArmouredPillager::new,
                    EntityClassification.CREATURE)
                    .canSpawnFarFromPlayer()
                    .sized(0.6F, 1.95F)
                    .clientTrackingRange(8).build("diamond_armoured_pillager"));
}

 

 

Link to comment
Share on other sites

16 minutes ago, LuccaPossamai said:

new Essence

...and this class?

 

Also, you know it's spelled "items" with an M right?

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

I'm from Brazil, and I'm used to code in portuguese. Like "items" in english is "itens" in portguese. Here it is the Essence class, and the EssenceItem class. I created 2 different classes to separete and simplify some things. 

Spoiler

public class Essence extends EssenceItem {

    public Essence(Properties properties, @Nullable EntityType tipo, int color1, int color2) {
        super(properties, tipo, color1, color2);

    }

    @Override
    public ActionResultType useOn(ItemUseContext p_195939_1_) {
        return ActionResultType.FAIL;
    }


}

 

Spoiler

public class EssenceItem extends Item {

    private static final Map<EntityType<?>, EssenceItem> BY_ID = Maps.newIdentityHashMap();
    private final int color1;
    private final int color2;
    private final EntityType<?> defaultType;

    public EssenceItem(Properties properties, @Nullable EntityType tipo, int color1, int color2) {
        super(properties);
        this.defaultType = tipo;
        this.color1 = color1;
        this.color2 = color2;
        BY_ID.put(tipo, this);

    }

    @OnlyIn(Dist.CLIENT)
    public int getColor(int p_195983_1_) {
        return p_195983_1_ == 0 ? this.color1 : this.color2;
    }

    @Nullable
    @OnlyIn(Dist.CLIENT)
    public static Item byId(@Nullable EntityType<?> p_200889_0_) {
        return BY_ID.get(p_200889_0_);
    }

    public static Iterable<EssenceItem> essences() {
        return Iterables.unmodifiableIterable(BY_ID.values());
    }

    public EntityType<?> getType(@Nullable CompoundNBT p_208076_1_) {
        if (p_208076_1_ != null && p_208076_1_.contains("EntityTag", 10)) {
            CompoundNBT compoundnbt = p_208076_1_.getCompound("EntityTag");
            if (compoundnbt.contains("id", 8)) {
                return EntityType.byString(compoundnbt.getString("id")).orElse(this.defaultType);
            }
        }

        return this.defaultType;
    }

}

 

 

Link to comment
Share on other sites

(1) do not use OnlyIn pretty much ever, and never on methods you are creating whole cloth.

(2) your getType method is never called

(3) your useOn method does a whole lotta nuthin

(4) have you looked at the vanilla spawn egg?

(5) why are you not extending the vanilla spawn egg?

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

25 minutes ago, LuccaPossamai said:

These things you've said interferes in the problem?

the 3 first no, not really. but you should fix them
the last 2 should point you torwards the general direction of how to solve your problem

 

but here is the thing when using RegistryObjects: you can call .get() on static initialization (so since your items are statically initialized, you can't call any RegistryObject#get() in their definition). that's because at static initialization, the RegistryObjects haven't been populated yet, you need to wait until setup to be able to call .get()

so the way to work around this, is to just pass the RegistryObject itself (or any other supplier, the RegistryObject is just a fancy supplier). so then the entity won't try to be unpacked when it doesn't exist yet (i.e.: static initialization), and you unpack the Entity registry object whenever you actually need it.

 

Also, if you look at the vanilla spawn egg, you won't see this that I'm talking about, because vanilla doesn't use RegistryObjects

Link to comment
Share on other sites

Oh, also:

5 hours ago, diesieben07 said:

First of all the BLOCKS and ITEMS fields (i.e. your DeferredRegister instances) should not be in a separate class. Put them in the same class or you will have issues.

Because you didn't do this, you had to do this:

Quote

ModEntities.register();
ModItens.register();

And call empty methods.

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

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

    • SLOT DANA : Situs Slot Gacor Nagaliga Deposit Via DANA 10.000
    • NAGALIGA :  Agen Taruhan Mix Parlay Bola EURO Terpercaya Di Indonesia Nagaliga merupakan situs taruhan  judi bola euro dan slot gacor terbaik menyediakan link alternatif terbaik dan pastinya bisa di akses di seluruh penjuru dunia. Ayo meriahkan EURO bersama situs Nagaliga kemenangan berapapun pasti dibayar lunas tanpa ada kendala.
    • I have no idea how a UI mod crashed a whole world but HUGE props to you man, just saved me +2 months of progress!  
    • So i know for a fact this has been asked before but Render stuff troubles me a little and i didnt find any answer for recent version. I have a custom nausea effect. Currently i add both my nausea effect and the vanilla one for the effect. But the problem is that when I open the inventory, both are listed, while I'd only want mine to show up (both in the inv and on the GUI)   I've arrived to the GameRender (on joined/net/minecraft/client) and also found shaders on client-extra/assets/minecraft/shaders/post and client-extra/assets/minecraft/shaders/program but I'm lost. I understand that its like a regular screen, where I'd render stuff "over" the game depending on data on the server, but If someone could point to the right client and server classes that i can read to see how i can manage this or any tip would be apreciated
    • Let me try and help you with love spells, traditional healing, native healing, fortune telling, witchcraft, psychic readings, black magic, voodoo, herbalist healing, or any other service your may desire within the realm of african native healing, the spirits and the ancestors. I am a sangoma and healer. I could help you to connect with the ancestors , interpret dreams, diagnose illness through divination with bones, and help you heal both physical and spiritual illness. We facilitate the deepening of your relationship to the spirit world and the ancestors. Working in partnership with one\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’s ancestors is a gift representing a close link with the spirit realm as a mediator between the worlds.*   Witchdoctors, or sorcerers, are often purveyors of mutis and charms that cause harm to people. we believe that we are here for only one purpose, to heal through love and compassion.*   African people share a common understanding of the importance of ancestors in daily life. When they have lost touch with their ancestors, illness may result or bad luck. Then a traditional healer, or sangoma, is sought out who may prescribe herbs, changes in lifestyle, a career change, or changes in relationships. The client may also be told to perform a ceremony or purification ritual to appease the ancestors.*   Let us solve your problems using powerful African traditional methods. We believe that our ancestors and spirits give us enlightenment, wisdom, divine guidance, enabling us to overcome obstacles holding your life back. Our knowledge has been passed down through centuries, being refined along the way from generation to generation. We believe in the occult, the paranormal, the spirit world, the mystic world.*   The services here are based on the African Tradition Value system/religion,where we believe the ancestors and spirits play a very important role in society. The ancestors and spirits give guidance and counsel in society. They could enable us to see into the future and give solutions to the problems affecting us. We use rituals, divination, spells, chants and prayers to enable us tackle the task before us.*   I have experience in helping and guiding many people from all over the world. My psychic abilities may help you answer and resolve many unanswered questions
  • Topics

×
×
  • Create New...

Important Information

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