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

    Résolu Changer le model suivant un bloc

    Anciennes versions
    1.6.2
    3
    6
    1906
    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.
    • Sugarshy
      Sugarshy dernière édition par

      Bonjour,
      j’aimerai que mon block change de model suivant si un bloc est placé à un certain endroit.
      Pas sur une de ces faces directes, mais sur un bloc en diagonales de mon autre bloc.
      En clair, lorsque je pose un autre bloc en bas à droite de mon premier bloc, celui ci change de fichier model afin de prendre une autre forme.

      Merci d’avance pour votre aide qui m’est toujours plus précieuse.

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

        C’est super simple, c’est juste des conditions.
        Dans ta fonction qui fait le rendu, tu as :
        this.model.render((Entity)null, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);
        Il suffit juste de créer plusieurs modèles

        Exemple :

        if(world.getBlockId((int)x, (int)y - 1, (int)z) == ClassePrincipale.monBlock.blockId)
        {
        this.model1.render((Entity)null, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);
        //il y a un bloc en dessous
        }
        else if(world.getBlockId((int)x, (int)y + 1, (int)z) == ClassePrincipale.monBlock.blockId)
        {
        this.model2.render((Entity)null, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);
        //il y a un bloc au dessus
        }
        

        etc …

        1 réponse Dernière réponse Répondre Citer 0
        • Superloup10
          Superloup10 Modérateurs dernière édition par

          @Sugarshy : On dirait que tu veux faire un système MultiBlock, ou je me trompe?

          Si vous souhaitez me faire un don, il vous suffit de cliquer sur le bouton situé en dessous.

          Je suis un membre apprécié et joueur, j'ai déjà obtenu 17 points de réputation.

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

            Merci, c’est deja beaucoup mieux ^^
            mais il me fais une erreur au niveau du world…
            mon TileEntitySupportRender:

            package landcast.common;
            
            import net.minecraft.block.Block;
            import net.minecraft.client.renderer.OpenGlHelper;
            import net.minecraft.client.renderer.Tessellator;
            import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
            import net.minecraft.entity.Entity;
            import net.minecraft.tileentity.TileEntity;
            import net.minecraft.util.ResourceLocation;
            import net.minecraft.world.World;
            
            import org.lwjgl.opengl.GL11;
            
            public class TileEntitySupportRender extends TileEntitySpecialRenderer
            {
            
            private final ModelSupport model1;
            private final ModelSupport2 model2;
            protected static final ResourceLocation texture = new ResourceLocation("landcast:textures/blocks/Support.png");
            
            public TileEntitySupportRender()
            {
            this.model1 = new ModelSupport();
            this.model2 = new ModelSupport2();
            }
            
            private void adjustRotatePivotViaMeta(World world, int x, int y, int z)
            {
            int meta = world.getBlockMetadata(x, y, z);
            GL11.glPushMatrix();
            GL11.glRotatef(meta * (-90), 0.0F, 0.0F, 1.0F);
            GL11.glPopMatrix();
            
            }
            
            @Override
            public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float scale)
            {
            this.renderTileEntityAtSupport((TileEntitySupport)tileentity, x, y, z, scale);
            
            }
            
            public void renderTileEntityAtSupport(TileEntitySupport tileentity, double x, double y, double z, float scale)
            {
            GL11.glPushMatrix();
            GL11.glTranslatef((float)x + 0.5F, (float)y + 1.5F, (float)z + 0.5F);
            this.bindTexture(texture);
            GL11.glPushMatrix();
            GL11.glRotatef(180F, 180.0F, 0.0F, 1.0F);
            GL11.glRotatef(90F * tileentity.getBlockMetadata(), 0.0F, 1.0F, 0.0F);
            if(world.getBlockId((int)x, (int)y - 1, (int)z) == Base.Support.blockID)
            {
            this.model2.render((Entity)null, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);
            //il y a un bloc en dessous
            }
            
            GL11.glPopMatrix();
            GL11.glPopMatrix();
            
            }
            
            private void adjustLightFixture(World world, int i, int j, int k, Block block)
            {
            Tessellator tess = Tessellator.instance;
            float brightness = block.getBlockBrightness(world, i, j, k);
            int skyLight = world.getLightBrightnessForSkyBlocks(i, j, k, 0);
            int modulousModifier = skyLight % 65536;
            int divModifier = skyLight / 65536;
            tess.setColorOpaque_F(brightness, brightness, brightness);
            OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)modulousModifier, divModifier);
            }
            }
            

            De plus, il risque de’y avoir un probleme au niveau de l’emplacement, car mon bloc utilise une rotation suivant l’angle ou l’on le pose, se qui veut dire que la fonction que tu m’as passé cherchera toujours sous le meme angle, et non pas selon l’angle où je le pose.

            Mon Block:

            package landcast.common;
            
            import net.minecraft.block.Block;
            import net.minecraft.block.material.Material;
            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;
            
            public class BlockSupport extends Block
            {
            public BlockSupport(int id)
            {
            super(id, Material.wood);
            this.setCreativeTab(CreativeTabs.tabBlock);
            }
            @Override
            public TileEntity createTileEntity(World world, int metadata)
            {
            return new TileEntitySupport();
            
            }
            public boolean hasTileEntity(int metadata)
            {
            return true;
            }
            public boolean isOpaqueCube()
            {
            return false;
            }
            
            public boolean renderAsNormalBlock()
            {
            return false;
            }
            
            public int getRenderType()
            {
            return -1;
            }
            public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack)
            {
            int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
            world.setBlockMetadataWithNotify(x, y, z, direction, 2);
            
            }
            
            }
            ```___
            @'Superloup10':
            
            > @Sugarshy : On dirait que tu veux faire un système MultiBlock, ou je me trompe?
            
            Tu te trompe ^^ J'ai un bloc qui me sert de support t qui se tourne dans une certaine position suivant comment je le pose, et je voudrai que la forme du support s'adapte aux blocs environnants ;)
            1 réponse Dernière réponse Répondre Citer 0
            • robin4002
              robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

              tileentity.worldObj à la place de world.
              Ensuite concernant la direction, faut que tu check en fonction du metadata comme tu utilise le metadata pour la direction.
              Et pour information, c’est ce code :
              GL11.glRotatef(90F * tileentity.getBlockMetadata(), 0.0F, 1.0F, 0.0F);
              qui change la direction.

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

                Oki, merci ^^

                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