1. Si vous venez d'arriver sur le forum et que vous êtes un peu perdus, cliquez ici !
    Rejeter la notice

Résolu Input ne menant a rien

Discussion dans 'Aide à la création de mod' créé par Nolan-XX, 5 Juil 2015.

  1. Nolan-XX

    Nolan-XX Modérateur
    Staff

    Inscrit:
    29 Déc 2012
    Messages:
    10 242
    Points:
    304
    Sexe:
    Homme
    Oui c'est encore moi
    Dans le mod sur lequel je travaille, les armes peuvent changer de forme en appuyant sur ALT. J'ai donc crée l'input dans le ClientProxy, mit la condition dans ma classe d'arme et dans mon renderer (l'arme a un model 3D). Sauf; rien ne se passe.
    W_Scythe :
    Code (Java):

    package rwby.Weapons;

    import net.minecraft.client.Minecraft;
    import net.minecraft.item.ItemSword;
    import net.minecraft.util.ChatComponentText;
    import rwby.ClientProxy;
    import cpw.mods.fml.common.gameevent.InputEvent.KeyInputEvent;

    public class W_Scythe extends ItemSword
       {
         public static boolean is_transformed;
         private int ammo_max;
         protected static int ammo_actual;
         private int cooldown;
         private int cooldown_actual;
         
         public W_Scythe(ToolMaterial material, int Rammo_max, int Cooldown_Time)
           {
             super(material);
             ammo_max = Rammo_max;
             cooldown = Cooldown_Time;
             
           }
           
          public void onUpdate()
            {
              cooldown++;
            }
           
          public void onEvent(KeyInputEvent event)
             {

               if(ClientProxy.Weap_Trans.isPressed())
               {
                 if(is_transformed == true)
                   is_transformed = false;
                 if(is_transformed == false)
                   is_transformed = true;  
                 Minecraft.getMinecraft().thePlayer.addChatComponentMessage(new ChatComponentText("lol, it works"));
               }
             }

       }
     
    et mon renderer :
    Code (Java):

    package rwby.Renders;

    import net.minecraft.client.Minecraft;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.ResourceLocation;
    import net.minecraftforge.client.IItemRenderer;

    import org.lwjgl.opengl.GL11;

    import rwby.Models.ModelCrescent_Rose;
    import rwby.Models.ModelCrescent_Rose_Gun_form;
    import rwby.Weapons.W_Crescent_Rose;

    public class W_Crescent_Rose_Renderer implements IItemRenderer

       {
               
         protected ModelCrescent_Rose model;
         protected ModelCrescent_Rose_Gun_form model_Alt;
         protected static final ResourceLocation texture = new ResourceLocation(
             "rwby:textures/Models/items/Crescent_Rose.png");

         public W_Crescent_Rose_Renderer()
           {
             model = new ModelCrescent_Rose();
           }

         @Override
         public boolean handleRenderType(ItemStack item, ItemRenderType type)
           {
             switch (type)
               {
               case EQUIPPED:
                 return true;
               case ENTITY:
                 return true;
               case EQUIPPED_FIRST_PERSON:
                 return true;
             
               default:
                 return false;
               }

           }

         @Override
         public boolean shouldUseRenderHelper(ItemRenderType type,
             ItemStack item, ItemRendererHelper helper)
           {
             return true;
           }

         @Override
         public void renderItem(ItemRenderType type, ItemStack item,
             Object... data)
           {

             switch (type)
               {
               case EQUIPPED:
                 {
                   
      if(W_Crescent_Rose.is_transformed = true)
          {  
                     GL11.glPushMatrix();
                    GL11.glTranslated(0.5D, 1.0D, 0.5D); // déplace le bloc sur les coordonnés et le centre
                    GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); // met droit le bloc (par défaut il est à l'envers)
                    GL11.glRotatef(-45F, 0.0F, 1.0F, 0.0F); // met droit le bloc (par défaut il est à l'envers)
                    GL11.glRotatef(60F, 1.0F, 0.0F, 0.0F); // met droit le bloc (par défaut il est à l'envers)
                    GL11.glScalef(0.075F, 0.075F, 0.075F);
                     Minecraft.getMinecraft().renderEngine.bindTexture(texture);
                     model.renderAll(1);              
                     GL11.glPopMatrix();
                     break;
          }
      else
          {
                     GL11.glPushMatrix();
                    GL11.glTranslated(0.5D, 1.0D, 0.5D); // déplace le bloc sur les coordonnés et le centre
                    GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); // met droit le bloc (par défaut il est à l'envers)
                    GL11.glRotatef(-45F, 0.0F, 1.0F, 0.0F); // met droit le bloc (par défaut il est à l'envers)
                    GL11.glRotatef(60F, 1.0F, 0.0F, 0.0F); // met droit le bloc (par défaut il est à l'envers)
                    GL11.glScalef(0.075F, 0.075F, 0.075F);
                     Minecraft.getMinecraft().renderEngine.bindTexture(texture);
                     model_Alt.renderAll(1);              
                     GL11.glPopMatrix();
                     break;  
          }
                   
                 }
               case EQUIPPED_FIRST_PERSON:
                   {
                     GL11.glPushMatrix();
                    GL11.glTranslated(0.5D, 1.0D, 0.5D); // déplace le bloc sur les coordonnés et le centre
                    GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); // met droit le bloc (par défaut il est à l'envers)
                    GL11.glScalef(0.05F, 0.05F, 0.05F);
                     Minecraft.getMinecraft().renderEngine.bindTexture(texture);
                     model.renderAll(1);
                     GL11.glPopMatrix();
                     break;
                     
                   }
                   
               case ENTITY:
                   {
                     GL11.glPushMatrix();
                    GL11.glTranslated(0.5D, 1.7D, 0.5D); // déplace le bloc sur les coordonnés et le centre
                    GL11.glRotatef(180F, 0.0F, 0.5F, 1.0F); // met droit le bloc (par défaut il est à l'envers)
                    GL11.glScalef(0.05F, 0.05F, 0.05F);
                     Minecraft.getMinecraft().renderEngine.bindTexture(texture);
                     model.renderAll(1);
                     GL11.glPopMatrix();
                     break;
                     
                   }
               
               default:
                 break;
               }

           }
       }
     
    J'ai essayé plusieurs trucs, comme de remplacer mon input par onItemRightClick, mais aucun changement.
     
  2. pifou92000

    pifou92000 Mineur de Diamants

    Inscrit:
    23 Juin 2011
    Messages:
    2 689
    Points:
    195
    Sexe:
    Homme
    Salut, je n'ai pas de solution à ton problème (jamais utilisé les événements d'appui de touche), mais je peux déjà te dire que ton item ne va pas fonctionner comme tu le veux.
    En effet, un seul item W_Scythe va être créé (quand tu feras w_scythe = new W_Scythe() dans la fonction d'initialisation du mod), du coup tes champs is_transformed, ammo_actual, cooldown_actual, etc, vont être commun à tous les items W_Scythe du monde, ils vont agir comme des variables statiques.
    Ce que tu veux, ce n'est pas une variable ammo_actual par Item, mais une variable ammo_actual par ItemStack, et de même pour les autres variables.
    Je sais pas si c'est clair ce que j'essaie d'expliquer, je suis fatigué. x)

    En gros, même si ton changement d'apparence d'arme fonctionnait, appuyer sur Alt aurait pour effet de changer l'icône de toutes les W_Scythe du jeu pour un client, donc mêmes celles tenues par d'autres joueurs. C'est peut-être ça que tu veux faire, mais j'en doute. J'en doute surtout pour les munitions à vrai dire, ça n'aurait aucun sens de partager les munitions avec toutes les autres armes similaires qui existent dans le monde. x)
     
    • J'approuve J'approuve x 1
  3. robin4002

    robin4002 Support Technique
    Staff

    Inscrit:
    17 Août 2012
    Messages:
    5 106
    Points:
    229
    Sexe:
    Homme
    Il faudrait plutôt passer par le tag nbt de l'item stack, qui lui est unique à chaque item stack.

    De puis :
    KeyInputEvent est un event FML, donc au dessus de :
    public void onEvent(KeyInputEvent event)
    Il faut l'annotation @SubscribeEvent
    Et il faut enregistrer la classe ou se trouve l'event avec FMLCommonHandler.instance().bus().register(new ClasseOùSeTrouveLEvent());
     
  4. Nolan-XX

    Nolan-XX Modérateur
    Staff

    Inscrit:
    29 Déc 2012
    Messages:
    10 242
    Points:
    304
    Sexe:
    Homme
    J'y avais pensé, mais l'objet se transformera dès que j'appuyerais sur ALT, qu'elle soit en main ou pas, non ?
     
  5. robin4002

    robin4002 Support Technique
    Staff

    Inscrit:
    17 Août 2012
    Messages:
    5 106
    Points:
    229
    Sexe:
    Homme
    Dans l'action de la touche tu vérifies l'item en main, et tu change le tag de cette item en question si c'est bien ton arme. Donc pourquoi ça le transformerai même si tu ne l'a pas en main ?
     
  6. Nolan-XX

    Nolan-XX Modérateur
    Staff

    Inscrit:
    29 Déc 2012
    Messages:
    10 242
    Points:
    304
    Sexe:
    Homme
    Même avec les NBT, ça ne change rien. Le problème doit venir de l'input en lui même, vu qu'il est censé mettre un message dans le chat
    Code (Java):

      @SubscribeEvent
          public void onEvent(KeyInputEvent event)
             {

               //if(event.itemStack.getItem() == Main.Crescent_Rose)
               //   {
                   if(ClientProxy.Weap_Trans.isPressed())
                     {
                       if(W_Scythe.is_transformed == 0)
                         W_Scythe.is_transformed = 1;
                       if(W_Scythe.is_transformed == 1)
                         W_Scythe.is_transformed = 0;  
                       Minecraft.getMinecraft().thePlayer.addChatComponentMessage(new ChatComponentText("lol, it works"));
                     }
                   
               //   }
               
             }
     
    (enregistrée comme il faut dans la classe principale, j'ai d'autres events qui marche parfaitement)
     

Partager cette page