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

I am currently updating my mod to 1.12 and am still pretty new to the new Registry system.

In my mod I use a bucket with ThermalFoundation's Destabilized Redstone for crafting.

For getting this bucket as an item I am using

Fluid redstone = FluidRegistry.getFluid("redstone");
bucketRedstone = FluidUtil.getFilledBucket(new FluidStack(redstone, 1000));

This is called while preInit (before the Registry<IRecipe> event). But I always get the error:

Spoiler

Caused by: java.lang.NullPointerException
	at net.minecraftforge.fluids.FluidUtil.getFilledBucket(FluidUtil.java:698)
	at tonius.simplyjetpacks.integration.TEItems.init(TEItems.java:73)
	at tonius.simplyjetpacks.setup.ModItems.preInit(ModItems.java:111)
	at tonius.simplyjetpacks.SimplyJetpacks.preInit(SimplyJetpacks.java:44)

 

I already checked the fluid and the FluidStack for being null, but both are not, as the Fluid is initialized in the preInit, too. And ThermalFoundation is loaded before my mod.

 

Now I found a way arround it by gathering the fluid in init phase and registering the 2 recipes which need the bucket also in init phase.

But it doesn't seem right that it doesn't work the original way. What am I missing?

The ForgeModContainer#universalBucket field was null when you called FluidUtil.getFilledBucket, this is because it's not populated until RegistryEvent.Register<Item> (which is fired between preInit and init).

 

You should create the bucket ItemStack during RegistryEvent.Register<IRecipe>, or ideally use a JSON recipe instead. I have an IIngredientFactory implementation that produces a filled universal bucket here; I use it in this constant, which I use in this recipe.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

  • Author

I am not that much of a fan of the new JSON recipe system, so that will probably be not my solution.

 

I tried creating the bucket during that event but it tells me that a recipe is invalid shaped, as the bucket is null.

Spoiler

net.minecraftforge.fml.common.LoaderExceptionModCrash: Caught exception from Simply Jetpacks 2 (simplyjetpacks)
Caused by: java.lang.RuntimeException: Invalid shaped ore recipe: ICI, PDP, IRI, I, ingotElectrum, P, blockGlassHardened, C, 1xitem.thermalfoundation.material@513, D, 1xtile.cofh.thermalexpansion.dynamo@1, R, null,
    at net.minecraftforge.common.crafting.CraftingHelper.parseShaped(CraftingHelper.java:344)
    at tonius.simplyjetpacks.util.crafting.RecipeHelper.addOldShaped(RecipeHelper.java:51)
    at tonius.simplyjetpacks.util.crafting.RecipeHandler.addShapedRecipe(RecipeHandler.java:30)
    at tonius.simplyjetpacks.util.crafting.RecipeHandler.addOreDictRecipe(RecipeHandler.java:18)
    at tonius.simplyjetpacks.setup.ModItems.registerRecipes(ModItems.java:318)
    at tonius.simplyjetpacks.setup.ModItems.preInit(ModItems.java:122)
    at tonius.simplyjetpacks.SimplyJetpacks.preInit(SimplyJetpacks.java:51)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at net.minecraftforge.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:611)
    at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91)

I did it this way:

@SubscribeEvent
	public void onRegisterRecipes(RegistryEvent.Register<IRecipe> event) {
		if (ModItems.integrateTE) {
			TEItems.initFluids();
		}

		for(IRecipe recipe : RECIPES_TO_REGISTER) {
			event.getRegistry().register(recipe);
		}
		RECIPES_TO_REGISTER.clear();
	}

Where initFluids() looks as follows:

public static void initFluids() {
	Fluid redstone = FluidRegistry.getFluid("redstone");
	bucketRedstone = FluidUtil.getFilledBucket(new FluidStack(redstone, Fluid.BUCKET_VOLUME));
}

 

It looks like you create your recipes before you create and store the filled bucket ItemStack, so the field hasn't yet been populated when they reference it.

 

Where and when do you create your recipes? It should be done in RegistryEvent.Register<IRecipe>.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

  • Author
2 minutes ago, Choonster said:

Where and when do you create your recipes? It should be done in RegistryEvent.Register<IRecipe>.

I am doing it in the onRegisterRecipes() method (see post above).

The RegistryHandler is registered during preInit see following:

Spoiler

@EventHandler
	public static void preInit(FMLPreInitializationEvent evt) {
		logger.info("Starting Simply Jetpacks 2");

		MinecraftForge.EVENT_BUS.register(new RegistryHandler());

		Config.preInit(evt);
		ModItems.preInit();
		//Log.info("ListRecipes: " + RECIPES_TO_REGISTER);
	}

 

 

 

Just now, Tomson124 said:

I am doing it in the onRegisterRecipes() method (see post above).

 

In the code you posted you register the recipes in that method, but they're created (instantiated) somewhere else.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

  • Author

Sorry I misunderstood you. I now moved the method for creating the recipes into onRegisterRecipes() , too, and now it works.

Thank you.

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.