Scale entity sans passer par le render/Saut de ligne/Attaque que si attaquer
-
Salut,
1 - J’aimerai savoir s’il est possible, et si oui comment, faire un scale d’une entité sans passé par la classe du render de cette entity. ^^’
2 - On ne peux pas faire de retour a la ligne dans un this.setCustomNameTag(mobName+" Niv."+mobLevel); ?
3 - Je n’arrive plus a me souvenir de comment on fait pour faire en sorte que l’entité n’attaque que si elle est attaquer ><
Merci.
Edit : En 1.7.10 on ne peux plus voire les .java de Minecraft ? :s
-
1. Je ne crois pas que ce soit possible. Sauf peut-être avec un potentiel event avant le rendu de cette entité.
2. Non. Minecraft ne le supporte pas, malheuresement.
3. Je sais plus, à voir avec les autres. Au pire, cherche sur le forum, devrais y avoir une réponse. -
1. arf Car a la création de mon entité il y a une variable qui défini sont nom/level, et j’aurai aimer aussi changer la taille par rapport a ça, sauf que si je fait directement dans le rendu, ils prennent tous le scale de la dernière posé ^^’
2. ok, bien ce qu’il me semblait, c’bete.
3. Je regarderai plus en detail sur le forum, j’ai testé quelques mots clef, mais rien de concluant.
4. un peu comme le 1. j’ai une variable qui défini le nom et le level du mob, mais pas que, j’essais de faire varié la vie selon le level. Pour cela, j’utilise :
this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(2*statMultiplicator);
Mais le mob level 1 est censé avoir 2, mais IG, il en aura soit 2, soit 4, soit 6, etc. Je n’arrive pas a savoir pourquoi ><
EDIT :
package com.google.dofusmob.common; import org.lwjgl.opengl.GL11; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.passive.EntityAnimal; import net.minecraft.entity.passive.EntityOcelot; import net.minecraft.world.World; public class EntityMobArakne extends EntityMob { public String mobInfo; public String mobName; public String mobLevel; public long generate; public static int mobGenerate; public static double statMultiplicator; // 1 = arakne level 1 // 2 = arakne level 2 // 3 = arakne level 3 // 4 = Arakule la Revancharde level 1 // 5 = Arakule la Revancharde level 2 // 6 = Arakule la Revancharde level 3 public EntityMobArakne(World world) { super(world); generate = Math.round(Math.random()*100) ; this.setSize(0.7F, 0.7F); if ((int) generate >=0 && (int) generate < 40) { statMultiplicator = 1; mobGenerate = 1; mobName = "Arakne"; mobLevel = "1"; } if ((int) generate >=40 && (int) generate < 65) { statMultiplicator = 1.5; mobGenerate = 2; mobName = "Arakne"; mobLevel = "2"; } if ((int) generate >=65 && (int) generate < 90) { statMultiplicator = 2; mobGenerate = 3; mobName = "Arakne"; mobLevel = "3"; } if ((int) generate >=90 && (int) generate < 95) { statMultiplicator = 3.5; mobGenerate = 4; mobName = "Arakule la Revancharde"; mobLevel = "1"; } if ((int) generate >=95 && (int) generate < 98) { mobGenerate = 5; statMultiplicator = 4.5; mobName = "Arakule la Revancharde"; mobLevel = "2"; } if ((int) generate >=98 && (int) generate <= 100) { statMultiplicator = 5.5; mobGenerate = 6; mobName = "Arakule la Revancharde"; mobLevel = "3"; } this.setCustomNameTag(mobName+" Niv."+mobLevel + "|| Info+HP" +this.getHealth() + "|" + mobGenerate +"|"+statMultiplicator); } public void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(2*statMultiplicator); this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(2D); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.6D); this.getEntityAttribute(SharedMonsterAttributes.knockbackResistance).setBaseValue(1D); } }
-
1. Mais tu as fait quoi pour que ça ait e comportement ? oO
Crée une variable dans l’entitée que tu utilises pour dessiner ensuiteSent from my GT-I9000 using Tapatalk 2
-
1. bah dans le EntityMob j’ai crée une variable “mobGenerate” qui va de 1 a 6, dans le RenderMob ;
protected void preRenderCallback(EntityLivingBase par1EntityLivingBase, float par2) { this.scaleMob((EntityMob)par1EntityLivingBase, par2); } protected void scaleMob(EntityMob par1EntityMob, float par2) { if (EntityMob.mobGenerate == 1) { GL11.glScalef(0.7F, 0.7F, 0.7F); } if (EntityMob.mobGenerate == 2) { GL11.glScalef(0.8F, 0.8F, 0.8F); } //etc etc jusqu'a 6 }
-
Pourquoi tu mets la variable en static ? C’est sûr que la valeur dépend pas de l’entité dans ce cas.
-
1. Elle est en static car dans le render la condition “if (EntityMobArakne.mobGenerate == 2)” veut la variable mobGenerate en static
-
…
Il serait temps d’apprendre le Java. En plus j’ai expliqué dans le tutoriel sur les tile entité la différence entre les variables non statique / statique et pourquoi il ne faut pas utiliser des variables statiques dans les tile entity (et la même chose est valable pour les entités)mets :
par1EntityMob.mobGenerate
et tu n’aura plus besoin que la variable soit statique comme tu utilisera l’instance de l’entité. -
Merci… Excuse moi d’être un newbe.
Y’a du mieux ! Les entitées ne prennent plus la taille de la dernière posé. Elles ont toutes des tailles différentes ! Mais pas leurs bonne taille Je vais regarder ça. Mais Eclipse n’arrête pas de planter sur ce PC ><
Edit : Hum, je pense avoir un début de piste. J’ai mit un “System.out.println(mobName+” Lv.“+mobLevel);” dans EntityMob, et a ce que j’ai vue, quand je pose ce mob j’ai le message du système en x2 avec des infos différente !
[15:11:38] [Server thread/INFO] [STDOUT]: [com.google.dofusmob.common.EntityMobArakne:<init>:89]: Arakne Lv.1 [15:11:38] [Client thread/INFO] [STDOUT]: [com.google.dofusmob.common.EntityMobArakne:<init>:89]: Arakne Lv.3 [15:11:42] [Server thread/INFO] [STDOUT]: [com.google.dofusmob.common.EntityMobArakne:<init>:89]: Arakne Lv.1 [15:11:42] [Client thread/INFO] [STDOUT]: [com.google.dofusmob.common.EntityMobArakne:<init>:89]: Arakule la Revancharde Lv.1 [15:11:47] [Server thread/INFO] [STDOUT]: [com.google.dofusmob.common.EntityMobArakne:<init>:89]: Arakne Lv.2 [15:11:47] [Client thread/INFO] [STDOUT]: [com.google.dofusmob.common.EntityMobArakne:<init>:89]: Arakule la Revancharde Lv.1 [15:11:51] [Server thread/INFO] [STDOUT]: [com.google.dofusmob.common.EntityMobArakne:<init>:89]: Arakne Lv.2 [15:11:51] [Client thread/INFO] [STDOUT]: [com.google.dofusmob.common.EntityMobArakne:<init>:89]: Arakne Lv.2
EDIT2 : Le soucis c’est que je n’arrive pas a faire en sorte que le client et le serveur reçoivent les mêmes info…</init></init></init></init></init></init></init></init>