GLUtils, ou comment faire des modèles 3D facilement
-
L’api ne fonctionne pas en 1.7… ^^
Caused by: java.lang.NoClassDefFoundError: net/minecraftforge/event/Event
-
Elias, tu as du télécharger les mauvaises sources

En 1.7 la classe Event n’est plus la même https://github.com/jglrxavpok/MCGLUtils/commit/a2647cfdb3b08319e7c1955aa993e29f71324608 -
C’est génial! j’attend avec impatience la partie sur l’animation ^^
Elles est tj d’actualité? Et elle sera pour quelle version: 1.7 ou 1.6? -
Gargan, étant donné que cette lib est une lib LWJGL et non Minecraft, elle devrait marcher tant que Minecraft utilise LWJGL.
Soit : pour toujours
-
Gugu a raison.
Mais comme le système d’animation utilisera les events, il faudra deux-trois très légers changements entre 1.6<->1.7 -
Partie sur les animations postée!
N’hésitez pas à poser des questions et autres! -
Yeah ! Je vais voir !
-
Voilà un tuto montrant réèllement la puissance de Forge et d’OpenGL !
Si vous voulez un conseil, pourquoi pas faire un tuto sur ForgeMultiPart ? -
ForgeMultiPart m’intéresse pas mal, je vais voir pour ajouter ça à ma TODO list, mais ça sera pas avant un moment, en plus ça m’a l’air plutôt complexe, comme FMP est coder en scala, il faut scala dev avec (enfin, il me semble).
-
question, j’ai un amis qui va me faire mes modèle de base sous blender, es que minecraft les acceptera comme ça ?
ou il n’y as que GLUutil qui fonctionne ?sinon excellent tuto clair que sa va grandement m’aidez !
-
@‘anguelwyvern’:
question, j’ai un amis qui va me faire mes modèle de base sous blender, es que minecraft les acceptera comme ça ?
ou il n’y as que GLUutil qui fonctionne ?sinon excellent tuto clair que sa va grandement m’aidez !
Tu peux utiliser le loader forge de base, mais il faudrat adapter ton modèle pour n’user qu’une texture.
Je te conseille de prendre GLUtils, je m’en sert grandement dans mon mod Ratchet & Clank, et le rendu est super.
-
ok merci de ta réponse
-
N’hésite pas à prendre les sources et les compiler avec ton mod

-
ok je vais essayez, j’avoue que je suis au début de mon apprentissage pour l’utilisation java et autre, et je risque par le futur de vous posez pas mal de question, en tous cas depuis qu’elle que jour j’arrête pas de voir tous les tuto de votre chaine youtube en boucle xD
edit : bon j’ai vue les tuto, et mon niveau en java de base est trop faible donc je retourne aux base,
(en gros je ne sait pas ce que fait “@Event Handler” ou “public void/static”
je revient donc dans 2-3 mois quand j’aurais grossis mes connaissancehttp://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-java
bref dsl du dérangement, et merci pour les tuto ^^ sa à été instructif
-
Salut à tous. Bon tutoriel mais il y a juste une chose que je ne comprends pas (une chose surement toute bête) il faut créer un model pour le block lorsque vous dites de dessiner son model et de mettre ceci : model.render();
Le seul truc c’est où faut-il mettre cette ligne de code car elle m’embête in-game mon yoshi a les proportions d’un block normal et il est invisible je vois juste les contours noirs.Plz help
mon tileEntityTestSpecialRenderer.java
package mods.maxiworldcraft.mineKingdomHeartsmod.client; import mods.maxiworldcraft.mineKingdomHeartsmod.common.TileEntityTest; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; import org.jglrxavpok.glutils.TessellatorModel; import org.lwjgl.opengl.GL11; public class TileEntityTestSpecialRenderer extends TileEntitySpecialRenderer implements IInventoryRenderer { private TessellatorModel glmodel; public TileEntityTestSpecialRenderer() { glmodel = new TessellatorModel("/assets/obj/Yoshi.obj"); glmodel.regenerateNormals(); } @Override public void renderTileEntityAt(TileEntity tileentity, double d0, double d1, double d2, float f) { GL11.glPushMatrix(); GL11.glTranslated(d0+0.5, d1, d2+0.5); GL11.glScaled(0.01, 0.01, 0.01); GL11.glShadeModel(GL11.GL_SMOOTH); glmodel.render(); GL11.glPopMatrix(); } public void renderInventory(double x, double y, double z) { this.renderTileEntityTestAt(null, x, y, z, 0.0F); } public void renderTileEntityTestAt(TileEntity te, double x, double y, double z, float tick) { this.renderTileEntityTestAt((TileEntityTest)te, x, y, z, tick); } }mon TileEntityTest.java
package mods.maxiworldcraft.mineKingdomHeartsmod.common; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; public class TileEntityTest extends TileEntity { public String visiteur[] = new String[]{"visiteur0", "visiteur1", "visiteur2", "visiteur3", "visiteur4"}; public void readFromNBT(NBTTagCompound nbtTag) { super.readFromNBT(nbtTag); for(int i = 0; i < 5; i++) { visiteur* = nbtTag.getString("visiteur" + i); } } public void writeToNBT(NBTTagCompound nbtTag) { super.writeToNBT(nbtTag); for(int i = 0; i < 5; i++) { nbtTag.setString("visiteur" + i, visiteur*); } } public String getPlayerList() { return visiteur[0] + ", " + visiteur[1] + ", " + visiteur[2] + ", " + visiteur[3] + ", " + visiteur[4] + ", "; } public void addplayertolist(String playerName) { if(!visiteur[0].equals(playerName)) { for(int i = 3; i >= 0; i–) { visiteur _= visiteur*; } visiteur[0] = playerName; } worldObj.notifyBlockChange(xCoord, yCoord, zCoord, modMineKingdomHearts.blockTest); } } ```_ -
Utilise les balises [java*][/java*] (sans les *) pour insérer du code
Sinon, es-tu sûr d’enregistrer ta TileEntity correctement ?
-
@‘jglrxavpok’:
Utilise les balises [java*][/java*] (sans les *) pour insérer du code
Sinon, es-tu sûr d’enregistrer ta TileEntity correctement ?
voilà ma classe principale et merci de ta réponse ^^
package mods.maxiworldcraft.mineKingdomHeartsmod.common;
import java.awt.Color; import mods.maxiworldcraft.mineKingdomHeartsmod.proxy.modMineKingdomHeartsCommonProxy; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; 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.EntityRegistry; import cpw.mods.fml.common.registry.GameRegistry; @Mod(modid = modMineKingdomHearts.MODID, name = "Mod MineKingdom Hearts", version = "1.0") public class modMineKingdomHearts { public static final String MODID = "modminekingdomhearts"; public static Item itemCIN1; public static Item itemCIN2; public static Item itemCIN3; public static Item itemCIN4; public static Item itemCIN5; public static Block blockTest; @Instance("MODID") public static modMineKingdomHearts instance; public static CreativeTabs mineKingdomHeartsCreativeTabs = new mineKingdomHeartsCreativeTabs("MineKingdom Hearts"); @SidedProxy(clientSide = "mods.maxiworldcraft.mineKingdomHeartsmod.client.modMineKingdomHeartsClientProxy", serverSide = "mods.maxiworldcraft.mineKingdomHeartsmod.proxy.modMineKingdomHeartsCommonProxy") public static modMineKingdomHeartsCommonProxy proxy; @EventHandler public void preInit(FMLPreInitializationEvent event) { itemCIN1 = new itemCIN1().setMaxStackSize(1).setUnlocalizedName("itemCIN1").setTextureName(modMineKingdomHearts.MODID + ":itemCIN1"); GameRegistry.registerItem(itemCIN1, "itemCIN1"); itemCIN2 = new itemCIN2().setMaxStackSize(1).setUnlocalizedName("itemCIN2").setTextureName(modMineKingdomHearts.MODID + ":itemCIN2"); GameRegistry.registerItem(itemCIN2, "itemCIN2"); itemCIN3 = new itemCIN3().setMaxStackSize(1).setUnlocalizedName("itemCIN3").setTextureName(modMineKingdomHearts.MODID + ":itemCIN3"); GameRegistry.registerItem(itemCIN3, "itemCIN3"); itemCIN4 = new itemCIN4().setMaxStackSize(1).setUnlocalizedName("itemCIN4").setTextureName(modMineKingdomHearts.MODID + ":itemCIN4"); GameRegistry.registerItem(itemCIN4, "itemCIN4"); itemCIN5 = new itemCIN5().setMaxStackSize(1).setUnlocalizedName("itemCIN5").setTextureName(modMineKingdomHearts.MODID + ":itemCIN5"); GameRegistry.registerItem(itemCIN5, "itemCIN5"); blockTest = new BlockTest(Material.rock).setCreativeTab(modMineKingdomHearts.mineKingdomHeartsCreativeTabs).setBlockName("blockTest").setBlockTextureName(modMineKingdomHearts.MODID + ":blockTest"); GameRegistry.registerBlock(blockTest, "blockTest"); } @EventHandler public void init(FMLInitializationEvent event) { proxy.registerRenderer(); proxy.registerTileEntityRender(); EntityRegistry.registerGlobalEntityID(EntityEffrayeur.class, "effrayeur", EntityRegistry.findGlobalUniqueEntityId(), new Color(0, 0, 0).getRGB(), new Color(0, 0, 0).getRGB()); EntityRegistry.registerModEntity(EntityEffrayeur.class, "effrayeur", 410, this, 40, 1, true); EntityRegistry.registerGlobalEntityID(EntityHayner.class, "hayner", EntityRegistry.findGlobalUniqueEntityId(), new Color(255, 229, 0).getRGB(), new Color(255, 151, 7).getRGB()); EntityRegistry.registerModEntity(EntityHayner.class, "hayner", 411, this, 40, 1, true); EntityRegistry.registerGlobalEntityID(EntityPence.class, "pence", EntityRegistry.findGlobalUniqueEntityId(), new Color(255, 229, 0).getRGB(), new Color(255, 151, 7).getRGB()); EntityRegistry.registerModEntity(EntityPence.class, "pence", 412, this, 40, 1, true); EntityRegistry.registerGlobalEntityID(EntityOlette.class, "olette", EntityRegistry.findGlobalUniqueEntityId(), new Color(255, 229, 0).getRGB(), new Color(255, 151, 7).getRGB()); EntityRegistry.registerModEntity(EntityOlette.class, "olette", 413, this, 40, 1, true); EntityRegistry.registerGlobalEntityID(EntitySeifer.class, "seifer", EntityRegistry.findGlobalUniqueEntityId(), new Color(255, 229, 0).getRGB(), new Color(255, 151, 7).getRGB()); EntityRegistry.registerModEntity(EntitySeifer.class, "seifer", 414, this, 40, 1, true); EntityRegistry.registerGlobalEntityID(EntityRei.class, "rei", EntityRegistry.findGlobalUniqueEntityId(), new Color(255, 229, 0).getRGB(), new Color(255, 151, 7).getRGB()); EntityRegistry.registerModEntity(EntityRei.class, "rei", 415, this, 40, 1, true); EntityRegistry.registerGlobalEntityID(EntityFuu.class, "fuu", EntityRegistry.findGlobalUniqueEntityId(), new Color(255, 229, 0).getRGB(), new Color(255, 151, 7).getRGB()); EntityRegistry.registerModEntity(EntityFuu.class, "fuu", 416, this, 40, 1, true); GameRegistry.registerTileEntity(TileEntityTest.class, "test"); } @EventHandler public void postInit(FMLPostInitializationEvent event) { } }Sinon as-tu besoin de ma class ClientProxy?
Sinon je ne comprends pas ce que tu me dire à propos des balises? tu parles de ces slash pour les commentaires?
//quelque chose
Tiens au cas où mon client proxy où j’ai déclaré mon TileEntity pour mon TESR
package mods.maxiworldcraft.mineKingdomHeartsmod.client; import mods.maxiworldcraft.mineKingdomHeartsmod.common.EntityEffrayeur; import mods.maxiworldcraft.mineKingdomHeartsmod.common.EntityFuu; import mods.maxiworldcraft.mineKingdomHeartsmod.common.EntityHayner; import mods.maxiworldcraft.mineKingdomHeartsmod.common.EntityOlette; import mods.maxiworldcraft.mineKingdomHeartsmod.common.EntityPence; import mods.maxiworldcraft.mineKingdomHeartsmod.common.EntityRei; import mods.maxiworldcraft.mineKingdomHeartsmod.common.EntitySeifer; import mods.maxiworldcraft.mineKingdomHeartsmod.common.TileEntityTest; import mods.maxiworldcraft.mineKingdomHeartsmod.proxy.modMineKingdomHeartsCommonProxy; import net.minecraft.client.model.ModelBiped; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.client.registry.RenderingRegistry; public class modMineKingdomHeartsClientProxy extends modMineKingdomHeartsCommonProxy { public static int renderInventoryTESRId;; @Override public void registerRenderer() { System.out.println("Salut je suis un test du client"); RenderingRegistry.registerEntityRenderingHandler(EntityEffrayeur.class, new RenderEffrayeur(new ModelBiped(), 0.1F)); RenderingRegistry.registerEntityRenderingHandler(EntityHayner.class, new RenderHayner(new ModelBiped(), 0.5F)); RenderingRegistry.registerEntityRenderingHandler(EntityPence.class, new RenderPence(new ModelBiped(), 0.5F)); RenderingRegistry.registerEntityRenderingHandler(EntityOlette.class, new RenderOlette(new ModelBiped(), 0.5F)); RenderingRegistry.registerEntityRenderingHandler(EntitySeifer.class, new RenderSeifer(new ModelBiped(), 0.5F)); RenderingRegistry.registerEntityRenderingHandler(EntityRei.class, new RenderRei(new ModelBiped(), 0.5F)); RenderingRegistry.registerEntityRenderingHandler(EntityFuu.class, new RenderFuu(new ModelBiped(), 0.5F)); renderInventoryTESRId = RenderingRegistry.getNextAvailableRenderId(); RenderingRegistry.registerBlockHandler(new TESRInventoryRenderer()); } public void registerTileEntityRender() { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityTest.class, new TileEntityTestSpecialRenderer()); } } -
Ton tile entity special render devrait être comme ça :
package mods.maxiworldcraft.mineKingdomHeartsmod.client; import mods.maxiworldcraft.mineKingdomHeartsmod.common.TileEntityTest; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; import org.jglrxavpok.glutils.TessellatorModel; import org.lwjgl.opengl.GL11; public class TileEntityTestSpecialRenderer extends TileEntitySpecialRenderer implements IInventoryRenderer { private TessellatorModel glmodel; public TileEntityTestSpecialRenderer() { glmodel = new TessellatorModel("/assets/obj/Yoshi.obj"); glmodel.regenerateNormals(); } @Override public void renderTileEntityAt(TileEntity tileentity, double d0, double d1, double d2, float f) { this.renderTileEntityTestAt((TileEntityTest)te, x, y, z, tick); } public void renderInventory(double x, double y, double z) { this.renderTileEntityTestAt(null, x, y, z, 0.0F); } public void renderTileEntityTestAt(TileEntityTest te, double x, double y, double z, float tick) { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5, y, z +0.5); // GL11.glScaled(0.01, 0.01, 0.01); J'ai pas compris pourquoi tu as réduit ton modèle ? GL11.glShadeModel(GL11.GL_SMOOTH); glmodel.render(); GL11.glPopMatrix(); } }Aussi dans ton tile entity, tu n’es pas obligé de remettre toutes les fonctions donnés dans le tutoriel sur les tile entity, c’est juste un exemple d’utilisation.
Il ne faut pas copier bêtement les codes, il faut aussi lire les explications !ÉDIT : les balises c’est ça :
public String = "exemple de la balise java";il faut faire ça :
```java public String = "exemple de la balise java"; -
@‘robin4002’:
Ton tile entity special render devrait être comme ça :
package mods.maxiworldcraft.mineKingdomHeartsmod.client; import mods.maxiworldcraft.mineKingdomHeartsmod.common.TileEntityTest; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; import org.jglrxavpok.glutils.TessellatorModel; import org.lwjgl.opengl.GL11; public class TileEntityTestSpecialRenderer extends TileEntitySpecialRenderer implements IInventoryRenderer { private TessellatorModel glmodel; public TileEntityTestSpecialRenderer() { glmodel = new TessellatorModel("/assets/obj/Yoshi.obj"); glmodel.regenerateNormals(); } @Override public void renderTileEntityAt(TileEntity tileentity, double d0, double d1, double d2, float f) { this.renderTileEntityTestAt((TileEntityTest)te, x, y, z, tick); } public void renderInventory(double x, double y, double z) { this.renderTileEntityTestAt(null, x, y, z, 0.0F); } public void renderTileEntityTestAt(TileEntityTest te, double x, double y, double z, float tick) { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5, y, z +0.5); // GL11.glScaled(0.01, 0.01, 0.01); J'ai pas compris pourquoi tu as réduit ton modèle ? GL11.glShadeModel(GL11.GL_SMOOTH); glmodel.render(); GL11.glPopMatrix(); } }Aussi dans ton tile entity, tu n’es pas obligé de remettre toutes les fonctions donnés dans le tutoriel sur les tile entity, c’est juste un exemple d’utilisation.
Il ne faut pas copier bêtement les codes, il faut aussi lire les explications !Merci Robin je sais bien mais j’ai quand même lu mais en 1.7 il y avait quelque erreur et pour être sur d’en avoir un minimum j’ai pris tes fonctions que je comptais enlever après que mon tesr marche.
Mais il y a un problème car après avoir pris ton code cela ne marche toujours pas plz helpEDIT = après remarque on n’a besoin d’aucune fonction de base dans notre tileentity du coup j’ai retiré toutes celles de ton tuto sur çà Robin
EDIT = Après avoir vaguement regardé quelque réponse j’ai l’impression que tous le monde a corrigé cette erreur de transparence en mettant ceci dans la méthode render du modèle :
Shape1.render(f5); Shape2.render(f5); Shape3.render(f5);Mais, le problème c’est que je n’ai pas de modèle puisque je fais avec GLUtils donc…éclairez moi svp
-
Dans ton client proxy il te manque la ligne :
TESRInventoryRenderer.blockByTESR.put(new TESRIndex(ClassePrincipale.leBlock, 0), new TileEntityTestSpecialRenderer());
Je peux aussi avoir la classe de ton bloc ?