Rendu bloc TESR invisible.
-
Bonjour, j’ai suivi le tutoriel pour ajouter un rendu TESR à un bloc (ici), mais je suis bloqué sur le visuel de ce dernier. L’objectif est de créer une sorte de pancarte mais une fois en jeu, le bloc est bien là (quand je passe ma souris dessus, les contours sont délimités) mais il est invisible.
Ma classe principale :
:::
public static Block pancarteIncarnam; @EventHandler
public void preInit(FMLPreInitializationEvent event)
{
//BLOCKS
logoBlockBuild = new LogoBlockBuild(Material.rock).setBlockName("LogoBlockBuild").setBlockTextureName(DCEDO.MODID + ":Logo_Blocks_Build");
GameRegistry.registerBlock(logoBlockBuild, "LogoBlockBuild");
pancarteIncarnam = new PancarteIncarnam(Material.rock).setBlockName("PancarteIncarnam").setBlockTextureName(DCEDO.MODID + ":Texture_Pancarte_Incarnam").setCreativeTab(DCEDO.DCEDOCreativeTabsBlocks);
GameRegistry.registerBlock(pancarteIncarnam, "PancarteIncarnam"); }
:::
La classe de ma pancarte :
:::
package fr.shyfe.dcedo.common; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; public class PancarteIncarnam extends Block { protected PancarteIncarnam(Material material) { super(material); } @Override public TileEntity createTileEntity(World world, int metadata) { return new TileEntityPancarteIncarnam(); } @Override public boolean hasTileEntity(int metadata) { return true; } public boolean isOpaqueCube() { return false; } public boolean renderAsNormalBlock() { return false; } public int getRenderType() { return -1; } }
:::
Le model :
:::
package fr.shyfe.dcedo.common; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; import net.minecraft.entity.Entity; public class ModelPancarteIncarnam extends ModelBase { ModelRenderer Shape1; ModelRenderer Shape2; ModelRenderer Shape3; ModelRenderer Shape4; ModelRenderer Shape5; ModelRenderer Shape6; ModelRenderer Shape7; ModelRenderer Shape8; ModelRenderer Shape9; public ModelPancarteIncarnam() { textureWidth = 64; textureHeight = 64; Shape1 = new ModelRenderer(this, 26, 21); Shape1.mirror = true; Shape1.addBox(0F, 0F, 0F, 2, 15, 1); Shape1.setRotationPoint(0F, 9F, 0F); Shape1.setTextureSize(64, 64); setRotation(Shape1, 0F, 0F, 0F); Shape2 = new ModelRenderer(this, 20, 10); Shape2.mirror = true; Shape2.addBox(0F, 0F, 0F, 10, 10, 1); Shape2.setRotationPoint(-4F, 8F, -0.5F); Shape2.setTextureSize(64, 64); setRotation(Shape2, 0F, 0F, 0F); Shape3 = new ModelRenderer(this, 10, 10); Shape3.mirror = true; Shape3.addBox(0F, 0F, 0F, 4, 5, 1); Shape3.setRotationPoint(-8F, 8F, -0.5F); Shape3.setTextureSize(64, 64); setRotation(Shape3, 0F, 0F, 0F); Shape4 = new ModelRenderer(this, 30, 5); Shape4.mirror = true; Shape4.addBox(0F, 0F, 0F, 4, 4, 1); Shape4.setRotationPoint(2F, 5F, -0.5F); Shape4.setTextureSize(64, 64); setRotation(Shape4, 0F, 0F, 0F); Shape5 = new ModelRenderer(this, 43, 13); Shape5.mirror = true; Shape5.addBox(0F, 0F, 0F, 4, 2, 1); Shape5.setRotationPoint(5F, 11F, -0.5F); Shape5.setTextureSize(64, 64); setRotation(Shape5, 0F, 0F, 0F); Shape6 = new ModelRenderer(this, 45, 9); Shape6.mirror = true; Shape6.addBox(0F, 0F, 0F, 4, 2, 1); Shape6.setRotationPoint(8F, 9.1F, -0.5F); Shape6.setTextureSize(64, 64); setRotation(Shape6, 0F, 0F, 0.7853982F); Shape7 = new ModelRenderer(this, 45, 17); Shape7.mirror = true; Shape7.addBox(0F, 0F, 0F, 4, 2, 1); Shape7.setRotationPoint(6.5F, 13.4F, -0.5F); Shape7.setTextureSize(64, 64); setRotation(Shape7, 0F, 0F, -0.7853982F); Shape8 = new ModelRenderer(this, 12, 10); Shape8.mirror = true; Shape8.addBox(0F, 0F, 0F, 5, 1, 1); Shape8.setRotationPoint(8.1F, 8.6F, -0.8F); Shape8.setTextureSize(64, 64); setRotation(Shape8, 0F, 0F, 0.7853982F); Shape9 = new ModelRenderer(this, 12, 10); Shape9.mirror = true; Shape9.addBox(0F, 0F, 0F, 5, 1, 1); Shape9.setRotationPoint(7.3F, 14.6F, -0.8F); Shape9.setTextureSize(64, 64); setRotation(Shape9, 0F, 0F, -0.7853982F); } public void renderAll() { Shape1.render(0.0625F); Shape2.render(0.0625F); Shape3.render(0.0625F); Shape4.render(0.0625F); Shape5.render(0.0625F); Shape6.render(0.0625F); Shape7.render(0.0625F); Shape8.render(0.0625F); Shape9.render(0.0625F); } private void setRotation(ModelRenderer model, float x, float y, float z) { model.rotateAngleX = x; model.rotateAngleY = y; model.rotateAngleZ = z; } }
:::
Le tile entity
:::
package fr.shyfe.dcedo.common; import net.minecraft.tileentity.TileEntity; public class TileEntityPancarteIncarnam extends TileEntity { }
:::
Le tile entity special renderer
:::
package fr.shyfe.dcedo.common; import org.lwjgl.opengl.GL11; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; public class TileEntityPancarteIncarnamSpecialRenderer extends TileEntitySpecialRenderer { public static ModelPancarteIncarnam model = new ModelPancarteIncarnam(); public static ResourceLocation texture = new ResourceLocation(DCEDO.MODID, "textures/models/TextureModelPancarteIncarnam.png"); @Override public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float partialRenderTick) { this.renderTileEntityPancarteIncarnamAt((TileEntityPancarteIncarnam)tile, x, y, z, partialRenderTick); } private void renderTileEntityPancarteIncarnamAt(TileEntityPancarteIncarnam tile, double x, double y, double z, float partialRenderTick) { GL11.glPushMatrix(); // ouvre une matrix GL11.glTranslated(x + 0.5D, y + 1.5D, z + 0.5D); // déplace le bloc sur les coordonnés et le centre GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); // met droit le bloc (par défaut il est à l'envers) this.bindTexture(texture); // affiche la texture model.renderAll(); // rend le modèle GL11.glPopMatrix(); // ferme la matrix } }
:::
Proxy coté client :
:::
package fr.shyfe.dcedo.proxy; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.eventhandler.EventBus; import fr.shyfe.dcedo.common.TileEntityPancarteIncarnam; import fr.shyfe.dcedo.common.TileEntityPancarteIncarnamSpecialRenderer; public class DCEDOClientProxy extends DCEDOCommonProxy { @Override public void registerRender() { System.out.println("méthode côté client"); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPancarteIncarnam.class, new TileEntityPancarteIncarnamSpecialRenderer()); } }
:::
Merci d’avance ! Et je tiens à préciser que je n’ai pas fini le tutoriel mais je devrais voir le bloc comme dans la vidéo, hors ce n’est pas le cas et je préfère régler les problèmes au fur et à mesure que tout d’un coup.
-
Est-ce que tu peux envoyer la classe principale en entière dans une seule balise java ?
-
Balise codeCeption
-
Oui, bien sûr :
package fr.shyfe.dcedo.common; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; 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.registry.GameRegistry; import cpw.mods.fml.relauncher.SideOnly; import fr.shyfe.dcedo.proxy.DCEDOCommonProxy; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; @Mod(modid = "DCEDO", name = "Des Cubes & Des Oeufs", version = "1.0.0") public class DCEDO { @Instance("DCEDO") public static DCEDO instance; @SidedProxy(clientSide = "fr.shyfe.dcedo.proxy.DCEDOClientProxy", serverSide = "fr.shyfe.dcedo.proxy.DCEDOCommonProxy") public static DCEDOCommonProxy proxy; public static final String MODID = "DCEDO"; //Creative Tab Blocks public static CreativeTabs DCEDOCreativeTabsBlocks = new CreativeTabs("DCEDO_Creative_Tabs_Blocks") { @Override public Item getTabIconItem() { return Item.getItemFromBlock(DCEDO.logoBlockBuild); } }; //Creative Tab Spells public static CreativeTabs DCEDOCreativeTabsSpells = new CreativeTabs("DCEDO_Creative_Tabs_Spells") { @Override public Item getTabIconItem() { return Item.getItemFromBlock(DCEDO.logoBlockBuild); } }; public static Block logoBlockBuild; public static Block solIncarnam; public static Item spellCra; public static Block pancarteIncarnam; //public static Block test; @EventHandler public void preInit(FMLPreInitializationEvent event) { //BLOCKS logoBlockBuild = new LogoBlockBuild(Material.rock).setBlockName("LogoBlockBuild").setBlockTextureName(DCEDO.MODID + ":Logo_Blocks_Build"); GameRegistry.registerBlock(logoBlockBuild, "LogoBlockBuild"); pancarteIncarnam = new PancarteIncarnam(Material.rock).setBlockName("PancarteIncarnam").setBlockTextureName(DCEDO.MODID + ":Texture_Pancarte_Incarnam").setCreativeTab(DCEDO.DCEDOCreativeTabsBlocks); GameRegistry.registerBlock(pancarteIncarnam, "PancarteIncarnam"); //test = new Test(Material.rock).setBlockName("Test").setBlockTextureName(DCEDO.MODID + ""); //GameRegistry.registerBlock(test, "Test"); //Sol Incarnam solIncarnam = new SolIncarnam().setBlockName("SolIncarnam").setHardness(1.5F).setResistance(10.0F).setCreativeTab(DCEDO.DCEDOCreativeTabsBlocks); GameRegistry.registerBlock(solIncarnam, ItemSolIncarnam.class, "SolIncarnam"); //Spell spellCra = new spellCra().setUnlocalizedName("SpellCra").setCreativeTab(DCEDO.DCEDOCreativeTabsSpells); ; GameRegistry.registerItem(spellCra, "spellCra", "SpellCra"); } @EventHandler public void init(FMLInitializationEvent event) { } @EventHandler public void postInit(FMLPostInitializationEvent event) { } }
-
C’est pas une balise java mais bon…
Tu n’appelles jamais le registerRender de ton proxy
-
Bonjour, alors déjà, utilise des balises java, ça colore le texte. De ce que j’ai vu de ton code, déjà, ton tile entity n’est pas register (GameRegistry.registerTileEntity(ClasseDuTileentity.class, “LeNom”); à mettre dans l’init ou le preInit), mais ça ne gène pas le rendu, le problème est que tu n’appelles pas la fonction registerRender de ton proxy.
-
@‘SCAREX’:
C’est pas une balise java mais bon…
Tu n’appelles jamais le registerRender de ton proxy
package fr.shyfe.dcedo.common; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; 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.registry.GameRegistry; import cpw.mods.fml.relauncher.SideOnly; import fr.shyfe.dcedo.proxy.DCEDOCommonProxy; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; @Mod(modid = "DCEDO", name = "Des Cubes & Des Oeufs", version = "1.0.0") public class DCEDO { @Instance("DCEDO") public static DCEDO instance; @SidedProxy(clientSide = "fr.shyfe.dcedo.proxy.DCEDOClientProxy", serverSide = "fr.shyfe.dcedo.proxy.DCEDOCommonProxy") public static DCEDOCommonProxy proxy; public static final String MODID = "DCEDO"; //Creative Tab Blocks public static CreativeTabs DCEDOCreativeTabsBlocks = new CreativeTabs("DCEDO_Creative_Tabs_Blocks") { @Override public Item getTabIconItem() { return Item.getItemFromBlock(DCEDO.logoBlockBuild); } }; //Creative Tab Spells public static CreativeTabs DCEDOCreativeTabsSpells = new CreativeTabs("DCEDO_Creative_Tabs_Spells") { @Override public Item getTabIconItem() { return Item.getItemFromBlock(DCEDO.logoBlockBuild); } }; public static Block logoBlockBuild; public static Block solIncarnam; public static Item spellCra; public static Block pancarteIncarnam; //public static Block test; @EventHandler public void preInit(FMLPreInitializationEvent event) { //BLOCKS logoBlockBuild = new LogoBlockBuild(Material.rock).setBlockName("LogoBlockBuild").setBlockTextureName(DCEDO.MODID + ":Logo_Blocks_Build"); GameRegistry.registerBlock(logoBlockBuild, "LogoBlockBuild"); pancarteIncarnam = new PancarteIncarnam(Material.rock).setBlockName("PancarteIncarnam").setBlockTextureName(DCEDO.MODID + ":Texture_Pancarte_Incarnam").setCreativeTab(DCEDO.DCEDOCreativeTabsBlocks); GameRegistry.registerBlock(pancarteIncarnam, "PancarteIncarnam"); //test = new Test(Material.rock).setBlockName("Test").setBlockTextureName(DCEDO.MODID + ""); //GameRegistry.registerBlock(test, "Test"); //Sol Incarnam solIncarnam = new SolIncarnam().setBlockName("SolIncarnam").setHardness(1.5F).setResistance(10.0F).setCreativeTab(DCEDO.DCEDOCreativeTabsBlocks); GameRegistry.registerBlock(solIncarnam, ItemSolIncarnam.class, "SolIncarnam"); //Sorts //Cra spellCra = new spellCra().setUnlocalizedName("SpellCra").setCreativeTab(DCEDO.DCEDOCreativeTabsSpells); ; GameRegistry.registerItem(spellCra, "spellCra", "SpellCra"); } @EventHandler public void init(FMLInitializationEvent event) { } @EventHandler public void postInit(FMLPostInitializationEvent event) { } }
J’avais pas vu cette fonction
-
Dans la classe de ton proxy, tu as la fonction registerRender() que tu as crée mais que tu n’appelles pas, mets proxy.registerRender() dans ton init ou ton preInit.
-
EDIT : J’avais pas vu ton message, effectivement le block s’affiche désormais, merci beaucoup je vous met un “+” à chacun si ca peut vous aider.
EDIT 2 : Je ne voit pas pourquoi mais, la texture ne veut pas s’afficher, le chemin est le bon, la texture est bien en png, j’ai bien mit le .png, le chemin exact et appelé à l’aide de “this.bindTexture(texture);” mais rien n’y fait, la taille de cette texture est de 64/64
-
La texture est noire et violette ? Vérifies bien le chemin de la texture, que tu as bien mis les bonnes minuscules/majuscules, et regarde si la texture est bien affichée dans la package explorer (clic droit=>refresh pour rafraîchir) si elle s’affiche pas).
-
@‘AymericRed’:
La texture est noire et violette ? Vérifies bien le chemin de la texture, que tu as bien mis les bonnes minuscules/majuscules, et regarde si la texture est bien affichée dans la package explorer (clic droit=>refresh pour rafraîchir) si elle s’affiche pas).
Oui la texture est noire et violette, et pour toutes tes indications, j’ai vérifié
-
Envoi les logs
-
@‘SCAREX’:
Envoi les logs
J’avais pas vu ton message, les voici :
Le passage en question :
:::
: Failed to load texture: DCEDO:textures/models/blocks/texture_model_pancarte_incarnam.png
java.io.FileNotFoundException: DCEDO:textures/models/blocks/texture_model_pancarte_incarnam.png
at net.minecraft.client.resources.SimpleReloadableResourceManager.getResource(SimpleReloadableResourceManager.java:71) ~[SimpleReloadableResourceManager.class:?]
at net.minecraft.client.renderer.texture.SimpleTexture.loadTexture(SimpleTexture.java:35) ~[SimpleTexture.class:?]
at net.minecraft.client.renderer.texture.TextureManager.loadTexture(TextureManager.java:89) [TextureManager.class:?]
at net.minecraft.client.renderer.texture.TextureManager.bindTexture(TextureManager.java:45) [TextureManager.class:?]
at net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer.bindTexture(TileEntitySpecialRenderer.java:25) [TileEntitySpecialRenderer.class:?]
at fr.shyfe.dcedo.common.TileEntityPancarteIncarnamSpecialRenderer.renderTileEntityPancarteIncarnamAt(TileEntityPancarteIncarnamSpecialRenderer.java:26) [TileEntityPancarteIncarnamSpecialRenderer.class:?]
at fr.shyfe.dcedo.common.TileEntityPancarteIncarnamSpecialRenderer.renderTileEntityAt(TileEntityPancarteIncarnamSpecialRenderer.java:18) [TileEntityPancarteIncarnamSpecialRenderer.class:?]
at net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher.renderTileEntityAt(TileEntityRendererDispatcher.java:141) [TileEntityRendererDispatcher.class:?]
at net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher.renderTileEntity(TileEntityRendererDispatcher.java:126) [TileEntityRendererDispatcher.class:?]
at net.minecraft.client.renderer.RenderGlobal.renderEntities(RenderGlobal.java:539) [RenderGlobal.class:?]
at net.minecraft.client.renderer.EntityRenderer.renderWorld(EntityRenderer.java:1300) [EntityRenderer.class:?]
at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1087) [EntityRenderer.class:?]
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1067) [Minecraft.class:?]
at net.minecraft.client.Minecraft.run(Minecraft.java:962) [Minecraft.class:?]
at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_73]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_73]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_73]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_73]
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/:?]
[18:55:28] [Server thread/INFO]: Saving and pausing game…
[18:55:28] [Server thread/INFO]: Saving chunks for level ‘New World’/Overworld
[18:55:28] [Server thread/INFO]: Saving chunks for level ‘New World’/Nether
[18:55:28] [Server thread/INFO]: Saving chunks for level ‘New World’/The End
::: -
Jamais de majuscule au modid. JAMAIS ! ou plutôt, jamais !!!
Et vérifies que la texture se trouve dans le dossier src/main/resources/assets/dcedo/textures/models/blocks/
-
@‘robin4002’:
Jamais de majuscule au modid. JAMAIS ! ou plutôt, jamais !!!
Et vérifies que la texture se trouve dans le dossier src/main/resources/assets/dcedo/textures/models/blocks/
Hmm, il est exactement à cet endroit et pourtant toujours une texture noire et violette…
-
Le fichier est-il visible sur eclipse ?
-
@‘robin4002’:
Le fichier est-il visible sur eclipse ?
Oui, et quand je double clique dessus depuis eclipse, c’est la bonne texture
-
As-tu vérifier les minuscules/majuscules ?
-
@‘robin4002’:
As-tu vérifier les minuscules/majuscules ?
Oui …
-
Envoies-moi un zip de ton dossier src.