Configuration
HyAnnouncer uses 7 separate JSON configuration files located in HyAnnouncer_tins/ directory.
Main Config
File: config.json
{
"Debug": false
}
Debug(boolean): Enable detailed logging for troubleshooting. Default:false
Chat Announcements
File: chat-announcements.json
Scheduled announcements sent automatically at intervals.
ROTATION Mode
HyAnnouncer uses ROTATION mode for all announcements:
- One global interval - All announcements share the same timing
- One at a time - Announcements rotate through the list sequentially or randomly
- Simple configuration - Only one time entry needed at the top level
- No overlap - Announcements never send at the same time
- Scheduled actions override - Announcements in
scheduled-actions.jsonare excluded from rotation
{
"Enabled": true,
"Interval": 60,
"RandomOrder": true,
"Prefix": "&6&l[INFO]&r ",
"RequirePlayers": false,
"Announcements": [
{
"Id": "welcome",
"Priority": 0,
"Enabled": true,
"Worlds": [],
"Permission": "",
"Lines": [
"&aThere are &e%total_players% &7players online."
],
"Link": "",
"Sound": ""
}
]
}
Settings:
Enabled- Enable/disable all scheduled announcementsInterval- Global interval in seconds for all announcements (default: 60)RandomOrder-truefor random selection,falsefor sequential rotationPrefix- Global prefix for all chat announcements (supports color codes, optional)RequirePlayers- Only send announcements when at least 1 player is online (default:false)
Announcement Entry:
Id- Unique identifier (required)Enabled- Enable/disable this specific announcement (default:true)Priority- Affects rotation order when RandomOrder=false (higher = first, default: 0)Worlds- Array of world names (empty = all worlds)Permission- Permission node (empty = all players)Lines- Array of message lines (each array element is a separate line)Link- Optional clickable URL (e.g., Discord invite)Sound- Optional sound to play with announcement (default: empty for chat)
Title Announcements
File: title-announcements.json
Center-screen title announcements sent automatically at intervals.
Uses ROTATION mode (same as Chat Announcements).
{
"Enabled": true,
"Interval": 60,
"RandomOrder": true,
"RequirePlayers": false,
"DefaultSubtitle": "&7Welcome to the server!",
"Announcements": [
{
"Id": "event",
"Priority": 0,
"Enabled": true,
"Worlds": [],
"Permission": "",
"Lines": [
"&a&lServer Event!"
],
"Subtitle": "&eJoin us for special activities",
"ShowSubtitle": true,
"Animate": false,
"Sound": "SFX_Rope_Break"
}
]
}
Settings:
Enabled- Enable/disable all scheduled title announcementsInterval- Global interval in seconds for all announcements (default: 60)RandomOrder-truefor random selection,falsefor sequential rotationRequirePlayers- Only send announcements when at least 1 player is online (default:false)DefaultSubtitle- Default subtitle for all title announcements (optional, supports color codes and placeholders)
Announcement Entry:
Id- Unique identifier (required)Enabled- Enable/disable this specific announcement (default:true)Priority- Affects rotation order when RandomOrder=false (higher = first, default: 0)Worlds- Array of world names (empty = all worlds)Permission- Permission node (empty = all players)Lines- Array of message lines (first line = primary title)Subtitle- Optional per-announcement subtitle override (empty = useDefaultSubtitle, not set = use second line fromLinesif available)ShowSubtitle- Whether to show subtitle (default:true)Animate- Whether to animate the title (controls major title effect, default:false)Sound- Optional sound to play with announcement (default:SFX_Rope_Breakfor title)
Subtitle Priority:
- If
ShowSubtitleisfalse, no subtitle is shown - If
Subtitlefield is set, it is used - If
DefaultSubtitleis set, it is used - Otherwise, the second line from
Linesis used (if available)
Notification Announcements
File: notify-announcements.json
Popup notification announcements sent automatically at intervals.
Uses ROTATION mode (same as Chat Announcements).
{
"Enabled": true,
"Interval": 60,
"RandomOrder": true,
"RequirePlayers": false,
"Announcements": [
{
"Id": "reminder",
"Priority": 0,
"Enabled": true,
"Worlds": [],
"Permission": "",
"Lines": [
"&aServer Reminder",
"&7Don't forget to vote daily!"
],
"Link": "https://example.com/vote",
"Sound": "SFX_Rope_Break"
}
]
}
Settings:
Enabled- Enable/disable all scheduled notification announcementsInterval- Global interval in seconds for all announcements (default: 60)RandomOrder-truefor random selection,falsefor sequential rotationRequirePlayers- Only send announcements when at least 1 player is online (default:false)
Announcement Entry:
Id- Unique identifier (required)Enabled- Enable/disable this specific announcement (default:true)Priority- Affects rotation order when RandomOrder=false (higher = first, default: 0)Worlds- Array of world names (empty = all worlds)Permission- Permission node (empty = all players)Lines- Array of message lines (first line = header, second line = content)Link- Optional clickable URLSound- Optional sound to play with announcement (default:SFX_Rope_Breakfor notification)
Scheduled Actions
File: scheduled-actions.json
Cron-based and duration-based scheduled actions that trigger announcements at specific times. Announcements listed in scheduled-actions are automatically excluded from regular rotation.
{
"Enabled": true,
"UseUtc": false,
"Actions": [
{
"Id": "scheduled_title1",
"Type": "title",
"Schedule": "5m",
"Enabled": true,
"Sound": "SFX_Rope_Break"
},
{
"Id": "scheduled_daily_title",
"Type": "title",
"Schedule": "0 12 * * *",
"Enabled": true,
"Sound": "SFX_Rope_Break"
}
]
}
Settings:
Enabled- Enable/disable all scheduled actions (default:true)UseUtc- Use UTC time instead of server local time (default:false)
Action Entry:
Id- Announcement ID from chat/title/notification configs (required)Type- Announcement type:"chat","title", or"notification"(required)Schedule- Schedule expression:- Cron mode: 5-field cron expression (e.g.,
"0 12 * * *"for daily at noon) - Simple mode: Duration string (e.g.,
"10s","5m","1h","2d")
- Cron mode: 5-field cron expression (e.g.,
Enabled- Enable/disable this specific action (default:true)Sound- Optional sound to play (overrides announcement's sound if set)
Schedule Formats:
Cron Expression (5 fields: minute hour day month weekday):
"0 12 * * *"- Every day at 12:00 (noon)"*/30 * * * *"- Every 30 minutes"0 0 * * 0"- Every Sunday at midnight"0 9,17 * * *"- Every day at 9:00 and 17:00
Simple Mode (duration strings):
"10s"- Every 10 seconds"5m"- Every 5 minutes"1h"- Every hour"2d"- Every 2 days
When an announcement ID is listed in scheduled-actions and enabled, it will be excluded from regular rotation. The announcement will only trigger at its scheduled times. If the action is disabled in scheduled-actions, the announcement will return to regular rotation.
If a scheduled action references an announcement ID that doesn't exist, it will be marked as invalid and won't run. Check the GUI or /ha info for warnings about invalid actions.
Welcome Messages
File: welcome-message.json
Private messages sent to players when they join a world.
{
"Enabled": true,
"Worlds": [],
"Permission": "",
"Target": "CHAT",
"Link": "https://hytale.com/",
"Lines": [
"&aWelcome &e%player% &ato the server!",
"&7You are in world: &b%world%"
]
}
Settings:
Enabled- Enable/disable welcome messagesWorlds- Array of world names (empty = all worlds)Permission- Permission node (empty = all players)Target- Display type:CHAT,TITLE, orBOTH(default:CHAT)Link- Optional clickable link URL (empty = no link). When set, the entire message becomes clickable- Example:
https://discord.gg/your-server - Default:
https://hytale.com/
- Example:
Lines- Array of message lines (each array element is a separate line)- For TITLE: First line = primary title, second line = subtitle
Join/Leave Announcements
File: join-leave-announcements.json
Broadcast messages when players join or leave.
{
"Enabled": true,
"JoinEnabled": true,
"LeaveEnabled": true,
"JoinTarget": "CHAT",
"LeaveTarget": "CHAT",
"JoinScope": "SERVER",
"JoinMessage": [
"&a%joiner% &7joined the server! &7(&e%total_players% &7online)"
],
"LeaveMessage": [
"&c%leaver% &7left the server! &7(&e%total_players% &7online)"
]
}
Settings:
Enabled- Master toggle (whentrue, disables Hytale's default join message)JoinEnabled- Enable/disable join messagesLeaveEnabled- Enable/disable leave messagesJoinTarget- Display type for join:CHAT,TITLE, orBOTH(default:CHAT)LeaveTarget- Display type for leave:CHAT,TITLE, orBOTH(default:CHAT)JoinScope-PLAYER(private to joining player) orSERVER(broadcast to all) (default:SERVER)JoinMessage- Array of lines for join broadcasts (each array element is a separate line)- For TITLE: First line = primary title, second line = subtitle
- Use
%joiner%for the joining player,%player%for recipients
LeaveMessage- Array of lines for leave broadcasts (each array element is a separate line)- For TITLE: First line = primary title, second line = subtitle
- Use
%leaver%for the leaving player,%player%for recipients
When Enabled is set to true, HyAnnouncer will attempt to disable Hytale's default join/leave messages. However, due to Hytale API limitations, the default leave message may still appear alongside the custom one.