0.105
Minor breaking changes
MobArena 0.105 includes a rework of how arenas and classes are referenced, both internally in the plugin, but also in permissions, commands, etc. Instead of the ambiguous and arbitrary "config names", MobArena now uses "slugs", which just means a kebab-case
version of a name. For example, the slug for an arena named "Castle of Doom" will be castle-of-doom
, and the slug for the implicit "My Items" class is my-items
. All commands that take arena or class names as arguments will tab complete slugs, so they should be fairly easy to figure out.
The goal of this change is to make the plugin more consistent about arena and class references in commands, permissions, etc., as well as to allow for multi-word names. Backwards compatibility has taken a backseat for the sake of maintainability and clarity, so certain adjustments may be necessary in some setups:
- Permissions: All permissions for arenas and classes must be changed to the new slug-based permission keys. For example, the permission for the "My Items" class is now
mobarena.classes.my-items
. - Class signs: It may be necessary to recreate the signs for classes with multi-word names. The name on the sign should match the name in the config-file (or the slug). For example,
My Items
(ormy-items
) instead ofMyitems
. - Default classes: The per-arena setting
default-class
may need to be adjusted. The class name should match the name in the config-file (or the slug). For example, if the default class is "My Items", the value should beMy Items
(ormy-items
). - Custom integrations: Custom commands or integrations may need to be adjusted accordingly. If you're running a setup like that, you probably already know what you're doing and what you need to do. If not, hop on Discord.
Added
- A new
ready
state is now available for arena sign templates. Signs are in this state when all players in the lobby have readied up, but the arena has not yet started due to a start delay timer. Check the wiki for details. - Arena signs now support dynamic list entry variables for 4 different player lists. As an example,
<notready-1>
results in the name of a player in the lobby who hasn't readied up yet. This is useful for visualizing who is holding up the lobby. Check the wiki for details. - Elytra are now supported chest pieces in class chests.
- Boss names now support color codes.
- New per-arena setting
arena-warp-offset
can be used to spread out players randomly by an offset from the arena warp. This should help prevent players taking suffocation damage. - New per-arena setting
announcer-type
determines where to display per-arena announcements such as wave spawns, auto start timers, boss abilities, and death messages. Options aretitle
(default) orchat
. - It is now possible to group rewards. For example,
all(stick, bone)
results a stick and a bone, whilerandom(all(stick, bone), all(dirt, stone))
results in getting either a stick and a bone or a dirt block and a stone block. - The new
nothing
keyword can be used to not grant a reward. This can be used in a crude way to create "loot table"-style reward systems where there is a chance that something is reward, but it might also just be nothing. - Boss rewards also support the
all()
andrandom()
functions as well as thenothing
keyword. - New command
/ma addreward <player> <thing>
can be used to add a reward to an arena player's reward list. This can be useful for hooking into the rewards system from scripts or other plugins. - The
/ma addarena
and/ma autogenerate
commands now supports multi-word arena names.
Changed
- The Root Target ability now uses potion effects (slowness, slow falling, and negative jump boost) instead of repeated teleports. This should make for a smoother root experience.
- Permissions for arenas and classes are now based on "slugs". It is now possible to configure permissions for arenas and classes with multi-word names (including "My Items"). Check the Permissions page on the wiki for details.
- Commands that resolve arena and/or class names now consistently resolve and tab complete "slugs" instead of arbitrarily "squashed" names. This greatly improves support for multi-word names.
- The class signs generated by the
/ma autogenerate
command now use class names from the config-file instead of arbitrarily "squashed" names. - Leaderboards now use arena and class names from the config-file instead of arbitrarily "prettified" names.
- Using
spectate-on-death: true
no longer forces players out to their join location/exit warp before moving them to the spectator area. This should prevent "jumpy" behavior in multi-world setups. - Config-file errors imposed by incorrect usage of
/ma setting
no longer cause "internal errors". Instead, the errors are properly communicated in the command output similar to how the/ma reload
command works. - Guardians and elder guardians no longer instantly retarget players when they break line of sight. This should make their behavior work a bit closer to vanilla.
- (API) MobArenaHandler now returns class name slugs in the
getPlayerClass()
methods.
Fixed
- Elytra and Netherite armor pieces now correctly auto-equip if specified in the generic
armor
node in classes in the config-file. - Players should now properly respawn at the spectator area rather than at world spawn on servers with plugins that override respawn locations.
- Config-files with missing
pet-items
nodes no longer errors. A missingpet-items
node inglobal-settings
is treated as empty, i.e. no pet items will be registered. - The
player-time-in-arena
setting has been fixed. - The
soft-restore
setting has been fixed for blocks broken by players. Note that the functionality is still unreliable for non-trivial blocks. - Items in class chests are now cloned before they are made unbreakable and given to players. This fixes an issue where setting
unbreakable-weapons: false
had no effect on the items. Note that any affected items in existing class chests will need to be replaced. - (1.8) Potions no longer turn into water bottles.
Removed
- The MagicSpells integration has been removed. This means that the extra
magicspells.yml
config-file (if it exists) no longer does anything and can be removed.