Releases: PZDonny/DisplayEntityUtils
3.5.1 | Skript Syntax Update & Bug Fixes
Release Highlights
- Updated Syntax📜
- API Changes 🔨
- Bug Fixes 🐛
A new Wiki has been released improving clarity in many areas and a better visual look
Skript Changes
- Updated
Spawn BDEngine Model from Fileto be a section, supporting more spawn options
deu spawn bde model "mymodel" at {_location} stored in {_activegroup}:
packet: false
teleport-duration: 2
billboard: VERTICAL
persistent: true
visible: true
brightness: 10 and 5 #Block and Sky, -1 and -1 to reset
spawnanimation: trueAPI Changes
New Version: 3.5.1
Additions / Changes
- Added
SpawnedDisplayEntityGroup#toPacket(Location, GroupSpawnSettings)for converting a group to packet based, with group spawn settings supplied - Added
BDEModel#spawn(Location, SpawnReason, GroupSpawnSettings)for spawning a BDEModel with group spawn settings supplied - Added
BDEModel#createPacketGroup(Location)andBDEModel#createPacketGroup(Location, GroupSpawnSettings)for spawning a BDEModel as a packet-based group
Bug Fixes
- Fixed an issue with
Direction (Pitch, Yaw, Pivot)Skript syntax that changes a group/part/filter's looking direction not working as intended - Fixed
Active Group Respect Entity DirectionSkript syntax not using a group's teleport duration if not explicitly specified - Fixed an issue where adding a part to a
PacketDisplayEntityGroupincorrectly updated the group's passenger entities
What's Changed
Full Changelog: 3.5.0...3.5.1
3.5.0 | Major Skript Recode & New Wiki
Release Highlights
- New Wiki 🧾
- New Command 💻
- Reworked & Recoded Skript Syntax📜
- API Changes 🔨
A new Wiki has been released improving clarity in many areas and a better visual look
Commands
New Command
- Added
/deu parts deselect- Deselect your currently selected part
- Permission:
deu.parts.select
Skript Changes
- Updated to Skript
v2.14.3 - Reworked many of the syntaxes, avoiding conflicts, reducing redundancy, and overall improving syntax
API Changes
New Version: 3.5.0
Breaking Changes
- Removed
playSpawnAnimationparameter fromDisplayEntityGroup#createPacketGroupmethods DisplayGroupManager#getOrCreateNearbySpawnedGroupsnow returns a set ofSpawnedDisplayEntityGroups instead ofGroupResults
Additions / Changes
- Added
ActivePart#getItemDisplayTransform - Added
ActivePart#getInterpolationDelayandActivePart#getInterpolationDuration - Added methods to
ActivePart#getItemDisplayTransform#getInterpolationDuration#getInterpolationDelay#getBillboard
- Added
GroupSpawnSettings#playSpawnAnimation DisplayUtils#getFixedModelLocationnow accepts anActivePartrather than just aPacketDisplayEntityPart
QOL
- Fixed incorrect messages when using commands or clicking clickable points
What's Changed
Full Changelog: 3.4.3...3.5.0
3.4.3 | Optimizations & New Skript Syntax
Release Highlights
- New Skript Syntax📜
- API Changes 🔨
- Bug Fixes 🐛
Skript Changes
- Updated to Skript
v2.14.0 - Added
Player's Selected Active Partto get the selected active part of a player
set {_activepart} to player's selected part- Added
Rotate Active Group/Partto update the axis rotation of an active group/part, in degrees.
deu rotate y of {_activegroup} by 45
deu rotate z of {_activepart} by 20
deu rotate world y of {_activepart} by 90API Changes
DisplayGroupManager Changes
Important
Many changes have been made regarding how a group is retrieved from an entity, a location, chunk, or world
Group From Location
#getSpawnedGroups()- get all spawned groups registered in the current play session#getSpawnedGroups(World)- get all spawned groups registered in a world#getSpawnedGroups(Chunk)- get all spawned groups registered in a chunk#getSpawnedGroupsByCreationTime(Chunk)- get all spawned groups registered in a chunk, keyed in a map by group creation time#getNearbySpawnedGroups(Location, double)- get all nearby registered spawned groups in a radius#getOrCreateNearestSpawnedGroup(Location, radius)- get and/or create many registered spawned groups in a radius#getNearestSpawnedGroup(Location)- get the nearest registered spawned group in a radius#getOrCreateNearestSpawnedGroup(Location, radius)- get and/or create the nearest registered spawned group in a radius
Group From Entity
#getSpawnedGroup(Display)- get a registered spawned group that a givenDisplayis part of#getOrCreateSpawnedGroup(Display)- get and/or create a registered spawned group that a givenDisplayis part of#getSpawnedGroup(Entity, radius)- get a registered spawned group that an eligible part entity is part of (Interaction,Mannequin)
Bug Fixes / QOL
- Improved speed of group detection when a chunk loads for the first time
- Fixed per-player animations not working
- Fixed logic of
AcitvePart#rotateDisplay - Fixed non-display parts (
Interaction,Mannequin) becoming ungrouped after their chunk unloads and loads again - Fixed a memory leak related to group detection during chunk loads
What's Changed
Full Changelog: 3.4.2...3.4.3
3.4.2 | Skript Syntax and Bug Fixes
Release Highlights
- Command Change 💻
- New Skript Syntax📜
- API Changes 🔨
- Bug Fixes 🐛
Command Change
durationanddelayarguments are now optional for/deu interaction scalecommand
Skript Changes
- Added
Active Group Player Scale Multiplierto apply a scale multiplier to a player's view of anActiveGroup, on top of the group's current scale multiplier
set extra scale multiplier of {_activegroup} to 1.75 for {_player}
set extra scale multiplier of {_activegroup} to 2 for {_player} and ignore interaction entities
#Reset
set extra scale multiplier of {_activegroup} to 1 for {_player}API Changes
New Version: 3.4.2
- Added
ActiveGroup#getIdto the unique ID of a group - Added
ActiveGroup#setPlayerScaleMultiplierto set the scale multiplier of a player's view of anActiveGroup, on top of the group's current scale multiplier.
Bug Fixes / QOL
- Fixed a NPE that could occur when placing a placaeble group
- Fixed
Interaction Click Types (iClickType)not being recognized inSkriptsyntax - Added missing tab completion to
/deu parts move PlaceholderAPIplaceholders can now be used inInteractioncommands
What's Changed
Full Changelog: 3.4.1...3.4.2
3.4.1 | Group Ride Changes & Bug Fixes
Release Highlights
- Display Controller Changes 🤖
- New Skript Syntax📜
- API Breaking Changes 🔨
- Bug Fixes 🐛
Display Controllers
- Updated the
groupPropertiessection, allowing for offsets in any direction, instead of just verticalUpdated section below
groupProperties:
#Reverses this group's follow property directions
#This is useful if your group was oriented in the opposite direction than intended
flip: false
#The ride offset that should be applied to the group when riding an entity, from the ridden position
offset:
x: 0
y: 0
z: 0
#Determine if the group should be visible by default when spawned
visibleByDefault: trueSkript Changes
- Added
Active Group Ride Offsetto apply an offset to an active group while its riding an entity
set {_offsetvector} to {_activegroup}'s ride offset
set {_activegroup}'s ride offset to vector(0,1,0)API Changes
New Version: 3.4.1
Breaking Changes
- Replaced
verticalOffsetwith arideOffsetvector inActiveGroup. This allows for offset a group riding an entity in any direction, rather than just vertically
Bug Fixes / QOL
- Fixed an issue causing chunks to load while despawning/unregistering a
SpawnedDisplayEntityGroup, when they shouldn't force load - Made performance improvements when despawning/unregistering a group
- Improved performance when updating a packet-based group's location
- Fixed issues that prevented a
.bdenginefile from being read correctly
What's Changed
Full Changelog: 3.4.0...3.4.1
3.4.0 | Mannequins & Placeable Groups
Release Highlights
- Mannequin Entities 🚶♂️
- Placeable Groups 🔳
- Added and Changed Many Commands 💻
- New Skript Syntax and Changes📜
- New API Additions & Breaking Changes 🔨
- Bug Fixes 🐛
General Updates
- Many wiki updates
- API Dependency Fixed
- Added
Placeable Groups, which are groups assigned to an item of a block type. When the block is placed, the corresponding group is spawned at the block's location - Added
MannequinPart Type
Commands
New Commands
-
Place Commands
- The new
/deu place ...commands can be used to assign groups to an block type item, spawning the group when the block is placed - View all related commands with
/deu place
- The new
-
Mannequin Commands
/deu mannequin ...commands can be used to set/change the data of a selected mannequin entity- View all related commands with
/deu mannequin
-
/deu text addline- Add an additional line of text to a text display- Permission:
deu.text.set
- Permission:
-
/deu display resettranslation- Reset a display entity's translation- Permission:
deu.display.translate
- Permission:
Changed Commands
-
Display Commands
/deu display ...commands are commands that were previously under/deu parts, but specifically apply to display entities. The following commands were moved with their new permissionssetblock| Permission:deu.display.setblockglowcolor| Permission:deu.display.glowcolortranslate| Permission:deu.display.translatescale| Permission:deu.display.transformbillboard| Permission:deu.display.billboardbrightness| Permission:deu.display.brightnessviewrange| Permission:deu.display.viewrange
-
/deu group move's duration is now optional -
Added optional
-allparameter to/deu parts moveand/deu parts movehere -
Added optional
-allparameter to/deu interaction pivot -
Added optional
-addtogroupparameter to/deu parts createto automatically include the create part in a player's selected group
Removed Commands
- Removed
/deu interaction pivotselection
Animations
/playsoundcommands in an animation data are now converted to be played in the animation- Resource Pack sounds can now be added to
Animation Frame Points
Skript Changes
- Syntax for Mannequins and Placeable Groups will come in a future update
New Events
PreItemPlaceGroupEvent- called before a player places a group using an item of a block typeItemPlaceGroupEvent- called when a player places a group using a item of a block type
API Changes
New Version: 3.4.0
Breaking Changes
AnimationSoundhas been renamed toDEUSound- Renamed
ActivePart#getInteractionTranslationtoActivePart#getNonDisplayTranslation - Renamed
DisplayUtils#getInteractionTranslationtoDisplayUtils#getNonDisplayTranslation - Renamed
PacketUtils#translateInteractiontoPacketUtils#translateNonDisplay - Renamed
ChunkAddGroupInteractionsEventtoChunkAddGroupEntitiesEvent -
Renamed
ActivePartscale methods#setXScale→#setDisplayXScale#setYScale→#setDisplayYScale#setZScale→#setDisplayZScale#setScale→#setDisplayScale
Additions/Changes
-
New Events
PreItemPlaceGroupEvent- called before a player places a group using an item of a block typeItemPlaceGroupEvent- called when a player places a group using a item of a block type
- Added
ActiveGroup#addEntityto add a part representative of the entity to the group - Added
ActivePart#teleport - Added
ActivePart#isDisplayto see if a part is of a display type - Added
AcitvePart#canGlowto see if a part will visibly glow when glowing is applied to it - Added many
Mannequinrelated methods toActivePart - Added
PlaceableGroupDatato assign a group to an item - Added
PlaceableGroupManagerto change and get placeable group properties for/from an item DisplayUtils#pivotmethods now accept any entity, instead of only Interactions
Bug Fixes / QOL
/deu parts selectnow visually marks display entities instead of listing them in chat- Left clicking the entities presents a clickable message, adding the entity to the player's selected group
- Fixed
/deu parts adapttagsnot functioning as expected - Fixed
/deu parts move&/deu parts moveherenot working correctly in certain situations DisplayUtils#isInGroup(Entity)now correctly checks if an entity is in a group- Fixed
BDEngineAnimation Datapack conversion for multi-command models - Fixed clicks on Interaction entities not being recognized in some cases
- Improved accuracy of packet-based group's location update on its ridden entity
- Group parts are no longer registered in two different locations, somewhat reducing memory usage
- Players can no longer have invalid groups selected and successfully execute commands
What's Changed
Full Changelog: 3.3.8...3.4.0
3.3.8 | Bug Fixes
Release Highlights
- Bug Fixes 🐛
Bug Fixes / QOL
- Fixed spawn/load animations not saving nor playing on packet-based groups
- Fixed an
NPEthat occured when stopping animations - Fixed an issue where Interaction entities would have the incorrect pivot after cloning or converting a group to become packet-based
- Frame Points & Packet Group Points are now hidden after despawning a group
What's Changed
Full Changelog: 3.3.7...3.3.8
3.3.7 | New Commands & Skript and Bug Fixes
Release Highlights
- New Commands & Command Fixes 💻
- Skript Changes/Fixes📜
- New API Additions 🔨
- Bug Fixes 🐛
Commands
New Commands
- Added
/deu group list- Lists all saved display entity groups/models
- Permission:
deu.list
- Added
/deu anim list- List all saved animations
- Permission:
deu.list
- Added
/deu anim listactive- List all animations currently playing on a group
- Permission:
deu.anim.listactive
Command Fixes
/deu group merge&/deu group setspawnanimnow work as intended- Fixed
/deu group setspawnanim's tab completion
Skript Changes/Fixes
- Changed user input patterns:
Part Type:type→part-typeInteraction Click Type:type→i-click-typeAnimation Type:type→animation-typeGroup Spawn Reason:reason→group-spawn-reason
These changes prevent conflict with
Skriptsyntax and other addons
API Changes
New Version: 3.3.7
- Added
ActiveGroup#getActiveAnimatorsto get all animators actively animating on a group
Bug Fixes / QOL
- Fixed server performance issues when using animations, entity following,
DisplayControllers, etc - Fixed packet-based parts (typically Interactions) not appearing in the correct position
- Fixed an NPE that occurred when getting an Interaction part's commands
What's Changed
- 3.3.7 by @PZDonny in #60
- Fix parts appearing at incorrect position when autoshown to a player by @PZDonny in #61
- Fix parts appearing at incorrect position, again... by @PZDonny in #62
Full Changelog: 3.3.6...3.3.7
3.3.6 | JSON Format & Animation Camera
Release Highlights
- JSON File Format 🧶
- Animation Camera 🎥
- Added and Changed Commands 💻
- New Skript Syntax and Changes📜
- New API Additions & Breaking Changes 🔨
- Bug Fixes 🐛
General Updates
- The default command has been changed to
/deu/mdisand/managedisplayswill remain functional - BDEngine Datapack Conversion now supports
BDEngine v2026.1and itsAnimation CameraSystem - Added a JSON save format, making model and animation files editable
Commands
New Commands
- Added
/mdis anim savejson- Save an animation as a JSON file in the plugin's
animationsfolder - Permission:
deu.anim.save
- Save an animation as a JSON file in the plugin's
- Added
/mdis anim selectjson- Select an animation from a JSON file in the plugin's
animationsfolder - Permission:
deu.anim.select
- Select an animation from a JSON file in the plugin's
- Added
/mdis group savejson- Save a group as a JSON file in the plugin's
savedentitiesfolder - Permission:
deu.group.save
- Save a group as a JSON file in the plugin's
- Added
/mdis group spawnjson- Spawn a group from a JSON file in the plugin's
savedentitiesfolder - Permission:
deu.group.spawn
- Spawn a group from a JSON file in the plugin's
Changed Commands
/mdis anim playand/mdis anim previewplaynow accept a-cameraoption to put the player in the animation's camera view
Skript Changes/Fixes
New Syntax
- Added
Animation Type of Display Animatorto get the animation type of aDisplay AnimatorExample:
set {_animtype} to {_displayanimator}'s animation type - Added
Active Part Datato get or change the data of an active partExample 1:
set {_spawnedpart}'s deu block to oak_stairs[facing=east]
Example 2:set {_text} to {_packetpart}'s deu text - Added New Events
PrePacketGroupCreateEventcalled before aPacketDisplayEntityGroupis createdAnimationCameraStartEventcalled when a players begin viewing an animation cameraAnimationCameraEndEventcalled when players finish viewing an animation cameraAniamtionCameraPlayerRemovedcalled when a player is removed from an animation camera before its finished
- Added
Is Player In Animation Camera?to check if a player is viewing an animation cameraExample:
if {_player} is in an animation camera: - Added
Play Animation Camerato make a player follow an animation camera's path, without needing an animation playingExample 1:
play camera on {_packetgroup} with {_animator} for {_player}
Example 2:play camera on {_activegroup} using {_animation} for {_player} starting at frame 8 with a start transition of 3 seconds and an end delay of 10 ticks - Added
Stop Animation Camerato remove a player from an animation cameraExample:
stop animation camera for {_player}
Changes
- Removed
parttype_andanimtype_prefixes forPart TypeandAnimation TypeInteraction Entity Part Type is recognized as
deu_interaction - In
Active Part's Type's syntax,activeis now optional Saved Group to Packet Groupnow acceptsGroup Spawn Settings- Updated
Animate Active Groupto allow putting players in animation cameras, when the animation is for them.Example:
start packet animation on {_packetgroup} with {_displayanimator} for {_player} and use camera - Updated
Stop Animationto both stop a player from viewing an animation and remove them from an animation cameraExample:
stop animation on {_activegroup} from {_displayanimator} for {_players::*} and stop camera
API Changes
New Version: 3.3.6
Breaking Changes
- Removed
PacketDisplayEntityGroup#teleport(Location, boolean, boolean)The other
#teleportis still exists - Removed
PacketDisplayEntityGroup#teleportSafe#teleportis safe - Renamed
#getDisplayTransformation,#getDisplayBrightness,#getDisplayViewRange,#getDisplayTeleportDurationto#getTransformation,#getBrightness,#getViewRange,#getTeleportDurationrespectively, inActivePart DisplayAnimator#playUsingPacketsnow requires anAnimationTypeto be specified, when using the static method
Additions/Changes
- Added
#saveDisplayAnimationJsonand#getAnimationFromJsontoDisplayAnimationManager - Added
#saveDisplayEntityGroupJsonand#getGroupFromJsontoDisplayGroupManager - Added a
DisplayEntityGroup#createPacketGroupmethod that acceptsGroupSpawnSettings - Added
DisplayAnimator#playCamerato make a player follow anAnimationCamera's path - Added
DisplayAnimator#stopCameraViewto stop a player from following anAnimationCamera's path - Added
DisplayAnimator#isInCamerato check if a player is in an animation camera - Added Events
PrePacketGroupCreateEventcalled before aPacketDisplayEntityGroupis createdAnimationCameraStartEventcalled when a players begin viewing an animation cameraAnimationCameraEndEventcalled when players finish viewing an animation cameraAniamtionCameraPlayerRemovedcalled when a player is removed from an animation camera before its finished
Bug Fixes / QOL
- Fixed
Animation Frame Pointsounds not loading nor playing correctly - Fixed an issue where teleporting
PacketDisplayEntityGroups across worlds would not correctly update visibility in either world - Fixed an issue where if a
PacketDisplayEntityGroup's vehicle changes worlds, its visibility would not correctly update in either world
What's Changed
Full Changelog: 3.3.5...3.3.6
3.3.5 | Folia Support, New Animation Particle, Bug Fixes
Release Highlights
- Folia Support 🍃
- New Animation Particle & Fixes 🎇
- Updated Skript Syntax📜
- API Changes 🔨
- Bug Fixes 🐛
General
- Added
FoliaSupport - Added
Tinted LeavesAnimation Particle
Skript Changes/Fixes
Updated Syntax
Add/Remove Part Tagsyntax now works for packet-based partsExample:
add part tag "newtag" to {_packetpart}Teleport Active Groupnow accepts multipleActive GroupsActive Group Follow Entity Directionno longer requiresft, prefixing every follow type
Fixes
- Fixed packet-based groups not having their tag settable through
Skriptsyntax
API Changes
New Version: 3.3.5
Additions
- Added
ActiveGroup#isRegistered, apply now to bothSpawnedDisplayEntityGroupandPacketDisplayEntityGroup - Added
ActivePart#addTagsto add multiple tags to a part at once
Bug Fixes
- Fixed an issue where adding more parts to a packet-based group could result in passenger desync when teleporting
- Fixed an issue where a console error (NullPointerException) would occur when enabling
autoshowfor a packet-based group then quickly unregistering it. - Fixed Animation Particle building not functioning correctly on lower server versions (
1.20.4tested) - Fixed Animation Particles not spawning correctly on server version changes
- Fixed saved block displays, saved as
chain, not being recognized in versions1.21.9+due to the block being renamed toiron_chain - Enabling
autoshowon packet-based groups no longer shows the group to players in other worldsThis behavior is intended but was not working as expected
What's Changed
Full Changelog: 3.3.4...3.3.5
