Jump to content

[Solved][1.15.2-31.1.1] @SubscribeEvent not working in ExampleMod


Recommended Posts

Posted (edited)

I am trying to follow the docs in setting up a 1.15.2-31.1.1 (latest as of writing this post) modding environment. So far everything has been working out nicely, but there is one minor issue that I have run into.  
When loading the mdk into IntelliJ, the @SubscribeEvent annotated method is never called. This one:  
https://github.com/MinecraftForge/MinecraftForge/blob/1.15.x/mdk/src/main/java/com/example/examplemod/ExampleMod.java#L68-L72  

Adding @Mod.EventBusSubscriber(modid = "examplemod", bus = Bus.MOD) to the class does not help either. The nested class (register blocks) is not affected.
However from my understanding that would not be necessary anyways, since Line 39 ( MinecraftForge.EVENT_BUS.register(this); ) accomplishes the same thing.  
I do not expect something so fundamental to be broken, so there must be something that I am doing wrong. Is there an error in my thinking?   

Edit: Using different event types also does not work.  
Edit2: My personal repo is here by the way: https://github.com/sauerkrautMod/sauerkraut  
Edit3: But all tests were done on the Initial Commit

Edited by Busti

PM's regarding modding questions should belong in the Modder Support sub-forum and won't be answered.

Posted

Huh, seems that just the @Mod.EventBusSubscriber annotation on the class does not work. "Manually" registering the class using MinecraftForge.EVENT_BUS.register works. I might not have opened a level when performing that test, I am not sure anymore.  
Here is some more confusing stuff:  

  • RegistryEvent.Register<Block> blockRegistryEvent is called using the @Mod.EventBusSubscriber Annotation
  • FMLServerStartingEvent event is not called using the annotation, but is called using MinecraftForge.EVENT_BUS.register(this); 
  • RegistryEvent.Register<Block> blockRegistryEvent is called twice in ExampleMod
    • Removing the annotation from the nested class does not change this  
    • Neither does removing MinecraftForge.EVENT_BUS.register(this);

PM's regarding modding questions should belong in the Modder Support sub-forum and won't be answered.

Posted (edited)

Ah, turns out I am the one who is being stupid.  
 

Quote

This does not register an instance of the class; it registers the class itself (i.e. the event handling methods must be static).


I haven't been programming java in a while now. static is pretty un-intuitive to me now.

Edited by Busti

PM's regarding modding questions should belong in the Modder Support sub-forum and won't be answered.

Posted
3 hours ago, Busti said:


static is pretty un-intuitive to me now.

Static is for things that are members of the class, not to an instance of the class.

 

Math.PI and Math.Pow() are examples. There is no need to call new Math() in order to access those.

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.

Posted (edited)

@Draco18s sure, it is just that I have been programming almost exclusively in scala for about 5 years now and I just do not spend that much attention to the static keyword anymore.  
In my little universe "static" stuff goes into object. Also classes are overrated ;)

Edited by Busti

PM's regarding modding questions should belong in the Modder Support sub-forum and won't be answered.

Posted (edited)

There is one thing that I have been wondering.  
Why do we need @ObjectHolder ? What's wrong with writing instances (i.e. of blocks) directly into the public static final variables?  
Why this black-magic pattern of mutating a final field?  

My best guess is that
@Mod.EventBusSubscriber creates an instance of its class really early and we do not want to create block instances at that point in time.  

Edited by Busti

PM's regarding modding questions should belong in the Modder Support sub-forum and won't be answered.

Posted (edited)

Ah, DeferredRegister makes it feel much better. Less Black Magic involved. Feels like an Algebraic Data Type.

Edited by Busti

PM's regarding modding questions should belong in the Modder Support sub-forum and won't be answered.

Posted
15 hours ago, Busti said:

Why do we need @ObjectHolder ? What's wrong with writing instances (i.e. of blocks) directly into the public static final variables?  

What if some other mod wants to override your item's class with a new class in order to add functionality?

 

Now your mod would think that your item is one thing and the game would think your item was another thing, because it was overwritten in the registry.

@ObjectHolder synchronizes those things so that your mod gets the correct reference.

 

What if you want to reference an item from another mod, but don't know if that mod is loaded or not? @ObjectHolder, check it for null.

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.

Posted (edited)

Yeah, I get that and in the end, if it is how things are done, I do not really care. I just have to use it.  
I guess I wanted to peek behind the curtain a bit and find out why things are done this way.  
But still. @ObjectHolder feels really dirty and DefferedRegister is much sexier. Now if java just had a good monadic for implementation ?

Edited by Busti

PM's regarding modding questions should belong in the Modder Support sub-forum and won't be answered.

Posted (edited)

I mean, just look at this:  

public final class ModBlocks {
    public static final DeferredRegister<Block> BLOCKS =
            new DeferredRegister<>(ForgeRegistries.BLOCKS, SauerkrautMod.MODID);

    public static final DeferredRegister<Item> ITEMS =
            new DeferredRegister<>(ForgeRegistries.ITEMS, SauerkrautMod.MODID);

    public static final RegistryObject<Block> BLOCK_COPPER_ORE = BLOCKS.register("copper_ore", () -> new Block(Block.Properties.create(Material.ROCK)));
    public static final RegistryObject<Item> ITEM_COPPER_ORE = ITEMS.register("copper_ore", BLOCK_COPPER_ORE.lazyMap(block -> new BlockItem(block, new Item.Properties())));
}

It's beautiful!

Edited by Busti

PM's regarding modding questions should belong in the Modder Support sub-forum and won't be answered.

Posted

DeferredRegister is newer than @ObjectHolder

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.

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

    • Hey, sorry I haven't said anything in a while. I was banned on here for sending you straight up crash logs and they banned me for spam... but I learned that these forums are for forge only and I was working with neoforge... but thank you for all the help.
    • la verdad nose que hago
    • Ok i check and this is real axioM, BUT i have seen strange thing when mods less then 100 is working great but when its more then 100, i got crash   i realy need this mod can i some how fix it? or only delete axiom
    • It is an issue with the mod Axiom
    • I am in 1.20.1, and I have about 50 mods, I'd say. But for some reason, the search bar broke at some point. It's a real pain to search for a certain object.. Mods that I have(I had to write ALL OF THESE OUT arhg): Epic Knights. AI-Improvements, Alexscaves, alexsmobs, AmbientSounds, Aquamirae, Architectury, Betterfpsdist, BiomesOPlenty, Bookshelf, Born In Chaos, Bountiful Critters, CarbonConfig, Citadel, Cloth config, Clumps, Corgilib, Creative Core, Creeperoverhaul, crittersandcompanions, CullLessLeaves, Cupboard, Duckling, Embeddium, Enchantment Descriptions, Enderman Overhaul, Entity Model Features, Entity Texture Features, Entity Culling, Exotic Birds, Extra Sounds, Falling Leaves, Farmers Delight, Fast Leaf Decay, Fastload, Ferritecore, FpsReducer2, Framework Forge, Gamma Creatures Mod, Geckolib, Geophilic, Ghosts, Goblin Traders, Gpumemleakfix, Guardvillagers, Ichunutil, ImmediatelyFast Forge, Immersive Paintings, Incendium, Konkrete Forge, Let Sleeping Dogs Lie, Make Bubbles Pop, MCW Bridges, MCW doors, MCW Fences, MCW lights, MCW paths, MCW trapdoors, Medieval Paintings, More Creative Tabs Combo, Nether's Overhaul, Nyfss Spiders Forge, Obscure Api, oculus MC, Oh The Biomes We've Gone, Oh The Trees You'll Grow, Physics Mod, Prehistoric Park, Quark Delight, Quark, Rainbow Reef, Refurbished Furniture Forge, Regrowth, Repurposed Structures, Resourcefulconfig, Ribbits, Rubidium, Saturn mc, Skin Layers 3d Forge, Smoothchunk, Starlight, Structory, TerraBlender, Terralith, Visuality, Water Erosion, Xaeros Minimap, Xaeros World Map, YungsApi, YungsBetter Desert Temples, Yungs Better Dungeons, Yungs Jungle Templates, Yungs Better Mineshafts, Yungs Better Nether Fortresses, Yungs Better Strongholds, Yungs Better Witch Huts, Yungs Bridges, Yungs Extras, Zeta.   Why isn't my search bar working!!!!😭
  • Topics

×
×
  • Create New...

Important Information

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