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

    Résolu Armure spéciale ne suit pas le joueur

    1.8.x
    1.8
    2
    3
    1255
    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.
    • Cuty-Stark
      Cuty-Stark dernière édition par

      Bonjour/Bonsoir,

      Ce que je souhaite faire:
      Je voudrais créer des armures spéciales pour un mod sous Forge 1.8. J’ai donc modélisé une armure avec Techne. J’ai créé une texturemap, j’ai exporté le Model, et j’ai réussit à intégrer cette armure en jeu. Voici une illustration:

      Mon problème:
      Donc, ça fonctionne pas trop mal. L’armure suit correctement le joueur lorsqu’il marche, saute, s’accroupit. Le problème, c’est que l’armure ne suit pas le mouvement du joueur lorsque celui-ci casse un bloc, en pose un, frappe, où utilise un objet. Et il faudrait qu’elle le fasse… Regardez:

      J’ai vérifié avec une armure normale, une Iron Chestplate, et elle bouge correctement lorsque le joueur frappe. J’ai donc cherché dans les fichiers de cette armure un “exemple” de code à mettre dans le mien pour corriger cela. Mais, débutant en modding que je suis, je n’ai pas trouvé…

      Je vous met là les codes de mon mod. Le ModItems déclare simplement les items. Le ModelMineur, c’est le modèle créé avec Techne. Et enfin,** ArmorClothesMod** et ClientProxy sont les fichiers qui permettent d’afficher le modèle correctement.

      ModItems.java:

      public class ModItems {
      
      public static Item mineur_helm;
      public static Item mineur_chest;
      public static Item mineur_legs;
      public static Item mineur_boots;
      
      public static void init()
          {
      
      //Tenue - Mineur 1
      mineur_helm = new ArmorClothesMod(ClothesMod.Indestructible, 1, 0).setUnlocalizedName("mineur_helm");
      mineur_chest = new ArmorClothesMod(ClothesMod.Indestructible, 1, 1).setUnlocalizedName("mineur_chest");
      mineur_legs = new ArmorClothesMod(ClothesMod.Indestructible, 1, 2).setUnlocalizedName("mineur_legs");
      mineur_boots = new ArmorClothesMod(ClothesMod.Indestructible, 1, 3).setUnlocalizedName("mineur_boots");
          }
      
      public static void register()
      {
      RegisterHelper.registerItem(mineur_helm);
      RegisterHelper.registerItem(mineur_chest);
      RegisterHelper.registerItem(mineur_legs);
      RegisterHelper.registerItem(mineur_boots);
      }
      
      public static void registerRenders()
      {
      RegisterHelper.registerRender(mineur_helm);
      RegisterHelper.registerRender(mineur_chest);
      RegisterHelper.registerRender(mineur_legs);
      RegisterHelper.registerRender(mineur_boots);
      }
      
      }
      

      ModelMineur.java:

      public class ModelMineur extends ModelBiped
      {
        //fields
      ModelRenderer rightarm;
          ModelRenderer leftarm;
          ModelRenderer rightleg;
          ModelRenderer leftleg;
          ModelRenderer body;
      
          ModelRenderer casquebas;
          ModelRenderer casquehaut1;
          ModelRenderer casquehaut2;
          ModelRenderer casquelampe1;
          ModelRenderer casquelampe2;
          ModelRenderer vestebase;
          ModelRenderer vestebrasdroit;
          ModelRenderer vestebrasgauche;
          ModelRenderer braceletdroit;
          ModelRenderer braceletgauche;
      
        public ModelMineur(float expand)
        {
       super(expand, 0, 96, 96);
      
       body = new ModelRenderer(this, 16, 64);
            body.addBox(-4F, 0F, -2F, 8, 12, 4);
            body.setRotationPoint(0F, 0F, 0F);
            body.setTextureSize(96, 96);
            body.mirror = true;
            setRotation(body, 0F, 0F, 0F);
      
       rightarm = new ModelRenderer(this, 0, 64);
            rightarm.addBox(-3F, -2F, -2F, 4, 12, 4);
            rightarm.setRotationPoint(0F, 0F, 0F);
            rightarm.setTextureSize(96, 96);
            rightarm.mirror = true;
            setRotation(rightarm, 0F, 0F, 0F);
      
            leftarm = new ModelRenderer(this, 0, 64);
            leftarm.addBox(-1F, -2F, -2F, 4, 12, 4);
            leftarm.setRotationPoint(0F, 0F, 0F);
            leftarm.setTextureSize(96, 96);
            leftarm.mirror = true;
            setRotation(leftarm, 0F, 0F, 0F);
      
            rightleg = new ModelRenderer(this, 0, 16);
            rightleg.addBox(-2F, 0F, -2F, 4, 12, 4);
            rightleg.setRotationPoint(-2F, 12F, 0F);
            rightleg.setTextureSize(96, 96);
            rightleg.mirror = true;
            setRotation(rightleg, 0F, 0F, 0F);
      
            leftleg = new ModelRenderer(this, 0, 16);
            leftleg.addBox(-2F, 0F, -2F, 4, 12, 4);
            leftleg.setRotationPoint(2F, 12F, 0F);
            leftleg.setTextureSize(96, 96);
            leftleg.mirror = true;
            setRotation(leftleg, 0F, 0F, 0F);
      
            casquebas = new ModelRenderer(this, 0, 52);
            casquebas.addBox(0F, 0F, 0F, 10, 1, 11);
            casquebas.setRotationPoint(-5F, -8.1F, -6F);
            casquebas.setTextureSize(96, 96);
            casquebas.mirror = true;
            setRotation(casquebas, -0.0087266F, 0F, 0F);
      
            casquehaut1 = new ModelRenderer(this, 0, 54);
            casquehaut1.addBox(0F, 0F, 0F, 8, 2, 8);
            casquehaut1.setRotationPoint(1F, -2F, 2F);
            casquehaut1.setTextureSize(96, 96);
            casquehaut1.mirror = true;
            setRotation(casquehaut1, -0.0174533F, 0F, 0F);
      
            casquehaut2 = new ModelRenderer(this, 0, 57);
            casquehaut2.addBox(0F, 0F, 0F, 6, 1, 6);
            casquehaut2.setRotationPoint(1F, -1F, 1F);
            casquehaut2.setTextureSize(96, 96);
            casquehaut2.mirror = true;
            setRotation(casquehaut2, -0.0174533F, 0F, 0F);
      
            casquelampe1 = new ModelRenderer(this, 32, 58);
            casquelampe1.addBox(0F, 0F, 0F, 2, 2, 2);
            casquelampe1.setRotationPoint(2F, 1F, -3F);
            casquelampe1.setTextureSize(96, 96);
            casquelampe1.mirror = true;
            setRotation(casquelampe1, -0.0174533F, 0F, 0F);
      
            casquelampe2 = new ModelRenderer(this, 32, 54);
            casquelampe2.addBox(0F, 0F, 0F, 1, 1, 3);
            casquelampe2.setRotationPoint(0.5F, -0.5F, 0.5F);
            casquelampe2.setTextureSize(96, 96);
            casquelampe2.mirror = true;
            setRotation(casquelampe2, 0F, 0F, 0F);
      
            vestebase = new ModelRenderer(this, 0, 39);
            vestebase.addBox(0F, 0F, 0F, 9, 8, 5);
            vestebase.setRotationPoint(-4.5F, -0.5F, -2.5F);
            vestebase.setTextureSize(96, 96);
            vestebase.mirror = true;
            setRotation(vestebase, 0F, 0F, 0F);
      
            vestebrasdroit = new ModelRenderer(this, 28, 41);
            vestebrasdroit.addBox(0F, 0F, 0F, 4, 6, 5);
            vestebrasdroit.setRotationPoint(-3.5F, -2.5F, -2.5F);
            vestebrasdroit.setTextureSize(96, 96);
            vestebrasdroit.mirror = true;
            setRotation(vestebrasdroit, 0F, 0F, 0F);
      
            vestebrasgauche = new ModelRenderer(this, 46, 41);
            vestebrasgauche.addBox(0F, 0F, 0F, 4, 6, 5);
            vestebrasgauche.setRotationPoint(-0.5F, -2.5F, -2.5F);
            vestebrasgauche.setTextureSize(96, 96);
            vestebrasgauche.mirror = true;
            setRotation(vestebrasgauche, 0F, 0F, 0F);
      
            braceletdroit = new ModelRenderer(this, 28, 35);
            braceletdroit.addBox(0F, 0F, 0F, 5, 1, 5);
            braceletdroit.setRotationPoint(0F, 10F, 0F);
            braceletdroit.setTextureSize(96, 96);
            braceletdroit.mirror = true;
            setRotation(braceletdroit, -0.0349066F, -0.0349066F, -0.0349066F);
      
            braceletgauche = new ModelRenderer(this, 44, 35);
            braceletgauche.addBox(0F, 0F, 0F, 5, 1, 5);
            braceletgauche.setRotationPoint(-1F, 10F, 0F);
            braceletgauche.setTextureSize(96, 96);
            braceletgauche.mirror = true;
            setRotation(braceletgauche, 0.0349066F, -0.0523599F, 0.0174533F);
      
            casquelampe1.addChild(casquelampe2);
            casquehaut2.addChild(casquelampe1);
            casquehaut1.addChild(casquehaut2);
            casquebas.addChild(casquehaut1);
            this.bipedHead.addChild(casquebas);
      
            body.addChild(vestebase);
            this.bipedBody.addChild(body);
      
            vestebrasgauche.addChild(braceletgauche);
            leftarm.addChild(vestebrasgauche);
            this.bipedLeftArm.addChild(leftarm);
      
            vestebrasdroit.addChild(braceletdroit);
            rightarm.addChild(vestebrasdroit);
            this.bipedRightArm.addChild(rightarm);
      
        }
      
        public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5)
        {
          super.render(entity, f, f1, f2, f3, f4, f5);
          setRotationAngles(f, f1, f2, f3, f4, f5, entity);
        }
      
        private void setRotation(ModelRenderer model, float x, float y, float z)
        {
          model.rotateAngleX = x;
          model.rotateAngleY = y;
          model.rotateAngleZ = z;
        }
      
      }
      

      ClientProxy.java

      public class ClientProxy extends CommonProxy {
      
      public static final Map <item, modelbiped="">armorModels = new HashMap<item, modelbiped="">();
      
      @Override
      public void registerRenders()
      {
      ModItems.registerRenders();
      
      ModelMineur mineur_armor = new ModelMineur(0.5F);
      armorModels.put(ModItems.mineur_helm, mineur_armor);
      armorModels.put(ModItems.mineur_chest, mineur_armor);
      armorModels.put(ModItems.mineur_legs, mineur_armor);
      armorModels.put(ModItems.mineur_boots, mineur_armor);
      }
      }
      

      ArmorClothesMod.java:

      public class ArmorClothesMod extends ItemArmor {
      
      public ArmorClothesMod(ArmorMaterial material, int renderIndex, int armorType) {
      super(material, renderIndex, armorType);
      
      this.setMaxStackSize(1);
      this.setCreativeTab(ClothesMod.tabClothes);
      }
      
      @Override
      public String getUnlocalizedName()
      {
      return String.format("item.%s", getUnwrappedUnlocalizedName(super.getUnlocalizedName()));
      }
      
      @Override
      public String getUnlocalizedName(ItemStack itemstack)
      {
      return String.format("item.%s", getUnwrappedUnlocalizedName(super.getUnlocalizedName()));
      }
      
      protected String getUnwrappedUnlocalizedName(String unlocalizedName)
      {
      return unlocalizedName.substring(unlocalizedName.indexOf('.') + 1);
      }
      
      //Je pense que c'est la partie ci-dessous qui peut régler le problème:
      @Override
      @SideOnly(Side.CLIENT)
      public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, int armorSlot)
      {
      ModelBiped armorModel = ClientProxy.armorModels.get(this);
      
      if(armorModel != null){
      armorModel.bipedHead.showModel = armorSlot == 0;
      armorModel.bipedHeadwear.showModel = armorSlot == 0;
      armorModel.bipedBody.showModel = armorSlot == 1 || armorSlot == 2;
      armorModel.bipedRightArm.showModel = armorSlot == 1;
      armorModel.bipedLeftArm.showModel = armorSlot == 1;
      armorModel.bipedRightLeg.showModel = armorSlot == 2 || armorSlot == 3;
      armorModel.bipedLeftLeg.showModel = armorSlot == 2 || armorSlot == 3;
      
      armorModel.isSneak = entityLiving.isSneaking();
          armorModel.isRiding = entityLiving.isRiding();
          armorModel.isChild = entityLiving.isChild();
      
          armorModel.heldItemRight = 0;
          armorModel.aimedBow = false;
      
          EntityPlayer player = (EntityPlayer)entityLiving;
          ItemStack held_item = player.getEquipmentInSlot(0);
      
          if (held_item != null){
          armorModel.heldItemRight = 1;
      
          if (player.getItemInUseCount() > 0){
      
          EnumAction enumaction = held_item.getItemUseAction();
      
          if (enumaction == EnumAction.BOW){
          armorModel.aimedBow = true;
          }else if (enumaction == EnumAction.BLOCK){
          armorModel.heldItemRight = 3;
          }
      
          }
          return armorModel;
          }
      }
      
      return armorModel;
      }
      
      @Override
      public String getArmorTexture(ItemStack stack, Entity entity, int slot, String layer)
      {
      String name = this.getUnwrappedUnlocalizedName(super.getUnlocalizedName());
      name = name.substring(0, name.indexOf('_'));
      
      return String.format("%s:textures/models/armor/%s_layer_%d.png", ClothesMod.MODID, name, slot == 2 ? 2 : 1);
      }
      }
      

      J’ai supprimé toutes les includes pour que ce soit plus clair.
      Je vous remercie d’avance,

      Au revoir.</item,></item,>

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

        J’ai supprimé toutes les includes pour que ce soit plus clair.

        Tu voulais dire importation ?

        Je viens de regarde vite fait comment fonctionne l’armure de Minecraft.
        Niveau modèle elle utilise le même modèle que le joueur, mais un peu plus gros.

        Regarde du-coup du côté de ModelBiped.
        Il y a une fonction setRotationAngles(float, float, float, float, float, float, Entity) c’est dans cette fonction que les rotations sont faite.

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

          Bonjour Robin,

          Je viens de regarder la fonction que tu m’as indiqué. Il me manquait “swingProgress”. Et j’ai regardé un peu plus loin, dans ModelBase. Aux dernières lignes de ce fichier, je me suis inspiré du contenu de la fonction “setModelAttributes” pour corriger mon problème.

          J’ai donc rajouté la ligne suivante à la fonction “getArmorModel” de mon [font=Arial, tahoma, sans-serifArmorClothesMod:]

          armorModel.swingProgress = entityLiving.swingProgress;
          

          Ce qui donne:

          @Override
          
          @SideOnly(Side.CLIENT)
          public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, int armorSlot)
          {
          ModelBiped armorModel = ClientProxy.armorModels.get(this);
          
          if(armorModel != null){
          armorModel.bipedHead.showModel = armorSlot == 0;
          armorModel.bipedHeadwear.showModel = armorSlot == 0;
          armorModel.bipedBody.showModel = armorSlot == 1 || armorSlot == 2;
          armorModel.bipedRightArm.showModel = armorSlot == 1;
          armorModel.bipedLeftArm.showModel = armorSlot == 1;
          armorModel.bipedRightLeg.showModel = armorSlot == 2 || armorSlot == 3;
          armorModel.bipedLeftLeg.showModel = armorSlot == 2 || armorSlot == 3;
          
          armorModel.isSneak = entityLiving.isSneaking();
              armorModel.isRiding = entityLiving.isRiding();
              armorModel.isChild = entityLiving.isChild();
          
              //Ajout –---------------------------------------------
              armorModel.swingProgress = entityLiving.swingProgress;
              //Ajout -----------------------------------------------
          
              armorModel.heldItemRight = 0;
              armorModel.aimedBow = false;
          
              EntityPlayer player = (EntityPlayer)entityLiving;
              ItemStack held_item = player.getEquipmentInSlot(0);
          
              if (held_item != null){
              armorModel.heldItemRight = 1;
          
              if (player.getItemInUseCount() > 0){
          
              EnumAction enumaction = held_item.getItemUseAction();
          
              if (enumaction == EnumAction.BOW){
              armorModel.aimedBow = true;
              }else if (enumaction == EnumAction.BLOCK){
              armorModel.heldItemRight = 3;
              }
          
              }
              return armorModel;
              }
          }
          
          return armorModel;
          }
          

          **Et magnifique, le problème est résolu ! **J’ai détaillé tout ce que j’ai fais au cas où quelqu’un d’autre en aurait besoin ^^. Et je te remercie beaucoup, Robin, pour tes indications. Et oui, je parlais des imports 🙂

          J’édite le topic comme ‘résolu’.
          Au revoir !

          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