Résolu [SEMI TUTO] Création de mon mob hostile: spawn, attaque etc.
-
Alors voilà, comme avec moi tout est compliqué et laborieux, je créée ce post pour poser toutes mes questions concernant la création de mon mob. Lorsque celui-ci sera complètement fini je mettrai la balise [Résolu]. Je préfère me faire un post plutôt que d’aller dans pleins de posts différents poser mes questions, ce sera moins le bazar. Alors du coup j’ai regardé un peu le tuto 1.7 du forum, et je l’ai trouvé trop incomplet, on n’explore pas les options et on fait quelque chose de tout prêt. Hors moi mon mob ressemble à ça:
Du coup je suis le tuto de checconio84, l’ennui c’est que c’est pas super bien expliqué et y’a beaucoup de chose que je ne comprends pas. A savoir que si j’arrive à bien comprendre la création du mob, je pourrai même être tenté quand je m’y connaitrai mieux de faire un tuto 1.8 dessus :).
Bref, dans EntityHandler, à un moment il faut marquer ça:
EntityRegistry.addSpawn(entityClass, 20, 1, 3, EnumCreatureType.MONSTER, biomeGenBase.); (=(entityClass, weightedProb, min, max, typeOfCreature, biomes);)
j’aimerai savoir quel est le numéro moyen de spawn, genre celui d’une vache (moi j’ai mis 20, mais je sais pas ça correspond trop à quoi).
De plus, j’aimerai savoir pour biomeGenBase. si on peut pas mettre un truc derrière qui englobe tous les biomes plutôt que de les mettre un part un alors qu’il y en a une soixantaine :x… J’aimerai aussi savoir si le fait de mettre Monster au type de créature va faire qu’il va brûler au soleil, ou qu’il ne va poper que la nuit, car j’aimerai qu’il pop comme les slimes, soit le jour sans brûler.
Merci d’avance :). -
Salut,
La vache c’est ça :
new BiomeGenBase.SpawnListEntry(EntityCow.class, 8, 4, 4)
Donc 8, 4, 4 pour weightedProb, min, max.Les slime sont du type EnumCreatureType.MONSTER tout comme les creeper, le type de mob ne sert que pour la difficulté (pas de monster en peaceful). Le fait de brûler ou spawner sont géré directement dans la classe du mob.
-
Merci beaucoup!
Et du coup pour l’histoire des biomes?
De plus j’ai un nouveau problème, dans modelModzoic cette fois-ci.public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); } }
C’est le moment d’amener un tas de texte, pour la rotation je crois, on le voit dans la vidéo de checconio. Sauf que lui se sert dans le truc déjà fait du biped, alors que moi c’est un mob complètement costumisé, du coup je sais pas trop quoi faire. Des idées :/?
De plus j’ai fini mon mob… Le voici:
Il a quelques problèmes… Il n’attaque pas et ne bouge pas. Par contre de temps en temps il se retourne.
Voici tous mes dossiers:Classe Principale:
package fr.minecraftforgefrance.modzoic.common; import organisation.dinomeat; import Entity.Entityclass; import Handlers.EntityHandler; import fr.minecraftforgefrance.modzoic.proxy.CommonProxy; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.Mod.Instance; import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.registry.GameRegistry; import organisation.dinomeat; @Mod(modid = "modzoic", name = "Modzoic", version = "1.0.0") public class Modzoic { @Instance("modzoic") public static Modzoic instance; @SidedProxy(clientSide = "fr.minecraftforgefrance.modzoic.proxy.ClientProxy", serverSide = "fr.minecraftforgefrance.modzoic.proxy.CommonProxy") public static CommonProxy proxy; public static Item meatEpanterias; @EventHandler public void preInit(FMLPreInitializationEvent event) { meatEpanterias = new MeatEpanterias(10, 0.5F, true).setCreativeTab(CreativeTabs.tabFood); GameRegistry.registerItem(meatEpanterias, "meatEpanterias"); dinomeat.init(); dinomeat.register(); EntityHandler.RegisterMonster(Entityclass.class, "Nanuqsaurus"); } @EventHandler public void init(FMLInitializationEvent event) { proxy.registerRender(); } @EventHandler public void postInit(FMLPostInitializationEvent event) { } }
Classe Client Proxy:
package fr.minecraftforgefrance.modzoic.proxy; import Entity.Entityclass; import Models.modelModzoic; import Render.RenderModzoic; import fr.minecraftforgefrance.modzoic.common.MeatEpanterias; import fr.minecraftforgefrance.modzoic.common.Modzoic; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraftforge.fml.client.registry.RenderingRegistry; import organisation.dinomeat; import net.minecraft.client.renderer.entity.RenderItem; public class ClientProxy extends CommonProxy { @Override public void registerRender() { RenderItem registerMesher = Minecraft.getMinecraft().getRenderItem(); registerMesher.getItemModelMesher().register(Modzoic.meatEpanterias, 0, new ModelResourceLocation("modzoic" + ":meatEpanterias", "inventory")); dinomeat.registerRender(); RenderingRegistry.registerEntityRenderingHandler(Entityclass.class, new RenderModzoic(Minecraft.getMinecraft().getRenderManager(), new modelModzoic(), 2F)); } }
Entityclass:
package Entity; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.EntityAIAttackOnCollide; import net.minecraft.entity.ai.EntityAIHurtByTarget; import net.minecraft.entity.ai.EntityAILookIdle; import net.minecraft.entity.ai.EntityAIMoveThroughVillage; import net.minecraft.entity.ai.EntityAIMoveTowardsRestriction; import net.minecraft.entity.ai.EntityAINearestAttackableTarget; import net.minecraft.entity.ai.EntityAISwimming; import net.minecraft.entity.ai.EntityAIWander; import net.minecraft.entity.ai.EntityAIWatchClosest; import net.minecraft.entity.monster.EntityIronGolem; import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.monster.EntityPigZombie; import net.minecraft.entity.passive.EntityChicken; import net.minecraft.entity.passive.EntityCow; import net.minecraft.entity.passive.EntityHorse; import net.minecraft.entity.passive.EntityOcelot; import net.minecraft.entity.passive.EntityPig; import net.minecraft.entity.passive.EntityRabbit; import net.minecraft.entity.passive.EntityVillager; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; public class Entityclass extends EntityMob { public Entityclass(World world) { super(world); this.setSize(2, 3); } public void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(50D); this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(9D); this.getEntityAttribute(SharedMonsterAttributes.knockbackResistance).setBaseValue(2D); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(2D); this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(120D); } protected void applyEntityAI() { this.tasks.addTask(4, new EntityAIAttackOnCollide(this, EntityIronGolem.class, 1.0D, true)); this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)); this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityVillager.class, true)); this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityIronGolem.class, true)); this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityChicken.class, true)); this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPig.class, true)); this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityRabbit.class, true)); this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityCow.class, true)); this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityHorse.class, true)); this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityOcelot.class, true)); } }
EntityHandler
package Handlers; import java.util.Random; import fr.minecraftforgefrance.modzoic.common.Modzoic; import net.minecraft.entity.EntityList; import net.minecraft.entity.EnumCreatureType; import net.minecraft.world.biome.BiomeGenBase; import net.minecraftforge.fml.common.registry.EntityRegistry; public class EntityHandler { public static void RegisterMonster(Class entityClass, String name) { int entityID = EntityRegistry.findGlobalUniqueEntityId(); long x = name.hashCode(); Random random = new Random(x); int mainColor = random.nextInt() * 16777215; int subColor = random.nextInt() * 16777215; EntityRegistry.registerGlobalEntityID(entityClass, name, entityID); EntityRegistry.addSpawn(entityClass, 20, 1, 3, EnumCreatureType.MONSTER, BiomeGenBase.forest); EntityRegistry.registerModEntity(entityClass, name, entityID, Modzoic.instance, 64, 1, true); EntityList.entityEggs.put(Integer.valueOf(entityID), new EntityList.EntityEggInfo(entityID, mainColor, subColor)); } } ``` (avec findGlobalUniqueEntityId et registerGlobalEntityID barrés je ne sais pas pourquoi) ModelModzoic ```java package Models; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; import net.minecraft.entity.Entity; public class modelModzoic extends ModelBase { //fields ModelRenderer Pied_droit; ModelRenderer Griffe_droite_3; ModelRenderer Pied_gauche; ModelRenderer Griffe_droite_2; ModelRenderer Griffe_droite_1; ModelRenderer Griffe_gauche_1; ModelRenderer Griffe_gauche_3; ModelRenderer Griffe_gauche_2; ModelRenderer Jambe_gauche_2; ModelRenderer Jambe_droite_2; ModelRenderer Jambe_droite_1; ModelRenderer Jambe_gauche_1; ModelRenderer Cuisse_gauche; ModelRenderer Cuisse_droite; ModelRenderer Corps_central; ModelRenderer Queue_1; ModelRenderer Queue_2; ModelRenderer Queue_3; ModelRenderer Queue_4; ModelRenderer Queue_5; ModelRenderer Queue_6; ModelRenderer Queue_7; ModelRenderer Queue_8; ModelRenderer Avant_1; ModelRenderer Avant_2; ModelRenderer Patte_droite_1; ModelRenderer Patte_gauche_1; ModelRenderer Patte_droite_2; ModelRenderer Patte_gauche_2; ModelRenderer Cou; ModelRenderer Machoire_basse; ModelRenderer Machoire_haute; ModelRenderer Crane_1; ModelRenderer Crane_2; ModelRenderer Sourcils_droite; ModelRenderer Sourcils_gauche; ModelRenderer Epine_6; ModelRenderer Epine_5; ModelRenderer Epine_4; ModelRenderer Epine_7; ModelRenderer Epine_3; ModelRenderer Epine_2; ModelRenderer Epine_1; ModelRenderer Epine_8; ModelRenderer Epine_9; ModelRenderer Epine_10; ModelRenderer Epine_11; ModelRenderer Epine_12; ModelRenderer Epine_13; public modelModzoic() { textureWidth = 256; textureHeight = 128; Pied_droit = new ModelRenderer(this, 155, 96); Pied_droit.addBox(-2F, 0F, -5F, 4, 3, 8); Pied_droit.setRotationPoint(-8F, 21F, 2F); Pied_droit.setTextureSize(256, 128); Pied_droit.mirror = true; setRotation(Pied_droit, 0F, 0F, 0F); Griffe_droite_3 = new ModelRenderer(this, 180, 100); Griffe_droite_3.addBox(-4F, 0F, 0F, 0, 3, 1); Griffe_droite_3.setRotationPoint(-5F, 21F, -3F); Griffe_droite_3.setTextureSize(256, 128); Griffe_droite_3.mirror = true; setRotation(Griffe_droite_3, -0.7435722F, 0F, 0F); Pied_gauche = new ModelRenderer(this, 155, 96); Pied_gauche.addBox(-2F, 0F, -5F, 4, 3, 8); Pied_gauche.setRotationPoint(8F, 21F, 2F); Pied_gauche.setTextureSize(256, 128); Pied_gauche.mirror = true; setRotation(Pied_gauche, 0F, 0F, 0F); Griffe_droite_2 = new ModelRenderer(this, 180, 100); Griffe_droite_2.addBox(4F, 0F, 0F, 0, 3, 1); Griffe_droite_2.setRotationPoint(-12F, 21F, -3F); Griffe_droite_2.setTextureSize(256, 128); Griffe_droite_2.mirror = true; setRotation(Griffe_droite_2, -0.7435722F, 0F, 0F); Griffe_droite_1 = new ModelRenderer(this, 180, 100); Griffe_droite_1.addBox(3F, 0F, 0F, 0, 3, 1); Griffe_droite_1.setRotationPoint(-10F, 21F, -3F); Griffe_droite_1.setTextureSize(256, 128); Griffe_droite_1.mirror = true; setRotation(Griffe_droite_1, -0.7435722F, 0F, 0F); Griffe_gauche_1 = new ModelRenderer(this, 180, 100); Griffe_gauche_1.addBox(4F, 0F, 0F, 0, 3, 1); Griffe_gauche_1.setRotationPoint(3F, 21F, -3F); Griffe_gauche_1.setTextureSize(256, 128); Griffe_gauche_1.mirror = true; setRotation(Griffe_gauche_1, -0.7435722F, 0F, 0F); Griffe_gauche_3 = new ModelRenderer(this, 180, 100); Griffe_gauche_3.addBox(4F, 0F, 0F, 0, 3, 1); Griffe_gauche_3.setRotationPoint(5F, 21F, -3F); Griffe_gauche_3.setTextureSize(256, 128); Griffe_gauche_3.mirror = true; setRotation(Griffe_gauche_3, -0.7435722F, 0F, 0F); Griffe_gauche_2 = new ModelRenderer(this, 180, 100); Griffe_gauche_2.addBox(4F, 0F, 0F, 0, 3, 1); Griffe_gauche_2.setRotationPoint(4F, 21F, -3F); Griffe_gauche_2.setTextureSize(256, 128); Griffe_gauche_2.mirror = true; setRotation(Griffe_gauche_2, -0.7435722F, 0F, 0F); Jambe_gauche_2 = new ModelRenderer(this, 121, 94); Jambe_gauche_2.addBox(-2F, 0F, -1F, 4, 9, 4); Jambe_gauche_2.setRotationPoint(8F, 5.7F, 1.6F); Jambe_gauche_2.setTextureSize(256, 128); Jambe_gauche_2.mirror = true; setRotation(Jambe_gauche_2, 0.3316126F, 0F, 0F); Jambe_droite_2 = new ModelRenderer(this, 121, 94); Jambe_droite_2.addBox(-2F, 0F, -1F, 4, 9, 4); Jambe_droite_2.setRotationPoint(-8F, 5.7F, 1.6F); Jambe_droite_2.setTextureSize(256, 128); Jambe_droite_2.mirror = true; setRotation(Jambe_droite_2, 0.3316126F, 0F, 0F); Jambe_droite_1 = new ModelRenderer(this, 140, 96); Jambe_droite_1.addBox(-2F, 0F, -2F, 4, 9, 3); Jambe_droite_1.setRotationPoint(-8F, 13F, 6F); Jambe_droite_1.setTextureSize(256, 128); Jambe_droite_1.mirror = true; setRotation(Jambe_droite_1, -0.3316126F, 0F, 0F); Jambe_gauche_1 = new ModelRenderer(this, 140, 96); Jambe_gauche_1.addBox(-2F, 0F, -2F, 4, 9, 3); Jambe_gauche_1.setRotationPoint(8F, 13F, 6F); Jambe_gauche_1.setTextureSize(256, 128); Jambe_gauche_1.mirror = true; setRotation(Jambe_gauche_1, -0.3316126F, 0F, 0F); Cuisse_gauche = new ModelRenderer(this, 101, 93); Cuisse_gauche.addBox(0F, -2.466667F, -1F, 4, 9, 5); Cuisse_gauche.setRotationPoint(6F, 0.3F, 3.8F); Cuisse_gauche.setTextureSize(256, 128); Cuisse_gauche.mirror = true; setRotation(Cuisse_gauche, -0.3316126F, 0F, 0F); Cuisse_droite = new ModelRenderer(this, 101, 93); Cuisse_droite.addBox(-4F, -2.5F, -2F, 4, 9, 5); Cuisse_droite.setRotationPoint(-6F, 0.3F, 4.8F); Cuisse_droite.setTextureSize(256, 128); Cuisse_droite.mirror = true; setRotation(Cuisse_droite, -0.3316126F, 0F, 0F); Corps_central = new ModelRenderer(this, 95, 33); Corps_central.addBox(-6F, 0F, 0F, 14, 15, 14); Corps_central.setRotationPoint(-1F, -6F, -4F); Corps_central.setTextureSize(256, 128); Corps_central.mirror = true; setRotation(Corps_central, -0.0523599F, 0F, 0F); Queue_1 = new ModelRenderer(this, 2, 0); Queue_1.addBox(0F, 0F, 0F, 12, 13, 9); Queue_1.setRotationPoint(-6F, -4F, 8F); Queue_1.setTextureSize(256, 128); Queue_1.mirror = true; setRotation(Queue_1, 0.0174533F, 0F, 0F); Queue_2 = new ModelRenderer(this, 46, 0); Queue_2.addBox(-6F, -6F, 0F, 10, 11, 9); Queue_2.setRotationPoint(1F, 2.5F, 16F); Queue_2.setTextureSize(256, 128); Queue_2.mirror = true; setRotation(Queue_2, 0.0698132F, 0F, 0F); Queue_3 = new ModelRenderer(this, 86, 0); Queue_3.addBox(-5F, -3F, 0F, 8, 10, 9); Queue_3.setRotationPoint(1F, -0.5F, 24F); Queue_3.setTextureSize(256, 128); Queue_3.mirror = true; setRotation(Queue_3, 0.0872665F, 0F, 0F); Queue_4 = new ModelRenderer(this, 121, 0); Queue_4.addBox(-4F, -3F, 0F, 6, 9, 8); Queue_4.setRotationPoint(1F, -0.5F, 32F); Queue_4.setTextureSize(256, 128); Queue_4.mirror = true; setRotation(Queue_4, 0.1047198F, 0F, 0F); Queue_5 = new ModelRenderer(this, 150, 0); Queue_5.addBox(-2F, -3F, 0F, 5, 8, 8); Queue_5.setRotationPoint(-0.5F, -1F, 39F); Queue_5.setTextureSize(256, 128); Queue_5.mirror = true; setRotation(Queue_5, 0.0698132F, 0F, 0F); Queue_6 = new ModelRenderer(this, 177, 0); Queue_6.addBox(-2F, -2F, 0F, 4, 7, 8); Queue_6.setRotationPoint(0F, -2.5F, 46F); Queue_6.setTextureSize(256, 128); Queue_6.mirror = true; setRotation(Queue_6, 0.0523599F, 0F, 0F); Queue_7 = new ModelRenderer(this, 202, 0); Queue_7.addBox(-1F, -0.5F, 0F, 3, 6, 9); Queue_7.setRotationPoint(-0.5F, -4F, 53F); Queue_7.setTextureSize(256, 128); Queue_7.mirror = true; setRotation(Queue_7, 0.0349066F, 0F, 0F); Queue_8 = new ModelRenderer(this, 228, 0); Queue_8.addBox(-1F, 0F, 0F, 2, 5, 10); Queue_8.setRotationPoint(0F, -4.466667F, 61F); Queue_8.setTextureSize(256, 128); Queue_8.mirror = true; setRotation(Queue_8, -0.0174533F, 0F, 0F); Avant_1 = new ModelRenderer(this, 53, 38); Avant_1.addBox(-6F, -5F, -14F, 12, 13, 8); Avant_1.setRotationPoint(0F, 0.1333333F, 2F); Avant_1.setTextureSize(256, 128); Avant_1.mirror = true; setRotation(Avant_1, -0.0872665F, 0F, 0F); Avant_2 = new ModelRenderer(this, 11, 39); Avant_2.addBox(0F, 0F, 0F, 10, 12, 10); Avant_2.setRotationPoint(-5F, -10F, -15F); Avant_2.setTextureSize(256, 128); Avant_2.mirror = true; setRotation(Avant_2, -0.4886922F, 0F, 0F); Patte_droite_1 = new ModelRenderer(this, 28, 64); Patte_droite_1.addBox(-1F, 0F, -1F, 1, 3, 2); Patte_droite_1.setRotationPoint(-3F, 1F, -18F); Patte_droite_1.setTextureSize(256, 128); Patte_droite_1.mirror = true; setRotation(Patte_droite_1, -0.4712389F, 0F, 0F); Patte_gauche_1 = new ModelRenderer(this, 28, 64); Patte_gauche_1.addBox(0F, 0F, -1F, 1, 3, 2); Patte_gauche_1.setRotationPoint(3F, 1F, -18F); Patte_gauche_1.setTextureSize(256, 128); Patte_gauche_1.mirror = true; setRotation(Patte_gauche_1, -0.4712389F, 0F, 0F); Patte_droite_2 = new ModelRenderer(this, 30, 70); Patte_droite_2.addBox(0F, 0F, 0F, 1, 2, 1); Patte_droite_2.setRotationPoint(-4F, 3.3F, -20.4F); Patte_droite_2.setTextureSize(256, 128); Patte_droite_2.mirror = true; setRotation(Patte_droite_2, 0.1745329F, 0F, 0F); Patte_gauche_2 = new ModelRenderer(this, 30, 70); Patte_gauche_2.addBox(0F, 0F, 0F, 1, 2, 1); Patte_gauche_2.setRotationPoint(3F, 3.3F, -20.4F); Patte_gauche_2.setTextureSize(256, 128); Patte_gauche_2.mirror = true; setRotation(Patte_gauche_2, 0.1745329F, 0F, 0F); Cou = new ModelRenderer(this, 223, 44); Cou.addBox(0F, 0F, 0F, 8, 10, 8); Cou.setRotationPoint(-4F, -9F, -25F); Cou.setTextureSize(256, 128); Cou.mirror = true; setRotation(Cou, 0.7504916F, 0F, 0F); Machoire_basse = new ModelRenderer(this, 158, 52); Machoire_basse.addBox(-4F, 0F, 0F, 7, 12, 3); Machoire_basse.setRotationPoint(0.5F, -10.1F, -27.4F); Machoire_basse.setTextureSize(256, 128); Machoire_basse.mirror = true; setRotation(Machoire_basse, -1.605703F, 0F, 0F); Machoire_haute = new ModelRenderer(this, 153, 30); Machoire_haute.addBox(0F, 0F, 0F, 8, 13, 7); Machoire_haute.setRotationPoint(-4F, -17F, -27F); Machoire_haute.setTextureSize(256, 128); Machoire_haute.mirror = true; setRotation(Machoire_haute, -1.518436F, 0F, 0F); Crane_1 = new ModelRenderer(this, 187, 43); Crane_1.addBox(0F, 0F, 0F, 8, 10, 9); Crane_1.setRotationPoint(-4F, -17F, -29F); Crane_1.setTextureSize(256, 128); Crane_1.mirror = true; setRotation(Crane_1, 0F, 0F, 0F); Crane_2 = new ModelRenderer(this, 215, 31); Crane_2.addBox(0F, 0F, 0F, 8, 6, 2); Crane_2.setRotationPoint(-4F, -16.3F, -22F); Crane_2.setTextureSize(256, 128); Crane_2.mirror = true; setRotation(Crane_2, 0.3316126F, 0F, 0F); Sourcils_droite = new ModelRenderer(this, 200, 25); Sourcils_droite.addBox(0F, 0F, 0F, 1, 2, 5); Sourcils_droite.setRotationPoint(-4.1F, -17F, -28F); Sourcils_droite.setTextureSize(256, 128); Sourcils_droite.mirror = true; setRotation(Sourcils_droite, 0.2268928F, 0F, 0F); Sourcils_gauche = new ModelRenderer(this, 200, 25); Sourcils_gauche.addBox(0F, 0F, 0F, 1, 2, 5); Sourcils_gauche.setRotationPoint(3.1F, -17F, -28F); Sourcils_gauche.setTextureSize(256, 128); Sourcils_gauche.mirror = true; setRotation(Sourcils_gauche, 0.2268928F, 0F, 0F); Epine_6 = new ModelRenderer(this, 200, 100); Epine_6.addBox(0F, 0F, 0F, 0, 3, 4); Epine_6.setRotationPoint(0F, -5F, 0F); Epine_6.setTextureSize(256, 128); Epine_6.mirror = true; setRotation(Epine_6, 0.5235988F, 0F, 0F); Epine_5 = new ModelRenderer(this, 200, 100); Epine_5.addBox(0F, 0F, 0F, 0, 3, 4); Epine_5.setRotationPoint(0F, -5F, -4F); Epine_5.setTextureSize(256, 128); Epine_5.mirror = true; setRotation(Epine_5, 0.5235988F, 0F, 0F); Epine_4 = new ModelRenderer(this, 200, 100); Epine_4.addBox(0F, 0F, 0F, 0, 3, 4); Epine_4.setRotationPoint(0F, -5F, -8F); Epine_4.setTextureSize(256, 128); Epine_4.mirror = true; setRotation(Epine_4, 0.5235988F, 0F, 0F); Epine_7 = new ModelRenderer(this, 200, 100); Epine_7.addBox(0F, 0F, 0F, 0, 3, 4); Epine_7.setRotationPoint(0F, -4.5F, 4F); Epine_7.setTextureSize(256, 128); Epine_7.mirror = true; setRotation(Epine_7, 0.5235988F, 0F, 0F); Epine_3 = new ModelRenderer(this, 200, 100); Epine_3.addBox(0F, 0F, 0F, 0, 3, 4); Epine_3.setRotationPoint(0F, -8F, -12F); Epine_3.setTextureSize(256, 128); Epine_3.mirror = true; setRotation(Epine_3, 0.0698132F, 0F, 0F); Epine_2 = new ModelRenderer(this, 200, 100); Epine_2.addBox(0F, 0F, 0F, 0, 3, 4); Epine_2.setRotationPoint(0F, -9.5F, -16F); Epine_2.setTextureSize(256, 128); Epine_2.mirror = true; setRotation(Epine_2, 0.1745329F, 0F, 0F); Epine_1 = new ModelRenderer(this, 200, 100); Epine_1.addBox(0F, 0F, 0F, 0, 3, 4); Epine_1.setRotationPoint(0F, -13F, -19F); Epine_1.setTextureSize(256, 128); Epine_1.mirror = true; setRotation(Epine_1, -0.1919862F, 0F, 0F); Epine_8 = new ModelRenderer(this, 200, 100); Epine_8.addBox(0F, 0F, 0F, 0, 3, 4); Epine_8.setRotationPoint(0F, -3F, 8F); Epine_8.setTextureSize(256, 128); Epine_8.mirror = true; setRotation(Epine_8, 0.6108652F, 0F, 0F); Epine_9 = new ModelRenderer(this, 200, 100); Epine_9.addBox(0F, 0F, 0F, 0, 3, 4); Epine_9.setRotationPoint(0F, -3F, 12F); Epine_9.setTextureSize(256, 128); Epine_9.mirror = true; setRotation(Epine_9, 0.5759587F, 0F, 0F); Epine_10 = new ModelRenderer(this, 200, 100); Epine_10.addBox(0F, 0F, 0F, 0, 3, 4); Epine_10.setRotationPoint(0F, -2F, 16F); Epine_10.setTextureSize(256, 128); Epine_10.mirror = true; setRotation(Epine_10, 0.715585F, 0F, 0F); Epine_11 = new ModelRenderer(this, 200, 100); Epine_11.addBox(0F, 0F, 0F, 0, 3, 4); Epine_11.setRotationPoint(0F, -2F, 20F); Epine_11.setTextureSize(256, 128); Epine_11.mirror = true; setRotation(Epine_11, 0.7853982F, 0F, 0F); Epine_12 = new ModelRenderer(this, 200, 100); Epine_12.addBox(0F, 0F, 0F, 0, 3, 4); Epine_12.setRotationPoint(0F, -2F, 24F); Epine_12.setTextureSize(256, 128); Epine_12.mirror = true; setRotation(Epine_12, 0.7853982F, 0F, 0F); Epine_13 = new ModelRenderer(this, 200, 100); Epine_13.addBox(0F, 0F, 0F, 0, 3, 4); Epine_13.setRotationPoint(0F, -2F, 28F); Epine_13.setTextureSize(256, 128); Epine_13.mirror = true; setRotation(Epine_13, 0.8726646F, 0F, 0F); } public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { super.render(entity, f, f1, f2, f3, f4, f5); setRotationAngles(f, f1, f2, f3, f4, f5, entity); Pied_droit.render(f5); Griffe_droite_3.render(f5); Pied_gauche.render(f5); Griffe_droite_2.render(f5); Griffe_droite_1.render(f5); Griffe_gauche_1.render(f5); Griffe_gauche_3.render(f5); Griffe_gauche_2.render(f5); Jambe_gauche_2.render(f5); Jambe_droite_2.render(f5); Jambe_droite_1.render(f5); Jambe_gauche_1.render(f5); Cuisse_gauche.render(f5); Cuisse_droite.render(f5); Corps_central.render(f5); Queue_1.render(f5); Queue_2.render(f5); Queue_3.render(f5); Queue_4.render(f5); Queue_5.render(f5); Queue_6.render(f5); Queue_7.render(f5); Queue_8.render(f5); Avant_1.render(f5); Avant_2.render(f5); Patte_droite_1.render(f5); Patte_gauche_1.render(f5); Patte_droite_2.render(f5); Patte_gauche_2.render(f5); Cou.render(f5); Machoire_basse.render(f5); Machoire_haute.render(f5); Crane_1.render(f5); Crane_2.render(f5); Sourcils_droite.render(f5); Sourcils_gauche.render(f5); Epine_6.render(f5); Epine_5.render(f5); Epine_4.render(f5); Epine_7.render(f5); Epine_3.render(f5); Epine_2.render(f5); Epine_1.render(f5); Epine_8.render(f5); Epine_9.render(f5); Epine_10.render(f5); Epine_11.render(f5); Epine_12.render(f5); Epine_13.render(f5); } private void setRotation(ModelRenderer model, float x, float y, float z) { model.rotateAngleX = x; model.rotateAngleY = y; model.rotateAngleZ = z; } public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); } }
RenderModzoic
package Render; import Entity.Entityclass; import net.minecraft.client.Minecraft; import net.minecraft.client.model.ModelBase; import net.minecraft.client.renderer.entity.RenderLiving; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; import net.minecraft.util.ResourceLocation; public class RenderModzoic extends RenderLiving { public RenderModzoic(RenderManager render, ModelBase model, float x) { super(render, model, x); } private ResourceLocation texture = new ResourceLocation("modzoic" + ":textures/mobs/dino9.png"); public void renderModzoic(Entityclass entity, double x, double y, double z, float v, float b) { super.doRender(entity, x, y, z, v, b); } public void doRenderLiving(EntityLiving entity, double x, double y, double z, float v, float b) { renderModzoic((Entityclass) entity, x, y, z, v, b); } public void doRendering(Entity entity, double x, double y, double z, float v, float b) { renderModzoic((Entityclass) entity, x, y, z, v, b); } @Override protected ResourceLocation getEntityTexture(Entity entity) { return texture; } }
-
Je comprends pas, où est le problème ?
-
Il n’attaque pas et ne bouge pas.
De plus, je ne sais pas ce qu’il faut mettre pour un model costumisé après :
public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity)
{
super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
}}
Et enfin j’aimerai savoir si y’a pas un truc plus simple et plus rapide pour qu’ils puissent spawn dans tous les biomes sans avoir à recopier chaque biome ici:
EntityRegistry.addSpawn(entityClass, 20, 1, 3, EnumCreatureType.MONSTER, biomeGenBase.); (=(entityClass, weightedProb, min, max, typeOfCreature, biomes) <– ce “biomes” là. Car pour qu’il puisse spawn dans un biome faut faire BiomeGenBase.forest, mais pour qu’il spawn sur la map entière il faudrait tous les écrire y’en a énormement ça prendrait du temps. -
Pour qu’il attaque et qu’il bouge, il lui faut une IA, tu l’as mise ?
Si tu n’as pas d’animation au niveau des membres, tu n’as pas besoin de cette fonction.
Il faut mettre tous les biomes à la suite : EntityRegistry.addSpawn(entityClass, 20, 1, 3, EnumCreatureType.MONSTER, biome1, biome2, etc)
PS : ne mets pas TOUS les biomes sinon il va aussi spawner dans l’end et dans le nether -
Pour qu’il attaque et qu’il bouge, il lui faut une IA, tu l’as mise ?> c’est à dire?
C’est pas ça?
Protected void applyEntityAI()
{
this.tasks.addTask(4, new EntityAIAttackOnCollide(this, EntityIronGolem.class, 1.0D, true));
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true));
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityVillager.class, true));
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityIronGolem.class, true));
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityChicken.class, true));
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPig.class, true));
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityRabbit.class, true));
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityCow.class, true));
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityHorse.class, true));
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityOcelot.class, true)); -
@‘conquerorguepard’:
(avec findGlobalUniqueEntityId et registerGlobalEntityID barrés je ne sais pas pourquoi)
Car ce sont des méthodes obsolètes, donc qui ne devrait plus être utilisé.
Pour les biomes, tu peux faire un tableau de tout les biomes et le réutiliser pour tous les entités, je ne crois pas qu’on peut faire mieux -
Tu en as mis beaucoup trop, surtout que tu leur as donné la meme priorité (2) à chacun.
-
D’accord.
Mais mon plus gros problème c’est que mon mob ne bouge pas et n’attaque pas
Et c’est quoi les différences entre ambient creature monster.
Parce que mon mob est monster mais ne spawn que la nuit alors que je voudrais qu’il spawn le jour. -
Il faut que tu mettes la fonction canSpawn sur true (la fonction est dans Entity Mob).
-
C’est où que je la mets exactement cette fonction? Entity Handler ou EntityClass? Dans quel endroit exacte?
Et du coup on m’a toujours pas dit comment je dois faire pour qu’il puisse bouger :/…Et c’est mieux comme ça?
this.tasks.addTask(4, new EntityAIAttackOnCollide(this, EntityIronGolem.class, 1.0D, true));
this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true));
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityVillager.class, true));
this.targetTasks.addTask(3, new EntityAINearestAttackableTarget(this, EntityIronGolem.class, true));
this.targetTasks.addTask(4, new EntityAINearestAttackableTarget(this, EntityChicken.class, true));
this.targetTasks.addTask(5, new EntityAINearestAttackableTarget(this, EntityPig.class, true));
this.targetTasks.addTask(6, new EntityAINearestAttackableTarget(this, EntityRabbit.class, true));
this.targetTasks.addTask(7, new EntityAINearestAttackableTarget(this, EntityCow.class, true));
this.targetTasks.addTask(8, new EntityAINearestAttackableTarget(this, EntityHorse.class, true));
this.targetTasks.addTask(9, new EntityAINearestAttackableTarget(this, EntityOcelot.class, true));
} -
Dans la classe de l’entité.
Comme je l’ai dit dans l’autre post, fais un nettoyage dans tes ai -
Et du coup je fais comment pour qu’il attaque tous les mobs non hostiles?
Et ça ne résout pas les problèmes de déplacements -
Nomalement EnumCreatureType.monster suffit à les rendre aggressifs.
-
Non il faut mettre les ai en rapport avec l’attaque (récupères celles des zombies et pour attaquer toutes les entitées, tu n’auras qu’à changer les sélécteurs.
-
C’est quoi les sélecteurs? Lesquels? Comment?
Et canspawn sur true sur quelle mise en forme et dans quelle variable?
Il me faut du détail c’est mon premier et je ne sais pas dans quel variable mettre vos commandes ni comment les formuler.
Sinon toutoune, je connais ça, mais je cherche à ce que les monstres attaquent aussi les autres mobs passifs -
Tu récupères les EntityAI du zombie, aux endroits où il y a new EntityAI[Quelque chose], dans le contructeur, il y a des noms d’entité pour certaines de ces entityAi, tu as juste à les modifier. (Je te dis ça de mémoire, je l’ai pas en face).
Pour le “canSpawn”, dans la classe Entity, recherches la fonction qui s’appelle comme ça (ctrl+f pour rechercher) et copies-colles là dans ton entitée, en mettant bien “return true;” -
J’ai modifié la classe entity :
package Entity; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.EntityAIAttackOnCollide; import net.minecraft.entity.ai.EntityAIHurtByTarget; import net.minecraft.entity.ai.EntityAILookIdle; import net.minecraft.entity.ai.EntityAIMoveThroughVillage; import net.minecraft.entity.ai.EntityAIMoveTowardsRestriction; import net.minecraft.entity.ai.EntityAINearestAttackableTarget; import net.minecraft.entity.ai.EntityAISwimming; import net.minecraft.entity.ai.EntityAIWander; import net.minecraft.entity.ai.EntityAIWatchClosest; import net.minecraft.entity.monster.EntityIronGolem; import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.monster.EntityPigZombie; import net.minecraft.entity.passive.EntityChicken; import net.minecraft.entity.passive.EntityCow; import net.minecraft.entity.passive.EntityHorse; import net.minecraft.entity.passive.EntityOcelot; import net.minecraft.entity.passive.EntityPig; import net.minecraft.entity.passive.EntityRabbit; import net.minecraft.entity.passive.EntityVillager; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.pathfinding.PathNavigateGround; import net.minecraft.world.World; public class Entityclass extends EntityMob { public Entityclass(World world) { super(world); ((PathNavigateGround)this.getNavigator()).setBreakDoors(true); this.tasks.addTask(0, new EntityAISwimming(this)); this.tasks.addTask(2, new EntityAIAttackOnCollide(this, EntityPlayer.class, 1.0D, false)); this.tasks.addTask(5, new EntityAIMoveTowardsRestriction(this, 1.0D)); this.tasks.addTask(7, new EntityAIWander(this, 1.0D)); this.tasks.addTask(8, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); this.tasks.addTask(8, new EntityAILookIdle(this)); this.setSize(2, 3); this.applyEntityAI(); } public void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(62D); this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(9D); this.getEntityAttribute(SharedMonsterAttributes.knockbackResistance).setBaseValue(2D); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(1D); this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(120D); } protected void applyEntityAI() { this.tasks.addTask(4, new EntityAIAttackOnCollide(this, EntityIronGolem.class, 1.0D, true)); this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true, new Class[] {EntityPigZombie.class})); this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)); this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityVillager.class, true)); this.targetTasks.addTask(3, new EntityAINearestAttackableTarget(this, EntityIronGolem.class, true)); this.targetTasks.addTask(4, new EntityAINearestAttackableTarget(this, EntityChicken.class, true)); this.targetTasks.addTask(5, new EntityAINearestAttackableTarget(this, EntityPig.class, true)); this.targetTasks.addTask(6, new EntityAINearestAttackableTarget(this, EntityRabbit.class, true)); this.targetTasks.addTask(7, new EntityAINearestAttackableTarget(this, EntityCow.class, true)); this.targetTasks.addTask(8, new EntityAINearestAttackableTarget(this, EntityHorse.class, true)); this.targetTasks.addTask(9, new EntityAINearestAttackableTarget(this, EntityOcelot.class, true)); }
Et maintenant il me fait ça: (j’ai voulu mettre une vidéo ça a pas marché. En gros mon mob avance à une très grande vitesse et fait des tours de moins d’une seconde autour de moi. Par contre il n’attaque que moi. Il va tellement vite qu’on dirait qu’il se tp. Des idées? Et sinon j’ai essayé de chercher canspawn, ça n’a rien trouvé, comme le montre le screen. De toutes façons, j’ai mis tous mes fichiers en première page, donc vous trouverez si quelque chose manque :))
Vous savez pourquoi? -
Pour le fait qu’il aille très vite, il faut que tu modifies sa vitesse (le movementSpeed) (tu as mis 1.0D et les mobs de Minecraft sont tous à moins de 1.0D, par exemple le zombie a “0.23000000417232513D”).
Pour le canspawn, effectivement je me suis trompé de nom :(, je regarde ça tout de suite.EDIT : C’est bon en fait la fonction c’est getCanSpawnHere, mais elle vérifies aussi les boites de collision donc il vaut mieux pas la remplacer (ça va juste te compliquer la vie) donc tu as juste à mettre cette fonction pour l’empêcher de vérifier le niveau de lumière :
@Override //Permet de dire que tu remplace une fonction de la superclass (le extends …) protected boolean isValidLightLevel() { return true; }