MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Problème de position sur une EntitySittableBlock

    Planifier Épinglé Verrouillé Déplacé Sans suite
    1.7.10
    16 Messages 4 Publieurs 4.8k Vues 1 Watching
    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.
    • DeletedD Hors-ligne
      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
      • SCAREXS Hors-ligne
        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
        • DeletedD Hors-ligne
          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
          • SCAREXS Hors-ligne
            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
            • DeletedD Hors-ligne
              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
              • robin4002R Hors-ligne
                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
                • EmotionFoxE Hors-ligne
                  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
                  • SCAREXS Hors-ligne
                    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
                    • DeletedD Hors-ligne
                      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
                      • SCAREXS Hors-ligne
                        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
                        ContactMentions Légales

                        MINECRAFT FORGE FRANCE © 2024

                        Powered by NodeBB