Monture apprivoisable par 1 personne
-
Bonjour,
Je revient vers vous pour ma monture je voudrai faire en sorte que la personne qui la fait spawn avec l’oeuf est la seul a pouvoir monter dessus. Mais je voie pas de quelle class m’inspirer ou meme si c’est possible.
-
Il suffit de définir un tag Owner dans l’entité, tu peux regarder le code d’EntityOzelot et d’EntityWolf pour ça.
-
@‘Superloup10’:
Il suffit de définir un tag Owner dans l’entité, tu peux regarder le code d’EntityOzelot et d’EntityWolf pour ça.
J’ai regarder est j’ai trouver sa, sa a un rapport ?
public IEntityLivingData onSpawnWithEgg(IEntityLivingData p_110161_1_) { p_110161_1_ = super.onSpawnWithEgg(p_110161_1_); if (this.worldObj.rand.nextInt(7) == 0) { for (int i = 0; i < 2; ++i) { EntityOcelot entityocelot = new EntityOcelot(this.worldObj); entityocelot.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, 0.0F); entityocelot.setGrowingAge(-24000); this.worldObj.spawnEntityInWorld(entityocelot); } } return p_110161_1_; }
this.tasks.addTask(5, new EntityAIFollowOwner(this, 1.0D, 10.0F, 2.0F));
-
La méthode onSpawnWithEgg sert pour faire spawner une entité à l’aide de son œuf.
L’IA EntityAIFollowOwner sert juste à indiquer à l’entité qu’elle doit suivre son maitre.Dans la classe EntityOcelot, si tu es sous Eclipse, fais CTRL+F et marque owner dans le champ recherche.
Tu trouveras toutes les références à owner qui se trouve dans EntityOcelot. -
@‘Superloup10’:
La méthode onSpawnWithEgg sert pour faire spawner une entité à l’aide de son œuf.
L’IA EntityAIFollowOwner sert juste à indiquer à l’entité qu’elle doit suivre son maitre.Dans la classe EntityOcelot, si tu es sous Eclipse, fais CTRL+F et marque owner dans le champ recherche.
Tu trouveras toutes les références à owner qui se trouve dans EntityOcelot.C’est se que j’ai fait j’ai eu que c’est methode
-
Autant pour moi, c’est la class EntityTameable qui a ce tag.
-
@‘Superloup10’:
Autant pour moi, c’est la class EntityTameable qui a ce tag.
Y a beaucoup plus de chose
public EntityLivingBase getOwner() { try { UUID uuid = UUID.fromString(this.func_152113_b()); return uuid == null ? null : this.worldObj.func_152378_a(uuid); } catch (IllegalArgumentException illegalargumentexception) { return null; } } public boolean func_152114_e(EntityLivingBase p_152114_1_) { return p_152114_1_ == this.getOwner(); } public Team getTeam() { if (this.isTamed()) { EntityLivingBase entitylivingbase = this.getOwner(); if (entitylivingbase != null) { return entitylivingbase.getTeam(); } } return super.getTeam(); } public boolean isOnSameTeam(EntityLivingBase p_142014_1_) { if (this.isTamed()) { EntityLivingBase entitylivingbase1 = this.getOwner(); if (p_142014_1_ == entitylivingbase1) { return true; } if (entitylivingbase1 != null) { return entitylivingbase1.isOnSameTeam(p_142014_1_); } } return super.isOnSameTeam(p_142014_1_); }
-
Ton entité ressemble à quoi pour l’instant?
-
@‘Superloup10’:
Ton entité ressemble à quoi pour l’instant?
package fr.darkvince.facrpg.monture; import java.io.DataInputStream; import java.io.DataOutput; import java.io.IOException; import java.util.Iterator; import java.util.List; import cpw.mods.fml.common.registry.IEntityAdditionalSpawnData; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufInputStream; import io.netty.buffer.ByteBufOutputStream; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.command.IEntitySelector; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityAgeable; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.IEntityLivingData; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.EntityAIControlledByPlayer; import net.minecraft.entity.ai.EntityAIFollowParent; import net.minecraft.entity.ai.EntityAILookIdle; import net.minecraft.entity.ai.EntityAIMate; import net.minecraft.entity.ai.EntityAIPanic; import net.minecraft.entity.ai.EntityAIRunAroundLikeCrazy; import net.minecraft.entity.ai.EntityAISwimming; import net.minecraft.entity.ai.EntityAIWander; import net.minecraft.entity.ai.EntityAIWatchClosest; import net.minecraft.entity.ai.attributes.IAttribute; import net.minecraft.entity.ai.attributes.IAttributeInstance; import net.minecraft.entity.ai.attributes.RangedAttribute; import net.minecraft.entity.passive.EntityAnimal; import net.minecraft.entity.passive.EntityHorse; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.inventory.AnimalChest; import net.minecraft.inventory.IInvBasic; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.InventoryBasic; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.pathfinding.PathEntity; import net.minecraft.potion.Potion; import net.minecraft.util.DamageSource; import net.minecraft.util.MathHelper; import net.minecraft.util.StatCollector; import net.minecraft.world.World; public class EntityDragonDindeSauvage extends EntityAnimal { private float prevRearingAmount; public int mobSizeGen; public EntityDragonDindeSauvage(World world) { super(world); mobSizeGen = 0 ;//(int) Math.round(Math.random()*5); //this.setCustomNameTag("test"); this.setSize(0.9F, 1.5F); this.tasks.addTask(1, new EntityAIControlledByPlayer(this, 5.0F)); } public EntityDragonDindeSauvage(World world, double d, double d1, double d2) { this(world); setPosition(d, d1, d2); } public void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(1.66D); } @Override public EntityAgeable createChild(EntityAgeable p_90011_1_) { // TODO Auto-generated method stub return null; } public boolean interact(EntityPlayer par1EntityPlayer) { par1EntityPlayer.rotationYaw = this.rotationYaw; par1EntityPlayer.rotationPitch = this.rotationPitch; par1EntityPlayer.mountEntity(this); return super.interact(par1EntityPlayer); } public boolean stationary; protected boolean isMovementCeased() { return stationary; } /*public void updateRiderPosition() { super.updateRiderPosition(); if (this.prevRearingAmount > 0.0F) { float var1 = MathHelper.sin(this.renderYawOffset * (float)Math.PI / 180.0F); float var2 = MathHelper.cos(this.renderYawOffset * (float)Math.PI / 180.0F); float var3 = 0.7F * this.prevRearingAmount; float var4 = 0.15F * this.prevRearingAmount; this.riddenByEntity.setPosition(this.posX + (double)(var3 * var1), this.posY + this.getMountedYOffset() + this.riddenByEntity.getYOffset() + (double)var4, this.posZ - (double)(var3 * var2)); if (this.riddenByEntity instanceof EntityLivingBase) { ((EntityLivingBase)this.riddenByEntity).renderYawOffset = this.renderYawOffset; } } }*/ //////////////////// /*public void moveEntityWithHeading(float p_70612_1_, float p_70612_2_) { if (this.riddenByEntity != null && this.riddenByEntity instanceof EntityLivingBase) { this.prevRotationYaw = this.rotationYaw = this.riddenByEntity.rotationYaw; this.rotationPitch = this.riddenByEntity.rotationPitch * 0.5F; this.setRotation(this.rotationYaw, this.rotationPitch); this.rotationYawHead = this.renderYawOffset = this.rotationYaw; p_70612_1_ = ((EntityLivingBase)this.riddenByEntity).moveStrafing*50000.0F; //0.5F; p_70612_2_ = ((EntityLivingBase)this.riddenByEntity).moveForward*50000.0F; this.stepHeight = 1.0F; this.jumpMovementFactor = this.getAIMoveSpeed() * 0.1F; if (!this.worldObj.isRemote) { this.setAIMoveSpeed((float)this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getAttributeValue()); super.moveEntityWithHeading(p_70612_1_, p_70612_2_); } if (this.onGround) { // this.jumpPower = 0.0F; // this.setHorseJumping(false); } this.prevLimbSwingAmount = this.limbSwingAmount; double d1 = this.posX - this.prevPosX; double d0 = this.posZ - this.prevPosZ; float f4 = MathHelper.sqrt_double(d1 * d1 + d0 * d0) * 4.0F; if (f4 > 1.0F) { f4 = 1.0F; } this.limbSwingAmount += (f4 - this.limbSwingAmount) * 0.4F; this.limbSwing += this.limbSwingAmount; } else { this.stepHeight = 0.5F; this.jumpMovementFactor = 0.02F; super.moveEntityWithHeading(p_70612_1_, p_70612_2_); } }*/ public void moveEntityWithHeading(float p_70612_1_, float p_70612_2_) { if (this.riddenByEntity != null && this.riddenByEntity instanceof EntityLivingBase) { this.prevRotationYaw = this.rotationYaw = this.riddenByEntity.rotationYaw; this.rotationPitch = this.riddenByEntity.rotationPitch * 0.5F; this.setRotation(this.rotationYaw, this.rotationPitch); this.rotationYawHead = this.renderYawOffset = this.rotationYaw; p_70612_1_ = ((EntityLivingBase)this.riddenByEntity).moveStrafing * 5.0F; p_70612_2_ = ((EntityLivingBase)this.riddenByEntity).moveForward; this.isAirBorne = true; } this.stepHeight = 1.0F; if (!this.worldObj.isRemote) { this.setAIMoveSpeed((float)this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getAttributeValue()); super.moveEntityWithHeading(p_70612_1_, p_70612_2_); } this.prevLimbSwingAmount = this.limbSwingAmount; double d1 = this.posX - this.prevPosX; double d0 = this.posZ - this.prevPosZ; float f4 = MathHelper.sqrt_double(d1 * d1 + d0 * d0) * 4.0F; if (f4 > 1.0F) { f4 = 1.0F; } this.limbSwingAmount += (f4 - this.limbSwingAmount) * 0.4F; this.limbSwing += this.limbSwingAmount; } public double getMountedYOffset() { return 1.0D; } }
-
À la place du EntityAnimal, mets EntityTameable, comme ça tu as accès au tag qui définit le propriétaire.
-
@‘Superloup10’:
À la place du EntityAnimal, mets EntityTameable, comme ça tu as accès au tag qui définit le propriétaire.
Dacc, donc la si je me debrouille bien avec tous se que j’ai je peut faire que la personne qui pose l’oeuf est le seul qui peut monter sur la monture
-
Oui, au moment où tu fais spawner ton entité, tu fais un truc de se genre ```java
EntityName entityName = new EntityName(world);
entityName.setOwner(playerName); // Le nom de la méthode peut différer d’une version de Minecraft à l’autre
world.spawnEntityInWorld(entityName); // Même chose que le commentaire précédentOublie pas de positionner correctement ton entité par rapport au joueur.
-
@‘Superloup10’:
Oui, au moment où tu fais spawner ton entité, tu fais un truc de se genre ```java
EntityName entityName = new EntityName(world);
entityName.setOwner(playerName); // Le nom de la méthode peut différer d’une version de Minecraft à l’autre
world.spawnEntityInWorld(entityName); // Même chose que le commentaire précédentOublie pas de positionner correctement ton entité par rapport au joueur.
Voilà se que j’ai fait
public IEntityLivingData onSpawnWithEgg(IEntityLivingData p_110161_1_) { p_110161_1_ = super.onSpawnWithEgg(p_110161_1_); if (this.worldObj.rand.nextInt(7) == 0) { for (int i = 0; i < 2; ++i) { EntityPlayer playerName; EntityDragonDindeSauvage entityName = new EntityDragonDindeSauvage(this.worldObj); entityName.setOwner(playerName); // Le nom de la méthode peut différer d'une version de Minecraft à l'autre entityName.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, 1.0F); this.worldObj.spawnEntityInWorld(entityName); // Même chose que le commentaire précédent } } return p_110161_1_; }
Mais j’ai une erreur sur setOwner il me demande cast
-
Déjà tu n’as pas l’instance du joueur, du coup, tu auras un NPE.
Ensuite, il te demande de cast en quoi? -
@‘Superloup10’:
Déjà tu n’as pas l’instance du joueur, du coup, tu auras un NPE.
Ensuite, il te demande de cast en quoi?De cast en EntityName mais sa remais l’erreur apres
EntityPlayer playerName = Minecraft.getMinecraft().thePlayer; ``` comme sa c'est mieux ?
-
En 1.7.10, il semble que tu doives faire ça :
public IEntityLivingData onSpawnWithEgg(IEntityLivingData p_110161_1_) { p_110161_1_ = super.onSpawnWithEgg(p_110161_1_); if (this.worldObj.rand.nextInt(7) == 0) { for (int i = 0; i < 2; ++i) { EntityPlayer playerName; EntityDragonDindeSauvage entityName = new EntityDragonDindeSauvage(this.worldObj); entityName.setTamed(true); // Le nom de la méthode peut différer d'une version de Minecraft à l'autre entityName.func_152115_b(playerName.getUniqueID().toString()); entityName.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, 1.0F); this.worldObj.spawnEntityInWorld(entityName); // Même chose que le commentaire précédent } } return p_110161_1_; }
Tu as mis ce code dans quelle class?
-
Je les mis dans ma class Entity
J’ai juste changer sa
EntityPlayer playerName;
par sa
EntityPlayer playerName = Minecraft.getMinecraft().thePlayer;
car j’avais une erreur sur
entityName.func_152115_b(playerName.getUniqueID().toString());
-
Du coup, ça fonctionne?
-
@‘Superloup10’:
Du coup, ça fonctionne?
Quand je le mais sur le serveur
---- Minecraft Crash Report ---- // Hey, that tickles! Hehehe! Time: 19/05/16 00:40 Description: Exception in server tick loop java.lang.NoClassDefFoundError: net/minecraft/client/entity/EntityClientPlayerMP at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671) at java.lang.Class.getConstructor0(Class.java:3075) at java.lang.Class.getConstructor(Class.java:1825) at net.minecraft.entity.EntityList.func_75615_a(EntityList.java:160) at net.minecraft.world.chunk.storage.AnvilChunkLoader.loadEntities(AnvilChunkLoader.java:476) at net.minecraftforge.common.chunkio.ChunkIOProvider.callStage2(ChunkIOProvider.java:43) at net.minecraftforge.common.chunkio.ChunkIOProvider.callStage2(ChunkIOProvider.java:14) at net.minecraftforge.common.util.AsynchronousExecutor.skipQueue(AsynchronousExecutor.java:344) at net.minecraftforge.common.util.AsynchronousExecutor.getSkipQueue(AsynchronousExecutor.java:302) at net.minecraftforge.common.chunkio.ChunkIOExecutor.syncChunkLoad(ChunkIOExecutor.java:12) at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:158) at net.minecraft.world.gen.ChunkProviderServer.func_73158_c(ChunkProviderServer.java:131) at net.minecraft.server.MinecraftServer.func_71222_d(MinecraftServer.java:470) at net.minecraft.server.MinecraftServer.func_71247_a(MinecraftServer.java:418) at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:309) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:607) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.ClassNotFoundException: net.minecraft.client.entity.EntityClientPlayerMP at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 18 more Caused by: java.lang.NullPointerException at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:180) ... 20 more A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- System Details -- Details: Minecraft Version: 1.7.2 Operating System: Linux (amd64) version 3.5.0-47-generic Java Version: 1.8.0_60, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 86966960 bytes (82 MB) / 259522560 bytes (247 MB) up to 10416029696 bytes (9933 MB) JVM Flags: 23 total; -Xmx10000M -Xms256M -XX:MaxPermSize=256m -XX:PermSize=128m -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+UseNUMA -XX:+CMSParallelRemarkEnabled -XX:MaxGCPauseMillis=50 -XX:+UseAdaptiveGCBoundary -XX:-UseGCOverheadLimit -XX:+UseBiasedLocking -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=15 -XX:UseSSE=3 -XX:+UseLargePages -XX:+UseFastAccessorMethods -XX:+UseStringCache -XX:+UseCompressedOops -XX:+OptimizeStringConcat -XX:+AggressiveOpts AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used IntCache: cache: 13, tcache: 0, allocated: 13, tallocated: 95 FML: MCP v9.03 FML v7.2.217.1147 Minecraft Forge 10.12.2.1147 5 mods loaded, 5 mods active mcp{9.03} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available FML{7.2.217.1147} [Forge Mod Loader] (cauldron-1.7.2-1.1147.04.98-server.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available Forge{10.12.2.1147} [Minecraft Forge] (cauldron-1.7.2-1.1147.04.98-server.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available facrpg{1.0} [facrpg] (facrpg-1.0.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available ModCustomMenu{1.0} [ModCustomMenu] (facrpg-1.0.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available Profiler Position: N/A (disabled) Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used Player Count: 0 / 100; [] Is Modded: Definitely; Server brand changed to 'cauldron,craftbukkit,mcpc,fml,forge' Type: Dedicated Server (map_server.txt)
-
Pour le coup, je sais pourquoi ça crash, en revanche, je ne suis pas sur du fix, tu peux essayer de get le player depuis la list des joueurs, il te suffit de faire ```java
world.playerEntities.get(id); // id = position du joueur dans la listeSinon, tu as ```java world.getPlayerEntityByName("nom du joueur");
Si le problème n’est toujours pas résolu, il faudra voir avec robin.