Enviar mensajes - Majhrs16/ChatTranslator GitHub Wiki
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);
}
}
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:
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);
}
}
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);
}
}
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);
}
}
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);
}
}
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.
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.