[SEMI TUTO] Création de mon mob hostile: spawn, attaque etc.
-
Tu peux renvoyé la class actuelle de ton entitée ?
Et ré-expliquer, ce que tu veux que ton entitée fasse. -
J’aimerai que mon entité:
*spawn naturellement le jour et pourquoi pas la nuit aussi
*Attaque le joueur et les autres entités vanilla pacifique (+golem et loup)
*Puisse sauter un bloc s’il en a envie pour pouvoir se déplacer normalement
*N’est pas de bug, genre reste à une distance de 10 cubes autour de son spawn même s’il me voit (cela ne me le fait que lorsqu’il spawn naturellement).Merci d’avance
(Je rappelle que je suis en 1.8.9 maintenant)Et sinon il n’arrive pas à faire du bruit malgré mes efforts.
Entity class
package Entity; import fr.minecraftforgefrance.modzoic.common.Modzoic; 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(0.36D); this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(120D); } protected void applyEntityAI() { this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)); } public void dropFewItems(boolean b, int looting) { this.dropItem(Modzoic.meatEpanterias, 6); } protected String getLivingSound() { return "carnotausaurus_living_1.ogg"; } @Override public boolean canDespawn() { return false; } }Classe principale (Modzoic)
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) { } }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)); } }Common Proxy:
package fr.minecraftforgefrance.modzoic.proxy; public class CommonProxy { public void registerRender() { } }Entity Handler:
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, 70, 1, 3, EnumCreatureType.CREATURE, BiomeGenBase.forest, BiomeGenBase.beach, BiomeGenBase.birchForest, BiomeGenBase.birchForestHills ,BiomeGenBase.coldBeach ,BiomeGenBase.coldTaiga ,BiomeGenBase.coldTaigaHills ,BiomeGenBase.desert ,BiomeGenBase.desertHills ,BiomeGenBase.extremeHills ,BiomeGenBase.forestHills ,BiomeGenBase.frozenRiver ,BiomeGenBase.iceMountains ,BiomeGenBase.icePlains ,BiomeGenBase.jungle ,BiomeGenBase.jungleEdge ,BiomeGenBase.jungleHills ,BiomeGenBase.megaTaiga ,BiomeGenBase.megaTaigaHills ,BiomeGenBase.mesa ,BiomeGenBase.mesaPlateau ,BiomeGenBase.mesaPlateau_F ,BiomeGenBase.plains ,BiomeGenBase.roofedForest ,BiomeGenBase.savanna ,BiomeGenBase.savannaPlateau ,BiomeGenBase.taigaHills ,BiomeGenBase.taiga ,BiomeGenBase.stoneBeach); EntityRegistry.registerModEntity(entityClass, name, entityID, Modzoic.instance, 64, 1, true); EntityList.entityEggs.put(Integer.valueOf(entityID), new EntityList.EntityEggInfo(entityID, mainColor, subColor)); } }Model Modzoic:
package Models; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; import net.minecraft.entity.Entity; import net.minecraft.util.MathHelper; 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); } }Render Modzoic:
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/dino8.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; } }N’hésitez pas pour d’autres questions!
-
protected String getLivingSound() { return "carnotausaurus_living_1.ogg"; }mets ça à la place :
protected String getLivingSound() { return "modzoic" + ":carnotausaurus_living"; }Ensuite tu dois faire un sounds.json qui ressemble à ça : https://github.com/elias54/FakeOres/blob/master/resources/assets/fakeores/sounds.json
-
Comme ça? Et ensuite?
Et après le son c’est pas trop urgent
c’est plus le saut, car tant que le mob ne saute pas il est à peu près inutilisable. -
Le fichier sounds.json doit comporter tous les sons de ton mod.
Voici un autre exemple : https://github.com/TheGenerationModders/Ere_Geologique/blob/EreGeologique-2.0.x/resources/assets/ere_geologique/sounds.jsonPour ce qui est du saut, je vois ça ce soir.
-
Ainsi?
-
En fait ton fichier doit s’appeler sounds.json, doit être placé dans le dossier modid et enfin dedans, la seconde ligne est le nom de ton son interprété par MC. En gros tu peux juste laisser nanuqsaurusLiving, par-exemple pas besoin des séparation par point…La ligne carnotaurus_living_1 est le nom de ton fichier (ou tes fichiers) son. Évidemment ces fichiers doivent être placés dans le dossier modid/sounds (si ça n’a pas changé depuis la 1.7x
?) et ils doivent aussi être au format .ogg, mais ça, ça paraît + que logique 
Pour finir il y a une erreur dans ton fichier, elle se situe au niveau de ta ligne 5, tu ne dois pas mettre de virgule à la fin, car tu n’a pas d’autres ligne du même genre en dessous. Retire donc juste la virgule, et ton fichier sera prêt à l’emploi
-
Est-ce que avec ça dans sa classe, il spawn le jour ?
@Override public boolean getCanSpawnHere() { int i = MathHelper.floor_double(posX); int j = MathHelper.floor_double(this.getEntityBoundingBox().minY); int k = MathHelper.floor_double(posZ); int l = worldObj.getLight(new BlockPos(i, j, k)); return worldObj.getCollidingBoundingBoxes(this, getEntityBoundingBox()).size() == 0 && worldObj.checkNoEntityCollision(this.getEntityBoundingBox()) && worldObj.canSeeSky(new BlockPos(i, j, k)) && rand.nextInt(5) == 0 && l > 10; } -
Pour le fichier son:
C’est bon?Et en tant que “CREATURE”, mon mob spawn déjà de jour :). Il faut juste qu’il puisse sauter et qu’il ose s’éloigner à plus de 10 blocs de son spawn d’apparition.
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, 70, 1, 3, EnumCreatureType.CREATURE, BiomeGenBase.forest, BiomeGenBase.beach, BiomeGenBase.birchForest, BiomeGenBase.birchForestHills ,BiomeGenBase.coldBeach ,BiomeGenBase.coldTaiga ,BiomeGenBase.coldTaigaHills ,BiomeGenBase.desert ,BiomeGenBase.desertHills ,BiomeGenBase.extremeHills ,BiomeGenBase.forestHills ,BiomeGenBase.frozenRiver ,BiomeGenBase.iceMountains ,BiomeGenBase.icePlains ,BiomeGenBase.jungle ,BiomeGenBase.jungleEdge ,BiomeGenBase.jungleHills ,BiomeGenBase.megaTaiga ,BiomeGenBase.megaTaigaHills ,BiomeGenBase.mesa ,BiomeGenBase.mesaPlateau ,BiomeGenBase.mesaPlateau_F ,BiomeGenBase.plains ,BiomeGenBase.roofedForest ,BiomeGenBase.savanna ,BiomeGenBase.savannaPlateau ,BiomeGenBase.taigaHills ,BiomeGenBase.taiga ,BiomeGenBase.stoneBeach); EntityRegistry.registerModEntity(entityClass, name, entityID, Modzoic.instance, 64, 1, true); EntityList.entityEggs.put(Integer.valueOf(entityID), new EntityList.EntityEggInfo(entityID, mainColor, subColor)); } } -
Ouais mais toi tu veux qu’il spawn de jour comme de nuit, nan ?
Dans ce cas faudrait en fait complétement revoir la fonction getCanSpawn()Et au fait pourquoi lui rajoute-tu des IA ? Sais-tu au moins à quoi elles te servent ? Car clairement ton mob n’a pas du tout besoin d’IA…
Y’a des chances que ça soit ça qui l’empêchent de sauter et de s’éloigner

-
package Entity; import fr.minecraftforgefrance.modzoic.common.Modzoic; 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.util.BlockPos; import net.minecraft.util.MathHelper; 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); } 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(0.36D); this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(120D); } public void dropFewItems(boolean b, int looting) { this.dropItem(Modzoic.meatEpanterias, 6); } protected String getLivingSound() { return "modzoic" + ":carnotausaurus_living"; } @Override public boolean canDespawn() { return false; } @Override public boolean getCanSpawnHere() { int i = MathHelper.floor_double(posX); int j = MathHelper.floor_double(this.getEntityBoundingBox().minY); int k = MathHelper.floor_double(posZ); int l = worldObj.getLight(new BlockPos(i, j, k)); return worldObj.getCollidingBoundingBoxes(this, getEntityBoundingBox()).size() == 0 && worldObj.checkNoEntityCollision(this.getEntityBoundingBox()) && worldObj.canSeeSky(new BlockPos(i, j, k)) && rand.nextInt(5) == 0 && l > 10; } }Et je l’ai mis en monster.
Résultat : Je n’ai aucun son, je ne sais pas s’il saute les blocs, vu qu’il ne bouge pas, et il ne m’attaque pas. Je sais qu’il spawn de jour, pour la nuit aussi. Mais du coup il ne m’attaque plus, comme la dernière fois… Je suis pas sûr mais je crois que l’AI en 1.8 est vitale pour le mob… Et j’ai aussi un mal fou à les frapper, comme si il n’y avait plus vraiment de boite de collision.
Sinon j’ai une grosse chute de fps -
Pour ton fichier sounds.json, voici la bonne version http://pastebin.com/rjPUGLyn
Du coup ta méthode devrait ressembler à ça :
protected String getLivingSound() { return "modzoic" + ":mob.nanuqsaurus.living"; } -
Comme ça?
{
“mob.nanuqsaurus.living”: { nanuqsaurus
“category”: “hostile”,
“sounds”: [
“dinosaurs/Nanuqsaurus/carnotaurus_living_1” “:sounds/dinosaurs/Nanuqsaurus/carnotaurus_living_1.ogg”
]
}
}
Et pour les autres problèmes, tu sais? -
Les commentaires sur le pastebin de Superloup servait juste d’indication pas besoin de les remplacer par des valeurs, de plus tu ne lit pas ce qu’il ta dit:
“voici la bonne version”Il faudrait peut-être revoir ta façon de chercher des informations/solutions, car dans les code fournis par forge et sur minecraftforge.net/google tu trouve un paquet de fois des exemple pour les json relatif au sons.
-
Ouais et puis je t’ai tout dit aussi –’
Tout ce que t’avais fait avant, c’était bon. T’avais juste à corriger 1 seule erreur (la virgule). Après FAIS des tests pour voir ce qui va et ce qui ne va pas. Faut pas attendre qu’on te dise “Oui c’est bon” ou alors “Non regarde des exemples, t’as oublié telle chose”… -
D’accord, merci! Et pour le reste?
-
Je suis aller regarder le code des entités vanilla et je peut t’assurer que ton entitée saute déjà. Car le saut est défini dans EntityLiving.class et ton mob est une class qui hérite de EntityMob qui hérite de EntityCreature qui hérite de EntityLiving.
-
Le son marche ^^. Le saut semble marcher :). Mais il n’attaque pas. Vous êtes sûrs qu’il ne faut pas rajouter d’AI?
-
Si il te manque au moins une AI (nearest attackable target).
-
C’est à dire? Je la mets en forme comment? Je dois refaire la partie AI (que tout le monde me déconseille de faire)? Ou autrement?
Une fois que je saurais ce sera bon et assimilé :). Faut juste que je vois l’exemple :/.
Et cela va lui faire attaquer tous les mobs non hostiles?PS: C’est la dernière chose qui manque pour que le mob soit près :D!
