Litarvan

[Forge/Vanilla] [1.*.*] Créer son propre launcher perso de zéro

795 messages dans ce sujet

Salut tout le monde, j'aimerais bien savoir vos retour sur ce tutoriel, si vous avez réussi à faire ce tutoriel, si il fonctionne, etc...

En particulier nette qui avait un problème.

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Par contre, es-que ça serai possible d'ajouter le téléchargement d'autre fichier/dossier ? Comme par exemple le dossier ressources pack ou les fichier option.txt

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Biensur, dans le dossier S-Update, créé un fichier par exemple trucs.txt, dans le fichier versionindex.txt, rajoute une ligne "trucs/" (sans les ", avec le / ). Et dans le trucs.txt

Rajoute les fichiers par exemple :

code.txt
resourcepacks/rp.zip

et dans le dossier Files, rajoute les fichiers.

Pour plus d'infos sur le fonctionnement de S-Update, il y a un mini tutoriel ici :

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Je trouve le tuto un peut compliqué pour moi , tu devrais mettre ( au debut ) les classes ect a creer et comment faire..

sinon gg :)

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Je trouve le tuto un peut compliqué pour moi , tu devrais mettre ( au debut ) les classes ect a creer et comment faire..

A partir du moment ou tu sais programmer, tu programme ton launcher apres, mon tutoriel est pour transfromer ton programme en launcher, il n'y a pas de classes à créer, ce sont les tiennes, celle de ton interface etc... Tu rajoute des lignes a ta classe qui contient ton interface =)

sinon gg :)

Merci =) Toutes ces libs et tout, ça m'a demandé du travail, du travail que vous n'aurez pas à faire, vu qu'il est déjà fait.

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Mise à jour du 19/02/2015 :

- Ajout pour l'openlauncherlib du support de l'ancien système d'assets (<1.7.2)
- Ajout des assets dans le tuto pour créer son pack
- Réglage du bug "java.io.IOException server returned error code 403" de S-Update (bug rare)
- Reglage de petits trucs débile
- Réglage du p.waitFor qui était avant gl.printProcessOutput ce qui faisait que celui-ci ne servait à rien
- Ajout d'un System.exit pour être sur que le launcher se ferme
- Réglage du nom des libs pour libs0.txt dans le tutoriel du bootstrap
- Ajout des packs 1.7.2

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Tutoriel mis à jour :

- Ajout pour l'openlauncherlib du support de l'ancien système d'assets (<1.7.2)

- Ajout des assets dans le tuto pour créer son pack

- Réglage du bug "java.io.IOException server returned error code 403" de S-Update

- Reglage de petits trucs débile

- Réglage du p.waitFor qui était avant gl.printProcessOutput ce qui faisait que celui-ci ne servait à rien

- Ajout d'un System.exit pour être sur que le launcher se ferme

- Réglage du nom des libs pour libs0.txt dans le tutoriel du bootstrap

- Ajout des packs 1.7.2 (en cours d'upload)

Merci a toi pour le launcher

et cest petites erreurs , tu les a trouvé grace a moi qui t"ai demandé de maider :)

encore merci :)

+1

Cordialement,PGM.

1

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai une question ? Il existe tu encore des tutoriels pour authentification en php ? Car j'ai trouver des demandes d'aides en 1.5 mais c'est tu compatible ?, de plus j'ai trouver cette vidéo, mais les liens ne sont plus disponibles et j'ai pas trouver le poste sur Ironcraft :/

De plus, je dispose d'un cms SamantCms.

J'ai aussi trouver sa : ICIet sa aussi ICI

EDIT: Je viens de trouver sa :

<?php
  
  
        $d=0;
  
  
        //récupération des arguments
  
  
        $pseudo=$_GET['user'];
  
  
        $passwd=$_GET['password'];
  
  
        $version=$_GET['version'];
  
  
        $nb_min=0;
  
  
        $nb_max=26;
  
  
        $nombre = mt_rand($nb_min,$nb_max);
  
  
        $nombre2 = mt_rand($nb_min,$nb_max);
  
  
        $word =array ("Onutrem","NoNiMad","mantal","ThePercuMania","Matthieu614","doubi125","CIad","Stormweaker","Arignir","AlcoolGeek",
  
  
        "Linuxovore","dolfinsbizou","Knux14","essaic","MysterHyde","iron'n'gold","Dren_Bx","Orbital","ludovyc","Fenrius","Kaaji","Golden630","Cr0W",
  
  
        "Matrix_Soldier","womcataclysm","valentin83310","Tartiflette");
  
  
        $sessionId = sha1(sha1($word[$nombre].$word[$nombre2]));
  
  
        //ouverture de la connexion à la base de donnée
  
  
        $connexion = new mysqli("xxxxxxxxx", "xxxxxxxx", "xxxxxxxx", "xxxxxxx");
  
  
        //reglage de la requete
  
  
        $sql= "SELECT * FROM login WHERE pseudo LIKE '".$pseudo."'";
  
  
        //envoie de la requete
  
  
        $result=mysqli_query($connexion,$sql);
  
  
        //variable de test
  
  
        $exists=false;
         
  
        //lecture de la réponse
  
 
  
  
  
  
        while($row = mysqli_fetch_array($result, MYSQL_BOTH))
  
  
        {
 
  
                if($row['pseudo']==$pseudo && $row['password']==$passwd)
  
  
                {
 
  
                                $exists=true;
  
  
                                if($version<13)
  
  
                                {
  
  
                                echo "Old version";
  
  
                                }
  
  
                                else{
  
  
                                
  
  
                                //affichage de la réponse
  
  
                                echo "21324568454:deprecated:".$pseudo.":".$sessionId;
  
  
                                $sql3= "UPDATE `login` SET sessionId='".$sessionId."'";
  
  
                                $result3=mysqli_query($connexion,$sql3);
  
  
                                }
  
  
  
  
  
  
                }
  
  
        }
  
  
        if($exists==false)
  
  
        {
  
  
             echo "Bad login";
  
  
        }
  
  
  
 ?>
<?php
$bdd = new PDO('mysql:host=localhost;dbname=minecraft', 'lol13', 'minecraft');
       $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$pseudo=$_GET['user'];
$passwd=$_GET['password'];
$version=$_GET['version'];
$nb_min=0;
$nb_max=26;
$nombre = mt_rand($nb_min,$nb_max);
$nombre2 = mt_rand($nb_min,$nb_max);
$word = array ("Onutrem","NoNiMad","mantal","ThePercuMania","Matthieu614","doubi125","CIad","Stormweaker","Arignir","AlcoolGeek",
"Linuxovore","dolfinsbizou","Knux14","essaic","MysterHyde","iron'n'gold","Dren_Bx","Orbital","ludovyc","Fenrius","Kaaji","Golden630","Cr0W",
"Matrix_Soldier","womcataclysm","valentin83310","Tartiflette");
$sessionId = sha1(sha1($word[$nombre].$word[$nombre2]));
 $select = $bdd->query("SELECT * FROM login WHERE pseudo='$pseudo' AND password='$passwd'");
     if ($select->rowCount() > 0) {
     if	($version<13){
	 echo "Old version";
	 } else {
	    echo "21324568454:deprecated:".$pseudo.":".$sessionId;
		$bdd->query("UPDATE login set sessionId = '$sessionId' WHERE pseudo = '$pseudo'");
	 }

     } else {
          echo "Bad Login";
        }
?>

Je crois c'est pas compatible avec ton tuto mais la je trouve riens...

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Desolé mais moi je m'y connais pas là dedans ...

Si jamais je trouve un tutoriel , je te lenvois :)

Cordialement PGM.

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Je m'y connais un peu en PHP/bdd je pourrais faire un tuto peut être

0

Partager ce message


Lien à poster
Partager sur d’autres sites

mec c'est un formulaire en php bien sur que c'est compatible...
c'est juste une page où tu lui envoie pseudo, mot de passe et version et sa te répond ok si et seulement si:

  • l'user est dans la bdd
  • le mot de passe correspond
  • la version est la bonne.


pour l'utiliser:

public String login(String user, String passwd, String version)
{
    HttpClient httpclient = HttpClients.createDefault();
    HttpPost httppost = new HttpPost("http://www.tonsite.com/ta_page_de_login.php");

    List<NameValuePair> params = new ArrayList<NameValuePair>(3);
    params.add(new BasicNameValuePair("user", user));
    params.add(new BasicNameValuePair("password", passwd));
    params.add(new BasicNameValuePair("version", version));

    try
    {
        httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
    }
    catch (UnsupportedEncodingException e)
    {
        e.printStackTrace();
        return (null);
    }
    try
    {
        HttpResponse response = httpClient.execute(httpPost);
        HttpEntity respEntity = response.getEntity();

        if (respEntity != null)
            return (EntityUtils.toString(respEntity));
    }
    catch (ClientProtocolException e)
    {
        e.printStackTrace();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
    return (null);
}
0

Partager ce message


Lien à poster
Partager sur d’autres sites

mec c'est un formulaire en php bien sur que c'est compatible...

c'est juste une page où tu lui envoie pseudo, mot de passe et version et sa te répond ok si et seulement si:

  • l'user est dans la bdd
  • le mot de passe correspond
  • la version est la bonne.

pour l'utiliser:

public String login(String user, String passwd, String version)
{
    HttpClient httpclient = HttpClients.createDefault();
    HttpPost httppost = new HttpPost("http://www.tonsite.com/ta_page_de_login.php");

    List<NameValuePair> params = new ArrayList<NameValuePair>(3);
    params.add(new BasicNameValuePair("user", user));
    params.add(new BasicNameValuePair("password", passwd));
    params.add(new BasicNameValuePair("version", version));

    try
    {
        httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
    }
    catch (UnsupportedEncodingException e)
    {
        e.printStackTrace();
        return (null);
    }
    try
    {
        HttpResponse response = httpClient.execute(httpPost);
        HttpEntity respEntity = response.getEntity();

        if (respEntity != null)
            return (EntityUtils.toString(respEntity));
    }
    catch (ClientProtocolException e)
    {
        e.printStackTrace();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
    return (null);
}

Dans fond, si je comprend biens, c'est sa je doit changer ?

	private final String YGGDRASIL_AUTH_SERVER = "https://authserver.mojang.com/";
	
	private final String YGGDRASIL_AUTH_SERVER_AUTHPOINT = "authenticate";
	private final String YGGDRASIL_AUTH_SERVER_REFRESHPOINT = "refresh";
	private final String YGGDRASIL_AUTH_SERVER_VALIDATEPOINT = "validate";
	private final String YGGDRASIL_AUTH_SERVER_SIGNOUTPOINT = "signout";
	private final String YGGDRASIL_AUTH_SERVER_INVALIDATEPOINT = "invalidate";

C'est dans la classAuthYggdrasil

Voici la class pour info :

package net.kronos.mclib.auth.yggdrasil;

import com.google.gson.Gson;

import net.kronos.mclib.auth.yggdrasil.model.*;
import net.kronos.mclib.auth.yggdrasil.model.response.*;
import net.kronos.mclib.util.HttpUtil;

public class AuthYggdrasil
{
	private final String YGGDRASIL_AUTH_SERVER = "https://authserver.mojang.com/";
	
	private final String YGGDRASIL_AUTH_SERVER_AUTHPOINT = "authenticate";
	private final String YGGDRASIL_AUTH_SERVER_REFRESHPOINT = "refresh";
	private final String YGGDRASIL_AUTH_SERVER_VALIDATEPOINT = "validate";
	private final String YGGDRASIL_AUTH_SERVER_SIGNOUTPOINT = "signout";
	private final String YGGDRASIL_AUTH_SERVER_INVALIDATEPOINT = "invalidate";
	
	private boolean debug = false;
	
	/**
	 * @param debug If true, every request will be logged (contains passwords and tokens in plain text!)
	 */
	public AuthYggdrasil(boolean debug)
	{
		this.debug = debug;
	}
	
	/**
	 * Authenticate an user with his username and password.
	 * 
	 * @param agent The agent (can be null)
	 * @param username The username of the account to authenticate
	 * @param password The password of the account to authenticate
	 * @param clientToken The last client token (can be null if you don't have one yet)
	 * 
	 * @return The authentication response model (accessToken + clientToken + availableProfiles + selectedProfiles)
	 * 
	 * @throws AuthYggdrasilException
	 */
	public YggdrasilAuthenticateResponse authenticate(YggdrasilAgent agent, String username, String password, String clientToken) throws AuthYggdrasilException
	{
		YggdrasilAuthenticate model = new YggdrasilAuthenticate(agent, username, password, clientToken);
		
		return (YggdrasilAuthenticateResponse)request(model, YggdrasilAuthenticateResponse.class, YGGDRASIL_AUTH_SERVER_AUTHPOINT);
	}

	/**
	 * Refresh a valid access token.
	 * 
	 * @param accessToken The access token to refresh
	 * @param clientToken The client needed for the refresh
	 * 
	 * @return The refresh response model (accessToken + clientToken + selectedProfile)
	 * 
	 * @throws AuthYggdrasilException
	 */
	public YggdrasilRefreshResponse refresh(String accessToken, String clientToken) throws AuthYggdrasilException
	{
		YggdrasilRefresh model = new YggdrasilRefresh(accessToken, clientToken);
		
		return (YggdrasilRefreshResponse)request(model, YggdrasilRefreshResponse.class, YGGDRASIL_AUTH_SERVER_REFRESHPOINT);
	}
	
	/**
	 * Check if an access token is valid.<br />
	 * If the access token is invalid this throws an AuthYggdrasilException, otherwise this return nothing.
	 * 
	 * @param accessToken The access token to be checked
	 * 
	 * @throws AuthYggdrasilException
	 */
	public void validate(String accessToken) throws AuthYggdrasilException
	{
		YggdrasilValidate model = new YggdrasilValidate(accessToken);
		
		request(model, YGGDRASIL_AUTH_SERVER_VALIDATEPOINT);
	}
	
	/**
	 * Invalidate all access token of an account.
	 * 
	 * @param username The username of the account
	 * @param password The password of the account
	 * 
	 * @throws AuthYggdrasilException
	 */
	public void signout(String username, String password) throws AuthYggdrasilException
	{
		YggdrasilSignout model = new YggdrasilSignout(username, password);
		
		request(model, YGGDRASIL_AUTH_SERVER_SIGNOUTPOINT);
	}
	
	/**
	 * Invalidate an access token.
	 * 
	 * @param accessToken The access token to be invalidated
	 * @param clientToken The client token needed for the invalidate
	 * 
	 * @throws AuthYggdrasilException
	 */
	public void invalidate(String accessToken, String clientToken) throws AuthYggdrasilException
	{
		YggdrasilInvalidate model = new YggdrasilInvalidate(accessToken, clientToken);
		
		request(model, YGGDRASIL_AUTH_SERVER_INVALIDATEPOINT);
	}

	/** Makes a request to the yggdrasil server with the specified json data on an endpoint.
	 * 
	 * @param obj The request model
	 * @param endpoint The endpoint
	 * 
	 * @throws AuthYggdrasilException
	 */
	private void request(Object obj, String endpoint) throws AuthYggdrasilException
	{
		if(obj == null || endpoint == null)
			throw new IllegalArgumentException();
		
		request(obj, null, endpoint);
	}
	
	/** Makes a request to the yggdrasil server with the specified json data on an endpoint.
	 * 
	 * @param obj The request model
	 * @param jsonClass The class of the request model
	 * @param endpoint The endpoint
	 * 
	 * @return The response model
	 * 
	 * @throws AuthYggdrasilException
	 */
	private Object request(Object obj, Class<?> jsonClass, String endpoint) throws AuthYggdrasilException
	{
		Gson gson = new Gson();
		String serverReturn;

		try
		{
			serverReturn = HttpUtil.performPost(debug, YGGDRASIL_AUTH_SERVER + endpoint, "application/json", gson.toJson(obj));
		}
		catch (Exception e)
		{
			YggdrasilError errorModel = gson.fromJson(e.getMessage(), YggdrasilError.class);

			if(errorModel == null)
			{
				errorModel = new YggdrasilError();
				errorModel.setErrorMessage(e.getMessage());
			}
			
			throw new AuthYggdrasilException(errorModel);
		}
		
		if(jsonClass != null)
			return gson.fromJson(serverReturn, jsonClass);
		else
			return null;
	}
}

0

Partager ce message


Lien à poster
Partager sur d’autres sites

si tu compte retirer le systeme d'identification de mojang, j'en dit pas plus

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Non c'est pas sa je veux faire, mais dermenslof, jarrive juste pas a import le 3/4 de ton code

1424616101-import.png

0

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai encore sa comme erreurs et il me dise pas d'import....

1424625218-ddsdsd.png

EDIT : J'ai test et j'ai fini par réglé les problèmes BasicNameValuePair mais je sais pas si c'est correct comme sa :

    public String login(Any user, Any passwd, Any version)
    {
        HttpClient httpclient = HttpClients.createDefault();
        HttpPost httppost = new HttpPost("http://www.tonsite.com/ta_page_de_login.php");

        List<NameValuePair> params = new ArrayList<NameValuePair>(3);
        params.add(new NameValuePair("pseudo", user));
        params.add(new NameValuePair("mdp", passwd));
        params.add(new NameValuePair("version", version));

        try
        {
            httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
        }
        catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();
            return (null);
        }
        try
        {
            HttpResponse response = httpClient.execute(httpPost);
            HttpEntity respEntity = response.getEntity();

            if (respEntity != null)
                return (EntityUtils.toString(respEntity));
        }
        catch (ClientProtocolException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return (null);
    }

Il reste toujours le problème deUrlEncodedFormEntity

0

Partager ce message


Lien à poster
Partager sur d’autres sites

ralala... fait tout vous faire.

le code avec les imports:

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

//...
	
	public String login(String user, String passwd, String version)
	{
	    HttpClient httpclient = HttpClients.createDefault();
	    HttpPost httppost = new HttpPost("http://www.tonsite.com/ta_page_de_login.php");

	    List<NameValuePair> params = new ArrayList<NameValuePair>(3);
	    params.add(new BasicNameValuePair("user", user));
	    params.add(new BasicNameValuePair("password", passwd));
	    params.add(new BasicNameValuePair("version", version));

	    try
	    {
	        httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
	    }
	    catch (UnsupportedEncodingException e)
	    {
	        e.printStackTrace();
	        return (null);
	    }
	    try
	    {
	        HttpResponse response = httpclient.execute(httppost);
	        HttpEntity respEntity = response.getEntity();

	        if (respEntity != null)
	            return (EntityUtils.toString(respEntity));
	    }
	    catch (ClientProtocolException e)
	    {
	        e.printStackTrace();
	    }
	    catch (IOException e)
	    {
	        e.printStackTrace();
	    }
	    return (null);
	}

la lib apache:http://wwwftp.ciril.fr/pub/apache//httpcomponents/httpclient/binary/httpcomponents-client-4.4-bin.zip

il faudra mettre dans ton buildpath les libs httpclient-4.4.jar et httpcore-4.4.jar

1

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu peux faire en sorte qu'au lieu de passer par pleins de fichiers .ZIP cela vienne checker les fichiers à jour mais dans un dossier du FTP ? comme la plupart des launcher identique à celui de MC ?

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Super merci dermen =)

Mettez a jour s-update en 0.1.3, telechargez la nouvelle version ou mettez à jour votre pom.xml

Voilà le tutoriel est maintenant terminé ! Si quelqu'un a la force d'en faire un tuto video, qu'il le fasse (en me citant svp) mais du a ma voix je ne pourrais pas le faire moi. Sauf si vous insistez et qu'entendre une voix de kikoo ne vous dérange pas.

Salut, Shark j'aimerais bien que tu fasse le tutoriel sur la chaine IC pour que les personnes essayant de crée un launcher soit plus simple en vidéo qu'en écrit

Et au contraire ta soit disant voix "de kikoo" ce n'est pas grave fais quand même un tutoriel

Voilà merci :)

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant