Leaderboard


Popular Content

Showing content with the highest reputation on 07/28/15 in all areas

  1. Créer son propre launcher perso de zéro Cette uvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas dUtilisation Commerciale - Pas de Modification 4.0 International . Tout partage implique que vous citiez l'auteur original. \!/ CE TUTORIEL REQUIRE DES CONNAISSANCE EN JAVA POUR FAIRE VOTRE PROPRE INTERFACE SI VOUS NE L'AVEZ PAS APPRIS, DIRECTION OPEN CLASSROOM \!/ -[INTRODUCTION]- CE TUTORIEL N'EST PLUS A JOUR, IL FAUT SUIVRE LES TUTORIAUX VIDEOS ICI : http://forum.ironcraft.fr/topic/6738-videos-forgevanilla-1-créer-son-launcher-minecraft-de-zéro-entièrement-personalisé/ Salut tout le monde ! Voila un tutoriel qui va être surement fort utile a la communauté, un tutoriel pour créer a partir de rien, son launcher Minecraft personnalisé, pour toute version, et avec compatibilité forge. Ce tutoriel regroupe en fait trois librairies crées de zéro par moi-même ! - OpenAuth pour l'authentification, par Moi-Même - S-Update pour la mise a jour, par Moi-Même - OpenLauncherLib pour le lancement du jeu et un peu l'authentification, par Moi-Même -[SOMMAIRE]- 1] Préparation 2] Création d'une fenêtre de base simple 3] Authentification (OpenAuth) 4] Mise à jour (S-Update) A] Partie Java B] Partie Cloud (Les packs pré-faits sont ici !) C] La Progress Bar 5] Lancement du jeu (OpenLauncherLib) 6] Features en plus A] Créer un bootstrap simple et rapide B] Créer son pack avec n'importe quelle version forge/vanilla C] Sauvegarder le pseudo du joueur D] Faire en sorte de pouvoir bouger la fenêtre en cliquant dessus 7] Exporter son launcher A] En .JAR B] En .EXE C] En .APP 1] Préparation Dans cette partie nous allons préparer le projet avec les librairies et tous le tralala... Spoiler Commencez par télécharger les quatres librairies via ces liens : OpenAuth - Adf.ly (Me supporter) OpenAuth - Direct S-Update - Adf.ly (Me supporter) S-Update - Direct OpenLauncherLib - Adf.ly (Me supporter) OpenLauncherLib - Direct Gson (Par Google, utilisé par OpenAuth) Maintenant ouvrez eclipse et créez un nouveau projet, appelez le comme vous voulez Faites clique droit sur le projet --> Build Path. --> Add External Archives et ajoutez tous les jars obtenus Spoiler Ok maintenant on va préparer l'OpenLauncherLib avec trois constantes. 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 avez le choix entre 3 types de version, 1.7.2 ou moins, 1.7.10, et 1.8 ou plus. Créons une classe apelée Launcher. C'est là qu'on rangera tout ce qui n'a pas de rapport avec l'interface. Créons donc notre objet GameVersion : public class Launcher { public static final GameVersion LC_VERSION = new GameVersion("nomdelaversion", "typedelaversion"); } Je l'ai appelée LC_VERSION, LC est l'abréviation de LaunCher, je vous conseille de faire pareil avec le nom de votre serveur, par exemple si votre serveur s'appelle PimpFaction, appeler votre variable PF_VERSION. Après c'est comme vous voulez ^^. Je l'ai mis final donc il faut mettre le nom de la variable en majuscule car c'est la convention ! Pour le premier argument mettez votre version précise (c'est important pour les assets). Par exemple "1.7.10", ou "1.8.3", etc... Pour le deuxieme argument, si votre version est inférieure ou égale à la 1.7.2, mettez GameType.V1_7_2_LOWER. Si votre version est la 1.7.10 mettez GameType.V1_7_10. Si votre version est supérieure ou égale à la 1.8 mettez GameType.V1_8_HIGHER. Si votre version est 1.5.2 ou en dessous, mettez GameType.V1_5_2_LOWER. Par exemple pour un serveur en 1.7.10 mettez : public static final GameVersion LC_VERSION = new GameVersion("1.7.10", GameType.V1_7_10); Pour un serveur en 1.6.4 mettez : public static final GameVersion LC_VERSION = new GameVersion("1.6.4", GameType.V1_7_2_LOWER); Pour un serveur en 1.4.7 mettez public static final GameVersion LC_VERSION = new GameVerison("1.4.7", GameType.V1_5_2_LOWER); L'objet GameInfos L'objet GameInfos contient les informations de Minecraft. Il contient le nom du serveur, votre objet GameVersion, et si forge est activé ou non. Créez donc votre objet GameInfos comme ceci (en dessous de LC_VERSION) : public static final GameInfos LC_INFOS = new GameInfos("NomDuServeur", ObjetGameVersion, tweaksActiveOuNon, tweaks); Remplacez NomDuServeur par le nom de votre serveur par exemple "PimpFaction", remplacez votre ObjetGameVersion pour votre objet GameVersion créé plus haut par exemple LC_VERSION, remplacez tweaks par si vous utilisez des tweaks où non (mettez true si vous êtes en 1.6.4 ou plus et que vous voulez forge, ou en 1.6.4 ou plus et que vous êtes en Vanilla avec Optifine et/ou Shader). Ensuite remplacez tweaks, par si vous avez mis false dans tweaksActiveOuNon mettez new GameTweak[] {} (pas de tweak), après si vous êtes en Forge fous mettez new GameTweak[] {GameTweak.FORGE}, mais si vous êtes en Vanilla, si vous voulez Shader mettez new GameTweak[] {GameTweak.SHADER}, et si vous voulez optifine mettez new GameTweak[] {GameTweak.OPTIFINE}, et si vous voulez les deux, mettez new GameTweak[] {GameTweak.OPTIFINE, GameTweak.SHADER}. Par exemple pour un serveur s'appelant PimpFaction en forge utilisant l'objet GameVersion créé plus haut : public static final GameInfos LC_INFOS = new GameInfos("PimpFaction", LC_VERSION, true, new GameTweak[] {GameTweak.FORGE}); Le dossier de jeu Votre dossier de jeu est généré automatiquement par votre objet GameInfos, c'est génial non ? Il est dans AppData pour Windows, Application Support pour MAC, etc... Je vous conseil de stocker le dossier de jeu dans une variable pour pouvoir y acceder plus rapidement plus tard. Par exemple (en dessous de LC_INFOS) : public static final File LC_DIR = LC_INFOS.getGameDir(); Sinon utilisez tout simplement Launcher.LC_INFOS.getGameDir() à chaque fois 2] Création d'une fenêtre de base simple Spoiler Bon, je vais faire très simple, mais pas moche pour autant, parce que je suis maniaque. Je m'attarde pas trop sur le code, c'est juste a titre d'exemple. Créez une classe appelée LauncherFrame, elle contiendra le code de la fenêtre. Spoiler 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; } } N'oubliez pas CTRL + SHIFT + O pour les imports Au final ce joli code rend comme ça : Spoiler 3] Authentification (OpenAuth) Spoiler Bon, commençons par remplir notre méthode run() du thread de actionPerformed() dans LauncherFrame // 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); } Et dans notre class Launcher : 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 dans auth(), on authentifie le joueur. 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()); 4] Mise à jour (S-Update) Donc, dans cette partie nous allons nous attaquer a la partie mise à jour, je vais devoir faire un mini tuto sur comment utiliser S-Update, mais vous allez voir, c'est simplissime. A] Partie Java Spoiler Tous d'abord créons une fonction vide dans Launcher : public static void update() throws IOException { } Puis appelons la dans LauncherFrame dans notre méthode run() de actionPerformed() dans LauncherFrame, après Launcher.auth(), toujours dans le try catch, appelons notre méthode. pb.setString("Verification des mises à jours"); Launcher.update(); Et rajoutez un autre bloc catch après l'autre comme ceci : catch (IOException e) { // Affichage d'un message d'erreur JOptionPane.showMessageDialog(null, "Impossible de mettre a jour mon serveur ! : " + e, "Erreur !", JOptionPane.ERROR_MESSAGE); // On reactive tout pseudo.setEnabled(true); mdp.setEnabled(true); jouer.setEnabled(true); // On affiche l'erreur e.printStackTrace(); } Ensuite initialisons notre objet SUpdate dans la méthode update() qu'on viens de créer : final SUpdate su = new SUpdate("http://monsitestyle.fr/fichiersserveur/", LC_DIR); puis mettons à jour ! LauncherFrame.getInstance().getProgressBar().setString("Mise à jour..."); su.update(); C'est tout pour la partie code ! B] Partie cloud (Les packs pré-faits sont ici !) Spoiler Alors la partie cloud, très courte et très simple depuis S-Update 2 ! Tout d'abord téléchargez l'installateur (installer.php) ici : https://github.com/TheShark34/S-Update-Server/ (si vous ne pouvez pas le télécharger, téléchargez les sources en .zip et prenez juste installer.php). Ensuite sur votre FTP créez ou allez dans un dossier ou sera le serveur S-Update. Mettez-y le fichier installer.php. Ensuite depuis votre navigateur allez sur le fichier installer.php, vous devrez apercevoir le logo S-Update et une barre de chargement (très rapide). Et vous devriez tout d'un coup voir la page de configuration. La page de configuration permet de configurer un pseudo et un mot de passe pour accéder ensuite aux pages protégés dans le dossier protected/. Et l'URL de redirection est là où seront redirigés ceux qui iront sur la page du serveur. Quand vous avez fini cliquer sur le bouton =) Ensuite, vous accédez alors à l'accueil de S-Update (le dossier protected/) après avoir entré votre pseudo mot de passe. Donc voilà c'est bon ! Tout est configuré ! Sur cette page vous voyez le nombre total de connexion et les 5 dernières connexions en détail. Vous pouvez cliquer sur le bouton Configurer pour changer le mot de passe/pseudo/l'url de redirection. Vous avez maintenant juste a mettre les fichiers dans le dossier files/ du dossier de votre serveur sur votre FTP, et vous rendre dans la page d'indexage accessible depuis la page d'acceuil administrateur quand vous avez fini pour appliquer les changements ! Et pour mettre à jour les fichiers, juste changez les dans le dossier files/, et re-allez sur la page d'indexage =). Aussi vous pouvez mettre des zips dans le dossier zips ! Mettez les dans le dossier où ils devraient être extraits, mais attention, ce dossier sera automatiquement ignoré à la vérification ! Voici des packs préfaits à mettre dézipper directement dans le dossier de votre serveur 1.7.10 1.7.10-forge D'autres versions arrivent bientôt =) Si vous avez des packs qui marchent dites-le moi ! C] La Progress Bar Spoiler C'est super simple. Avant su.update(); Créez un nouveau thread qui tourne en boucle et change la barre : Thread t = new Thread() { public void run() { while (true) { LauncherFrame.getInstance().getProgressBar().setMaximum(su.getNumberOfFilesToDownload()); LauncherFrame.getInstance().getProgressBar().setValue(Downloader.getTotalDownloaded()); } } }; t.start(); 5] Lancement du jeu (OpenLauncherLib) Spoiler Commencons par créer une nouvelle méthode launch dans notre class Launcher : public static void launch() { } Pour l'appeler, toujours dans le try catch de notre action listener, après Launcher.update();, mettez : Launcher.launch(); Donc dans notre méthode commencons par créer un objet GameLauncher : GameLauncher gameLauncher = new GameLauncher(ObjetGameInfos, TypeDeGameFolder, authInfos); Remplacez ObjetGameInfos par l'objet GameInfos créé dans la partie 1], TypeDeGameFolder par le type d'organisation de votre dossier (si vous avez pris un pack préfait ou avez suivit le tutoriel de création de pack prenez GameFolder.BASIC). Et en dernier notre objet AuthInfos. Si vous voulez rajouter des arguments JVM (comme -Xms / -Xmx) rajoutez un tableau de String en dernier argument ! Par exemple, avec des arguments JVM -Xms512M et -Xmx1024M, les objets créés plus haut, et une organisation de dossier basique : GameLauncher gameLauncher = new GameLauncher(LC_INFOS, GameFolder.BASIC, authInfos, new String[] {"-Xms512M", "-Xmx1024M"}); Ensuite juste à lancer le jeu ! try { Process p = gameLauncher.launch(); Thread.sleep(5000L); LauncherFrame.getInstance().setVisible(false); p.waitFor(); System.exit(0); } catch (IOException e) { e.printStackTrace(); JOptionPane.showMessageDialog(LauncherFrame.getInstance(), "Impossible de lancer mon serveur ! : " + e, "Erreur", JOptionPane.ERROR_MESSAGE); System.exit(1); } catch (InterruptedException e) { System.exit(0); } ALORS ! Explication : D'abord on run tout dans un try catch. Déjà je lance le jeu et je récupère le processus créé. (1ère ligne : Process p = gameLauncher.launch() . Ensuite j'attends 5 secondes le temps que la fenêtre du jeu s'affiche (2ème ligne : Thread.sleep(5000L) . Ensuite je ferme notre fenêtre de launcher (3ème ligne : LauncherFrame.getInstance().setVisible(false)). J'attends que le processus se termine (4ème ligne : p.waitFor()). Et je quitte manuellement pour être sur que le launcher ne reste pas ouvert (5ème ligne : System.exit(0)). Ensuite dans le catch IOException J'affiche l'erreur (1ère ligne : e.printStackTrace)). J'affiche un message d'erreur (2ème ligne : JoptionPane.showMessageDialog(...)). Et je quitte (3ème ligne : System.exit(1)). Et le dernier catch arrive quand on a pas pu attendre que le processus se soit terminé ou juste pas pu attendre 5 secondes, donc ce n'est pas grave, on quitte juste pour être sur que le launcher ne reste pas ouvert. Voilà ! 6] Features en plus Votre launcher est beau, fonctionnel, mais basique. Voilà une liste de features à ajouter a votre launcher ! Proposez-moi en d'autre ! Cette liste s'embellit constament ! A] Créer un bootstrap simple et rapide Spoiler Donc, pour ceux qui ne savent pas, un bootstrap est un mini programme qui mettera à jour le launcher. C'est un autre programme séparé du launcher, il va télécharger et lancer le launcher. C'est un launcher de launcher, et c'est lui que vous distriburrez publiquement et non votre launcher. Il vous permettera de mettre à jour votre launcher en case de besoins, y compris les librairies car je sort régulièrement des mises à jour, c'est donc fortement conseillé, mais on peut s'en passer. Donc commencez par créer un nouveau projet sur Eclipse. Ajoutez y l'OpenLauncherLib et S-Update. Ensuite créez une nouvelle class, ici on va l'appeler MyBootstrap. (Ne l'appelez pas Bootstrap ou ça va vous faire chier avec l'OpenLauncherLib). Créez une méthode main simple qui lance la méthode start ok ? public class MyBootstrap { public static void main(String[] args) { MyBootstrap myBootstrap = new MyBootstrap(); myBootstrap.start(); } public void start() { } } D'abord déclarez 3 variables en haut de votre classes : private File launcherHome = new File(GameDir.createGameDir("nom_du_serveur"), "Launcher"); private SplashScreen splash; private ErrorUtil errorUtil; Le première sera le dossier ou sera sauvegardé le launcher et tout ça, remplacez nom_du_serveur par le nom de votre serveur, ca generera le dossier .nom_du_serveur dans AppData La deuxième sera notre splash. Et la troisième sera notre instance d'ErrorUtil permettant d'écrire dans un crash report et d'afficher un message d'erreur en une ligne ! Merci l'OpenLauncherLib ! Donc maintenant dans notre méthode start, commençons par initialiser notre objet ErrorUtil (permet d'attraper les erreurs pour faire des crash reports) : errorUtil = new ErrorUtil(launcherHome); Ensuite après, créons notre splash screen et affichons le ! try { splash = new SplashScreen("NomDeVotreServeur", ImageIO.read(getClass().getResourceAsStream("VOTREIMAGEDESPLASH.png"))); } catch (IOException e) { // Ne peut normalement pas arriver errorUtil.catchError(e, "L'image du splash n'existe pas !"); } splash.setVisible(true); Remplacez biensur VOTREIMAGEDESPLASH par le nom de votre image de splash, elle devra être a coté de votre classe !, et NomDeVotreServeur par le nom de votre serveur ! Si vous lancez vous verrez un joli splash apparaître normalement ! Ensuite après, passons à la mise à jour du launcher. Comme d'hab, merci S-Update ! SUpdate su = new SUpdate("http://monurldemiseajourdeBOOTSTRAP/", launcherHome); try { su.update(); } catch (IOException e) { errorUtil.catchError(e, "Impossible de mettre à jour le launcher !"); } Remplacez biensur l'url pas l'url d'un dossier (PAS LE MME QUE CELUI DU LAUNCHER) (créez un nouveau serveur S-Update) ou on mettera les fichiers de mises à jour. Ensuite donc, passons au lancement du launcher ! Grace à l'OpenLauncherLib c'est hyper simple ! LauncherClasspath launcherClasspath = new LauncherClasspath(new File(launcherHome, "launcher.jar"), new File(launcherHome, "Libs/")); LauncherInfos launcherInfos = new LauncherInfos("NOMDUSERVEUR", "CLASSEPRINCIPALEDULAUNCHER"); Bootstrap bootstrap = new Bootstrap(launcherClasspath, launcherInfos); try { Process p = bootstrap.launch(); Thread.sleep(1000L); splash.setVisible(false); p.waitFor(); } catch (IOException e) { errorUtil.catchError(e, "Impossible de lancer le launcher !"); } catch (InterruptedException e) { } System.exit(0); Remplacez biensur NOMDUSERVEUR par le nom de votre Serveur, et CLASSEPRINCIPALEDULAUNCHER par la classe principale de votre launcher. Comment former une classe principale ? Prenez le package ou est la classe qui contient la méthode main(String[] args) (dans le tuto LauncherFrame) et rajoutez le nom de la classe. Par exemple la classe LauncherFrame dans le package fr.pimpfaction.launcher donc on marquera fr.pimpfaction.launcher.LauncherFrame EXPLICATIONS ! 1. Création de l'objet LauncherClasspath contenant le fichier du launcher et le dossier des libs 2. Création de l'objet LauncherInfos qui contient le nom du serveur et la classe principale du launcher 3. Création de l'objet Bootstrap qui contient nos deux objets et qui lancera le jeux ! Dans le try 1. On lance le launcher et récupère le process 2. On attends un peu car sinon ce serait trop rapide et on ne verrait pas le splash 3. On ferme le splash 4. On attends la fin du process Dans le catch on demande a ErrorUtil de gérer l'erreur Et a la fin on quitte manuellement pour être sur que le Bootstrap ne reste pas lancé ! Voilà le code final ! public class MyBootstrap { private File launcherHome = new File(GameDir.createGameDir("nom_du_serveur"), "Launcher"); private SplashScreen splash; private ErrorUtil errorUtil; public static void main(String[] args) { MyBootstrap bootstrap = new MyBootstrap(); bootstrap.start(); } public void start() { errorUtil = new ErrorUtil(launcherHome); try { splash = new SplashScreen("MONSERVEUR", ImageIO.read(MyBootstrap.class.getResourceAsStream("MONIMAGEDESPLASH"))); } catch (IOException e) { } splash.setVisible(true); SUpdate su = new SUpdate("http://monurldemiseajourdeBOOTSTRAP/", launcherHome); try { su.update(); } catch (IOException e) { errorUtil.catchError(e, "Impossible de mettre à jour le launcher !"); } LauncherClasspath launcherClasspath = new LauncherClasspath(new File(launcherHome, "launcher.jar"), new File(launcherHome, "Libs/")); LauncherInfos launcherInfos = new LauncherInfos("MONSERVEUR", "CLASSEPRINCIPALEDULAUNCHER"); Bootstrap bootstrap = new Bootstrap(launcherClasspath, launcherInfos); try { Process p = bootstrap.launch(); Thread.sleep(1000L); splash.setVisible(false); p.waitFor(); } catch (IOException e) { errorUtil.catchError(e, "Impossible de lancer le launcher !"); } catch (InterruptedException e) { } System.exit(0); } Voila =) Simple non ? Merci l'OpenLauncherLib ! Maintenant comment organiser le dossier de mise a jour du bootstrap ? Dans le dossier (donc sur votre FTP). Faite comme dans la partie 4] pour créer votre serveur S-Update (UTILISEZ UN AUTRE QUE CELUI DU LAUNCHER). Et mettez-y vos librairies et votre launcher. Voilà ! B] Créer son pack avec n'importe quelle version forge/vanilla Spoiler Pour créer votre pack ce n'est pas compliqué. Le truc c'est que dans votre .minecraft officiel les versions sont entrelacées. Alors supprimez votre .minecraft officiel (faites une sauvegarde si vous voulez) et avec le launcher officiel téléchargez la version souhaitez. Ensuite si vous voulez Forge pour votre pack, téléchargez forge depuis leur site (http://files.minecraftforge.net/) et installez le, ensuite LANCEZ MINECRAFT CEST TRS IMPORTANT Maintenant dans votre .minecraft copiez tous les dossiers dans un autre dossier, maintenant on va travailler dans ce dossier. Dans ce dossier prenez le fichier versions/<votreversion>/<votreversion>.jar et mettez le a la racine du dossier. Appelez le minecraft.jar Ensuite supprimez le dossier versions/ et resourcepacks/. Maintenant dans le dossier librairies, cherchez dans la barre de recherche *.jar. Prenez tous les fichiers .jar (pas les .jar.sha) et copiez les dans un dossier libs/ qui sera a la racine du dossier de base. Supprimez le dossier librairies/ Téléchargez les natives ici : http://dl.dropbox.com/u/31232797/mcnatives.zip Mettez tout ce qu'il contient dans un dossier natives/ dans votre pack. Maintenant, zippez ce que contient le dossier assets/ dans un fichier zip (osef du nom), et laissez ce zip dans le dossier assets. Maintenant déplacez le dossier assets dans un dossier zips/ qui lui est à côté et non pas dans le dossier files/ Voilà vous devriez avoir un dossier zips avec un dossier assets contenant un fichier assets.zip (mais vous pouvez changez son nom), un dossier files/ avec : un dossier libs/ (avec juste des .jar), un dossier natives/ et un fichier minecraft.jar. Si vous voulez shader/optifine, mettez la lib dans le dossier libs Mettez tous ça dans le dossier de votre serveur S-Update et c'est bon =). C] Sauvegarder le pseudo du joueur Spoiler Dans cette partie, nous allons juste sauvegarder le pseudo de la personne qui se connecte, pour pouvoir le remettre lorsque qu'il relance le launcher. Créons donc un objet UsernameSaver au début de LauncherFrame : private UsernameSaver usernameSaver = new UsernameSaver(VotreObjetGameInfos); Biensur remplacez VotreObjetGameInfos par votre objet GameInfos, par exemple : private UsernameSaver usernameSaver = new UsernameSaver(Launcher.LC_INFOS); Ensuite, dans le constructeur, vous voyez pseudo = new JTextField("Pseudo"); ? Remplacez le par ça : pseudo = new JTextField(usernameSaver.getUsername("Pseudo")); Le "Pseudo" qu'on lui donne est la valeur par défault retournée si le fichier n'existe pas ! Pour enregistrer le pseudo, dans actionPerformed au tout début, vous avez juste à mettre ça : usernameSaver.setUsername(pseudo.getText()); Voilà ! Simple non =) ? D] Faire en sorte de pouvoir bouger la fenêtre en cliquant dessus Spoiler Si vous avez enlevé les bordures de votre fenêtre (fenetre.setUndecorated(true)) vous avez du voir que vous ne pouvez plus la bouger. On va remedier à ca en faisant en sorte que lorsqu'on reste cliqué sur la fenêtre et qu'on bouge la souris, çela bouge aussi la fenêtre. Depuis l'OpenLauncherLib 2 c'est super simple ! Vous avez juste à rajouter ça dans le constructeur de la classe votre fenêtre (LauncherFrame). (Plutot vers la fin). WindowMover mover = new WindowMover(this); this.addMouseListener(mover); this.addMouseMotionListener(mover); Et voilà ! Vous devriez être capable de bouger votre fenêtre en restant cliqué dessus ! 7] Exporter son launcher A] En JAR Spoiler Lisez cette partie attentivement. Bon, c'est une petite partie, mais la plus importante. Dans cette partie nous allons considérer que vous avez éclipse, sinon c'est que vous n'êtes pas un débutant, donc vous comprendrez cette partie quand même . Don faite clique droit sur le projet de votre Bootstrap si vous en avez créé un, ou Launcher sinon, Export --> Java --> Runnable Jar File. Dans Launch Configuration, choisissez l'entrée qui s'appelle : NomDuProjet - NomDeLaMainClass Si vous ne la voyez pas, elle est créé quand vous lancez votre Launcher/Bootstrap pour la première fois. Ensuite si vous avez un boostrap, cochez absolument "Copy required libraries in a sub-folder next to the jar" au lieu de "Extract required libraries into the jar" POUR LE LAUNCHER, et "Extract required libraries into the jar" POUR LE BOOTSTRAP. Un dossier NomDeVotreProjet_lib se crééra, ignorez le. Sinon, cochez "Extract required libraries into the jar" si vous avez un launcher seul, c'est très important ! Et vous pouvez exporter votre launcher ! Voilà vous avez un .jar ! Maintenant, on va faire comme les pros: Créér un .exe pour Windows, et même, un .app pour Mac ! (Si vous avez un Bootstrap c'est lui que vous devez transformer !) B] En .EXE Spoiler Commencez par télécharger Launch4J à cette adresse : http://sourceforge.net/projects/launch4j/files/launch4j-3/3.7/ Ensuite, lancez le. Dans Output File, mettez la déstination du .exe, n'oubliez pas .exe à la fin ! Dans Jar, mettez votre .JAR généré plus haut. Dans icon vous pouvez mettre l'icon de votre programme en format .ico (Pour convertir : http://iconverticons.com/online/) Ensuite allez dans l'onglet JRE et mettez dans Min JRE version 1.6.0 si votre launcher a été compilé avec Java 6, 1.7.0 avec Java 7 etc... Pour savoir, clique droit sur votre projet eclipse --> Properties --> Java Compiler. C'est la version minimum que devra avoir l'utilisateur qui lance votre programme. Je vous conseil très fortemment de prendre Java 6. Même si vous avez Java 8 installé ça marchera si vous changez les paramètres dans eclipse. Voilà ensuite appuyez sur l'écrou en haut et c'est bon ! Si vous voulez sauvegardé votre configuration, appuyez sur la disquette. Vous n'aurez qu'a la restaurer en appuyant sur le dossier après. C] En .APP Spoiler Commencez par télécharger SharkBundler (c'est un logiciel fait par moi ) : Windows : Adf.ly (Me Supporter) - Direct MAC : Adf.ly (Me Supporter) - Direct Autre : Adf.ly (Me Supporter) - Direct Ensuite, dans Jar File mettez votre fichier .JAR généré plus haut. Dans Output mettez le .app a généré (n'oubliez pas le .app à la fin !) (ne vous inquiétez pas les .app sont des dossiers) Dans Icon mettez l'icone si vous voulez au format .icns (Pour convertir : http://iconverticons.com/online/) Dans Minor Java Ver mettez la version de Java de votre programme. Si votre launcher a été compilé avec Java 6, marquez 6, ou 7 avec Java 7 etc... Pour savoir, clique droit sur votre projet eclipse --> Properties --> Java Compiler. C'est la version minimum que devra avoir l'utilisateur qui lance votre programme. Je vous conseil très fortemment de prendre Java 6. Même si vous avez Java 8 installé ça marchera si vous changez les paramètres dans eclipse. Ensuite dans Main Class mettez le package de votre classe principale suivit du nom de la classe. Par exemple si la classe de votre programme qui contient la methode public static void main s'appelle ClassPrincipale et se trouve dans le package fr.theshark34.coolcraft. Mettez fr.theshark34.coolcraft.ClassPrincipale. Ensuite dans App Name mettez le nom de votre Launcher. Et voilà appuyez sur Bundle et c'est bon ! Vous pouvez aussi sauvegarder votre configuration pour la sauvegarder plus tard. Voilà, c'est la fin de ce tutoriel, merci de l'avoir lu ! N'hésitez pas à créer un sujet dans la partie support si vous avez un problème, je me ferais un plaisir d'y repondre !
    1 Points
  2. TheFumelgo

    [Unity] Graviturn

    Bonjour chers co-ironcraftiens, je viens vous dévoiler mon projet principal du moment. Rien à voir avec le reste où j'abandonne à la première difficulté. Ici, j'ai déjà fait le plus difficile ! Il reste quelques challenges, mais surtout la phase du level design ! (En gros, celui-là, il va gérer) Présentation : Graviturn est un jeu de réflexion/puzzle au concept simple mais novateur. Vous avez une grille statique ainsi que 1 ou plusieurs cubes soumis à la gravité. Votre mission est, si vous l'acceptez, de placer les cubes sur les objectifs correspondants uniquement en changeant la gravité. La difficulté est que vous ne pouvez changer celle-ci qu'une fois tous vos cubes à l'arrêt Dans l'avenir cependant, j'envisage des mécanismes plus complexes tels que la téléportation, le portique qui change la couleur du bloc, etc... Pour le moment, j'ai les mécaniques de bases, ainsi que le menu de sélection des niveaux. C'est assez pour donner une idée du jeu dans son état définitif. Todo List: Ajouter des mécaniques plus complexes Décorer un peu plus les niveaux Designer de nombreux niveaux Fait depuis le premier post de ce message : Accélération du jeu Optimisation pour les mobiles (ça va plus vite, ça chauffe moins, ça consomme moins de batterie) Afficher si le niveau a déjà été réussi Créer un système de médailles Améliorer l'écran de victoire Afficher le meilleur nombre de coups dans le menu Objectif: Je crois vraiment à ce projet, donc je commences à faire monter la hype... En espérant un jour pouvoir finir sur Desura/Steam (GreenLight). Si le jeu plaît, j'envisage aussi un portage sur mobile. Le travail pour le portage ne semblant pas excessif. Vidéos: Anciennes : Screens:
    1 Points
  3. AlphaBravo

    À supprimer

    Merci Lyes pour ce launcher !
    1 Points
  4. chaos90

    Source OhMyFo0x 1.7.10

    Hum je pense que personne va te repondre car ces sources sont extrement nul à chier, bourré de boucle infini qui bousille ton processeur, enfin bref passons des détaille. Ce que ne te conseil de faire c'est de suivre le tutoriel de TheShark34.
    1 Points
  5. MoulmanDev

    Source OhMyFo0x 1.7.10

    Pourquoi tu viens jusqu'ici pour faire ta pub? nan mais sérieusement si il aurait voulu quelqu'un il aurait été dans recrutement? et même il serait allez voir les CV?
    0 Points
  6. orphevs

    À supprimer

    trange, je n'ai pas l'impression d'avoir été payé pour ce template... (cf: ici) EDIT : Erreur de ma part... PS : C'est vrai que tu sais pas affiché une barre de chargement en utilisant une barre pleine et une barre vide ?
    -3 Points