Common Examples

Small examples of MythicProxy features in MythicMobs mobs and skills. For larger setups, see the Advanced Examples.

These examples require MythicMobs Premium!

This page is divided into 6 examples:


Before You Start

  • Mob files go in plugins/MythicMobs/Mobs and skill files in plugins/MythicMobs/Skills. Run /mm reload after adding them. MythicProxy shares variables, signals and player events, not files, so put each file on the servers that the example names.
  • config.yml means plugins/MythicProxy/config.yml on a backend. Each snippet shows the whole events section, so merge the lists when you combine examples, and restart the server after editing it (see Paper Config).
  • Skills listed under network-join, server-switch and signal in events run with the player as caster and no targets, so their lines use @self. See Events.
  • Inside a skill line, write <&co> for a colon and <&nm> for #, because YAML reads : and # as syntax.
  • Several lines leave out the targeter on purpose. Targets explains what a line without a targeter acts on, and why @trigger can skip players in creative mode.
  • The examples use the servers lobby and survival. Use the server names from your velocity.toml.
  • If an example does nothing, see Troubleshooting.

Network-Wide Boss Kill Counter

A boss whose kills are counted for the whole network and for each player, and announced on every server with networkSignal.

In the mob file on survival:

NetworkBoss:
  Type: WITHER_SKELETON
  Display: '&cNetwork Boss'
  Health: 300
  Skills:
  - skill{s=NetworkBossDeath} ~onDeath

In a skill file on survival:

NetworkBossDeath:
  Skills:
  - networkVariableAdd{var=boss_kills;amount=1}
  - networkVariableAdd{var=boss_kills;scope=target;amount=1}
  - networkVariableSet{var=last_boss_killer;type=STRING;value=<trigger.name>} ?~isPlayer
  - networkSignal{signal=bosskill;target=all;payload=<trigger.name>} ?~isPlayer
  • The lines have no targeter, so they act on the killer, and scope=target counts the killer's own kills.
  • ?~isPlayer checks the killer, so the last two lines run only when a player killed the boss.

In a skill file on every server that should announce the kill:

BossKillAnnounce:
  Skills:
  - message{m="&6<skill.var.signal-payload> &7killed the Network Boss on &e<skill.var.origin-server>&7. Total kills<&co> &6<global.netvar.boss_kills|0>"} @self
  - message{m="&7Your own kills<&co> &6<caster.netvar.boss_kills|0>"} @self

In config.yml on the same servers:

events:
  network-join: []
  server-switch: []
  network-quit: []
  signal:
    bosskill:
      - BossKillAnnounce
  • Every server with this list casts BossKillAnnounce on each of its online players when bosskill arrives. The sending server does too, so give survival the skill and the list if its players should see the announcement.
  • signal-payload and origin-server are skill variables of the signal.

Per-Player Progress That Follows the Player

A login counter stored per player, so it follows the player to every server. The skills run from the network-join and server-switch lists of events.

In a skill file on every server that players can join:

LoginCounter:
  Skills:
  - networkVariableAdd{var=logins;scope=caster;amount=1} @self
  - message{m="Login <&nm><caster.netvar.logins|1>, you are on <caster.network.server>"} @self

LoginRecap:
  Skills:
  - message{m="You moved from <skill.var.from-server> to <skill.var.server>. Logins so far<&co> <caster.netvar.logins|0>"} @self

In config.yml on the same servers:

events:
  network-join:
    - LoginCounter
  server-switch:
    - LoginRecap
  network-quit: []
  signal: {}
  • Join and switch skills wait until the player's variables have loaded, so logins holds the stored count. A join or switch can still be missed, see Missed Events.

Gating Content on a Network Variable

A gatekeeper who opens the raid only while the raid window is open and the network has at least 10 boss kills, and a greeting that depends on how often a player has logged in. It uses the network variable conditions.

In the mob file on survival:

RaidGatekeeper:
  Type: VILLAGER
  Display: '&6Raid Gatekeeper'
  Options:
    Despawn: false
  Skills:
  - skill{s=RaidGate} @trigger ~onInteract

In a skill file on survival:

RaidGate:
  Conditions:
  - networkVariableEquals{var=raid_window;value=open}
  - networkVariableInRange{var=boss_kills;min=10}
  OnFailSkill: RaidGateClosed
  Skills:
  - message{m="The gate opens. The network has <global.netvar.boss_kills> boss kills, the last one fell to <global.netvar.last_boss_killer|nobody>"} @trigger

RaidGateClosed:
  Skills:
  - message{m="The gate stays shut"} @trigger
  • Both variables are global, so it does not matter which entity the conditions test. When a condition fails, OnFailSkill runs instead of Skills.
  • boss_kills comes from the first example and raid_window from the last one.

For a single player, in a skill file on every server that players can join:

VeteranReward:
  Skills:
  - message{m="Welcome back, veteran"} @self ?networkVariableInRange{var=logins;scope=caster;min=10}
  - message{m="Welcome, new player"} @self ?!networkVariableIsSet{var=logins;scope=caster}

In config.yml on the same servers:

events:
  network-join:
    - VeteranReward
    - LoginCounter
  server-switch: []
  network-quit: []
  signal: {}
  • LoginCounter and logins come from the second example. The skills of a list run in order, so VeteranReward reads the count before this login is added.

Mobs That React to Other Servers

A villager that repeats boss kills from any server to the players around it, and says when a player leaves the network. It uses the onNetworkSignal and onNetworkQuit triggers.

In the mob file on every server that should have a herald:

NetworkHerald:
  Type: VILLAGER
  Display: 'Herald'
  Options:
    Despawn: false
  Skills:
  - skill{s=HeraldBossLine} ~onNetworkSignal ?stringequals{val1=<skill.var.signal>;val2=bosskill}
  - command{c="say <skill.var.player-name> has left the network"} ~onNetworkQuit

In a skill file on the same servers:

HeraldBossLine:
  Skills:
  - message{m="Hear ye! <skill.var.signal-payload> slew the boss on <skill.var.origin-server>"} @PlayersInRadius{r=20}
  • ~onNetworkSignal fires for every signal the mob receives, so stringequals picks out bosskill.
  • Every herald on the server runs these lines, so with several heralds the lines repeat.

Server-Aware Placeholders

A villager that tells the player who clicks it which server they are on and how many players are online. It uses the network placeholders.

In the mob file on every server that should have a guide:

NetworkGuide:
  Type: VILLAGER
  Display: 'Network Guide'
  Options:
    Despawn: false
  Skills:
  - message{m="You are on <trigger.network.server>. Network online<&co> <network.online>, survival<&co> <network.server.survival.online>"} @trigger ~onInteract
  • <trigger.network.server> reads the player who clicked. In a skill the player casts, such as one under events, use <caster.network.server>.

Temporary and Non-Persistent Variables

A raid window that closes by itself after five minutes, and a value that only the servers running now receive. See Persistence and Expiry for both. Run the skills with /mm test cast.

In a skill file on any server:

RaidWindow:
  Skills:
  - networkVariableSet{var=raid_window;type=STRING;value=open;duration=6000}
  - networkVariableSet{var=raid_started_by;type=STRING;value=<caster.name>;save=false}

RaidStatus:
  Skills:
  - message{m="Raid window<&co> <global.netvar.raid_window|closed>, started by <global.netvar.raid_started_by|nobody>"} @self
  • duration is in ticks, so 6000 is five minutes.
Updated Oct 29, 2026