Résolu 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.
-
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"} }] } }
-
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 ?
-
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
-
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. -
Envoies un zip de ton dossier src.
-
tiens :
(Piece jointe supprimé)
-
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).