Hola a todos. He estado en esta comunidad desde hace ya un par de meses, y sé que soy nuevo en esta comunidad a comparación de otros grandes usuarios que nos acompañan día a día en mundo-minecraft.
Me he decidido escribir este post, en el que intentaré exponer de manera clara y bien explicada las ventajas de incluir un plugin para el servidor en el que estoy trabajando muy duro, que ya tiene algunos meses de madurez. Cabe resaltar que el testeo de este plugin ha sido el que yo le he podido brindar. Más adelante está la historia de desarrollo de este plugin.
==Historia de Desarrollo==
El principal momento en que yo le puedo dar un desarrollo pleno a este plugin es cuando estoy de vacaciones de verano, invierno o de semana santa. Es cuando mis estudios me lo permiten, que ya pronto seré Universitario. Así que el inicio de este proyecto nace hace en mis vacaciones de verano en el 2012. Comenzó como una exploración de mis conocimientos que había estado adquiriendo ese mismo año con un libro de Java. El plugin consistía en la primera función de el plugin: un teleportador.
Mi idea era conseguir un teleportador inigual. Y lo que se me ocurrió fue hacelo temporal. En ese momento de mi vida estaba jugando y deleitándome con el juego de Steam: Portal 2. Entonces me puse manos a la obra. Y finalmente lo conseguí. Una versión muy básica, que aún le hacía falta corregir algunos detalles en el funcionamiento, pero no descansé con eso, sentía que necesitaba hacer más, que necesitaba explorar más cosas. Entonces se me ocurrió una mensajería. Pero de nuevo me encontraba con la particular necesidad de querer crear algo que nadie había hecho. Entonces lo planee.
Tenía que ser un sistema de mensajería que te permitiera escribir correos a personas que no estén conectadas pero con la particularidad de que tenían que ser más largos de lo que el chat me permitiera. Entonces me puse a la obra, quedó muy sencillo y muy inútil. Se me acabaron las vacaciones. Abandoné el proyecto hasta las vacaciones de invierno. Dónde sorprendentemente me quedé enganchado en el proyecto. Comencé a mejorar el sistema de mensajería. Dónde se gastara la menor cantidad de memoria posible. Donde el sistema no fuera tedioso. Al final quedó algo que me gustó. También hice un sistema de guía por compás. Donde esta función -que sigue en el plugin- quedó muy precaria porque no es realmente útil. Porque existen mods con mapas en los que puedes colocar marcadores y no funciona en en nether ni en el end, pero ¡hey!, con la función integrada al servidor no tienes que instalar ningún mod.
Así seguí hasta Marzo del 2013, dónde conseguí aprender muchas cosas, optimizar mi trabajo, optimizar los cálculos de procesador, optimizar memoria, optimizar espacio en disco, optimizar todo. Decidí reconstruir las bases de mi plugin para hacerlo más estable. Durante un mes reconstruí las bases mientras desarrollaba más funciones para el plugin. Entendía todo de una manera muy peculiar, donde si encontraba un error prácticamente sabía dónde y cómo arreglarlo. Me sentía uno con el código. Y nació la gran función de mi plugin. O por lo menos a la que más me he dedicado tiempo para desarrollarla y hacerla mejor.
En ese momento dónde necesitaba probarla, intenté hacer un llamado al administrador de otra comunidad que ya no existe. (o por lo menos no como yo la conocía, ya que el administrador decidió borrar todo, los mundos, los foros y el sitio, para establecer a mi parecer una tiranía sobre los jugadores que decidieron quedarse o que recién entran).
El administrador aceptó, con todos sus riesgos. Y les puedo decir que fue genial. Los jugadores que pudieron usarla les fascinaba. A unos les gustaba mucho la parte de los warps temporales. A otros les gustaba la función del mercado. Aprendí mucho de los errores. Diario hacía mejoras y algunas veces por semana le mandaba la siguiente versión. Mejoré la memoria, las acciones de lecto escritura de archivos. Optimicé todo.
Hasta que mi vida estudiantil se puso apretada. Intenté anteriormente hacer un pedido a esta comunidad, pero no respondió. Quizá porque el contenido del tema era casi nada y no se daba a entender por sí mismo. Esa es la razón por la cual estoy redactándoles esto a ustedes.
Esto es una petición para esta comunidad, porque me siento con la confianza de presentarles un plugin con características que puede hacerla mejor, y no solo eso, si no que tendrán la experiencia de poder tocar las hebras de desarrollo de este proyecto que es muy importante para mí. Este proyecto - si me lo permiten - quedará con una enorme huella dentro de él. No se podría pensar en él sin remitirse a esta comunidad. Los invito, amigos míos, a hacer de este humilde proyecto un proyecto de esta comunidad.
=Más sobre el plugin=
Ahora intentaré exponer las características -funciones- de este plugin. Con todo y sus defectos. Y las conclusiones de cada uno.
==Temporal Warps
Te permite hacer puntos de teletransporte temporales. La duración de cada punto de teletransporte -o como a mí me gusta llamarles "warp"- dependerá de lo que el usuario -y configuraciones- se puedan permitir.
Cada minuto que dure el warp se cobrará por adelantado al usuario. O sea que si se quiere un warp de dos minutos, se cobrarán dos minutos. Es como de prepago.
Y existen dos tipos de warps personales o globales.
Los personales se crean sin nombre y están "atados" al usuario. Es decir que el sólo el usuario tiene acceso a él. Como no tienen nombre, sólo puede cada usuario hacer uno.
Los globales son todos aquellos que se crean con nombre y cualquier persona que ponga el comando con el nombre de ese portal tendrán acceso a él.
Esto está hecho para poder comunicarnos con otros usuarios rápidamente, que le queremos dar -o donar- un objeto. Qué queremos guardar un lugar para regresar rápidamente a el.
Ya escucho en mi cabeza frases como "eso le quita la diversión al juego", y creo que tengo una respuesta a eso. La diversión a un juego se la otorgas tú. Sería corromper la libertad que minecraft da al que quiere modificar el juego para hacerlo más rápido o más lento. Quizá en el juego te hayas encontrado con la necesidad de ir por algo rápido, como materiales de construcción y no perder el tiempo con viajes largos. No se lo tomen a mal. Sólo es opinión, y finalmente, ¿Quién va a defender mi obra más que yo?
== Compás
Permite crear punto que pueden ser seguidos por un compás de minecraft. Pero tiene las limitantes que minecraft impone sobre los compás. Estas limitantes son: No son posibles de usar en el Nether, ni en el End. Y es difícil saber dónde está exactamente ese punto en todo el mapa. Sobre todo la coordinada de la altura.
Como anteriormente dije, esta función fue un experimento fallido porque existen otras soluciones mejores. Pero lo dejo en el plugin por tres cosas. 1) Nostalgia 2) Quizá a alguien no le venga de más. 3) No necesitaría el usuario ningún mod en su cliente para experimentar una sencilla función como esta.
== Libería.
Existe una función de librería. Donde funciona como si el editor fuera el servidor. Y entonces él se encarga de distribuirlo.
Para exponer con claridad la función empecemos por la cadena del proceso que tienes que llevar a cabo para publicar un libro y ganar dinero con ello.
1) Escribe un libro
Esta parte a mi opinión es la más importante. Tiene que ser un texto atractivo, una obra maestra.
2) Ponle precio y publícalo.
La parte sencilla es publicarlo. Pones el libro en tu mano. En el comando pones el precio y se envía una copia al servidor. Y conservarás tu manuscrito.
3) Informa a los demás como lo haz publicado para que lo puedan buscar o bien proporcionales el número que el editor te ha asignado.
Hay dos partes importantes en este paso. Para la facilidad de tus usuarios lectores tienes que facilitarles el comando que van a usar para comprar el libro. Y entre más vendas puedes tener un lugar en la lista de los best sellers y por tanto tener aún más ventas.
4) Espera a que se venda tu libro.
Si aún después de esperar no se vende tu libro, revisa que hayas hecho el tercer punto. Avísale a tus amigos lectores!
5) Recoge tus ganancias.
Cada vez que vendas un libro serás notificado por chat. Y podrás recoger ganancias de tus libros. Es una manera más de obtener dinero en minecraft.
A mi opinión es una manera muy divertida de publicar libros, y ¿quién sabe? quizá descubramos algún Shakespeare entre nosotros.
== Mensajería.
En la historia de desarrollo hablé un poco de él, así que intentaré no repetir la misma información.
Es un servicio de correos que tiene las peculiaridades de poder mandar un mensaje extenso a un usuario que puede no estar conectado.
Para explicar eso del mensaje extenso debo recurrir -nuevamente- a la práctica del ejemplo.
A la hora de redactar lo puedes hacer de dos maneras. La larga y la corta.
La corta es como el comando de tell, que pones el usuario y el mensaje y das al enter.
La larga es aún más interesante. La primera ventaja es que te permite añadir a más de un usuario. Es decir que el mensaje se copiará en cada una de las bandejas de correo de tus destinatarios. Después con un comando o más añadirás el mensaje. Es decir que puedes escribir un correo a lo que te alcance la barra de comandos, y después poner el mismo comando para añadir un poco más al mensaje de tu correo.
Al final, ya que tengas todo el mensaje escrito, escribirás el comando para enviarlo.
También pensé en los servidores que les quieren dejar un mensaje a todos sus usuarios. Hay un comando para eso.
Sinceramente es un comando que pienso que puede ser útil si se usa. Luego es conflictivo encontrarte con otos usuarios por cuestiones de horario. O si le querías dejar un mensaje a algún usuario y se desconectó y no lo verás de nuevo. Yo que sé. Puede ser útil tenerlo.
== Ayuda
El administrador de la comunidad que les contaba pidió una función para hacer comandos de ayuda. Ya que tenían un plugin de otra persona pero tenían que modificar el código fuente si querían poner otros mensajes, y este tenía sus propias limitaciones.
Así que me decidí hacer mi propia función de comandos de ayuda con una gran flexibilidad. Y les puedo decir con seguridad que quedó estupendo, o por lo menos para mí tiene todo lo que pude haber pedido.
Por lástima para el administrador se le hizo difícil de configurar y lo abandonó, pero eso sólo me hizo pensar que es complejo por su gran potencialidad que tiene.
La más importante de sus características es que es tremendamente personalizable.
- Puedes indicar el nombre del comando que quieres poner. (O comandos, no hay límite).
- Puedes hacer sub comandos (y sub, sub, sub, sub, comandos)
- Puede inhabilitar otros comandos.
Es decir que si un comando tiene el mismo nombre puede sobre escribirlo. Esta función salió por la propia naturaleza del código de esta función. Pero lo veo como una ventaja.
- Puedes usar códigos de colores y formatos.
- Puede hacer libros.
Esta es una función que seguro adorarán. Puedes hacer comandos que directamente te den un libro. Es configurable el título, autor y contenido. Así si desde administración se quiere hacer un libro explicando algún tema como el mercado, ciudades, etc. Lo puedan hacer con esta función.
== Mercado
Esta es una de las funciones más importantes para mí. Es un mercado. Pero es más complejo que plugins de otros mercados. Y yo le veo un verdadero potencial. Espero que les guste.
Esta función nace en forma de pregunta. ¿Es posible dinamizar el flujo de un mercado desde el sistema? Y creo que la respuesta es el sistema - mercado resultante. Estoy muy feliz de ello. Es un gran logro para mí.
Pensaba que era muy aburrido un mercado estático, que nunca cambiara sus precios, que no hubiera sorpresas, que no importara la interacción de los usuarios en él. Para eso me puse a hacer una ligera investigación acerca de las leyes de oferta y demanda.
Encontré que el precio de un objeto estaba determinado por cuantas personas compraban y cuanta producción había.
Si se encontraba en plena producción pero no había compradores las cosas se abaratarían, si no hay la suficiente producción y mucha demanda entonces se volverían caras. Estas dos premisas fueron importantes en la idea general del mercado.
Al igual me encontré con el gran problema de solventar las incoherencias entre precios de objetos derivados de otros objetos.
Y entonces esto se volvió el problema a resolver. ¿Cómo iba a lograr una unidad en los precios de los objetos con un mercado totalmente voluble? La solución, la interconexión.
Los precios de los objetos dependen de otros objetos, de sus derivados. Es decir que un bloque de diamantes no puede saber su precio, sin saber antes cual es el precio del diamante. Entonces para que una tienda de este tipo funcionara tenía que yo hacer un archivo esencial, la estructura de la tienda, con todas sus interconexiónes. Y quedó algo muy interesante. Ya que la estructura de un archivo de texto plano no me permitía hacer con facilidad conexiones tipo araña o tipo web, ya que en el cálculo se iría al infinito. (Por ejemplo si para saber el precio de la madera tenía que revisar el precio de los palitos, y el precio de los palitos el de la madera.) Así que quedó una solución de una sola vía, y de forma ascendente. Los bloques de madera dependen del costo de 4 bloques de madera refinada, y el precio de cada bloque de madera refinada es el coste de 4 palitos. Entonces el precio de un bloque de madera es el precio de 16 palitos.
Y entonces ahora viene la parte interesante, la de las variaciones. Todo se da gracias a la interacción del usuario. Si hay muchos palitos entonces se abarata. Si hay pocos palitos se hace caro. ¿Y qué quiero lograr con esto? Más interacción. Si están baratos los palitos entonces compro muchos, lo que podría generar una escasez de palitos en la tienda, entonces al yo revisar el precio de los palitos y ver que está por las nubes puedo vender palitos a la tienda. Entonces es un juego de compra venta.
El argumento anterior está controlado. Es decir yo no puedo comprar y vender palitos infinitamente para volverme rico. El precio de compra por parte del servidor es al 60% -configurable- del precio de venta. Tiene la ventaja de que puedes controlar la venta o compra de ciertos artículos para no arruinar la cadena de interconexiones de precios de los objetos.
No solo eso, si no que el mismo sistema está hecho para fluctuar por si mismo. A través de marcadores de tiempo. Alguna vez se discutió el uso de procesador de esta función. Pero debo decirles que todos los cálculos son hechos hasta que un usuario los lance. Es decir que no hay procesos de fondo, calculando cada hora el precio de un objeto. El peor escenario para un objeto con las configuraciones por defecto, es que quede un objeto sin ningún movimiento durante seis meses, y sólo tardaría en responder el servidor menos de un segundo. Si el servidor tiene muchas peticiones de mercado - y otras funciones - no afectará a la memoria ni a las peticiones de lecto escritura. Qué en algunos servidores es penalizado un uso excesivo de los discos duros.
Está pensado para comunidades muy grandes con un uso intensivo del plugin, y lo que no esté optimizado, con una simple petición puedo intentar optimizarlo.
== Comentarios finales
Por último quiero remarcar que es un plugin que he desarrollado yo solo, en mis tiempos libres, pero que tengo la total confianza en que es algo que vale la pena pero que no he tenido tiempo de abrirlo a una comunidad. Deseo que este sea un proyecto de esta comunidad y espero que puedan valorar la oportunidad. Yo estoy completamente comprometido. Después de un año de desarrollo creo que tengo menos razones para abandonarlo ahora.
Si me lo permiten estaré completamente agradecido. No espero nada personal en esto. No espero fama, fortuna o beneficios egoístas.
Hay personas que se les da las construcciones, que se les da moderar, que juegan fantásticamente, entre otras cosas, pero a mí se me da esto y si esto les puedo dar, disfrútenlo. :)
EDITO 07/Jun:
Para los que estén interesados en el código, el código es libre, (es decir que cualquiera puede hacer versiones para sus propios fines y distribuirlo), y se encuentra en: https://github.com/elxris/SpiceCraft
Hoy liberé una versión con la función de Librería, más fácil de usar y mejorada. (Ahora soporta más de 10,000 libros sin problemas. Antes menos de 20.)
EDITO 09/Jun:
Hoy implementé la sugerencia de Kaybi, la de cobrar por pasar por un warp temporal. Es configurable y se puede poner sin precio.
He estado haciendo pruebas y no he encontrado más que algunos errores de traducción. Creo que el código del plugin está estable y no es volátil. Porque son sólo respuestas a comandos, el plugin no representa una carga para el servidor, ya que no es algo que esté llamándose a cada rato, como plugins antilag o de seguridad anti chetos.
EDITO 10/Jul:
He añadido una función sorpresa: Intercambios con animales. :D
Si le das unos pescaditos a un :Calamar: se los comerá y te dará una esponja.
Si le das una flor a un Villager, te dará otra flor. XD (Ladrones)
Si le das 16 huevos a cualquier animal de granja te dará un mobspawner de su tipo.
Si le das strings a una araña te dará una telaraña.
- Por supuesto todo esto es configurable y modificable -
La tienda tiene algunas mejoras que la hacen más sensible al usuario con el valor de producción en objetos dependientes de otros objetos de la tienda.
Se han corregido algunos pequeños bichos. (Pequeños, muy pequeños)
EDITO 13/Jul:
Gracias a muchos comentarios me he aventurado a hacer una nueva función; mejor digamos que es una extensión de la tienda.
Una de las mayores críticas es que todo era por comandos, así que intenté hacer algo al respecto, ya que quiero que pueda llegar a las personas que no llevan mucho a los comandos.
Ya que una imagen vale más que mil palabras les dejo una imagen:

En este nuevo concepto de tienda podrás navegar a través de ella haciendo click en los elementos. Ej: Vas a la categoría de comida y luego compras pan.
Cuando compres, el hacer click izquierdo compra uno, y el derecho compra un stack completo.
Si quieres vender algo, simplemente cógelo con un click y déjalo con otro click en la tienda.
(También funciona el Shift+Click)
Los objetos te muestran directamente la información que te mostraría el comando de información.
EDITO 4/Agosto:
He adicionado un nuevo sistema de tienda privada. Para abrir tu tienda virtual privada /shop @
Para abrir la de un amigo /shop @nombreAmigo
Es muy sencillo de usar. Arrastras los objetos que quieras vender. Si quieres quitarlos haz shift + click.
Si los quieres vender mas caros, click izquierdo, mas baratos, click derecho.
PD: Hoy el staff se reune para cofigurar los precios de la tienda. Esperen noticias pronto.