MinecraftMin

Mods y programas externos => Mods => Desarrollo de Mods => Mensaje iniciado por: Alfomega en Abril 11, 2017, 04:11:01 pm

Título: [DMForge] IV.- Objeto genérico (GenericItem.java)
Publicado por: Alfomega en Abril 11, 2017, 04:11:01 pm
Tras los bloques, llega la hora de hacer un objeto y, por tanto, la clase genérica para crearlos.
Esta clase es muy sencilla, tanto para crearla como para utilizarla, ya que los objetos en Minecraft no tienen casi opciones y, además, tiene muchas similitudes con la de los bloques.
Antes de empezar:
Habrá que crear un nuevo paquete para agrupar las clases genéricas de objetos, algo como nombreMod.generic.item.

Clase GenericItem
Dentro de este nuevo paquete creamos la clase GenericItem que extienda la clase net.minecraft.item.Item.
(https://i.gyazo.com/72a738a25a838a3203bc24e31b9329d9.png)
Una vez creada la clase, añadimos un atributo para guardar el nombre del objeto:
(https://i.gyazo.com/b0e5bef9bccc9b00f307a86767c7f576.png)
Ya que es una clase genérica y posiblemente vayamos a heredar la clase en un futuro, le ponemos protected en vez de private.

Constructor
Ahora viene crear el constructor:
(https://i.gyazo.com/0950e5f25d883d98ff204cc64d84c112.png)
El método es parecido al de la clase GenericBlock de la segunda parte de este tutorial, solo que en este caso solo tiene los atributos name y tab, para establecer el nombre y la pestaña del modo creativo respectivamente.
La única diferencia con respecto a los bloques es que con los objetos puedes añadirlos al registro directamente en el constructor, así que nos ahorramos el método register().

Rareza e información / descripción (opcional)
En caso de querer establecerle a un objeto una rareza en particular (color de nombre) y / o una información adicional / descripción (texto debajo), podemos hacerlo añadiendo un par de cosas más a la clase.
Lo primero es añadir dos atributos más que almacenarán esta información:
(https://i.gyazo.com/766743bfba90cda2e03a6279b1cb7b97.png)
La primera guarda la rareza del objeto. En el Minecraft hay cuatro guardadas en la clase EnumRarity, EnumRarity.COMMON = blanco (por defecto), EnumRarity.UNCOMMON = amarillo, EnumRarity.RARE = aqua and EnumRarity.EPIC = morado claro
La segunda es un array de Strings, donde cada elemento es una línea de texto a mostrar. Mediante la clase EnumChatFormatting podemos ponerle color al texto tal como se hace con los libros y demás, solo hay que poner EnumChatFormatting.<color>.toString() donde <color> es el color o el comando que queremos:
(https://i.gyazo.com/8b6c5ecb4ca4bbbf7cf5d5694d8158f8.png)
Una vez tenemos los atributos, tenemos que crear un nuevo constructor que admita establecer estos dos valores nuevos:
Por último, tendremos que sobreescribir dos métodos que son los encargados de que esto funcione.
El primero es un getter normal y corriente, pero el segundo añade línea a línea la descripción del objeto, siempre que exista.
La anotación @SideOnly(Side.CLIENT) indica que solo será ejecutado del lado cliente, ya que es algo meramente visual y al servidor no le interesa.

Otros
Una vez tenemos lo demás, añadimos un get para el nombre para poder acceder al él en caso de necesitarlo:
(https://i.gyazo.com/dff6f7df4eeee4787e95019149643a71.png)

Y con esto, ya tenemos nuestra clase genérica para los objetos.
Título: Re:[DMForge] IV.- Objeto genérico (GenericItem.java)
Publicado por: Alfomega en Mayo 07, 2017, 05:39:10 pm
Acabo de corregir la segunda imagen que no estaba actualizada con respecto al código.
Título: Re:[DMForge] IV.- Objeto genérico (GenericItem.java)
Publicado por: zahkruin en Enero 14, 2018, 06:49:31 pm
Otro apartado añadido al mod. Poco a poco va tomando forma. Muchas gracias por el tutorial   :) :)