The objectives filter will now always automatically derive team ownership for the objective from context.
To match an objective without any specific team, the any="true"
attribute needs to be specified.
Portals, kits, score boxes & structures can now be dynamically applied using dynamic filters. All region types are dynamic, however, only some filter types are dynamic.
give
, take
& lend
properties.forward
, reverse
& transit
properties.trigger
property.Added a player count filter.
Added a <grounded/>
filter to check if the player is standing on the ground.
Added <match-started/>
, <match-running/>
& <match-finished/>
filters that are used to check the state of the current match.
New pre-match-physics
attribute for the terrain module to enable physics events before the match starts.
<random>
filters now only respond to instantaneous events, and abstain when used in any persistent context.
This breaks some uses that relied on undefined behavior, but these would likely break anyway as filters gain more dynamic functionality.
As of minecraft 1.9 TNT fuse time is no longer limited to 4 seconds.
Portals react to player move events allowing almost instant teleportation as soon as the filter matches.
Added <observing>
and <participant>
filters. Also added an observers
filter property to portals to restrict observer access.
Added player rank and score filters. Filters return if the player's rank or score is within the specified range.
Added a gliding filter, returns if the player is gliding with an elytra.
Control points have new recovery
and decay
attributes that replace the incremental
attribute and allow more control of the progress.
Filters, regions, and kits now use id
instead of name
.
Keep in mind that IDs are all in the same namespace, so you can not use the same ID for two different types of thing.
Teams have a id
attribute and are always referenced by it everywhere in the XML, never by name.
Standalone filter definitions are no longer wrapped in a <filter>
tag, they start with an actual filter, just like regions, e.g.
<filters>
<team id="only-red">red-team</team>
</filters>
The region for an <apply>
must be either a region
attribute or a <region>
sub-element.
It cannot appear directly inside the <apply>
tag.
Inline filters must always be a single tag, multiple tags are not accepted anywhere.
To combine multiple filters, always use a compound filter like <all>
or <any>
.
This change is retroactive, and affects all proto versions.
There is no longer a filter type called <block>
, use <material>
instead. <block>
is always interpreted as a region.
The old built-in filters are gone, and there are only two new ones: always
which is equivalent to allow-all
, and never
which is equivalent to deny-all
.
All of the new built-ins have equivalent tags of the same name i.e. <always/>
& <never/>
.
Filters can no longer have parents.
<allow>
and <deny>
can now be used anywhere a filter is expected, and actually function how they were supposed to i.e. they cause the filter to be ignored (skipped over) if it does not match.
Blitz or Ghost Squadron titles are no longer a part of the blitz module, instead they are set as a attribute of the <map>
element and can be used with any gamemode.
Match time limit is no longer part of the <score>
or <blitz>
module, instead it is defined directly in the root
<map proto="1.4.0">
<time result="objectives">5m</time>
<!-- Other modules. -->
</map>
The top-level tags <filters>
and <regions>
are now the same thing.
You can define filters, regions, and <apply>
s in either one (remember that regions are a type of filter, have been for a while now).
Any filter tag anywhere can have an id
attribute.
The <apply>
tag accepts both references and inline definitions for its region
, kit
, and all of its filter properties, e.g. the two tags below are equivalent:
<apply region="effect-pad" kit="effect-kit" filter="only-red" block="only-leaves" />
<apply>
<region>
<cuboid min="1,2,3" max="4,5,6"/> <!-- effect-pad -->
</region>
<kit>
<potion>...</potion> <!-- effect-kit -->
</kit>
<filter>
<team>red-team</team>
</filter>
<block>
<material>leaves</material>
</block>
</apply>
The safe
and spread
attributes of spawns can now be combined.
A items slot attribute is no longer required in kits.
This attribute now also accepts Mojang slot names e.g. slot.hotbar.8
or armor.head
.
There is a new half-space region type that contains everything on one side of an arbitrary plane. The plane is defined by an origin point and a normal vector, and the region contains everything on the side of the plane that the normal is pointing towards. The example below defines a region with a diagonal boundary:
<half origin="5,0,0" normal="1,1,0"/>
Two new region types <above>
and <below>
can be used to conveniently define axis-aligned half-spaces:
<above y="50"/> <!-- everything above Y=50 -->
<below x="0" z="0"/> <!-- everything in the -X, -Z quadrant -->
There are two built-in regions called everywhere
and nowhere
that contain all points and no points, respectively.
All of the new built-ins have equivalent tags of the same name i.e. <everywhere/>
& <nowhere/>
.
A team can have a minimum required size with the min=""
attribute.
Objectives have a required
attribute that specifies if they are required to complete the match.
A players gamemode can be changed by using the new <game-mode> </game-mode>
kit.
New world border module that can be used to create a shifting and/or auto resizing world border.
Support added for block punch and trample <block-drops>
.
Custom item crafting recipe module.
All items of a specific type can be modified for the whole match using the <item-mods>
module.
Teamless gamemodes with the <players/>
module.
Heads can be given to players in kits with the <head>
element.
Cause filters have several new possible values they can filter for.
Added the <relation>
filter to check the relation between two players.
The world generator can be modified with the terrain module. This module allows the seed, void/vanilla generator, and world folder location to be specified.
XML files can now contain conditional <if>
and <unless>
statements.
These statements allow modules to be loaded on specific servers or during holiday events.
The maps display gamemode can be specified with the <gamemode>
element.
Added a shield kit module that gives a player an absorption hearts recharging shield.
Pickups module for location specific kit pickups.
The <multitrade/>
tag has been removed, it is now always enabled.
Regions for cores, destroyables, wools, portals & score boxes must be defined in a <region>
sub-element or referenced in a region
attribute.
<core>
<region>
<cuboid min="..." max="..."/>
</region>
</core>
<core region="my-region"/>
Similarly spawn regions must be defined in a <regions>
sub-element or referenced in a regions
attribute.
<spawns>
<spawn team="red">
<regions yaw="90">
<cuboid min="1,0,2" max="3,0,4"/>
<cylinder base="7,8,9" radius="5" height="0"/>
</regions>
</spawn>
</spawns>
Everything scores 0 points by default, this means you have to explicitly define <kills>
and <deaths>
in the score module if you want players to get points for killing players.
The <playable>
region module has been removed, this should now be handled using filters.
Version | Description |
---|---|
1.4.0
|
Filters/regions/teams are always referenced by ID
Disallow <time>
inside
<score>
or
<blitz>
& disallow
<title>
inside
<blitz>
Required objectives |
1.3.6
|
Move all defining elements out of module xml root
Everything scores zero points by default |
1.3.5
|
Filters know who owns TNT |
1.3.4
|
Wools have a location property |
1.3.3
|
Define how overlapping regions behave |
1.3.2
|
Monument modes |
1.3.1
|
Off-by-one region bug fixed. |