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

    Résolu Noel mod

    Anciennes versions
    1.6.4
    5
    11
    2660
    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.
    • deloge
      deloge dernière édition par

      Bonjour,
      je suis en train de créer un mod dans le thème de noel et j’ai un problème sur un bloc que j’ai modélisé sur Techne.
      En effet la hitbox du block ne fait que un de haut au lieu de deux, et lorsque je m’approche du bloc et que je lève un peu la tête le bloc disparaît visuellement.

      Voici ma classe principale ModPrincipal:

      package noelmod.common;
      
      import net.minecraft.block.Block;
      import net.minecraft.item.Item;
      import noelmod.proxy.NoelCommonProxy;
      import cpw.mods.fml.common.Mod;
      import cpw.mods.fml.common.Mod.EventHandler;
      import cpw.mods.fml.common.Mod.Instance;
      import cpw.mods.fml.common.SidedProxy;
      import cpw.mods.fml.common.event.FMLInitializationEvent;
      import cpw.mods.fml.common.event.FMLPostInitializationEvent;
      import cpw.mods.fml.common.event.FMLPreInitializationEvent;
      import cpw.mods.fml.common.network.NetworkMod;
      import cpw.mods.fml.common.registry.GameRegistry;
      
      @Mod(modid = "ModPrincipal", name = "Noel", version = "1.0.0")
      @NetworkMod(clientSideRequired = true, serverSideRequired = false)
      
      public class ModPrincipal
      {
      @SidedProxy(clientSide = "noelmod.proxy.NoelClientProxy", serverSide = "noelmod.proxy.NoelCommonProxy")
      public static NoelCommonProxy proxy;
      
      @Instance("ModPrincipal")
      public static ModPrincipal instance;
      public static Block Caisse, Boule, BouleB, BouleV, BouleR, Etoile, CandyGiant;
      public static Item Gingerbread, Candy;
      
      @EventHandler
      public void PreInit(FMLPreInitializationEvent event)
      {
      // Configuration
      
      // Blocks
      Caisse = new Caisse(2000).setHardness(1.0F).setResistance(5.0F).setStepSound(Block.soundWoodFootstep).setUnlocalizedName("Caisse").setTextureName("modprincipal:Caisse");
      GameRegistry.registerBlock(Caisse, "Caisse");
      
      Boule = new Boule(2001).setHardness(1.0F).setResistance(5.0F).setStepSound(Block.soundGlassFootstep).setUnlocalizedName("Boule").setTextureName("modprincipal:Boule");
      GameRegistry.registerBlock(Boule, "BouleOrange");
      
      BouleB = new BouleB(2002).setHardness(1.0F).setResistance(5.0F).setStepSound(Block.soundGlassFootstep).setUnlocalizedName("BouleB").setTextureName("modprincipal:BouleB");
      GameRegistry.registerBlock(BouleB, "BouleBleue");
      
      BouleV = new BouleV(2003).setHardness(1.0F).setResistance(5.0F).setStepSound(Block.soundGlassFootstep).setUnlocalizedName("BouleV").setTextureName("modprincipal:BouleV");
      GameRegistry.registerBlock(BouleV, "BouleVerte");
      
      BouleR = new BouleR(2004).setHardness(1.0F).setResistance(5.0F).setStepSound(Block.soundGlassFootstep).setUnlocalizedName("BouleR").setTextureName("modprincipal:BouleR");
      GameRegistry.registerBlock(BouleR, "BouleRouge");
      
      Etoile = new Etoile(2010).setHardness(1.0F).setResistance(5.0F).setStepSound(Block.soundGlassFootstep).setUnlocalizedName("Etoile").setTextureName("modprincipal:Etoile");
      GameRegistry.registerBlock(Etoile, "Etoile");
      
      CandyGiant = new CandyGiant(2011).setHardness(1.0F).setResistance(5.0F).setStepSound(Block.soundSnowFootstep).setUnlocalizedName("CandyGiant").setTextureName("modprincipal:CandyGiant");
      GameRegistry.registerBlock(CandyGiant, "Giant Candy");
      
      // Items
      Gingerbread = new Gingerbread(13744, 2, 1.5F, false).setUnlocalizedName("Gingerbread").setTextureName("modprincipal:Gingerbread");
      GameRegistry.registerItem(Gingerbread, "Gingerbread", "ModPrincipal");
      
      Candy = new Candy(13745, 3, 1.5F, false).setUnlocalizedName("Candy").setTextureName("modprincipal:Candy");
      GameRegistry.registerItem(Candy, "Candy", "ModPrincipal");
      // Achievements
      }
      
      @EventHandler
      public void Init(FMLInitializationEvent event)
      {
      // Registry
      
      // Mobs
      
      // Render
      proxy.registerRender();
      // NetWork
      
      // Recipe
      }
      
      @EventHandler
      public void PostInit(FMLPostInitializationEvent event)
      {
      // Intégration avec les autres mods
      }
      }
      

      Et voici celle du block CandyGiant qui pose problème :

      package noelmod.common;
      
      import net.minecraft.block.Block;
      import net.minecraft.block.material.Material;
      import net.minecraft.client.renderer.texture.IconRegister;
      import net.minecraft.creativetab.CreativeTabs;
      import net.minecraft.entity.Entity;
      import net.minecraft.entity.item.EntityItem;
      import net.minecraft.entity.item.EntityXPOrb;
      import net.minecraft.tileentity.TileEntity;
      import net.minecraft.world.World;
      
      public class CandyGiant extends Block
      {
      public CandyGiant(int id)
      {
      super(id, Material.cake);
      this.setCreativeTab(CreativeTabs.tabDecorations);
      }
      
      public void setBlockBoundsForItemRender()
      {
      this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
      }
      
      public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity)
      {
      int prob = world.rand.nextInt(100);
      if(entity instanceof EntityItem)
      {
      if(!world.isRemote)
      {
      entity.setDead();
      if(prob < 15)
      {
      world.spawnEntityInWorld(new EntityXPOrb(world, (double)x + 0.5D, (double)y + 1.5D, (double)z + 0.5D, 1));
      }
      }
      }
      }
      
      @Override
      public TileEntity createTileEntity(World world, int metadata)
      {
      return new TileEntityCandyGiant();
      }
      
      public boolean hasTileEntity(int metadata)
      {
      return true;
      }
      
      public boolean isOpaqueCube()
      {
      return false;
      }
      
      public boolean renderAsNormalBlock()
      {
      return false;
      }
      
      public int getRenderType()
      {
      return -1;
      }
      }
      

      Ainsi que son TileEntityCandyGiantRender :

      package noelmod.common;
      
      import org.lwjgl.opengl.GL11;
      
      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;
      
      public class TileEntityCandyGiantRender extends TileEntitySpecialRenderer
      {
      private final ModelCandyGiantTechne model;
      private final ResourceLocation texture = new ResourceLocation("modprincipal", "textures/blocks/CandyGiant.png");
      
      public TileEntityCandyGiantRender()
      {
      this.model = new ModelCandyGiantTechne();
      }
      
      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.renderTileEntityAtTechneCandyGiant((TileEntityCandyGiant)tileentity, x, y, z, scale);
      }
      
      public void renderTileEntityAtTechneCandyGiant(TileEntityCandyGiant 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, 0.0F, 0.0F, 1.0F);
      this.model.render((Entity)null, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);
      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);
      }
      }
      

      Voilà si quelqu’un peux m’expliquer comment augmenter la hitbox de 1 bloc de haut ainsi que lorsque je pose le bloc il soit orienté en fonction de ma position (Nord, Sud, Est, Ouest) ça serrait vraiment sympa.

      Merci d’avance 🙂

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

        Déjà, mauvaise section, ensuite, pour le code JAVA, utilise la balise [java][/java] sans les *, et ensuite pour ton problème d’orientation, regarde le tuto qui se trouve ici, pour ce qui est du problème de hitbox, je crois que la méthode à modifié est ```java
        public void setBlockBoundsForItemRender()
        {
        this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
        }

        
        Modifies une des valeurs et regardes ce que ça donne.

        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
        • gagoi
          gagoi dernière édition par

          Quand tu écris du code utilise la balise java. 🙂

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

            Le code de Superloup me semble correct.

            A essayer !

            ( Note: Ce que j’ai dis sur la ShoutBox était de mémoire, il est possible que j’y ai fait une erreur )

            "If you have a comprehensive explanation for everything then it decreases uncertainty and anxiety and reduces your cognitive load. And if you can use that simplifying algorithm to put yourself on the side of moral virtue then you’re constantly a good person with a minimum of effort."
            ― Jordan B. Peterson

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

              Merci pour vos réponses 🙂

              Alors pour la direction vu que c’est le TileEntityCandyGiantRender qui gère les textures je vois pas comment faire des block icon comme le dit robin.
              Et j’ai testé n’importe quel chifffre aucun changements : S
              J’ai aussi mis en java le code .

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

                Regardes ce tuto alors.

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

                  http://www.minecraftforgefrance.fr/showthread.php?tid=127
                  Dernière partie : Bonus / Pour aller plus loin, tu trouvera ce que tu cherches pour la direction. (le tuto a été refait depuis que tu l’as suivi)

                  Pour la hitbox :
                  http://www.minecraftforgefrance.fr/showthread.php?tid=136
                  c’est la fonction getSelectedBoundingBoxFromPool
                  et en bonus, la collision avec getCollisionBoundingBoxFromPool
                  En passant, monter la collision devrait corriger ton bug d’affichage.

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

                    Ok super merci, bon j’ai pas réussi à faire tourner le bloc pas grave.
                    Parcontre pour la hitbox j’ai pas compris : je mets ceci :

                    @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 + this.maxX, (double)y + this.maxY, (double)z + this.maxZ);
                    }
                    

                    Dans ma classe CandyGiant.java ?
                    Et si oui je sais pas comment augmenter les valeurs

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

                      Oui, tu remplace this.maxY par 2D par exemple.

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

                        Ok super ça me montre bien les 2.75D en y mais que lorsque je regarde le premier block du cube en bas (à 1D) et pas à 2D.
                        Et sa beug quand je cherche à marcher dessus.

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

                          Pour la collision, tu fais la même chose avec getCollisionBoundingBoxFromPool, ça devrait régler le problème de quand tu marches dessus.

                          Pour quand tu regarde le bloc du haut, ça va pas être possible, car la hitbox est cherché en fonction des coordonnées. Ce qui faudrait, c’est mettre un deuxième bloc au coordonnées y + 1.
                          Exemple ici :
                          https://github.com/FFMT/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotech_mod/city/blocks/BlockLamp.java
                          https://github.com/FFMT/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotech_mod/city/blocks/ItemBlockLamp.java

                          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