1Poseidon3 Posted October 30, 2015 Share Posted October 30, 2015 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! Quote egg Link to comment Share on other sites More sharing options...
Choonster Posted October 30, 2015 Share Posted October 30, 2015 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: Fluid / Block instantiation and registration: my mod, Forge Model registration: my mod, Forge Blockstates file: my mod, Forge 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. Quote 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 More sharing options...
1Poseidon3 Posted October 30, 2015 Author Share Posted October 30, 2015 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: Fluid / Block instantiation and registration: my mod, Forge Model registration: my mod, Forge Blockstates file: my mod, Forge 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? Quote egg Link to comment Share on other sites More sharing options...
Choonster Posted October 30, 2015 Share Posted October 30, 2015 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. Quote 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 More sharing options...
1Poseidon3 Posted October 30, 2015 Author Share Posted October 30, 2015 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)? Quote egg Link to comment Share on other sites More sharing options...
Choonster Posted October 30, 2015 Share Posted October 30, 2015 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.. Edit: I wish 8 followed by a ) didn't turn into a smiley. Quote 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 More sharing options...
Choonster Posted October 30, 2015 Share Posted October 30, 2015 Edit: I wish 8 followed by a ) didn't turn into a smiley. I don't know what you are talking about [nobbc][/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 ). Thanks, I wasn't aware of that option. Quote 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 More sharing options...
1Poseidon3 Posted October 30, 2015 Author Share Posted October 30, 2015 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. . 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? Quote egg Link to comment Share on other sites More sharing options...
Choonster Posted October 30, 2015 Share Posted October 30, 2015 Post the full error and the full class. Quote 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 More sharing options...
1Poseidon3 Posted November 2, 2015 Author Share Posted November 2, 2015 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; } } Quote egg Link to comment Share on other sites More sharing options...
Draco18s Posted November 2, 2015 Share Posted November 2, 2015 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. Quote 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 More sharing options...
1Poseidon3 Posted November 2, 2015 Author Share Posted November 2, 2015 Didn't this (public static BlockFluidClassic mercury_block_static;) create it? Quote egg Link to comment Share on other sites More sharing options...
Choonster Posted November 2, 2015 Share Posted November 2, 2015 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. Quote 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 More sharing options...
Draco18s Posted November 2, 2015 Share Posted November 2, 2015 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). Quote 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 More sharing options...
1Poseidon3 Posted November 2, 2015 Author Share Posted November 2, 2015 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). Quote egg Link to comment Share on other sites More sharing options...
Choonster Posted November 2, 2015 Share Posted November 2, 2015 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. Quote 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 More sharing options...
1Poseidon3 Posted November 2, 2015 Author Share Posted November 2, 2015 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! Quote egg Link to comment Share on other sites More sharing options...
1Poseidon3 Posted November 2, 2015 Author Share Posted November 2, 2015 @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? Quote egg Link to comment Share on other sites More sharing options...
Choonster Posted November 3, 2015 Share Posted November 3, 2015 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. Quote 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 More sharing options...
[email protected] Posted November 5, 2015 Share Posted November 5, 2015 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 Quote Link to comment Share on other sites More sharing options...
Choonster Posted November 5, 2015 Share Posted November 5, 2015 That constructor was added with the fluid model in Forge 1.8-11.14.3.1464. Make sure you're using that version or a newer one. Quote 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 More sharing options...
Recommended Posts
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.