MFF

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

    Rendu complexe de bloc via TESR

    Planifier Épinglé Verrouillé Déplacé Les blocs
    1.6.x
    215 Messages 31 Publieurs 75.2k 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.
    • S Hors-ligne
      sisidney
      dernière édition par

      Merci mais j’ai vu que l’on pouvait faire des rendu en utilisant des fichier .obj qui sont issu de Blender cela utilise il un rendu TESR ?

      1 réponse Dernière réponse Répondre Citer 0
      • jglrxavpokJ Hors-ligne
        jglrxavpok Modérateurs
        dernière édition par

        Si tu utilises des .obj, à part coder quelque chose de très long pour le convertir en ISBRH, le rendu TESR est le seul viable (et possible).

        Modérateur sur MFF. 
        Mon Github: http://github.com/jglrxavpok
        Mon compte Steam si vous voulez jouer à CS:GO ou TF2 avec moi: https://steamcommunity.com/id/jglrxavpok/

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

          Salut !
          Cela fait depuis hier soir que je cherche d’ou vient le package client et ou il faut le mettre, si vous pourvais me donner plus d’info sur ce package cela m’arrangerai beaucoup

          Merci d’avance pour vos reponce
          Cordialement Sidney

          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

            C’est à toi de le créer, c’est comme ton package common, sauf que tu remplace common par client.
            Après c’est une question d’organisation, tu peux mettre la classe où tu veux.

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

              Ok merci de t’a reponce ! 🙂
              J’ai réussie en faire le rendu, tout fonctionne bien sauf quand je veut faire tourné le bloc en fonction de la position du joueur.
              Voila tout met classe:

              Class du bloc:

              
              package modCrafttech.common;
              
              import cpw.mods.fml.relauncher.Side;
              import cpw.mods.fml.relauncher.SideOnly;
              import modCrafttech.proxy.CraftechClientProxy;
              import net.minecraft.block.Block;
              import net.minecraft.block.material.Material;
              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 BlockSculpture extends Block
              {
              public BlockSculpture(int id)
              {
              super(id, Material.rock);
              }
              
              public TileEntity createTileEntity(World world, int metadata)
              {
              if(metadata == 0)
              return new TileEntitySculpture();
              else if(metadata == 2)
              return new TileEntityTutorial2();
              else
              return null;
              
              }
              
              public boolean hasTileEntity(int metadata)
              {
              if(metadata == 0 || metadata == 2)
              return true;
              else
              return false;
              }
              public boolean renderAsNormalBlock()
              {
              return false;
              }
              
              public boolean isOpaqueCube()
              {
              return false;
              }
              
              @SideOnly(Side.CLIENT)
              public int getRenderType()
              {
              return CraftechClientProxy.renderInventoryTESRId;
              }
              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;
              TileEntity te = world.getBlockTileEntity(x, y, z);
              if(te != null && stack.getItemDamage() == 2 && te instanceof TileEntityTutorial2)
              {
              ((TileEntityTutorial2)te).setDirection((byte)direction);
              world.markBlockForUpdate(x, y, z);
              }
              }
              }
              

              Class Tile Entity:

              package modCrafttech.common;
              
              import net.minecraft.nbt.NBTTagCompound;
              import net.minecraft.network.INetworkManager;
              import net.minecraft.network.packet.Packet;
              import net.minecraft.network.packet.Packet132TileEntityData;
              import net.minecraft.tileentity.TileEntity;
              
              public class TileEntitySculpture extends TileEntity
              {
              public byte direction;
              
              public void readFromNBT(NBTTagCompound nbtTag)
              {
              super.readFromNBT(nbtTag);
              direction = nbtTag.getByte("direction");
              }
              
              public void writeToNBT(NBTTagCompound nbtTag)
              {
              super.writeToNBT(nbtTag);
              for(int i = 0; i < 5; i++)
              {
              nbtTag.setByte("direction", direction);
              }
              }
              
              public void setDirection(byte direct)
              {
              direction = direct;
              }
              
              public byte getDirection()
              {
              return direction;
              }
              
              public Packet getDescriptionPacket()
              {
              NBTTagCompound nbttagcompound = new NBTTagCompound();
              this.writeToNBT(nbttagcompound);
              return new Packet132TileEntityData(this.xCoord, this.yCoord, this.zCoord, 4, nbttagcompound);
              }
              
              public void onDataPacket(INetworkManager net, Packet132TileEntityData pkt)
              {
              this.readFromNBT(pkt.data);
              }
              }
              

              Class de l’autre Tile Entity:

              package modCrafttech.common;
              
              import net.minecraft.nbt.NBTTagCompound;
              import net.minecraft.network.INetworkManager;
              import net.minecraft.network.packet.Packet;
              import net.minecraft.network.packet.Packet132TileEntityData;
              import net.minecraft.tileentity.TileEntity;
              
              public class TileEntityTutorial2 extends TileEntity
              {
              public byte direction;
              
              public void readFromNBT(NBTTagCompound nbtTag)
              {
              super.readFromNBT(nbtTag);
              direction = nbtTag.getByte("direction");
              }
              
              public void writeToNBT(NBTTagCompound nbtTag)
              {
              super.writeToNBT(nbtTag);
              nbtTag.setByte("direction", direction);
              }
              
              public void setDirection(byte direct)
              {
              direction = direct;
              }
              
              public byte getDirection()
              {
              return direction;
              }
              public Packet getDescriptionPacket()
              {
              NBTTagCompound nbttagcompound = new NBTTagCompound();
              this.writeToNBT(nbttagcompound);
              return new Packet132TileEntityData(this.xCoord, this.yCoord, this.zCoord, 4, nbttagcompound);
              }
              
              public void onDataPacket(INetworkManager net, Packet132TileEntityData pkt)
              {
              this.readFromNBT(pkt.data);
              }
              }
              

              Class du Tile entity special render :

              package modCraftech.client;
              
              import org.lwjgl.opengl.GL11;
              
              import modCrafttech.common.TileEntitySculpture;
              import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
              import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
              import net.minecraft.tileentity.TileEntity;
              import net.minecraft.util.ResourceLocation;
              
              public class TileEntitySculptureSpecialRender extends TileEntitySpecialRenderer implements IInventoryRenderer {
              private final ModelBariquade model = new ModelBariquade();
              public static final ResourceLocation textureLocation = new ResourceLocation("craftech", "textures/blocks/Bariquade.png");
              
              public TileEntitySculptureSpecialRender()
              {
              this.setTileEntityRenderer(TileEntityRenderer.instance);
              }
              
              @Override
              public void renderInventory(double x, double y, double z)
              {
              this.renderTileEntitySculptureAt(null, x, y, z, 0.0F);
              }
              
              @Override
              public void renderTileEntityAt(TileEntity te, double x, double y, double z, float tick)
              {
              this.renderTileEntitySculptureAt((TileEntitySculpture)te, x, y, z, tick);
              GL11.glPushMatrix();
              GL11.glTranslated(x + 0.5F, y + 1.5F, z + 0.5F);
              this.bindTexture(textureLocation);
              GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F);
              this.model.render(0.0625F);
              GL11.glPopMatrix();
              }
              public void renderTileEntitySculptureAt(TileEntitySculpture te, double x, double y, double z, float tick)
              {
              GL11.glPushMatrix();
              GL11.glTranslated(x + 0.5F, y + 1.5F, z + 0.5F);
              this.bindTexture(textureLocation);
              GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F);
              this.model.render(0.0625F);
              if(te != null)
              {
              GL11.glRotatef(90F * te.getDirection(), 0.0F, 1.0F, 0.0F);
              }
              
              GL11.glPopMatrix();
              }
              }
              
              

              Merci d’avance pour vos reponces
              Cordialement Sidney

              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

                La classe de ton rendu doit être comme ça :

                package modCraftech.client;
                
                import org.lwjgl.opengl.GL11;
                
                import modCrafttech.common.TileEntitySculpture;
                import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
                import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
                import net.minecraft.tileentity.TileEntity;
                import net.minecraft.util.ResourceLocation;
                
                public class TileEntitySculptureSpecialRender extends TileEntitySpecialRenderer implements IInventoryRenderer {
                private final ModelBariquade model = new ModelBariquade();
                public static final ResourceLocation textureLocation = new ResourceLocation("craftech", "textures/blocks/Bariquade.png");
                
                public TileEntitySculptureSpecialRender()
                {
                this.setTileEntityRenderer(TileEntityRenderer.instance);
                }
                
                @Override
                public void renderInventory(double x, double y, double z)
                {
                this.renderTileEntitySculptureAt(null, x, y, z, 0.0F);
                }
                
                @Override
                public void renderTileEntityAt(TileEntity te, double x, double y, double z, float tick)
                {
                this.renderTileEntitySculptureAt((TileEntitySculpture)te, x, y, z, tick);
                }
                public void renderTileEntitySculptureAt(TileEntitySculpture te, double x, double y, double z, float tick)
                {
                GL11.glPushMatrix();
                GL11.glTranslated(x + 0.5F, y + 1.5F, z + 0.5F);
                this.bindTexture(textureLocation);
                GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F);
                if(te != null)
                {
                GL11.glRotatef(90F * te.getDirection(), 0.0F, 1.0F, 0.0F);
                }
                this.model.render(0.0625F);
                GL11.glPopMatrix();
                }
                }
                

                Il y avait de problème :
                le glRotate doit être avant la fonction du rendu.
                Ta fonction renderTileEntitySculptureAt n’était pas appelé dans renderTileEntityAt.

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

                  Merci !
                  Mais le bloc ne tourne toujours pas 😢

                  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

                    Ha oui je viens de voir que ta fonction onBlockPlacedBy n’est pas bonne.

                    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;
                    TileEntity te = world.getBlockTileEntity(x, y, z);
                    if(te instanceof TileEntitySculpture)
                    {
                    ((TileEntitySculpture)te).setDirection((byte)direction);
                    world.markBlockForUpdate(x, y, z);
                    }
                    }
                    

                    Faut bien suivre les explications et pas juste copier/coller, j’ai expliqué dans le tutoriel que j’avais plusieurs blocs en metadata dans l’exemple.

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

                      Merci beaucoup !!

                      Désoler j’ai du mal lire un endroit du tuto 😕

                      Mais par contre comment je pourrai changer la hit box du bloc car je ne trouve aucun tuto dessus ?

                      Cordialement Sidney

                      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

                        http://www.minecraftforgefrance.fr/showthread.php?tid=136
                        J’ai parlé de la fonction getSelectedBoundingBoxFromPool et getCollisionBoundingBoxFromPool, mais ce n’est pas très détaillé. Il faudrait que je fasse un tutoriel complet sur les collisions un jour.

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

                          Merci , j ai reussi a modifier la hit box et tous mais quand un problème est résolu, un autre revient car la hit box ne pivote pas en même temps que le model sais tu comment je pourrai faire ?

                          Cordialement Sidney

                          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

                            public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
                            {
                            TileEntity te = world.getBlockTileEntity(x, y, z);
                            if(te instanceof TileEntitySculpture)
                            {
                            int direction = ((TileEntitySculpture)te).getDirection();
                            if(direction == 0)
                            {
                            // direction 0
                            return AxisAlignedBB.getAABBPool().getAABB((double)x + 0.1D, (double)y + this.minY, (double)z + 0.2D, (double)x + this.maxX, (double)y + 0.9D, (double)z + 0.8D);
                            }
                            else if(direction == 1)
                            {
                            //direction 1
                            //etc … jusqu'à 3
                            }
                            }
                            return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ);
                            // tile entity invalide, pas de direction, donc valeur par défaut (ne devrait pas arriver en temps normal)
                            }
                            

                            Même principe pour getSelectedBoundingBoxFromPool.

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

                              Merci beaucoup !
                              J’ai donc réussi a faire pivoté la hit-box en fonction de la direction du bloc mais cependant j’ai encore un petit souci (c’est promit , c’est le dernier) lorsque je met le curseur a coté du bloc sa me le sélectionne quand même. Peut tu me dire comment je pourrai réglé ce souci , j’ai était jeté un coup d’œil du coté de la vine mais rien de bien intéressent.
                              Voici un petit screen shot :
                              http://zupimages.net/viewer.php?id=14/15/s0xp.png

                              Cordialement Sidney

                              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

                                Étrange, je ne vois pas comment régler ça, désolé 😕

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

                                  Ok pas grave. Merci quand même !! 🙂

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • jglrxavpokJ Hors-ligne
                                    jglrxavpok Modérateurs
                                    dernière édition par

                                    @‘sisidney’:

                                    Merci beaucoup !
                                    J’ai donc réussi a faire pivoté la hit-box en fonction de la direction du bloc mais cependant j’ai encore un petit souci (c’est promit , c’est le dernier) lorsque je met le curseur a coté du bloc sa me le sélectionne quand même. Peut tu me dire comment je pourrai réglé ce souci , j’ai était jeté un coup d’œil du coté de la vine mais rien de bien intéressent.
                                    Voici un petit screen shot :
                                    http://zupimages.net/viewer.php?id=14/15/s0xp.png

                                    Cordialement Sidney

                                    Es-tu sûr d’avoir utilisé le même principe pour la méthode getSelectedBoundingBoxFromPool?
                                    Sinon, met dans une méthode (peu importe laquelle) et fais Control+Espace (sous Eclipse, en tout cas) pour avoir la liste des méthodes disponibles.
                                    Cherches-en celles qui renvoient AxisAlignedBB et essaie d’appliquer le même traitement que pour les deux méthodes citées dans les précédents posts.

                                    Modérateur sur MFF. 
                                    Mon Github: http://github.com/jglrxavpok
                                    Mon compte Steam si vous voulez jouer à CS:GO ou TF2 avec moi: https://steamcommunity.com/id/jglrxavpok/

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

                                      Ok merci 🙂 Je vais regardé ça !

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • Cuty-StarkC Hors-ligne
                                        Cuty-Stark
                                        dernière édition par

                                        [size=largeBonjour,

                                        Tout d’abord, merci à tous ceux qui ont écrit les tutoriaux et fait les vidéos de votre chaîne. Sans tout cela, j’aurais été incapable de réaliser ce que vous pouvez voir ci-dessous: un scorpion et un coffre. Ce sont une entité et un bloc :). En plus, ces tutoriels fonctionnent pour la 1.7.x ! Donc, un grand merci <3.

                                        Malheureusement, j’ai un problème… Eh oui :/. Comme vous pouvez-le voir sur le screenshot, un petit cadre noir s’affiche autour de mon coffre. Pour faire cela, j’ai écris ces deux méthodes dans la classe de mon block:

                                        
                                        //Cadre (fine ligne noir) autour du block
                                        @SideOnly(Side.CLIENT)
                                        public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z)
                                        {
                                        return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + 2.10D, (double)y + 1.20D, (double)z + 1.65D);
                                        }
                                        
                                        //Empeche les mobs de traverser le cardre ci-dessus
                                        public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
                                        {
                                        return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + 2.10D, (double)y + 1.20D, (double)z + 1.65D);
                                        }
                                        
                                        

                                        Cependant, elles ne permettent pas d’empêcher un joueur ou un mob de les traverser. Hors, j’aimerais qu’on ne puisse pas traverser mon coffre. Regardez:

                                        Donc, je vous demande: ] Existe-t-il une méthode pour remplir les blocks couvert par le coffre, et empêcher ainsi qu’on puisse les traverser ?
                                        %(#000000)[Merci d’avance pour votre aide !

                                        Au revoir :)]

                                        1 réponse Dernière réponse Répondre Citer 0
                                        • isadorI Hors-ligne
                                          isador Moddeurs confirmés Modérateurs
                                          dernière édition par

                                          Le ne me souvient plus de la méthode exacte donc je te cherche ça quand je go au pc

                                          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

                                            Déjà traité dans la section support pour les moddeurs. Il faut poser un second bloc en même temps et l’enleve quand un des deux est détruit (onBlockPlacedBy et blockBreak).

                                            1 réponse Dernière réponse Répondre Citer 0
                                            • 1
                                            • 2
                                            • 6
                                            • 7
                                            • 8
                                            • 9
                                            • 10
                                            • 11
                                            • 8 / 11
                                            • Premier message
                                              Dernier message
                                            Design by Woryk
                                            ContactMentions Légales

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB