Mod Problème avec les textures lors de la création d'un mod 1.5.1

  • Auteur de la discussion Auteur de la discussion Bananas
  • Date de début Date de début

Bananas

Aventurier
2 Janvier 2013
5
0
1
34
Bonsoir,

J'ai aujourd'hui repris le moding, après des changements dans les objectifs de mon serveur, à savoir la sortie de la 1.5.

J'ai donc entrepris les recherches nécessaire pour créer mon mod, en commençant par un simple block (pas encore configuré entièrement).

Malgré mes 3h de recherches intempestives pour régler mon problème de texture, je ne trouve toujours aucune info qui est capable de me l'afficher.

Lorsque je lance le jeu via Eclipse, le block apparait bel et bien mais pas la texture.

Si une bonne âme peut m'aider, ca serait avec plaisir car c'est la seule chose qui me manque pour avancer dans mes projets x)

(je suis en train d'apprendre le Java, mais comme je le dis souvent: c'est en pratiquant que j'apprend le mieux, donc me jetez pas trop la pierre si ca apparait "amateur" x)

Voici mes quelques codes:

Main code
Code:
package bananasplite.adventurecube;
 
 
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraftforge.common.MinecraftForge;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.Init;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.Mod.PostInit;
import cpw.mods.fml.common.Mod.PreInit;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;
 
@Mod(modid="adventurecube", name="Adventure Cube", version="1.0.0")
@NetworkMod(clientSideRequired=true, serverSideRequired=false)
public class adventurecube {
 
    public final  static Block paille = new PailleBlock (500, Material.ground)
    .setHardness (0.5F) .setStepSound(Block.soundGrassFootstep)
    .setUnlocalizedName("BlockPaille").setCreativeTab(CreativeTabs.tabBlock);
   
   
   
        // The instance of your mod that Forge uses.
        @Instance("adventurecube")
        public static adventurecube instance;
     
        // Says where the client and server 'proxy' code is loaded.
        @SidedProxy(clientSide="bananasplite.adventurecube.client.ClientProxy", serverSide="bananasplite.adventurecube.CommonProxy")
        public static CommonProxy proxy;
     
        @PreInit
        public void preInit(FMLPreInitializationEvent event) {
                // Stub Method
        }
     
        @Init
        public void load(FMLInitializationEvent event) {
               
               
                LanguageRegistry.addName(paille, "Block de paille");
                MinecraftForge.setBlockHarvestLevel(paille, "Hoe", 0);
                GameRegistry.registerBlock(paille, "pailles");
               
                  proxy.registerRenderers();
 
        }
 
        @PostInit
        public void postInit(FMLPostInitializationEvent event) {
                // Stub Method
        }
}

Class de mon block
Code:
package bananasplite.adventurecube;
 
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
 
public class PailleBlock extends Block {
 
      public PailleBlock(int par1, Material par3Material)
        {
            super(par1, par3Material);
 
    }
   
 
    }

Pour mes textures, j'ai créé les fichiers suivants:
forge/mcp/src/minecraft/bananasplite/adventurecube/textures/block
forge/mcp/src/minecraft/bananasplite/adventurecube/textures/items

Mes 2 erreurs affichés dans ma console:
[ForgeModLoader] An error occured reading texture file /bananasplite/adventurecube/textures/block.png (refreshTexture)
java.io.FileNotFoundException: /bananasplite/adventurecube/textures/block.png
[STDERR] java.io.FileNotFoundException: /bananasplite/adventurecube/textures/block.png

Dans un forum on dit que la méthode (dans la main class) .setUnlocalizedName ("nomdublock") sert à définir la texture, j'ai donc testé: rien n'y fait.

De même que la méthode suivante (dans la class de mon block):
@Overridepublicvoid updateIcons(IconRegister iconRegister){
iconIndex = iconRegister.registerIcon("nomdumod:nomdupgn");


Voilà, si vous avez besoin d'autres infos n'hésitez pas à me demander.

En espérant que quelqu'un puisse m'aider...
 
Pas de problèmes. Je me disais aussi que cette section devait exister, mais je la trouvais plus...

Je me permet aussi de rajouter mon CommonProxy, car apparemment il ne semble pas trouver le dossier texture selon l'erreur que m'affiche ma console:
Code:
package bananasplite.adventurecube;
 
 
public class CommonProxy {
        public static String ITEMS_PNG = "/bananasplite/adventurecube/textures/items/items.png";
        public static String BLOCK_PNG = "/bananasplite/adventurecube/textures/block/block.png";
   
        // Client stuff
        public void registerRenderers() {
                // Nothing here as the server doesn't render graphics!
        }
}

(en passant, voici mon ClientProxy)
Code:
package bananasplite.adventurecube.client;
 
import net.minecraftforge.client.MinecraftForgeClient;
import bananasplite.adventurecube.CommonProxy;
 
public class ClientProxy extends CommonProxy {
   
        @Override
        public void registerRenderers() {
                MinecraftForgeClient.preloadTexture(ITEMS_PNG);
                MinecraftForgeClient.preloadTexture(BLOCK_PNG);
        }
        }
J'ai tenté de rajouter /minecraft/bananasplite/adventurecube/textures/items/items.png (idem pour block.png) mais rien n'y fait, et le plus bête c'est que je sent que ca vient d'une erreur toute bête, sans que je la trouve :eek:
 
Classe du bloc :
Code:
package bananasplite.adventurecube;
 
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
 
public class PailleBlock extends Block
{
 
   public PailleBlock(int par1, Material par3Material)
   {
   super(par1, par3Material);
   }
 
    @Override
    public void updateIcons(IconRegister iconRegister)
    {
          iconIndex = iconRegister.registerIcon("adventurecube:Paille");
    {
 
}
Le fichier de texture est un .png de format 16x16 à mettre dans forge/mcp/src/minecraft/mods/adventurecube/textures/blocks/

Et oui, les emplacements et les méthodes ont changé avec la 1.5.1
En passant
MinecraftForgeClient.preloadTexture(ITEMS_PNG); ne sert plus à rien
setUnlocalizedName ("nomdublock") Définit le nom des items et bloc dans le code
 
Ben en fait quand je vais sous mes fichiers, le chemin de mes textures est le suivant:
forge/mcp/src/minecraft/bananasplite/adventurecube/textures/block
forge/mcp/src/minecraft/bananasplite/adventurecube/textures/items

Je n'ai pas de forge/mcp/src/minecraft/"MODS"(le manquant)/adventurecube/textures/etc...

J'ai tenté la méthode
Code:
    @Override
    public void updateIcons(IconRegister iconRegister)
    {
          iconIndex = iconRegister.registerIcon("adventurecube:Paille");
    {
 
}
Mais rien n'y fait... Est-ce que le chemin de mon CommonProxy serait faux?
_______________________________________________________

Je viens de tester à l'instant de créer le chemin /mcp/src/minecraft/mods/adventurecube/textures/blocks (chemin qui contient juste mes textures).

J'ai aussi supprimé les codes suivant dans mon ClientProxy
MinecraftForgeClient.preloadTexture(ITEMS_PNG)
MinecraftForgeClient.preloadTexture(BLOCK_PNG)

Modifié mon CommonProxy en
Code:
package bananasplite.adventurecube;
 
 
public class CommonProxy {
        public static String ITEMS_PNG = "/mods/adventurecube/textures/items/items.png";
        public static String BLOCK_PNG = "/mods/adventurecube/textures/block/block.png";
     
        // Client stuff
        public void registerRenderers() {
                // Nothing here as the server doesn't render graphics!
        }
}

Lancé le jeu, et maintenant j'ai cette erreur dans ma console:
[WARNING] [Minecraft-Client] TextureManager.createTexture called for file mods/adventurecube /textures/blocks/ BlockPaille.png, but that file does not exist. Ignoring.

Et toujours pas de textures... J'deviens fous :mad:
 
Bon dernier ultimatum, ca marche toujours pas quand j'exécute le projet sous Eclipse (déjà 2 jours en entier presque à pouvoir appliquer mes textures et à bouffer des forums en anglais ^^)

Voici tout mes codes

ClientProxy
Code:
package bananasplite.adventurecube.client;
 
import net.minecraftforge.client.MinecraftForgeClient;
import bananasplite.adventurecube.CommonProxy;
 
public class ClientProxy extends CommonProxy {
   
}

CommonProxy
Code:
package bananasplite.adventurecube;
 
 
public class CommonProxy {
        public static String ITEMS_PNG = "/mods/adventurecube/items/items.png";
        public static String BLOCK_PNG = "/mods/adventurecube/block/block.png";
     
        // Client stuff
        public void registerRenderers() {
                // Nothing here as the server doesn't render graphics!
        }
}

MainClass
Code:
package bananasplite.adventurecube;
 
 
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraftforge.common.MinecraftForge;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.Init;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.Mod.PostInit;
import cpw.mods.fml.common.Mod.PreInit;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;
 
@Mod(modid="adventurecube", name="AdventureCube", version="1.0.0")
@NetworkMod(clientSideRequired=true, serverSideRequired=false)
public class adventurecube {
 
    public final  static Block paille = new PailleBlock (500, Material.ground)
    .setHardness (0.5F) .setStepSound(Block.soundGrassFootstep)
    .setUnlocalizedName("paille").setCreativeTab(CreativeTabs.tabBlock);
   
   
   
   
        // The instance of your mod that Forge uses.
        @Instance("adventurecube")
        public static adventurecube instance;
     
        // Says where the client and server 'proxy' code is loaded.
        @SidedProxy(clientSide="bananasplite.adventurecube.client.ClientProxy", serverSide="bananasplite.adventurecube.CommonProxy")
        public static CommonProxy proxy;
     
        @PreInit
        public void preInit(FMLPreInitializationEvent event) {
                // Stub Method
        }
     
        @Init
        public void load(FMLInitializationEvent event) {
               
               
                LanguageRegistry.addName(paille, "Block de paille");
                MinecraftForge.setBlockHarvestLevel(paille, "Hoe", 0);
                GameRegistry.registerBlock(paille, "pailles");
               
                  proxy.registerRenderers();
 
        }
 
        @PostInit
        public void postInit(FMLPostInitializationEvent event) {
                // Stub Method
        }
}

Et la dernière, la class de mon block PailleBlock
Code:
package bananasplite.adventurecube;
 
 
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraftforge.common.MinecraftForge;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.Init;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.Mod.PostInit;
import cpw.mods.fml.common.Mod.PreInit;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;
 
@Mod(modid="adventurecube", name="AdventureCube", version="1.0.0")
@NetworkMod(clientSideRequired=true, serverSideRequired=false)
public class adventurecube {
 
    public final  static Block paille = new PailleBlock (500, Material.ground)
    .setHardness (0.5F) .setStepSound(Block.soundGrassFootstep)
    .setUnlocalizedName("paille").setCreativeTab(CreativeTabs.tabBlock);
   
   
   
   
        // The instance of your mod that Forge uses.
        @Instance("adventurecube")
        public static adventurecube instance;
     
        // Says where the client and server 'proxy' code is loaded.
        @SidedProxy(clientSide="bananasplite.adventurecube.client.ClientProxy", serverSide="bananasplite.adventurecube.CommonProxy")
        public static CommonProxy proxy;
     
        @PreInit
        public void preInit(FMLPreInitializationEvent event) {
                // Stub Method
        }
     
        @Init
        public void load(FMLInitializationEvent event) {
               
               
                LanguageRegistry.addName(paille, "Block de paille");
                MinecraftForge.setBlockHarvestLevel(paille, "Hoe", 0);
                GameRegistry.registerBlock(paille, "pailles");
               
                  proxy.registerRenderers();
 
        }
 
        @PostInit
        public void postInit(FMLPostInitializationEvent event) {
                // Stub Method
        }
}

Au niveau du chemin des .png rien n'a changé.

Bref, là je suis sur le point de sauter du 3ème étage tellement que ca me bouffe ^^'

(merci de ton aide robin)