El sitio personal de David Colmenero (D_Skywalk)

Posts tagged with 'Servidor'

Como modificar Minecraft para una LanParty / Servidor Privado

Que también lo podía haber llamado “como crakear minecraft”, pero hubiera sido algo amarillista, ya que las herramientas y todo el sistema son libres y está muy simplificado. Evidentemente no es que Mojang lo soporte pero tampoco creo que sea algo que realmente les moleste. De hecho las protecciones son MUY simples.

Yo inicié todo este pequeño proyecto de servidor privado para una mini-party en una casa rural y como era imposible tener internet, pues lo monté para que todos pudiéramos disfrutarlo allí :)

Minecraft Cliente 1.1 - Para la Party

Mis objetivos con este proyecto eran:
Sistema de Login de Usuarios para una LAN, Sistema de Skins/Cloaks para la LAN y multiplayer desde LAN con todo esto funcionando…

Modificar el cliente de Minecraft

Lo primero que necesitamos es descargar el Coder Pack correspondiente a nuestra versión de Minecraft (ej: para la 1.1 usaremos el MCP 5.6), este pack de utilidades nos permitirá extraer/modificar/recompilar el código fuente de Minecraft. Una vez bajado debemos copiar la carpeta [bin] de Minecraft a la carpeta [jars] de MCP y descargar de la página oficial minecraft_server.jar para tenerlo también en [jars] por si queréis echarle un ojo luego ;)

Ahora desde un terminal entramos en el directorio del MPC y ejecutamos: decompile (en ubuntu sería ./decompile.sh)
Este proceso extraerá todos los ficheros del paquete oficial y los parcheará para que sus funciones sean comprensibles para los humanos XD
Una vez terminado todos los fuentes los tendréis disponibles en la carpeta [src]. Ahora tenéis todo el juego disponible para modificar cualquier cosa que no os guste o ampliar, logros, armas, etc…

Pero nosotros vamos a algo mucho más sencillo permitirnos jugar sin internet, para ello necesitamos editar 4 ficheros.

EntityOtherPlayerMP.java

Este fichero sirve para mostrar las propiedades de los otros jugadores durante la partida multijugador (de ahí el MP). Buscad esta cadena casi al inicio del fichero:

skinUrl = (new StringBuilder()).append("http://s3.amazonaws.com/MinecraftSkins/").append(s).append(".png").toString();

Esto lo que hace es bajar el png de tu skin, y nosotros queremos que las skins las use de nuestra LAN asi que nada más facil que por ejemplo si la ip de nuestro server (con apache montado y demás) fuera 192.168.0.1 …

skinUrl = (new StringBuilder()).append("http://192.168.0.1/MinecraftSkins/").append(s).append(".png").toString();

EntityPlayer.java

De aquí vamos a buscar las cloacks y hacer que la url apunte a nuestra LAN:

playerCloakUrl = (new StringBuilder()).append("http://s3.amazonaws.com/MinecraftCloaks/").append(username).append(".png").toString();

Igual que antes usamos la ip de nuestro server:

playerCloakUrl = (new StringBuilder()).append("http://192.168.0.1/MinecraftCloaks/").append(username).append(".png").toString();

También podríamos modificar EntityPlayerSP.java pero sólo vale para el solitario, así que para este tutorial no nos interesa, si quisierais modificarlo sería lo mismo que el MP, no hay pérdida ;)

NetClientHandler.java

Este componente se encarga de comprobar que nuestro usuario y nuestra sesión son correctas, al hacer login contra el servidor oficial se nos da un identificador si no es correcto, pues no podemos entrar, lo que vamos a hacer es que esa comprobación la haga contra nuestro server (que dirá que sí a todo XD)

Buscad la cadena de iniciar la sesión del cliente:

URL url = new URL((new StringBuilder()).append("http://session.minecraft.net/game/joinserver.jsp?user=").append(mc.session.username).append("&sessionId=").append(mc.session.sessionId).append("&serverId=").append(packet2handshake.username).toString());

Y modificadla como antes a vuestra LAN:

URL url = new URL((new StringBuilder()).append("http://192.168.0.1/game/joinserver.jsp?user=").append(mc.session.username).append("&sessionId=").append(mc.session.sessionId).append("&serverId=").append(packet2handshake.username).toString());

Luego crearemos todos estos ficheros y directorios en el server, pero por el momento simplemente modifiquemos el cliente.

ThreadCheckHasPaid.java

Este fichero genera un hilo que cada cierto tiempo conecta al servidor oficial y comprueba que tus datos de login son correctos, es un hilo que está ahí consumiendo y que sólo vale para eso.

HttpURLConnection httpurlconnection = (HttpURLConnection)(new URL((new StringBuilder()).append("https://login.minecraft.net/session?name=").append(mc.session.username).append("&session=").append(mc.session.sessionId).toString())).openConnection();
httpurlconnection.connect();
if(httpurlconnection.getResponseCode() == 400 && this == null)
{
    Minecraft.hasPaidCheckTime = System.currentTimeMillis();
}
httpurlconnection.disconnect();

Yo al principio no quería tocarlo y simplemente usar mi server y añadirle un certificado SSL a apache, pero el problema es que java requiere que ese certificado sea correcto y un montón de tonterías más… total, un trabajazo para simplemente comentar esas líneas y dejar activa la línea que establece el valor de la variable Minecraft.hasPaidCheckTime para que el cliente inicie correctamente.

Y ya hemos terminado, sólo queda llamar a recompile y aunque podríamos iniciar el juego con starclient no lo hagáis aun ya que necesitamos montar la parte del servidor y luego ya comprobaremos que todo funciona correctamente.

Vamos a por el Server!

Preparar el servidor para Minecraft SMP

Damos por supuesto que tenéis un servidor apache y mysql funcionando, sois root y que tenéis acceso al directorio del servicio web. Simplemente vamos a configurar el sistema para que nos permita loguearnos contra el servidor y usar nuestras Skins. Se podría también preparar un sistema de registros (yo de hecho monté uno sencillito que nos permite subir nuestras Skins) pero como el artículo va dirigido a montar una lan-party realmente cuesta poquito dar las cuenta de alta a mano y copiar las skins.

Login del Panel de control de Dantoine

Bajad la carpetilla del servidor web, descomprimidla y comprobad con cualquier navegador que el servidor os las muestra (aunque en algunas al no enviar vuestro user/pass dará “bad login” o “cannot select DB”, claro). Explico que contiene cada carpeta:

  • [game] Contiene las comprobaciones cuando conectamos al servidor, simplemente son un par de ficheros que no comprueban nada y simplemente contestan “adelante!” XDD checkserver.jsp lo usará el servidor y joinserver.jsp como vimos lo usaba el cliente.
  • [loginusr] Un pequeño PHP  que permite a los usuarios loguear en el sistema. Nada del otro mundo, usad el SQL que encontraréis en la carpeta para instalar la tabla de usuarios. La información del mysql los coge del config.inc.php del principal. Con este fichero podríamos jugar con muchas cosas incluso obligar a los jugadores a actualizarse, la verdad que es bastante ampliable pero para nuestros cometidos es suficiente ;)
  • [MinecraftCloacks] y [MinecraftSkins] son directorios que contienen las capas y las skins de los usuarios, simplemente hay que poner ahí la skin con el nombre exacto de usuario y ya al loguear aparecerá keko con la apariencia que deseaba el usuario. Vendría bien que bajaráis unas cuantas por que si no tenéis internet, poco podréis bajar en la lan-party ;)
  • [webinfo] Es el HTML que verán los usuarios al introducir sus datos. Puedes editarlo y poner lo que quieras :)

Pues eso sería todo metéis la tabla de usuarios con phpmyadmin y dáis de alta vuestros usuarios!

Panel de control de Dantoine
Una vez logueado en el panel de Dantoine esto es lo que se veía…

MinecraftLauncher

Ya tenemos el cliente y el servidor configurados aun no podemos loguear con nuestros usuarios ya que el MCP sólo permite entrar con una cuenta por así decir anónima, sin usuario ni contraseña. Para poder loguearnos debemos usar un launcher que inicie el cliente con nuestros datos de usuario. Para eso vamos a usar una versión viejuna del lanzador de Minecraft, no podemos usar las nuevas por que requieren servidor con https y meternos con SSL, certificados y demás como dije está fuera de este artículo.

Esta versión que yo modifiqué sólo tiene un pequeño bug, que cuando pulsamos en un enlace no abre el navegador, pero vamos nada grave ;)

Launcher Modificado para Servidores no SLL

El lanzador de Minecraft viene configurado para el servidor de todo este artículo 192.168.0.1 si tu servidor estará en una ip diferente modificaremos con un editor hexadecimal los ficheros: LauncherFrame.class y LoginForm$8.class, buscad la cadena de de la ip y cambiadla a la ip que deseeis, tened en cuenta que no podéis añadir caracteres, respetad la cadena original. Si ahora la ip es tiene más caracteres os comeréis parte del directorio de apache asi que renombradlo después en el server para que coincidan.

Os veo un poco perplejos, así que pongo un ejemplo para LoginForm$8.class la cadena que encontraréis será:

http://192.168.0.1/webinfo/ (carpeta webinfo en el server)
http://192.168.0.100/winfo/ (renombramos la carpeta a winfo en el server)

El nombre me los he inventado yo, podéis poner el nombre a la carpeta que queráis siempre que mantengáis el tamaño de la cadena exactamente igual.

Una vez hemos modificado los dos ficheros con cualquier compresor podemos abrir minecraft_launcher-1.5-dantoine.jar (no es más que un zip) y actualizar ambos ficheros con las nuevas versiones.

Finalmente para iniciar el lanzador debemos indicar que inicie la clase “net.minecraft.LauncherFrame“, en windows hay utilidades que permiten generar un ejecutable que por defecto use esa clase pero en ubuntu debemos indicarla, pero nada más simple que montarnos un pequeño script que haga el trabajo por nosotros. Os dejo un simple ejemplo suponiendo que el lanzador lo metierais dentro de [.minecraft] en una nueva carpeta llamada [LauncherDantoine]:

cd ~/.minecraft/LauncherDantoine
java -Xmx1024M -Xms512M -cp minecraft_launcher-1.5-dantoine.jar net.minecraft.LauncherFrame

Ya tenemos casi todo listo volvemos al cliente para finalizar todo el proceso…

Ajustes en el Servidor Multiplayer

Para simplificarlo ya que el minecraft_server.jar intenta loguear contra *session.minecraft.net*, yo lo que hice fue añadir en el /etc/hosts (supongo que en windows andará por el system) la ip del server:

192.168.0.1    session.minecraft.net

 Retoques finales del Cliente de Minecraft

Antes os dejé la miel en los labios de comprobar si todo funcionaba, bueno no si se aguantasteis sin lanzar el cliente XD
Pues ya vamos a lo último, actualizar el cliente oficial para que use nuestra party-modificación ^_^’

Sencillo volvemos al terminal y desde el directorio principal del MCP lanzamos reobfuscate (siendo esta llamada en linux ./reobfuscate.sh), nos aparecerá algo como esto:

== Reobfuscating client ==
> Gathering md5 checksums
> Compacting client bin directory
> Reobfuscating client jar
> Extracting modified classes
> Modified class found : net/minecraft/src/EntityOtherPlayerMP
> Modified class found : net/minecraft/src/EntityPlayer
> Modified class found : net/minecraft/src/NetClientHandler
> Modified class found : net/minecraft/src/ThreadCheckHasPaid
> Outputted net/minecraft/src/EntityOtherPlayerMP to reobf/minecraft as qx.class
> Outputted net/minecraft/src/EntityPlayer      to reobf/minecraft as xb.class
> Outputted net/minecraft/src/NetClientHandler  to reobf/minecraft as abm.class
> Outputted net/minecraft/src/ThreadCheckHasPaid to reobf/minecraft as hc.class

Ahora como véis se han creado cuatro nuevos ficheros compilados y cifrados con nuestras modificaciones, pues ahora como hicimos con el launcher, vamos al jar oficial de minecraft que tendréis en vuestra carpeta bin del juego y sobrescribid cada uno de ellos para que ahora el cliente contenga nuestras modificaciones :D

Y por último borramos completamente la carpeta [META-INF] que contiene el jar para que el cliente no proteste por haberlo modificado.

Yo también modifiqué la carpeta de title y añadir un splash personalizado, jejej apañado que es uno :P

Disclaimer final…

Evidentemente aunque se necesita al menos alguien con el juego original, todo esto puede usarse para jugar de gratis, pero nada de mal hace a nadie usarlo para montarte tu pequeña LAN y me consta que gracias a todo esto que monté para esa pequeña reunión se han vendido un par de Minecraft más y a quien no le gustó, tampoco lo llegó luego a jugar más ;)

Aviso: Este tutorial no se actualizará, si algún día Mojang decide cambiar los ficheros, la forma de funcionar, etc… este tutorial yo lo hice para la versión 1.0 (aunque me consta que sigue siendo válido para la 1.1) y ahí se quedará, ignorando si más adelante seguirá siendo efectivo o no.

Un Saludo y espero que lo disfrutéis con vuestros colegas, nosotros lo pasamos pipa… hoguerita, minecraft y todos alrededor con nuestras mantitas ^_^

Minecraft Login - Apache Files

Subido: 2012-01-20 22:44:16 Ficheros para el servidor apache.

Minecraft Login - Launcher

Subido: 2012-01-20 23:20:38 Launcher modificado por mi para permitir usar cualquier servidor HTTP.

Servidores de Juegos, Parte 1

Creo que servidores como Quake o Counter, no hace falta que explique mucho así que prefiero hablar de otros menos conocidos e igualmente buenos. Empiezo por uno simplito pero muy divertido para jugarlo con (muchos) amigos:

GTA: San Andreas – Multiplayer o SA:MP

Este servidor consta de dos partes una parte a modo de parche para el juego original (que da pie al multiplayer) y la otra que es el propio servidor. El parche no tiene mucho misterio, con tu juego original lo instalas y listo Smiley: Muy contento!
El Servidor tampoco lleva una gran complicación, no necesita base de datos y los modos de juego son pequeños scripts en texto, que puedes seleccionarlos una vez estas conectado.

Jugando con amigos, al menos 10 el juego es una awesomidad, tenéis desde un modo mafia, hasta la caza del hombre, una especie de Team Deathmatch o simplemente placer de hacer el garrulo con tus amigos por San Andreas Smiley: guay!

Resumiendo: Simple de configurar y muy divertido de jugar con los colegas (sois son muchos mejor).
Web: http://www.sa-mp.com/

PvPGN o PvP Gaming Network

Es la versión opensource de BattleNet que igualmente al anterior no conlleva demasiada complejidad, básicamente el servidor se encarga de manejar el chat y gestionar las cuentas. La cosa se complica un poco más si queremos jugar a Diablo 2, por que requerirá de un servidor extra de personajes D2CS.
Si además quieres tener la posibilidad de que las partidas las maneje el servidor necesitaras también D2GS, que lamentablemente a parte de no tener el código abierto (al menos que yo sepa) soló está disponible para Win32. Aunque en Wine la beta6 del servidor para 1.10 me ha funcionado medianamente bien.

Os recomiendo este servidor mayormente para preparar torneos de Starcraft, por que realmente la parte de Diablo está muy verde, aunque te da la posibilidad de ver e intentar acabar con el Über Diablo, y eso tampoco está bien perdérselo Smiley: Muy contento!

Web: http://pvpgn.berlios.de/index.php?page=about
Configurar D2GS: http://pvpgn.wikia.com/wiki/D2GS_Server

Con vuestro permiso, lo dejo aquí comentadme que os parecen y/o si creéis que debería también entrar en hablar de configuraciones y cosas así un poco más técnicas Smiley: guiño

Un Saludo!