- Added an optimization to speed up how the plugin checks which block display a player is looking at when placing/breaking a block display, as well as the associated API function.
- For schematic items (obtained with the new /d item command), you can now cleanly place the schematic on walls and ceilings. Additionally, when placing on top of a block such as trap doors, slabs, etc., it will adjust it so that the display is placed directly on top of the block with no gap.
-
Note: Players no longer need the
dexterity.build permission to place a schematic item. It should be able to integrate with your world protection plugin. This makes it possible to add items to a survival server. They will still need
dexterity.click to have the plugin detect when they break a schematic item for it to drop.
- Made it so that /d remove (or /d rm) will accept a parameter for the label of the saved display to remove:
/d rm <label>, rather than only removing the player's current selection.
- Fixed a bug where the description for the
/d item command was missing.
Added a new command:
/d item! This command assigns a saved Dexterity display to an item that players can break or place.
Example:
1.
/d schem load flowers (Schematic file can be found on the discord). In general, the display the item is based off of must be labelled (/d save).
2. Hold a flower pot from creative mode
3. Run
/d item - The item should drop from where the display was
4. Placing this flower pot item should now place the flowers schematic instead!
Permissions:
dexterity.command.item for /d item command
dexterity.click necessary for player to be able to break the display they placed
Make sure to test that your specific world management plugins are compatible before giving players these items. More sophisticated plugin hooks can be added in the future.
- There will now be an action bar displayed whenever a mask (/d mask) is enabled. This is to hopefully prevent confusion for why block displays can't be selected if the builder forgets the mask is enabled
- Made it so that "/d axis" will toggle scaled axis labels without needing any further command parameters.
This update adds the following to en-US.yml:
Code (Text):
mask-enabled: "&7Mask enabled with %material_count% block type(s)"
- Added a possible flag "-center" to the /d align command. If this is used, instead of aligning a selection's corner to the nearest block, it will align the selection's center (visible with /d i) to the nearest whole block.
- Added a config entry "wand-item" to specify a different item for the Dexterity wand (/d wand). This is only for the Dexterity wand, the plugin will still hook into the WorldEdit wand like normal.
- Fixed a bug where doing multiple Schematic paste() would not create unique labels for the newly created displays
- Added a function to the rotation API that clears the display's rotation queue:
DexRotation.clearQueue(). An example use case is if an animation stops, it must stop immediately.
- Added config options to define the largest and smallest that a block display can be scaled as. This is for safety so that a builder cannot accidentally create entities so large they can not be selected, or entities so small they can't be seen. These limits do
not apply to the API, however.
This update adds the following lines:
config.yml:
Code (Text):
max-scale: 20 #maximum dimension to prevent giant block entities
min-scale: 0.01 #minimum size to prevent extremely tiny entities that can be lost
en-US.yml:
Code (Text):
cannot-exceed-scale-limit: "&4Error: &cCannot exceed maximum or minimum scale limit!"
- Changed how the plugin loads block display entities so that it accounts for chunks that must be loaded by a player. If a chunk is loaded and the plugin is missing some of the entities in saved displays, it will check if it found them in the loaded chunk.
- Added debug command
Code (Text):
/d debug:purgeunloaded
to delete saved display files that have unloaded entities, or entities that no longer exist
- Added
-saved_displays flag to
/d reload to manually reload all saved display files.
- Added optimizations to improve the performance on how the clicked block display entity is calculated.
- Fixed a bug where schematics would not show up after being imported if they were imported into a world that isn't the server's default
- Added a configurable cooldown to the main /d command. This cooldown will not apply if the player has permission
dexterity.nocmddelay.
- Fixed a bug where particular mushroom or flower block displays were not given the correct dimensions when placing/breaking.
This update adds these lines to the following files:
config.yml:
Code (Text):
command-cooldown-seconds: 0.5 #keep cooldown low for good user experience
en-US.yml:
Code (Text):
command-cooldown: "&cYou must wait %remaining% more second(s) to do this!"
Note: The plugin now will only support as far back as Java 17
- Fixed a bug where /d undo and /d redo were not working after doing /d replace
- Fixed a bug where cake blocks displays were not given the correct block dimensions when clicked
- Fixed a bug that might cause a selection to occasionally disappear after running edit session commands.
- Added a debug command
/d debug:resettransformation to manually reformat the visual data of the block display entities in a selection to the convention that the plugin expects. Try this command if the block displays were edited by another plugin and having issues with Dexterity.
- The debugging commands will now tab-complete if the player has admin permissions and types in "/d debug:" in the chat. Also added details to the wiki for these commands.
- Patched a bug where, in specific circumstances, it could be possible for a player to remove block displays without the proper level of permission
- Improved the performance of the plugin main command and tab-complete.
- Created an API interface to directly emulate a player running a command (see javadocs)
- Added the parameters
min_scale and
max_scale for the
/d debug:kill command. These parameters can help to recover a world if there are unrecoverable/un-selectable massive or tiny block displays around.
- All saved displays will now have one or many "owners," a list of players that can edit the display. If a display's owner list is empty, it has the same behavior as before this update, and no restrictions will apply per-player, effectively making it public. The permissions for which edits or commands (if any) a player is allowed to do will still depend on their permissions, same as before this update. Whenever a player does /d save, /d schem load, etc., it will automatically assign them as the owner of the display.
- Added the permission
dexterity.select.unowned to allow an admin/staff to edit a display without needing to be on its owner list.
- Added the command
/d owner, with alias
/d owners, to view and modify the owner list of a display.
- Fixed a small bug where particular language file entries were missing
- Added a custom event:
SessionSelectionChangeEvent. This is a simple event that is called when a player purposely changes their selection, such as by clicking with the wand or doing /d sel, /d clear, etc. This event does not cover more advanced cases where the selection might change, such as for /d undo.
This update adds the following to the default language file:
Code (Text):
owner-list-header: "&^&lDisplay owners list: &**Page &**&l%page%&**/%maxpage%"
info-format: "&^Selected &*%count%&^ block displays in &*%world%"
info-format-saved: "&^Selected &*%count%&^ block displays in &*%world%&^ labelled &*%label%"
player-not-found: "&4Error: &cCould not find player %player%!"
owner-add-success: "&^Added &*%player%&^ as an owner of this display!"
owner-remove-success: "&*%player%&^ is no longer an owner of this display!"
owner-remove-success-warning: "&6Warning: &eThis display is now public, anyone can edit!"
owner-description: "Edit the display's owner list"
seat-description: "Toggle ability to click to sit"
owner-add-usage: "/d owner add <player>"
owner-remove-usage: "/d owner remove <player>"
- If the
-nofollow flag is sent in the /d clone command, it will no longer require that you do /d paste. This is hopefully to avoid confusion for a paste that does essentially nothing, but be careful to ensure that the copy of the selection is used, otherwise the entity count is doubled for no reason.
- Added a debug command
/d debug:kill radius=, which will remove all block display entities within a radius specified by the player, even if they are not created by Dexterity. Use this command as a last resort, such as for recovering a world.
- If a display is teleported while a player is sitting on it (
/d seat), the player will now move with the display while staying seated.
- Added more API functions to create markerVectors. Instead of requiring a
from and
to location, it can now take a
from location and a Vector.
- Added custom API event
DisplayTranslationEvent, an event that is called whenever a player or API purposely moves (such as with /d move or DexterityDisplay#teleport) any Dexterity selection.
- Added an alias
/dx for the main /dex command in case /d is taken by another plugin.
- Added a new command:
/d seat. This will toggle a saved display's ability to let a player sit on it. The location will be at the center of the display, which can be moved with
/d recenter, or optionally with the
y_offset parameter in /d seat. Players need the
dexterity.click permission to be able to click the display to sit on it.
This update adds the following to the default language file:
Code (Text):
seat-success: "&^Players with &*dexterity.click&^ permission can sit on &*%label%&^!"
seat-disable-success: "&^Players can no longer sit on &*%label%&^!"
- Added the sub-command
/d schem list to list all schematics in the plugins/Dexterity/schematics folder.
Note: You can also use WorldEdit schematics with block displays (with
//paste -e), although Dexterity schematics are more efficient at storing this type of entity data and have more features.
This update adds the following to the default language file:
Code (Text):
schem-list-header: "&^&lSchematics: &**Page &**&l%page%&**/%maxpage%"
- Changed the default message for adding a command to run when a display is clicked (/d cmd) to note that players need the
dexterity.click permission to be able to use the command. This requires a permission so that you can have less overhead if you aren't using this feature.
- The /d cmd command will now tab-complete the command IDs when applicable
- Fixed a small bug where tab-complete was showing for players who don't have the necessary permissions (such as
dexterity.command)
- Fixed a console error that occurred when a builder tries to place certain material/item types that don't have block displays supported.
- Added the sub-command
/d schem delete <name> to delete an existing schematic file
- Added tab-complete to the schematics command to list existing schematic files
- Added a message for when a player with builder permissions clicks on a saved display without a wand to clarify they can use
/d unsave to build on the display.
- Made a small fix to
/d axis, if you clear your selection with
/d clear it will now clear the axis arrows as well.
This update adds the following to the default language file:
Code (Text):
saved-click-default: "&^Use &*/d unsave&^ to edit or &*/d cmd&^ to add a command on click!"
- Block physics updates are now disabled for /d deconvert, meaning that you can place things such as flower stems as block displays, then use /d deconvert to put them as normal blocks, and they should stay.
- You can now use just "/d glow" to disable the glow, no need for the -none flag.
- Optimized rotations along the Y (vertical) axis. Because of how Minecraft uses yaw in rendering an entity, the Y axis is by far the simplest to rotate around. Thus, if you are using the API to create an animation, it will be the most performant if you only rotate around the absolute Y axis (usually different than the yaw axis).
- Added a missing line to the default language file, "axis-usage"
- Added DexterityDisplay#remove() to simplify the API - the default is false in DexterityDisplay#remove(boolean restore_blocks)
Added the following to the default en_US.yml file:
Code (Text):
axis-usage: "/d axis <show | set | off>"
- Fixed a small bug where doing
/d undo recreated a display that incorrectly had glow after doing
/d remove on a selection/display that was recently selected.
- Fixed a bug where on 1.21 the block rotation would be messed up when transferring a display to a different world
- Fixed a bug where light blocks and structure voids were being converted as block displays in
/d conv. These types of materials form useless invisible block displays when converted, which can be annoying with the Dexterity clicking feature.
- The /d tile command can now accept a normal positional argument for the "count." For example, instead of writing
/d tile count=3 y=1 you can just write
/d tile 3 y=1.
- Fixed a small bug where the changes from
/d align did not persist if the user is in an editing session where the display is following their motion (such as from
/d move).
- Fixed a bug where the plugin was unable to load a custom language file specified in the config
- Added an alias for /d tile called
/d stack to follow what worldedit named the operation
- Added permission
dexterity.command.cmd.console for `/d cmd add` commands that are for the console to execute. Builders/admins still need
dexterity.command.cmd to access /d cmd, where clickable commands can be added. To add a clickable command to be executed by the console, they will need additionally need this new permission. This is an important security measure to ensure the console cannot be accessed by mistake through /d cmd.
- Added attributes "rx," "ry," and "rz" to
/d move and
/d tile commands. These stand for "relative x," "relative y," and "relative z," respectively. Similar to
x, y, and
z attributes, these attributes will move/tile the selection relative to its rotational axes. You can visualize the rotational axes with /d axis
- Fixed an error that occurred when
/d schem import was run with no schematic name.
- Changed the default number of edit transactions to store down to 15 in the config.
- Fixed a bug where glow color was not recorded in an exported schematic
- If you do
/d move with no parameters for a display in a different world, it will now teleport the display to your location in the new world.
- Added alias "rm" for /d remove, and aliases "/d schem load" and "/d schem save" for importing and exporting schematics respectively.
- Added an ability to import or export a saved selection! Use
/d schem import <name> to import a
.dexterity file from the plugin's schematics folder (plugins/dexterity/schematics), or
/d schem export to export a saved display. Note that to export, you must have first used /d save <name> on the selection. A discord channel will be created soon to provide a means to distribute your schematics!
- Fixed a small bug where some command descriptions were missing from the default language file
This update adds the following to the default language file:
Code (Text):
console-exception: "&4Error: &cCould not perform this operation! Check the console."
file-already-exists: "&4Error: &cFile '%input%' already exists!"
schem-export-success: "&^Exported %label%&^ to schematics folder!"
schem-import-success: "&^Successfully imported %label%&^ by &*%author%&^!"
reload-description: "Reload config and language file"
schem-description: "Import or export a pre-built display"
tile-description: "Arrange clones of selection in a line"
schem-usage: "/d schem <import | export> [name]"
- The /d mask command will now accept a list of block types. Additionally, the "-invert" flag was added to make the mask select everything
except the list of material types entered.
Example:
/d mask stone,grass_block will select only stone or grass in the selection
/d mask stone grass_block -invert will select all block displays in the selection that
aren't stone or grass. (You can use either commas or spaces for the list)
- You can now simply type
/d mask to disable the mask, no need for the "-none" flag.
- Added a new command:
/d tile count= x= y= z=
This command is similar to /d clone, except that it will clone a set number of times, with each time moving the center of the clone by the amount specified in x, y, and z. This makes it easy to make many clones of the same display, all ordered in a line. You can use /d tile twice to make a grid, and 3 times to make a cube. This command requires permission
dexterity.command.tile
- Added a function
clone(DexterityDisplay d) to the API. This function does the same as /d clone. Note that you must move the new clone somewhere, otherwise it will superimpose the existing display.
This update adds the following to the default language file:
Code (Text):
must-enter-value: "&4Error: &cMissing required value '%value%'!"
tile-success: "&^Successfully tiled %loclabel%&^!"
- Added
/d reload command to reload the config with permission
dexterity.admin
- Added permissions "dexterity.command.wand" for /d wand, and "dexterity.command.highlight" for /d highlight (or /d h) commands. Also added "dexterity.command.*" for access to all commands
- Fixed the plugin permissions list, it should now show all available permissions in a LuckPerms editor for example.
- Added
/d axis reset [rotation|scale] to reset the internal rotation axis to 0 or reset the internal scale axis to 1 (The /d axis command does not change any block displays, just how the engine interprets the selection).
- The /d consolidate command will now do its calculations asynchronously. This allows it to offload as much calculation as possible to another CPU core, and in this case cuts down on the number of packets that need to be sent.
- Fixed a bug where /d undo on a /d consolidate edit would not remove the larger sized block displays
- You can now use /d clone [label] to select a saved display and then clone it, rather than doing /d sel <label> first.
- If you are in a different world or more than 80 blocks away from a cloned selection, it will automatically be teleported to you after doing /d clone
- Made major improvements to /d consolidate - It will now allow you to continue consolidating all blocks instead of limiting it to powers of 2, allowing to remove even more entities without changing the shape.
- Fixed bugs for /d consolidate for rotated selections or blocks of different sizes (carpets, slabs, fences, etc.).
- Added the possibility for another plugin to let Dexterity ignore its block displays by adding "dex-ignore" as an entity metadata. If a block is ignored, it can not be clicked through the Dexterity plugin, but can still be in a selection. It does not matter the value held in the metadata.
Example code to make Dexterity ignore an entity to prevent plugin conflicts:
Code (Text):
blockDisplay.setMetadata("dex-ignore", new FixedMetadataValue(plugin, true));
- Added
/d axis set <rotation | scale> [x= y= z=] to reset the axis of a display. This is an advanced command, but it can allow you to rotate along strange angles or change how
/d scale -set works interprets the current scale of a display.
- Fixed errors that occurred when some display vector types were removed
- Added the flags 'left_only' and 'right_only' for /d cmd add. If left_only is used, then the command will only run if the player left-clicks the display, and vice versa for right_only. These flags also have aliases 'l' and 'r' respectively.
- Added the command
/d axis to visualize the scale or rotation axes of a selection. For example, use
/d axis show rotation to show the direction of the pitch (red), yaw (green), and roll (blue).
- Added custom events
TransactionUndoEvent and
TransactionRedoEvent to the API
This update adds the following to the default language file:
Code (Text):
unknown-input: "&4Error: &cUnknown input: '%input%'!"
axis-description: "Show rotation and scale axes (Advanced)"
- Added the alias
/d p for /d paste, and fixed a bug where the paste command was not in the tab suggestions
- Added a custom event to the API for when a transaction is added to the stack for a player's edit session,
TransactionCompletionEvent
- Added a new function named
markerVector to the API that displays a vector between 2 locations, which can help in debugging projects that deal with precise locations
- Added a 'world' parameter for the
/d list command, allowing for a filter for if the list grows very large.
- Added a check for
/d save that ensures the display has at least 1 block in it.
- Cleaned up the /d info message and added the command to the list, added
/d i alias for this command.
- If a display is saved (with /d save <label>), admins must unsave it before they can edit by placing or breaking blocks. This makes it easier to test commands that run when the display is clicked.
- If there are physical blocks inside of the cuboid selection when running /d convert, they will be added to the selection instead of creating a new selection once the blocks are converted.
1.0.7a: Fixed a duplication issue that was caused from this change.
- Fixed a bug where the command written in
/d cmd add was put into lower case.
- Fixed a bug where the optional permission parameter was sometimes ignored when /d cmd commands run on display click.
The following line was added to the default language file:
Code (Text):
info-description: "Show information about selection"
- Cleaned up the /d info message and added the command to the list.
- If a display is saved (with /d save <label>), admins must unsave it before they can edit by placing or breaking blocks. This makes it easier to test commands that run when the display is clicked.
- If there are physical blocks inside of the cuboid selection when running /d convert, they will be added to the selection instead of creating a new selection once the blocks are converted.
- Fixed a bug where the command written in
/d cmd add was put into lower case.
- Fixed a bug where the optional permission parameter was sometimes ignored when /d cmd commands run on display click.
The following line was added to the default language file:
Code (Text):
info-description: "Show information about selection"
- Added the
/d command (or /d cmd) command! This will add console commands to run whenever a player with the
dexterity.click permission clicks a display, replacing %player% in the command text for their name.
- Added the permission
dexterity.maxvolume.#, where the # is a number that is below the configured maximum volume (
max-selection-volume). For example, a lower rank could have
dexterity.maxvolume.2000 to limit the volume to 2,000 entities or blocks.
- Added a new permission 'dexterity.click' to allow Dexterity to calculate whether a player clicked a block display. More functionality will be added to this in the future, players still need the 'dexterity.build' permission to place/break block displays by hand.
- Fixed a bug where the old selection highlight was not updating correctly when a new selection was made.
- Block physics updates will now be cancelled in the region when doing /d convert.
- Fixed the /d scale command for when a rotated selection is scaled in a particular axis, allowing for it to skew in the relative direction that the selection has been rotated.
- Fixed a bug where the roll of a block was incorrect if the block was skewed
- Added an error message for when a skew operation is impossible, such as if it would have to make parallelograms.
This update adds the following lines to the language file:
Code (Text):
selection-too-complex: "&4Error: &cToo many rotation types in selection to do this!"
- Fixed a bug that prevented a display from being selected after an edit session (such as moving it while you walk)
- Added a protection to prevent data from being lost if the jar file is modified without properly restarting the server.
- Fixed an error that was occurring on Minecraft versions less than 1.20.2. Recommended to use this plugin on a server that is running at least 1.20.2 so that smooth animations can be used.
- Added a check to make sure the server version is at least 1.19.4, as block displays did not exist in previous Minecraft versions.
- Changed the API return type to a DexBlock array for DexterityDisplay::getBlocks. Use the addBlock(DexBlock) and removeBlock(DexBlock) to alter the blocks in a display/selection.
- Fixed a small bug where the usage message was sent twice for /d glow and /d mask.
- If a string is missing from the language file, it will instead load the string from the default language file and put a warning in the console.
- Fixed the
/d undo command for when it has to undo a
/d consolidate edit.
- Shortened the description for
/d consolidate
- Added
/d consolidate [material], a way to merge similar block displays in a selection into one, allowing for a way to cut down on lag on the client-side.
- Refactored many aspects of the API to be more intuitive and safe
- Added a volume check when setting locations to not exceed what is configured
- Improved the way that calculated data is cached for rotations