- Added DamageTags, allowing you to specify any number of arbitrary tags on any damage mechanics using tags=THIS,THAT e.g. `- damage{amount=5;tags=FIRE}`
- Added `damageTag` condition, checks if the damage that triggered the skill has the given tag
- Changed element damage attribute to just apply a damage tag
### Projectile Upgrades
- Projectile Tick-Interpolation
- Added DISPLAY and TEXT bullet types
- Item Display Bullet Type: Add "tx", "ty" and "tz" (t from translation) to offset the visual position of the bullet, also "translation"("pos", "offset") to set all the values at the same time in the x,y,z format
- Added `bulletBrightness`, and `bulletBrightnessBlock` + `bulletBrightnessSky` for some reason to Display bullets
- Added `bulletBillboard` to Display bullets
- Added `bulletForwardOffset` to mob bullets
- Added `bulletCullingDistance` option to display and text bullets
### Stat System
- Added the [Stat System](/Stats)
### Holograms
- Added our own hologram system
- All hologram-related features no longer require a 3rd party hologram plugin
- Made it so mob names can be multi-line using nameplates feature on 1.19.4+ using `\n` for newlines
### Spawners
- Major spawners rewrite - see spawners section
General
-------
- Added `/mm test mechanic [line]` command to test executing a skill line
- Allow CustomModelData in `packinfo.yml`
- Upgraded the item editor with a bunch of new buttons
Mobs
----
- Added support for mobs having players as parents
Added new mobs types:
-`BLOCK_DISPLAY`
-`CAMEL`
-`CHEST_BOAT`
-`ITEM_DISPLAY`
-`SNIFFER`
-`TEXT_DISPLAY`
### AI
- Added `radius` option to `LookAtPlayers` goal
- Added `attackReachModifier` option to MeleeAttackGoal (defaults to 4)
Mechanics
----------
### NEW: Cancel
- Cancels the current skill tree
```yml
SomeSkill:
Skills:
-message{m="hello"} @server
-cancel ?isMonster#cancels the rest of the skill from executing
-message{m="bye"} @server
```
### NEW: Hit
- Simulates a physical hit from the caster using their damage attribute, held weapon, etc
- Same options as `baseDamage` mechanic
- Takes melee stats into account (regular skill damage won't unless configured to specifically)
- Pushes the targeted block in the given direction. Follows the same rules as pistons.
- Direction can be either cardinal direction or a location targeter. If given a targeter, the block will be pushed once towards that location
- Mechanic also supports `onPush` and `onFail` skills which will fire at the block's location
Mechanic follows piston rules and will push other connected slime blocks as well, but only if they're adjacent or in front of the block - it cannot push connected blocks _behind_ the pushed block.
### NEW: `setProjectileDirection`
- Changes calling projectile's direction to the given target
### NEW: `setProjectileBulletModel`
- Added `setProjectileBulletModel{model=X}` mechanic, can be called by a projectile to change the bullet's item's model ID (only works with DISPLAY bullets)
### NEW: `StatAura`
- Applies a stat modifier to the target as an aura.
- Added `tickInterpolation` option (defaults to 0)
- Changed mob bullet's Y offset option to bulletYOffset
Setting tickInterpolation will interpolate that many points between each tick in a projectile and execute the onTick and onHit skills on those points as well, doing multiple 'ticks' in a single tick.
This can be used to fill in the gaps with super-fast projectiles and also prevent entities from being skipped over by insanely fast projectiles.
- Added `interactable=true`, `onInteractSkill` to projectiles (requires 1.19.4+), used to allow the player to hit the projectile similar to a ghast fireball.
### Missile
- Added `hugSurface` and `bounce` options to missile mechanic (and all other related options similar to the Projectile mechanic)
### Lunge
- Added `oldMath/old/o` attribute to determine if it should use the old wonky math (default: false)
### Orbital
- Added `hugSurface` to orbitals
### PotionClear
- Added `type`/`types` attribute to `potionClear` mechanic
### Switch
- Allow to run MetaSkills & Code Refactor
### Rally
- Rewrote Rally mechanic. Added `conditions` option to rally, and all attributes are now optional.
### Volley
- Add "pickup"/"canPickup" attribute, defaults to true
Conditions
----------
### NEW: DamageTag
Added damageTag condition, checks if the damage that triggered the skill has the given tag
`- damageTag{tag=FIRE}`
### NEW: directionalVelocity
- Added `directionalVelocity` condition, which checks if the target has a velocity matching the given parameters.
- Added side, forward and vertical aliases to DirectionalVelocityCondition
Options:
| Option | Description | Default |
|--------|-------------|---------|
| x | The X velocity (a range) | null (not checked) |
| absx | Use the absolute value of the X velocity | false |
| y | The Y velocity (a range) | null (not checked) |
| absy | Use the absolute value of the Y velocity | false |
| z | The Z velocity (a range) | null (not checked) |
| absz | Use the absolute value of the Z velocity | true if relative=true, otherwise false |
| relative | If true, X is calculated as forward/backward and Z is side-to-side | false |
If the X, Y, or Z velocity is not specified, that component of the velocity is not checked. The 'absx', 'absy', and 'absz' options determine whether the absolute value of the corresponding velocity is used in the check. If 'relative' is true, the velocities are considered relative to the entity's orientation.
arguments `material` / `mat` / `m`, defaults to enderpearl
true if material type is on cooldown for the player, false otherwise
### NEW: SpawnReason
Audiences
---------
- Added TRACKED audience, which are the players that are rendering the caster on their client
Placeholders
------------
### General
- Added `<caster.stat.STAT_NAME>` placeholders
- Added `<target.block.data>` - returns the block data of a block
- Added `<target.item.type>` placeholder
- Added placeholder support for variable name in all variable mechanics
### NEW: Custom Placeholders
Added custom placeholders file to make it easier to configure static/reusable and even conditional values.
Each pack can now have a `placeholders.yml` in the base pack directory that contains any number of placeholders.
These can be static or you can define conditional placeholders - the first one that evaluates true will be chosen, or the Default if they're all false.
An example placeholders.yml might look like this:
```
TestPlaceholder: 'some value'
TestConditionalPlaceholder:
Day:
Conditions:
- day
Value: day
Night:
Conditions:
- night
Value: night
Default: idk
Added ability to define random placeholders that will just choose a random line from a list in the `placeholders.yml` file
```
TestRandomPlaceholder:
- red
- green
- blue
```
Spawners
--------
- Rewrote spawner saving/loading
- Rewrote spawner positioning algorithm
- Added SpawnConditions to spawners that target the position it's trying to spawn a mob
- Regular conditions continue to function as "Activation Conditions" e.g. does the spawner even try
- Added tab completion to a lot of the spawner commands
- Fixed various spawner related bugs
- Made some API changes for 5.5, which will add a GUI editor for spawners
Bugs / Other
------------
- Added placeholder support to a bunch of new things
- Updated some of the default configuration files to be more up to date
- Refactor some skill tree stuff
- Merge ExtendedDamageMetadata into DamageMetadata
- Fixed NoSuchMethodError in CrouchingCondition
- Fixed spawner config field for spawn conditions to actually be SpawnConditions
- Fixed loading error on 1.16
- Fixed remove attribute on SetLeashHolder mechanic
- Fixed @targetlocation targeting block location instead of actual location when hitting maxDistance for players
- Fixed projectiles with no hitboxes being broken
- Fixed default values for PlayersInRingTargeter
- Fixed ClassNotFoundException on mohist
- Fixed `preventImmunity` option to DamageMechanics
- Fixed/removed vehicle alias from the mount targeter
- Fixed spawner addcondition command not saving conditions after a restart