Jump to content

[1.8] How to Create a Custom Liquid?


1Poseidon3

Recommended Posts

I have looked all over Google and everywhere else and I could not find a single accurate guide for 1.8 on how to add a custom liquid to the game. They were all in 1.7.10 and I know the way that you add custom items and blocks to the game is WAY different than it used to be so I assume it's similar for liquids as well. Does anyone have a guide they used or something? It seems that everyone but me knows how to make liquids for 1.8. Can someone explain? Thanks!

egg

Link to comment
Share on other sites

Adding the

Fluid

and its

Block

aren't that different in 1.8, except you need to pass

ResourceLocation

s of the fluid's textures to the

Fluid

constructor.

 

The new model system is fairly different, though. You need to use Forge's advanced blockstates format to tell each fluid block to use Forge's fluid model and specify which

Fluid

to use the textures from.

 

I don't have a guide, but I do have examples:

 

The registration of fluid containers (buckets and tanks) in my

ModFluids

class is currently broken (

FluidContainerRegistry

doesn't support NBT-based fluid containers), so don't use that.

 

Edit: Fixed the formatting.

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.

Link to comment
Share on other sites

 

 

Adding the

Fluid

and its

Block

aren't that different in 1.8, except you need to pass

ResourceLocation

s of the fluid's textures to the

Fluid

constructor.

 

The new model system is fairly different, though. You need to use Forge's advanced blockstates format to tell each fluid block to use Forge's fluid model and specify which

Fluid

to use the textures from.

 

I don't have a guide, but I do have examples:

The registration of fluid containers (buckets and tanks) in my

ModFluids

class is currently broken (

FluidContainerRegistry

doesn't support NBT-based fluid containers), so don't use that.

 

Edit: Fixed the formatting.

 

 

 

 

This is really helpful. Thanks! Can you create all of your liquids in one class like I did with my blocks and items? Example below:

 

 

 


package com.poseidon.example.init;


import com.poseidon.example.*;


import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.fml.common.registry.GameRegistry;


public class EampleItems {
   
   public static Item example_item;
   
   public static void init()
   {
      example_item= new Item().setUnlocalizedName("example_item").setCreativeTab(ExampleTab.tab);
   }
   
   public static void register()
   {
      GameRegistry.registerItem(example_item, example_item.getUnlocalizedName().substring(5));
   
   public static void registerRenders()
   {
      registerRender(example_item);
   }
   
   public static void registerRender(Item item)
   {
      Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory"));
   }
}


 

 

 

 

EDIT: Another quick question: What does the gas stuff mean when creating a liquid?

egg

Link to comment
Share on other sites

This is really helpful. Thanks! Can you create all of your liquids in one class like I did with my blocks and items?

 

Yes, that's what my

ModFluids

class does. You can do model registration in the same class as the fluid creation/registration, but I prefer to register all models in a separate client-only class (

ModModelManager

).

 

 

Another quick question: What does the gas stuff mean when creating a liquid?

 

A

Fluid

can be either a liquid or a gas. Liquids behave like Water/Lava, gases are just liquids that flow upwards instead of downwards.

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.

Link to comment
Share on other sites

 

 

This is really helpful. Thanks! Can you create all of your liquids in one class like I did with my blocks and items?

 

Yes, that's what my

ModFluids

class does. You can do model registration in the same class as the fluid creation/registration, but I prefer to register all models in a separate client-only class (

ModModelManager

).

 

 

Another quick question: What does the gas stuff mean when creating a liquid?

 

A

Fluid

can be either a liquid or a gas. Liquids behave like Water/Lava, gases are just liquids that flow upwards instead of downwards.

 

 

 

 

I put that code in a new file but it's missing some things like FluidNoFlow and things like that. How exactly does this fluid creation work? I don't understand most of this at an initial glance because I am still relatively new to mod creation. Could you please explain how this works (if it isn't too much work for you)?

egg

Link to comment
Share on other sites

I put that code in a new file but it's missing some things like FluidNoFlow and things like that. How exactly does this fluid creation work? I don't understand most of this at an initial glance because I am still relatively new to mod creation. Could you please explain how this works (if it isn't too much work for you)?

 

BlockFluidNoFlow

is my own fluid block class, it's just a fluid that doesn't flow outwards.

BlockFluidClassic

and

BlockFluidFinite

are the fluid block classes provided by Forge. The doc comment on each class briefly explains what it does.

 

ModFluids.createFluid

creates and registers the

Fluid

instance (a singleton like

Block

and

Item

) using the specified fluid name and texture name. The

Fluid

instance defines the physical properties of the fluid like luminosity, density and viscosity (explained in doc comments of the corresponding

Fluid

fields).

 

ModFluids.registerFluidBlock

receives the fluid's

Block

instance as an argument, sets its unlocalised name to the fluid's unlocalised name and registers it. The

Block

instance represents the fluid when it's in the world and actually implements the in-world behaviour corresponding to the

Fluid

's properties (e.g. light level is controlled by the luminosity, flow speed is controlled by the viscosity).

 

My code doesn't handle the

Fluid

already being registered by another mod. If a

Fluid

with the same name as yours (e.g.

steam

) is already registered, you should use that

Fluid

instance and its

Block

instead of creating your own. I know BuildCraft has an example of this (for 1.7.10, but it should be the same in 1.8).

 

Edit: I wish 8 followed by a ) didn't turn into a smiley.

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.

Link to comment
Share on other sites

Edit: I wish 8 followed by a ) didn't turn into a smiley.

I don't know what you are talking about [nobbc]8)[/nobbc]

 

Jokes aside: Either check "Don't use smileys" in "Attachments and other options" or disable BBCode temporarily by surrounding the desired passage with

[nobbc][nobbc][/nobbc][/nobbc]

(the creation of this involved that tag :D).

 

Thanks, I wasn't aware of that option.

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.

Link to comment
Share on other sites

I put that code in a new file but it's missing some things like FluidNoFlow and things like that. How exactly does this fluid creation work? I don't understand most of this at an initial glance because I am still relatively new to mod creation. Could you please explain how this works (if it isn't too much work for you)?

 

BlockFluidNoFlow

is my own fluid block class, it's just a fluid that doesn't flow outwards.

BlockFluidClassic

and

BlockFluidFinite

are the fluid block classes provided by Forge. The doc comment on each class briefly explains what it does.

 

ModFluids.createFluid

creates and registers the

Fluid

instance (a singleton like

Block

and

Item

) using the specified fluid name and texture name. The

Fluid

instance defines the physical properties of the fluid like luminosity, density and viscosity (explained in doc comments of the corresponding

Fluid

fields).

 

ModFluids.registerFluidBlock

receives the fluid's

Block

instance as an argument, sets its unlocalised name to the fluid's unlocalised name and registers it. The

Block

instance represents the fluid when it's in the world and actually implements the in-world behaviour corresponding to the

Fluid

's properties (e.g. light level is controlled by the luminosity, flow speed is controlled by the viscosity).

 

My code doesn't handle the

Fluid

already being registered by another mod. If a

Fluid

with the same name as yours (e.g.

steam

) is already registered, you should use that

Fluid

instance and its

Block

instead of creating your own. I know BuildCraft has an example of this (for 1.7.10, but it should be the same in 1. 8) .

 

Edit: I wish 8 followed by a ) didn't turn into a smiley.

 

 

Ok so this helped a lot and I've been following what your code does but I have encountered an issue that's really getting to me. Here's the code it's happening in:

 

 


public class PTFluids {

public static Fluid mercury_fluid_static;
public static BlockFluidClassic mercury_block_static;


public static Fluid fluidNormalGas;
public static BlockFluidClassic blockNormalGas;


public static Set<IFluidBlock> fluidBlocks = new HashSet<IFluidBlock>();


public static void registerFluids() {

	mercury_fluid_static = createFluid("mercury", "pt:blocks/mercury_still", false).setLuminosity(10).setDensity(1600).setViscosity(1);
	mercury_block_static = registerFluidBlock(new BlockFluidClassic(mercury_block_static, new MaterialLiquid(MapColor.grayColor)));


	fluidNormalGas = createFluid("normalgas", "testmod3:blocks/fluid_normalGas", true).setLuminosity(10).setDensity(-1600).setViscosity(100).setGaseous(true);
	blockNormalGas = registerFluidBlock(new BlockFluidClassic(fluidNormalGas, new MaterialLiquid(MapColor.adobeColor)));
}

 

 

For some reason, my custom liquid (mercury) is throwing an error in (new BlockFluidClassic(mercury_block_static, new MaterialLiquid(MapColor.grayColor));

 

 

I don't know why this is happening since it's identical to your original code except for the things needed to change for mine yet it is throwing the error saying the method is undefined. Any ideas why this is happening?

egg

Link to comment
Share on other sites

Post the full error and the full class.

 

 

Sorry it took me so long. I had a busy weekend.

 

 

Error

 

 


[20:24:56] [main/INFO] [GradleStart]: Extra: []
[20:24:56] [main/INFO] [GradleStart]: Running with arguments: [--userProperties, {}, --assetsDir, C:/Users/Liam/.gradle/caches/minecraft/assets, --assetIndex, 1.8, --accessToken, {REDACTED}, --version, 1.8, --tweakClass, net.minecraftforge.fml.common.launcher.FMLTweaker, --tweakClass, net.minecraftforge.gradle.tweakers.CoremodTweaker]
[20:24:56] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLTweaker
[20:24:56] [main/INFO] [LaunchWrapper]: Using primary tweak class name net.minecraftforge.fml.common.launcher.FMLTweaker
[20:24:56] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.gradle.tweakers.CoremodTweaker
[20:24:56] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLTweaker
[20:24:56] [main/INFO] [FML]: Forge Mod Loader version 8.99.124.1450 for Minecraft 1.8 loading
[20:24:56] [main/INFO] [FML]: Java is Java HotSpot(TM) 64-Bit Server VM, version 1.8.0_60, running on Windows 8:amd64:6.2, installed at C:\Program Files\Java\jre1.8.0_60
[20:24:56] [main/INFO] [FML]: Managed to load a deobfuscated Minecraft name- we are in a deobfuscated environment. Skipping runtime deobfuscation
[20:24:56] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.gradle.tweakers.CoremodTweaker
[20:24:56] [main/INFO] [GradleStart]: Injecting location in coremod net.minecraftforge.fml.relauncher.FMLCorePlugin
[20:24:56] [main/INFO] [GradleStart]: Injecting location in coremod net.minecraftforge.classloading.FMLForgePlugin
[20:24:56] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker
[20:24:56] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLDeobfTweaker
[20:24:56] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.gradle.tweakers.AccessTransformerTweaker
[20:24:56] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker
[20:24:56] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker
[20:24:56] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper
[20:24:57] [main/ERROR] [FML]: The binary patch set is missing. Either you are in a development environment, or things are not going to work!
[20:25:00] [main/ERROR] [FML]: FML appears to be missing any signature data. This is not a good thing
[20:25:00] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper
[20:25:00] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLDeobfTweaker
[20:25:01] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.gradle.tweakers.AccessTransformerTweaker
[20:25:01] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.TerminalTweaker
[20:25:01] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.TerminalTweaker
[20:25:01] [main/INFO] [LaunchWrapper]: Launching wrapped minecraft {net.minecraft.client.main.Main}
[20:25:20] [Client thread/INFO]: Setting user: Player992
[20:25:26] [Client thread/INFO]: LWJGL Version: 2.9.1
[20:25:29] [Client thread/INFO] [sTDOUT]: [net.minecraftforge.fml.client.SplashProgress:start:235]: ---- Minecraft Crash Report ----
// I feel sad now 


Time: 11/1/15 8:25 PM
Description: Loading screen debug info


This is just a prompt for computer specs to be printed. THIS IS NOT A ERROR




A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------


-- System Details --
Details:
Minecraft Version: 1.8
Operating System: Windows 8 (amd64) version 6.2
Java Version: 1.8.0_60, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 726033656 bytes (692 MB) / 1038876672 bytes (990 MB) up to 1038876672 bytes (990 MB)
JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
FML: 
Loaded coremods (and transformers): 
GL info: ' Vendor: 'ATI Technologies Inc.' Version: '4.2.11774 Compatibility Profile Context' Renderer: 'AMD Radeon HD 7640G'
[20:25:29] [Client thread/INFO] [MinecraftForge]: Attempting early MinecraftForge initialization
[20:25:29] [Client thread/INFO] [FML]: MinecraftForge v11.14.3.1450 Initialized
[20:25:29] [Client thread/INFO] [FML]: Replaced 204 ore recipies
[20:25:30] [Client thread/INFO] [MinecraftForge]: Completed early MinecraftForge initialization
[20:25:31] [Client thread/INFO] [FML]: Found 0 mods from the command line. Injecting into mod discoverer
[20:25:31] [Client thread/INFO] [FML]: Searching C:\Users\Liam\Desktop\Minecraft Forge\eclipse\mods for mods
[20:25:35] [Client thread/INFO] [FML]: Forge Mod Loader has identified 4 mods to load
[20:25:36] [Client thread/INFO] [FML]: Attempting connection with missing mods [mcp, FML, Forge, pt] at CLIENT
[20:25:36] [Client thread/INFO] [FML]: Attempting connection with missing mods [mcp, FML, Forge, pt] at SERVER
[20:25:37] [Client thread/INFO]: Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:Periodic Table
[20:25:37] [Client thread/INFO] [FML]: Processing ObjectHolder annotations
[20:25:37] [Client thread/INFO] [FML]: Found 384 ObjectHolder annotations
[20:25:37] [Client thread/INFO] [FML]: Identifying ItemStackHolder annotations
[20:25:37] [Client thread/INFO] [FML]: Found 0 ItemStackHolder annotations
[20:25:37] [Client thread/INFO] [FML]: Configured a dormant chunk cache size of 0
[20:25:37] [Client thread/INFO] [FML]: Applying holder lookups
[20:25:37] [Client thread/INFO] [FML]: Holder lookups applied
[20:25:37] [Client thread/INFO] [FML]: Injecting itemstacks
[20:25:37] [Client thread/INFO] [FML]: Itemstack injection complete
[20:25:37] [Client thread/ERROR] [FML]: Fatal errors were detected during the transition from PREINITIALIZATION to INITIALIZATION. Loading cannot continue
[20:25:37] [Client thread/ERROR] [FML]: 
States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
UCH	mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) 
UCH	FML{8.0.99.99} [Forge Mod Loader] (forgeSrc-1.8-11.14.3.1450.jar) 
UCH	Forge{11.14.3.1450} [Minecraft Forge] (forgeSrc-1.8-11.14.3.1450.jar) 
UCE	pt{1.0.0} [Periodic Table] (bin) 
[20:25:37] [Client thread/ERROR] [FML]: The following problems were captured during this phase
[20:25:37] [Client thread/ERROR] [FML]: Caught exception from pt
java.lang.Error: Unresolved compilation problem: 
The constructor BlockFluidClassic(BlockFluidClassic, MaterialLiquid) is undefined


at com.poseidon.periodictable.init.PTFluids.registerFluids(PTFluids.java:29) ~[bin/:?]
at com.poseidon.periodictable.PeriodicTable.preInit(PeriodicTable.java:32) ~[bin/:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_60]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_60]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_60]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_60]
at net.minecraftforge.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:537) ~[forgeSrc-1.8-11.14.3.1450.jar:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_60]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_60]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_60]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_60]
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) ~[guava-17.0.jar:?]
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) ~[guava-17.0.jar:?]
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) ~[guava-17.0.jar:?]
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) ~[guava-17.0.jar:?]
at com.google.common.eventbus.EventBus.post(EventBus.java:275) ~[guava-17.0.jar:?]
at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:212) ~[forgeSrc-1.8-11.14.3.1450.jar:?]
at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:190) ~[forgeSrc-1.8-11.14.3.1450.jar:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_60]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_60]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_60]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_60]
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) ~[guava-17.0.jar:?]
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) ~[guava-17.0.jar:?]
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) ~[guava-17.0.jar:?]
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) ~[guava-17.0.jar:?]
at com.google.common.eventbus.EventBus.post(EventBus.java:275) ~[guava-17.0.jar:?]
at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:119) [LoadController.class:?]
at net.minecraftforge.fml.common.Loader.preinitializeMods(Loader.java:550) [Loader.class:?]
at net.minecraftforge.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:248) [FMLClientHandler.class:?]
at net.minecraft.client.Minecraft.startGame(Minecraft.java:446) [Minecraft.class:?]
at net.minecraft.client.Minecraft.run(Minecraft.java:356) [Minecraft.class:?]
at net.minecraft.client.main.Main.main(Main.java:117) [Main.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_60]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_60]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_60]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_60]
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.11.jar:?]
at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.11.jar:?]
at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?]
at GradleStart.main(Unknown Source) [start/:?]
[20:25:37] [Client thread/INFO] [sTDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:663]: ---- Minecraft Crash Report ----
// Sorry 


Time: 11/1/15 8:25 PM
Description: There was a severe problem during mod loading that has caused the game to fail


net.minecraftforge.fml.common.LoaderException: java.lang.Error: Unresolved compilation problem: 
The constructor BlockFluidClassic(BlockFluidClassic, MaterialLiquid) is undefined


at net.minecraftforge.fml.common.LoadController.transition(LoadController.java:163)
at net.minecraftforge.fml.common.Loader.preinitializeMods(Loader.java:553)
at net.minecraftforge.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:248)
at net.minecraft.client.Minecraft.startGame(Minecraft.java:446)
at net.minecraft.client.Minecraft.run(Minecraft.java:356)
at net.minecraft.client.main.Main.main(Main.java:117)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
at GradleStart.main(Unknown Source)
Caused by: java.lang.Error: Unresolved compilation problem: 
The constructor BlockFluidClassic(BlockFluidClassic, MaterialLiquid) is undefined


at com.poseidon.periodictable.init.PTFluids.registerFluids(PTFluids.java:29)
at com.poseidon.periodictable.PeriodicTable.preInit(PeriodicTable.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraftforge.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:537)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
at com.google.common.eventbus.EventBus.post(EventBus.java:275)
at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:212)
at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:190)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
at com.google.common.eventbus.EventBus.post(EventBus.java:275)
at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:119)
at net.minecraftforge.fml.common.Loader.preinitializeMods(Loader.java:550)
... 12 more




A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------


-- System Details --
Details:
Minecraft Version: 1.8
Operating System: Windows 8 (amd64) version 6.2
Java Version: 1.8.0_60, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 859800624 bytes (819 MB) / 1038876672 bytes (990 MB) up to 1038876672 bytes (990 MB)
JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
FML: MCP v9.10 FML v8.0.99.99 Minecraft Forge 11.14.3.1450 4 mods loaded, 4 mods active
States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
UCH	mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) 
UCH	FML{8.0.99.99} [Forge Mod Loader] (forgeSrc-1.8-11.14.3.1450.jar) 
UCH	Forge{11.14.3.1450} [Minecraft Forge] (forgeSrc-1.8-11.14.3.1450.jar) 
UCE	pt{1.0.0} [Periodic Table] (bin) 
Loaded coremods (and transformers): 
GL info: ' Vendor: 'ATI Technologies Inc.' Version: '4.2.11774 Compatibility Profile Context' Renderer: 'AMD Radeon HD 7640G'
[20:25:37] [Client thread/INFO] [sTDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:663]: #@!@# Game crashed! Crash report saved to: #@!@# C:\Users\Liam\Desktop\Minecraft Forge\eclipse\.\crash-reports\crash-2015-11-01_20.25.37-client.txt

 

 

 

 

PTFluids.java

 

 


package com.poseidon.periodictable.init;


import java.util.HashSet;
import java.util.Set;


import net.minecraft.block.Block;
import net.minecraft.block.material.MapColor;
import net.minecraft.block.material.MaterialLiquid;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fluids.BlockFluidClassic;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.IFluidBlock;
import net.minecraftforge.fml.common.registry.GameRegistry;


public class PTFluids {

public static Fluid mercury_fluid_static;
public static BlockFluidClassic mercury_block_static;


public static Fluid fluidNormalGas;
public static BlockFluidClassic blockNormalGas;


public static Set<IFluidBlock> fluidBlocks = new HashSet<IFluidBlock>();


public static void registerFluids() {

	mercury_fluid_static = createFluid("mercury", "pt:blocks/mercury_still", false).setLuminosity(10).setDensity(1600).setViscosity(1);
	mercury_block_static = registerFluidBlock(new BlockFluidClassic(mercury_block_static, new MaterialLiquid(MapColor.grayColor)));


	fluidNormalGas = createFluid("normalgas", "testmod3:blocks/fluid_normalGas", true).setLuminosity(10).setDensity(-1600).setViscosity(100).setGaseous(true);
	blockNormalGas = registerFluidBlock(new BlockFluidClassic(fluidNormalGas, new MaterialLiquid(MapColor.adobeColor)));
}


private static Fluid createFluid(String name, String textureName, boolean hasFlowIcon) {
	ResourceLocation still = new ResourceLocation(textureName + "_still");
	ResourceLocation flowing = hasFlowIcon ? new ResourceLocation(textureName + "_flow") : still;


	Fluid fluid = new Fluid(name);
	if (!FluidRegistry.registerFluid(fluid)) {
		throw new IllegalStateException(String.format("Unable to register fluid %s", fluid.getID()));
	}


	return fluid;
}


private static <T extends Block & IFluidBlock> T registerFluidBlock(T block) {
	String fluidName = block.getFluid().getUnlocalizedName();
	block.setUnlocalizedName(fluidName);
	GameRegistry.registerBlock(block, fluidName);


	fluidBlocks.add(block);


	return block;
}
}

 

 

egg

Link to comment
Share on other sites

mercury_block_static = new BlockFluidClassic(mercury_block_static

 

Uh.

 

You're passing the block you haven't yet created to the constructor of said block.  At best you're passing 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.

Link to comment
Share on other sites

Didn't this (public static BlockFluidClassic mercury_block_static;) create it?

 

That simply declares a field and assigns the default value (

null

) to it. At that point, you haven't created a

Block

instance or assigned it to the field.

 

BlockFluidClassic

doesn't have a

(BlockFluidClassic, Material)

constructor anyway, so why are you trying to pass the mercury block to its own constructor?

 

Side note: Use the [nobbc][tt][/nobbc] tag (or the Tt button) for inline code.

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.

Link to comment
Share on other sites

Didn't this (public static BlockFluidClassic mercury_block_static;) create it?

 

Declaration vs. Initialization vs. Assignment.  Basic Java.  Basic programming, really (although various languages will separate things a little farther, such as C* having separate declaration and definitions for functions).

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

Didn't this (public static BlockFluidClassic mercury_block_static;) create it?

 

Declaration vs. Initialization vs. Assignment.  Basic Java.  Basic programming, really (although various languages will separate things a little farther, such as C* having separate declaration and definitions for functions).

 

 

I was trying to do it like that because it's identical to the one below it which is the one you created (which also has no errors in it).

egg

Link to comment
Share on other sites

I was trying to do it like that because it's identical to the one below it which is the one you created (which also has no errors in it).

 

No, my code passes the

Fluid

to the

BlockFluidClassic

constructor. You're trying to pass the

Block

to its own constructor.

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.

Link to comment
Share on other sites

I was trying to do it like that because it's identical to the one below it which is the one you created (which also has no errors in it).

 

No, my code passes the

Fluid

to the

BlockFluidClassic

constructor. You're trying to pass the

Block

to its own constructor.

 

 

OH. That's what I needed the entire time. That's what was causing it. I can't believe I misread that. Thanks!

egg

Link to comment
Share on other sites

@Choonster

I don't understand your ModModelManager.java does or where that method that gets the textures is called. Could you please explain how it works so I can implement it into my own mod? I currently use .json files to load all of my textures in. How does it work for liquids?

 

 

EDIT: Also on a side note,

.setCreativeTab();

doesn't appear to work on liquids. Is there another way to do it instead?

egg

Link to comment
Share on other sites

ModModelManager#registerAllModels

is called from

CombinedClientProxy#preInit

(this is only loaded on the client, the dedicated server loads

DedicatedServerProxy

instead), which is in turn called from

TestMod3#preInit

.

 

registerFluidModel

registers the model for a single

IFluidBlock

:

  • The call to
    ModelBakery.addVariantName

    without any names prevents any model being loaded for the

    Item

    form of the

    IFluidBlock

    . If you don't call

    ModelBakery.addVariantName

    for an

    Item

    , the model with the same name as the one passed to

    GameRegistry.registerBlock

    /

    registerItem

    will be loaded.

  • The
    ModelResourceLocation

    defines the location of the fluid's model (

    testmod3:fluid

    with the

    Fluid

    's name as the variant)

  • The call to
    ModelLoader.setCustomMeshDefinition

    tells Minecraft to always use the model defined by the

    ModelResourceLocation

    for the

    Item

    .

    • MeshDefinitionFix

      is an interface created by diesieben07 that allows a lambda to be used as an

      ItemMeshDefinition

      (this is needed because ForgeGradle doesn't know how to reobfuscate lambdas). If you're not compiling against Java 8, you'd use an anonymous class instead of a lambda.

    [*]The call to

    ModeLoader.setCustomStateMapper

    tells Minecraft to always use the blockstates file and variant defined by the

    ModelResourceLocation

    to get the model for the

    Block

 

The fluid.json blockstates file tells Minecraft to use the

forge:fluid

model for each variant, passing the name of the fluid to render in the custom data.

 

Forge's fluid model acts as both a

Block

and

Item

model, using a 3D model for the

Block

and a 2D model for the

Item

.

 

Block#setCreativeTab

works without issue on fluid blocks, but a

Fluid

isn't a

Block

and thus doesn't have a creative tab.

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.

Link to comment
Share on other sites

UPDATE:my bad forge was not updated

OP your code seems to have Fluid fluid = new Fluid(name);

instead of choonster code.

 

 

 

Fluid fluid = new Fluid(name, still, flowing);

in
private static Fluid createFluid(String name, String textureName, boolean hasFlowIcon)

in
Modfluids

 

The constructor Fluid(String, ResourceLocation, ResourceLocation) is undefined

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



×
×
  • Create New...

Important Information

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