MFF

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

    Problème avec la rotation des blocs

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    19 Messages 3 Publieurs 1.3k 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.
    • BouckiB Hors-ligne
      Boucki
      dernière édition par

      [size=smallBonjour, j’ai commencé à programmer il y a pas si longtemps mais je me suis récemment heurté à un problème.]

      [size=smallLorsque je pose le bloc Tesr que j’ai crée, il garde tout le temps la même direction, j’ai pourtant suivis plusieurs tutoriels afin de savoir comment orienter le bloc mais rien.]
      [size=smallJ’ai aussi tenter de créer un item pour lui faire faire une rotation mais ForgeDirection ne fonctionne pas ;(]
      [size=smallje voulais donc savoir comment je peux faire.]

      [size=smallmerci de votre aide :)]

      package renderer;
      
      import org.lwjgl.opengl.GL11;
      
      import com.vitesse.Reference;
      import com.vitesse.tileentity.TileEntityBlockTesr;
      
      import models.ModelBlockTesr;
      import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
      import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
      import net.minecraft.tileentity.TileEntity;
      import net.minecraft.util.ResourceLocation;
      
      public class TileEntityBlockTesrSpecialRenderer extends TileEntitySpecialRenderer
      {
         public static ModelBlockTesr model = new ModelBlockTesr();
         public static ResourceLocation texture = new ResourceLocation(Reference.MOD_ID + ":textures/models/blocks/blockTesr.png");
      
         public void renderTileEntity()
         {
             this.func_147497_a(TileEntityRendererDispatcher.instance);
         }
      
         @Override
         public void renderTileEntityAt(TileEntity entity, double x, double y, double z, float partialRenderTick)
         {
             this.renderTileEntityBlockTesrAt((TileEntityBlockTesr)entity, x, y, z, partialRenderTick);
         }
      
         private void renderTileEntityBlockTesrAt(TileEntityBlockTesr tile, double x, double y, double z, float partialRenderTick)
         {
             GL11.glPushMatrix();
             GL11.glTranslated(x - -1D, y + 0D, z + 0D);
             GL11.glRotatef(180F, 0F, 0F, 1F);
             GL11.glRotatef(90F * tile.getDirection(), 0F, 1F, 0F);
             this.bindTexture(texture);
             model.renderAll();
             GL11.glPopMatrix();
         }
      }
      
      package com.vitesse.init;
      
      import com.vitesse.proxy.ClientProxy;
      import com.vitesse.tileentity.TileEntityBlockTesr;
      
      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 BlockTesr extends Block
      {
      
         public BlockTesr(Material p_i45394_1_)
         {
             super(p_i45394_1_);
         }
      
         @Override
         public TileEntity createTileEntity(World world, int metadata)
         {
             return new TileEntityBlockTesr();
         }
      
         @Override
         public boolean hasTileEntity(int metadata)
         {
             return true;
         }
      
         public boolean isOpaqueCube()
         {
             return false;
         }
      
         public boolean renderAsNormalBlock()
         {
             return false;
         }
      
         public int getRenderType()
         {
             return ClientProxy.renderTesr;
         }
      
         public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack)
         {
             if(stack.getItemDamage() == 0)
             {
                 TileEntity tile = world.getTileEntity(x, y, z);
                 if (tile instanceof TileEntityBlockTesr)
                 {
                     int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
                     ((TileEntityBlockTesr)tile).setDirection((byte)direction);
                 }
             }
         }
      }
      
      package com.vitesse.tileentity;
      
      import net.minecraft.entity.EntityLivingBase;
      import net.minecraft.item.ItemStack;
      import net.minecraft.nbt.NBTTagCompound;
      import net.minecraft.network.NetworkManager;
      import net.minecraft.network.Packet;
      import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
      import net.minecraft.tileentity.TileEntity;
      import net.minecraft.util.MathHelper;
      import net.minecraft.world.World;
      
      public class TileEntityBlockTesr extends TileEntity
      {
         private byte direction;
      
         @Override
         public void readFromNBT(NBTTagCompound compound)
         {
             super.readFromNBT(compound);
             this.direction = compound.getByte("Direction");
         }
      
         public void writeToNBT(NBTTagCompound compound)
         {
             super.writeToNBT(compound);
             compound.setByte("Direction", this.direction);
         }
      
         public byte getDirection()
         {
             return direction;
         }
      
         public void setDirection(byte direction)
         {
             this.direction = direction;
             this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
         }
      
         public Packet getDescriptionPacket()
         {
             NBTTagCompound coumpound = new NBTTagCompound();
             this.writeToNBT(coumpound);
             return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, coumpound);
         }
      
         public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt)
         {
             this.readFromNBT(pkt.func_148857_g());
             this.worldObj.markBlockRangeForRenderUpdate(this.xCoord, this.yCoord, this.zCoord, this.xCoord, this.yCoord, this.zCoord);
         }
      
         public TileEntity createTileEntity(World world, int metadata)
         {
             return new TileEntityBlockTesr();
         }
      }
      
      package renderer;
      
      import org.lwjgl.opengl.GL11;
      
      import com.vitesse.init.BlockMod;
      import com.vitesse.proxy.ClientProxy;
      
      import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
      import net.minecraft.block.Block;
      import net.minecraft.client.Minecraft;
      import net.minecraft.client.renderer.RenderBlocks;
      import net.minecraft.world.IBlockAccess;
      
      public class TesrRendererInventory implements ISimpleBlockRenderingHandler
      {
      
         @Override
         public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer)
         {
              if (block == BlockMod.blockTesr && metadata == 0)
              {
                  GL11.glPushMatrix();
                  GL11.glRotatef(180F, 0F, 0F, 1F);
                  GL11.glTranslatef(0F, -1F, 0F);
                  Minecraft.getMinecraft().getTextureManager().bindTexture(TileEntityBlockTesrSpecialRenderer.texture);
                  TileEntityBlockTesrSpecialRenderer.model.renderAll();
                  GL11.glPopMatrix();
              }
         }
      
         @Override
         public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer)
         {
             return false;
         }
      
         @Override
         public boolean shouldRender3DInInventory(int modelId)
         {
             return true;
         }
      
         @Override
         public int getRenderId()
         {
             return ClientProxy.renderTesr;
         }
      }
      
      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

        Salut,
        À première vu je ne vois pas de soucis, vérifies que la fonction onBlockPlacedBy est bien appelé quand tu poses le bloc.

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

          Salut, merci de la réponse ^^^
          A priori elle n’a pas l’air de se faire appeler, même en changeant sa position dans le code ça ne donne rien, je ne comprends toujours pas d’où provient le problème .

          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

            Vérifies le nom et les arguments de la fonction dans la classe bloc.
            Tu peux aussi mettre un @Override dessus pour être sûr que la fonction est la bonne.

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

              J’ai tout vérifié, rien de suspect 😕

              C’est un modèle Tesr donc je dois bien le faire avec les TileEntity comme je l’ai fais ?

              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

                Oui.
                Ajouter le @Override au dessus de la fonction ne fait pas d’erreur ?

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

                  Non, quand j’ajoute le override aucune erreur

                  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

                    Essaies de retirer la condition if(stack.getItemDamage() == 0)

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

                      Merci de tes aides, mais ça ne donne toujours rien 😕

                      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 essayé de mettre System.out.println(“quelque chose”); dans la fonction pour voir si cela apparait dans la console quand tu poses le bloc ?

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

                          Ah oui, en effet, rien ne se passe, la fonction n’est pas appelée, je ne sais pas pourquoi 😕

                          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 mis un @Override au dessus ?

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

                              Oui 😕

                              
                              public class BlockTesr extends Block
                              {
                              
                              public BlockTesr(Material p_i45394_1_)
                              {
                              super(p_i45394_1_);
                              }
                              
                              @Override
                              public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack)
                              {
                              System.out.println("1");
                              TileEntity tile = world.getTileEntity(x, y, z);
                              if (tile instanceof TileEntityBlockTesr)
                              {
                              int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
                              ((TileEntityBlockTesr)tile).setDirection((byte)direction);
                              System.out.println("2");
                              }
                              }
                              
                              @Override
                              public TileEntity createTileEntity(World world, int metadata)
                              {
                              return new TileEntityBlockTesr();
                              }
                              
                              @Override
                              public boolean hasTileEntity(int metadata)
                              {
                              return true;
                              }
                              
                              public boolean isOpaqueCube()
                              {
                              return false;
                              }
                              
                              public boolean renderAsNormalBlock()
                              {
                              return false;
                              }
                              
                              public int getRenderType()
                              {
                              return ClientProxy.renderTesr;
                              }
                              }
                              
                              
                              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 surement mis la mauvaise classe sur la déclaration de ton bloc.

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

                                  Malheureusement, j’ai bien mis les bonnes classes sur la déclaration du bloc, donc le problème n’a pas l’air de venir de 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

                                    Envoies-moi par mp un zip de ton dossier src, je regardera ce soir.

                                    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

                                      Bon ce n’est pas étonnant que ça ne fonctionne pas …
                                      Tu as deux classes BlockTesr, une qui contient la fonction onBlockPlacedBy (celle dans le package com.vitesse.init) et une autre qui ne l’a pas (celle dans com.vitesse.blocks).
                                      Et ton bloc utilise celle la classe com.vitesse.blocks.BlockTesr donc celle qui n’a pas la fonction.

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

                                        Ah oui en effet, merci énormément de ton aide ^^

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

                                          N’oublie pas de sélectionner la réponse qui t’as le + aidée.

                                          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