MFF

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

    Entity montable

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    23 Messages 6 Publieurs 5.0k 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.
    • SCAREXS Hors-ligne
      SCAREX
      dernière édition par

      Tout ce qu’il me manque c’est la syncro.

      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
      • L Hors-ligne
        Laserflip33
        dernière édition par

        J’y étais arrivé, je t’envoie le code dès que je le retrouve. (Mon entity était montable et dirigeable)

        EDIT : Bon je sais plus où je l’ai mis mais je m’étais inspiré de cette discussion : http://www.minecraftforgefrance.fr/showthread.php?tid=1766

        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

          Sinon regarde du côté de FFMT lib, on ajoute aussi une entité qui permet de s’assoir.
          Ce qu’on a fait nous c’est que l’entité est créé lorsque le joueur clic droit sur le bloc, puis elle est kill lorsque le joueur s’enlève.

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

            C’est ce que je fais dans mon code sauf que l’entité s’enlève toute seule quand elle est plus dans le block correspondant.
            Je vous tiens au courant avec ce que vous m’avez donné.

            EDIT : aucun changement avec ce nouveau code, je pense que c’est un bug forge.

            Mes nouvelles classes :

            package fr.scarex.hilium.block;
            
            import java.util.List;
            
            import net.minecraft.block.Block;
            import net.minecraft.block.material.Material;
            import net.minecraft.entity.player.EntityPlayer;
            import net.minecraft.util.AxisAlignedBB;
            import net.minecraft.world.World;
            import fr.scarex.hilium.Hilium;
            import fr.scarex.hilium.entity.EntitySit;
            import fr.scarex.hilium.tileentity.TileEntitySit;
            
            /**
            * @author SCAREX
            *
            */
            public class BlockSit extends Block
            {
            protected BlockSit(Material material) {
            super(material);
            }
            
            @Override
            public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
            if (this.canSit(world, x, y, z, player, side, hitX, hitY, hitZ)) {
            // Entity entity = world.getEntityByID(((TileEntitySit) world.getTileEntity(x, y, z)).getEntityId());
            List <entitysit>list = world.getEntitiesWithinAABB(EntitySit.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1.0D, y + 1.0D, z + 1.0D));
            EntitySit entity = list.size() > 0 ? list.get(0) : null;
            Hilium.LOGGER.info(entity);
            if (entity != null) entity.interactFirst(player);
            return true;
            }
            return false;
            }
            
            public boolean canSit(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
            return true;
            }
            
            @Override
            public void onBlockAdded(World world, int x, int y, int z) {
            EntitySit e = new EntitySit(world, x + 0.5D, y + 0.5D, z + 0.5D, this.getOffsetY(world, x, y, z));
            world.spawnEntityInWorld(e);
            ((TileEntitySit) world.getTileEntity(x, y, z)).setEntityId(e.getEntityId());
            }
            
            public float getOffsetY(World world, int x, int y, int z) {
            return 0.5F;
            }
            }
            
            
            package fr.scarex.hilium.entity;
            
            import net.minecraft.entity.Entity;
            import net.minecraft.entity.player.EntityPlayer;
            import net.minecraft.nbt.NBTTagCompound;
            import net.minecraft.util.MathHelper;
            import net.minecraft.world.World;
            import fr.scarex.hilium.Hilium;
            import fr.scarex.hilium.block.BlockSit;
            
            /**
            * @author SCAREX
            *
            */
            public class EntitySit extends Entity
            {
            protected float offsetY;
            
            public EntitySit(World world) {
            super(world);
            this.noClip = true;
            this.preventEntitySpawning = true;
            this.setSize(0.2F, 0.2F);
            this.offsetY = 0.0F;
            }
            
            public EntitySit(World world, double x, double y, double z, float offsetY) {
            this(world);
            this.setPosition(x, y, z);
            this.offsetY = offsetY;
            }
            
            @Override
            protected void entityInit() {}
            
            @Override
            protected void readEntityFromNBT(NBTTagCompound comp) {}
            
            @Override
            protected void writeEntityToNBT(NBTTagCompound comp) {}
            
            @Override
            public void onUpdate() {
            super.onUpdate();
            if (!(this.worldObj.getBlock(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)) instanceof BlockSit)) this.kill();
            }
            
            @Override
            public boolean interactFirst(EntityPlayer p) {
            if (this.riddenByEntity != null) return true;
            if (!this.worldObj.isRemote) p.mountEntity(this);
            return true;
            }
            
            @Override
            public double getMountedYOffset() {
            return this.offsetY;
            }
            
            @Override
            public void updateRiderPosition() {
            super.updateRiderPosition();
            if (this.riddenByEntity != null) this.riddenByEntity.rotationYaw = 90.0F * this.worldObj.getBlockMetadata(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ));
            }
            }
            
            ```___En fait je pense que le problème vient du fait que l'entité soit null côté client : j'ai rajouté des logs et l'entité existe seulement côté serveur, alors qu'elle devrait aussi exister côté client.</entitysit>

            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
            • robin4002R Hors-ligne
              robin4002 Moddeurs confirmés Rédacteurs Administrateurs
              dernière édition par

              Tu as enregistré l’entité avec EntityRegistry.registerModEntity ?

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

                Ok, je me suicide maintenant ? j’avais juste oublié de l’enregistrer, j’ai pas l’habitude des entités. Ce qui est marrant c’est que çà n’a pas du tout crasher, et j’arrivais quand même à m’asseoir 1 fois sur 2.

                EDIT : en fait non, çà ne résout pas le problème.

                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
                • SCAREXS Hors-ligne
                  SCAREX
                  dernière édition par

                  Si personne n’a d’idée pour résoudre ce problème, je report ce bug à MinecraftForge.

                  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
                  • robin4002R Hors-ligne
                    robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                    dernière édition par

                    Ça ne spawn toujours pas côté client ?

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

                      Je pense comprendre : la fonction onBlockAdded est appelée uniquement côté serveur, donc le client ne sait pas que l’entité est apparue. Donc soit je fait apparaître l’entité dans une autre fonction, soit il faut que j’envoi un paquet au client.

                      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
                      • SCAREXS Hors-ligne
                        SCAREX
                        dernière édition par

                        Maintenant l’entité apparaît bien côté client et je peux m’asseoir dessus, mais il y a encore un problème de synchronisation : le getMountedYOffset ne s’applique que côté serveur.

                        package fr.scarex.hilium.block;
                        
                        import net.minecraft.block.Block;
                        import net.minecraft.block.material.Material;
                        import net.minecraft.entity.Entity;
                        import net.minecraft.entity.player.EntityPlayer;
                        import net.minecraft.world.World;
                        import fr.scarex.hilium.Hilium;
                        import fr.scarex.hilium.entity.EntitySit;
                        import fr.scarex.hilium.tileentity.TileEntitySit;
                        
                        /**
                        * @author SCAREX
                        *
                        */
                        public class BlockSit extends Block
                        {
                        protected BlockSit(Material material) {
                        super(material);
                        }
                        
                        @Override
                        public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
                        if (this.canSit(world, x, y, z, player, side, hitX, hitY, hitZ)) {
                        EntitySit entity = new EntitySit(world, x + 0.5D, y + 0.5D, z + 0.5D, this.getOffsetY(world, x, y, z));
                        world.spawnEntityInWorld(entity);
                        entity.interactFirst(player);
                        return true;
                        }
                        return false;
                        }
                        
                        public boolean canSit(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
                        return true;
                        }
                        
                        public double getOffsetY(World world, int x, int y, int z) {
                        return 0.5D;
                        }
                        }
                        
                        
                        package fr.scarex.hilium.entity;
                        
                        import net.minecraft.entity.Entity;
                        import net.minecraft.entity.player.EntityPlayer;
                        import net.minecraft.nbt.NBTTagCompound;
                        import net.minecraft.util.MathHelper;
                        import net.minecraft.world.World;
                        import fr.scarex.hilium.Hilium;
                        import fr.scarex.hilium.block.BlockSit;
                        
                        /**
                        * @author SCAREX
                        *
                        */
                        public class EntitySit extends Entity
                        {
                        protected double offsetY;
                        
                        public EntitySit(World world) {
                        super(world);
                        this.noClip = true;
                        this.preventEntitySpawning = true;
                        this.setSize(0.0F, 0.0F);
                        this.offsetY = 0.0F;
                        }
                        
                        public EntitySit(World world, double x, double y, double z, double offsetY) {
                        this(world);
                        this.setPosition(x, y, z);
                        this.offsetY = offsetY;
                        }
                        
                        @Override
                        protected void entityInit() {}
                        
                        @Override
                        protected void readEntityFromNBT(NBTTagCompound comp) {}
                        
                        @Override
                        protected void writeEntityToNBT(NBTTagCompound comp) {}
                        
                        @Override
                        public void onEntityUpdate() {
                        if (this.riddenByEntity == null || this.riddenByEntity.isDead) this.setDead();
                        super.onEntityUpdate();
                        }
                        
                        @Override
                        public boolean interactFirst(EntityPlayer p) {
                        if (this.riddenByEntity != null) return true;
                        if (!this.worldObj.isRemote) p.mountEntity(this);
                        return true;
                        }
                        
                        @Override
                        public double getMountedYOffset() {
                        return this.offsetY;
                        }
                        }
                        
                        
                        package fr.scarex.hilium.block;
                        
                        import net.minecraft.block.material.Material;
                        import net.minecraft.client.renderer.texture.IIconRegister;
                        import net.minecraft.creativetab.CreativeTabs;
                        import net.minecraft.entity.EntityLivingBase;
                        import net.minecraft.item.ItemStack;
                        import net.minecraft.tileentity.TileEntity;
                        import net.minecraft.util.MathHelper;
                        import net.minecraft.world.World;
                        import cpw.mods.fml.common.registry.GameRegistry;
                        import fr.scarex.hilium.Hilium;
                        import fr.scarex.hilium.client.ClientProxy;
                        import fr.scarex.hilium.tileentity.TileEntitySit;
                        import fr.scarex.hilium.tileentity.TileEntityUseless;
                        
                        /**
                        * @author SCAREX
                        *
                        */
                        public class BlockToilet extends BlockSit
                        {
                        public static final String NAME = "toilet";
                        
                        protected BlockToilet() {
                        super(Material.glass);
                        this.setHardness(0.5F);
                        this.setResistance(5.0F);
                        
                        this.setStepSound(this.soundTypeGlass);
                        this.setCreativeTab(CreativeTabs.tabDecorations);
                        
                        this.setBlockName(Hilium.MODID + "_" + NAME);
                        this.setBlockTextureName(Hilium.MODID + ":" + NAME);
                        
                        this.register();
                        }
                        
                        private void register() {
                        GameRegistry.registerBlock(this, NAME);
                        GameRegistry.registerTileEntity(TileEntitySit.class, Hilium.MODID + ":" + NAME);
                        }
                        
                        @Override
                        public boolean renderAsNormalBlock() {
                        return false;
                        }
                        
                        @Override
                        public int getRenderType() {
                        return ClientProxy.RENDER_ID;
                        }
                        
                        @Override
                        public boolean isOpaqueCube() {
                        return false;
                        }
                        
                        @Override
                        public boolean hasTileEntity(int metadata) {
                        return true;
                        }
                        
                        @Override
                        public TileEntity createTileEntity(World world, int metadata) {
                        return new TileEntitySit();
                        }
                        
                        @Override
                        public void setBlockBoundsForItemRender() {
                        this.setBlockBounds(0.05F, 0.0F, 0.05F, 0.95F, 0.88F, 0.95F);
                        }
                        
                        @Override
                        public void registerBlockIcons(IIconRegister register) {
                        this.blockIcon = register.registerIcon("glass");
                        }
                        
                        @Override
                        public boolean canPlaceBlockAt(World world, int x, int y, int z) {
                        return super.canPlaceBlockAt(world, x, y, z) && World.doesBlockHaveSolidTopSurface(world, x, y - 1, z);
                        }
                        
                        @Override
                        public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack stack) {
                        int direction = MathHelper.floor_double((double) (entity.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
                        world.setBlockMetadataWithNotify(x, y, z, direction == 3 ? 0 : direction + 1, 2);
                        }
                        
                        @Override
                        public double getOffsetY(World world, int x, int y, int z) {
                        return 0.3D;
                        }
                        }
                        
                        

                        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
                        • robin4002R Hors-ligne
                          robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                          dernière édition par

                          Ajoute implements IEntityAdditionalSpawnData et avec writeSpawnData et readSpawnData synchro la valeur de offsetY.

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

                            Merci, je connaissais pas du tout cette interface, problème résolu. Mis à part le fait qu’il faut un certain temps pour que le joueur soit à la bonne hauteur :

                            Ensuite :

                            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
                            • SnykerS Hors-ligne
                              Snyker
                              dernière édition par

                              Mdr des toilettes x), je me demande à quoi servira ce mod.

                              Si tu as trouvé la solution tu pourrait faire un tutoriel dans ton temps libre s’il te plait ? Je pense sa en satisfera plus d’un ( moi le premier ).

                              Aucune signature n'est disponible pour une barre chocolatée.

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

                                Si tu veux, si j’arrives à corriger ce bug… #MojangCorrectYourBugs (je suis pas censé publier de screenshots du model que j’utilise)

                                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
                                • Mikavanille39M Hors-ligne
                                  Mikavanille39
                                  dernière édition par

                                  Tkt Scarex, c’est correct pour les photos, juste pas donner le model 😛

                                  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

                                    Quand tu dis certains temps, c’est combien environ ?

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

                                      30/40 secondes

                                      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
                                      • robin4002R Hors-ligne
                                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                                        dernière édition par

                                        À mon avis quand il reçoit le paquet il ne rafraichie pas directement la position du joueur, faudrait voir pour forcer ça.

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

                                          Pas grave, je mets en résolu

                                          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
                                          • 2
                                          • 1 / 2
                                          • Premier message
                                            Dernier message
                                          Design by Woryk
                                          ContactMentions Légales

                                          MINECRAFT FORGE FRANCE © 2024

                                          Powered by NodeBB