HyCodeYourTale

Message Types

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

  • Sestavování složitých zpráv z více částí

  • Dynamické generování zpráv

  • Seznam položek s různým formátováním

---

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 |

Last updated: 20. ledna 2026