Navigation

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    SOLVED Problème avec la rotation des blocs

    1.7.x
    1.7.10
    3
    19
    926
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Boucki
      Boucki last edited by

      [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 Reply Last reply Reply Quote 0
      • robin4002
        robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

        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 Reply Last reply Reply Quote 0
        • Boucki
          Boucki last edited by

          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 Reply Last reply Reply Quote 0
          • robin4002
            robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

            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 Reply Last reply Reply Quote 0
            • Boucki
              Boucki last edited by

              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 Reply Last reply Reply Quote 0
              • robin4002
                robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

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

                1 Reply Last reply Reply Quote 0
                • Boucki
                  Boucki last edited by

                  Non, quand j’ajoute le override aucune erreur

                  1 Reply Last reply Reply Quote 0
                  • robin4002
                    robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

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

                    1 Reply Last reply Reply Quote 0
                    • Boucki
                      Boucki last edited by

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

                      1 Reply Last reply Reply Quote 0
                      • robin4002
                        robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                        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 Reply Last reply Reply Quote 0
                        • Boucki
                          Boucki last edited by

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

                          1 Reply Last reply Reply Quote 0
                          • robin4002
                            robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                            Tu as mis un @Override au dessus ?

                            1 Reply Last reply Reply Quote 0
                            • Boucki
                              Boucki last edited by

                              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 Reply Last reply Reply Quote 0
                              • robin4002
                                robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                                Tu as surement mis la mauvaise classe sur la déclaration de ton bloc.

                                1 Reply Last reply Reply Quote 0
                                • Boucki
                                  Boucki last edited by

                                  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 Reply Last reply Reply Quote 0
                                  • robin4002
                                    robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

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

                                    1 Reply Last reply Reply Quote 0
                                    • robin4002
                                      robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                                      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 Reply Last reply Reply Quote 0
                                      • Boucki
                                        Boucki last edited by

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

                                        1 Reply Last reply Reply Quote 0
                                        • Deleted
                                          Deleted last edited by

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

                                          1 Reply Last reply Reply Quote 0
                                          • 1 / 1
                                          • First post
                                            Last post
                                          Design by Woryk
                                          Contact / Mentions Légales / Faire un don

                                          MINECRAFT FORGE FRANCE © 2018

                                          Powered by NodeBB