✨ Cobblemon PokeNova Notif Spawn Discord

Cobblemon PokeNova Notif Spawn Discord is a server-side Discord integration addon for Cobblemon.

It centralizes special Pokémon notifications, player activity, server events, Minecraft ↔ Discord chat integration, and optional Alpha compatibility into a single mod with a single configuration file. Instead of using multiple separate addons, translation packs, and Discord tools, this mod provides one unified solution for Cobblemon servers that want clean Discord integration and better event tracking.

━━━━━━━━━━━━━━━━━━
📦 FEATURES

- Server-side only
- Single jar
- Single properties config file
- French / English support
- Clean Discord embeds
- Pokémon images in embeds
- Localized Pokémon names in notifications
- Player head thumbnails
- Minecraft ↔ Discord chat bridge
- Bot presence with online player count
- Anti-spam / cooldown system
- Advanced filters for tags, biomes, dimensions, distance, and level
- Optional PokeNovaGuard role prefix integration
- Optional Cobblemon Alpha Project compatibility

━━━━━━━━━━━━━━━━━━
🔔 SUPPORTED NOTIFICATIONS

- Special Pokémon spawns
- Pokémon captures
- Hatching events
- Resurrection / fossil events
- Despawn events
- Battle faint events
- Player join / quit
- Player death
- Server start / stop
- Manual announcements
- Minecraft chat messages
- Discord chat messages
- Alpha Pokémon notifications

━━━━━━━━━━━━━━━━━━
🌟 SUPPORTED SPECIAL CATEGORIES

- Shiny
- Legendary
- Mythical
- Ultra Beast
- Paradox
- Rare
- Ultra Rare
- Alpha

━━━━━━━━━━━━━━━━━━
🧩 REQUIREMENTS

- Minecraft 1.21.1
- Fabric
- Cobblemon (required)
- Cobblemon Alpha Project (optional, only needed for Alpha compatibility)
- Designed for Cobblemon 1.7.3

This mod is an addon for Cobblemon. It does not replace Cobblemon itself.

━━━━━━━━━━━━━━━━━━
📁 CONFIG FILE LOCATION

The mod automatically creates its config file here:

config/cobblemon-pokenova-notif-spawn-discord/cobblemon-pokenova-notif-spawn-discord.properties

━━━━━━━━━━━━━━━━━━
🚀 INSTALLATION

1. Install Fabric and Cobblemon on your server.
2. Put this mod in the server mods folder.
3. Start the server once so the config file is generated.
4. Open the config file and choose either bot mode or webhook mode.
5. Restart the server after editing the config.

━━━━━━━━━━━━━━━━━━
🤖 DISCORD SETUP

This mod supports 2 Discord transport modes.

1) BOT MODE
Use a real Discord bot token.

transport.mode=bot
transport.bot_token=YOUR_BOT_TOKEN

In bot mode:
- channel IDs are used
- bot presence is available
- Minecraft ↔ Discord chat bridge is available
- Discord → Minecraft chat requires bot mode

2) WEBHOOK MODE
Use Discord webhooks instead of a connected bot.

transport.mode=webhook
webhooks.default=YOUR_WEBHOOK_URL

In webhook mode:
- webhook URLs are used
- bot presence is not available
- Discord → Minecraft chat is not available
- Minecraft → Discord chat is not recommended for two-way bridge usage

Recommended:
Use bot mode if you want the full feature set.

━━━━━━━━━━━━━━━━━━
🗂️ CHANNEL ROUTING

Each channels.* entry controls where a specific category of messages is sent.

channels.default=
Fallback channel used when no more specific channel is configured.

channels.announce=
Manual announcements sent with the announce command.

channels.capture=
Pokémon capture notifications.

channels.chat=
Minecraft ↔ Discord chat bridge channel.

channels.lifecycle=
Server lifecycle events such as start and stop.

channels.player=
Player join / quit notifications.

channels.player_death=
Player death notifications.

channels.hatch=
Egg hatch notifications.

channels.battle_faint=
Battle faint notifications.

channels.resurrect=
Resurrection / fossil notifications.

channels.spawn=
Special Pokémon spawn notifications.

Recommended Discord channel layout:
- #server-announcements → channels.announce
- #pokemon-captures → channels.capture
- #global-chat → channels.chat
- #server-status → channels.lifecycle
- #player-activity → channels.player
- #player-death → channels.player_death
- #egg-hatching → channels.hatch
- #battle-faint → channels.battle_faint
- #resurrection-fossils → channels.resurrect
- #special-spawns → channels.spawn
- #other-notifications → channels.default

━━━━━━━━━━━━━━━━━━
🔗 WEBHOOK ROUTING

If you use webhook mode, these keys mirror the channel routing above:

webhooks.default=
webhooks.announce=
webhooks.capture=
webhooks.chat=
webhooks.lifecycle=
webhooks.player=
webhooks.player_death=
webhooks.hatch=
webhooks.battle_faint=
webhooks.resurrect=
webhooks.spawn=

You can use one webhook for everything or one webhook per category.

━━━━━━━━━━━━━━━━━━
💬 CHAT BRIDGE

These settings control the Minecraft ↔ Discord chat bridge:

discord.chat_bridge.enabled=true
Enable or disable the chat bridge.

discord.chat_bridge.channel_id=
Discord channel ID used by the chat bridge.
This should usually match channels.chat.

discord.chat_bridge.allow_minecraft_to_discord=true
Allow Minecraft chat messages to be sent to Discord.

discord.chat_bridge.allow_discord_to_minecraft=true
Allow Discord messages from the configured chat channel to be shown in game.

discord.chat_bridge.ignore_bot_messages=true
Ignore messages sent by bots.

discord.chat_bridge.ignore_webhooks=true
Ignore webhook messages.

discord.chat_bridge.max_length=256
Maximum chat message length relayed through the bridge.

discord.chat_bridge.strip_everyone_mentions=true
Sanitize @everyone and @here mentions before sending messages to Minecraft.

Important:
Discord → Minecraft chat requires bot mode.

━━━━━━━━━━━━━━━━━━
🏷️ ROLE PREFIXES / OPTIONAL POKENOVAGUARD SUPPORT

This mod supports optional role prefix integration for servers using PokeNovaGuard.

chat.prefix_detection.enabled=true
Enable role prefix detection.

chat.prefix_detection.source=auto
Auto-detect the source used for prefixes.

chat.prefix_detection.default_prefix=
Fallback prefix if no role is detected.

chat.role_prefix.fondateur=
chat.role_prefix.co_fondateur=
chat.role_prefix.la_famille=
chat.role_prefix.champion=
chat.role_prefix.dresseur=
chat.role_prefix.visiteur=

If you customize role prefixes in PokeNovaGuard, you should also update the matching chat.role_prefix values in this mod so both mods display the same prefix.

━━━━━━━━━━━━━━━━━━
🅰️ OPTIONAL COBBLEMON ALPHA PROJECT SUPPORT

This mod supports optional Alpha notifications when Cobblemon Alpha Project is installed.

When Cobblemon Alpha Project is present:
- Alpha Pokémon can be detected
- Alpha tags can be added to in-game and Discord notifications
- Alpha notifications can be routed like other special Pokémon events

Cobblemon Alpha Project is optional:
- it is not required for the main features of this mod
- it is not bundled with this project
- it remains a separate mod

If you want to disable the default Cobblemon Alpha Project announcement and use this mod’s cleaner Alpha notifications instead, open:

config/cobblemonalphas/config.json

Then set:
"doSpawnAnnouncementMessage": false

━━━━━━━━━━━━━━━━━━
🌍 LANGUAGE SETTINGS

language.default=fr_fr
Default language used by the mod.

language.supported=fr_fr,en_us
Languages supported by the config and message catalog.

language.auto_detect_client=true
Try to use the client language of the player in game.

language.fallback=fr_fr
Fallback language if automatic detection is not available.

━━━━━━━━━━━━━━━━━━
⚙️ COMMAND ALIASES

commands.aliases.english=false
Enable or disable English command aliases.

commands.aliases.french=true
Enable or disable French command aliases.

English commands:
- /discordtest
- /discordreload
- /discordannounce

French commands:
- /testdiscord
- /rechargediscord
- /annoncediscord

━━━━━━━━━━━━━━━━━━
📡 BROADCAST SETTINGS

broadcast.discord=true
Enable Discord notifications.

broadcast.in_game=true
Enable in-game notifications.

broadcast.show_coords_in_discord=true
Show coordinates in Discord.

broadcast.show_coords_in_game=true
Show coordinates in Minecraft chat.

broadcast.show_biome_in_discord=true
Show biome names in Discord.

broadcast.show_biome_in_game=true
Show biome names in game.

broadcast.show_dimension_in_discord=true
Show dimension names in Discord.

broadcast.show_dimension_in_game=false
Show dimension names in game.

broadcast.player_death.in_game=false
Control whether this mod sends player death messages in game.

broadcast.player_death.discord=true
Control whether this mod sends player death messages to Discord.

━━━━━━━━━━━━━━━━━━
🧭 DISPLAY MODES

These settings control where some details appear:

coords.display_mode=
Possible values:
- never
- discord_only
- ingame_only
- everywhere

biome.display_mode=
Possible values:
- never
- discord_only
- ingame_only
- everywhere

dimension.display_mode=
Possible values:
- never
- discord_only
- ingame_only
- everywhere

Example:
coords.display_mode=discord_only
biome.display_mode=everywhere
dimension.display_mode=discord_only

━━━━━━━━━━━━━━━━━━
🔔 NOTIFICATION TOGGLES

notifications.spawn.enabled=
Enable spawn notifications.

notifications.capture.enabled=
Enable capture notifications.

notifications.capture.normal=
Enable normal captures.

notifications.capture.special_only=
Only send captures for special Pokémon.

notifications.capture.shiny_only=
Only send captures for shiny Pokémon.

notifications.hatch.enabled=
Enable hatch notifications.

notifications.resurrect.enabled=
Enable resurrection / fossil notifications.

notifications.despawn.enabled=
Enable despawn notifications.

notifications.battle_faint.enabled=
Enable battle faint notifications.

notifications.player_join.enabled=
Enable player join notifications.

notifications.player_quit.enabled=
Enable player quit notifications.

notifications.player_death.enabled=
Enable player death notifications.

notifications.server_started.enabled=
Enable server started notifications.

notifications.server_stopping.enabled=
Enable server stopping notifications.

notifications.spawn.wild_only=
Only announce wild spawns.

notifications.spawn.special_only=
Only announce special category spawns.

notifications.spawn.shiny_only=
Only announce shiny spawns.

notifications.spawn.max_entity_age_ticks=
Technical filter used to reduce duplicate or stale spawn events.

━━━━━━━━━━━━━━━━━━
🏁 TAG FILTERS

These settings let you choose exactly which special categories are announced:

notifications.tags.alpha=
notifications.tags.shiny=
notifications.tags.legendary=
notifications.tags.mythical=
notifications.tags.ultra_beast=
notifications.tags.paradox=
notifications.tags.rare=
notifications.tags.ultra_rare=

Example:
If notifications.spawn.special_only=true and only legendary, Alpha, and shiny are enabled here, then only those spawns will be sent.

━━━━━━━━━━━━━━━━━━
🧪 ADVANCED FILTERS

Dimension filters:
filters.dimension.enabled=
filters.dimension.whitelist=
filters.dimension.blacklist=

Biome filters:
filters.biome.enabled=
filters.biome.whitelist=
filters.biome.blacklist=

Distance filters:
filters.distance_from_players.enabled=
filters.distance_from_players.max_blocks=

Minimum level filter:
filters.min_level.enabled=
filters.min_level.value=

Examples:
- Only announce events in the Overworld
- Ignore certain biomes
- Only announce events near players
- Only announce Pokémon above a minimum level

━━━━━━━━━━━━━━━━━━
🖼️ DISCORD EMBEDS AND IMAGES

discord.username=
Displayed bot / sender name.

discord.avatar_url=
Displayed bot / sender avatar image.

discord.embed.footer=
Footer text shown in embeds.

discord.embed.use_player_head=true
Show the Minecraft player head when possible.

discord.embed.show_pokemon_image=true
Show Pokémon images in embeds.

discord.embed.pokemon_image_mode=sprite
Image mode used for Pokémon images.

discord.embed.pokemon_image_url_template=
URL template used to fetch Pokémon images.

discord.embed.pokemon_image_for_spawn=true
Show Pokémon images for spawn notifications.

discord.embed.pokemon_image_for_capture=true
Show Pokémon images for capture notifications.

discord.embed.pokemon_image_for_hatch=true
Show Pokémon images for hatch notifications.

discord.embed.pokemon_image_for_resurrect=true
Show Pokémon images for resurrection notifications.

discord.embed.color.alpha=
discord.embed.color.announce=
discord.embed.color.capture=
discord.embed.color.lifecycle=
discord.embed.color.player=
discord.embed.color.spawn=
discord.embed.color.shiny=

These values control embed colors for different notification categories.

━━━━━━━━━━━━━━━━━━
📈 BOT PRESENCE

discord.bot_presence.enabled=true
Enable bot presence updates.

discord.bot_presence.activity=custom
Type of bot presence activity.

discord.bot_presence.fr_fr=%players% joueurs en ligne
French presence text.

discord.bot_presence.en_us=%players% players online
English presence text.

discord.bot_presence.update_delay_ticks=10
Delay before quick presence refresh after join / quit.

Recommended:
Use bot mode if you want online player count and dynamic presence.

━━━━━━━━━━━━━━━━━━
⏱️ ANTI-SPAM / QUEUE

cooldowns.global_ms=
Minimum delay between notifications.

cooldowns.same_key_ms=
Minimum delay before the same type of notification can be repeated.

cooldowns.spawn_duplicate_ms=
Additional duplicate protection for spawn notifications.

queue.enabled=
Enable queued sending.

queue.min_delay_ms=
Minimum delay between queued messages.

These options help keep Discord readable during busy spawn waves.

━━━━━━━━━━━━━━━━━━
🛠️ DEBUG OPTIONS

debug.enabled=
Enable debug mode.

debug.log_discord_errors=
Log Discord-related errors.

debug.log_presence_updates=
Log presence updates.

debug.log_spawn_filtering=
Log spawn filtering decisions.

Recommended:
Keep debug disabled in normal use.
Enable it temporarily when testing or troubleshooting.

━━━━━━━━━━━━━━━━━━
🔐 PERMISSIONS

permissions.announce_level=
Required permission level for announcement commands.

permissions.reload_level=
Required permission level for reload commands.

permissions.test_level=
Required permission level for test commands.

━━━━━━━━━━━━━━━━━━
🧱 CONFIG VERSIONING / MIGRATION

config.version=
Internal config version.

config.auto_migrate=true
Try to auto-migrate older config files.

config.backup_before_migrate=true
Create a backup before migration.

This helps preserve existing config values when updating to newer versions of the mod.

━━━━━━━━━━━━━━━━━━
✅ RECOMMENDED SIMPLE BOT SETUP

transport.mode=bot
transport.bot_token=YOUR_BOT_TOKEN

channels.default=YOUR_DEFAULT_CHANNEL_ID
channels.announce=YOUR_ANNOUNCE_CHANNEL_ID
channels.capture=YOUR_CAPTURE_CHANNEL_ID
channels.chat=YOUR_CHAT_CHANNEL_ID
channels.lifecycle=YOUR_LIFECYCLE_CHANNEL_ID
channels.player=YOUR_PLAYER_ACTIVITY_CHANNEL_ID
channels.player_death=YOUR_PLAYER_DEATH_CHANNEL_ID
channels.hatch=YOUR_HATCH_CHANNEL_ID
channels.battle_faint=YOUR_BATTLE_FAINT_CHANNEL_ID
channels.resurrect=YOUR_RESURRECT_CHANNEL_ID
channels.spawn=YOUR_SPAWN_CHANNEL_ID

discord.chat_bridge.enabled=true
discord.chat_bridge.channel_id=YOUR_CHAT_CHANNEL_ID
discord.chat_bridge.allow_minecraft_to_discord=true
discord.chat_bridge.allow_discord_to_minecraft=true

broadcast.discord=true
broadcast.in_game=true
broadcast.player_death.in_game=false
broadcast.player_death.discord=true

discord.embed.show_pokemon_image=true
discord.bot_presence.enabled=true

━━━━━━━━━━━━━━━━━━
🙏 CREDITS

Special thanks to the creators of Cobblemon for their amazing mod and ecosystem.

Special thanks as well to the creator(s) of Cobblemon Alpha Project for making Alpha Pokémon support possible through their separate mod.

━━━━━━━━━━━━━━━━━━
❗ IMPORTANT NOTES

- This is a server-side addon.
- Cobblemon is required.
- Bot mode is required for full chat bridge and bot presence features.
- Cobblemon Alpha Project is optional and only needed for Alpha compatibility.
- If you customize PokeNovaGuard prefixes, update this mod’s chat.role_prefix values too.
- If you want cleaner Alpha notifications, disable the native Cobblemon Alpha Project announcement in its config.
- Restart the server after changing the config.
