• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Problème de position sur une EntitySittableBlock

    Sans suite
    1.7.10
    4
    16
    4755
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • Deleted
      Deleted dernière édition par

      Bonsoir tout le monde j’ai crée une chaise ce soir mais j’ai un problème avec l’entity que je suis censé monter. Je la monte bien, tous les coordonnées sont, cependant au bout de 4 secondes rien ne va plus je suis tp à 2 blocks au dessus. En gros je plane , je vole dans le vide alors que 4 secondes avant tout allait pour le mieux.
      Voici mes class:

      Mes méthodes dans mon block

      
          public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
      
      {
      return sitPlayer(world, x, y, z, player, 1.0F);
      }
      
      public static boolean sitPlayer(World world, int x, int y, int z, EntityPlayer player, float entityY)
      {
      return sitPlayer(world, x, y, z, player, 0.5F, entityY, 0.5F);
      }
      
      public static boolean sitPlayer(World world, int x, int y, int z, EntityPlayer player, float entityX, float entityY, float entityZ)
      {
      if(!world.isRemote)
      {
      List <entitysittableblock>listEMB = world.getEntitiesWithinAABB(EntitySittableBlock.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1.0D, y + 1.0D, z + 1.0D).expand(1.0D, 1.0D, 1.0D));
      for(EntitySittableBlock entitytocheck : listEMB)
      {
      if((entitytocheck.blockPosX == x) && (entitytocheck.blockPosY == y) && (entitytocheck.blockPosZ == z))
      {
      entitytocheck.interact(player);
      return true;
      }
      }
      
      EntitySittableBlock entity = new EntitySittableBlock(world, player, x, y, z, x + entityX, y + entityY, z + entityZ);
      world.spawnEntityInWorld(entity);
      entity.interact(player);
      }
      return true;
      }
      
      

      PS = C’est un block avec TESR et orientable aussi.

      Et voici mon entity

      
      package mrplaigon.zombarcraftserver.zombarcraftmod.common.entity.other;
      
      import net.minecraft.entity.Entity;
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.nbt.NBTTagCompound;
      import net.minecraft.world.World;
      
      public class EntitySittableBlock extends Entity
      {
      public int blockPosX;
      public int blockPosY;
      public int blockPosZ;
      
      public EntitySittableBlock(World world)
      {
      super(world);
      this.noClip = true;
      this.preventEntitySpawning = true;
      this.setSize(0.0F, 0.0F);
      }
      
      public EntitySittableBlock(World world, EntityPlayer entityplayer, int x, int y, int z, float entityX, float entityY, float entityZ)
      {
      this(world);
      this.blockPosX = x;
      this.blockPosY = y;
      this.blockPosZ = z;
      this.setPosition(entityX, entityY, entityZ);
      }
      
      public boolean interact(EntityPlayer entityplayer)
      {
      if(this.riddenByEntity != null)
      {
      return true;
      }
      
      if(!this.worldObj.isRemote)
      {
      entityplayer.mountEntity(this);
      }
      return true;
      }
      
      public void onEntityUpdate()
      {
      if(this.riddenByEntity == null || this.riddenByEntity.isDead)
      {
      this.setDead();
      }
      super.onEntityUpdate();
      }
      
      @Override
      public void readEntityFromNBT(NBTTagCompound compound)
      {
      this.blockPosX = compound.getInteger("blockPosX");
      this.blockPosY = compound.getInteger("blockPosY");
      this.blockPosZ = compound.getInteger("blockPosZ");
      }
      
      @Override
      public void writeEntityToNBT(NBTTagCompound compound)
      {
      compound.setInteger("blockPosX", this.blockPosX);
      compound.setInteger("blockPosY", this.blockPosY);
      compound.setInteger("blockPosZ", this.blockPosZ);
      }
      
      @Override
      protected void entityInit()
      {
      
      }
      }
      
      

      Je vous remercie d’avance =D</entitysittableblock>

      1 réponse Dernière réponse Répondre Citer 0
      • SCAREX
        SCAREX dernière édition par

        
        @Override
        public void readEntityFromNBT(NBTTagCompound compound)
        {
        this.blockPosX = compound.getInteger("blockPosX");
        this.blockPosY = compound.getInteger("blockPosY");
        this.blockPosZ = compound.getInteger("blockPosZ");
        }
        
        @Override
        public void writeEntityToNBT(NBTTagCompound compound)
        {
        compound.setInteger("blockPosX", this.blockPosX);
        compound.setInteger("blockPosY", this.blockPosY);
        compound.setInteger("blockPosZ", this.blockPosZ);
        }
        

        change ces méthods avec çà:

        
        @Override
        public void readEntityFromNBT(NBTTagCompound compound)
        {
        super.readEntityFromNBT(compound);
        }
        
        @Override
        public void writeEntityToNBT(NBTTagCompound compound)
        {
        super.writeEntityToNBT(compound);
        }
        

        Il ne faut JAMAIS enlever les super dans les NBTs, si tu veux rajouter des données en plus, mets les après le super.

        Site web contenant mes scripts : http://SCAREXgaming.github.io

        Pas de demandes de support par MP ni par skype SVP.
        Je n'accepte sur skype que l…

        1 réponse Dernière réponse Répondre Citer 0
        • Deleted
          Deleted dernière édition par

          @‘SCAREX’:

          
          @Override
          public void readEntityFromNBT(NBTTagCompound compound)
          {
          this.blockPosX = compound.getInteger("blockPosX");
          this.blockPosY = compound.getInteger("blockPosY");
          this.blockPosZ = compound.getInteger("blockPosZ");
          }
          
          @Override
          public void writeEntityToNBT(NBTTagCompound compound)
          {
          compound.setInteger("blockPosX", this.blockPosX);
          compound.setInteger("blockPosY", this.blockPosY);
          compound.setInteger("blockPosZ", this.blockPosZ);
          }
          

          change ces méthods avec çà:

          
          @Override
          public void readEntityFromNBT(NBTTagCompound compound)
          {
          super.readEntityFromNBT(compound);
          }
          
          @Override
          public void writeEntityToNBT(NBTTagCompound compound)
          {
          super.writeEntityToNBT(compound);
          }
          

          Il ne faut JAMAIS enlever les super dans les NBTs, si tu veux rajouter des données en plus, mets les après le super.

          J’avais celle codée par MFF, en tout cas celle qui se trouve sur leur github
          Et pour le code que tu m’as envoyé j’ai cette erreur là

          Cannot directly invoke the abstract method writeEntityToNBT(NBTTagCompound) for the type Entity

          1 réponse Dernière réponse Répondre Citer 0
          • SCAREX
            SCAREX dernière édition par

            A quoi te servent les variables blockPosX, blockPosY et blockPosZ ?

            Site web contenant mes scripts : http://SCAREXgaming.github.io

            Pas de demandes de support par MP ni par skype SVP.
            Je n'accepte sur skype que l…

            1 réponse Dernière réponse Répondre Citer 0
            • Deleted
              Deleted dernière édition par

              @‘SCAREX’:

              A quoi te servent les variables blockPosX, blockPosY et blockPosZ ?

              Ce sont les coordonnées du block donc de l’entity puisque l’entity spawn aux mêmes coordonnées que celles du block
              Regarde les méthodes dans mon block, elles t’aideront à comprendre les NBTTag que j’ai utilisés

              1 réponse Dernière réponse Répondre Citer 0
              • SCAREX
                SCAREX dernière édition par

                @‘Julot10085’:

                @‘SCAREX’:

                A quoi te servent les variables blockPosX, blockPosY et blockPosZ ?

                Ce sont les coordonnées du block donc de l’entity puisque l’entity spawn aux mêmes coordonnées que celles du block
                Regarde les méthodes dans mon block, elles t’aideront à comprendre les NBTTag que j’ai utilisés

                Bah justement, d’après ce que je vois, ces variables ne sont pas utilisées en tant que coordonnés à cause du this.setPosition(x,y,z) mais elles sont utilisées dans les NBT, regarde comment sont enregistrées les autres entités.

                Site web contenant mes scripts : http://SCAREXgaming.github.io

                Pas de demandes de support par MP ni par skype SVP.
                Je n'accepte sur skype que l…

                1 réponse Dernière réponse Répondre Citer 0
                • Deleted
                  Deleted dernière édition par

                  @‘SCAREX’:

                  @‘Julot10085’:

                  @‘SCAREX’:

                  A quoi te servent les variables blockPosX, blockPosY et blockPosZ ?

                  Ce sont les coordonnées du block donc de l’entity puisque l’entity spawn aux mêmes coordonnées que celles du block
                  Regarde les méthodes dans mon block, elles t’aideront à comprendre les NBTTag que j’ai utilisés

                  Bah justement, d’après ce que je vois, ces variables ne sont pas utilisées en tant que coordonnés à cause du this.setPosition(x,y,z) mais elles sont utilisées dans les NBT, regarde comment sont enregistrées les autres entités.

                  Je n’ai pas trouvé grand chose mais je ne comprends j’ai copié collé le code du github de MFF ainsi que j’ai aussi essayé le github de MrCrayFish de son mod furnitur rien ne marche. Je ne vois plus quoi faire surtout que c’est toujours le même bug….

                  1 réponse Dernière réponse Répondre Citer 0
                  • SCAREX
                    SCAREX dernière édition par

                    @‘Julot10085’:

                    @‘SCAREX’:

                    @‘Julot10085’:

                    @‘SCAREX’:

                    A quoi te servent les variables blockPosX, blockPosY et blockPosZ ?

                    Ce sont les coordonnées du block donc de l’entity puisque l’entity spawn aux mêmes coordonnées que celles du block
                    Regarde les méthodes dans mon block, elles t’aideront à comprendre les NBTTag que j’ai utilisés

                    Bah justement, d’après ce que je vois, ces variables ne sont pas utilisées en tant que coordonnés à cause du this.setPosition(x,y,z) mais elles sont utilisées dans les NBT, regarde comment sont enregistrées les autres entités.

                    Je n’ai pas trouvé grand chose mais je ne comprends j’ai copié collé le code du github de MFF ainsi que j’ai aussi essayé le github de MrCrayFish de son mod furnitur rien ne marche. Je ne vois plus quoi faire surtout que c’est toujours le même bug….

                    Pas trouvé grand chose ? regarde les entityThrowable, les entityLiving, etc.

                    Site web contenant mes scripts : http://SCAREXgaming.github.io

                    Pas de demandes de support par MP ni par skype SVP.
                    Je n'accepte sur skype que l…

                    1 réponse Dernière réponse Répondre Citer 0
                    • Deleted
                      Deleted dernière édition par

                      Attends j’ai pas tout compris le soucis est qu’à un certain moment les coordonnées ne sont plus les bonnes en quoi regarder une entityThrowable va m’aider ? Les entityThrowable ne sont pas montées.

                      1 réponse Dernière réponse Répondre Citer 0
                      • SCAREX
                        SCAREX dernière édition par

                        @‘Julot10085’:

                        Attends j’ai pas tout compris le soucis est qu’à un certain moment les coordonnées ne sont plus les bonnes en quoi regarder une entityThrowable va m’aider ? Les entityThrowable ne sont pas montées.

                        Le problème est que ta classe est issue d’une classe abstraite, je pense que ton entité est mal positionnée dans le monde, donc si tu regardes comment sont faites les autres classes extends Entity, tu pourras t’en inspirer. J’aimerais plus t’aider mais je n’ai actuellement pas accès aux sources de Minecraft.

                        Site web contenant mes scripts : http://SCAREXgaming.github.io

                        Pas de demandes de support par MP ni par skype SVP.
                        Je n'accepte sur skype que l…

                        1 réponse Dernière réponse Répondre Citer 0
                        • Deleted
                          Deleted dernière édition par

                          @‘SCAREX’:

                          @‘Julot10085’:

                          Attends j’ai pas tout compris le soucis est qu’à un certain moment les coordonnées ne sont plus les bonnes en quoi regarder une entityThrowable va m’aider ? Les entityThrowable ne sont pas montées.

                          Le problème est que ta classe est issue d’une classe abstraite, je pense que ton entité est mal positionnée dans le monde, donc si tu regardes comment sont faites les autres classes extends Entity, tu pourras t’en inspirer. J’aimerais plus t’aider mais je n’ai actuellement pas accès aux sources de Minecraft.

                          Ok je regarderai demain et j’éditerai mon message si je trouve quelque chose qui me paraît important 🙂

                          1 réponse Dernière réponse Répondre Citer 0
                          • robin4002
                            robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                            Il me semble qu’on a le même problème sur FFMT lib.
                            Je viens de regarder un peu Entity.java
                            Et je viens de voir cette fonction :

                            ​    public void updateRiderPosition()
                            
                                {
                                    if (this.riddenByEntity != null)
                                    {
                                        this.riddenByEntity.setPosition(this.posX, this.posY + this.getMountedYOffset() + this.riddenByEntity.getYOffset(), this.posZ);
                                    }
                                }
                            

                            Du-coup je pense qu’il faudrait override la fonction getMountedYOffset() et changer sa valeur. Donc en gros ajouter dans la classe de ton entité :

                            ​    public double getMountedYOffset()
                            
                                {
                                    return 0.5D; // ou autre valeur, à tester. Par défaut c'est return (double)this.height * 0.75D;
                                }
                            
                            1 réponse Dernière réponse Répondre Citer 0
                            • EmotionFox
                              EmotionFox dernière édition par

                              Ce serait vraiment sympa un tutoriel à propos d’une chaise 😄 Une question, c’est possible de s’asseoir sur un bloc et non une entité ?

                              1 réponse Dernière réponse Répondre Citer 0
                              • SCAREX
                                SCAREX dernière édition par

                                @‘EmotionFox’:

                                Ce serait vraiment sympa un tutoriel à propos d’une chaise 😄 Une question, c’est possible de s’asseoir sur un bloc et non une entité ?

                                Non, mais tu peux créer une entité à l’emplacement du bloc et la supprimer lorsque le bloc est détruit.

                                Site web contenant mes scripts : http://SCAREXgaming.github.io

                                Pas de demandes de support par MP ni par skype SVP.
                                Je n'accepte sur skype que l…

                                1 réponse Dernière réponse Répondre Citer 0
                                • Deleted
                                  Deleted dernière édition par

                                  @‘robin4002’:

                                  Il me semble qu’on a le même problème sur FFMT lib.
                                  Je viens de regarder un peu Entity.java
                                  Et je viens de voir cette fonction :

                                  ​    public void updateRiderPosition()
                                  
                                      {
                                          if (this.riddenByEntity != null)
                                          {
                                              this.riddenByEntity.setPosition(this.posX, this.posY + this.getMountedYOffset() + this.riddenByEntity.getYOffset(), this.posZ);
                                          }
                                      }
                                  

                                  Du-coup je pense qu’il faudrait override la fonction getMountedYOffset() et changer sa valeur. Donc en gros ajouter dans la classe de ton entité :

                                  ​    public double getMountedYOffset()
                                  
                                      {
                                          return 0.5D; // ou autre valeur, à tester. Par défaut c'est return (double)this.height * 0.75D;
                                      }
                                  

                                  Cela ne marche toujours pas : c’est le même bug voici mon code actuelle

                                  
                                  package mrplaigon.zombarcraftserver.zombarcraftmod.common.entity.other;
                                  
                                  import net.minecraft.entity.Entity;
                                  import net.minecraft.entity.player.EntityPlayer;
                                  import net.minecraft.nbt.NBTTagCompound;
                                  import net.minecraft.world.World;
                                  
                                  public class EntitySittableBlock extends Entity
                                  {
                                  public int blockPosX;
                                  public int blockPosY;
                                  public int blockPosZ;
                                  
                                  public EntitySittableBlock(World world)
                                  {
                                  super(world);
                                  this.noClip = true;
                                  this.preventEntitySpawning = true;
                                  this.setSize(0.0F, 0.0F);
                                  }
                                  
                                  public EntitySittableBlock(World world, EntityPlayer entityplayer, int x, int y, int z, float entityX, float entityY, float entityZ)
                                  {
                                  this(world);
                                  this.blockPosX = x;
                                  this.blockPosY = y;
                                  this.blockPosZ = z;
                                  this.setPosition(entityX, entityY, entityZ);
                                  }
                                  
                                  public boolean interact(EntityPlayer entityplayer)
                                  {
                                  if(this.riddenByEntity != null)
                                  {
                                  return true;
                                  }
                                  
                                  if(!this.worldObj.isRemote)
                                  {
                                  entityplayer.mountEntity(this);
                                  }
                                  return true;
                                  }
                                  
                                      public void updateRiderPosition()
                                      {
                                          if (this.riddenByEntity != null)
                                          {
                                              this.riddenByEntity.setPosition(this.posX, this.posY + this.getMountedYOffset() + this.riddenByEntity.getYOffset(), this.posZ);
                                          }
                                      }
                                  
                                      public double getMountedYOffset()
                                  
                                      {
                                          return 0.5D; // ou autre valeur, à tester. Par défaut c'est return (double)this.height * 0.75D;
                                      }
                                  
                                  public void onEntityUpdate()
                                  {
                                  if(this.riddenByEntity == null || this.riddenByEntity.isDead)
                                  {
                                  this.setDead();
                                  }
                                  super.onEntityUpdate();
                                  }
                                  
                                  @Override
                                  public void readEntityFromNBT(NBTTagCompound compound)
                                  {
                                  // super.readEntityFromNBT(compound);
                                  }
                                  
                                  @Override
                                  public void writeEntityToNBT(NBTTagCompound compound)
                                  {
                                  // super.writeEntityToNBT(compound);
                                  }
                                  
                                  @Override
                                  protected void entityInit()
                                  {
                                  
                                  }
                                  }
                                  
                                  
                                  1 réponse Dernière réponse Répondre Citer 0
                                  • SCAREX
                                    SCAREX dernière édition par

                                    Je suis arrivé à çà :

                                    
                                    package fr.scarex.st18.ST18Blocks;
                                    
                                    import java.util.List;
                                    
                                    import net.minecraft.block.Block;
                                    import net.minecraft.block.material.Material;
                                    import net.minecraft.block.state.IBlockState;
                                    import net.minecraft.creativetab.CreativeTabs;
                                    import net.minecraft.entity.Entity;
                                    import net.minecraft.entity.EntityLivingBase;
                                    import net.minecraft.entity.player.EntityPlayer;
                                    import net.minecraft.item.ItemStack;
                                    import net.minecraft.util.AxisAlignedBB;
                                    import net.minecraft.util.BlockPos;
                                    import net.minecraft.util.EnumFacing;
                                    import net.minecraft.world.World;
                                    import net.minecraftforge.fml.common.registry.GameRegistry;
                                    
                                    import com.google.common.base.Predicate;
                                    import com.google.common.collect.Lists;
                                    
                                    import fr.scarex.st18.ST18;
                                    import fr.scarex.st18.ST18Entity.EntitySit;
                                    
                                    public class BlockSittable extends Block
                                    {
                                    private static final String name = "block_sittable";
                                    
                                    protected BlockSittable() {
                                    super(Material.rock);
                                    GameRegistry.registerBlock(this, name);
                                    setUnlocalizedName(ST18.MODID + "_" + name);
                                    setCreativeTab(CreativeTabs.tabBlock);
                                    }
                                    
                                    public static final String getName() {
                                    return name;
                                    }
                                    
                                    @Override
                                    public boolean onBlockActivated(World worldIn, final BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumFacing side, float hitX, float hitY, float hitZ) {
                                    if (!worldIn.isRemote) {
                                    List list = worldIn.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(pos.getX() + minX - 1.0D, pos.getY() + minY - 1.0D, pos.getZ() + minZ - 1.0D, pos.getX() + maxX + 1.0D, pos.getY() + maxY + 1.0D, pos.getZ() + maxZ + 1.0D), new Predicate(){
                                    @Override
                                    public boolean apply(Object input) {
                                    return input instanceof EntitySit && ((Entity)input).getPosition().equals(pos);
                                    }
                                    });
                                    if (list.size() > 0) {
                                    playerIn.mountEntity((Entity) list.get(0));
                                    } else {
                                    worldIn.spawnEntityInWorld(new EntitySit(worldIn, pos));
                                    }
                                    }
                                    return true;
                                    }
                                    
                                    @Override
                                    public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) {
                                    if (!worldIn.isRemote) worldIn.spawnEntityInWorld(new EntitySit(worldIn, pos));
                                    }
                                    }
                                    
                                    
                                    package fr.scarex.st18.ST18Entity;
                                    
                                    import fr.scarex.st18.ST18Blocks.BlockSittable;
                                    import fr.scarex.st18.ST18Blocks.ST18Blocks;
                                    import net.minecraft.entity.Entity;
                                    import net.minecraft.entity.EntityHanging;
                                    import net.minecraft.util.AxisAlignedBB;
                                    import net.minecraft.util.BlockPos;
                                    import net.minecraft.util.EnumFacing;
                                    import net.minecraft.world.World;
                                    
                                    public class EntitySit extends EntityHanging
                                    {
                                    public EntitySit(World worldIn, BlockPos pos) {
                                    super(worldIn, pos);
                                    this.field_174860_b = EnumFacing.NORTH;
                                    this.setLocationAndAngles(pos.getX() + 0.5D, pos.getY(), pos.getZ() + 0.5D, 0.0F, 0.0F);
                                    setEntityBoundingBox(new AxisAlignedBB(this.hangingPosition.getX(), this.hangingPosition.getY(), this.hangingPosition.getZ(), this.hangingPosition.getX() + 1.0D, this.hangingPosition.getY() + 1.0D, this.hangingPosition.getZ() + 1.0D));
                                    }
                                    
                                    public EntitySit(World world) {
                                    super(world);
                                    this.field_174860_b = EnumFacing.NORTH;
                                    }
                                    
                                    @Override
                                    public int getWidthPixels() {
                                    return 8;
                                    }
                                    
                                    @Override
                                    public int getHeightPixels() {
                                    return 8;
                                    }
                                    
                                    @Override
                                    public void onBroken(Entity entity) {}
                                    
                                    @Override
                                    public float getCollisionBorderSize() {
                                    return 0.0F;
                                    }
                                    
                                    @Override
                                    public double getMountedYOffset() {
                                    return 0.0D;
                                    }
                                    
                                    @Override
                                    public void onUpdate() {
                                    super.onUpdate();
                                    if (this.worldObj.getBlockState(this.hangingPosition).getBlock() != ST18Blocks.blockSittable) this.setDead();
                                    }
                                    
                                    @Override
                                    public boolean onValidSurface() {
                                    return true;
                                    }
                                    }
                                    

                                    Site web contenant mes scripts : http://SCAREXgaming.github.io

                                    Pas de demandes de support par MP ni par skype SVP.
                                    Je n'accepte sur skype que l…

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • 1 / 1
                                    • Premier message
                                      Dernier message
                                    Design by Woryk
                                    Contact / Mentions Légales

                                    MINECRAFT FORGE FRANCE © 2018

                                    Powered by NodeBB