Couleur d'un liquide qui ne marche pas



  • Salut à tous, après avoir fait un liquide, j'ai voulu lui mettre de la couleur (bleu très foncé), mais le souci c'est que cela ne fonctionne pas, même si je met ça dans la classe du liquide

    
    @Override
        public int getColor()
        {
            return new Color(80, 123, 138).getRGB();
        }
    
    

    Pourriez m'aidez, je vous en remercie d'avance.


  • Administrateurs

    Salut,
    Ton fluide ressemble à quoi actuellement ?

    Tu peux envoyer ton code complet ?



  • Voici le classe principale :

    
    package com.survivant.mod;
    
    import java.awt.Color;
    
    import com.survivant.mod.blocks.BlockMod;
    import com.survivant.mod.blocks.BlockSaltWater;
    import com.survivant.mod.blocks.SaltWater;
    import com.survivant.mod.entity.EntityFish;
    import com.survivant.mod.handlers.EntityHandler;
    import com.survivant.mod.items.ItemMod;
    import com.survivant.mod.proxy.CommonProxy;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.state.IBlockState;
    import net.minecraft.client.renderer.ItemMeshDefinition;
    import net.minecraft.client.renderer.block.statemap.StateMapperBase;
    import net.minecraft.client.resources.model.ModelBakery;
    import net.minecraft.client.resources.model.ModelResourceLocation;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.ResourceLocation;
    import net.minecraftforge.client.model.ModelLoader;
    import net.minecraftforge.common.MinecraftForge;
    import net.minecraftforge.event.entity.living.LivingEvent;
    import net.minecraftforge.event.world.BlockEvent.HarvestDropsEvent;
    import net.minecraftforge.fluids.BlockFluidClassic;
    import net.minecraftforge.fluids.Fluid;
    import net.minecraftforge.fluids.FluidRegistry;
    import net.minecraftforge.fml.common.FMLCommonHandler;
    import net.minecraftforge.fml.common.Mod;
    import net.minecraftforge.fml.common.Mod.EventHandler;
    import net.minecraftforge.fml.common.Mod.Instance;
    import net.minecraftforge.fml.common.SidedProxy;
    import net.minecraftforge.fml.common.event.FMLInitializationEvent;
    import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
    import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
    import net.minecraftforge.fml.common.registry.GameRegistry;
    import net.minecraftforge.fml.relauncher.Side;
    import net.minecraftforge.fml.relauncher.SideOnly;
    
    @Mod(modid = Reference.MOD_ID, name = Reference.MOD_NAME, version = Reference.VERSION)
    
    public class ModSurvivant
    {
    
        @SidedProxy(clientSide = Reference.CLIENT_PROXY_CLASS, serverSide = Reference.SERVER_PROXY_CLASS)
        public static CommonProxy proxy;
    
        @Instance(Reference.MOD_ID)
        public static ModSurvivant instance;
    
        public static CreativeTabs tabSurvivant = new CreativeTabs("tabSurvivant")
        {
            @SideOnly(Side.CLIENT)
            public Item getTabIconItem()
            {
                return Item.getItemFromBlock(BlockMod.blockTotem);
            }
        };
        public static SaltWater saltWater = new SaltWater();
        public static BlockSaltWater blockSaltWater;
    
        @EventHandler
        public void preInit (FMLPreInitializationEvent event)
        {                       
            ItemMod.init();
            ItemMod.register();
            BlockMod.init();
            BlockMod.register();
    
            FluidRegistry.registerFluid(saltWater);
            blockSaltWater = new BlockSaltWater(saltWater);
            GameRegistry.registerBlock(blockSaltWater, "blockSaltWater");
    
            Item item = Item.getItemFromBlock(blockSaltWater);
            ModelBakery.registerItemVariants(item);
            final ModelResourceLocation loc = new ModelResourceLocation("survivant:fluids", "salt");
            ModelLoader.setCustomMeshDefinition(item, new ItemMeshDefinition()
                    {
                        @Override
                        public ModelResourceLocation getModelLocation(ItemStack stack)
                        {
                            return loc;
                        }
                    });
            ModelLoader.setCustomStateMapper(blockSaltWater, new StateMapperBase()
                    {
                        @Override
                        protected ModelResourceLocation getModelResourceLocation(IBlockState state)
                        {
                            return loc;
                        }                   
                    });
    
        }
    
        @EventHandler
        public void init (FMLInitializationEvent event)
        {        
            proxy.registerRenders();
            MinecraftForge.EVENT_BUS.register(new SurvivantBlockEvent());
            EntityHandler.RegisterFish(EntityFish.class, "Fish");
        }
    
        @EventHandler
        public void postInit (FMLPostInitializationEvent event)
        {
    
        }
    }
    
    

    Voici la classe du liquide (saltWater) :

    
    package com.survivant.mod.blocks;
    
    import java.awt.Color;
    
    import net.minecraft.util.ResourceLocation;
    import net.minecraftforge.fluids.Fluid;
    
    public class SaltWater extends Fluid
    {
        public SaltWater()
        {
            super("saltWater", new ResourceLocation("blocks/water_still"), new ResourceLocation("blocks/water_flow"));
            this.setTemperature(295);
        }
    
        @Override
        public int getColor()
        {
            return new Color(80, 123, 138).getRGB();
        }
    }
    
    

    Voici la classe du block du liquide (blockSaltWater) :

    
    package com.survivant.mod.blocks;
    
    import com.survivant.mod.ModSurvivant;
    import net.minecraft.block.material.Material;
    import net.minecraftforge.fluids.BlockFluidClassic;
    import net.minecraftforge.fluids.Fluid;
    
    public class BlockSaltWater extends BlockFluidClassic
    {    
        public BlockSaltWater(Fluid fluid)
        {
            super(fluid, Material.water);
            this.setUnlocalizedName("blockSaltWater");
            this.setCreativeTab(ModSurvivant.tabSurvivant);
            this.setTemperature(295);
            this.setQuantaPerBlock(10);
        }
    }
    
    

    Enfin voici le blockState (fluids) :

    {
       "forge_marker": 1,
       "defaults": {
           "model": "forge:fluid",
           "transform": "forge:default-item"
       },
       "variants": {
    "salt": [{
    "custom": { "fluids": "saltWater"}
    }]
       }
    }
    

  • Administrateurs

    Tu as exactement la même chose que sur le code de debug de forge. Étrange que cela ne fonctionne pas.
    Si tu mets return 0x000000 le liquide est noir ?



  • Non le liquide a toujours la même couleur (celle de l'eau du vanilla).



  • Il me semble qu'il y a un problème au niveau des majuscules: dans ton blockstate et dans le constructeur de ton fluid remplace "saltWater" par "saltwater".



  • ça ne change rien.



  • J'ai essayé de mettre la texture de la lave pour test mais rien n'y fait le liquide garde la couleur de l'eau. Une idée ?



  • J'ai une idée, ( c'est très fort probable que ça ne fonctionne pas ) éssais d'enlever les "new resource location" dans le constructeur.



  • Effectivement, cela ne fonctionne pas.
    J'ai testé de changer de material, ça fonctionne mais la couleur est la même. Est-ce qu'il n'y aurait pas un bout de code qui override la texture du block, en donnant celle de l'eau classique ?



  • Une idée ?



  • sur quelle tuto a tu apris a faire un fluide ?


  • Administrateurs

    Il y a un exemple de fluide directement sur forge : https://github.com/MinecraftForge/MinecraftForge/blob/master/src/test/java/net/minecraftforge/debug/ModelFluidDebug.java
    Je vais faire des tests de mon côté pour voir si je trouve une solution.



  • Ok merci


  • Administrateurs

    ici :

           final ModelResourceLocation loc = new ModelResourceLocation("survivant:fluids", "salt");
    

    mets :

           final ModelResourceLocation loc = new ModelResourceLocation("survivant:salt");
    

    Changes le nom du json dans bloc state par salt.json

    et pour finir dans ce json remplaces :

      "variants": {
           "salt": [{
    

    par :

      "variants": {
           "normal": [{
    

    Je mets en pièce jointe mon mod de test avec le fluid.



  • Ok merci, dès que je suis sur mon pc je test



  • Bon décidément ça ne veut pas fonctionner, j'ai testé avec ton code et les modifs dans un 2eme temps mais cela ne change rien, la couleur reste la même.
    J'ai testé avec un System.out.println("jean jack"); comme tu avais dans ton code mais la phrase n'apparait pas dans la console. J'ai cependant remarqué que dans la console il y avait un truc du genre : 
    [ERROR] fluid 'saltWater' not found    répété plusieurs fois d'affilé, j'ai pensé qu'il n'y aurait pas de texture mais si, celle de l'eau basique mais pas celle de getColor() qui était choisi.


  • Administrateurs

    Envoies un zip de ton dossier src.



  • tiens :

    (Piece jointe supprimé)


  • Administrateurs

    Après avoir cherché 10 minutes pour rien je me suis souvenu que le nom des fluides ne prenait pas en compte les majuscules …

    Partout où tu as saltWater remplaces par salt_water.

    (par contre dans getColor mets autre chose que 0xFFFFFFFF, cette couleur c'est le blanc avec la transparence à fond donc ça ne change rien).