• Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Problème de position sur une EntitySittableBlock

    Sans suite
    1.7.10
    4
    16
    4600
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Deleted
      Deleted last edited by

      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 Reply Last reply Reply Quote 0
      • SCAREX
        SCAREX last edited by

        
        @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 Reply Last reply Reply Quote 0
        • Deleted
          Deleted last edited by

          @‘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 Reply Last reply Reply Quote 0
          • SCAREX
            SCAREX last edited by

            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 Reply Last reply Reply Quote 0
            • Deleted
              Deleted last edited by

              @‘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 Reply Last reply Reply Quote 0
              • SCAREX
                SCAREX last edited by

                @‘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 Reply Last reply Reply Quote 0
                • Deleted
                  Deleted last edited by

                  @‘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 Reply Last reply Reply Quote 0
                  • SCAREX
                    SCAREX last edited by

                    @‘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 Reply Last reply Reply Quote 0
                    • Deleted
                      Deleted last edited by

                      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 Reply Last reply Reply Quote 0
                      • SCAREX
                        SCAREX last edited by

                        @‘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 Reply Last reply Reply Quote 0
                        • Deleted
                          Deleted last edited by

                          @‘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 Reply Last reply Reply Quote 0
                          • robin4002
                            robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                            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 Reply Last reply Reply Quote 0
                            • EmotionFox
                              EmotionFox last edited by

                              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 Reply Last reply Reply Quote 0
                              • SCAREX
                                SCAREX last edited by

                                @‘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 Reply Last reply Reply Quote 0
                                • Deleted
                                  Deleted last edited by

                                  @‘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 Reply Last reply Reply Quote 0
                                  • SCAREX
                                    SCAREX last edited by

                                    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 Reply Last reply Reply Quote 0
                                    • 1 / 1
                                    • First post
                                      Last post
                                    Design by Woryk
                                    Contact / Mentions Légales

                                    MINECRAFT FORGE FRANCE © 2018

                                    Powered by NodeBB