Modwright Studios

Ports, backports y compatibilidad para Minecraft modded

Disponible para trabajar

Portar, retroportar y revivir mods de Minecraft, en cualquier versión y cargador

Soy danisansietev, fundador de Modwright.

Porto y adapto mods entre Forge, Fabric y NeoForge, sobre todo alrededor de Forge 1.20.1.

Mándame el mod y dime dónde quieres usarlo. Si no sabes si el port es viable, no pasa nada: eso lo reviso yo.

Cotizar es gratis · Todo queda por escrito

danisansietev
Criss
Nightwhitey
Kema

El resto del arte de la página es del mismo mundo. Criss juega los ports y los muestra; Nightwhitey programa y dibuja conmigo.

Pixel-art moth flying over a grass block shaped like the Discord logo.

Comunidad de Minecraft modded

Entra al Discord

El mismo mod, en tu versión

Tu pack se queda con el mod en vez de perderlo por un salto de versión.

Mover un mod entre loaders Fabric, NeoForge y Forge, unidos cada uno con los otros dos y con flechas en ambos sentidos. Fabric NeoForge Forge

Entre Forge, Fabric y NeoForge.

De Fabric a Forge es el camino más largo, y el que más hago.

Trabajo real

Algunos de los mods que ya he porteado. Cuando el trabajo es público, enlazo siempre al proyecto original.

LGPL-2.1 NeoForge 1.21.1
Publicado en CurseForge

Mindful Eating

Abrir en CurseForge →
Notas del port →

Forge 1.20.1 → NeoForge 1.21.1

El mod de variedad de comida de camcam_burger, llevado de Forge 1.20.1 a NeoForge 1.21.1. Se lo entregué a su creador y está publicado en la página oficial del mod.

Salto
1.20.1 → 1.21.1
Loader
Forge → NeoForge
Mods de librería
De 2 a 1
Probado
En el juego, supervivencia
Detalle técnico

Rehíce el sistema de datos por jugador sobre los data attachments nativos, quitando la dependencia de Blueprint a sugerencia del creador, y pasé los ajustes de comida al sistema de componentes de 1.21. Probado arrancando el juego, en supervivencia. Anoté lo que se rompió sin avisar al pasar a NeoForge 1.21.1.

Todos los derechos reservados Forge 1.20.1 NeoForge 1.21.1
Revisado por su creador

Puppy Paws

Abrir en CurseForge →

Fabric 1.20.1 → Forge 1.20.1

El mod de perros de compañía de Shaunt y Café, pasado de Fabric a Forge. Su código no era público, así que lo rehíce a partir del jar publicado. Después hice igual la versión para NeoForge 1.21.1.

Loader
Fabric → Forge
Versión
1.20.1, sin cambio
Origen
Rehecho desde el jar
Probado
Servidor dedicado
Open the poster celebrating 1,000 Forge downloads of Puppy Paws

Más de 1.000 descargas en ForgeContadas en CurseForge →

Detalle técnico

Cinco razas, doce variantes de pelaje, el cavado del golden retriever y el disco Melody, todo rehecho sobre los registros y eventos de Forge, con los spawns pasados a biome modifiers por datos. Comparé lo rehecho contra el jar original, lo probé en un servidor dedicado y sus creadores revisaron el resultado.

Más tarde, un port a NeoForge 1.21.1 sobre GeckoLib 4.8.3: mismos modelos, texturas y comportamiento, rehechos sobre los registros de NeoForge en vez de los de Forge. Probado arrancando el juego, y cada clase y archivo comprobados byte a byte contra la compilación probada.

CC BY-NC-SA 4.0 Forge 1.20.1
Gratis, código en GitHub

Gipples Galore

Abrir en CurseForge →
Notas del port →

Fabric 1.20.1 → Forge 1.20.1

El mod de criaturas de cueva de Team Jelly, pasado de Fabric a Forge 1.20.1. Lo publiqué gratis y con crédito, y cualquiera puede leer el código del port.

Loader
Fabric → Forge
Versión
1.20.1, sin cambio
Probado
Servidor y cliente
Detalle técnico

48 clases pasadas a los eventos de registro de Forge, con los spawns como biome modifiers y el botín extra por LootTableLoadEvent. También arreglé un modelo de bloque que apuntaba a una textura que no existía, un fallo que también tiene el original de Fabric. En un servidor dedicado, las colonias salen solas en chunks nuevos y la gelatina aparece en el botín de las ciudades antiguas. En el cliente revisé las 17 gelatinas y sus efectos. La versión 1.0.1 arregla un crash cuando también está instalado Galosphere. Anoté lo que suele romperse al pasar de Fabric a Forge.

MIT Forge 1.20.1
Gratis, código en GitHub

Quartz Elevator

Abrir en CurseForge →
Notas del port →

Fabric 1.20.4 → Forge 1.20.1

Los ascensores de cuarzo de Aton-Kish, llevados de Fabric 1.20.4 a Forge 1.20.1. Gratis, con crédito y con el código en GitHub.

Loader
Fabric → Forge
Versión
1.20.4 → 1.20.1
Probado
Servidor y cliente
Detalle técnico

La configuración pasó de Auto Config a un archivo de Forge, con las mismas cinco opciones. Los slimes no disparan el evento de salto de Forge, así que mantuve los mixins del original en vez de usarlo. En un servidor dedicado y en el cliente probé subir y bajar, los dos tipos de ascensor, las cuatro recetas y reabrir un mundo guardado.

MIT Forge 1.20.1
Gratis en CurseForge

Expanded Delight

Abrir en CurseForge →
Notas del port →

Fabric 1.20.1 → Forge 1.20.1

El addon de ianm1647 para Farmer's Delight, pasado de Fabric a Forge 1.20.1. El original nunca tuvo versión para Forge ahí, y en sus comentarios la seguían pidiendo.

Loader
Fabric → Forge
Versión
1.20.1, sin cambio
Fallos arreglados
3 del original
Probado
Servidor y cliente
Detalle técnico

Arreglé tres fallos que también tiene el original 0.3.2. El brote de canela no tenía modelo, el tronco de canela puesto de lado tampoco, y el brote nunca crecía. Las etiquetas de recetas y botín ahora son las de Forge. En el cliente usé el mortero y el exprimidor, planté y coseché espárragos y reabrí el mundo. Todavía no encuentro un árbol de canela en las junglas que revisé.

Tu mod puede ser el próximo
Cotizar

Todo lo que he publicado está en mi perfil de CurseForge, y parte del código está en GitHub.

Compila. Eso no prueba nada. Antes de entregar pruebo el mod dentro del juego y reviso las partes que realmente podían romperse durante el port. Una de esas comprobaciones, en detalle.

Encargos privados

La mayoría de los encargos pagados son privados: los archivos y el nombre del cliente son suyos. Lo que sí puedo contar es que desde septiembre le hice tres trabajos al dueño de un pack de Forge 1.20.1 con casi 600 mods.

  • Un addon de hechizos llevado de NeoForge 1.21.1 a Forge 1.20.1. Empezó con 724 errores de compilación. Ya compilando, el servidor dedicado sacó seis fallos más que leyendo el código no se veían, y los arreglé antes de entregar. Un fallo que apareció después de la entrega lo arreglé sin coste.
  • Un resource pack de compatibilidad entre dos mods de su pack, respetando la licencia GPLv3 y el crédito del pack en el que se apoya.
  • Un addon para que un mod de movimiento y combate funcione con sus mods de stamina y animaciones, con un interruptor para cada movimiento.
Parte de ese tercer encargo, entregada esta semana: con el addon, Recrafted Moves mantiene sus propias poses en tercera persona al trepar, lanzar, cubrirse o planear, mientras Serious Player Animations y Better Combat se encargan del resto. Recrafted Moves es de DudGames, y el addon solo funciona junto a él.

Trabajo privado para mi propio pack

Ports, arreglos y compatibilidad que hice para mi propio pack de 600+ mods. La mayoría de esas licencias no me deja publicar un port, así que quedan privados y no me vas a encontrar en las páginas de esos mods. Cada recuadro lleva al mod original y a su autor. Si quieres ver uno funcionando, pregúntame en Discord y te muestro una captura de mi pack.

Cada mod y cada logo de aquí es de quien lo escribió, y se muestran para identificar su trabajo.

Ports, backports y cambios de loader

Si quieres saber cómo pongo precio a un port, lo explico en cuánto cuesta un port, y por qué.

Ports y backports

Mover un mod a otra versión de Minecraft, hacia delante o hacia atrás, intentando conservar el comportamiento del original.

Cambio de loader

Adaptar un mod entre Forge, Fabric y NeoForge cuando un pack necesita otra plataforma.

Compatibilidad y crashes

Encontrar por qué dos mods chocan, por qué algo deja de cargar o qué está rompiendo una función concreta.

Mantenimiento y rendimiento

Arreglar ports existentes, cambios de dependencias y problemas de rendimiento cuando el origen está en el mod o en su integración.

¿Tu caso no encaja en ninguno? Mándamelo igual y te digo si se puede hacer.

Arma tu ticket

Rellena lo que sepas, copia el resumen y abre un ticket privado desde #pedidos en Discord. Pégalo dentro de tu ticket. Lo que no sepas, déjalo en blanco.

¿Eres el autor o tienes permiso?
Listo para enviar

Abrir Discord
Cuando entres, ve a #pedidos: ahí se abren los tickets.

Cómo va un encargo

Todo por escrito. Sin llamadas ni reuniones.

Paso 1

Mándame el mod

Pásame el enlace o el archivo y cuéntame qué necesitas. Con eso puedo empezar a revisarlo.

Paso 2

Lo reviso y te doy un precio

Compruebo si el trabajo es viable y qué permiso o licencia aplica. Después te digo qué incluye, cuánto cuesta y cuánto debería tardar.

Paso 3

Acordamos y empiezo

Dejamos por escrito el alcance, el precio y la forma de pago. Los trabajos grandes pueden dividirse en etapas.

Paso 4

Lo porto y lo pruebo

Hago el trabajo sobre la versión y el entorno acordados. No me quedo en que compile: lo arranco y pruebo las partes importantes. En los trabajos largos te mando capturas o un video corto del avance.

Paso 5

Lo pruebas tú

Ves la build funcionando en tu propio pack o servidor. Si algo dentro de lo acordado no está bien, lo corrijo antes de cerrar el trabajo. El pago final va después, cuando ya lo viste funcionando.

Paso 6

Si algo mío falla, lo arreglo

Durante 30 días corrijo sin coste los fallos que haya introducido yo dentro del alcance y entorno acordados. Si después necesitas algo nuevo, lo vemos aparte.

Quién está detrás de Modwright

Soy danisansietev. Ahora mismo, si abres un ticket conmigo, la persona que habla contigo también es la que revisa y trabaja sobre el mod.

Close view of my character in a red and gold armour set with glowing green trim, standing in a field of purple flowers.

Empecé porteando mods para mis propios modpacks porque estaba cansado de perderlos cada vez que cambiaba de versión. Con el tiempo terminé haciendo lo mismo para otros.

Trabajo especialmente con Forge 1.20.1 y mantengo un pack grande donde pruebo compatibilidad. Ahí termino encontrando muchos de los problemas raros que ves en el laboratorio.

Ficha danisansietev

Loader principal
Forge 1.20.1
Pack de pruebas
600+ mods
En el estante
74 trabajos
Idiomas
Español, inglés

Gracias

Modwright está creciendo. Nightwhitey me ayuda con desarrollo y decisiones técnicas, Criss con contenido y difusión, y hay más gente que prueba lo que hago y me señala cuando algo no está bien. Y antes que todos ellos, los autores que escribieron estos mods y me dejaron acercarme a su trabajo.

Novedades del taller

REGISTRO // danisansietev

  • <danisansietev>

    le di una vuelta a la web, ahora el estante tiene buscador. si buscas un mod y no está, pídemelo

  • <danisansietev>

    Gipples Galore ya está en Forge 1.20.1, gratis y con el código en GitHub

  • <danisansietev>

    en el Discord somos 66 y hay canal para pedir ports. a los 100 porteo gratis el que gane la votación

  • <danisansietev>

    Mindful Eating ya está en NeoForge 1.21.1, lo porté con permiso de camcam_burger y está en su página oficial

Cosas que se rompen en un pack de 600+ mods

Mantengo un pack de pruebas enorme por mi cuenta. Ahí pruebo compatibilidad y termino encontrándome fallos que casi nunca aparecen cuando un mod vive solo.

Siete mods sin spawns

Siete mods cargaban bien. Sus mobs no aparecían. Los siete tenían la misma carpeta mal escrita: biome_modifier en vez de biome_modifiers. Forge la ignoraba sin un error útil. Una letra estaba dejando fuera los spawns de siete mods.

Detalle técnico

Forge lee los biome modifiers de una carpeta llamada biome_modifiers. Siete mods de mi pack la tenían en singular, biome_modifier, así que Forge se saltó la carpeta entera en silencio: ni aviso ni error. Se ve igual que un mod roto. Es una letra.

Mutant More, dado por imposible

Llevaba semanas fuera de mi pack porque reventaba al cargar, y la idea era que había que reescribirlo. No hacía falta: su config de mixins decía JAVA_16 y sus 577 clases estaban compiladas para Java 17, así que el cargador de mixins las rechazaba todas. Cambié esa palabra en mi copia, después de comprobar en la propia librería de Mixin que JAVA_17 era un valor válido.

Detalle técnico

Mutant More llevaba semanas fuera de mi pack, reventando al cargar. La lectura anterior era que había que reescribir su bytecode. No hacía falta. Su config de mixins declaraba compatibilityLevel: "JAVA_16" mientras sus 577 clases estaban compiladas como Java 17, así que el cargador de mixins las rechazaba todas. Java 16 llega hasta la versión de clase 60; las clases eran 61.

JAVA_16 pasó a JAVA_17. Antes de tocar nada abrí mixin-0.8.5.jar, la versión que carga Forge 1.20.1, y leí su enum CompatibilityLevel para confirmar que JAVA_17 era un valor que aceptaría de verdad, en vez de suponerlo. Copia del jar original primero, y luego reempaquetado.

Mutant More es de AlexandersFunAndGames. Esa línea de config fue lo único que toqué, y solo en mi propia copia.

Fresh Animations en los mobs, Epic Fight en el jugador

Todo estaba bien configurado y Epic Fight seguía ganando. La mitad del arreglo era un datapack que no cargaba: le faltaba el pack.mcmeta y el log no decía nada. La otra mitad la terminé encontrando mirando cómo Epic Fight gestiona los renderers.

Detalle técnico

Fresh Animations en casi toda criatura, Epic Fight solo en mi personaje. Sacar a un mob de Epic Fight son dos cambios: una entrada del datapack corta su parche de combate, pero el mob se sigue dibujando por su propio renderer, así que Fresh Animations nunca llega a verlo. La otra mitad es un script que saca al mob de ese mapa de renderers al cargar el mundo. Encontré el reparto decompilando el motor de render.

La mitad que más tardó en aparecer. Le faltaba su pack.mcmeta, así que el loader se saltó la carpeta entera sin decir nada. Ahora las dos mitades nombran los mismos 24 mobs, y siguen cuadrando hoy.

Fresh Animations es de FreshLX, y Epic Fight de su propio equipo. Yo solo hice que compartieran mundo.

Más del laboratorio

Comprobé qué mods se animan solos

El 48% de sus criaturas ya venía animado. Nunca necesitaron Fresh Animations. Abrí 645 jars en vez de suponer.

Los números

Fresh Animations no hace nada por un mod que ya anima sus propias criaturas. Entre GeckoLib, AzureLib y Citadel: 305 mods, 3.951 criaturas. El escaneo convirtió un trabajo sin final en una lista corta.

Leí 414 jars antes de dejar entrar uno solo a mi pack

Sesenta y siete contradecían mis propias notas. Ocho no podrían haber cargado nunca. Solo me enteré abriéndolos uno por uno.

Qué había dentro de verdad

Guardo un almacén de mods que quizá quiera algún día. De ahí no pasa nada al pack hasta haberlo leído: los metadatos, el cargador para el que se compiló, la versión a la que apunta y si choca con algo ya instalado. Por ahí pasaron 414 candidatos y salieron repartidos en 103 listos para entrar, 192 a su debido tiempo, 44 que pedían una decisión y 75 en espera por una dependencia que falta o descartados a propósito.

Ocho no iban a cargar jamás. Tres no tenían mods.toml, o sea que ni siquiera eran mods. Tres traían JSON mal formado. Uno era una compilación de NeoForge y otro estaba compilado para otra versión de Minecraft. Todos estaban en esa carpeta con pinta de mod funcional, y mi propia hoja de cálculo decía que estaban bien.

Seis mods cuyo único trabajo era que otros mods se llevaran bien

Escribí los seis. Después borré los seis. Cinco de sus nombres siguen viviendo dentro del mod que se los tragó, a propósito.

Por qué siguen los nombres

Que un pack se porte bien significa escribir pegamento: entradas de spawn, tags, recetas y loot que le enseñan a un mod que existe otro. El mío había crecido hasta seis jars aparte que solos no hacían nada. Seis entradas más en la lista, seis cosas que mantener a la par, y dos de ellos traían la misma ruta de archivo, así que cuál ganaba se decidía de nuevo en cada arranque. Metí los seis dentro de los dos mods que ya eran míos y borré los jars.

No renombré ni un archivo. Los datos cargan desde el jar que los lleva, no desde el mod cuyo nombre está en la carpeta, así que rutas como omega_ssg_compat y omega_toasty_compat siguen dentro de un mod al que ya no pertenecen. Renombrarlas habría sido tocar todas las referencias sin ganar nada. Se lee raro y al juego le da igual.

¿Es tu propio mod?

A veces hago ports sin cobrar para los autores originales.

Tú recibes
  • El port sin coste.
  • El proyecto sigue siendo tuyo: tu página, tu licencia y tus descargas.
Yo pido
  • Permiso para mostrar el trabajo en el portafolio de Modwright y aparecer acreditado por el port.

Tiene que ser tu mod, o el de tu equipo con el sí de todos. No puedo aceptar todos: depende del tamaño y del tiempo que tenga disponible. Mindful Eating y Puppy Paws empezaron así.

My character standing on open grassland beside a large pale horned cow, with slimes in the distance.

¿Tienes un mod en mente?

Mándame el enlace, la versión que tienes y dónde quieres llevarlo. Si no sabes si es viable, no importa. Eso lo reviso yo.

The Modwright Discord server icon: a grass block cut in the shape of the Discord logo, over a Minecraft sunset.Únete al servidor
My character hanging in the air above an open sea, with the sun going down behind him.