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:
- Network-Wide Boss Kill Counter
- Per-Player Progress That Follows the Player
- Gating Content on a Network Variable
- Mobs That React to Other Servers
- Server-Aware Placeholders
- Temporary and Non-Persistent Variables
Before You Start
- Mob files go in
plugins/MythicMobs/Mobsand skill files inplugins/MythicMobs/Skills. Run/mm reloadafter adding them. MythicProxy shares variables, signals and player events, not files, so put each file on the servers that the example names. config.ymlmeansplugins/MythicProxy/config.ymlon a backend. Each snippet shows the wholeeventssection, so merge the lists when you combine examples, and restart the server after editing it (see Paper Config).- Skills listed under
network-join,server-switchandsignalineventsrun 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
@triggercan skip players in creative mode. - The examples use the servers
lobbyandsurvival. Use the server names from yourvelocity.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=targetcounts the killer's own kills. ?~isPlayerchecks 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
BossKillAnnounceon each of its online players whenbosskillarrives. The sending server does too, so givesurvivalthe skill and the list if its players should see the announcement. signal-payloadandorigin-serverare 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
loginsholds 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,
OnFailSkillruns instead ofSkills. boss_killscomes from the first example andraid_windowfrom 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: {}
LoginCounterandloginscome from the second example. The skills of a list run in order, soVeteranRewardreads 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}
~onNetworkSignalfires for every signal the mob receives, sostringequalspicks outbosskill.- 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 underevents, 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
durationis in ticks, so6000is five minutes.