Appliquer un son a un mob/getEntityAttribute
-
Ha… C’est aussi “bidon” ^^ Je vais tester et j’edit mais je pense qu’il n’y aura pas de problème de se côté la

Reste toujours le problème du son pas contre… Le chemin est bon et tout, comprend pas xD
-
Fait voir ton code actuel ?
-
package dofusMobs.Client; import java.util.Random; import org.lwjgl.opengl.GL11; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.EntityAISwimming; import net.minecraft.entity.ai.attributes.AttributeInstance; import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; import net.minecraft.world.World; public class EntityBouftonBlanc extends EntityMob { int mobLevelGenerate=(int) Math.round((Math.random()*4+11)); // Genere un level int maxHp = (int) this.getMaxHealth(); //affiche les HP max du mob int hp = (int) this.getHealth(); // affiche les PV actuelle du mob (ne s'actualise pas ><) static int mobLevel = 0; //level du mob) public String mobInfo = "Boufton Blanc"; // affiche le nom public String infoHP = experienceValue + "/" + maxHp; // ça c'est juste pour voire ^^ public String lvl ="Level "+ mobLevel; // affiche le level public EntityBouftonBlanc(World par1World) { super(par1World); this.tasks.addTask(1, new EntityAISwimming(this)); /// Dit quelle level est le mob switch (mobLevelGenerate) { case 11: mobLevel = 11; break; case 12: mobLevel = 12; break; case 13: mobLevel = 13; break; case 14: mobLevel = 14; break; case 15: mobLevel = 15; break; default: } } @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.followRange).setAttribute(1.0D); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setAttribute(0.25D); this.getEntityAttribute(SharedMonsterAttributes.knockbackResistance).setAttribute(10000.0D); if (mobLevel == 11) { this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setAttribute(8.0D); this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setAttribute(1.0D); } if (mobLevel == 12) { this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setAttribute(12.0D); this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setAttribute(1.5D); } if (mobLevel == 13) { this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setAttribute(14.0D); this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setAttribute(2.0D); } if (mobLevel == 14) { this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setAttribute(16.0D); this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setAttribute(2.0D); } if (mobLevel == 15) { this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setAttribute(18.0D); this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setAttribute(2.0D); } } public void writeEntityToNBT(NBTTagCompound nbtTag) { super.writeEntityToNBT(nbtTag); nbtTag.setInteger("nom", mobLevel); } public void readEntityFromNBT(NBTTagCompound nbtTag) { super.readEntityFromNBT(nbtTag); mobLevel = nbtTag.getInteger("nom"); } protected void attackEntity(Entity par1Entity, float par2) { if (this.attackTime <= 0 && par2 < 2.0F && par1Entity.boundingBox.maxY > this.boundingBox.minY && par1Entity.boundingBox.minY < this.boundingBox.maxY) { this.attackTime = 30; this.attackEntityAsMob(par1Entity); } } public boolean attackEntityFrom(DamageSource par1DamageSource, float par2) { if (this.isEntityInvulnerable()) { return false; } else if (super.attackEntityFrom(par1DamageSource, par2)) { Entity entity = par1DamageSource.getEntity(); if (this.riddenByEntity != entity && this.ridingEntity != entity) { if (entity != this) { this.entityToAttack = entity; } return true; } else { return true; } } else { return false; } } protected Entity findPlayerToAttack() { EntityPlayer entityplayer = this.worldObj.getClosestVulnerablePlayerToEntity(this, 0.0D); return entityplayer != null && this.canEntityBeSeen(entityplayer) ? entityplayer : null; } /** * Returns the sound this mob makes while it's alive. */ protected String getLivingSound(World world, int x, int y, int z) { return "dofusmobs:sound.bouftou_ambiant"; } /** * Returns the sound this mob makes when it is hurt. */ protected String getHurtSound(World world, int x, int y, int z) { return "dofusmobs:sound.bouftou_prendcoup.ogg"; } /** * Returns the sound this mob makes on death. * @return */ protected String getDeathSound(World world, EntityPlayer player) { return "dofusmobs:sound.bouftou_meurt"; } protected String getAttackSound() { return "dofusmobs:sound.bouftou_attaque"; } }Voila ^^’ Désolé si c’est un peu brouillon ou mal organisé ^^’
-
Donc comme dit sur la shoutbox, il faut enlever le static et il me faudrait la classe de l’event sound
dofusmobs:sound.bouftou_meurt
devrait être
dofusmobs:bouftou_meurt
Normalement; Idem pour les autres (d’ailleurs tu as encore un ogg) -
Si j’enlève les statics les stats ne se génère pas ^^’
EvendSound
package dofusMobs.EventSound; import net.minecraftforge.client.event.sound.SoundLoadEvent; import net.minecraftforge.event.ForgeSubscribe; public class EventSoundDofusMobs { @ForgeSubscribe public void onSound(SoundLoadEvent event) { try { event.manager.addSound("dofusmobs:bouftou_attaque.ogg"); event.manager.addSound("dofusmobs:bouftou_ambiant.ogg"); event.manager.addSound("dofusmobs:bouftou_meurt.ogg"); event.manager.addSound("dofusmobs:bouftou_prendcoup.ogg"); } catch(Exception e) { System.out.println("Failed to registry sound"); } } }Oui y’a encore des .ogg car j’ai testé de multiple façon uniquement sur les 2 premières ^^
-
Les .ogg dans l’event sound c’est bon, il faut les mettre c’est dans le mob que c’était pas bon.
Sinon : http://pastebin.com/w8QbqNbz -
Toujours LES mêmes problèmes, aucun sons, level et stats non généré

EDIT : Si je remet le mobLevel en static c’est bon, mais y’a toujours le problème d’écrasement de stats…
-
Un conseil, au lieu de faire par level les if etc… fait une fonction relative.
Par exemple, pour la vie tu peux faire ça si tu veux +2 hp par level :
30 (hp de base) + 2*level
Comme ça, pas de milliard de if, et le level peut être adapté pour faire une plus grande étendue de levels
-
Le soucis c’est que la variable de level ne se charge pas si je ne la passe pas en static :s
C’est ce que j’avais essayer de faire un moment, mais toujours le soucis d’ecrasement de stat
-
Et avec un this. devant mobLevel = this.worldObj.rand.nextInt(4) + 11; ?
Pour être sur que c’est appliqué a l’objet d’entité, et non toutes les entités
-
Les stats s’écrase…
Je crois que je vais faire des level fixe au final… Ou pas du tout, t’en que j’y pense, mon expValue reste toujours 5 -_-