1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.

[Tutoriel]Comment crée son propre launcher personnalisé.

Discussion dans 'Vos Tutoriels' créé par Hexday18, 27 Juillet 2015.

MineStrator, Votre hébergeur de serveur minecraft
  1. Hexday18

    Hexday18 Commandant

    669
    76
    28
    Bonjour à tous et à toutes,
    Aujourd'hui on se retrouve pour un gros tutoriel qui va vous apprendre à crée votre propre launcher.
    Ce tutoriel vous permettra de crée votre launcher possible sous forge et avec toutes les versions.
    On va partir de 0.
    1.Pré-requis :
    - Eclipse Standart
    - Un cerveau
    - Des connaissances en java

    1.Mise en place
    Alors je vous préviens je n'utilise pas mes sources, j'utilise les sources de TheShark37, d'ailleurs merci à lui :).

    Téléchargement :

    - Merci de vous Connecter/S'inscrire pour voir les liens. pour l'authentification, par TheShark37.
    -Merci de vous Connecter/S'inscrire pour voir les liens. pour la mise à jour, par TheShark37
    - Merci de vous Connecter/S'inscrire pour voir les liens. pour le lancement du jeu, par TheShark37
    - Merci de vous Connecter/S'inscrire pour voir les liens. pour OneAuth, par Google

    Maintenant vous devez ouvrir votre eclipse et crée un nouveau projet que vous appelez comme vous voulez.
    Puis faites un clique droit sur le projet --> Build Path --> Add external archive et ajoutez les jar que vous avez téléchargé précédemment.

    [​IMG]
    Pour la préparation c'est bon.
    2.OpenLauncherLib
    On va s'occupé de l'objet GameVersion, l'objet GameVersion contient les informations à propos de la version de Minecraft. Le nom précis de la version, et le type de la version. Vous devez choisir votre version soit 1.7.2 ou 1.7.10 ou 1.8 voir plus.
    Il faudra maintenant crée une classe appelé Launcher.

    [​IMG]

    Dans cette classe on mettra toutes les informations sur l'interface. Maintenant créons l'objet GameVersion.
    Code:
    public class Launcher {
    public static final GameVersion LC_VERSION = new GameVersion("nomdelaversion", "typedelaversion");
    }
    On observe que je l'ai appelé LC_VERSION, vous pouvez l'appeler comme vous voulez mais je vous conseille de garder ce nom là. Ensuite le LC devant vos pouvez le modifier par exemple si vous serveur a comme nom MineCube et bien vous mettez MC_VERSION pour la variable (obligé en majuscule).
    Ensuite il faudra modifier "nomdelaversion" et "typedelaversion".
    Dans nomdelaversion vous mettez par exemple si votre serveur est 1.7.10 et bien vous mettez :
    Code:
    public static final GameVersion LC_VERSION = new GameVersion("1.7.10", GameType.V1_7_10);
    
    Pour la 1.8 ou plus :
    Code:
    public static final GameVersion LC_VERSION = new GameVersion("1.8", GameType.V1_8_HIGHER);
    
    Maintenant nous allons nous intéresser à l'objet GameInfos. Donc comme son nom le dit, il contiendra les informations de minecraft. Crée votre objet GameInfos comme ceci en dessour de LC_VERSION :

    Code:
    publicstaticfinalGameInfos LC_INFOS =newGameInfos("NomDuServeur",ObjetGameVersion, tweaksActiveOuNon, tweaks);
    
    Remplacez "NomDuServeur" par le nom de votre serveur (exemple MineCube) puis remplacez votre ObjetGameVersion par votre GameVersion qu'on a mis plus haut (LC_VERSION) puis remplacez "tweaksActiveOuNon" par si vous utilisez des tweaks où non (mettez true si vous voulez utilisez forge, ou que vous etes en Vanilla avec Optifine avec ou pas Shader).

    Ensuite remplacez "tweaks" par si vous avez mis false dans teaksActineOuNon mettez :

    Code:
    new GameTweak[] {}
    Et si vous avez mis true alors mettez :

    Code:
    new GameTweak[] {GameTweak.FORGE}
    Mais si vous êtes en Vanilla, si vous voulez Shader mettez :

    Code:
    new GameTweak[] {GameTweak.SHADER}
    Et si vous voulez shader et optifine mettez ceci :

    Code:
    new GameTweak[] {GameTweak.OPTIFINE, GameTweak.SHADER}.
    Pour vous donnez un exemple si mon serveur MineCube est sous forge cela va donner ceci :

    Code:
    public static final GameInfos LC_INFOS = new GameInfos("MineCube", LC_VERSION, true, new GameTweak[] {GameTweak.FORGE});
    Maintenant nous allons nous occuper du dossier du jeu.
    Votre dossier de jeu est généré automatiquement par l'objet GameInfos, il est dans AppData pour Windows et dans Application support sur Mac, vous savez ça va crée un dossier comme le .minecraft que vous avez.
    Pour plus de facilité, nous allons stocké le dossier de jeu dans une variable pour pouvoir y accéder plus rapidement plus tard.
    (Par exemple en dessous de LC_INFOS). Ce qui donne :
    Code:
    public static final File LC_DIR = LC_INFOS.getGameDir();

    3. La fenêtre
    Nous allons faire la fenêtre du launcher qui va être assez rapide.
    Créez une classe appelée LauncherFrame, , elle contiendra le code de la fenêtre.

    Code:
    public class LauncherFrame extends JFrame implements ActionListener {
    
        private static LauncherFrame instance;
    
        private JLabel titre;
        private JTextField pseudo;
        private JPasswordField mdp;
        private JButton jouer;
        private JProgressBar pb;
    
        private String username = null;
        private String accessToken = null;
        private String id = null;
    
        public LauncherFrame() {
            this.setTitle("Mon Launcher Style");
            this.setSize(850, 500);
            this.setUndecorated(true);
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
            this.setLocationRelativeTo(null);
            this.setLayout(null);
            this.getContentPane().setBackground(new Color(64, 64, 64));
    
            titre = new JLabel("Mon Launcher Style", SwingConstants.CENTER);
            titre.setForeground(Color.WHITE);
            titre.setFont(titre.getFont().deriveFont(60f));
            titre.setBounds(0, 20, 850, 100);
            this.add(titre);
    
            pseudo = new JTextField("Pseudo");
            pseudo.setBounds(350, 275, 150, 20);
            this.add(pseudo);
    
            mdp = new JPasswordField("Mot de Passe");
            mdp.setBounds(350, 305, 150, 20);
            this.add(mdp);
          
            jouer = new JButton("Jouer !");
            // Enregistre la fenetre entant qu'ActionListener
            jouer.addActionListener(this);
            jouer.setBounds(350, 335, 150, 20);
            this.add(jouer);
          
            pb = new JProgressBar();
            pb.setStringPainted(true);
            pb.setBounds(0, 480, 850, 20);
            this.add(pb);
          
            this.setVisible(true);
        }
    
       @Override
       public void actionPerformed(ActionEvent e) {
           Thread t = new Thread() {
               @Override
               public void run() {
                   // Ici on appellera les methodes de la class Launcher
               }
           };
           t.start();
        }
    
        public static void main(String[] args) {
            // Astuce pour avoir le style visuel du systeme hôte
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (Exception e) {
                e.printStackTrace();
            }
            instance = new LauncherFrame();
        }
    
        // Retourne l'instance de LauncherFrame
        public static LauncherFrame getInstance() {
            return instance;
        }
    
        // Retourne l'instance de notre progress bar
        public JProgressBar getProgressBar() {
            return pb;
        }
    }
    Vous pouvez la modifier à votre sauce. N'oubliez pas de faire Ctrl+Shift+O pour les imports.
    Tout ce petit code donne :

    [​IMG]
    4.Authentification
    Nous allons nous occuper de l'authentification.
    Il faudra tout d'abord remplir notre méthode run() du thread de actionPerformed() dans la classe LauncherFrame.
    Ce qui donne :
    Code:
    // On empeche l'utilisateur de modifier son pseudo/mot de passe ou de reappuyer sur jouer
    pseudo.setEnabled(false);
    mdp.setEnabled(false);
    jouer.setEnabled(false);
    
    // On s'authentifie dans un try catch
    try {
        Launcher.auth(pseudo.getText(), new String(mdp.getPassword()));
    } catch (AuthenticationException e) {
        // Si ça n'a pas marché on réactive tout
        pseudo.setEnabled(true);
        mdp.setEnabled(true);
        jouer.setEnabled(true);
        // On affiche l'erreur
        e.printStackTrace();
        // Et on affiche un message d'erreur
        JOptionPane.showMessageDialog(LauncherFrame.this, "Impossible de se connecter : " + e.getErrorModel().getErrorMessage(), "Erreur", JOptionPane.ERROR_MESSAGE);
    }
    Il faudra aussi le faire dans la class Launcher :

    Code:
    private static AuthInfos authInfos;
    
    public static void auth(String username, String password) throws AuthenticationException {
           
    }
    L'objet AuthInfos nous permettra de stocker les informations reçues.
    Et maintenant dans auth(), on authentifie le joueur.
    Ce qui donne :

    Code:
    Authenticator authenticator = new Authenticator(Authenticator.MOJANG_AUTH_URL, AuthPoints.NORMAL_AUTH_POINTS);
    AuthResponse rep = authenticator.authenticate(
                AuthAgent.MINECRAFT, username, password, "");
    authInfos = new AuthInfos(rep.getSelectedProfile().getName(), rep.getAccessToken(), rep.getSelectedProfile().getId());

    Partie 2 : Merci de vous Connecter/S'inscrire pour voir les liens.
     
    • J'aime x 8
    • Utile x 3
    • J'accepte x 1
    • Je n'accepte pas x 1
    • Instructif x 1
    • Amicale x 1
    Dernière édition: 28 Juillet 2015
  2. Aslaak

    Aslaak Commandant

    681
    109
    43
    Ouais :D
     
    • J'accepte J'accepte x 2
    • J'aime J'aime x 1
  3. Hexday18

    Hexday18 Commandant

    669
    76
    28
    Ok merci ça encourage :).
    Up !
     
    • Optimiste Optimiste x 2
    • J'aime J'aime x 1
    • Je n'aime pas Je n'aime pas x 1
    • Gagnant ! Gagnant ! x 1
  4. F91

    F91 Soldat

    33
    6
    8
    Salut, ce launcher gère les versions crack ou uniquement les comptes officiels?
     
    • Utile Utile x 1
  5. Hexday18

    Hexday18 Commandant

    669
    76
    28
    Sur ce tutoriel c'est les officiels mais je ferais un tutoriel peut être pour les versions crack. De toute façons faut déjà que je termine celui ci.
     
    • J'aime J'aime x 1
  6. RjDreams_YCB

    RjDreams_YCB Soldat

    13
    3
    3
    Waw ! Je te remercie de faire un tutoriel sur comment créer des launcher, généralement, les personnes que j'avait contacté pour obtenir de l'aide sur la façon de le créer me le faisait payer plus de 10€.
    Je vais le suivre avec une grande impatience ;)
    Merci et a bientôt !
     
    • J'aime J'aime x 1
  7. Hexday18

    Hexday18 Commandant

    669
    76
    28
    Ok j'essaye de le terminer aujourd'hui et il y aura des autres tutoriels qui suivront celui ci je pense pour encore plus le personnaliser. Et si tu veux savoir au pire quand je le continue bah tu n'as qu'a me suivre sur mon profil.
     
    • J'accepte J'accepte x 2
  8. IniActiviti

    IniActiviti Co-Fondateur CMW Staff Co-Fondateur Community Manager

    1 273
    375
    83
    Salut ! Lequel d'Eclipse doit-on télécharger ? Car quand j'arrive ici : Merci de vous Connecter/S'inscrire pour voir les liens. :s je suis un peut perdu
     
    Dernière édition: 28 Juillet 2015
  9. Hexday18

    Hexday18 Commandant

    669
    76
    28
    • Utile Utile x 1
  10. IniActiviti

    IniActiviti Co-Fondateur CMW Staff Co-Fondateur Community Manager

    1 273
    375
    83
  11. Hexday18

    Hexday18 Commandant

    669
    76
    28
    Bon c'est partit je termine le tutoriel !
     
    • Gagnant ! Gagnant ! x 1
    • Amicale Amicale x 1
  12. spoup94

    spoup94 1er classe

    77
    1
    8
    En tout cas merci pour le tuto :)

    Et j'ai un problème :
    [​IMG]
    Merci de vous Connecter/S'inscrire pour voir les liens.
     
    Dernière édition: 28 Juillet 2015
  13. IniActiviti

    IniActiviti Co-Fondateur CMW Staff Co-Fondateur Community Manager

    1 273
    375
    83
    Exactement le même problème
     
    • J'accepte J'accepte x 1
  14. Hexday18

    Hexday18 Commandant

    669
    76
    28
    Normal si le tutoriel est pas finit c'est normal :)
     
    • Je n'aime pas Je n'aime pas x 1
  15. spoup94

    spoup94 1er classe

    77
    1
    8
    non mais quand je telecharge eclipse et que je lance 'app ça fais cela.
     
  16. Hexday18

    Hexday18 Commandant

    669
    76
    28
  17. spoup94

    spoup94 1er classe

    77
    1
    8
    ??????
     
  18. Hexday18

    Hexday18 Commandant

    669
    76
    28
    Ah sa fait le message mais ce message s'affiche lorsque vous lancez eclipse ?
     
  19. spoup94

    spoup94 1er classe

    77
    1
    8
  20. Hexday18

    Hexday18 Commandant

    669
    76
    28
    C'est bizzard parce que chez moi ça bug pas.
     

Partager cette page

Chargement...