Posted January 24, 20169 yr I amde a custom fluid (oil) and everything is working but the textures in the gui. I looked up in the source code from CoFHLib that the method drawFluid (to draw the Fluid inside an gui) uses the IIcon from the Fluid and not the BlockFluidClassic. Couldn't find anything on the internet or in other source codes. Source Code (excluding package anmes and imports): Main Class: @Mod(modid=Data.MODID, name=Data.NAME, version=Data.VERSION, dependencies="required-after:CoFHLib") public class Block_Engineering { @Instance public static Block_Engineering instance; @SidedProxy(clientSide="com.emonadeo." + Data.MODID + ".proxy.ClientProxy", serverSide="com.emonadeo." + Data.MODID + "proxy.ServerProxy") public static ServerProxy proxy; public static Block blockRepository; public static Block blockFluidOil; public static Fluid fluidOil; public static Item itemBucketOil; @EventHandler public void preInit(FMLPreInitializationEvent e) { //Fluids fluidOil = new Fluid("Oil"); FluidRegistry.registerFluid(fluidOil); //Blocks blockRepository = new Block_Repository(); blockFluidOil = new Block_Fluid_Oil(); //Items itemBucketOil = new Item_Bucket_Oil(blockFluidOil); //TileEntities GameRegistry.registerTileEntity(TileEntity_Repository.class, "TileEntity_Repository"); } @EventHandler public void init(FMLInitializationEvent e) { //Blocks GameRegistry.registerBlock(blockRepository, Item_Repository.class, "Repository"); GameRegistry.registerBlock(blockFluidOil, "Oil"); //Items GameRegistry.registerItem(itemBucketOil, "Bucket_Oil"); FluidContainerRegistry.registerFluidContainer(fluidOil, new ItemStack(itemBucketOil), new ItemStack(Items.bucket)); //Fluids fluidOil.setUnlocalizedName(blockFluidOil.getUnlocalizedName()); //Gui NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler()); //Register Renderer proxy.registerRenderer(); //Ore Dictionary OreDictionary.registerOre("blockOil", blockFluidOil); } @EventHandler public void postInit(FMLPostInitializationEvent e) { } } Block_Fluid_Oil: public class Block_Fluid_Oil extends BlockFluidClassic { @SideOnly(Side.CLIENT) protected IIcon stillIcon; @SideOnly(Side.CLIENT) protected IIcon flowingIcon; public static final Material materialFluidOil = new MaterialLiquid(MapColor.blackColor); public Block_Fluid_Oil() { super(Block_Engineering.fluidOil, materialFluidOil); setBlockName("Oil"); } @Override public IIcon getIcon(int side, int meta) { return (side == 0 || side == 1) ? stillIcon : flowingIcon; } @SideOnly(Side.CLIENT) @Override public void registerBlockIcons(IIconRegister reg) { stillIcon = reg.registerIcon(Data.MODID + ":fluids/Oil_Still"); flowingIcon = reg.registerIcon(Data.MODID + ":fluids/Oil_Flow"); } @Override public boolean canDisplace(IBlockAccess world, int x, int y, int z) { if (world.getBlock(x, y, z).getMaterial().isLiquid()) { return false; } return super.canDisplace(world, x, y, z); } @Override public boolean displaceIfPossible(World world, int x, int y, int z) { if (world.getBlock(x, y, z).getMaterial().isLiquid()) { return false; } return super.displaceIfPossible(world, x, y, z); } }
January 24, 20169 yr You need to call Fluid#setIcons to set the still and flowing icons of the Fluid . You should be able to do this from Block_Fluid_Oil#registerBlockIcons . 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.
January 24, 20169 yr Author That did work! And I can't get why. But thank you so much For anyone who runs into the same problem - it would look something like this: @SideOnly(Side.CLIENT) @Override public void registerBlockIcons(IIconRegister reg) { stillIcon = reg.registerIcon(Data.MODID + ":fluids/Oil_Still"); flowingIcon = reg.registerIcon(Data.MODID + ":fluids/Oil_Flow"); Block_Engineering.fluidOil.setIcons(stillIcon, flowingIcon); }
January 24, 20169 yr That did work! And I can't get why. But thank you so much Fluid defines the properties of a fluid, including its textures. An IFluidBlock (e.g. BlockFluidClassic ) is a Block in the world that behaves like a fluid, using the properties defined by the corresponding Fluid to control its behaviour (e.g. flow rate and direction, light level). A FluidStack represents a stack of Fluid in a tank or container of some sort (like an ItemStack represents a stack of an Item in an inventory). A fluid tank in a machine contains a FluidStack and a GUI will usually display this using the textures of the Fluid . The fluid isn't in the world, so the IFluidBlock isn't involved. 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.
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.