Appliquer un son a un mob/getEntityAttribute
-
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 -_-