Résolu Comment animer un bloc rendu TESR constamment ?
-
Bonjour/Bonsoir j’ai un nouveau problème, et ce problème est que je ne trouve pas de tuto pour animer un bloc avec rendu TESR.
Héhé je vous vois venir en disant : “Ouvre tes yeux : http://www.minecraftforgefrance.fr/showthread.php?tid=375”
Mais ce n’est pas ce que je veux.
Voici le bloc que je veux animer :
Je veux que le noyau jaune au centre tourne sur lui-même, le problème du tuto d’animation sur le site c’est que cela nous permet de faire une animation que quand le joueur ouvre et ferme le placard, mais je veux que le noyau tourne tout le temps sans interruption et sans l’aide d’un joueur.
J’ai cherché partout un tuto sur ça mais non seulement c’est très rare mais en plus quand j’en trouve un c’est pour animer un coffre donc cela reviens au tuto de robin, je sais que les demandes de tuto pour animer un coffre sont surement plus grandes que pour celle de faire tourner un noyau mais au moins c’est la base de l’animation.
Bon, j’ai quand même essayer de trouver mon bonheur dans le tuto de robin mais quand j’ai tester le noyau ne tournait pas…
Donc si jamais vous avez la solution pour animer mon p’tit noyau ou le bon tutoriel je serai ravi que vous m’en fassiez part, je suis sure que c’est beaucoup plus simple que ce que je pense mais ça va faire 2 heure que je cherche
Merci d’avance.
PS : Si quelqu’un a le courage de rédiger un tuto en 1.7 sur le rendu via TESR et (surtout) sur les bases de l’animation** **des rendus TESR (genre “je vais vous apprendre à faire tourner un noyau dans un bloc avec rendu TESR” ) ça ne serait pas de refus comme ça les prochains qui galéreront comme moi à animer leurs blocs trouveront la solution en un clic et n’embêteront personne.
-
“OUVRE TES YEUX !”
Nan plus sérieusement : essaye de voir si tu peux pas utiliser l’updateTick du bloc pour le render ou quelque chose comme ça -
@‘NicoKing60’:
Je veux que le noyau jaune au centre tourne sur lui-même, le problème du tuto d’animation sur le site c’est que cela nous permet de faire une animation que quand le joueur ouvre et ferme le placard, mais je veux que le noyau tourne tout le temps sans interruption et sans l’aide d’un joueur.
Sérieusement c’est exactement la même chose –’
Sauf que au lieu de faire tourner ton morceau en fonction de la variable du coffre, tu le fais tourner en fonction d’une autre variable qui augmente en continu.Et puis je sais que ce tutoriel n’a jamais été terminé (j’ai jamais rédigé la deuxième partie) mais si tu aurai regardé l’introduction, tu aurai vu que dans la deuxième partie je fais tourner quelque chose en continu, et comme je n’aime pas laisser les choses vide, j’ai mit le commit github : https://github.com/FFMT/ModTutoriel/commit/38671521bc9b537e484cc299400cac8414fc4947
-
Ce qui est génial avec mon mod, c’est qu’il répond souvent au problèmes des gens.
https://github.com/Gugu42/RatchetAndClankMod/blob/master/java/com/gugu42/rcmod/render/TileEntityVersaTargetGSpecialRenderer.java -
J’y comprend rien quoi que je fasse le noyau tourne pas, même en essayant toute les solutions que vous me proposez, j’ai dû louper quelque chose où quoi ?
-
Montre tes codes sa peut aide
-
Ah oui les codes…
Sachant que j’ai enlevé tout les codes qui aurait du permettre de faire l’animation, parce que après j’ai décider de faire autre chose en attendent de trouver une solution, et aussi une autre chose moins importante quand je tiens le bloc dans la main il n’apparaît pas mais ce n’est pas grave puisque le joueur ne pourra jamais avoir le bloc dans son inventaire
La class TileEntitySpecialRender
package com.nicoking60.cwm.client; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; import com.nicoking60.cwm.common.ModelLegendaryStoneOfGround; import com.nicoking60.cwm.common.TElegendaryStoneG; public class TElegendaryStoneGSpecialRender extends TileEntitySpecialRenderer implements IInventoryRenderer { private final ModelLegendaryStoneOfGround model = new ModelLegendaryStoneOfGround(); public static final ResourceLocation textureLocation = new ResourceLocation("cwm", "textures/blocks/legendary_stone_ground.png"); public TElegendaryStoneGSpecialRender() { this.func_147497_a(TileEntityRendererDispatcher.instance); } @Override public void renderTileEntityAt(TileEntity te, double x, double y, double z, float tick) { this.renderTElegendaryStoneGAt((TElegendaryStoneG)te, x, y, z, tick); } @Override public void renderInventory(double x, double y, double z) { this.renderTElegendaryStoneGAt((TElegendaryStoneG)tileentity, x, y, z, tick); } public void renderTElegendaryStoneGAt(TElegendaryStoneG te, double x, double y, double z, float tick) { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5F, y + 1.5F, z + 0.5F); this.bindTexture(textureLocation); GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); this.model.render(0.0625F); GL11.glPopMatrix(); } }
La class du model
package com.nicoking60.cwm.common; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; public class ModelLegendaryStoneOfGround extends ModelBase { //fields ModelRenderer Shaped1; ModelRenderer Shaped2; ModelRenderer Shaped3; ModelRenderer Shaped4; ModelRenderer Shaped5; ModelRenderer Shaped6; ModelRenderer Shaped7; ModelRenderer Shaped8; ModelRenderer Shaped9; ModelRenderer Shaped10; ModelRenderer Shaped11; ModelRenderer Shaped12; ModelRenderer Shape1; ModelRenderer Shape2; ModelRenderer Shape3; ModelRenderer Shape4; ModelRenderer Shape5; ModelRenderer Shape6; ModelRenderer Shape7; ModelRenderer Shape8; ModelRenderer Shape9; ModelRenderer Shape10; ModelRenderer Shape11; ModelRenderer Shape12; ModelRenderer Shape13; ModelRenderer Shape14; ModelRenderer Shape15; ModelRenderer Shape16; ModelRenderer Shape17; ModelRenderer Shape18; ModelRenderer Shape19; ModelRenderer Shape20; ModelRenderer Shape21; ModelRenderer Shape22; ModelRenderer Shape23; ModelRenderer Shape24; ModelRenderer Noyau1; ModelRenderer Noyau2; public ModelLegendaryStoneOfGround() { textureWidth = 64; textureHeight = 32; Shaped1 = new ModelRenderer(this, 30, 0); Shaped1.addBox(0F, 0F, 0F, 1, 16, 1); Shaped1.setRotationPoint(-8F, 8F, -8F); Shaped1.setTextureSize(64, 32); Shaped1.mirror = true; setRotation(Shaped1, 0F, 0F, 0F); Shaped2 = new ModelRenderer(this, 30, 0); Shaped2.addBox(0F, 0F, 0F, 1, 16, 1); Shaped2.setRotationPoint(7F, 8F, 7F); Shaped2.setTextureSize(64, 32); Shaped2.mirror = true; setRotation(Shaped2, 0F, 0F, 0F); Shaped3 = new ModelRenderer(this, 30, 0); Shaped3.addBox(0F, 0F, 0F, 1, 16, 1); Shaped3.setRotationPoint(-8F, 8F, 7F); Shaped3.setTextureSize(64, 32); Shaped3.mirror = true; setRotation(Shaped3, 0F, 0F, 0F); Shaped4 = new ModelRenderer(this, 30, 0); Shaped4.addBox(0F, 0F, 0F, 1, 16, 1); Shaped4.setRotationPoint(7F, 8F, -8F); Shaped4.setTextureSize(64, 32); Shaped4.mirror = true; setRotation(Shaped4, 0F, 0F, 0F); Shaped5 = new ModelRenderer(this, 34, 0); Shaped5.addBox(0F, 0F, 0F, 1, 1, 14); Shaped5.setRotationPoint(7F, 23F, -7F); Shaped5.setTextureSize(64, 32); Shaped5.mirror = true; setRotation(Shaped5, 0F, 0F, 0F); Shaped6 = new ModelRenderer(this, 34, 0); Shaped6.addBox(0F, 0F, 0F, 1, 1, 14); Shaped6.setRotationPoint(-8F, 23F, -7F); Shaped6.setTextureSize(64, 32); Shaped6.mirror = true; setRotation(Shaped6, 0F, 0F, 0F); Shaped7 = new ModelRenderer(this, 0, 0); Shaped7.addBox(0F, 0F, 0F, 14, 1, 1); Shaped7.setRotationPoint(-7F, 23F, 7F); Shaped7.setTextureSize(64, 32); Shaped7.mirror = true; setRotation(Shaped7, 0F, 0F, 0F); Shaped8 = new ModelRenderer(this, 0, 0); Shaped8.addBox(0F, 0F, 0F, 14, 1, 1); Shaped8.setRotationPoint(-7F, 23F, -8F); Shaped8.setTextureSize(64, 32); Shaped8.mirror = true; setRotation(Shaped8, 0F, 0F, 0F); Shaped9 = new ModelRenderer(this, 0, 0); Shaped9.addBox(0F, 0F, 0F, 14, 1, 1); Shaped9.setRotationPoint(-7F, 8F, 7F); Shaped9.setTextureSize(64, 32); Shaped9.mirror = true; setRotation(Shaped9, 0F, 0F, 0F); Shaped10 = new ModelRenderer(this, 0, 0); Shaped10.addBox(0F, 0F, 0F, 14, 1, 1); Shaped10.setRotationPoint(-7F, 8F, -8F); Shaped10.setTextureSize(64, 32); Shaped10.mirror = true; setRotation(Shaped10, 0F, 0F, 0F); Shaped11 = new ModelRenderer(this, 34, 0); Shaped11.addBox(0F, 0F, 0F, 1, 1, 14); Shaped11.setRotationPoint(7F, 8F, -7F); Shaped11.setTextureSize(64, 32); Shaped11.mirror = true; setRotation(Shaped11, 0F, 0F, 0F); Shaped12 = new ModelRenderer(this, 34, 0); Shaped12.addBox(0F, 0F, 0F, 1, 1, 14); Shaped12.setRotationPoint(-8F, 8F, -7F); Shaped12.setTextureSize(64, 32); Shaped12.mirror = true; setRotation(Shaped12, 0F, 0F, 0F); Shape1 = new ModelRenderer(this, 0, 2); Shape1.addBox(0F, 0F, 0F, 1, 1, 1); Shape1.setRotationPoint(-8F, 9F, -7F); Shape1.setTextureSize(64, 32); Shape1.mirror = true; setRotation(Shape1, 0F, 0F, 0F); Shape2 = new ModelRenderer(this, 0, 2); Shape2.addBox(0F, 0F, 0F, 1, 1, 1); Shape2.setRotationPoint(-8F, 9F, 6F); Shape2.setTextureSize(64, 32); Shape2.mirror = true; setRotation(Shape2, 0F, 0F, 0F); Shape3 = new ModelRenderer(this, 0, 2); Shape3.addBox(0F, 0F, 0F, 1, 1, 1); Shape3.setRotationPoint(-8F, 22F, -7F); Shape3.setTextureSize(64, 32); Shape3.mirror = true; setRotation(Shape3, 0F, 0F, 0F); Shape4 = new ModelRenderer(this, 0, 2); Shape4.addBox(0F, 0F, 0F, 1, 1, 1); Shape4.setRotationPoint(-8F, 22F, 6F); Shape4.setTextureSize(64, 32); Shape4.mirror = true; setRotation(Shape4, 0F, 0F, 0F); Shape5 = new ModelRenderer(this, 0, 2); Shape5.addBox(0F, 0F, 0F, 1, 1, 1); Shape5.setRotationPoint(6F, 9F, -8F); Shape5.setTextureSize(64, 32); Shape5.mirror = true; setRotation(Shape5, 0F, 0F, 0F); Shape6 = new ModelRenderer(this, 0, 2); Shape6.addBox(0F, 0F, 0F, 1, 1, 1); Shape6.setRotationPoint(-7F, 9F, -8F); Shape6.setTextureSize(64, 32); Shape6.mirror = true; setRotation(Shape6, 0F, 0F, 0F); Shape7 = new ModelRenderer(this, 0, 2); Shape7.addBox(0F, 0F, 0F, 1, 1, 1); Shape7.setRotationPoint(6F, 22F, -8F); Shape7.setTextureSize(64, 32); Shape7.mirror = true; setRotation(Shape7, 0F, 0F, 0F); Shape8 = new ModelRenderer(this, 0, 2); Shape8.addBox(0F, 0F, 0F, 1, 1, 1); Shape8.setRotationPoint(-7F, 22F, -8F); Shape8.setTextureSize(64, 32); Shape8.mirror = true; setRotation(Shape8, 0F, 0F, 0F); Shape9 = new ModelRenderer(this, 0, 2); Shape9.addBox(0F, 0F, 0F, 1, 1, 1); Shape9.setRotationPoint(7F, 22F, 6F); Shape9.setTextureSize(64, 32); Shape9.mirror = true; setRotation(Shape9, 0F, 0F, 0F); Shape10 = new ModelRenderer(this, 0, 2); Shape10.addBox(0F, 0F, 0F, 1, 1, 1); Shape10.setRotationPoint(7F, 22F, -7F); Shape10.setTextureSize(64, 32); Shape10.mirror = true; setRotation(Shape10, 0F, 0F, 0F); Shape11 = new ModelRenderer(this, 0, 2); Shape11.addBox(0F, 0F, 0F, 1, 1, 1); Shape11.setRotationPoint(7F, 9F, -7F); Shape11.setTextureSize(64, 32); Shape11.mirror = true; setRotation(Shape11, 0F, 0F, 0F); Shape12 = new ModelRenderer(this, 0, 2); Shape12.addBox(0F, 0F, 0F, 1, 1, 1); Shape12.setRotationPoint(7F, 9F, 6F); Shape12.setTextureSize(64, 32); Shape12.mirror = true; setRotation(Shape12, 0F, 0F, 0F); Shape13 = new ModelRenderer(this, 0, 2); Shape13.addBox(0F, 0F, 0F, 1, 1, 1); Shape13.setRotationPoint(6F, 9F, 7F); Shape13.setTextureSize(64, 32); Shape13.mirror = true; setRotation(Shape13, 0F, 0F, 0F); Shape14 = new ModelRenderer(this, 0, 2); Shape14.addBox(0F, 0F, 0F, 1, 1, 1); Shape14.setRotationPoint(-7F, 9F, 7F); Shape14.setTextureSize(64, 32); Shape14.mirror = true; setRotation(Shape14, 0F, 0F, 0F); Shape15 = new ModelRenderer(this, 0, 2); Shape15.addBox(0F, 0F, 0F, 1, 1, 1); Shape15.setRotationPoint(6F, 22F, 7F); Shape15.setTextureSize(64, 32); Shape15.mirror = true; setRotation(Shape15, 0F, 0F, 0F); Shape16 = new ModelRenderer(this, 0, 2); Shape16.addBox(0F, 0F, 0F, 1, 1, 1); Shape16.setRotationPoint(-7F, 22F, 7F); Shape16.setTextureSize(64, 32); Shape16.mirror = true; setRotation(Shape16, 0F, 0F, 0F); Shape17 = new ModelRenderer(this, 0, 2); Shape17.addBox(0F, 0F, 0F, 1, 1, 1); Shape17.setRotationPoint(-7F, 8F, 6F); Shape17.setTextureSize(64, 32); Shape17.mirror = true; setRotation(Shape17, 0F, 0F, 0F); Shape18 = new ModelRenderer(this, 0, 2); Shape18.addBox(0F, 0F, 0F, 1, 1, 1); Shape18.setRotationPoint(6F, 8F, -7F); Shape18.setTextureSize(64, 32); Shape18.mirror = true; setRotation(Shape18, 0F, 0F, 0F); Shape19 = new ModelRenderer(this, 0, 2); Shape19.addBox(0F, 0F, 0F, 1, 1, 1); Shape19.setRotationPoint(6F, 8F, 6F); Shape19.setTextureSize(64, 32); Shape19.mirror = true; setRotation(Shape19, 0F, 0F, 0F); Shape20 = new ModelRenderer(this, 0, 2); Shape20.addBox(0F, 0F, 0F, 1, 1, 1); Shape20.setRotationPoint(-7F, 23F, 6F); Shape20.setTextureSize(64, 32); Shape20.mirror = true; setRotation(Shape20, 0F, 0F, 0F); Shape21 = new ModelRenderer(this, 0, 2); Shape21.addBox(0F, 0F, 0F, 1, 1, 1); Shape21.setRotationPoint(-7F, 8F, -7F); Shape21.setTextureSize(64, 32); Shape21.mirror = true; setRotation(Shape21, 0F, 0F, 0F); Shape22 = new ModelRenderer(this, 0, 2); Shape22.addBox(0F, 0F, 0F, 1, 1, 1); Shape22.setRotationPoint(-7F, 23F, -7F); Shape22.setTextureSize(64, 32); Shape22.mirror = true; setRotation(Shape22, 0F, 0F, 0F); Shape23 = new ModelRenderer(this, 0, 2); Shape23.addBox(0F, 0F, 0F, 1, 1, 1); Shape23.setRotationPoint(6F, 23F, -7F); Shape23.setTextureSize(64, 32); Shape23.mirror = true; setRotation(Shape23, 0F, 0F, 0F); Shape24 = new ModelRenderer(this, 0, 2); Shape24.addBox(0F, 0F, 0F, 1, 1, 1); Shape24.setRotationPoint(6F, 23F, 6F); Shape24.setTextureSize(64, 32); Shape24.mirror = true; setRotation(Shape24, 0F, 0F, 0F); Noyau1 = new ModelRenderer(this, 14, 2); Noyau1.addBox(0F, 0F, 0F, 4, 4, 4); Noyau1.setRotationPoint(-2F, 14F, -2F); Noyau1.setTextureSize(64, 32); Noyau1.mirror = true; setRotation(Noyau1, 0F, 0F, 0F); Noyau2 = new ModelRenderer(this, 14, 2); Noyau2.addBox(0F, 0F, 0F, 4, 4, 4); Noyau2.setRotationPoint(0F, 13.2F, -2F); Noyau2.setTextureSize(64, 32); Noyau2.mirror = true; setRotation(Noyau2, 0F, 0F, 0.7853982F); } public void render(float f) { Shaped1.render(f); Shaped2.render(f); Shaped3.render(f); Shaped4.render(f); Shaped5.render(f); Shaped6.render(f); Shaped7.render(f); Shaped8.render(f); Shaped9.render(f); Shaped10.render(f); Shaped11.render(f); Shaped12.render(f); Shape1.render(f); Shape2.render(f); Shape3.render(f); Shape4.render(f); Shape5.render(f); Shape6.render(f); Shape7.render(f); Shape8.render(f); Shape9.render(f); Shape10.render(f); Shape11.render(f); Shape12.render(f); Shape13.render(f); Shape14.render(f); Shape15.render(f); Shape16.render(f); Shape17.render(f); Shape18.render(f); Shape19.render(f); Shape20.render(f); Shape21.render(f); Shape22.render(f); Shape23.render(f); Shape24.render(f); Noyau1.render(f); Noyau2.render(f); } private void setRotation(ModelRenderer model, float x, float y, float z) { model.rotateAngleX = x; model.rotateAngleY = y; model.rotateAngleZ = z; } }
La class du bloc
package com.nicoking60.cwm.common; import com.nicoking60.cwm.proxy.ClientProxy; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; public class LegendaryStoneG extends Block { protected LegendaryStoneG(Material material) { super(material); } @Override public TileEntity createTileEntity(World world, int metadata) { return new TElegendaryStoneG(); } public boolean hasTileEntity(int metadata) { return true; } public boolean renderAsNormalBlock() { return false; } public boolean isOpaqueCube() { return false; } @SideOnly(Side.CLIENT) public int getRenderType() { return ClientProxy.renderInventoryTESRId; } }
La classe du TileEntity est vide.
En attendant votre réponse je vais encore tenter autre chose.
-
Dans ta classe TElegendaryStoneGSpecialRender, avant :
this.model.render(0.0625F);
ajoute :
if(te != null) { float angle = te.prevAngle + (te.angle - te.prevAngle); this.model.Noyau1.rotateAngleY = (angle * (float)Math.PI * 2.0F); this.model.Noyau2.rotateAngleY = (angle * (float)Math.PI * 2.0F); }
Et dans TElegendaryStoneG, ajoute ça :
public float angle, prevAngle; public void updateEntity() { this.prevAngle = this.angle; this.angle += 0.1F; if(angle >= 0) { if(angle > (prevAngle + (angle - prevAngle)) * (float)Math.PI * 2.0F) { angle = 0.0F; } } else { if(angle > (prevAngle + (angle - prevAngle)) * (float)Math.PI * 2.0F) { angle = 1.0F; } } }
Pour la vitesse, il y a cette ligne :
this.angle += 0.1F;
Si tu mets plus petit, ça sera plus lent, si tu mets plus grand, ça sera plus rapide. -
Merci robin mais il y a une erreur… Enfin 2 erreurs là :
this.model.Noyau1.rotateAngleY = (angle * (float)Math.PI * 2.0F); this.model.Noyau2.rotateAngleY = (angle * (float)Math.PI * 2.0F);
Sut Noyau1 et Noyau2 il me dis “The field ModelLegendaryStoneOfGround.Noyau1/Noyau2 is not visible” et me propose :
- Change visibility of ‘Noyau1/Noyau2’ to ‘public’
- Create getter and setter for ‘Noyau1/Noyau2’
Sinon en fin de comptes la 1ère chose que j’ai essayer en voyant le code de ta machine était bonne mais il manquait l’updateEntity que j’avais essayer lors de ma 2ème tentative mais différemment et qui à fait crash mon jeu, mais en tout cas j’ai enfin compris comment ça marche je vais pouvoir me débrouiller tout seul maintenant.
-
Ouh là c’est les bases là ^^’
Tu le mets en public tout simplement >.<
updateEntity marche mais ce que tu mets dedans peut faire crash ._. -
En effet, suffit de les mettre sur public.
-
Ah… ok… Pourtant quand j’ai vu le code de ta machine il ne sont pas en public donc je me suis dis que ce n’était pas normal… Enfin bon c’est bon ça tourne même si le Noyau1 ne tourne pas comme il faut en faite comme il est incliner son axe Y l’est aussi est du coup il tourne dans le mauvais sens, mais ça je pense pouvoir y arriver tout seul même si ça met beaucoup de temps.
Merci et désoler de vous avoir déranger pour si peu de chose.
-
C’est parce que ton modèle et ton rendu ne sont pas dans le même package que tu as du le mettre en public.
-
Ok merci pour l’info robin et j’ai déjà résolu mon problème comme quoi dès que je comprend comment ça marche je suis capable de résoudre les problèmes tout seul ^^
Voilà le nouveau code :
GL11.glPushMatrix(); GL11.glTranslated(x + 0.5F, y + 1.5F, z + 0.5F); this.bindTexture(textureLocation); GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); this.model.render(0.0625F); if(te != null) { float angle = te.prevAngle + (te.angle - te.prevAngle); this.model.Noyau1.rotateAngleY = (angle * (float)Math.PI * 2.0F); this.model.Noyau1.rotateAngleX = (0.8F); this.model.Noyau1.rotateAngleZ = (0.0F); this.model.Noyau2.rotateAngleY = (angle * (float)Math.PI * 2.0F); } GL11.glPopMatrix();