Fixes#3612, in which `/list`'s tab complete previously revealed the presence of vanished players in certain groups, and fixes#3613 in which `/time set` did not properly check whether the player had permission to change the time.
Adds an `amplifier:<value>` potion meta attribute to MetaItemStack that applies a raw amplifier value, instead of translating inputs between 1 and 3 to match their vanilla names like `power:<value>` does. This matches the Mojang `/effect` command, which doesn't translate any potion effect amplifiers, and allows for creation of level IV potions (using `amplifier:3` instead of a `power` value) through EssentialsX without breaking existing usages of `power:<value>`.
More context for this commit can be found at https://github.com/EssentialsX/Essentials/pull/3592#issuecomment-678656107.
Closes#3592 and fixes#3589.
Co-authored-by: MD <1917406+md678685@users.noreply.github.com>
Fixes#3579 (async `/skull` command)
Fixes#3336 (improve codestyle of commands)
Partially addresses #3339 (`/spawn` and `/setspawn` are now hidden from tabcomplete)
Closes#3087 (`/paytoggle` is now a loop command)
Closes#1332
The spawner delay feature has been broken in Essentials for as long as anyone can remember. The reasons for this are mentioned in the issue above.
This PR fixes this by changing the command to utilize new API for setting the minimum and maximum spawn delay on spawners. This API was added in 1.12.2, so all supported versions before that (1.8.8 thru 1.12.1) require NMS to function properly. I'm aware that Essentials avoids NMS for maintainability reasons, however that should not be of much concern here since all versions 1.12.2 and later are going to be using the Bukkit API. Hence, no NMS updates will be necessary.
Also let me know if you want the NMS code refactored somewhere else. I saw the net.ess3.nms packages, but I wasn't sure where this would fit into the organisation of that.
Tested on:
1.8.8, 1.9.4, 1.10.2, 1.11.2 (NMS)
1.12.2, 1.15.2 (Bukkit API)
d9bf099c3d introduced a regression where `/tpaccept` no longer unconditionally cancels the teleportation request when it is accepted. This restores the previous request cancellation behaviour.
Fixes#3563.
Fixes a problem where skeleton trapped horses cannot be killed in commands such as `/remove skeletonhorse` (or even `/remove all`) because they are tamed by non-player entities. There is a separate command for killing tamed entities, however this kills other player-owned entities which is undesirable.
This can be replicated easily by spawning some skeleton traps like so:
`/summon skeleton_horse ~ ~ ~ {SkeletonTrap:1}`
and then attempting to run `/killall skeletonhorse`.
After this small change, any tamed skeleton horses will be retained, but non-player-owned skeleton horses will be removed as appropriate.
Closes#3475.
Adds an event which allows developers to see & cancel when users attempt to teleport home. This event is needed over `PreTeleportEvent` due to the fact that it would be extremely difficult to accurately filter it by the /home command.
Closes#3401
Adds `/tpr` and `/settpr` commands, which respectively allow you to teleport randomly or set teleportation parameters.
Server owners are expected to set the center with `/settpr` before players can use `/tpr`. They can also set the minimum and maximum range to be teleported from the center (default 0-1000).
Also includes an event where plugins can adjust or cancel the teleport.
Closes#3154.
Co-authored-by: pop4959 <pop4959@gmail.com>
Co-authored-by: MD <1917406+md678685@users.noreply.github.com>
Adds a command to add to or clear an item's lore.
Closes#1911.
This allows deleting kits ignoring case; fixes#3370.
I don't know if this is the ideal fix, but everything else for kits seems to nuke the letter casing. Not really sure why in `Kits.java`, the keys needs to get lowercased in a new mock `ConfigurationSection`. It just seems like this would purely make it harder to access the same section again in the real config. Instead, I just added a different method that matches the real config name of the kit (as set in `/createkit`, which currently allows uppercase).
Fixes#3189
This PR makes improvements to the suicide and kill commands, namely:
1) Call `EntityDamageEvent` with damage equal to `Float.MAX_VALUE`, which is the amount that is inflicted by `/minecraft:kill`.
2) Removes the calls to `Damageable::damage` which ends up damaging the player with `DamageSource.GENERIC`, and later causing another `EntityDamageEvent` where as a result the last damage cause gets set to `EntityDamageEvent.DamageCause.CUSTOM`. Thus, the `EntityDamageEvent` that Essentials calls gets rendered useless when someone tries to get the damage cause of the player in `PlayerDeathEvent`. Setting health to zero forcibly kills the player without causing damage.
3) Add `getTabCompleteOptions` to the suicide command, as it currently incorrectly suggests players.
This PR reduces the number of sync loads occurring on any teleport caused by essentials.
Fixes#2861Fixes#2287Fixes#3274Fixes#3201Fixes#2120
Before this PR, essentials would get a block multiple times causing sync loads to check if it was safe to teleport to. Now, the target block's chunk if fetched async with PaperLib and passed along to `LocationUtil#isBlockUnsafeForUser` (which internally calls other LocationUtil methods what that chunk object) resulting in the chunk only loading once, off the main thread. The only operations remaining on the main thread is `LocationUtil#getSafeDestination`. This is due to the method's recursion which would be a pain to move async. **However:** since the chunk was already loaded async, `LocationUtil#getSafeDestination` most of the time won't cause sync chunk loads. The only time it would cause sync chunk loads is with an unsafe location near a chunk border.
-----------------------------------------
* Reduce sync teleporting loads
* Avoid argument re-assigning
* Remove async teleports when unnecessary
* Make exceptions cleaner
* Async all the things
Made an async version of every method with fallbacks for deprecated methods.
* Remove old now fallback method
* Migrate everything to the new async teleport API
* Update ITeleport javadocs
* Fix invoking via async context
* Fix /jail using deprecated method
* Fix jail join handler using deprecated method
* Rename all teleport classes to indicate async
* Remove deprecated methods
* Add (and deprecate) old teleport api
* Revert TimedTeleport.java
* Reduce Diff
* Add legacy sendToJail method
* Reduce Diff Further
* Use getNewExceptionFuture in Commandtpo
* Use getNewExceptionFuture everywhere
* Fix even more usages
* Revert LocationUtil.java
* Fix issue causing unsafe locations to not work properly
* Add deprecated notice in IUser implementation
* Use CompletableFuture#completeExceptionally for exceptions
* Use Essentials' logger in EssentialsCommand#showError
* Return implementation rather than interface
* Avoid possible deadlocks with entity ejections
* Nuke some sync loads with homes
Took 7 hours and 2 PRs to paper but it's here!
* Fix ABI and make the codestyle worse
* Make the codestyle worse because muh diff
* Further ruin the codestyle
* Fix error messages not showing in TimedTeleports
* Improve messages around beds for /home
* Fix#3274
Allow unsafe locations for different worlds + spectator mode
* Fix fly safety operators
Adds an `allow-selling-named-items` config option, which allows server admins to enable/disable the ability to sell named items with `/sell`.
Closes#1988.
Closes#908.
Closes#2196.
Fixes#2986Closes#3050Closes#3191
Refactors the clearinventory command code in such a way that fixes the problem of not being able to clear all of a specific item on newer server versions. Also re-adds data value support for older server versions that support it, which seemed to have been inadvertently removed in 79bc340.
Checked against 1.8.8, 1.12.2, 1.13.2, 1.15.2.