Enviar mensajes - Majhrs16/ChatTranslator GitHub Wiki

Enviar un mensaje traducido a un jugador:

Esta función te permite enviar un mensaje personalizado con ciertos valores por defecto al remitente y destinario o solamente al remitente(o mejor dicho, tu destinario).

Sintaxis:

public interface Messages {
	void sendMessage(
		Message original
	);
}

Ejemplo de uso:

import me.majhrs16.cht.translator.ChatTranslatorAPI;
import me.majhrs16.cht.events.custom.Message;

class Example {
	private ChatTranslatorAPI API = ChatTranslatorAPI.getInstance();

	Example() {
//		Crear un mensaje personalizado.
		Message from = new Message();

		from.setSender(player_or_console);

//		Quiero aclarar que cada objeto Message puede traducir y enviar mensajes personalizados independientemente de si este tiene o no otro objeto Message como destinario.
		from.getMessages().setTexts("mensaje");

//		Traducir el mensaje del español al inglés.
		from.setLangSource("es");
		from.setLangTarget("en");

		API.sendMessage(from);
	}
}

Enviar un mensaje traducido a varios jugadores:

Esta función te permite enviar un mensaje personalizado al remitente y a los destinarios al mismo tiempo. Existen dos variantes del método broadcast con diferentes usos:

1.0. Broadcast de bajo nivel.

Sintaxis:

public interface Messages {
	void broadcast(
//		Lista de remitentes(Pueden ser todos iguales),
//		cada uno con su propio destinario.
		List<Message> messages,

//		Lambda para controlar a cada mensaje.
		Consumer<Message> broadcastAction
	);
}

Ejemplo de uso:

import me.majhrs16.cht.translator.ChatTranslatorAPI;
import me.majhrs16.cht.events.custom.Message;

import java.util.ArrayList;

class Example {
	private ChatTranslatorAPI API = ChatTranslatorAPI.getInstance();

	Example() {
		List<Message> froms = new ArrayList<>();
		String mensaje = "Hola";

//		Crear el mensaje para el remitente.
		Message remitente = new Message();
		remitente.setSender(from_player);
		remitente.getMessages().setTexts(mensaje);

//		Al ser el mismo idioma origen y destino, no se traducira.
		remitente.setLangSource("es");
		remitente.setLangTarget("es");

//		Crear el mensaje personalizado para el destinario 1
		Message destinario1 = new Message();
		destinario1.setSender(to_player);
		destinario1.getMessages().setFormats("$ct_messages$");
		destinario1.getMessages().setTexts(mensaje);

//		Si traducir el mensaje para el destinario 1.
		destinario1.setLangSource("es");
		destinario1.setLangTarget("en");

		remitente.setTo(destinario1);
		froms.add(remitente.clone());

//		Es importante cancelar el from una vez usado para evitar duplicar el mensaje por cada destinario.
		remitente1.setCancelledThis(true);

		Message destinario2 = new Message(); // Crear el mensaje personalizado para el destinario 2
//			...

		remitente1.setTo(destinario2);
		froms.add(remitente1.clone());

//		Enviar los mensajes personalizados a los remitentes y destinatarios usando por defecto ChatLimiter.
//		Si se especifica un Consumer<Message> se puede controlar cada remitente(y por ende cada destinario) manualmente.
		API.broadcast(froms, ChatLimiter::add);
	}
}

1.1. Broadcast de medio nivel.

Esta variante de la anterior, es la simplificacion del segundo parametro, por defecto se usará ChatLimiter.

Sintaxis:

public interface Messages {
	void broadcast(
//		Lista de remitentes(Pueden ser todos iguales),
//		cada uno con su propio destinario.
		List<Message> messages
	);
}

Ejemplo de uso:

import me.majhrs16.cht.translator.ChatTranslatorAPI;
import me.majhrs16.cht.events.custom.Message;

class Example {
	private ChatTranslatorAPI API = ChatTranslatorAPI.getInstance();

	Example() {
		List<Message> froms = new ArrayList<>();
//			...

		API.broadcast(froms);
	}
}

2.0. Broadcast de alto nivel.

Esta variante es similar a la primera. Te permite enviar un mensaje a todos los jugadores más fácilmente. El parámetro model es un modelo de mensaje que se enviará a todos los jugadores online. La función se encargará de clonar inicialmente el mensaje modelo y luego modificarlo en función de cada jugador antes de enviarlo, además de cancelar cada remitente tras su primer uso para evitar duplicaciones inesperadas del mensaje por cada destinario.

Sintaxis:

public interface Messages {
	void broadcast(
		Message model,
		Player[] players,
		Consumer<List<Message>> broadcastAction
	);
}

Ejemplo de uso:

import me.majhrs16.cht.translator.ChatTranslatorAPI;
import me.majhrs16.cht.events.custom.Message;

class Example {
	private ChatTranslatorAPI API = ChatTranslatorAPI.getInstance();

	Example() {
//		Crear el mensaje modelo para los destinarios.
		Message to_model = new Message();
//			...
			to_model.getMessages().setFormats("$ct_messages$");

//		Crear el mensaje para el remitente.
		Message from_model = new Message();
//			...
		from_model.setTo(to_model);

//		Enviar el mensaje de cada objeto Message a todos los jugadores en línea(Incluyendo from) usando el mensaje modelo atravez del ChatLimiter.
		API.broadcast(from_model, util.getOnlinePlayers(), API::broadcast);
	}
}

2.0.1. Broadcast junto con util.createChat.

Sintaxis:

[[Se explica en su seccion|Utilidades#util.createChat].

Ejemplo de uso:

import me.majhrs16.cht.translator.ChatTranslatorAPI;
import me.majhrs16.cht.events.custom.Message;

class Example {
	private ChatTranslatorAPI API = ChatTranslatorAPI.getInstance();

	Example() {
		Message model = util.createChat(
			sender,
			new String[] { messages },
			langSource,
			langTarget,
			null // null hace referencia al chat normal.
		);

		API.broadcast(model);
	}
}

2.1. Broadcast para tambien la consola!

Esta variante de la anterior, permite ejecutar demás acciones, permitiendo la oportunidad de agregar por ejemplo el message de la consola u otras acciones.

Ejemplo de uso:

import me.majhrs16.cht.translator.ChatTranslatorAPI;
import me.majhrs16.cht.events.custom.Message;

import me.majhrs16.cht.util.util;

class Example {
	private ChatTranslatorAPI API = ChatTranslatorAPI.getInstance();

	Example() {
		Message model = util.createChat(
			player,
			new String[] { mensajes },
			from_lang,
			from_lang,
			null
		);

		Message console = util.createChat(
				Bukkit.getConsoleSender(),
				new String[] { mensajes },
				from_lang,
				API.getLang(Bukkit.getConsoleSender()),
				"console")

//			Esto es para que sean accesibles las %varaibles% del remitente desde el destinario.
			.setSender(event.getPlayer())

//			Evitar duplicacion para el remitente.
			.setCancelledThis(true);

		API.broadcast(model, util.getOnlinePlayers(), froms -> {
			froms.add(console);
			API.broadcast(froms);
		});
	}
}

En todos los casos, los mensajes se enviarán a los remitentes y destinatarios especificados con sus respectivas traducciones y personalizaciones.

3.0. Lanzar el evento Message

Finalmente, si desea enviar al sendMessage y al mismo tiempo notificar a todos sobre este mensaje, puede hacerlo de la siguiente forma:

Ejemplo de uso:

import org.bukkit.Bukkit;

class Example {
	Example() {
		Message from = new Message();
//			...

		Bukkit.getPluginManager().callEvent(from);
	}
}

Recuerde que el objeto Message es tambien un evento ademas de contenedor tipo clase para los grupos de formatos.

⚠️ **GitHub.com Fallback** ⚠️