Skip to main content

Overview

Announcer automatically sends messages when you perform various actions like breaking blocks, placing blocks, eating food, walking distances, or when players join/leave the server. It’s useful for flexing your client usage or just having fun on servers.

Features

  • Announces blocks broken, placed, eaten, and distance traveled
  • Welcomes/farewells players joining and leaving
  • Time-of-day messages (morning, noon, night, etc.)
  • Multiple message templates with randomization
  • Three output modes: Self, Chat, and Whisper
  • Configurable delay between actions

Settings

Mode
enum
default:"Self"
Where to send announcement messages
  • Self: Only you see messages (client-side)
  • Chat: Sends messages to public chat
  • Whisper: Whispers to nearest player
Break
boolean
default:"true"
Announce blocks broken
Place
boolean
default:"true"
Announce blocks placed
Eat
boolean
default:"true"
Announce food eaten
Walk
boolean
default:"true"
Announce distance traveled
Joins
boolean
default:"true"
Announce player joins/leaves
World Time
boolean
default:"true"
Announce time of day changes
Delay
number
default:"5"
Delay multiplier for announcements (1-15)Higher values = less frequent messages

Message Types

Break Messages

Announces after breaking multiple blocks:
"I just mined {amount} {name} thanks to Sn0w!"
"Я только что добыл {amount} {name} блока благодаря Sn0w!"
Triggers:
  • After breaking random amount (1-10) blocks
  • With delay of 300 * delay ticks
  • Resets counter after announcement
Example:
I just mined 7 Stone thanks to Sn0w!

Output Modes

Messages only appear in your client chat:
  • Colored in aqua
  • No packets sent to server
  • Safe for all servers
  • Good for testing
ChatUtils.sendMessage(Formatting.AQUA + message);
Messages sent to public chat:
  • Visible to all players
  • Queued with configurable delay
  • Waits delay * 1000 ms between messages
  • May trigger spam filters
ChatUtils.sendChatMessage(messages.poll());
Messages whispered to nearest player:
  • Finds target within 100 blocks
  • Sends as /w [player] [message]
  • Private messages
  • Requires whisper permission
LivingEntity entity = TargetUtils.getTarget(100);
ChatUtils.sendChatMessage("/w " + entity.getName().getString() + " " + messages.poll());

Technical Details

Message Queue System

To avoid spam detection, messages are queued:
// Located at: misc/Announcer.java:94-310
public Queue<String> messages = new LinkedList<>();

// Messages are added to queue
messages.add(message);

// Sent with delay
if (timer.isPassed(delay.getValue().intValue() * 1000L) && !messages.isEmpty()) {
    ChatUtils.sendChatMessage(messages.poll());
    timer.resetDelay();
}

Distance Calculation

3D Euclidean distance:
// Located at: misc/Announcer.java:270-294
if (lastPositionUpdate + (5000L * delay.getValue().intValue()) < System.currentTimeMillis()) {
    double d0 = lastPositionX - mc.player.getX();
    double d2 = lastPositionY - mc.player.getY();
    double d3 = lastPositionZ - mc.player.getZ();
    
    speed = Math.sqrt(d0 * d0 + d2 * d2 + d3 * d3);
    
    if (!(speed <= 1) && !(speed > 5000)) {
        String walkAmount = new DecimalFormat("0.00").format(speed);
        sendMessage(walkMessages[random.nextInt(walkMessages.length)].replace("{blocks}", walkAmount));
    }
}

Random Thresholds

Uses random thresholds to seem more natural:
int randomNum = ThreadLocalRandom.current().nextInt(1, 10 + 1);
if (blocksBroken > randomNum) {
    // Announce
    blocksBroken = 0;
}

Configuration Examples

Mode: Self
Break: true
Place: true
Eat: true
Walk: true
Joins: false
World Time: false
Delay: 5

→ All messages visible only to you
→ No spam in public chat
→ Good for testing

Message Variables

Messages support dynamic variables:
VariableReplacementExample
{amount}Number of items42
{name}Item/block nameStone
{blocks}Distance traveled123.45
%name%Player nameSteve
%serverip%Server address2b2t.org
Sn0wClient nameSn0w (or custom)

Best Practices

Start with Self Mode

Test your configuration in Self mode before enabling public chat

Higher Delay on Servers

Use delay 8-15 on servers with spam filters

Disable in Combat

Turn off during PvP to avoid distraction

Custom Messages

Edit the source to add your own custom messages
Using Chat mode with low delay on strict servers may result in kick or mute for spam.

Known Limitations

  • Walk distance resets on module disable
  • Time messages require being in-game for 200 ticks
  • Whisper mode requires a player within 100 blocks
  • Some servers may block whisper commands
  • ChatSuffix: Adds suffix to all chat messages
  • AutoEZ: Automatically sends messages after kills
  • Spammer: Advanced chat spamming tool

Build docs developers (and LLMs) love