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

      Sans techne ni de TESR :
      @‘jglrxavpok’:

      Le rendu ISBRH permet ça 😉

      1 réponse Dernière réponse Répondre Citer 0
      • 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
                                            • 1
                                            • 2
                                            • 3
                                            • 4
                                            • 5
                                            • 6
                                            • 10
                                            • 11
                                            • 4 / 11
                                            • Premier message
                                              Dernier message
                                            Design by Woryk
                                            ContactMentions Légales

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB