Message Types
Detailní dokumentace typů zpráv v Hytale Message API.
---
Přehled Typů
| Metoda | Popis | Použití |
|--------|-------|---------|
| Message.raw() | Prostý text | Statické zprávy bez překladu |
| Message.translation() | Přeložitelná zpráva | Zprávy s lokalizací |
| Message.empty() | Prázdná zpráva | Kontejner pro child messages |
| Message.join() | Spojení více zpráv | Kombinace zpráv |
| Message.parse() | Parse JSON zprávy | Deserializace z JSON |
---
Message.raw()
Vytvoří zprávu s prostým textem bez překladu.
Základní Použití
// Jednoduchá zpráva
Message msg = Message.raw("Hello World!");
player.sendMessage(msg);// Zkrácená verze
player.sendMessage(Message.raw("Welcome!"));
Z Dekompilovaného Kódu
// BuilderToolsPlugin.java
Message.raw(String.valueOf(total))// PortalDeviceActivePage.java
Message.raw(playerCount + "!").color(pinkEnoughColor)
// MessageFormat.java - s barvou a formátováním
Message.raw("\n") // Nový řádek jako separator
Kdy Použít
- Statické texty, které nepotřebují překlad
- Debug zprávy
- Dynamicky generované hodnoty (čísla, souřadnice)
- Separátory a formátovací znaky
---
Message.translation()
Vytvoří zprávu s překladovým klíčem pro lokalizaci.
Základní Použití
// Základní překlad
Message msg = Message.translation("server.commands.spawn.teleported");
player.sendMessage(msg);// S parametry
Message msg = Message.translation("server.commands.spawn.teleported")
.param("x", position.getX())
.param("y", position.getY())
.param("z", position.getZ());
Z Dekompilovaného Kódu
// RecipeCommand.java
context.sendMessage(
Message.translation("server.commands.recipe.forgotten")
.param("id", itemId)
.color(Color.GREEN)
);// BuilderToolsPlugin.java
Message.translation("server.builderTools.blocksEdited")
.param("key", key)
// BedInteraction.java - statická konstanta
private static final Message MESSAGE_SERVER_CUSTOM_UI_RESPAWN_POINT_CLAIMED =
Message.translation("server.customUI.respawnPointClaimed");
// MessageFormat.java - utility messages
private static final Message ENABLED =
Message.translation("server.general.enabled").color(Color.GREEN);
private static final Message DISABLED =
Message.translation("server.general.disabled").color(Color.RED);
Klíčové Konvence
// Struktura překladového klíče
"server.commands.{command}.{action}" // Příkazy
"server.customUI.{page}.{element}" // UI
"server.interactions.{type}.{message}" // Interakce
"server.formatting.list.{element}" // Formátování
"server.general.{key}" // Obecné
---
Message.empty()
Vytvoří prázdnou zprávu jako kontejner.
Základní Použití
// Prázdná zpráva pro přidání children
Message msg = Message.empty();
msg.insert(Message.raw("Part 1"));
msg.insert(Message.raw("Part 2"));
player.sendMessage(msg);
Z Dekompilovaného Kódu
// MessageFormat.java - list helper
public static Message list(@Nullable Message header, @Nonnull Collection values) {
Message msg = Message.empty();
if (header != null) {
msg.insert(Message.translation("server.formatting.list.header")
.param("header", header)
.param("count", values.size()));
if (values.size() <= 4) {
msg.insert(Message.translation("server.formatting.list.inlineHeaderSuffix"));
}
}
// ... další logika
return msg;
}
Kdy Použít
---
Message.join()
Spojí více zpráv do jedné.
Základní Použití
// Spojení více zpráv
Message combined = Message.join(
Message.raw("Hello "),
Message.translation("server.player.name").param("name", playerName),
Message.raw("!")
);
Interní Implementace
// Z Message.java
@Nonnull
public static Message join(@Nonnull Message... messages) {
return new Message().insertAll(messages);
}
---
Message.parse()
Parsuje JSON string na Message objekt.
Základní Použití
// Parse JSON zprávy
String json = "{\"RawText\": \"Hello\", \"Color\": \"#FF0000\"}";
Message msg = Message.parse(json);
JSON Struktura
{
"RawText": "Prostý text",
"MessageId": "server.some.key",
"Params": {
"key": "value",
"count": 42
},
"MessageParams": {
"nested": { "RawText": "Nested message" }
},
"Children": [
{ "RawText": "Child 1" },
{ "RawText": "Child 2" }
],
"Bold": true,
"Italic": false,
"Monospace": false,
"Underline": false,
"Color": "#FF0000",
"Link": "https://example.com"
}
---
Insert Methods
insert()
Přidá child zprávu.
Message msg = Message.empty();
msg.insert(Message.raw("First"));
msg.insert(Message.translation("server.key"));
msg.insert("Plain text"); // Automaticky zabalí do Message.raw()
insertAll()
Přidá více child zpráv najednou.
// S array
Message msg = Message.empty();
msg.insertAll(
Message.raw("One"),
Message.raw("Two"),
Message.raw("Three")
);// Se seznamem
List messages = getMessages();
msg.insertAll(messages);
Z Dekompilovaného Kódu
// PortalDeviceActivePage.java
msg.insert(Message.raw("- ").color("#6b6b6b6b")).insert(ref.getUsername());// MessageFormat.java - list building
for (int i = 0; i < array.length; i++) {
msg.insert(array[i]);
if (i < array.length - 1) {
msg.insert(separator);
}
}
---
Getters
getRawText()
Message msg = Message.raw("Hello");
String text = msg.getRawText(); // "Hello"Message trans = Message.translation("server.key");
String nullText = trans.getRawText(); // null
getMessageId()
Message trans = Message.translation("server.key");
String key = trans.getMessageId(); // "server.key"
getColor()
Message colored = Message.raw("Text").color("#FF0000");
String color = colored.getColor(); // "#FF0000"
getChildren()
Message parent = Message.empty()
.insert(Message.raw("Child 1"))
.insert(Message.raw("Child 2"));List children = parent.getChildren(); // [Child 1, Child 2]
getAnsiMessage()
Vrátí zprávu jako ANSI string (pro konzoli).
Message msg = Message.translation("server.welcome")
.param("name", "Player");
String ansi = msg.getAnsiMessage(); // Rozřešený text s parametry
---
Statické Konstanty (Best Practice)
Pro často používané zprávy je lepší vytvořit statické konstanty:
public class MyMessages {
// Definuj jednou, používej mnohokrát
private static final Message PLAYER_NOT_FOUND =
Message.translation("server.commands.errors.playerNotFound"); private static final Message SUCCESS =
Message.translation("server.general.success").color(Color.GREEN);
private static final Message ERROR =
Message.translation("server.general.error").color(Color.RED);
// Metody pro zprávy s parametry
public static Message playerTeleported(String name, int x, int y, int z) {
return Message.translation("server.commands.teleport.success")
.param("name", name)
.param("x", x)
.param("y", y)
.param("z", z);
}
}
---
FormattedMessage (Protocol)
Interně Message používá FormattedMessage pro síťovou komunikaci:
// Získání interní struktury
FormattedMessage formatted = message.getFormattedMessage();// FormattedMessage obsahuje:
// - rawText: String
// - messageId: String
// - params: Map
// - messageParams: Map
// - children: FormattedMessage[]
// - bold, italic, monospace, underlined: MaybeBool
// - color: String
// - link: String
---
Shrnutí
| Typ | Metoda | Kdy Použít |
|-----|--------|------------|
| Raw | Message.raw() | Statický text, čísla, debug |
| Translation | Message.translation() | Lokalizované zprávy |
| Empty | Message.empty() | Kontejner pro děti |
| Join | Message.join() | Kombinace více zpráv |
| Parse | Message.parse() | Deserializace JSON |