El sitio personal de David Colmenero (D_Skywalk)

Posts tagged with 'Proyectos'

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.

A.G.E.S. Live - Arcade Machine System

Arcade Genuine Entertainment System (A.G.E.S.) es un pequeño pero potente Live de Ubuntu, enfocado a un uso exclusivo en máquinas arcade. El objetivo es tener un sistema mínimo pero usable que permita jugar fácilmente a emuladores y juegos OpenSource.


A.G.E.S. Pantalla de Arranque

Características principales

  • Incluye pyRetro un FrontEnd pequeño, muy rápido y de uso sencillo.
  • Ahora funciona con las xorg en lugar de la consola de la vieja versión (0.00.1e), que permitirá nuevos emuladores y aprovecharemos la aceleración OpenGL de las tarjetas modernas.
  • Mame 0.143 hiscore y groovy patches (incluye switchres para generar los modos nativos como antiguamente se hacía con advmame)
  • Kernel 2.6.38.8 ArcadeVGA parches de groovy (permite tener desde el arranque 15Khz).
  • xorg-radeon 6.14.99~git 20110811 ArcadeVGA ages-fix (permite resoluciones menores de 320×240 en las xorg)
  • libsdl-1.2 switchres patch.
  • OpenPPJoy 0.4z preconfigurado (Controles Arcade Usando LPT).
  • Modos Entrelazados totalmente operativos (en la anterior versión desde consola no funcionaban correctamente).

*Todos los parches usados están en el live en la ruta /opt/ages y /opt/pkg
*

Por Hacer

  • RC2: Terminar Ages-Setup y añadir updater.
  • RC3/Final: Añadir soporte de otros emuladores en pyRetro y añadirlos a la release final, mame 0.106?

Testeo

Puedes instalarla/probarla desde un pendrive, hay más info en la web de ubuntu: (Try it)

Página Oficial/Bugtracker: https://forja.rediris.es/projects/ages

RC1a fallos conocidos

  • En modo arcade no aparece la pantalla de inicio, si lo hace a 30Khz (algo falla en plymouth, investigar)
  • Cuando hay un crash de MAME la pantalla continúa a la resolución del juego (añadir un xrandr al volver?)

Downloads, Videos y tutoriales sobre A.G.E.S. abajo :)

English

Arcade Genuine Entertainment System (A.G.E.S.) is a little live system exclusive for arcade cabinets. The goal is to get a minimal but usable system that allows easy playing emulators and opensource videogames.


A.G.E.S. Boot Screen

Features

  • Include pyRetro FrontEnd little but easy, stable and quick work.
  • Using xorg  no more console commands are need it to configure the basic system.
  • Mame 0.143 hiscore and groovy patches (includes switchres to generate arcade native modes like advanceMAME)
  • Kernel 2.6.38.8 ArcadeVGA patches from groovy (boot on 15Khz).
  • xorg-radeon 6.14.99~git 20110811 ArcadeVGA ages-fix (resolutions bellow than 320×240 on xorg).
  • libsdl-1.2 switchres patch.
  • OpenPPJoy 0.4z preconfigured (Arcade Joysticks using LPT).
  • Interlazed modes working with a perfect vsync!

Patches used are included on live, path /opt/ages and /opt/pkg

ToDo

  • RC2: To finish ages-setup and his updater.
  • RC3/Final: Add support for more emulators on pyRetro Frontend.

Tests

You can try AGES from CD or using a USB/Pendrive, more info at ubuntu site: (Try it)

Oficial Site/Bugtracker: https://forja.rediris.es/projects/ages

RC1a Bugs

  • In Installed system (at 15khz) splash do not appear, working on 30Khz test (something wrong on plymouth?)
  • When MAME is crashed, screen still on game resolution (add xrandr?)

Downloads bellow…

Videos

Tutorial Videos

Ages Live 11.04.2 * Remix

Subido: 2011-10-21 01:06:00 Ages Live - RC1a

OpenPPJoy Actualizado!

Con todo esto de recuperar AGES anoche me quité un par de horas de sueño para actualizar OpenPPJoy a su versión 0.4z que soporta por fin el Kernel 2.6.38, las gracias a VeS que además corrigió la configuración base de las teclas para adaptarse perfectamente a la configuración por defecto de MAME :)

Panel ejemplo OpenPPJoy
Esquema realizado con las herramientas de diseño más sofisticadas para mostrar como montar un pequeño panel a modo de ejemplo para OpenPPJoy. Tecnología punta HOIGAN!

Los cambios los tenéis en el repositorio ya disponible y listo para ser compilado:
http://code.google.com/p/openppjoy/source/list

Los pasos son tan sencillos como siempre:

svn checkout http://openppjoy.googlecode.com/svn/trunk/ openppjoy
cd openppjoy/arcade-modulo
make
make modules_install

Igualmente voy a preparar una versión debian del módulo usando DKMS, que es un pequeño pero potente programa* (patrocinado por Dell)* que permite mantener un driver que no está disponible en la rama oficial del kernel de forma sencilla para el usuario, ya que se encarga de vigilar que tengamos nuestro módulo actualizado cada vez que renovemos nuestro kernel. Si tenéis alguna tarjeta NVIDIA, ATI o alguna Webcam rara ya os sonará haberlo visto ;)

El siguiente paso será hacer el driver configurable, me gustaría usar /proc pero quiero no alargar demasiado la nueva rama 0.5, haré unas pruebas con la beta que me envió hace ya más de un año Pakito (mil gracias tio) y veré que se puede construir a partir de ahí que sea estable y demás :)

Un Saludo!


Navida! Navidaaa!

Me quedan pocos días para tomarme mis vacaciones de Navidad, y ya ando haciendo cábalas de que “tejemaje” montar estas minivacaciones, tengo un montón de cosas pendientes pero lo más seguro es que me ponga a escribir (ando escribiendo un guioncito para un futuro videojuego rolero) y a jugar a la Wii (Paper Mario, Wii Music, Algunos niveles del Wario y el Sky Crawlers de Namco me esperan).

Por otra parte esta navidad espero visita de los viejos amigos, así que las borrachinas al SingStar estarán a la orden del día y no, no habrá videos Smiley: burla

Un par de recomendaciones finales, la primera y más importante el nuevo proyecto retro-enciclopedia que ha nacido hace unas semanas y en las que se lleva trabajando muchos meses para tenerlo listo para estas fechas: PixelGordo, un proyecto muy prometedor y a buen seguro que no le quitaré ojo! La otra es un pequeño y desconocido hallazgo en los repositorios de Ubuntu OpenArena, que usa el engine de Quake3 (liberado hace tiempo por ID) pero usando texturas y mapas propios y por tanto haciéndolo completamente libre y gratuito, bueno pues nos estamos echando estos días unos vicios de aúpa Smiley: Muy contento!

Imagen del articulo

Un Saludo y lo dicho, feliz frikinavidad Smiley: guiño