Compare commits

...
3171 Commits
Author SHA1 Message Date
NEZNAMY f6c8d24177 5.0.6 2025-02-06 17:54:47 +01:00
NEZNAMY ab3bd61d3c [Bukkit] Fix error 2025-02-06 17:27:46 +01:00
NEZNAMY 6a5cee8f0e [Fabric] Update to 25w06a 2025-02-05 20:15:43 +01:00
NEZNAMY 549732fc8b [Chat components] No longer track modern/legacy converted components, only handle them internally in bungeecord module 2025-02-05 19:13:56 +01:00
NEZNAMY 09d400c6fb [GitHub] Bump version to fix actions 2025-02-05 18:33:49 +01:00
NEZNAMY 7e1cdafa78 [Bukkit] Only enable packetevents bug compensation <1.13 where it's actually needed to avoid scoreboard gradient bug due to forced splitting when the option is enabled and doesn't need to be 2025-02-04 18:39:25 +01:00
NEZNAMY 434c0216d5 [Adventure hook] Fix startup error when an older version of the library is present 2025-02-04 18:28:34 +01:00
NEZNAMY d5a0ae8e71 [Scoreboard] Fix memory leak 2025-02-03 16:56:04 +01:00
NEZNAMY 79e56c6a30 [Chat components] Implement shadowColor field (currently only used for converting components created using MiniMessage) 2025-02-02 17:54:57 +01:00
NEZNAMY 11cc1c3f25 [Code style] Remove unused constructor 2025-02-02 16:12:53 +01:00
NEZNAMY 8b343bcfb6 [Chat components] Fix NPE 2025-02-02 15:36:25 +01:00
NEZNAMY ecd83beb7d [Performance] Replace stream with for loop in vanish check 2025-02-02 14:14:57 +01:00
NEZNAMY 438f21fb11 [BungeeCord] Update to build 1899 (and require it) 2025-02-01 20:43:05 +01:00
NEZNAMY dd1524cf31 [Dependencies] Bump and remove unnecessary 2025-02-01 18:40:02 +01:00
NEZNAMY 0f85aa5384 Fix broken messages from previous commit 2025-02-01 18:23:04 +01:00
NEZNAMY 4644a0ae96 [Code style] Further reduce references to EnumChatFormat class 2025-02-01 18:18:38 +01:00
NEZNAMY 84b3efe0fc [Code style] Simplify some component creations 2025-02-01 17:07:48 +01:00
NEZNAMY 511acbd5ff [Chat components] Rework component creation and converters 2025-02-01 16:45:20 +01:00
NEZNAMY 8749b3b354 [Wiki] Monthly wiki backup for February 2025 2025-02-01 13:09:27 +01:00
NEZNAMY b66e63d242 [Fabric] Implement adventure component conversion to MC components (#1425) 2025-02-01 09:43:03 +01:00
NEZNAMY ba951238c3 [Fabric] Update to 25w05a 2025-01-29 20:08:49 +01:00
NEZNAMY a4eb76f1cf 5.0.6-SNAPSHOT 2025-01-29 20:08:17 +01:00
NEZNAMY c486899dcf 5.0.5 2025-01-29 17:37:10 +01:00
NEZNAMY b212f0d5be [Velocity] Fix some console messages not being colored correctly 2025-01-27 18:44:55 +01:00
NEZNAMY caa534ff7f [MySQL] Fix upload command using wrong file path 2025-01-26 12:15:41 +01:00
NEZNAMY 9c2fac6749 [MiniMessage] Fix critical error when an ancient MM version is present 2025-01-25 19:12:47 +01:00
NEZNAMY 2a4f918a10 [RGB] Convert all RGB/Gradients for MiniMessage parser (#1408, #1414, #1421) 2025-01-25 08:55:22 +01:00
NEZNAMY b45e2afe4c [Code style] Move classes to a different package 2025-01-24 19:16:07 +01:00
NEZNAMY 2c7237e5d9 [RGB] Remove early gradient conversion (for future commits) 2025-01-24 19:10:59 +01:00
NEZNAMY 26477e3150 5.0.5-SNAPSHOT 2025-01-23 18:27:20 +01:00
NEZNAMY cba8cb57d5 5.0.4 2025-01-23 17:24:16 +01:00
NEZNAMY 599b4822e5 [Fabric] Update to 25w04a 2025-01-22 18:31:03 +01:00
NEZNAMY fbd150b353 [API] Expose TabPlayer#getServer, TabPlayer#getWorld and TabPlayer#isBedrockPlayer 2025-01-21 17:33:10 +01:00
NEZNAMY 10b252e934 [Placeholders] Fix placeholders staying incorrectly marked as bridge placeholders under very specific conditions (#1416) 2025-01-19 21:36:27 +01:00
NEZNAMY e9dfcdeb10 [Layout] If trying to use skin of an online player in fixed slot, try to get it from the player's profile if online 2025-01-19 18:16:04 +01:00
NEZNAMY 9cb2f27754 [Error management] Do not print full stack traces when a skin fails to download 2025-01-19 17:41:48 +01:00
NEZNAMY a090a83b7d [Debug] Replace debug messages about downloading skin with downloaded and include time it took 2025-01-19 17:04:44 +01:00
NEZNAMY 992e661e4c [Placeholders] Fix bridge overriding placeholders if they did not exist before a reload (such as conditions) (#1416) 2025-01-19 15:59:51 +01:00
NEZNAMY 3b993d114e [Velocity] Fix errors when plugin is disabled due to a broken configuration file 2025-01-19 15:21:34 +01:00
NEZNAMY d181d62466 [Code style] Call EnumChatFormat#getFormat instead of toString 2025-01-19 14:55:46 +01:00
NEZNAMY 968cef7a12 [Scoreboard & Nametags] Add a config option to enforce <1.13 limits even for 1.13+ players (#1412, #1413) 2025-01-19 13:48:39 +01:00
NEZNAMY 390c2395eb Fix compilation error from previous commits 2025-01-19 13:34:18 +01:00
NEZNAMY adc9444794 [Code style] Make code more readable 2025-01-19 13:25:20 +01:00
NEZNAMY f086318082 [Chat components] Remove redundant checks for player's version 2025-01-19 13:21:18 +01:00
NEZNAMY 1cef4400b9 [Scoreboard] Fix ConcurrentModificationException when using API (#1410) 2025-01-18 14:23:13 +01:00
NEZNAMY 1f879ac91e [Scoreboard] Fix setText API method breaking a line if setting it to empty value (#1410) 2025-01-18 14:12:00 +01:00
NEZNAMY bec129d98e [Scoreboard & Bossbar] Save toggled players by UUID instead of names 2025-01-18 10:44:22 +01:00
NEZNAMY 152c04e68f [Configuration] Remove file header restoration on file modification 2025-01-18 10:41:13 +01:00
NEZNAMY d6cdacef43 [Layout] Fix skins not being saved into memory when downloaded 2025-01-16 19:02:38 +01:00
NEZNAMY 09891a075d [Layout] Add debug messages when a skin is about to be downloaded 2025-01-16 19:02:00 +01:00
NEZNAMY 9500bab5b7 [Scoreboard] Fix resetScoreboard not applying scoreboard correctly (#1411) 2025-01-16 18:15:31 +01:00
NEZNAMY 231edd4bd4 [Chat components] Fix magic code null values being converted to false 2025-01-15 18:55:03 +01:00
NEZNAMY 433572e759 [Fabric] Update to 25w03a 2025-01-15 18:06:51 +01:00
NEZNAMY 3ec772e87f [Feature management] Load all features in plugin's main thread to avoid API calls from load event before a feature actually loads (#1409) 2025-01-10 21:55:55 +01:00
NEZNAMY ae8287157c [Scoreboard] Do not add API scoreboards to the chain of scoreboards to go through (#1409) 2025-01-10 21:32:42 +01:00
NEZNAMY f005907b41 [Fabric] Update to 25w02a 2025-01-09 18:44:55 +01:00
NEZNAMY 8ea16044f1 [Debug] Send a correct message if player does not have any group permission 2025-01-08 18:34:06 +01:00
NEZNAMY e787a28353 [Tablist formatting] Fix formatting applying even if disabled with condition sometimes 2025-01-06 18:59:32 +01:00
NEZNAMY 6925d9564c [Code style] Create Platform#getCommand method instead of storing it in TabConstants 2025-01-04 18:43:37 +01:00
NEZNAMY ccd4ea785a [Logging] Fix outdated value in a message 2025-01-04 18:27:29 +01:00
NEZNAMY 63e88c09d4 [MySQL] Add a startup warn message if database is empty 2025-01-04 18:24:51 +01:00
NEZNAMY 296191b502 [Code style] Replace uses of EnumChatFormat for color codes with the codes directly 2025-01-02 19:20:49 +01:00
NEZNAMY af0151f446 [RGB] Remove now redundant check for modern/legacy colors (partially) 2025-01-02 16:26:06 +01:00
NEZNAMY 2bdfaa167e [RGB] Remove support for |L for manually defining legacy colors 2025-01-02 15:56:49 +01:00
NEZNAMY cd96476f9e [Belowname] Improve a warning message 2025-01-01 19:16:12 +01:00
NEZNAMY 9b0545aa1a [Layout] Fix players on top of tablist if team implementation is not available 2025-01-01 18:57:49 +01:00
NEZNAMY 63823123f8 [BungeeCord] Simplify code 2025-01-01 14:27:43 +01:00
NEZNAMY e91728be98 [Sponge 8] Update sponge gradle plugin to fix warning 2025-01-01 14:02:00 +01:00
NEZNAMY e7ecbf1245 [Velocity] Remove usage of deprecated API 2025-01-01 13:54:17 +01:00
NEZNAMY 28c2363b67 [Wiki] Monthly wiki backup for January 2025 2025-01-01 13:12:21 +01:00
NEZNAMY 21a3d4fb55 [Paper] Fix mistake in magic codes (#1404) 2024-12-30 14:10:52 +01:00
NEZNAMY 4b459a3ed1 [Commands] Add a red message to debug command if assigning groups by permissions and the player has all permissions 2024-12-29 20:09:31 +01:00
NEZNAMY ebc6a1b842 Fix paper compilation 2024-12-29 20:08:10 +01:00
NEZNAMY b72b0f269a [Code style] Remove redundant warning suppression 2024-12-21 17:54:06 +01:00
NEZNAMY 4cbcd69ed2 [Code style] Remove redundant constructor 2024-12-21 17:45:13 +01:00
NEZNAMY 6ef8b7748c [Code style] Remove redundant double coloring 2024-12-21 17:05:35 +01:00
NEZNAMY 8b567cb976 [Code style] Optimize last color of component calculation 2024-12-21 16:15:04 +01:00
NEZNAMY d8c231b9ce [Code style] Further reduce usage of EnumChatFormat class 2024-12-21 15:49:33 +01:00
NEZNAMY cc4347c881 [Code style] Make TabComponent#fetchLastColor Nullable 2024-12-21 13:19:20 +01:00
NEZNAMY 7cc572feb5 [Code style] Replace some references to EnumChatFormat with the actual color codes 2024-12-21 11:58:37 +01:00
NEZNAMY 96d1d1feb4 [Code style] Use TextColor as team color internally to prepare for a potential future MC update 2024-12-21 11:39:36 +01:00
NEZNAMY a7d9bd9ab5 [Code style] Simplify TabComponent#toRawText implementation 2024-12-21 11:15:47 +01:00
NEZNAMY 1cdfdf1d43 [Code style] Simplify 2024-12-18 17:32:54 +01:00
NEZNAMY 0762a5e689 [Code style] Remove redundant method call 2024-12-18 17:22:55 +01:00
NEZNAMY 3e2906ccf8 [Dependencies] Version bump and remove unused 2024-12-18 17:18:09 +01:00
NEZNAMY 13761e032c [Bukkit] Set shadowColor to null instead of 0 (no shadow) (#1400) 2024-12-16 18:51:02 +01:00
NEZNAMY fb8fa3fa54 [MiniMessage] Implement Keybind component support as well (on 1.19+) 2024-12-14 11:34:02 +01:00
NEZNAMY b89bf5933b [MiniMessage] Add support for its translatable components (paper / velocity only) (#1399) 2024-12-13 22:40:20 +01:00
NEZNAMY 1c4f404fd2 [Code style] Remove unused method 2024-12-13 22:22:51 +01:00
NEZNAMY 9fe1560f1a [Sorting] Remove runtime warn spam when configured sorting placeholder is invalid (only keep startup warn) 2024-12-12 18:58:49 +01:00
NEZNAMY 6a9cca37c6 [Scoreboard] Fix toggle command being completely ignored when another plugin has sent scoreboard instead of processing it (to some degree) 2024-12-10 21:30:20 +01:00
NEZNAMY bfde75d4b1 [Configuration] Fix startup error when group name is a number (#1398) 2024-12-09 18:12:03 +01:00
NEZNAMY a83f98580d [Bukkit] Update Paper submodule to 1.21.4 2024-12-07 13:58:47 +01:00
NEZNAMY 673542d8e4 [Code style] Move canSee method into TabPlayer 2024-12-07 12:23:51 +01:00
NEZNAMY 81c5d89a25 Fix broken PR 2024-12-07 12:08:26 +01:00
NEZNAMY bf0bcb0b96 Merge pull request #1394 from WheelerShigley/master
Fabric now has a getTPS() approximation.
2024-12-07 09:57:25 +01:00
WheelerShigley ac7a664303 Fabric now has a getTPS() approximation.
Added Fabric TPS approximation, based on mspt.
2024-12-06 19:58:38 -06:00
NEZNAMY 182dc67a49 5.0.4-SNAPSHOT 2024-12-03 20:27:24 +01:00
NEZNAMY 27ee82d17c 5.0.3 2024-12-03 20:11:13 +01:00
NEZNAMY 9405e4e45d [Bukkit] Add 1.21.4 support 2024-12-03 20:06:48 +01:00
NEZNAMY 8616769e32 [Bukkit] Print component converter initialization error if print flag is enabled 2024-12-03 19:12:37 +01:00
NEZNAMY 5d85c4697b [Bukkit] Fix error when a plugin shades adventure library without relocating it 2024-12-03 19:09:55 +01:00
NEZNAMY c54a2b7353 Mark 1.21.4 as the latest supported version 2024-12-03 18:24:17 +01:00
NEZNAMY 35075e88e3 [Fabric] Update to 1.21.4 2024-12-03 18:18:09 +01:00
NEZNAMY 1266d34176 [Wiki] Monthly wiki backup for December 2024 2024-12-01 20:05:59 +01:00
NEZNAMY 66ddf0e3ca [Fabric] Update to 1.21.4-rc3 2024-11-30 14:37:59 +01:00
NEZNAMY 88ab129737 [Fabric] Update to 1.21.4-rc2 2024-11-29 17:18:43 +01:00
NEZNAMY bcd293a255 [Fabric] Update to 1.21.4-rc1 2024-11-28 17:50:24 +01:00
NEZNAMY 4a5ebe6dbd [Fabric] Mark 1.21.4-pre3 as compatible 2024-11-26 18:23:13 +01:00
NEZNAMY ef1c3b1b3b [BungeeCord] Use new features added in build 1885 (no longer supports older builds) 2024-11-26 18:16:04 +01:00
NEZNAMY f7e68ffb6b [Fabric] Update to 1.21.4-pre3 2024-11-26 18:06:10 +01:00
NEZNAMY 2cf2153c4d 5.0.3-SNAPSHOT 2024-11-26 17:43:19 +01:00
NEZNAMY 7e7d0025fa 5.0.2 2024-11-26 17:27:16 +01:00
NEZNAMY 8252b6486e [Fabric] Update to 1.21.4-pre2 2024-11-25 20:03:28 +01:00
NEZNAMY 378041cb16 Merge pull request #1388 from Syrent/master
fix: avoid using TAB's internal vanish checks when a registered vanish integration is available
2024-11-24 19:57:41 +01:00
syrent ee5ff07565 chore: move pv try/catch inside vanish integration if statement 2024-11-24 20:48:02 +03:30
syrent 80c63dd414 chore: don't check for vanished meta if there's a registered vanish integration 2024-11-24 19:55:57 +03:30
NEZNAMY e182366566 [Scoreboard] Fix detection of scoreboards from other plugins not resetting on server switch 2024-11-23 21:18:31 +01:00
NEZNAMY acee89cce3 [BungeeCord] Add TODO 2024-11-23 20:59:45 +01:00
NEZNAMY 3ef3d14c10 [Vanish detection] Properly hook into vanish plugins on Velocity just like on BungeeCord 2024-11-23 20:58:15 +01:00
NEZNAMY 74365780a7 [Code style] Minor fixes from PR 2024-11-23 14:27:26 +01:00
NEZNAMY f6ad80370f Merge pull request #1387 from Syrent/master
feat: add VanishIntegration api
2024-11-23 11:13:12 +01:00
syrent 87eb544936 feat: add VanishIntegration api 2024-11-23 09:20:39 +03:30
NEZNAMY cde0389380 [Fabric] Update to 1.21.4-pre1 2024-11-20 17:46:25 +01:00
NEZNAMY 9e46ffc4e1 [Nametags] Process API calls in feature's thread instead of caller thread 2024-11-17 10:53:42 +01:00
NEZNAMY f3c35de780 [Configuration] Fix startup error if an element in a list is not a String 2024-11-14 20:20:11 +01:00
NEZNAMY 75f5378c8c [Belowname] Do not send updates of vanished players to those who cannot see them 2024-11-14 18:07:07 +01:00
NEZNAMY 19d32127e8 [Fabric] Update to 24w46a 2024-11-13 16:49:59 +01:00
NEZNAMY 2f00aa7750 [Conditions] Fix mistake from past commits not loading true/false values if not wrapped in "" 2024-11-10 18:24:12 +01:00
NEZNAMY 07f5dc68b5 [Velocity] Use new listOrder API (and bump required velocity build number to 450) 2024-11-10 10:08:35 +01:00
NEZNAMY 96a39d7037 [Configuration] Fix unknown key detection not working 2024-11-09 17:40:54 +01:00
NEZNAMY 409f1c4230 [Fabric] Update to 24w45a 2024-11-06 19:19:51 +01:00
NEZNAMY c3d2f9aeea [Commands] Reuse the same list of valid properties 2024-11-05 17:35:17 +01:00
NEZNAMY 380b3dd1f6 [Scoreboard] Add startup warn if trying to use NumberFormat on <1.20.3 server and runtime warn when trying to send it to <1.20.3 player 2024-11-03 16:52:10 +01:00
NEZNAMY c15a6009a2 [MySQL] Execute MySQL queries in a separate thread 2024-11-03 10:04:45 +01:00
NEZNAMY e4e7c364fd [Code style] Make list mutable 2024-11-03 09:46:14 +01:00
NEZNAMY 438361eed2 [Code style] Make fields final 2024-11-03 09:31:50 +01:00
NEZNAMY 684b35f2df [Code style] Refactor config options loading and add a few more misconfiguration checks 2024-11-03 09:13:41 +01:00
NEZNAMY 1d603ae76f [Conditions] Fix warning from previous commit 2024-11-02 16:18:46 +01:00
NEZNAMY a342b23890 [Conditions] Fix conditions without true/false defined not refreshing correctly 2024-11-02 15:49:37 +01:00
NEZNAMY c0dde2eaa7 [Config] Change default default-skin value in layout as the old one contains extra layer (which will be visible on 1.21.4) 2024-11-01 11:25:35 +01:00
NEZNAMY 6245fe9553 [Wiki] Monthly wiki backup for November 2024 2024-11-01 10:19:39 +01:00
NEZNAMY fb5be9e2aa [Paper] Update direct NMS to 1.21.3 2024-10-31 21:11:40 +01:00
NEZNAMY 918620a7dc [Bukkit & Fabric] Update to 24w44a (predicted on Bukkit) 2024-10-31 20:46:51 +01:00
NEZNAMY d2855449f0 [Layout] Add misconfiguration checks if slot is out of range 2024-10-30 20:56:59 +01:00
NEZNAMY f59326c0ae [Configuration] Add console warning if using invalid property for groups / users 2024-10-30 19:58:12 +01:00
NEZNAMY 033b9ed035 [Configuration] Improve warning messages 2024-10-29 20:37:27 +01:00
NEZNAMY 5c299767ec [Vanish detection] Disable Bukkit canSee support due to issues with vanish plugins 2024-10-29 20:16:30 +01:00
NEZNAMY 818701cd07 [RedisSupport] Register messages for features in constructors instead of load to make sure they run immediately and sync in the main thread 2024-10-29 20:08:58 +01:00
NEZNAMY 9b5e63aa25 [RedisSupport] Slightly improve debug message 2024-10-29 20:04:56 +01:00
NEZNAMY 1ad285bd79 [RedisSupport] Queue incoming messages to avoid tasks running before plugin is fully enabled, causing errors 2024-10-28 18:06:57 +01:00
NEZNAMY 4507bb179a Merge pull request #1374 from Tanguygab/master
Added Text PlaceholderAPI support on Fabric
2024-10-27 18:00:39 +01:00
Tanguygab 2dd79295a9 Fixed spacing 2024-10-27 17:56:25 +01:00
Tanguygab b21d840e60 [Fabric] Added FabricTabExpansion 2024-10-27 17:44:24 +01:00
NEZNAMY f3fa40bb0a [GitHub] Store plugin description in source code as backup (phase 4) 2024-10-27 17:11:38 +01:00
Tanguygab d8e14de0cf Fixed error with Text PAPI placeholder 2024-10-26 21:34:25 +02:00
Tanguygab f7b96eceeb Added support for Text PlaceholderAPI on Fabric 2024-10-26 21:26:22 +02:00
NEZNAMY 6f760939f3 [Placeholders] Add validation check to PlaceholderManagerImpl#getPlaceholder 2024-10-26 21:23:17 +02:00
NEZNAMY 5273ad0c5f [Gradle] Update to 8.10.2 2024-10-26 20:22:51 +02:00
NEZNAMY ac12abfb8b [GitHub] Store plugin description in source code as backup (phase 3) 2024-10-26 19:19:04 +02:00
NEZNAMY e5146e7f53 [Misconfiguration] Fix color codes being parsed in warning messages when they should not be. 2024-10-26 19:09:53 +02:00
NEZNAMY 62d1210872 [RGB] Fix using "<" symbol inside gradient breaking it 2024-10-26 18:59:49 +02:00
NEZNAMY 0d0177cd40 Bump bStats to 3.1.0 (this also somehow magically fixes false positives of anti-viruses) 2024-10-26 14:07:38 +02:00
NEZNAMY 227ecf9c9d [Placeholders] Fix error when registering custom server placeholder on proxy 2024-10-26 11:03:09 +02:00
NEZNAMY 562cd50762 [Belowname] Rename config options to hopefully be more clear 2024-10-26 10:29:21 +02:00
NEZNAMY ec56d530a6 [Scoreboard] Fix startup error when a line is configured to be null 2024-10-25 20:57:39 +02:00
NEZNAMY 6350714508 [GitHub] Store plugin description in source code as backup (phase 2) 2024-10-25 20:42:13 +02:00
NEZNAMY 1b251dad6a [GitHub] Store plugin description in source code as backup (phase 1) 2024-10-24 17:12:04 +02:00
NEZNAMY 7765b51a55 5.0.2-SNAPSHOT 2024-10-23 21:16:18 +02:00
NEZNAMY ff6ba6a8e9 5.0.1 2024-10-23 21:04:39 +02:00
NEZNAMY ce3485c823 [Layout] Fix player group condition not getting refreshed properly 2024-10-23 21:04:09 +02:00
NEZNAMY 90a99d3a79 [Fabric] Update to 1.21.3 2024-10-23 20:08:52 +02:00
NEZNAMY 7248dc4fef [Layout] Make check for 1.21.2+ listOrder support better (and work correctly) 2024-10-23 18:36:15 +02:00
NEZNAMY d704db55fa [Code style] Simplify 2024-10-23 16:26:43 +02:00
NEZNAMY 0f581e47b1 5.0.1-SNAPSHOT 2024-10-23 16:25:29 +02:00
NEZNAMY 48013f9b3c 5.0.0 2024-10-22 19:29:31 +02:00
NEZNAMY 258c8ce989 [Velocity] Use proper API method for creating TabListEntry 2024-10-22 19:29:13 +02:00
NEZNAMY c56a703028 Confirm 1.21.2 protocol version 2024-10-22 18:51:17 +02:00
NEZNAMY 4b9ce1b067 [Fabric] Update to 1.21.2 2024-10-22 18:50:56 +02:00
NEZNAMY 39b56725dd [Fabric] Update to 1.21.2-rc1 2024-10-18 21:44:54 +02:00
NEZNAMY b281b18a4e [Code style] Properly implement Platform#getServerVersion on proxies to avoid incorrect results 2024-10-17 17:30:04 +02:00
NEZNAMY b85487375d [Configuration] Rename version in config conversion 2024-10-16 18:27:03 +02:00
NEZNAMY 9ccdc0cf7e [Fabric] Update to 1.20.2-pre5 2024-10-16 17:58:40 +02:00
NEZNAMY 51b1bcf507 [Fabric] Update to 1.20.2-pre4 2024-10-15 18:59:00 +02:00
NEZNAMY 0afe598f3c [Bukkit] Small NMS cleanup 2024-10-13 11:10:38 +02:00
NEZNAMY 4227b0c702 [Nametags] Fix double team register due to concurrency 2024-10-12 19:19:30 +02:00
NEZNAMY 2a4e4a4e2e [Nametags] Fix team register/unregister duplications in combination of (un)vanishing and disable condition change 2024-10-12 19:18:03 +02:00
NEZNAMY a9fa8291de [Velocity] Avoid new object instantiation 2024-10-12 12:39:58 +02:00
NEZNAMY 007c0abc95 [Plugin messages] Protocol break - Identify packets by their ID instead of name 2024-10-12 11:20:18 +02:00
NEZNAMY f9752b7090 [Performance] Disable CPU tracking in netty because getting system time on every packet send was causing high CPU usage by itself 2024-10-12 10:11:32 +02:00
NEZNAMY b44b91f8cc [GitHub] Update branch name in actions 2024-10-11 21:04:51 +02:00
NEZNAMY 352721540a [Fabric] Update to 1.21.2-pre3 2024-10-11 20:25:31 +02:00
NEZNAMY 1ab5f49c3b [Velocity] Remove TAB-Bridge support for scoreboard packet encoding 2024-10-11 19:27:35 +02:00
NEZNAMY 976e6e397a [Bedrock] Update warning message 2024-10-11 17:15:04 +02:00
NEZNAMY e95139b79e [Placeholders] Fix nested placeholders in relational placeholders updating not triggering the main placeholder refresh 2024-10-09 17:16:25 +02:00
NEZNAMY a75f50dcf6 [Bedrock] No longer disable a feature and implement sidebar workaround as new Geyser build resolves these issues on their side. 2024-10-09 14:13:42 +02:00
NEZNAMY 87334c586c I just love Velocity 2024-10-06 18:20:19 +02:00
NEZNAMY eddec70a99 [Nametags] Fix attempts to send team packets when disabled for player 2024-10-06 16:44:47 +02:00
NEZNAMY d1d3279c8e [Fabric] Update to 24w40a 2024-10-03 18:50:58 +02:00
NEZNAMY 13ff1dfb18 [Velocity] Fix exploit (not specifying more to keep users safe) 2024-10-02 20:36:38 +02:00
NEZNAMY e0d09132dd [Wiki] Monthly wiki backup for October 2024 2024-10-01 20:03:45 +02:00
NEZNAMY 99478e7f33 [Build] Remove publishing script 2024-09-28 13:35:01 +02:00
NEZNAMY 02087c735a [Conditions] Automatically trim all spaces 2024-09-27 17:50:12 +02:00
NEZNAMY cd13d588d6 [Layout] Fix ROWS direction not working on 1.21.2 from previous commit 2024-09-26 21:21:04 +02:00
NEZNAMY 6efc23cc15 [Fabric] ACTUALLY update to 24w39a (while keeping older version support) 2024-09-26 21:10:58 +02:00
NEZNAMY 5c28711b26 [Layout] Take advantage of the new 1.21.2 listOrder tablist sorting field to remove entries from chat complete 2024-09-26 20:05:58 +02:00
NEZNAMY e9ae57aff5 [Fabric] Update to 24w39a 2024-09-25 18:16:12 +02:00
NEZNAMY 92e4b1749e [Velocity] Improve error messages 2024-09-24 18:29:46 +02:00
NEZNAMY 854eed74d7 [Code style] Clean up method 2024-09-22 13:45:17 +02:00
NEZNAMY 7c5ef3aa8a [Bukkit] Bump dependency 2024-09-21 15:11:12 +02:00
NEZNAMY 78670b5d90 [Code style] Simplify code 2024-09-20 21:12:03 +02:00
NEZNAMY f43d54b6f6 [Bukkit] Fix team packet creation issue in a past commit 2024-09-20 20:51:24 +02:00
NEZNAMY db0dd75e27 [Fabric] Update to 24w38a 2024-09-19 18:49:06 +02:00
NEZNAMY d6d1649975 [Performance] Speed up TAB#getPlayer function 2024-09-15 14:04:07 +02:00
NEZNAMY f0f0e40897 [Velocity] Cache team display name objects 2024-09-14 18:11:53 +02:00
NEZNAMY 43c1116ac7 [Code style] Call shorter method 2024-09-14 12:02:08 +02:00
NEZNAMY 225f30a257 [Performance] Add check to speed up function 2024-09-13 22:38:43 +02:00
NEZNAMY ae03436592 [Performance] Fix Bridge response placeholder processing calling RefreshableFeature#refresh for every placeholder that changed instead of just once. 2024-09-13 13:09:00 +02:00
NEZNAMY 8a6014fd02 [Configuration] Add global-playerlist.update-latency adding to config converter 2024-09-13 12:33:09 +02:00
NEZNAMY dcc0fafe66 [Layout] Store properties separately and per layout and drop global properties map. This also fixes a theoretical memory leak if mass-switching to new layouts using the API. 2024-09-13 09:49:14 +02:00
NEZNAMY bc33679a1f [Velocity] Cache TextHolder instances for better performance 2024-09-11 19:22:07 +02:00
NEZNAMY d69efe76e5 [Fabric] Update to 24w37a 2024-09-11 18:26:37 +02:00
NEZNAMY 11babe4293 [BelowName] Fix text refresher not running in belowname thread 2024-09-10 20:55:34 +02:00
NEZNAMY 2ba7492f24 [Performance] Skip redundant check if team exists 2024-09-10 17:40:24 +02:00
NEZNAMY 6c65ffb701 [Error logging] Increase log size limit to 16MB from 1MB 2024-09-09 19:49:30 +02:00
NEZNAMY 864e30b3db [Bukkit] Fix direct NMS code check and split it per function (supported versions will start varying since 1.21.2) 2024-09-09 18:42:48 +02:00
NEZNAMY b9124ef873 [Performance] Micro optimization on Bukkit in Team packet 2024-09-09 18:03:33 +02:00
NEZNAMY 77165a5ffb [Performance] Micro optimization on Bukkit 2024-09-08 20:26:28 +02:00
NEZNAMY 54a519de0b [Layout] Use randomly generated property names for fixes slots instead of building them deterministically 2024-09-07 21:23:08 +02:00
NEZNAMY 462d38373f [Layout] Add API method for getting layout from config by name 2024-09-07 18:19:41 +02:00
NEZNAMY 44234422d0 [Performance] Use saved team/objective pointers instead of getting them from maps 2024-09-06 17:23:48 +02:00
NEZNAMY c71fcf51c1 [Velocity] Change checks for Scoreboard API access for better performance 2024-09-06 16:57:08 +02:00
NEZNAMY 33cc4b2aad [Fabric] Update to 24w36a 2024-09-04 17:59:30 +02:00
NEZNAMY 6485356c74 [Scoreboard] Use separate maps for scoreboard-related properties for faster access (also fix a theoretical memory leak if sending too many custom scoreboards with API) 2024-09-01 16:11:36 +02:00
NEZNAMY d0476a93ba [Wiki] Monthly wiki backup for September 2024 2024-09-01 10:07:12 +02:00
NEZNAMY 2eb3548008 [Performance] [BossBar] Store properties in a separate structure instead of using shared properties map 2024-08-31 15:51:13 +02:00
NEZNAMY 028a58c2ae [BungeeCord] Update to builds 1860+ (no longer works on older versions) 2024-08-29 19:10:25 +02:00
NEZNAMY 7675fc11b6 [Fabric] Fix wrong server version check 2024-08-29 19:08:03 +02:00
NEZNAMY 7a10a9e8f2 [Fabric] Remove redundant SneakyThrows annotations 2024-08-29 17:16:49 +02:00
NEZNAMY 8ee869830b [Fabric] Mark all recent supported snapshots as compatible 2024-08-29 16:53:58 +02:00
NEZNAMY 63ecd7b2a2 [Fabric] Move method to different module to reduce reflection usage 2024-08-29 16:44:24 +02:00
NEZNAMY a125076033 [Fabric] Update to 24w35a 2024-08-29 15:15:43 +02:00
NEZNAMY 12153f5783 [Wiki] Create wiki folder containing a backup of all wiki pages 2024-08-28 19:02:32 +02:00
NEZNAMY fdcec16181 [BungeeCord] Avoid sending UPDATE_LIST_ORDER tablist action to <1.21.2 players (#1359) 2024-08-25 20:09:25 +02:00
NEZNAMY 0c4d653921 [Fabric + Bukkit] Update to 24w34a (not tested) 2024-08-25 10:31:25 +02:00
NEZNAMY f488f18a55 Merge #1357 into v5 (Get skin from profile properties by property name) 2024-08-20 16:07:33 +02:00
NEZNAMY 6164dd8f5f [Performance] Change recursion to while loop 2024-08-18 15:14:33 +02:00
NEZNAMY 270062cfe4 [Code style] Remove redundant tablist tracking code 2024-08-16 16:34:33 +02:00
NEZNAMY 014e197a41 [Code style] Remove some redundancies 2024-08-14 19:25:03 +02:00
NEZNAMY bed587d6ba [Fabric] Split PermissionsAPI hook into a separate class 2024-08-14 19:10:02 +02:00
NEZNAMY c15934fdea [Configuration] Rework config loading (part 2) 2024-08-13 19:45:28 +02:00
NEZNAMY 385516f373 [Configuration] Fix bossbar order not being preserved 2024-08-12 18:29:29 +02:00
NEZNAMY c50f5e7728 [Configuration] Fix bossbar progress config loading 2024-08-12 18:25:50 +02:00
NEZNAMY 494bd7368d [Configuration] Fix config loading running before conversion 2024-08-11 08:38:36 +02:00
NEZNAMY b6e8f4c1a7 [Code style] Store TabList, BossBar and Scoreboard instances in TabPlayer object instead of each implementation 2024-08-10 21:15:06 +02:00
NEZNAMY 392e97df2c [Configuration] Fix global playerlist config loading 2024-08-10 21:07:13 +02:00
NEZNAMY 45dbd8c4b2 [Bukkit] Add 1.21.1 to list of versions supported by paper hook 2024-08-10 19:08:38 +02:00
NEZNAMY a0ac7d3324 [Code style] Change fields in TabFeature into getters and fix some annotations 2024-08-10 18:03:27 +02:00
NEZNAMY 4dd7ce5b98 [Configuration] Rework config loading and add a lot more checks (part 1) 2024-08-10 17:11:01 +02:00
NEZNAMY 1a96101672 Update to 1.21.1 2024-08-10 09:57:50 +02:00
NEZNAMY 88f40ab457 [BossBar] Fix ConcurrentModificationException (#1350) 2024-08-08 16:21:53 +02:00
NEZNAMY 70403042d2 [Layout] Fix API usage causing placeholders to not refresh 2024-08-06 17:56:58 +02:00
NEZNAMY ff5a9fa3a9 [Bukkit] Add null check for non-null field because other plugins can make it null 2024-07-28 11:14:36 +02:00
NEZNAMY 5ead664cf9 Update README.md 2024-07-27 23:02:01 +02:00
NEZNAMY bba2b6f2e8 [Code style] Remove redundant check that will never pass 2024-07-27 17:40:31 +02:00
NEZNAMY 4b25571e1a [Code style] Clean up property loading 2024-07-27 16:47:18 +02:00
NEZNAMY 407d0eaeac [Velocity] Ask people to install VelocityScoreboardAPI 2024-07-27 14:53:50 +02:00
NEZNAMY 05bb3a5fa9 [Code style] Make skin downloading return Skin instead of List<String> 2024-07-27 12:16:36 +02:00
NEZNAMY 714a72c849 Merge pull request #1335 from qdpy/v5
Add a signed_texture skin parameter to avoid an API call
2024-07-27 12:00:34 +02:00
NEZNAMY 9ba8f149f7 [Code style] Remove unused method 2024-07-27 10:23:29 +02:00
NEZNAMY c9bb38c036 [Scoreboard] Add misconfiguration check if scoreboard has more than 15 lines defined 2024-07-26 19:01:19 +02:00
NEZNAMY 3241f1cf41 [Sorting] Fix sorting placeholder using old instance when a placeholder is overridden 2024-07-25 21:01:47 +02:00
NEZNAMY 8a7099a6ab [BungeeCord] Add try/catch for yet another NPE in BungeeCord code 2024-07-25 15:57:25 +02:00
NEZNAMY 65c6adcdb2 [Bukkit] Fix compatibility with random modded server 2024-07-22 19:27:42 +02:00
evlad f3f2e69bcf prevent AIOOB exeception 2024-07-16 06:19:29 +03:00
qdpy 335f0a3d6f Add skin signed texture 2024-07-16 03:52:26 +02:00
NEZNAMY a7e711850c [Performance] Use Map#put return type to get rid of Map#get 2024-07-14 12:28:20 +02:00
NEZNAMY 6fb2a7ce76 [Performance] Switch to ConcurrentHashMap instead of synchronizing a map 2024-07-14 11:59:17 +02:00
NEZNAMY 56a6e34847 [Fix] Wrong boolean value from previous commit 2024-07-11 17:23:48 +02:00
NEZNAMY cfa4c869ca [Code style] Clean up task executing and fix mistakes from previous recodes 2024-07-10 21:38:51 +02:00
NEZNAMY d548fbcb74 [Technical] Remove a layer of task wrapping 2024-07-08 19:20:56 +02:00
NEZNAMY d40fbced1a [Performance] [NameTags] Skip containsTeam call 2024-07-08 19:05:39 +02:00
NEZNAMY 21c251b40b [Performance] Avoid redundant StructuredComponent creation when converting RGB colors to legacy in scoreboard 2024-07-07 21:30:51 +02:00
NEZNAMY ec3371085b [Performance] Avoid double map access on team/objective register 2024-07-07 15:56:49 +02:00
NEZNAMY 3779f38c5d [Playerlist Objective] [Performance] Avoid performing unnecessary operations on disable condition change 2024-07-07 15:46:58 +02:00
NEZNAMY 5b62fe2be7 [BelowName] [Performance] Avoid performing unnecessary operations on disable condition change 2024-07-07 15:40:42 +02:00
NEZNAMY ea223bbcb4 [Performance] Avoid double access to placeholder map 2024-07-07 11:17:09 +02:00
NEZNAMY 7f4a56149a [Placeholders] Make one more method synchronized to prevent incorrect re-register that breaks the placeholder on concurrent access 2024-07-06 21:51:02 +02:00
NEZNAMY 52a620c479 [Placeholders] Make methods synchronized to fix concurrent access potentially breaking some placeholders 2024-07-06 21:38:05 +02:00
NEZNAMY 593aaf8039 [Conditions] Avoid re-registering the same placeholder multiple times 2024-07-06 21:11:04 +02:00
NEZNAMY cebb6ea626 [NameTags] Register visibility refresher subfeature in constructor to prevent issues in placeholder updating when registering the placeholder 2024-07-06 21:02:30 +02:00
NEZNAMY 337dc1c4d5 [Technical] Decode plugin messages in a new separate thread 2024-07-06 19:30:20 +02:00
NEZNAMY e110f942e8 [Scoreboard] Add misconfiguration check for invalid scoreboard properties and improve code for existing features 2024-07-06 16:49:24 +02:00
NEZNAMY 6bd5f9dab1 [Error logging] Print warns when receiving redis message of unknown player and add some debug messages 2024-07-03 21:22:45 +02:00
NEZNAMY 09149c559d [Code style] Add missing NotNull annotation 2024-06-30 21:28:42 +02:00
NEZNAMY f9a1130e4b [Performance] Make some placeholders on proxy trigger-based instead of periodic refreshing 2024-06-29 15:43:44 +02:00
NEZNAMY 91304233aa [Code style] Finish getting rid of global component cache 2024-06-29 14:07:52 +02:00
NEZNAMY 99286578c1 [Code style] Create separate component cache for layout fixed slots 2024-06-29 13:43:07 +02:00
NEZNAMY 81888d9aa5 [Code style] Avoid creating simple components in some cases 2024-06-28 21:50:23 +02:00
NEZNAMY f2e4b1b94a [Debug] Add message showing how long it took to unregister teams, objectives and bossbars on unload 2024-06-28 11:26:36 +02:00
NEZNAMY ab269ad740 [Code style] Dynamically remove player boss bars on unload instead of calculating them inside the feature 2024-06-28 10:44:36 +02:00
NEZNAMY 5a1df75526 [Fix] Forcefully shutdown thread executor after it failed to shut down softly 2024-06-27 21:28:12 +02:00
NEZNAMY b74ed1d14e [Code style] Unregister all teams and objectives dynamically instead of in every feature separately and calculating all logic. Can't believe it took me years to come up with this. 2024-06-27 21:24:33 +02:00
NEZNAMY d087db38e3 [Bug fix] Update disable condition status in feature's thread 2024-06-27 21:08:21 +02:00
NEZNAMY ff8c406823 [Velocity] Avoid errors in VelocityScoreboardAPI hook by handling unexpected situations 2024-06-27 15:33:13 +02:00
NEZNAMY 7e12a75bea [Technical] Include thread name in error message if it failed to shut down 2024-06-27 15:27:40 +02:00
NEZNAMY aa7fb09399 [Teams] Fix vanish status change processing not respecting disable condition 2024-06-27 14:40:07 +02:00
NEZNAMY a805b3fe90 [Bukkit] Mark Paper 1.21 as compatible with direct NMS code 2024-06-27 11:06:13 +02:00
NEZNAMY 63d9122440 [Bossbar] Fix bars being resent on server switch even for <1.20.2 players 2024-06-27 10:54:38 +02:00
NEZNAMY f9293c9c92 [Bug fix] Unregister teams of redis players on unload 2024-06-26 16:11:44 +02:00
NEZNAMY 4892fd5817 [Error fix] Fix async features sometimes still using global onlinePlayers array 2024-06-26 14:37:25 +02:00
NEZNAMY cf4a8ae98d [Error fix] Add check for null team name for redis players (temporarily?) 2024-06-26 14:32:24 +02:00
NEZNAMY f0edfeeebf [Error fix] Add try/catch for RedisBungee message sending 2024-06-26 14:28:50 +02:00
NEZNAMY 4d54ad35ff [Bug fix] Colors not displaying correctly in Fabric and Velocity console 2024-06-26 14:13:46 +02:00
NEZNAMY b6b512f788 Merge pull request #1324 from Miyli/v5
[GitHub] Add build number to artifact
2024-06-25 18:02:00 +02:00
Miyli a6076eb6ac [GitHub] Add build number to artifact 2024-06-25 17:40:20 +02:00
NEZNAMY 01b74f0a6e [Bug fix] Unload features in main thread and wait for tasks to shut down to prevent unloading and loading at the same time on reloads 2024-06-25 15:37:40 +02:00
NEZNAMY 6c6752c348 [Velocity] Introducing: Velocity Scoreboard API 2024-06-25 15:10:40 +02:00
NEZNAMY 73873ac193 [Performance] Remove synchronized modifier from method 2024-06-25 14:20:23 +02:00
NEZNAMY 6542dad7bd [Bug fix] Fix synchronized deadlock in placeholder refreshing 2024-06-24 14:16:16 +02:00
NEZNAMY 9bf4a2b555 [Code style] Add and use Scoreboard#renameTeam method 2024-06-21 13:53:06 +02:00
NEZNAMY 66d18a4469 [Code style] Expose Scoreboard#containsTeam method in interface 2024-06-21 13:40:23 +02:00
NEZNAMY 7a489067e6 [NameTags] Fix unregistering and registering team on rename even for players who should not see the team because player is vanished 2024-06-20 22:27:37 +02:00
NEZNAMY 600d6de132 [Code style] Reduce access level of methods 2024-06-20 19:11:02 +02:00
NEZNAMY 48e35e7abd [Performance] Split Header and Footer caches as the values are practically never the same 2024-06-20 14:30:09 +02:00
NEZNAMY 8613e9d734 [Error fix] Add try/catch for PremiumVanish hook 2024-06-20 14:25:50 +02:00
NEZNAMY 9ed277d80d [Error fix] Make methods synchronized to avoid ConcurrentModificationException 2024-06-20 13:44:16 +02:00
NEZNAMY 26345d00a3 [Code style] Clean up method calls 2024-06-20 13:00:57 +02:00
NEZNAMY be70eea0f8 [Performance] [Global playerlist] Add option to disable latency refreshing and disable it by default 2024-06-20 12:14:06 +02:00
NEZNAMY 01357d9ce4 [Sorting] Fix NPE 2024-06-19 17:40:06 +02:00
NEZNAMY 05afafbc45 [Performance] [Global playerlist] Create object for server groups to compare identity instead of having to do heavy checks (also save spy-server status for fast access) 2024-06-18 19:25:55 +02:00
NEZNAMY 68f7272128 [Bug fix] Make plugin message encoding thread shared and don't shut it down, which caused scoreboard packets to not get sent fully on reload, resulting in "Network Protocol Error" on 1.20.5+ 2024-06-18 17:28:40 +02:00
NEZNAMY caa0ab723a [Code style] Reduce calls to "refresh" method in features 2024-06-18 16:40:47 +02:00
NEZNAMY ee0d6002c8 [Code style] Forward group change into features with a new method specifically for that purpose instead of refresh method 2024-06-18 16:30:03 +02:00
NEZNAMY 48f0d04305 [Performance] Only send tablist update packet once for connected player 2024-06-18 15:24:12 +02:00
NEZNAMY 6516b80bf0 Fix error from previous commit 2024-06-18 14:30:45 +02:00
NEZNAMY b0403ff94b [GitHub] Update build.yml dependencies 2024-06-18 14:23:07 +02:00
NEZNAMY 77f88edf08 [Performance] Submit feature refresh task only once instead of once for every player 2024-06-18 14:10:07 +02:00
NEZNAMY be70664c84 [Performance] Use method reference to avoid new lambda instantiation each time 2024-06-18 12:55:27 +02:00
NEZNAMY 37ca992233 [Performance] Store component flat text instead of calculating it each time 2024-06-18 12:42:57 +02:00
NEZNAMY 620904de1c [Performance] Store last placeholder values inside player with placeholder key instead of placeholder with player key 2024-06-18 12:19:33 +02:00
NEZNAMY 9c0fac5c44 [Performance] [BossBar] Store visible boss bars of a player for fast access 2024-06-18 11:48:36 +02:00
NEZNAMY 8846c5a9fe [Performance] [NameTags] Only initialize set if used 2024-06-18 11:14:18 +02:00
NEZNAMY 880d2a8570 [PremiumVanish hook] Make methods synchronized to fix ConcurrentModificationException 2024-06-18 10:18:02 +02:00
NEZNAMY 45b6591518 [API Break] Require placeholders to return String instead of Object 2024-06-17 20:48:09 +02:00
NEZNAMY c6ce99d527 [Code style] Remove redundant SneakyThrows 2024-06-17 20:45:13 +02:00
NEZNAMY 7a7861fd9c [Performance] [Bukkit] Only set field if value actually changed 2024-06-17 20:10:00 +02:00
NEZNAMY 3c11630a6c [Code style] Simplify 2024-06-17 15:50:51 +02:00
NEZNAMY 3b9f4c9884 [RedisBungee] Recode handling of sub-features and small fixes (#1317?) 2024-06-17 15:00:08 +02:00
NEZNAMY 0757fc4352 [RedisBungee] Fix error (#1317) 2024-06-17 10:54:27 +02:00
NEZNAMY c1af721ad2 [NameTags] Properly update online players 2024-06-16 21:17:29 +02:00
NEZNAMY 0ea04394f9 [RedisBungee] Override %serveronline% to count redis players as well (#1316) 2024-06-16 20:09:34 +02:00
NEZNAMY 576c178b4f [NameTags] Move the feature handling to a new custom thread 2024-06-16 19:05:58 +02:00
NEZNAMY 674708cea6 [Playerlist objective] Fix error 2024-06-16 16:54:45 +02:00
NEZNAMY 179b05f992 [Belowname] Fix error 2024-06-16 16:53:26 +02:00
NEZNAMY e2c768bb56 [Performance] Speed up all placeholders returning int by caching string values 2024-06-16 15:10:57 +02:00
NEZNAMY 79e492b230 [Performance] Speed up %gamemode% placeholder 2024-06-16 14:40:07 +02:00
NEZNAMY 708bc5c302 [Global playerlist] Fix error in placeholder before it's loaded 2024-06-16 13:44:19 +02:00
NEZNAMY 9543cd5b5f [Performance] Access player's world and server variables directly instead of via getter 2024-06-16 12:49:56 +02:00
NEZNAMY 0bc8313897 [Technical] Move global playerlist feature handling to a new custom thread 2024-06-16 12:22:30 +02:00
NEZNAMY 91986926cb [Performance] Avoid redundant text color attempt 2024-06-15 17:34:07 +02:00
NEZNAMY ac638add7a [Performance] [Paper] Only rewrite packet if something changed 2024-06-15 15:58:30 +02:00
NEZNAMY 9551783d49 [Performance] [NameTags] Avoid calculating other team properties when changing visibility rule 2024-06-15 15:00:22 +02:00
NEZNAMY 85cf2b3e91 [Performance] [NameTags] Avoid calculating other team properties when changing collision rule 2024-06-15 14:25:05 +02:00
NEZNAMY f98ccb9e44 [Performance] [NameTags] Avoid calculating nametag visibility when only updating prefix/suffix 2024-06-15 13:54:56 +02:00
NEZNAMY 066d50e492 [Performance] Save LuckPerms User object instead of getting it on every request 2024-06-15 12:58:21 +02:00
NEZNAMY 6c823e86fe [Performance] [Scoreboard] Check player's active scoreboard instead of set of players who can see the scoreboard 2024-06-15 12:16:13 +02:00
NEZNAMY 6d3ea577d5 [Error fix] Make method synchronized to avoid ConcurrentModificationException 2024-06-15 11:29:21 +02:00
NEZNAMY 2826e39ea2 [Code style] Make paper a submodule of bukkit 2024-06-15 09:58:48 +02:00
NEZNAMY d855f04612 [Performance] [Fabric] Save enum values in an array for fast access 2024-06-14 23:27:25 +02:00
NEZNAMY 99eb93e66f [Performance] [Bukkit] Add native NMS implementations on 1.20.5+ Paper (where mojang mappings are used) 2024-06-14 23:24:52 +02:00
NEZNAMY e91110d049 [Performance] Avoid double map access 2024-06-14 19:45:44 +02:00
NEZNAMY 8e1bb8519c [Performance] [Bukkit] Save PlayerConnection for sending packets instead of getting it using reflection each time 2024-06-14 19:12:09 +02:00
NEZNAMY 61df01ed1c [Performance] Massively boost last color of prefix getting, also remove cache and save it inside the component 2024-06-14 18:38:15 +02:00
NEZNAMY c219aa83b1 [Code style] Remove unused imports 2024-06-14 15:26:03 +02:00
NEZNAMY 71109b397d [Code style] Remove redundant initialization 2024-06-14 15:23:42 +02:00
NEZNAMY 4fe4c2981d [Code style] Add NotNull annotation 2024-06-14 15:15:16 +02:00
NEZNAMY 2f9f2f722c [Code style] Add NotNull annotation 2024-06-14 15:06:33 +02:00
NEZNAMY 40009d018c [Code style] Clean up code by passing Objective parameter instead of its values 2024-06-14 15:03:29 +02:00
NEZNAMY 251480fd4a [MiniMessage] Add dummy character to parsed text to disable color compacting (#1312) 2024-06-14 14:23:42 +02:00
NEZNAMY 6295145d5b [Scoreboard] Disable check to fix error on reload 2024-06-14 12:09:26 +02:00
NEZNAMY 17f2e67334 [Code style] Construct platform's team immediately to avoid nullability warn 2024-06-14 11:50:39 +02:00
NEZNAMY fe4130a846 [Bukkit] Fix text cutting not considering client version (#1313) 2024-06-14 10:52:57 +02:00
NEZNAMY 141201b7aa [Sponge 7] Add missing text cutting to 32 characters 2024-06-13 21:39:50 +02:00
NEZNAMY 3b3c511572 Change build.yml to use v5 branch 2024-06-13 21:15:10 +02:00
NEZNAMY 8c6cf8ee22 Add 1.21 support 2024-06-13 21:14:05 +02:00
NEZNAMY 231fd36ce9 [Performance] Save FixedFormat across all platforms and store it inside TabComponent class to reduce need for a cache 2024-06-12 20:50:13 +02:00
NEZNAMY fb9dd0a899 [Code style] Extend class to avoid code duplication 2024-06-12 20:02:50 +02:00
NEZNAMY d98bcdb4e8 [Fix] Concurrent access to online players causing features to try to work with players before loading them 2024-06-12 19:15:33 +02:00
NEZNAMY f94a87e6d5 [Performance] Use more efficient caching of last team prefix color 2024-06-12 17:39:30 +02:00
NEZNAMY 1501d5e71e [Performance] Store serialized json of a component inside of it instead of using a cache 2024-06-12 17:24:16 +02:00
NEZNAMY a7d955266d [Code style] Make cache efficiency calculation more accurate 2024-06-12 17:08:01 +02:00
NEZNAMY 9633a6c176 [Code style] Make cache efficiency calculation more accurate 2024-06-12 17:04:33 +02:00
NEZNAMY 9d50090dbd [Performance] Create separate component caches for scoreboard and nametags 2024-06-12 17:02:50 +02:00
NEZNAMY 8b96a8e654 [Performance] Add missing caching for Redis sub-features 2024-06-12 14:15:54 +02:00
NEZNAMY 453288bf77 [Performance] Convert text to TabComponent in BossBar immediately and cache it 2024-06-12 14:08:59 +02:00
NEZNAMY 26fb0ec2e9 [Performance] Split component caches for some features as they usually never share the same inputs across features, reducing efficiency 2024-06-12 13:53:03 +02:00
NEZNAMY 2671052cad [Code style] Remove redundant SneakyThrows 2024-06-11 22:08:20 +02:00
NEZNAMY 7f1bcd69c8 [Code style] Save platform's scoreboard teams and objectives inside TAB's classes for fast access 2024-06-11 21:23:18 +02:00
NEZNAMY 5fe83af514 [Fix] Make scoreboard methods synchronized to prevent values not getting saved when accessing from multiple threads (despite being concurrent) 2024-06-11 21:12:54 +02:00
NEZNAMY 89dc2f09fc [Fix] Make player properties ConcurrentHashMap to fix issues with parallel access 2024-06-11 20:53:15 +02:00
NEZNAMY 7ce564409a [Fix] Disable instance activity check as internals were accidentally triggering it, especially with parallel processing 2024-06-11 18:32:05 +02:00
NEZNAMY 2e34069d14 [Fix] Add "synchronized" to method to fix concurrent access error 2024-06-11 18:27:21 +02:00
NEZNAMY e435501501 [Sorting] Fix sorting by pre-defined values space trimming inconsistency 2024-06-11 15:38:38 +02:00
NEZNAMY 51402637c6 [Fabric] Update to 1.21-rc1 2024-06-10 16:29:25 +02:00
NEZNAMY 44593f7a75 [Code style] Create custom thread executor class for easier usage 2024-06-10 14:10:27 +02:00
NEZNAMY 48596efa77 [Technical] Process Belowname and Playerlist Objective feature in a separate custom thread 2024-06-10 13:10:11 +02:00
NEZNAMY 3e323df70d [Fix] Process Header/Footer disable condition change in its own thread 2024-06-10 11:01:50 +02:00
NEZNAMY 0d89cef519 [Technical] Process SpectatorFix feature in a separate custom thread 2024-06-09 13:00:03 +02:00
NEZNAMY f758fdf8f3 [Code style] Create runnables instead of using lambdas for cleaner stack traces 2024-06-09 12:43:15 +02:00
NEZNAMY 44b9f06087 [Technical] Process Scoreboard feature in a separate custom thread 2024-06-09 12:12:22 +02:00
NEZNAMY d1155d5e7a [Fabric] Update to 1.21-pre4 2024-06-07 18:39:15 +02:00
NEZNAMY 51ccd029ca [Layout] Fix feature attempting to format tablist names of players who have them disabled with condition 2024-06-07 15:26:48 +02:00
NEZNAMY 1df83dac91 [Fix] RejectedExecutionException in feature threads on reload 2024-06-07 14:49:21 +02:00
NEZNAMY a3c1d643fd [Fix] Refresh call not being called in feature's thread 2024-06-07 14:05:21 +02:00
NEZNAMY 4350e311e7 [Fix] Throwables not being logged when thrown thrown in new threads 2024-06-07 13:48:39 +02:00
NEZNAMY 89ec9355bd [Technical] Process PingSpoof feature in a separate custom thread 2024-06-07 12:15:58 +02:00
NEZNAMY f2be7220f3 [Layout] Send fake ping if ping spoof is enabled immediately instead of having to rewrite it 2024-06-07 12:05:08 +02:00
NEZNAMY 0cbac252a5 [Technical] Process BossBar feature in a separate custom thread 2024-06-07 11:43:16 +02:00
NEZNAMY 3ea60971be [Fix] ConcurrentModificationException on high player counts 2024-06-06 22:09:48 +02:00
NEZNAMY 8ea76e2016 [Technical] Create Runnables instead of using lambdas for cleaner stack traces 2024-06-06 22:01:02 +02:00
NEZNAMY 86d2d732eb [BungeeCord] Fix NPE in packet reader 2024-06-06 18:15:08 +02:00
NEZNAMY 55ce84a5ae [Technical] Process Header/Footer in a separate custom thread (and prepare other features) 2024-06-06 18:07:40 +02:00
NEZNAMY 0f0e4de682 [Code style] Replace forEach with for loop for shorter stack traces 2024-06-06 14:54:20 +02:00
NEZNAMY ad60372cf2 [Error handling] Properly print errors if thrown in recently added threads 2024-06-06 14:29:42 +02:00
NEZNAMY 3cf5fd7cbd [Technical] Run plugin message encode and send in a new custom thread 2024-06-06 13:48:18 +02:00
NEZNAMY ce090566cc [Technical] Run tablist entry anti-override task in a new custom thread 2024-06-05 22:19:58 +02:00
NEZNAMY 866f645eed [Code style] Replace forEach with for loop for shorter stack traces 2024-06-05 22:17:35 +02:00
NEZNAMY 64f3bebd3d [Fabric] Update to 1.21-pre3 2024-06-05 15:50:49 +02:00
NEZNAMY 239cc461d5 [Code style] Use shorter alternative 2024-06-05 11:28:57 +02:00
NEZNAMY b832784977 [Code style] Refactor pipeline injection on BungeeCord 2024-06-05 11:09:59 +02:00
NEZNAMY 0f37b0be54 [RedisBungee] Add config option for disabling RedisBungee hook 2024-06-03 17:10:11 +02:00
NEZNAMY bb428af3af [Configuration] Add another misconfiguration check 2024-06-03 11:37:03 +02:00
NEZNAMY 1c4d9704f2 [Commands] Fix error when setting property value to ' or " 2024-06-01 16:48:24 +02:00
NEZNAMY 53a5eae721 [Fabric] Update to 1.21-pre2 2024-05-31 20:45:42 +02:00
NEZNAMY 049ab257e2 [Placeholders] Fix server placeholders not returning proper value on request sometimes 2024-05-30 16:28:38 +02:00
NEZNAMY 0ece5319ea [Fabric] Update to 1.21-pre1 2024-05-29 20:32:10 +02:00
NEZNAMY b847cc1178 [Teams] [Bukkit] Fix team action not being taken correctly on 1.8 - 1.12, causing issues with previous commit 2024-05-29 13:36:22 +02:00
NEZNAMY 422da3e1ba [Commands] Fix error in debug command 2024-05-28 14:52:40 +02:00
NEZNAMY 868c6baebf [Teams] Fix another instance of "Network Protocol Error" disconnect on 1.20.5+ 2024-05-28 14:27:47 +02:00
NEZNAMY 9a3cf167ed [Performance] Change way placeholder values are stored in plugin's PlaceholderAPI expansion for better performance 2024-05-27 22:46:10 +02:00
NEZNAMY cdf47ebab0 [Visuals] Refresh permission groups in another thread (also split its CPU usage tracking to 2 parts) 2024-05-27 22:06:00 +02:00
NEZNAMY 929d1f945b [Code style] Replace try/catch with SneakyThrows 2024-05-27 15:46:01 +02:00
NEZNAMY 2671242d2c [Code style] Remove duplicate class mapping 2024-05-27 14:25:34 +02:00
NEZNAMY 78cff8dea8 [Bukkit] Add support for latest 1.21 snapshot 2024-05-27 13:43:32 +02:00
NEZNAMY 7ac3840831 [Javadoc] Fix typo 2024-05-27 13:42:51 +02:00
NEZNAMY 556ee6df01 [Sorting] Make number padding correct (may rarely only insert 1 character) 2024-05-26 12:48:28 +02:00
NEZNAMY 2eca28e497 [Sorting] Fix number compression bug (#1297) 2024-05-26 12:37:35 +02:00
NEZNAMY 76ff5d49e2 [Code style] Simplify array creation 2024-05-25 21:50:43 +02:00
NEZNAMY 2a919aa6b7 [Performance] Fix Header/Footer components not being cached on some platforms from recent commits 2024-05-25 14:21:12 +02:00
NEZNAMY c83f806e4c [Code style] Store expected TabList display names by UUID instead of TabPlayer 2024-05-25 14:07:50 +02:00
NEZNAMY afbfd38dfd [Bukkit] Add back fallback solutions for Scoreboards using Paper API and Bukkit API 2024-05-23 13:51:11 +02:00
NEZNAMY 6874916ce0 [Javadoc] Update class description 2024-05-23 13:10:39 +02:00
NEZNAMY 143c4fc7e4 [Code style] Remove expected header/footer tracking, since it's not used anyway (for now) 2024-05-23 13:04:49 +02:00
NEZNAMY f85e945a32 [Bukkit] Fix compatibility wih Mojang mapped servers jars 2024-05-22 21:21:24 +02:00
NEZNAMY d0110c9a4f [Fabric] Update to 24w21b 2024-05-22 20:54:15 +02:00
NEZNAMY 4307768bee [Code style] Split TabList class into an interface and abstract class 2024-05-22 20:24:59 +02:00
NEZNAMY 88773e3232 [BossBar] Fix error when trying to display bossbar that was not visible on join 2024-05-22 10:14:06 +02:00
NEZNAMY 8f32772f83 Add TODO 2024-05-21 18:09:02 +02:00
NEZNAMY 17b3c28d91 [Performance] Only track placeholder usage if cpu tracking is enabled 2024-05-21 17:58:34 +02:00
NEZNAMY 45945d9a13 [Sponge 8] Add 1.20.6 support 2024-05-21 16:57:45 +02:00
NEZNAMY ba9741a084 [Code style] Split Scoreboard class into and interface and abstract class with tracking, also resend content on server switch using tracked values instead of from each feature individually 2024-05-21 16:04:35 +02:00
NEZNAMY 3bcad371d2 [Code style] Create a class for BossBar managing all safety checks and extend it in all implementations and resend them on server switch internally instead of using bossbar feature itself 2024-05-20 22:06:49 +02:00
NEZNAMY 1e9bf68671 [BossBar] Fix Network Protocol Error disconnect on server switch 2024-05-20 12:37:31 +02:00
NEZNAMY f57df6a536 [BossBar] Make %countdown% return 0 after announcement is over instead of going to negative numbers 2024-05-20 11:18:44 +02:00
NEZNAMY 793536d2d3 [Fix] Fix typo 2024-05-18 18:18:00 +02:00
NEZNAMY 9a348da34f [Code style] Simplify 2024-05-18 17:45:03 +02:00
NEZNAMY 4819bf63b6 [Bukkit] Add back fallback solutions for Header/Footer using Paper API and Bukkit API if NMS fails to load 2024-05-18 17:32:43 +02:00
NEZNAMY 5777d49861 [Performance] [Bukkit] Use Adventure API for BossBars if available for massively improved performance 2024-05-18 12:28:46 +02:00
NEZNAMY 7540c61fde [Code style] Create fields for adventure components from TAB component to allow multiple options in the future 2024-05-18 11:57:59 +02:00
NEZNAMY 308da4cbac [Code style] Create field for feature name and define it in constructor instead of creating abstract functions 2024-05-17 22:17:11 +02:00
NEZNAMY 615af41de8 [Performance] Return placeholder values as strings to prevent boxing objects being created 2024-05-17 20:24:46 +02:00
NEZNAMY 7c473a4e3f [Performance] Change functional interface usage to avoid int -> Integer boxing 2024-05-17 18:58:03 +02:00
NEZNAMY 79b4f9821b [Performance] Add cooldown to player vanish check 2024-05-17 17:23:16 +02:00
NEZNAMY 80825ee701 [Code style] Mark fields of class as NonNull 2024-05-17 16:51:09 +02:00
NEZNAMY aa0e60b091 [Fix] Fix startup error caused by one of the previous commits 2024-05-17 16:50:49 +02:00
NEZNAMY 718cfb682d [Code style] Improve readability of some sorting functions (also probably fix sorting API not working in layout) 2024-05-17 12:49:02 +02:00
NEZNAMY 66f0426e6a [Code style] Remove unused method 2024-05-17 12:25:55 +02:00
NEZNAMY 145671ecdd [Code style] Remove unused methods 2024-05-17 12:22:08 +02:00
NEZNAMY 43d71f7e49 [Code style] Remove unused import 2024-05-17 12:20:26 +02:00
NEZNAMY 150de771d5 [Code style] Initialize map values in construction instead of creating anonymous class 2024-05-17 12:20:16 +02:00
NEZNAMY 50da728abf [Code style] Remove redundant checks 2024-05-17 11:05:28 +02:00
NEZNAMY 656ce6ecad [Performance] Create player data classes for Tablist formatting and teams to avoid Map lookup each time 2024-05-17 11:01:54 +02:00
NEZNAMY 8a758dffec [Performance] Create player data class for Belowname to avoid Map lookup each time 2024-05-16 21:14:07 +02:00
NEZNAMY 52bd538ed0 [Performance] Create player data class for Playerlist objective to avoid Map lookup each time 2024-05-16 20:58:49 +02:00
NEZNAMY 115c5ac890 [Bug fix] Fix disabled tablist formatting referencing wrong variable 2024-05-16 20:43:46 +02:00
NEZNAMY 0f7d15a4d0 [Performance] Create player data class for Header/Footer to avoid Map lookup each time 2024-05-16 20:39:04 +02:00
NEZNAMY 5b6e07d5d3 [Fabric] Update to 24w20a 2024-05-15 17:22:15 +02:00
NEZNAMY 8579ed322d [Code style] Remove redundant class wrapper for a Map 2024-05-15 15:19:53 +02:00
NEZNAMY 44464b605d [Fabric] Replace Minecraft version check with fabric networking api check (which is what is preventing the mod from working there) 2024-05-14 11:30:08 +02:00
NEZNAMY e8124dd280 [Fabric] Replace Fabric API call with direct NMS call 2024-05-13 22:25:19 +02:00
NEZNAMY 0105fc2087 [Fabric] Remove unused field 2024-05-12 14:10:28 +02:00
NEZNAMY 39e7b26128 [Fabric] Remove entity packets from access widener 2024-05-12 14:05:58 +02:00
NEZNAMY ddbc13fc27 [Scoreboard] Remove respect-other-plugins config option, it is now forced 2024-05-12 13:57:15 +02:00
NEZNAMY 80660fa6cf [Performance] Small optimization of scoreboard packet processing 2024-05-12 13:16:52 +02:00
NEZNAMY b4a94e8da5 [Code style] Remove unused method 2024-05-12 12:34:32 +02:00
NEZNAMY 051c9a8c85 [BossBar] Add console warn if used color or style is invalid 2024-05-12 12:27:28 +02:00
NEZNAMY 840b1ea4a2 [Code style] Remove unused field 2024-05-12 11:32:14 +02:00
NEZNAMY ea57695a31 [Fix] Remove forgotten references to deleted unlimited nametag feature 2024-05-12 11:28:49 +02:00
NEZNAMY 90778bc84c Merge branch 'master' into v5 2024-05-11 21:31:45 +02:00
NEZNAMY 949216325f [Nametags] Only make nametags of invisible players invisible for 1.8 players to compensate for the bug instead of everyone (#1287) 2024-05-11 21:29:55 +02:00
NEZNAMY cdb521de1f [BungeeCord] Initialize different BossBar instance for 1.8 players to avoid version check every time 2024-05-11 17:01:49 +02:00
NEZNAMY e50b39c559 [Javadoc] Document more methods 2024-05-11 14:36:01 +02:00
NEZNAMY 80afb497e0 [Code style] Remove unused field 2024-05-11 13:34:53 +02:00
NEZNAMY e83a12aaee [Fabric] Mark 1.17 as supported again 2024-05-11 13:24:12 +02:00
NEZNAMY 461860bb17 Delete unlimited nametag and wither bossbar features 2024-05-11 13:22:00 +02:00
NEZNAMY cff4e3e6b0 5.0.0-SNAPSHOT 2024-05-11 12:20:46 +02:00
NEZNAMY dddf0b35a2 [Code style] Add missing access level to field 2024-05-11 11:43:51 +02:00
NEZNAMY 35ec2bf215 [Code style] Make fields final 2024-05-11 11:43:05 +02:00
NEZNAMY 607b60b323 [Code style] Remove unused method 2024-05-11 11:41:35 +02:00
NEZNAMY bb6ad72962 [Code style] Improve presence check of Player#getPing method 2024-05-10 17:05:47 +02:00
NEZNAMY 4fb8420d69 [Code style] Remove unused method 2024-05-10 16:59:11 +02:00
NEZNAMY 74af19a9d9 [Code style] Move field to a local variable 2024-05-10 16:53:51 +02:00
NEZNAMY 737ac70e6e [Fabric] Update to 24w19a 2024-05-10 16:28:39 +02:00
NEZNAMY bfc72b735c [Fabric] Add another submodule for 1.18.2 to avoid hardcoding method and class names 2024-05-10 16:05:09 +02:00
NEZNAMY 323412f935 [Code style] Decrease field visibility 2024-05-10 14:56:00 +02:00
NEZNAMY db34ba4995 [Fabric] Improve check for Fabric API features availability 2024-05-10 14:54:01 +02:00
NEZNAMY 15d7eb6d91 [Javadoc] Document more methods 2024-05-10 14:50:02 +02:00
NEZNAMY e2b95df2e4 [Bukkit] Explicitly specify constructor to fix compatibility with forge mods that widen a constructor access, causing TAB to choose the wrong one on 1.19.3+ (#1276) 2024-05-10 13:42:50 +02:00
NEZNAMY 1117094412 [Bug fix] Update library to fix error 2024-05-09 14:54:46 +02:00
NEZNAMY 4bab076642 [Bug fix] Fix group change from Bridge not being processed correctly (#1281) 2024-05-09 13:38:36 +02:00
NEZNAMY d602818f67 [Bug fix] Disable tablist containsEntry usage due to a race condition that sometimes makes it not work properly until a better solution is found (#1284) 2024-05-08 09:37:35 +02:00
NEZNAMY 1a76321062 [Fabric] Update to 24w18a 2024-05-04 20:37:08 +02:00
NEZNAMY 4b056529dd [Fix] Add cpu usage of placeholders inside plugin's main thread instead of placeholder thread to avoid incorrect numbers when it's overloaded 2024-05-04 20:29:21 +02:00
NEZNAMY bdbf3ba5b1 [Velocity] Remove message printing if attempting to send plugin message to a player who is not connected to any server (#1248) 2024-05-03 22:35:29 +02:00
NEZNAMY aab9a650b0 Fix startup error when using a plugin that shades MiniMessage without shading component serializers (#1280) 2024-05-03 14:47:25 +02:00
NEZNAMY f8487f07a6 Create array of component decorations to take values from to avoid instantiation each time 2024-05-02 21:06:15 +02:00
NEZNAMY e38721fa69 Speed up function 2024-05-02 19:30:22 +02:00
NEZNAMY 18e52f2f10 Add 1.20.6 to known versions 2024-04-29 18:06:16 +02:00
NEZNAMY f1300410b8 Update Fabric to 1.20.6 2024-04-29 18:03:52 +02:00
NEZNAMY e17059f1f7 Update library to fix error (1276) 2024-04-29 12:26:29 +02:00
NEZNAMY f3e9f7cf06 [BungeeCord] Remove console warn regarding ViaVersion on BungeeCord as it no longer breaks anything 2024-04-28 18:08:50 +02:00
NEZNAMY 63ed24d136 [Bukkit] Use Spigot internals over Paper API as a primary TPS getter (uses 10x less CPU and 100x less memory allocations) 2024-04-28 14:01:33 +02:00
NEZNAMY 66008cd767 [Velocity] Fix "Received packet for unknown scoreboard objective: TAB-BelowName" on server switch 2024-04-27 19:03:46 +02:00
NEZNAMY 1852c1b5c4 Create array to iterate over to prevent creating new instance every time 2024-04-26 20:12:45 +02:00
NEZNAMY 9a4fc2fc73 Fix field type 2024-04-26 11:52:55 +02:00
NEZNAMY 6846a78833 Require plugin list in a bug report 2024-04-26 11:52:15 +02:00
NEZNAMY d3d9e85a7f Merge branch '4.1.5'
# Conflicts:
#	build.gradle.kts
2024-04-26 11:47:03 +02:00
NEZNAMY f867b6b2ea 4.1.5-SNAPSHOT 2024-04-23 21:09:31 +02:00
NEZNAMY 6b38954694 4.1.4 2024-04-23 20:57:31 +02:00
NEZNAMY 9eb350df30 Fix startup on 1.19.3 - 1.20.4 2024-04-23 20:57:12 +02:00
NEZNAMY 639aa5e251 Fix startup on 1.19.3 - 1.20.4 2024-04-23 20:56:06 +02:00
NEZNAMY f089e26998 Added 1.20.5 support to Bukkit 2024-04-23 19:30:14 +02:00
NEZNAMY 9070a6aadc 4.1.3 2024-04-23 19:11:24 +02:00
NEZNAMY c68e135c66 Added 1.20.5 support to Bukkit 2024-04-23 19:11:17 +02:00
NEZNAMY 8693b4fe8f Mark 1.20.5 as latest supported version 2024-04-23 17:37:21 +02:00
NEZNAMY 9390a402ff Update Fabric to 1.20.5 2024-04-23 17:35:38 +02:00
NEZNAMY 7fda2c5f88 Add 1.20.5 ProtocolVersion constant 2024-04-23 17:35:15 +02:00
NEZNAMY cb394007a4 Update Fabric to 1.20.5 2024-04-23 17:25:00 +02:00
NEZNAMY cd92910281 Add 1.20.5 ProtocolVersion constant 2024-04-23 17:24:35 +02:00
NEZNAMY 7f0b2e2b13 Initialize feature data structured on declaration to make it cleaner & fix error 2024-04-23 16:16:51 +02:00
NEZNAMY bdc44d46c8 Add Exception throwing when attempting to use API class instances that got discarded on reload. 2024-04-23 16:10:24 +02:00
NEZNAMY 8d8480469a Update Fabric to 1.20.5-rc3 2024-04-23 15:28:30 +02:00
NEZNAMY a91fe6db36 Remove unused SneakyThrows 2024-04-23 12:51:41 +02:00
NEZNAMY 20d734aa80 Add missing action mapping 2024-04-23 12:43:20 +02:00
NEZNAMY f053bbd544 Access Team packet data directly on 1.17+ Fabric instead of using reflection 2024-04-23 12:40:14 +02:00
NEZNAMY 7eba26cab1 Rename class to match version number 2024-04-23 12:15:47 +02:00
NEZNAMY 5f77dd0adb Rename class to match version number 2024-04-23 12:14:42 +02:00
NEZNAMY 4ef94d3c60 Update Fabric to 1.20.5-rc3 2024-04-22 17:03:08 +02:00
NEZNAMY 36006045e2 Add "listed" TabList flag support into internal API 2024-04-22 16:54:39 +02:00
NEZNAMY d5d025c2c9 Store information about player meeting a feature's disable condition inside player class to improve performance by avoiding Map lookup each time 2024-04-22 14:41:34 +02:00
NEZNAMY 5b7053d500 Store feature data of players inside TabPlayer class to improve performance by avoiding Map lookup 2024-04-22 14:06:37 +02:00
NEZNAMY ce2e60c268 4.1.4-SNAPSHOT 2024-04-21 21:43:25 +02:00
NEZNAMY 8e9b575c37 Update Fabric to 1.20.5-rc2 2024-04-19 20:13:26 +02:00
NEZNAMY beab7d5a4f Update Fabric to 1.20.5-rc1 2024-04-18 16:26:16 +02:00
NEZNAMY d2f5fc4d69 Update Fabric to 1.20.5-pre4 2024-04-17 15:57:16 +02:00
NEZNAMY fb9a7f693b Update Fabric to 1.20.5-pre3 2024-04-16 16:48:03 +02:00
NEZNAMY 1d2d636270 Fix compilation warning on Fabric 1.14.4 submodule 2024-04-16 09:28:35 +02:00
NEZNAMY 37ec5ee442 Update Fabric to 1.20.5-pre2 2024-04-15 19:08:50 +02:00
NEZNAMY 5ed67cf5f8 Remove recently added config option that doesn't add any real value 2024-04-13 13:21:04 +02:00
NEZNAMY 76fc47d5bd Fix client lag when another plugin removes player from team (#1193) 2024-04-13 13:11:35 +02:00
NEZNAMY aa856beee1 Refactor team anti-override code to avoid duplicating code 2024-04-13 11:37:50 +02:00
NEZNAMY e6f2cc3eda Simplify 2024-04-12 15:00:32 +02:00
NEZNAMY 02fd45587b Fix replacements to %group% changing the group name inside plugin internals as well 2024-04-12 14:45:32 +02:00
NEZNAMY 7cef6eeb61 Update Fabric to 1.20.5-pre1 2024-04-10 19:11:43 +02:00
NEZNAMY da919bc43b Add BuiltByBit link to download links 2024-04-05 22:52:13 +02:00
NEZNAMY 2b661d6c5b Downgrade Java requirement on Fabric back to 17 2024-04-04 19:01:58 +02:00
NEZNAMY ee0ced63ef Update Fabric to 24w14a and Java version to 21 2024-04-03 21:22:35 +02:00
NEZNAMY 736dad5819 Merge pull request #1263 from JT122406/master
Update Loom and Gradle to Latest
2024-04-03 19:08:45 +02:00
Joseph T. McQuigg 11f36e8a22 Update Loom and Gradle to Latest 2024-04-03 13:05:57 -04:00
NEZNAMY 2cddf0b313 Add version compatibility check on Velocity 2024-03-31 12:03:58 +02:00
NEZNAMY 36a2d449b7 Add player version printing to debug command 2024-03-30 13:48:42 +01:00
NEZNAMY b6786456a2 Fix wrong method being overridden 2024-03-30 13:28:14 +01:00
NEZNAMY 76e8e1af6f Remove redundant .toLowerCase() 2024-03-30 12:33:49 +01:00
NEZNAMY ff55838a54 Remove unused imports 2024-03-29 14:21:21 +01:00
NEZNAMY b14b6828cc Move accesswidener file to resources/ folder instead of root in the compiled jar 2024-03-28 10:58:03 +01:00
NEZNAMY be7fb67988 Move configuration files to config/ folder instead of root in the compiled jar 2024-03-28 10:49:53 +01:00
NEZNAMY ae0be45d7d Drop 1.17(.0) support on Fabric (1.17.1 still supported) 2024-03-28 10:36:47 +01:00
NEZNAMY ba237d5dc4 Update Fabric to 24w13a 2024-03-28 10:27:22 +01:00
NEZNAMY bdf5cd8751 Remove unused constructor 2024-03-28 10:27:06 +01:00
NEZNAMY 9a6d309840 Update Fabric to 24w12a 2024-03-20 17:42:51 +01:00
NEZNAMY 9a6e92a58c Micro optimization of placeholder output replacements 2024-03-20 15:05:20 +01:00
NEZNAMY 1bc018918b Use common implementation of a method as default instead of making it abstract 2024-03-20 14:49:37 +01:00
NEZNAMY f32f8f5cdd Convert components in scoreboard class instead of each subclass 2024-03-20 14:39:46 +01:00
NEZNAMY 39585de3f0 Remove fallback solutions for Scoreboard on Bukkit 2024-03-20 14:16:18 +01:00
NEZNAMY 9ce81fc68e Convert component in abstract TabList class instead of manually in every class 2024-03-20 13:54:14 +01:00
NEZNAMY 0d56f0da98 Remove backup solutions for header/footer on Bukkit and only use packets 2024-03-20 13:49:31 +01:00
NEZNAMY 14a3d8da12 Save converted components as a field in TAB component instead of a separate cache that requires lookup, making it slower 2024-03-19 12:57:35 +01:00
NEZNAMY e4fa99b865 Use packets as primary solution for header/footer on Bukkit 2024-03-19 09:42:48 +01:00
NEZNAMY 96af2cb573 Drop native <gradient:#RRGGBB:#RRGGBB>Text</gradient> support to fix unexpected results when used in a way supported by MiniMessage but not this TAB function (and also because TAB called that function first) (#1252) 2024-03-18 22:40:57 +01:00
NEZNAMY f53ec58b2f Fix redundant empty component creation when using magic code after color code 2024-03-18 21:58:46 +01:00
NEZNAMY 2ff30dda83 Use HashMap instead of ConcurrentHashMap for better performance 2024-03-18 18:38:56 +01:00
NEZNAMY c0972f8faf Simplify 2024-03-18 15:52:25 +01:00
NEZNAMY 9663e1aa7e Remove redundant check 2024-03-18 15:46:28 +01:00
NEZNAMY d83a61b30a Replace &#RRGGBB with #RRGGBB sooner to save resources while refreshing 2024-03-18 15:35:59 +01:00
NEZNAMY 96d83da9b7 Remove unused method 2024-03-18 15:23:31 +01:00
NEZNAMY f1d881e0ba Add more checks to API methods 2024-03-18 13:41:23 +01:00
NEZNAMY d1285c7e04 Only send belowname update packets to players in the same world and server 2024-03-18 11:31:41 +01:00
NEZNAMY d4476e2d4c Optimize tablist packet creation on 1.19.3+ Bukkit & Fabric 2024-03-18 10:57:47 +01:00
NEZNAMY 3124d51381 Micro optimization of permission conditions 2024-03-18 10:19:12 +01:00
NEZNAMY b6ae1a79d4 Fix breaking errors on Fabric 1.16 - 1.18.2 2024-03-15 21:29:49 +01:00
NEZNAMY 42d7b598bf Improve comments in accesswidener 2024-03-15 21:29:00 +01:00
NEZNAMY 052e828d5a Split player spawn packet reading on Fabric based on version 2024-03-15 20:51:38 +01:00
NEZNAMY 55d4f8da6b Use logger directly on Fabric 1.18.2+ 2024-03-15 20:33:52 +01:00
NEZNAMY 1c5a4bbacc Simplify channel getting on BungeeCord 2024-03-15 16:54:27 +01:00
NEZNAMY 565d4bdeec Add java version requirement to fabric.mod.json 2024-03-15 15:47:56 +01:00
NEZNAMY 3d9ef7d252 Remove no longer needed SneakyThrows annotation 2024-03-15 15:39:23 +01:00
NEZNAMY 161bcbb236 Merge scoreboard packet listener methods into one 2024-03-15 15:22:23 +01:00
NEZNAMY c8af0ab5bc Use access widener on Fabric instead of reflection where easily possible 2024-03-14 20:46:04 +01:00
NEZNAMY 98e9c167c5 Update Fabric to 24w11a 2024-03-14 18:52:44 +01:00
NEZNAMY ed815c5767 Remove unintended return type 2024-03-14 16:14:14 +01:00
NEZNAMY f6e53ac91f Fix raw generic usage 2024-03-14 16:09:15 +01:00
NEZNAMY 3e5df50f9e Rename generic types 2024-03-14 16:05:44 +01:00
NEZNAMY 1e28a93c5f Replace star import with class imports 2024-03-14 16:02:13 +01:00
NEZNAMY 717bdd3550 Catch everything 2024-03-12 22:55:44 +01:00
NEZNAMY 3bee514bb9 Actually fix the previous error at its source 2024-03-12 10:32:56 +01:00
NEZNAMY 678d4b8db7 Use ConcurrentHashMap to fix ConcurrentModificationException 2024-03-12 10:02:06 +01:00
NEZNAMY d76e5e7f9b Simplify method (also probably speed it up) 2024-03-11 16:03:25 +01:00
NEZNAMY 9629192305 Simplify 2024-03-11 16:00:52 +01:00
NEZNAMY eef7debdba Remove unnecessary full class name 2024-03-09 11:35:23 +01:00
NEZNAMY 138d9f7f46 Initialize more variables in constructor 2024-03-08 12:52:47 +01:00
NEZNAMY e4abd9ec2f Refactor multi-version support on Fabric 2024-03-08 11:21:42 +01:00
NEZNAMY 8efce72e26 Remove component serialization code as it is no longer used 2024-03-07 19:04:27 +01:00
NEZNAMY 15ebca2d11 Use direct component conversion on Fabric instead of serializing and deserializing json 2024-03-07 18:47:55 +01:00
NEZNAMY 6583489523 Remove json deserializer support on Bukkit and only use direct component conversion 2024-03-07 17:15:53 +01:00
NEZNAMY 5610d52813 Remove part of a comment 2024-03-07 17:03:42 +01:00
NEZNAMY 618b61dd60 Use Adventure API to serialize components on Velocity 2024-03-07 17:03:24 +01:00
NEZNAMY 2de58f7a3b Remove RGB support in ViaBossbar (1.16+ clients on 1.8 server) 2024-03-07 16:44:50 +01:00
NEZNAMY 2bd94158f9 Remove redundant code 2024-03-07 14:47:56 +01:00
NEZNAMY 4e7ab43ac9 Update Fabric to 24w10a 2024-03-06 22:38:08 +01:00
NEZNAMY 33529d0cfd Slightly optimize vanish check and usage 2024-03-06 21:00:40 +01:00
NEZNAMY a5b929bdf5 Optimize tablist packet check on 1.19.3+ 2024-03-06 20:37:01 +01:00
NEZNAMY d10bd3358d Simplify 2024-03-05 15:58:14 +01:00
NEZNAMY ffe928fbe8 Save EnumSet for each tablist action into map and retrieve it instead of creating new Set on every packet send. 2024-03-05 15:51:16 +01:00
NEZNAMY fd61739d96 Remove deleted option from default config 2024-03-04 17:03:30 +01:00
NEZNAMY e1602a5655 Refactor TabList class to extract common content from each subclass into the main one 2024-03-04 13:48:53 +01:00
NEZNAMY a936302fd2 Rework tablist anti-override to save expected names and then restore the save values instead of creating them again 2024-03-04 11:45:18 +01:00
NEZNAMY 7f0d4df6ca Save teams for later use instead of recreating them every time 2024-03-03 21:23:47 +01:00
NEZNAMY 35ab0c67c5 Remove unused dependencies 2024-03-02 18:41:05 +01:00
NEZNAMY 090633140f Remove bug compensation 2024-03-02 17:21:16 +01:00
NEZNAMY 8efe02c2ef Further improve performance of command listener method (#1237) 2024-03-01 21:01:02 +01:00
NEZNAMY 2dbcaf029c Improve performance of a method if both scoreboard and bossbar features are disabled (#1237) 2024-03-01 20:28:50 +01:00
NEZNAMY ce758534bd Remove ClickEvent support as it's never used by the plugin 2024-03-01 11:58:19 +01:00
NEZNAMY 15caf70170 Update Bukkit 1.20.5 draft to 24w09a 2024-03-01 10:54:04 +01:00
NEZNAMY c07c3a3a4f Update Fabric to 24w09a 2024-03-01 10:37:43 +01:00
NEZNAMY b9000af55e Implement direct component conversion on Bukkit and use it as primary option. 2024-02-29 21:32:29 +01:00
NEZNAMY ed15ba29bb Create separate class for component conversion on Bukkit (will be extended soon) 2024-02-29 12:42:00 +01:00
NEZNAMY 2fb8da022a Fix startup on <1.8 2024-02-29 12:28:49 +01:00
NEZNAMY ed65088cb8 Add API method for setting player's expected game profile name (#1240) 2024-02-29 09:24:45 +01:00
NEZNAMY f367542096 Replace unoptimized online player check with an instant one 2024-02-28 14:19:38 +01:00
NEZNAMY 00e457542d Remove TabPlayer#isOnline as it was never really used 2024-02-28 14:12:22 +01:00
NEZNAMY b0c423b2dd Change sortingPlaceholder data type to avoid retrieving it each time 2024-02-27 20:57:32 +01:00
NEZNAMY eb5e3d637c Split method into multiple for better readability 2024-02-27 14:45:03 +01:00
NEZNAMY 4acd24b829 Make permission-related options refresh interval configurable 2024-02-27 13:59:58 +01:00
NEZNAMY f8576834fe Optimize method 2024-02-27 13:12:40 +01:00
NEZNAMY 1e9888a8b5 Optimize method 2024-02-27 13:08:17 +01:00
NEZNAMY d99b6643e9 Fix team color defaulting to black on Sponge 2024-02-27 11:17:16 +01:00
NEZNAMY 0b98d98867 Add Sponge 1.20.4 support 2024-02-27 11:04:55 +01:00
NEZNAMY d040b0faf5 Save global playerlist server group mapping instead of computing it on each request 2024-02-27 10:16:55 +01:00
NEZNAMY d53c20da56 Do not respawn armor stands on sneak for flying players (#1236). 2024-02-26 20:28:06 +01:00
NEZNAMY fad035699f Revert broken commit 2024-02-26 19:00:28 +01:00
NEZNAMY c7ab2b93a3 Move armor stands instead of teleporting them when players move. This should result in a significantly better sync. May also help with #1236 a bit. 2024-02-26 18:46:51 +01:00
NEZNAMY 4b75144276 Create cache for last color of prefix 2024-02-26 11:16:30 +01:00
NEZNAMY 99edcf68c1 Use new TabList method for better performance 2024-02-25 15:05:56 +01:00
NEZNAMY 9b6f1ce955 Add TabList#containsEntry method 2024-02-25 15:00:34 +01:00
NEZNAMY b570020944 Only send global playerlist latency update packets of players a player can actually see 2024-02-23 20:44:57 +01:00
NEZNAMY e91ba4ef79 Slightly speed up method 2024-02-23 19:14:45 +01:00
NEZNAMY a1fbefb13f Set use-numbers to true by default because buggy clients don't work without it and will not fix it anytime soon 2024-02-22 23:42:57 +01:00
NEZNAMY 340592d951 Document class 2024-02-22 11:59:45 +01:00
NEZNAMY a1c0bf7dec Use new Paper API for Scoreboard NumberFormat in fallback PaperScoreboard implementation 2024-02-20 18:49:52 +01:00
NEZNAMY a62f20469e Replace NotNull with NonNull in Scoreboard class for better troubleshooting 2024-02-19 20:22:17 +01:00
NEZNAMY 3f1f78315b Add Getter 2024-02-19 20:12:18 +01:00
NEZNAMY 12d8bc75cd Replace NotNull with NonNull in TabList class for better troubleshooting 2024-02-19 20:10:26 +01:00
NEZNAMY c1cf02ee9f Fix ConcurrentModificationException 2024-02-19 16:17:13 +01:00
NEZNAMY 7ac240af76 Update Fabric to 24w07a 2024-02-15 09:29:33 +01:00
NEZNAMY 82c34a33b5 Do not update tablist format for players on different servers who the player cannot see (#1232) 2024-02-14 18:08:04 +01:00
NEZNAMY d2330337ef Simplify method 2024-02-14 16:56:45 +01:00
NEZNAMY af38bd0383 Fix double score send on join 2024-02-14 11:52:07 +01:00
NEZNAMY c0a9ede377 Add runtime warn when belowname / playerlist objective placeholder returned decimal number 2024-02-14 11:45:40 +01:00
NEZNAMY 555ba3eb73 Split method into multiple for better readability and clean up 2024-02-11 20:24:54 +01:00
NEZNAMY 6f0e757ad6 Add console warn if condition type is needed but not configured 2024-02-11 20:07:59 +01:00
NEZNAMY 077b8fee96 Add more info into error message 2024-02-11 16:11:55 +01:00
NEZNAMY 643df47437 (Attempt to) fix deadlock (#1230) 2024-02-11 10:28:43 +01:00
NEZNAMY 9e1ea4678d Create shared empty instance for PlaceholderReplacementPattern to avoid new instances even if nothing is configured 2024-02-10 17:37:20 +01:00
NEZNAMY f3576b678b Make MySQL errors more user-friendly 2024-02-10 11:22:52 +01:00
NEZNAMY 2b49bce998 Add config option to disable SSL certification in MySQL if the database is not using it 2024-02-10 10:22:42 +01:00
NEZNAMY 896048ffff Replace "featureName" field with getter 2024-02-09 16:56:12 +01:00
NEZNAMY 04cb14f790 Add some more Javadoc 2024-02-09 16:12:16 +01:00
NEZNAMY bd22b0c08b Properly remove disconnected player from bossbars 2024-02-09 15:47:47 +01:00
NEZNAMY 95ce52bbeb Add TODO note 2024-02-09 11:04:40 +01:00
NEZNAMY 6b411f5cce Slightly optimize method 2024-02-09 10:56:59 +01:00
NEZNAMY c15b0d178b Create array field to iterate over for slightly better performance 2024-02-09 10:40:48 +01:00
NEZNAMY f5ffb69675 Disable tab expansion by default 2024-02-08 20:59:18 +01:00
NEZNAMY 24e59d970f Initialize NotNull field just in case 2024-02-08 17:10:55 +01:00
NEZNAMY 4ece4b66cd Only initialize map if used 2024-02-07 22:02:50 +01:00
NEZNAMY 7852d244bb Fix #1227 2024-02-07 21:37:27 +01:00
NEZNAMY d1c2487ba4 Enable CPU usage tracking only after running /tab cpu for the first time 2024-02-07 20:43:32 +01:00
NEZNAMY 4ea789efcf Add config option to disable refreshing placeholders in another thread (boosts performance) 2024-02-07 20:17:02 +01:00
NEZNAMY 43fc97c671 Update Fabric to 24w06a 2024-02-07 18:28:09 +01:00
NEZNAMY a20378d5cb Change abstract class to interface 2024-02-06 21:58:35 +01:00
NEZNAMY 7c0384c96b Create local variable to prevent spamming Map#get 2024-02-06 18:51:22 +01:00
NEZNAMY 7d4419b300 Override some methods in EmptyTabExpansion to avoid unnecessary operations 2024-02-06 17:56:28 +01:00
NEZNAMY 393af9b5c5 Add check to avoid unnecessary operations 2024-02-06 17:55:12 +01:00
NEZNAMY 559e423a1d Vastly improve performance of CPU usage tracking 2024-02-06 17:43:45 +01:00
NEZNAMY a2d68e14e6 Simplify 2024-02-06 17:10:21 +01:00
NEZNAMY 580b67d9ed Fix thread submitting tasks to itself 2024-02-06 16:45:57 +01:00
NEZNAMY 080654f703 Increase scoreboard line length limit by 2 characters on <1.13 2024-02-05 20:14:36 +01:00
NEZNAMY 002a002749 Remove redundant check 2024-02-05 19:19:51 +01:00
NEZNAMY 7e888e46f9 Implement best parts of #1219 2024-02-05 10:57:40 +01:00
NEZNAMY 199ca94acd Add compensation for 1.8.0 client-sided bug directly into TabList class (#1225) 2024-02-04 22:03:29 +01:00
NEZNAMY 67455bd47d Fix replacements not applying in nested placeholders 2024-02-04 18:32:21 +01:00
NEZNAMY fbb0e252c5 Allow -1 in refresh intervals 2024-02-04 17:57:44 +01:00
NEZNAMY 2566972ac7 Recode internal component class 2024-02-03 18:12:37 +01:00
NEZNAMY 9455294060 Simplify 2024-02-03 13:24:57 +01:00
NEZNAMY 6870b42a1a Merge branch 'master' of https://github.com/NEZNAMY/TAB 2024-02-03 11:22:45 +01:00
NEZNAMY 32cd414a51 Merge pull request #1224 from XXMA16/fix-spongeforge
Fix SpongeForge startup crash
2024-02-03 11:22:35 +01:00
XXMA16 35f63b7075 Fix code style
Signed-off-by: XXMA16 <xxma1610@gmail.com>
2024-02-03 02:43:51 +02:00
XXMA16 f9097b11b6 Fix SpongeForge startup crash
Signed-off-by: XXMA16 <xxma1610@gmail.com>
2024-02-02 19:37:19 +02:00
NEZNAMY dc5acdf729 Add default implementation to method instead of making it abstract 2024-02-01 22:09:49 +01:00
NEZNAMY e5fb25daee Update Bukkit 1.20.5 draft to match 24w05b changes 2024-02-01 20:47:03 +01:00
NEZNAMY 33b6867c02 Update Fabric to 24w05b 2024-02-01 20:39:16 +01:00
NEZNAMY d572973b60 Add console hint when configuring redundant placeholder replacement pattern using "else" 2024-01-31 19:28:30 +01:00
NEZNAMY 3d240f0f7d Fix NPE 2024-01-31 19:12:13 +01:00
NEZNAMY 3a4973d760 Change sidebar team naming 2024-01-29 11:43:25 +01:00
NEZNAMY 811c9716a2 Fix message 2024-01-28 13:26:04 +01:00
NEZNAMY 771f6db89a Remove unused imports 2024-01-28 10:55:44 +01:00
NEZNAMY 97f515f573 Remove placeholder output replacement from default config 2024-01-27 20:19:17 +01:00
NEZNAMY c589dfb281 Fix per-world settings of unlimited nametags not updating on world switch 2024-01-27 20:01:41 +01:00
NEZNAMY 82efe5b4d1 Simplify 2024-01-27 13:57:25 +01:00
NEZNAMY 765f593b88 Specify locale in .toLowerCase to avoid error when java is using a weird language 2024-01-27 13:52:01 +01:00
NEZNAMY 21e5de25cb Remove console warn when ViaVersion returns unknown version, because kids kept asking about it on ViaVersion discord despite the message clearly saying to update TAB. 2024-01-27 13:42:06 +01:00
NEZNAMY 4333e44f6d Fix false warn on proxy when bukkit permissions are enabled 2024-01-26 21:21:40 +01:00
NEZNAMY 7070fd886b Add support for Bukkit jars without CraftBukkit relocation (#1220) 2024-01-25 15:15:12 +01:00
NEZNAMY 89480a9018 Remove cpu report printing into console if overloaded and debug is enabled 2024-01-24 18:16:15 +01:00
NEZNAMY 19ce873037 Update Fabric to 24w04a 2024-01-24 17:30:58 +01:00
NEZNAMY 977007b427 Do not cache subcomponents on bungeecord (#1211) 2024-01-24 17:07:37 +01:00
NEZNAMY 218c1c9d9a Remove global serverVersion field and only use it in each platform if needed 2024-01-24 15:32:38 +01:00
NEZNAMY f358ac9d9c Create and use Platform#isProxy method 2024-01-24 14:02:38 +01:00
NEZNAMY 58fe2b4582 Make "enable-collision" support conditions 2024-01-24 13:08:03 +01:00
NEZNAMY 211624b1a9 Improve style of iteration 2024-01-24 11:56:01 +01:00
NEZNAMY 6874369a48 Simplify animation placeholder creation 2024-01-24 11:53:52 +01:00
NEZNAMY f8c52d3577 Initialize player group in declaration to prevent "Vault through Bridge" returning null on the first time (#1211) 2024-01-24 09:58:16 +01:00
NEZNAMY 376bf5314d Actually fix trying to process offline players (players are still marked as online by Bukkit API even after they disconnect) 2024-01-23 18:18:12 +01:00
NEZNAMY 2346df67a0 Fix trying to process offline players in placeholder update task 2024-01-23 18:05:01 +01:00
NEZNAMY e63c7b43e1 Show a runtime warn if belowname / playerlist objective cannot be evaluated to a number 2024-01-23 18:04:18 +01:00
NEZNAMY 578691fe8c Document and clean up class 2024-01-22 19:15:07 +01:00
NEZNAMY 189d8a82d5 Update default config to account for missing NumberFormat in scoreboards in bedrock edition 2024-01-22 17:43:45 +01:00
NEZNAMY 9412d9cc28 Add %bedrock% placeholder returning true for bedrock clients 2024-01-22 17:40:02 +01:00
NEZNAMY 75b2bfa14c Implement TabPlayer#isOnline on Fabric 2024-01-22 15:40:09 +01:00
NEZNAMY 7fcb5c8aa3 Create functions for different error types instead of printing them directly 2024-01-22 15:15:59 +01:00
NEZNAMY 9827711111 Simplify 2024-01-22 13:41:06 +01:00
NEZNAMY 16aecd65e6 Add error message when permission plugin returned null group 2024-01-22 13:32:29 +01:00
NEZNAMY c143ecc6ae Remove redundant Getter annotation 2024-01-20 17:56:29 +01:00
NEZNAMY 2935f9e205 Clean up 2024-01-20 17:54:51 +01:00
NEZNAMY a6a33a79d4 Attempt to fix error (#1218) 2024-01-20 17:22:23 +01:00
NEZNAMY 82f9d8ddee Attempt to fix error (#1218) 2024-01-20 11:08:59 +01:00
NEZNAMY daa6012b36 Simplify 2024-01-20 11:05:45 +01:00
NEZNAMY 5001c82f23 Update Fabric to 24w03b 2024-01-18 21:17:10 +01:00
NEZNAMY 59dbad9abf Fix snapshot name in fabric.mod.json 2024-01-18 12:12:13 +01:00
NEZNAMY 945c7cc7b8 Draft 1.20.5 support on Bukkit 2024-01-18 11:19:30 +01:00
NEZNAMY 3391f7646c Simplify 2024-01-17 23:27:27 +01:00
NEZNAMY 88070aa2b2 Use different constructor to simplify usage 2024-01-17 23:06:15 +01:00
NEZNAMY c792296746 Use reflection to get rid of 2 Fabric submodules 2024-01-17 23:06:06 +01:00
NEZNAMY 18a13f777d Allow empty output in sorting by pre-defined values 2024-01-17 22:27:34 +01:00
NEZNAMY 469529b324 Update Fabric to 24w03a 2024-01-17 21:15:26 +01:00
NEZNAMY 4715a5ab9d Use static number as a start of numbering if use-numbers is enabled 2024-01-17 19:08:46 +01:00
NEZNAMY be305162a6 Fix scoreboard use-numbers duplicating numbers 2024-01-17 19:08:17 +01:00
NEZNAMY 7a1bc16e9d Fix NPE 2024-01-17 11:27:36 +01:00
NEZNAMY eb2c80deb8 Add try/catch for ViaVersion hook (#1201) 2024-01-16 21:56:51 +01:00
NEZNAMY 0863b77bf0 Remove unused import 2024-01-16 20:51:16 +01:00
NEZNAMY 769a698509 Fix NPE and replace it with a warning (#1198) 2024-01-16 20:50:51 +01:00
NEZNAMY 53870b2c81 Fix anti-override on Velocity and Sponge no longer working after players are removed & added back to the tablist by another plugin 2024-01-16 12:54:52 +01:00
NEZNAMY e198a5df88 Another attempt to fix #1212 2024-01-16 11:17:28 +01:00
NEZNAMY ac947f698b Fix ClassCastException (#1213) 2024-01-16 11:05:06 +01:00
NEZNAMY ecabd62b6b Catch another exception (#1212) 2024-01-15 10:35:09 +01:00
NEZNAMY f350d200ac Fix memory leak 2024-01-14 20:28:35 +01:00
NEZNAMY 97d5a3f7ef Print all exceptions in a chain, not just the last one 2024-01-14 13:25:59 +01:00
NEZNAMY f15f3efc3f Add plugin's name prefix into console messages on Fabric 2024-01-14 11:48:24 +01:00
NEZNAMY 7563b6b946 Convert \n to newline if snakeyaml does not do it because text is in '' and not "" 2024-01-13 18:52:21 +01:00
NEZNAMY 421c53e6be Replace forEach with for 2024-01-13 18:06:16 +01:00
NEZNAMY 3db8666951 Hide spectator effect for players who unvanished (#1209) 2024-01-13 12:58:00 +01:00
NEZNAMY ecc6e01cf9 Add links to Tanguygab's new discord server where he will provide support to kids 2024-01-12 10:39:12 +01:00
NEZNAMY becf81db00 Merge 2 fields into 1 2024-01-10 15:04:50 +01:00
NEZNAMY 92f5b337c9 Use dummy implementation if original one is not available & remove redundant class 2024-01-10 14:26:56 +01:00
NEZNAMY 3ddf884c23 Get CraftBukkit classes using package name instead of version as recommended by Paper 2024-01-10 14:18:54 +01:00
NEZNAMY 116117af55 Create method to simplify usage 2024-01-09 18:20:51 +01:00
NEZNAMY 0980bcfca5 Merge pull request #1202 from Jake-Moore/master
Support to use Global Playerlist `server-groups` as Header/Footer `per-server` keys.
2024-01-09 18:12:05 +01:00
NEZNAMY 20e2e8ded6 Fix relational placeholders not refreshing properly & nested relational placeholders not being marked as used by the feature (and therefore not refreshing properly) (#1203) 2024-01-09 18:06:35 +01:00
Jake Moore 13af0b7b2b Improve handling of failed cases 2024-01-08 20:58:19 -08:00
Jake Moore cbcbfdcbf1 Adds support to use Global Playerlist server-groups as Header/Footer keys in per-server. Allowing for configuration of a server group with several velocity servers which can have a unique header-footer section. 2024-01-08 17:07:44 -08:00
NEZNAMY 38eb294667 Move version check 2024-01-08 12:24:50 +01:00
NEZNAMY 71d16ff906 Only send messages that actually affect the user 2024-01-08 12:22:19 +01:00
NEZNAMY 395058d771 Send console message saying how long NMS hook took to load 2024-01-08 12:13:58 +01:00
NEZNAMY d8af7c454c Simplify 2024-01-07 23:07:38 +01:00
NEZNAMY 2f10084e7a Replace more fields with functional interfaces 2024-01-07 22:56:08 +01:00
NEZNAMY 5af387b32d Move ScorePacketData to a separate class 2024-01-07 21:41:10 +01:00
NEZNAMY 4b7144f705 Replace fields with functional interfaces for NMS access 2024-01-07 21:20:24 +01:00
NEZNAMY 0fbbbb6485 Simplify 2024-01-07 20:23:09 +01:00
NEZNAMY f033d78785 Optionally print compatibility exception into console 2024-01-07 20:08:44 +01:00
NEZNAMY 2ea79eb57d Remove unused import 2024-01-07 14:44:49 +01:00
NEZNAMY 226ee0db9d Include supported version range in compatibility error message 2024-01-06 22:45:21 +01:00
NEZNAMY 8a62f21e84 Improve compatibility error messages 2024-01-06 22:25:33 +01:00
NEZNAMY c353c39086 Make entity view compatibility on Bukkit optional 2024-01-06 21:33:19 +01:00
NEZNAMY 2b2c877ab2 Add more Javadoc 2024-01-06 21:15:20 +01:00
NEZNAMY 016af4bfee Make DummyEntityView methods do nothing instead of throwing 2024-01-06 20:54:23 +01:00
NEZNAMY b3d26d91de Add console warn when waterfall option causing issues is enabled 2024-01-06 17:23:41 +01:00
NEZNAMY a7a7f409eb Fix sorting note getting overridden on refresh when set using API 2024-01-06 15:52:24 +01:00
NEZNAMY f44ccec712 Remove StaticLine class and use LongLine instead for the same effect 2024-01-06 14:29:08 +01:00
NEZNAMY 1c0887733c Initialize property names to random values instead of specific names 2024-01-06 14:14:33 +01:00
NEZNAMY 7ee3c35785 Rename some cpu usage categories to make them easier to understand 2024-01-06 14:01:13 +01:00
NEZNAMY 01b725cf38 Define team color immediately and forward it instead of figuring it out later 2024-01-05 21:30:43 +01:00
NEZNAMY 1ac6d90633 Add a runtime warn when sorting element is not in list (group, placeholder, or no permission) 2024-01-02 16:27:08 +01:00
NEZNAMY 9704193237 Add a runtime warn when numeric placeholder in condition did not return a number 2024-01-02 15:43:22 +01:00
NEZNAMY 69b150b391 Make team color always white for scoreboard lines (#1189) 2024-01-02 14:13:17 +01:00
NEZNAMY 7ffb3edda5 Spawn entity using bundle packet for 1.19.4+ to prevent frame being rendered between packets, causing visible armor stands for a single frame (#1168) 2024-01-02 13:10:20 +01:00
NEZNAMY 046eb68ce6 Split MisconfigurationHelper class into 3 for different message types 2024-01-01 22:03:08 +01:00
NEZNAMY 816d80a27c Construct ArmorStand with non-null level on Fabric (#1191) (one more) 2023-12-31 11:27:17 +01:00
NEZNAMY 957037e5f4 Construct ArmorStand with non-null level on Fabric (#1191) 2023-12-30 15:38:54 +01:00
NEZNAMY 9ca179a71f Make BungeeCord compatibility error message more clear about what exactly went wrong (#1190). 2023-12-30 15:34:12 +01:00
NEZNAMY cb4d96f1ba Remove unused imports 2023-12-29 22:15:05 +01:00
NEZNAMY 7d57522775 Add more Javadoc 2023-12-29 22:04:54 +01:00
NEZNAMY 902565f1b1 Remove TabList.Entry.Builder class and build entries directly 2023-12-29 19:07:13 +01:00
NEZNAMY 2f8de436af Improve Javadoc 2023-12-29 18:56:17 +01:00
NEZNAMY 38bd035d99 Create separate class for each incoming plugin message and move handling method to ProxyPlatform class 2023-12-29 18:29:51 +01:00
NEZNAMY 88b6d1a3ca Remove redundant SneakyThrows and replace some instances with throws 2023-12-29 14:40:17 +01:00
NEZNAMY a74878e7bb Make PacketSender an instance class 2023-12-29 14:17:29 +01:00
NEZNAMY 2b6eba7c4d Replace star import with direct imports 2023-12-26 12:21:06 +01:00
NEZNAMY 0de1b86ef5 Remove unnecessary static modifier 2023-12-26 12:19:46 +01:00
NEZNAMY ae0ab6471b Remove unused import 2023-12-26 12:17:58 +01:00
NEZNAMY c24cdaa8a4 Fix json syntax error when sorting character ends up being \ (#1184) 2023-12-24 23:17:07 +01:00
NEZNAMY df1442dd8a Fix YellowNumber & BelowName sending score update to disabled players 2023-12-24 15:30:57 +01:00
NEZNAMY b17d5306db Create and use TabFeature#config method for shorter code in all features 2023-12-24 15:08:34 +01:00
NEZNAMY 88d5294b8e Skip placeholder refreshing code if no placeholders are being refreshed 2023-12-24 14:25:25 +01:00
NEZNAMY 8c3405d01f Replace streams with direct code for better performance 2023-12-24 14:23:13 +01:00
NEZNAMY 9f83ba700c Fix bossbar & scoreboard writing into file on every join when remembering toggle choice is enabled even if value didn't change 2023-12-23 23:06:08 +01:00
NEZNAMY ae147211ca Code style 2023-12-23 22:58:01 +01:00
NEZNAMY 01d305eba0 Move scoreboard packet listening from pipeline class to scoreboard class 2023-12-23 21:54:26 +01:00
NEZNAMY 08c30574a9 Code style 2023-12-23 21:01:25 +01:00
NEZNAMY 39c4725a2f Change access from public to private 2023-12-23 19:45:32 +01:00
NEZNAMY 7002aeefaf Create constants for "magic numbers" 2023-12-23 17:28:19 +01:00
NEZNAMY f1201cc5bc Code style 2023-12-23 16:30:14 +01:00
NEZNAMY 0b99d4ac52 Extract duplicated code into a method 2023-12-23 16:29:11 +01:00
NEZNAMY 642cb701dd Remove unused import 2023-12-23 15:42:49 +01:00
NEZNAMY 66d6aee115 Move method to avoid duplication 2023-12-23 15:39:01 +01:00
NEZNAMY 38d8eb1108 Simplify 2023-12-23 15:20:09 +01:00
NEZNAMY f9941c5dff Add some more Javadocs 2023-12-23 14:48:26 +01:00
NEZNAMY 855a6f447a Use constants for bStats plugin ids 2023-12-23 13:59:02 +01:00
NEZNAMY fa0a1f8553 Create and use ProtocolVersion#supportsRGB instead of manually comparing number each time. 2023-12-23 13:55:52 +01:00
NEZNAMY 0d1fee1636 Add missing Javadoc to Fabric 2023-12-23 13:48:35 +01:00
NEZNAMY ec8269332f Add missing Javadoc to Bukkit 2023-12-23 13:31:16 +01:00
NEZNAMY 00fe9400e6 Add missing Javadoc to BungeeCord 2023-12-23 12:40:59 +01:00
NEZNAMY 8389b1e151 Add missing Javadoc to API 2023-12-23 12:31:09 +01:00
NEZNAMY 2289d10d6c Add missing Javadoc to Sponge and Velocity 2023-12-23 12:22:01 +01:00
NEZNAMY b30af4f144 Remove redundant "new" when creating arrays 2023-12-23 12:00:05 +01:00
NEZNAMY 041322c53f Update latest known version field 2023-12-23 11:21:03 +01:00
NEZNAMY 548968bcfc Print console warn on startup if error log has reaches its size limit 2023-12-22 20:37:31 +01:00
NEZNAMY 6d405b70e7 Properly apply replacements to server placeholders initially 2023-12-22 17:27:02 +01:00
NEZNAMY 1b4d4acc63 Fix map merging mistake 2023-12-22 17:26:24 +01:00
NEZNAMY 6f498089fb Add back option to disable tab expansion 2023-12-22 15:32:53 +01:00
NEZNAMY 8e27cba0f6 Fix compilation 2023-12-22 15:30:05 +01:00
NEZNAMY ae48041a96 Simplify 2023-12-21 23:55:57 +01:00
NEZNAMY bad16a4cdc Update Fabric to 23w51b 2023-12-21 20:50:16 +01:00
NEZNAMY 07baf769dd Suppress random irrelevant warnings 2023-12-21 20:21:23 +01:00
NEZNAMY ab409643f6 Convert class to record 2023-12-21 18:00:36 +01:00
NEZNAMY c745a61601 Recode placeholder refreshing to make refreshing thread not do anything more than placeholder requests & various minor performance improvements 2023-12-21 17:57:47 +01:00
NEZNAMY c4e8e83d1e Add check to improve method's performance 2023-12-21 13:03:49 +01:00
NEZNAMY 9133f3d792 Repackage classes and remove unused interface 2023-12-21 09:54:22 +01:00
NEZNAMY b779d584a5 Speed up placeholder replacement code if nothing is configured 2023-12-20 17:31:22 +01:00
NEZNAMY 05bb61b3ab Improve performance of a method 2023-12-20 15:50:25 +01:00
NEZNAMY 5d2885e662 Wrap maps into synchronizedMap to avoid deadlock on concurrent access 2023-12-20 15:48:26 +01:00
NEZNAMY ef645c1058 Fix random NPE 2023-12-17 20:16:09 +01:00
NEZNAMY 52a476fd0a Print cpu report into console if plugin is overloaded and debug is enabled 2023-12-17 11:19:08 +01:00
NEZNAMY 7386c45f06 Implement TabList class on Bukkit for 1.7, implement a backup solution using API and make the loading optional 2023-12-16 15:53:51 +01:00
NEZNAMY 1a508ddedf Fix error on old versions 2023-12-16 14:28:31 +01:00
NEZNAMY a8675f254a Move sendPacket call 2023-12-15 18:46:03 +01:00
NEZNAMY 0f70cd789e Move team anti-override to scoreboard class 2023-12-15 14:53:47 +01:00
NEZNAMY b8f594f42c Move tablist packet processing to tablist class 2023-12-15 12:20:17 +01:00
NEZNAMY 7857527ce1 Add console warn if floodgate is not configured correctly 2023-12-11 20:40:14 +01:00
NEZNAMY 05c41a5469 Create separate class for PremiumVanish hook & add check for outdated version to avoid an error (#1171) 2023-12-11 15:11:46 +01:00
NEZNAMY f11f8afdc4 Update README.md 2023-12-11 09:05:28 +01:00
NEZNAMY fa499aa46d Merge pull request #1170 from NicoNekoDev/master
Add NexEngine gradient
2023-12-10 13:25:05 +01:00
NicoNekoDev e8a7cc026f Documentation 2023-12-10 14:09:53 +02:00
NicoNekoDev 433ef6a8a7 Placeholders and legacy text 2023-12-10 14:08:09 +02:00
NicoNekoDev fc4b5a7bcd Fix codestyle 2023-12-10 13:40:44 +02:00
NicoNekoDev bd43134d58 Fix text 2023-12-10 13:26:34 +02:00
NicoNekoDev 557970ba4e Add NexEngine gradient
https://github.com/nulli0n/NexEngine-spigot/wiki/Configuration-Tips
2023-12-10 11:18:41 +02:00
NEZNAMY d3418e0067 Remove duplicate method 2023-12-09 20:52:44 +01:00
NEZNAMY b8d1845d4e Change way of detecting 1.19.4+ flag 2023-12-09 19:03:11 +01:00
NEZNAMY 32e360409d Create and use method for retrieving a CraftBukkit class instead of doing it manually each time (the method might also change in the future according to Paper devs, this will also make modifying and maintenance easier) 2023-12-09 19:00:46 +01:00
NEZNAMY c54a778af9 Fix RGB color conversion from adventure component to internal component 2023-12-09 15:26:55 +01:00
NEZNAMY ce25698f87 Do not cache nested components 2023-12-09 14:26:49 +01:00
NEZNAMY 4d95cc838a Change way of multi-version code handling on Fabric to significantly reduce complexity, module count and compilation time 2023-12-09 14:14:31 +01:00
NEZNAMY 67fa0a231e Add more misconfiguration checks for layout feature 2023-12-09 11:23:39 +01:00
NEZNAMY 3c2e8c81c4 4.1.3-SNAPSHOT 2023-12-08 09:50:11 +01:00
NEZNAMY 484d46252b 4.1.2 2023-12-08 09:47:09 +01:00
NEZNAMY a2e3c67298 Fix MiniMessage parsing causing issues to different syntax rules (#1166) 2023-12-08 09:46:36 +01:00
NEZNAMY b2ea05d8dd Merge 1.14.4 and 1.15.2 fabric modules for faster compilation 2023-12-07 20:26:13 +01:00
NEZNAMY 1477f47962 Merge 1.17 and 1.17.1 fabric modules for faster compilation 2023-12-07 19:18:25 +01:00
NEZNAMY 273ce49c14 4.1.2-SNAPSHOT 2023-12-07 19:16:56 +01:00
NEZNAMY 96b6790646 4.1.1 2023-12-07 18:50:30 +01:00
NEZNAMY 38227ec878 Update Fabric to 1.20.4 2023-12-07 18:48:08 +01:00
NEZNAMY 11da632972 Add 1.20.4 to version list 2023-12-07 17:46:51 +01:00
NEZNAMY 3721b9fe22 Fix MiniMessage not working in scoreboard 2023-12-07 14:12:13 +01:00
NEZNAMY ecb697e5fb Update default config to match recent scoreboard change (using ||) 2023-12-07 13:31:51 +01:00
NEZNAMY c754772280 Remove warn if ViaVersion returns -1 version (finally got to reproduce it & make tests) 2023-12-06 18:21:58 +01:00
NEZNAMY 5f2b4ba0b3 Fix disconnect on BungeeCord on 1.20.3 2023-12-06 13:46:21 +01:00
NEZNAMY 0ab60becfc Change scoreboard line number format split sequence to || instead of | to prevent false trigger when trying to actually display the character. 2023-12-05 23:01:54 +01:00
NEZNAMY 1dcfb7d6dc 4.1.1-SNAPSHOT 2023-12-05 23:01:11 +01:00
NEZNAMY 3c0b44b365 4.1.0 2023-12-05 20:45:58 +01:00
NEZNAMY ec4aec50ef Mark 1.20.3 as latest known version 2023-12-05 18:55:42 +01:00
NEZNAMY 9c86cfe056 Add Vault to softdepend to avoid console warn 2023-12-05 18:53:49 +01:00
NEZNAMY 6bb2337276 Print warn if RedisSupport received unknown message instead of throwing a NPE 2023-12-05 18:49:53 +01:00
NEZNAMY 4702ca255b Update Fabric to 1.20.3 2023-12-05 18:48:54 +01:00
NEZNAMY ab47aa36cc Confirm network id of 1.20.3 2023-12-05 18:40:55 +01:00
NEZNAMY 4bb14c4a4e Rename new config options 2023-12-05 17:27:24 +01:00
NEZNAMY 1dd75162f9 Add a version to list 2023-12-04 21:09:37 +01:00
NEZNAMY a2242e3c27 Move server version check 2023-12-04 20:52:29 +01:00
NEZNAMY 26ecf494a9 Little fix 2023-12-04 20:45:51 +01:00
NEZNAMY 659af5d0b3 Completely get rid of NMSStorage class 2023-12-04 20:33:23 +01:00
NEZNAMY 382a5ee7fc Move packet sending method to a separate class and make loading optional 2023-12-04 19:17:51 +01:00
NEZNAMY 7364496844 Move ping retrieving method to a separate class 2023-12-04 17:52:32 +01:00
NEZNAMY d342316b87 Reduce dependence on the main NMS class on Bukkit 2023-12-04 17:29:25 +01:00
NEZNAMY b38141da88 Add &f at the beginning of scoreboard lines for 1.13+ players to prevent color field from coloring text if no color is used 2023-12-04 16:40:06 +01:00
NEZNAMY 98f80f7dae Remove unused methods 2023-12-03 21:36:22 +01:00
NEZNAMY c134ec6bfe Simplify class loading 2023-12-03 21:32:00 +01:00
NEZNAMY 4e3f759243 Use NMS prefix only once instead of every usage 2023-12-03 21:03:08 +01:00
NEZNAMY a5f2e0157b Make player game profile getting optional instead of throwing a compatibility error 2023-12-03 20:52:29 +01:00
NEZNAMY fd21032e51 Make pipeline injection compatibility optional and print a warning if a compatibility error is found 2023-12-03 19:22:33 +01:00
NEZNAMY c4f5f9b7d3 Update comment 2023-12-03 18:11:40 +01:00
NEZNAMY 6baf5a7068 Fix NPE 2023-12-03 17:28:41 +01:00
NEZNAMY d3460174de Enable fallback solutions for Scoreboard implementation on Bukkit 2023-12-03 16:07:05 +01:00
NEZNAMY f9f19628ca Fix BukkitScoreboard class issues 2023-12-03 15:38:22 +01:00
NEZNAMY 04e48fea5d Clean up method 2023-12-01 20:22:41 +01:00
NEZNAMY 3e99e22fce Simplify 2023-12-01 19:18:58 +01:00
NEZNAMY 0b244d5ff7 Refactor PacketScoreboard class and draft 1.20.3 support 2023-12-01 19:15:56 +01:00
NEZNAMY 703f2ff316 Fix potentially wrong uuid write 2023-12-01 09:35:47 +01:00
NEZNAMY 34a2bbdbae Simplify 2023-12-01 09:34:14 +01:00
NEZNAMY cd8697c1a4 Add exclusions for some dependencies 2023-11-30 19:15:20 +01:00
NEZNAMY ed2dc2dd51 Avoid rare error on Velocity 2023-11-30 18:50:53 +01:00
NEZNAMY 2dfdc1b993 Update Fabric to 1.20.3-rc1 2023-11-30 18:27:49 +01:00
NEZNAMY 6f2d7f1194 Fix 1.20.3 client crash on BungeeCord 2023-11-30 17:52:01 +01:00
NEZNAMY 30009ef127 Attempt to fix error (#1146) 2023-11-29 17:19:11 +01:00
NEZNAMY 051a422331 Update Fabric to 1.20.3-pre4 2023-11-29 16:56:35 +01:00
NEZNAMY fab6489e9c Fix compilation 2023-11-28 16:12:27 +01:00
NEZNAMY a448614e4a Slightly better organize method 2023-11-27 18:54:28 +01:00
NEZNAMY 84ad874b2a Split complex method into 2 2023-11-27 18:43:43 +01:00
NEZNAMY 19ba978291 Simplify 2023-11-27 18:16:48 +01:00
NEZNAMY e304469e55 Remove star import 2023-11-27 18:10:28 +01:00
NEZNAMY 7ce9e2592a Update README.md 2023-11-27 18:07:35 +01:00
NEZNAMY 681b812c7b Rename feature in /tab cpu output 2023-11-26 13:59:29 +01:00
NEZNAMY ee1ab6785d Rename objective 2023-11-26 12:36:12 +01:00
NEZNAMY 57704b6622 Move a few classes around 2023-11-26 11:15:23 +01:00
NEZNAMY 7fe804e0fc Fix disconnect on bungeecord on 1.20.3 due to null text in component 2023-11-25 22:24:02 +01:00
NEZNAMY a71529b641 Simplify 2023-11-25 18:07:47 +01:00
NEZNAMY 4055173bdb Replace .length() == 0 with .isEmpty() 2023-11-25 17:09:20 +01:00
NEZNAMY 3f8841a276 Update to latest BungeeCord (for the 3rd time in a row) 2023-11-25 17:04:34 +01:00
NEZNAMY 15c38851bc Add misconfiguration check and prevent startup error 2023-11-25 16:56:11 +01:00
NEZNAMY 05030ae817 Update outdated message 2023-11-25 13:05:57 +01:00
NEZNAMY 255fa11371 Fix NPE 2023-11-24 18:41:08 +01:00
NEZNAMY a074c0bf74 Simplify 2023-11-24 10:49:12 +01:00
NEZNAMY 6ccd649fc4 Remove unused imports 2023-11-24 10:46:59 +01:00
NEZNAMY 21dbea07dd Add support for nested relational placeholders (#1153) 2023-11-23 20:28:21 +01:00
NEZNAMY 4c21d9d127 Remove unused import 2023-11-23 20:27:16 +01:00
NEZNAMY 766002b079 Delete aligned suffix feature, since 1.20.3 now has it naturally using playerlist objective (rip 1.20.2-) 2023-11-23 19:39:47 +01:00
NEZNAMY 2ce430ec41 Add support for all Fabric versions in a single jar 2023-11-23 19:18:31 +01:00
NEZNAMY cf2b151045 Bump Velocity version and use new method 2023-11-19 16:57:22 +01:00
NEZNAMY 92216179df Replace try/catch with SneakyThrows annotation 2023-11-19 16:27:06 +01:00
NEZNAMY a2a95b8591 Replace scoreboard enums with fields 2023-11-19 10:50:54 +01:00
NEZNAMY 4a22dc111a Fix attempt to send header/footer to 1.7 players on bungeecord, causing disconnect 2023-11-19 10:16:27 +01:00
NEZNAMY 5df7ecc245 Fix compatibility error message 2023-11-18 20:49:24 +01:00
NEZNAMY d4ef520f26 Print required bridge version in debug command if not connected 2023-11-18 20:39:09 +01:00
NEZNAMY e0f8737865 Use direct code for bungeecord instead of reflection and drop support for old versions 2023-11-18 20:37:37 +01:00
NEZNAMY 37b13a54a7 Create classes for plugin message types instead of writing all content on each usage + bump bridge version to 5 due to braking changes 2023-11-18 14:44:22 +01:00
NEZNAMY d9d28d31d0 Prepare for new 1.20.3 scoreboard features 2023-11-17 20:21:17 +01:00
NEZNAMY 66bf5da3f5 Delete CustomLine class due to not being viable 2023-11-17 11:41:11 +01:00
NEZNAMY 840c721afc Simplify, the performance gain was pretty much zero 2023-11-17 10:59:28 +01:00
NEZNAMY 859e705a48 Drop multi-version code for fabric (hard to maintain + a lot of it didn't actually work) 2023-11-16 22:10:45 +01:00
NEZNAMY 7375070b21 oops (#1144) 2023-11-15 16:53:42 +01:00
NEZNAMY 3e2eda6a71 Add ClickEvent to components 2023-11-11 20:17:22 +01:00
NEZNAMY 798d327dcb Fix plugin not removing redundant character width overrides from config 2023-11-11 18:11:37 +01:00
NEZNAMY f5ca9139e6 Fix double bossbar on Velocity on server switch (#1139) 2023-11-11 14:02:07 +01:00
NEZNAMY f35e8cfa51 Improve vanish tracking for nametag feature 2023-11-10 21:31:21 +01:00
NEZNAMY 0f6953711b Update build.yml 2023-11-10 15:57:34 +01:00
NEZNAMY e2c5e6f9ac Allow empty text for fixed slots in layout 2023-11-10 15:46:26 +01:00
NEZNAMY 5ef5d6ddba Update README.md 2023-11-10 12:51:41 +01:00
NEZNAMY 5b19a5d798 Only unregister team for other players when player is vanishing 2023-11-10 11:02:35 +01:00
NEZNAMY bf804e8923 Merge pull request #1137 from NEZNAMY/vanish-patch
Alternate implementation of #1136
2023-11-09 18:53:45 +01:00
NEZNAMY f47b8b5528 Alternate implementation of #1136 2023-11-09 18:30:56 +01:00
NEZNAMY c353f6787a Fix endsWith condition (#1134) 2023-11-07 17:37:52 +01:00
NEZNAMY 1b7d5c1a5c Add support for latest BungeeCord (yes, again), as well as some previous versions and remove compatibility check. 2023-11-06 17:12:26 +01:00
NEZNAMY 956456f157 4.1.0-SNAPSHOT 2023-11-06 13:41:51 +01:00
NEZNAMY 49077bd798 Create enum constants for packet actions for better readability and understanding of code 2023-11-05 21:16:07 +01:00
NEZNAMY 019a0287b2 4.0.9 2023-11-05 14:27:55 +01:00
NEZNAMY a71dac28c0 Hotfix after adding support for latest bungeecord (#1132) 2023-11-05 14:21:25 +01:00
NEZNAMY 155886e000 Fix typo 2023-11-04 15:39:45 +01:00
NEZNAMY ed4c303d2e 4.0.8 2023-11-04 14:55:32 +01:00
NEZNAMY 9da0db5f74 Disable creation of blank issues 2023-11-04 11:55:58 +01:00
NEZNAMY 562a973c84 Create new issue template 2023-11-04 11:53:10 +01:00
NEZNAMY 967980ddf7 Update bug_report.yml 2023-11-03 21:27:24 +01:00
NEZNAMY 81d3675a87 Check for bundle packet on 1.19.4+ when reading entity packets for unlimited nametags 2023-11-03 21:25:21 +01:00
NEZNAMY 7be786bbaf Fix vanish change being called on join even if vanish status did not change 2023-11-02 17:24:02 +01:00
NEZNAMY f41c9be1f7 Fix race condition on Velocity causing errors on shutdown 2023-11-02 17:21:48 +01:00
NEZNAMY e88062d028 Fix unvanish method not being called on server switch when clearing vanish status 2023-11-02 16:08:15 +01:00
NEZNAMY edb2828643 Fix wrong java instruction 2023-11-02 15:58:34 +01:00
NEZNAMY 58c189cd0e Catch all exceptions/errors on load/unload to prevent players from getting kicked on bungeecord if something changes again in the future 2023-10-31 16:41:29 +01:00
NEZNAMY 012994847e Unregister teams of players who vanished for those who cannot see vanished players to prevent 3rd party clients from revealing vanished players by finding out who is vanished and who actually left. 2023-10-30 20:39:21 +01:00
NEZNAMY d87801be5f Add support for latest BungeeCord (#1123) 2023-10-30 16:02:31 +01:00
NEZNAMY 6d78c0c104 Create a class storing values of minecraft limitations 2023-10-29 15:25:00 +01:00
NEZNAMY 3a83519122 Fix tablist entry related issues on both BungeeCord and Velocity (each one was affected by a different issue) 2023-10-27 22:27:42 +02:00
NEZNAMY a9f940ebed Avoid attempts to send packets to offline players on bungeecord 2023-10-27 19:17:56 +02:00
NEZNAMY db73d9ef81 Simplify 2023-10-24 17:46:25 +02:00
NEZNAMY e2bd21c717 Cache adventure components & use Paper API for header/footer by default. This has reduced CPU usage of the feature by 50% in the test I have done. 2023-10-24 17:40:22 +02:00
NEZNAMY 871215b7b5 Do not attempt to send scoreboard-related packets between login packet send and process 2023-10-24 15:18:17 +02:00
NEZNAMY a6153ef46f Force-fix NPE that doesn't make sense 2023-10-24 13:42:55 +02:00
NEZNAMY 35475a6103 Fix the previous error on Fabric & Sponge as well 2023-10-24 13:42:35 +02:00
NEZNAMY bf77ffc1a5 Fix error (#1117) 2023-10-22 23:01:53 +02:00
NEZNAMY 7a64a9a534 Code style 2023-10-22 20:08:27 +02:00
NEZNAMY 68e057b99c Fabric - Implement world name recognition and everything related to it (#1115) 2023-10-22 17:44:34 +02:00
NEZNAMY 7338afff96 Fix error when using 3 years old version of PlaceholderAPI 2023-10-21 11:27:38 +02:00
NEZNAMY 97ae7813aa Add vanish status updating to RedisBungee (#1109) 2023-10-18 16:48:01 +02:00
NEZNAMY c0f3667ac1 4.0.8-SNAPSHOT 2023-10-18 16:47:37 +02:00
NEZNAMY d5c5502abe 4.0.7 2023-10-16 20:45:35 +02:00
NEZNAMY 194e8ffbd9 Code style 2023-10-15 20:39:06 +02:00
NEZNAMY ef39458abd With all the problems on 1.20.2 BungeeCord it turns out that Velocity isn't that bad. 2023-10-15 17:39:21 +02:00
NEZNAMY 6a6907fb0a Process login packet with a delay to avoid problems 2023-10-15 17:33:06 +02:00
NEZNAMY 8bb7c4a4a6 Adapt redis support subfeatures to recent changes 2023-10-15 17:00:55 +02:00
NEZNAMY 91700e7ed0 Fix global playerlist not readding players for 1.20.2 clients on server switch 2023-10-15 17:00:16 +02:00
NEZNAMY 661c2e6fc3 Simplify 2023-10-15 15:37:38 +02:00
NEZNAMY 3d053a6149 Implement backup solutions if header/footer fields fail to initialize 2023-10-15 15:35:25 +02:00
NEZNAMY 34179e4f62 Fix startup on old versions due to wrong enum names 2023-10-15 14:56:40 +02:00
NEZNAMY a23e5d9f50 Remove toComponent method from Platform interface and only keep it in platforms that actually use it 2023-10-15 14:26:09 +02:00
NEZNAMY 1cbcbf70d9 Fix aligned playerlist attempting to send packets to players who just left 2023-10-15 14:08:35 +02:00
NEZNAMY 0a7371aaec Micro optimizations with enum conversions 2023-10-14 13:55:52 +02:00
NEZNAMY da13e2d861 Fix Bridge still injecting placeholders that are not used on proxy anymore 2023-10-13 12:27:12 +02:00
NEZNAMY 5b18fa8c25 Fix PingSpoof spoofing everything instead of just online players (or their respective layout entries) 2023-10-13 11:34:38 +02:00
NEZNAMY 347231850a Fix error 2023-10-13 09:51:40 +02:00
NEZNAMY b1f9bdc26c Resend BossBar on server switch for 1.20.2 players as Login packet now clears it 2023-10-12 20:51:50 +02:00
NEZNAMY 03c9b95041 Listen to login packet instead of server switch delay for 1.20.2 players for better consistency (also fix layout not being resent on server switch on 1.20.2) 2023-10-12 19:20:22 +02:00
NEZNAMY 6e7e1d783b Fix rare placeholder formatting error 2023-10-12 16:33:58 +02:00
NEZNAMY cfb9b0a029 Fix compatibility with some random 1.8.8 overpriced fork (#1105) 2023-10-12 14:32:21 +02:00
NEZNAMY b7ea6e5af6 Fix wrong exception being caught causing the try/catch to not work (#1092) 2023-10-12 09:33:50 +02:00
NEZNAMY 44104df712 Change error message about invalid team/objective actions to a debug message. They don't cause any issues as they are properly caught and debugging is hard, especially if reporter has no interest in cooperating (#1083) 2023-10-11 19:35:57 +02:00
NEZNAMY 5de20d1c58 Add try/catch for BungeeCord sendPacket method to avoid a NPE in BungeeCord code (#1090, #1092) 2023-10-11 16:24:43 +02:00
NEZNAMY d156303740 Remove warn when placeholders use too much CPU. Since they have been moved to another thread, they will no longer prevent the plugin from working. While the warning can be useful for more advanced users, this is a public plugin used by many and most of them don't care about performance at all. This has resulted in having to answer people who would have never contacted me otherwise. 2023-10-10 15:04:00 +02:00
NEZNAMY 6e36eb3554 Add back fabric class for multi-version code for easier backport 2023-10-09 21:49:21 +02:00
NEZNAMY f7f3891817 Avoid attempts to send plugin message to offline players on bungeecord (#1090? #1092?) that may? cause errors on 1.20.2 2023-10-08 12:41:12 +02:00
NEZNAMY 1ec28856ff Avoid attempts to send packets to offline players on bungeecord (#1090? #1092?) that may? cause errors on 1.20.2 2023-10-06 11:41:32 +02:00
NEZNAMY 9658e0b74d Add debug message showing how long bridge took to respond to player join plugin message 2023-10-06 11:31:09 +02:00
NEZNAMY 86cd8d4151 Make feature loading more readable 2023-10-05 17:39:27 +02:00
NEZNAMY 2418eb206e Improve unknown version handling code & error messages 2023-10-05 13:57:56 +02:00
NEZNAMY 08fa715d26 Fix runtime warns false triggering on proxy when placeholders are not loaded due to bridge not having a chance to respond yet (#1088) 2023-10-04 14:16:08 +02:00
NEZNAMY 52426de283 Remove double method call 2023-10-04 14:04:57 +02:00
NEZNAMY 64b3da14c4 It's called disable condition, not display condition 2023-10-02 20:38:21 +02:00
NEZNAMY bf7341c52c Change way getProfile method is retrieved (#1089) 2023-10-02 19:09:53 +02:00
NEZNAMY e3490564a2 4.0.7-SNAPSHOT 2023-10-02 19:07:05 +02:00
NEZNAMY 6218f0ed16 4.0.6 2023-10-01 16:35:39 +02:00
NEZNAMY 54e8e1ea98 Add a temporary workaround for https://github.com/SpigotMC/BungeeCord/issues/3542 2023-10-01 16:35:33 +02:00
NEZNAMY 4cd50fb3d5 Use sendPacketQueued method on BungeeCord to avoid error on 1.20.2 clients 2023-10-01 16:31:25 +02:00
NEZNAMY 590286a6c2 4.0.5 2023-09-27 21:12:58 +02:00
NEZNAMY 6c96650dcc Add support for new Spigot build that uses mojang mappings for fields and methods 2023-09-27 21:12:22 +02:00
NEZNAMY 7c83a74fd8 Fix plugin trying to send scoreboard packets to players who left already 2023-09-27 19:20:32 +02:00
NEZNAMY 7b3f60cb3b 4.0.5-SNAPSHOT 2023-09-23 16:37:02 +02:00
NEZNAMY bfc845088a Merge pull request #1084 from GsTio86/master
Fix Arclight compatibility
2023-09-23 12:36:32 +02:00
Galen Huang e67d93a592 Update DataWatcher.java 2023-09-23 16:58:19 +08:00
gstio86 b518b980ae Fix Arclight compatibility 2023-09-23 14:35:06 +08:00
NEZNAMY 744bc1403a Remove tps placeholder from config entirely, the negation was wrong as well 2023-09-22 11:01:35 +02:00
NEZNAMY e11113073f 4.0.4 2023-09-22 09:00:37 +02:00
NEZNAMY 3615818812 Add condition to default config to prevent %tps% being displayed on BungeeCord in scoreboard, as the message is too long 2023-09-22 08:59:31 +02:00
NEZNAMY 0cdef12caf Add support for BungeeCord 1.20.2 2023-09-22 08:56:19 +02:00
NEZNAMY dda8c6c053 Fix another error on Bukkit 1.20.2 2023-09-21 22:21:46 +02:00
NEZNAMY 8c3327f553 Fix error on Bukkit 1.20.2 2023-09-21 20:49:29 +02:00
NEZNAMY c037a14e1f Update Bukkit to 1.20.2 2023-09-21 19:45:06 +02:00
NEZNAMY bd661360ee Delete %server_uptime% from default config as it's a PlaceholderAPI placeholder, which is not always guaranteed to work. (#1077) 2023-09-21 18:33:27 +02:00
NEZNAMY 317fabbc87 Update Fabric to 1.20.2 2023-09-21 18:31:49 +02:00
NEZNAMY 87161446c5 Add 1.20.2 to protocol versions 2023-09-21 18:25:22 +02:00
NEZNAMY 7db8b2e84b Send warn if trying to use parse command from the console with "me" player name argument 2023-09-21 15:04:03 +02:00
NEZNAMY 5f3fa2b317 Layout - Fix ROWS direction type not working properly & avoid real players appearing on top when teams are disabled 2023-09-19 22:14:37 +02:00
NEZNAMY 64c15730a6 Add missing correct Placeholder#update implementations (#1075) 2023-09-17 18:48:41 +02:00
NEZNAMY e5ab46b8ad Initialize scoreboard placeholders to avoid them rarely not parsing due to not being set 2023-09-17 15:01:51 +02:00
NEZNAMY 3060d8cc2b Add override for %player_ping% placeholder because 1.20.2 will have a breaking change to prevent github issues reporting server expansion not supporting new version 2023-09-16 10:30:05 +02:00
NEZNAMY f5d6ba462e Remove unnecessary fully qualified class names 2023-09-15 15:21:39 +02:00
NEZNAMY 81fdeece96 Port new Velocity anti-override to Sponge as well 2023-09-15 14:21:20 +02:00
NEZNAMY 8f60439ef3 Fix multiple sorting types with same priority separated with | not actually working 2023-09-14 16:13:44 +02:00
NEZNAMY c5420ead90 Send gamemode update packet on world switch when spectator fix is enabled as the server may resend gamemode on world switch back to spectator (#1069) 2023-09-13 16:55:21 +02:00
NEZNAMY 99d372d03c Fix refresh interval config conversion ignoring random invalid user-made maps and then causing error on load 2023-09-12 14:32:15 +02:00
NEZNAMY 1219a9822f Remove unused dependency 2023-09-10 10:42:37 +02:00
NEZNAMY d40c182af9 Clean up repositories 2023-09-10 10:39:12 +02:00
NEZNAMY 785e986a72 Fix component cache including child components 2023-09-09 21:04:41 +02:00
NEZNAMY e8b80f455b Replace converter methods with arrays for fast access 2023-09-09 11:33:16 +02:00
NEZNAMY 2d545f1bf1 Fix potential blocking of other plugins in new anti-override for Velocity 2023-09-09 08:22:45 +02:00
NEZNAMY d4713dc7f4 Use direct code for LibsDisguises hook instead of reflection and move it into a separate class 2023-09-08 23:54:21 +02:00
NEZNAMY cd96c13670 Remove unused imports 2023-09-08 23:07:13 +02:00
NEZNAMY 808607faf0 Add try/catch for Fabric loading to send warn on unsupported versions instead of throwing an error (#1068) 2023-09-08 21:30:54 +02:00
NEZNAMY bc403f5c23 Fix ConcurrentModificationException on Velocity 2023-09-08 19:04:00 +02:00
NEZNAMY bfc67e1953 Allow the new anti-override to be disabled with standard settings 2023-09-08 08:21:42 +02:00
NEZNAMY a186c16c34 Implement anti-override for tablist display names on Velocity 2023-09-07 21:37:33 +02:00
NEZNAMY f9be9d4c4b Improve check to reduce errors thrown 2023-09-07 18:09:38 +02:00
NEZNAMY 79fc3ce33f Fix BossBars getting resent when output of placeholder used in display condition changed even if condition result didn't change (#1065) 2023-09-06 21:14:35 +02:00
NEZNAMY 055ff8749e Add support for custom fonts in configuration 2023-09-05 21:38:38 +02:00
NEZNAMY d36410e851 Simplify 2023-09-05 21:32:01 +02:00
NEZNAMY 0fed5dca7f Add font field and conversion to component class and quality of life changes for component conversion 2023-09-05 15:30:42 +02:00
NEZNAMY dd34ffc5b2 Create internal enum for scoreboard display type instead of using a boolean 2023-09-04 21:00:17 +02:00
NEZNAMY 2cd5ac85f9 Simplify 2023-09-04 18:20:17 +02:00
NEZNAMY 571f949f50 Remove unnecessary player version check 2023-09-04 17:58:38 +02:00
NEZNAMY 81e32957b2 Fix startup error 2023-09-04 17:57:20 +02:00
NEZNAMY 4639016ffb Preload NMS GameModes instead of calling Enum#valueOf every time 2023-09-04 17:41:26 +02:00
NEZNAMY dabc2b49dc Remove unused fields and methods 2023-09-03 17:52:29 +02:00
NEZNAMY 2dec389c8c Load NMS method by parameter types instead of name 2023-09-01 11:26:05 +02:00
NEZNAMY bfe5b5960e Fix error in per world playerlist on <1.8 2023-08-31 21:04:36 +02:00
NEZNAMY e352967a17 Improve parse command and fix color-related issues on bukkit 2023-08-31 18:48:04 +02:00
NEZNAMY 930917f285 Fill auto-complete suggestions in plugin's PlaceholderAPI expansion 2023-08-30 21:04:49 +02:00
NEZNAMY b9747f7fbe Fix NPE when user deletes default-refresh-interval option from config (1052) 2023-08-28 13:39:39 +02:00
NEZNAMY 5ac9dcec37 Fix startup on Sponge 7 2023-08-28 13:00:11 +02:00
NEZNAMY 8328b43783 Fix NPE when using relational placeholder with multiple proxies 2023-08-25 22:28:23 +02:00
NEZNAMY 131fcfe144 Remove redundant annotation 2023-08-24 17:36:16 +02:00
NEZNAMY 709cb967b5 Fix plugin sometimes trying to format tablist entries for 1.7 players 2023-08-24 12:16:16 +02:00
NEZNAMY 3370b83087 Fix issue in config conversion 2023-08-24 12:06:04 +02:00
NEZNAMY 5c44bd500c Simplify 2023-08-24 10:05:21 +02:00
NEZNAMY ab8a345944 Small style changes 2023-08-24 09:45:23 +02:00
NEZNAMY 337dd56c87 Simplify 2023-08-24 09:38:54 +02:00
NEZNAMY de78ae30db Copy the previous fix to aligned playerlist as well 2023-08-22 14:29:04 +02:00
NEZNAMY 3f64185389 Fix disable condition not being respected in playerlist in one method (#1037) 2023-08-22 14:23:32 +02:00
NEZNAMY 5077cbbc9a Return empty list instead of new list 2023-08-22 14:01:50 +02:00
NEZNAMY 4d522ba5f5 Improve bossbar command to match scoreboard command features 2023-08-22 13:57:45 +02:00
NEZNAMY 4f1180b3f5 Boost performance of tablist getter on BungeeCord 2023-08-17 17:53:22 +02:00
NEZNAMY 577a3f2551 Add support for Mohist 1.18.2 2023-08-13 17:54:42 +02:00
NEZNAMY 8623ab053e Remove some unnecessary local variables 2023-08-12 20:51:25 +02:00
NEZNAMY 6d0f99eaf1 Change WeakHashMap key to use own player object instead of server's to prevent map getting big when another plugin has a memory leak 2023-08-12 19:04:30 +02:00
NEZNAMY f9490d2652 Move field into local variable 2023-08-12 15:08:15 +02:00
NEZNAMY 9d321e4a31 Remove unused parameter and simplify 2023-08-11 22:12:00 +02:00
NEZNAMY b8c2625b80 Only show placeholder retrieve time message if debug is enabled 2023-08-09 20:22:38 +02:00
NEZNAMY 8e42f328dc Register plugin's PlaceholderAPI expansion automatically without having to enable a config option 2023-08-09 20:13:26 +02:00
NEZNAMY 0c6b4efba5 Simplify 2023-08-09 17:02:25 +02:00
NEZNAMY 0821ed4dae Bukkit - Make NMS loading less dependent on the main NMS class 2023-08-09 17:00:20 +02:00
NEZNAMY 8bc38e25f9 Fix empty line detection sometimes not working 2023-08-07 21:51:43 +02:00
NEZNAMY 7a7a4e6da2 Global playerlist - Do not remove & add self on server switch 2023-08-07 14:04:25 +02:00
NEZNAMY f7d703ed1e Placeholders - Decrease return time warn threshold from 1000ms to 50ms 2023-08-07 13:40:35 +02:00
NEZNAMY 443d7fd082 Merge branch 'master' of https://github.com/NEZNAMY/TAB 2023-08-07 13:38:47 +02:00
NEZNAMY b6114625c1 Remove duplicate check 2023-08-07 12:18:13 +02:00
NEZNAMY 4a3eb78f12 Add back ping spoof feature 2023-08-06 11:32:02 +02:00
NEZNAMY fa117a671a Simplify placeholder registration 2023-08-05 23:04:36 +02:00
NEZNAMY 6448fb975a Fix scoreboard title limit 2023-08-05 14:41:40 +02:00
NEZNAMY 1c685ce0bb Bukkit - Properly play around Bukkit API limits in scoreboard 2023-08-05 14:36:14 +02:00
NEZNAMY 1662fa8d60 Bukkit - Implement scoreboard handler using Bukkit API (still unused) 2023-08-05 13:23:03 +02:00
NEZNAMY 2787b1735b Header/Footer - Fix being sent on server switch even if disable condition is met & fix being sent twice 2023-08-04 22:07:06 +02:00
NEZNAMY e58390e30b Add some missing NotNull / Nullable annotations 2023-08-04 20:43:58 +02:00
NEZNAMY 41a10a61bf Small refactoring 2023-08-03 22:56:05 +02:00
NEZNAMY fdcc7d5e7c Global Playerlist - Add support for * symbol in server-groups 2023-08-01 13:35:06 +02:00
NEZNAMY 50b39e462f Remove unnecessary full manual import 2023-07-28 23:18:49 +02:00
NEZNAMY 4bc781f0da Refresh placeholders in a different thread, so they can no longer kill the plugin 2023-07-28 22:33:33 +02:00
NEZNAMY aca4c00083 Do not refresh placeholders in PlaceholderManager on join, as it can cause error when updating nested placeholder in a feature that's not loaded yet 2023-07-28 17:17:07 +02:00
NEZNAMY 77b820ad4d Do not spawn armor stands of dead players on join (#1005) 2023-07-28 17:02:42 +02:00
NEZNAMY 328f604236 Add pipeline injection for fabric 2023-07-28 17:02:13 +02:00
NEZNAMY 2f77bf3d10 Create a separate class for CPU report 2023-07-28 13:05:04 +02:00
NEZNAMY 23eb55aa06 Add back support for mojang-mapped server jars 2023-07-26 16:19:21 +02:00
NEZNAMY 32b7356bc0 Send console hint if both layout and prevent-spectator-effect are enabled 2023-07-25 18:22:34 +02:00
NEZNAMY 6091641ed9 Add warn if both layout and yellow-number features are enabled 2023-07-25 18:16:01 +02:00
NEZNAMY e368213d18 Add misconfiguration check for scoreboard chaining 2023-07-25 15:17:41 +02:00
NEZNAMY 58f9bb6fca Add unlimited nametag mode to Fabric (with a few missing things) 2023-07-24 22:26:24 +02:00
NEZNAMY 79798199b8 More abstraction of unlimited nametag mode 2023-07-24 20:53:14 +02:00
NEZNAMY c8d20f8479 Move NMS loading of classes 2023-07-24 17:59:17 +02:00
NEZNAMY c0498a60b4 Remove some console messages on startup 2023-07-24 16:46:00 +02:00
NEZNAMY faa01ddfc2 Add back compatibility attempt for nick plugins (#974) 2023-07-23 12:47:16 +02:00
NEZNAMY a2f628e267 Add try/catch for PremiumVanish hook due to its bug (#993) 2023-07-23 11:54:04 +02:00
NEZNAMY 66007b9121 Decrease component cache size to 1000 entries 2023-07-22 01:25:28 +02:00
NEZNAMY 9e0056b603 Improve source code parity between platforms (Sponge 7, Sponge 8 and Fabric) and improvements to Fabric 2023-07-22 01:22:13 +02:00
NEZNAMY b15cc3a6af Improve source code parity between platforms (BungeeCord and Velocity) 2023-07-21 22:33:55 +02:00
NEZNAMY 5393f869e7 Remove option to disable global playerlist latency update. The performance drop is almost zero and updating is actually needed as initial ping value can be invalid ((#990) 2023-07-20 18:05:39 +02:00
NEZNAMY f8088402e8 Make it more obvious that %tps% is a backend-only placeholder (#990) 2023-07-20 17:48:27 +02:00
NEZNAMY 979ff7d2b8 Move %mspt% placeholder registration into backend package 2023-07-19 23:29:07 +02:00
NEZNAMY bdbde58f42 Drop krypton platform as author abandoned it 2023-07-19 21:33:07 +02:00
NEZNAMY 1e26e0bd13 Change backend placeholder registration method 2023-07-19 19:34:36 +02:00
NEZNAMY be3c00d17e Fix colors in error messages 2023-07-16 12:53:46 +02:00
NEZNAMY d542bb67de Add a console warn if anti-override is disabled 2023-07-16 12:09:16 +02:00
NEZNAMY a79cdfaa1c Add a console warn if placeholder used in numeric sorting did not return a valid number 2023-07-16 11:46:07 +02:00
NEZNAMY 42db715421 Fix NPE 2023-07-15 21:16:10 +02:00
NEZNAMY 2228d5a35d Small cleanup 2023-07-15 21:08:18 +02:00
NEZNAMY c434d0eafd Remove component cache from Sponge 7 2023-07-15 21:01:27 +02:00
NEZNAMY 414a3a971f Optimize placeholder high_to_low and low_to_high to only take 3 characters instead of 10 and slightly increase range as well 2023-07-15 18:32:58 +02:00
NEZNAMY b8a22a2561 Fix layout fixed slot updating issue when switching between layouts 2023-07-15 15:06:25 +02:00
NEZNAMY bc1dc2f84f Fix layout skins not working on sponge 8 2023-07-15 14:24:01 +02:00
NEZNAMY 904c4f27aa Add check if a placeholder's refresh interval is configured same as default interval 2023-07-14 16:28:21 +02:00
NEZNAMY b19e5435ef Add check for redundant per-server / per-world overrides for header/footer 2023-07-14 15:45:18 +02:00
NEZNAMY 78fbcd829a Construct player object async 2023-07-14 14:22:56 +02:00
NEZNAMY a255844a92 Create separate methods for logging info/warn and use them 2023-07-14 14:19:22 +02:00
NEZNAMY c7a548c575 Fix placeholders in tablist formatting getting stuck when on bungeecord and joining into disabled server 2023-07-14 11:50:18 +02:00
NEZNAMY 90a4bab114 Fix global playerlist formatting tablist names for players meeting disable condition 2023-07-13 23:47:28 +02:00
NEZNAMY a1633d146a Fix NPE when using relational placeholders on bungeecord 2023-07-12 22:42:21 +02:00
NEZNAMY 87bf4b03df Add misconfiguration checks for bossbar properties 2023-07-12 17:58:17 +02:00
NEZNAMY 7731aea0d6 Create %player_ping% placeholder on bukkit to override the PAPI one and avoid issues like #972 when ping field changes 2023-07-10 21:37:33 +02:00
NEZNAMY e66350111e Make detectPlaceholders method 7x faster when text only consists of 1 placeholder 2023-07-09 22:27:13 +02:00
NEZNAMY 7e5df68626 Round animation change interval instead of decreasing it when invalid value is used 2023-07-09 21:25:10 +02:00
NEZNAMY 8e3e7de4ee Send warn if a placeholder took longer than 1000ms to return value 2023-07-09 18:35:03 +02:00
NEZNAMY 0ee535fbd5 Small code style improvements from PR 2023-07-09 10:45:05 +02:00
NEZNAMY 1b471d266c Merge pull request #970 from TFSMads/master
Added support for different default skins depending on the slot index in the layout feature
2023-07-09 10:38:44 +02:00
NEZNAMY 19a4f6ea1f Merge pull request #971 from misteeka/master
@NotNull marked function actually can return null
2023-07-08 19:10:36 +02:00
misteeka 7cc8d71224 Fix typo 2023-07-08 19:42:30 +03:00
_Mads b843475a0a Remove unnecessary imports and debug message 2023-07-08 15:18:05 +02:00
_Mads 027c0fa771 Added support for different default skins depending on the slot index 2023-07-08 15:09:50 +02:00
NEZNAMY c08e76f110 Fix startup error when refresh intervals are misconfigured (#969) 2023-07-08 12:46:39 +02:00
NEZNAMY b837fe7d15 4.0.4-SNAPSHOT 2023-07-08 12:34:21 +02:00
NEZNAMY d4d1bed408 4.0.3 2023-07-07 22:51:41 +02:00
NEZNAMY 8870295d54 Fix compatibility with bukkit/forge hybrids if they use different mappings 2023-07-07 22:50:32 +02:00
NEZNAMY 79cd6e4ae2 Add null check for messages form bridge (for future updates to avoid NPE / protocol break) 2023-07-07 17:36:44 +02:00
NEZNAMY 8e5ea29c40 Define decimal separator in one more way to make sure it works properly (#967) 2023-07-07 15:25:11 +02:00
NEZNAMY 287b51a0bf Send warn if using debug command on player who is not loaded (#959) 2023-07-06 20:55:16 +02:00
NEZNAMY 28cbf952fa Send warn if both per world playerlist and layout are enabled 2023-07-06 15:12:28 +02:00
NEZNAMY 598c35a3aa Simplify 2023-07-06 12:37:24 +02:00
NEZNAMY b8b67a64ab Simplify nms loading 2023-07-06 12:33:47 +02:00
NEZNAMY 7f6020ef34 Fix loading on catserver 2023-07-06 12:13:12 +02:00
NEZNAMY aeed453e15 Move named field loading to respective classes 2023-07-05 23:41:54 +02:00
NEZNAMY 71dddcca4c Drop support for mojang mapped server jar 2023-07-05 21:49:54 +02:00
NEZNAMY 46cdf79e20 Use all arg constructor for spawn entity packet on 1.17+ (using the wrong packet still spawns the entity) 2023-07-05 21:12:47 +02:00
NEZNAMY d7af96823b Merge pull request #962 from MachineBreaker/patch-1
Fix ViaVersion bug returning -1 version
2023-07-04 23:11:08 +02:00
MachineBreaker 5a228bd6b3 Fix ViaVersion bug returning -1 version
Explanation:

Both TAB and ViaVersion PlayerJoinEvent priority are LOWEST and seems that TAB registers earlier than ViaVersion the listeners, this causes TAB not being able to get the client protocol version due to ViaVersion not being able to register it firstly.

There might be another way to workaround this since i don't know changing the priority would cause any issue with TAB itself.
2023-07-04 16:19:07 -04:00
NEZNAMY fcd95655ce Send warn when trying to use parse command without any placeholders 2023-07-04 11:09:14 +02:00
NEZNAMY 7f5b57f8d2 Merge pull request #956 from Tanguygab/master
Update skins in Layout's FixedSlots
2023-07-03 17:07:01 +02:00
NEZNAMY f596877716 Fix forwarding unlimited nametag disable status to backend 2023-07-02 17:30:58 +02:00
NEZNAMY 1802c8fd90 Fix debug command not showing properties from unlimited nametag as disabled when they are 2023-07-02 17:30:35 +02:00
Tanguygab e05856facc only update name if skin didn't update 2023-07-02 13:51:37 +02:00
Tanguygab 45cfc3abb0 simplified FixedSlot skin updating 2023-07-02 13:40:08 +02:00
Tanguygab 2d39579861 added support for placeholders in layout's fixed-slots' skins 2023-07-02 13:27:37 +02:00
NEZNAMY 431f4bb4d5 Change Velocity policy 2023-07-02 00:39:10 +02:00
NEZNAMY 7bc9d38176 Slightly improve debug messages 2023-07-01 20:15:50 +02:00
NEZNAMY 7536447a8f Update README.md 2023-06-29 20:47:33 +02:00
NEZNAMY 059b796061 Update CONTRIBUTING.md 2023-06-29 20:35:44 +02:00
NEZNAMY a89942484f Layout - Fix duplicate internal names causing issues 2023-06-28 21:03:13 +02:00
NEZNAMY c28be3fd65 Add (another) warn if plugin's CPU usage is high 2023-06-26 21:04:26 +02:00
NEZNAMY 5f1116795c Add Folia support (#919) 2023-06-25 12:11:41 +02:00
NEZNAMY 4f54d2f6b2 4.0.3-SNAPSHOT 2023-06-25 10:59:05 +02:00
NEZNAMY 6b7bedbe2d Fix NPE when placeholder returns null 2023-06-24 14:30:44 +02:00
NEZNAMY 20ff225c31 Add missing set team color 2023-06-23 22:03:32 +02:00
NEZNAMY af2700798e 4.0.2 2023-06-22 13:07:44 +02:00
NEZNAMY f9c280bbdc Add back vault, so people stop asking 2023-06-22 12:50:36 +02:00
NEZNAMY 6ee31c2c3f Fix unlimited nametag property changes on world switch if per-world settings are used 2023-06-22 11:10:21 +02:00
NEZNAMY cbd944f6f2 Remove redundant field initialization 2023-06-19 21:19:48 +02:00
NEZNAMY cc20748f31 Move ping field initialization 2023-06-19 21:16:20 +02:00
NEZNAMY c9545165aa Rename a few classes 2023-06-19 20:38:19 +02:00
NEZNAMY 05c10bf2e7 Move all scoreboard packet fields & methods to PacketScoreboard class 2023-06-19 19:18:53 +02:00
NEZNAMY 67aeae2094 Create scoreboard implementation using paper api (not used yet) 2023-06-19 17:53:20 +02:00
NEZNAMY 1cc85a0647 Add API function for getting player's team name (#939) 2023-06-19 17:29:04 +02:00
NEZNAMY 988c0f8b4c Construct player object sync 2023-06-19 16:34:03 +02:00
NEZNAMY 62306fa5d6 More cleanup using @SneakyThrows annotation 2023-06-19 12:44:06 +02:00
NEZNAMY 641c5a49c3 Remove unused import 2023-06-19 11:12:16 +02:00
NEZNAMY 5637402435 Fix startup on some bukkit versions & improve compatibility error message 2023-06-18 20:54:25 +02:00
NEZNAMY 728d6c9a25 Make compatibility checks slightly more strict and remove package check. 2023-06-17 23:55:20 +02:00
NEZNAMY 22d3ba2877 Remove layout view on quit to avoid permission checks for offline players 2023-06-17 22:26:38 +02:00
NEZNAMY d1e032e010 Rename methods to reflect on recent change 2023-06-17 21:09:58 +02:00
NEZNAMY 80c4316826 Use Player#getPing() instead of NMS for 1.17+ where it was added 2023-06-17 21:01:02 +02:00
NEZNAMY 3addeba256 Bump bridge protocol 2023-06-17 17:43:21 +02:00
NEZNAMY c52db733b7 Fix potential issue with spectator fix not working if joining with spectator gamemode 2023-06-17 17:42:46 +02:00
NEZNAMY 07a492e353 Forward gamemode from bridge for spectator fix to work on online mode bungee (#934) 2023-06-17 17:42:03 +02:00
NEZNAMY 3c1ec478c2 Small code cleanup using lombok 2023-06-17 11:25:42 +02:00
NEZNAMY f3f614c3de Fix spacing 2023-06-16 17:27:50 +02:00
NEZNAMY a6627ac6c6 Merge pull request #933 from Golfing7/master
Fix loading on velocity
2023-06-16 17:26:14 +02:00
Golfing8 8d1040518f Fix loading on velocity 2023-06-16 11:11:20 -04:00
NEZNAMY ca5d17e6ec Merge pull request #930 from NEZNAMY/v4
Merge v4
2023-06-16 09:08:55 +02:00
NEZNAMY b9fab42510 Update supported version range in error message 2023-06-15 17:31:18 +02:00
NEZNAMY 22f1ef43c4 Add missing return to fix error (#927) 2023-06-15 09:44:14 +02:00
NEZNAMY ffbd4bf26b Move bungee component conversion to shared 2023-06-14 17:59:13 +02:00
NEZNAMY 4d6f93e975 Build adventure components with ProtocolVersion for manually defined legacy colors to actually work 2023-06-14 12:23:51 +02:00
NEZNAMY cb45cff77f 4.0.2-SNAPSHOT 2023-06-14 12:22:29 +02:00
NEZNAMY 4718040345 4.0.1 2023-06-13 00:11:20 +02:00
NEZNAMY afffefcce1 1.20.1 2023-06-13 00:11:10 +02:00
NEZNAMY 4580f47563 Fix bungee kick on 1.7 (#921) 2023-06-12 22:41:07 +02:00
NEZNAMY e51f4bb3a1 Remove unused methods 2023-06-12 13:34:30 +02:00
NEZNAMY e8c8d1dee7 Fix TabComplete on Sponge 7 2023-06-11 19:21:54 +02:00
NEZNAMY 3559afaef7 Fix TabComplete on Fabric 2023-06-11 18:26:39 +02:00
NEZNAMY fc29420eb3 Fix TabComplete on Sponge 8+ 2023-06-11 17:09:42 +02:00
NEZNAMY 023cd3fb75 4.0.0 2023-06-08 14:16:19 +02:00
NEZNAMY 2781d9f232 Fix errors when platform doesn't support unlimited nametags, but it's enabled in config 2023-06-08 14:15:34 +02:00
NEZNAMY d31e5de449 Fix NPE 2023-06-08 13:59:36 +02:00
NEZNAMY 245fcdf917 Update to 1.20 2023-06-08 13:50:47 +02:00
NEZNAMY e3ef3ffa68 Refactor scoreboard command and change /tab announce scoreboard to /tab scoreboard announce 2023-06-07 14:04:36 +02:00
NEZNAMY 95c3608c3f Fix typo 2023-06-07 14:03:34 +02:00
NEZNAMY 7c2236dc96 Not ready yet 2023-06-07 14:03:23 +02:00
NEZNAMY b83ef0e352 API - Add functions for force-updating placeholder values 2023-06-06 11:49:49 +02:00
NEZNAMY 2865871d04 Add check for ViaVersion bug returning -1 version 2023-06-06 11:30:42 +02:00
NEZNAMY 7f7b76a11e Fabric - Remove multi version class 2023-05-28 20:30:20 +02:00
NEZNAMY 52569e4c65 Create method in event listener class for replacing player instead of manually creating it in every class 2023-05-28 20:18:06 +02:00
NEZNAMY 0a0ae6c83b Fabric - Replace player object on respawn because it changes 2023-05-28 20:13:40 +02:00
NEZNAMY 6c8a41388e Unlimited NameTags - Fix disable-condition not working properly when set for the main feature 2023-05-28 16:43:52 +02:00
NEZNAMY fe94e33d85 Use PremiumVanish API code directly instead of reflection 2023-05-28 15:40:33 +02:00
NEZNAMY ca1be457cf Remove error message that was never actually sent 2023-05-25 21:20:22 +02:00
NEZNAMY 550b6350ea Change server version info into a method instead of field and provide more info 2023-05-25 13:38:42 +02:00
NEZNAMY 76470c880d Create player object on join async (broke it in a recode) 2023-05-25 12:23:48 +02:00
NEZNAMY a315bd88b3 Fix MySQL 2023-05-24 21:25:05 +02:00
NEZNAMY bb62930525 Simplify permission plugin data structure 2023-05-24 19:05:43 +02:00
NEZNAMY b7490f0002 Rename a few methods and fields 2023-05-24 13:21:56 +02:00
NEZNAMY 42f3851339 API - Small improvements/fixes and more documentation 2023-05-24 12:37:20 +02:00
NEZNAMY 34f39ac8d5 Fix compilation 2023-05-23 13:02:34 +02:00
NEZNAMY 8c16330119 API - Remove getApiVersion method, since everyone should be up-to-date and users are unlikely to check for it anyway 2023-05-23 12:56:33 +02:00
NEZNAMY 8323c21c3e Move ProtocolVersion enum out of API 2023-05-23 12:49:56 +02:00
NEZNAMY 2a3ca932a4 API - Add functions for unregistering placeholders 2023-05-23 12:41:48 +02:00
NEZNAMY e339928caa Conditions - Fix startsWith and endsWith types (how could they even have worked before?) 2023-05-23 12:40:22 +02:00
NEZNAMY 3eeb025f23 Add API for Layout and move team names to a new sorting class 2023-05-22 21:03:28 +02:00
NEZNAMY f19c1f1baa Another way of breaking the plugin was found by a customer 2023-05-20 18:56:17 +02:00
NEZNAMY 003e6a6adb Forward placeholder output replacements to bridge 2023-05-18 12:01:19 +02:00
NEZNAMY 95d435d61c Create field for viewer instead of passing as parameter 2023-05-17 14:25:19 +02:00
NEZNAMY bbc4e1d767 Unlimited nametags - Compensate for new 1.19.4 bug calling sneak event on vehicle leave with value "true", but never calling with "false" (#894) 2023-05-17 14:01:41 +02:00
NEZNAMY ae46adf8b9 Layout - Make layouts per-player, allowing hiding vanished players and opening new possibilities for the future 2023-05-17 13:31:02 +02:00
NEZNAMY 461ef988d3 Make Platform class an interface and make each implementation override sendConsoleMessage 2023-05-16 20:33:57 +02:00
NEZNAMY 307d21cc85 Remove nickname field, since plugin doesn't track name changes anymore 2023-05-16 19:01:51 +02:00
NEZNAMY e2beac6570 A couple of fixes for disable-conditions 2023-05-16 18:48:02 +02:00
NEZNAMY 75e455f078 Replace NonNull annotation with NotNull for internal methods 2023-05-16 12:52:04 +02:00
NEZNAMY 19c832d370 Rename a few classes 2023-05-16 11:34:02 +02:00
NEZNAMY 9cd4afe1d4 Rework disabled worlds/servers into disable conditions 2023-05-16 11:32:37 +02:00
NEZNAMY 3b00f07f78 Unlimited NameTags - Update visibility on vehicle enter/leave instantly (also maybe fix #894?) 2023-05-16 11:25:15 +02:00
NEZNAMY 0b5008c087 Remove unused fields 2023-05-14 21:59:44 +02:00
NEZNAMY 76f210db03 Print console warn if some placeholder's usage exceeds 50% 2023-05-14 17:43:29 +02:00
NEZNAMY 85c8d9f1b9 Bukkit - Add ViaRewind to softdepend to avoid console warn 2023-05-14 17:12:02 +02:00
NEZNAMY a795fc7f77 BossBar - Send console warn if progress could not be evaluated to a number between 0 and 100 2023-05-14 17:10:39 +02:00
NEZNAMY 7742ab8220 Add native support for multi-character symbols for aligned tabsuffix 2023-05-13 13:18:12 +02:00
NEZNAMY 3e235a8f18 Construct packet class with null title instead of empty string for unregister 2023-05-11 23:56:50 +02:00
NEZNAMY 30f9888f6a Split layout loading into multiple methods for better readability 2023-05-11 19:14:58 +02:00
NEZNAMY d1f8886e2b Layout - Add misconfiguration checks 2023-05-11 16:56:01 +02:00
NEZNAMY 3c037f9aa6 Create and use enums for team visibility and collision 2023-05-11 15:16:45 +02:00
NEZNAMY c70346c57c Fix NPE in injection when player is not loaded yet (#891) 2023-05-09 22:16:36 +02:00
NEZNAMY bd40dd85af Global PlayerList - Properly display players on other servers as spectators if enabled (#890) 2023-05-09 16:42:21 +02:00
NEZNAMY eacd929b0f Remove redundant fully qualified name of imported classes 2023-05-04 01:04:31 +02:00
NEZNAMY 0ff5f17b7d Create and use more constants instead of literal strings 2023-05-04 00:57:46 +02:00
NEZNAMY 57fa01151e Move command implementation for platforms into separate classes instead of being a nested class inside main class 2023-05-04 00:29:51 +02:00
NEZNAMY e7bc1fc74b Move sendPlayerListHeaderFooter method from TabPlayer to TabList 2023-04-29 21:32:40 +02:00
NEZNAMY 897f35ab53 Remove BulkUpdateTabList class and make all implementations update entries one by one 2023-04-29 16:32:51 +02:00
NEZNAMY 7f8b738a69 Add more NotNull / NonNull / Nullable annotations to methods 2023-04-29 15:10:30 +02:00
NEZNAMY 079302fb05 Small code cleanup 2023-04-28 23:31:31 +02:00
NEZNAMY 630fcc9e50 Remove underscore from class names 2023-04-27 16:08:20 +02:00
NEZNAMY c1601ca487 Remove nick compatibility hook, as it should no longer be needed 2023-04-27 14:03:47 +02:00
NEZNAMY d035b9cb80 Fix NPE 2023-04-27 13:20:49 +02:00
NEZNAMY 8db5e4d8ba Add NotNull / NonNull / Nullable annotations to fields and methods 2023-04-26 15:33:06 +02:00
NEZNAMY 4d51bb39d7 Print warn if both global playerlist and layout are enabled 2023-04-25 23:19:16 +02:00
NEZNAMY 7eb0231e08 Move floodgate hook into a separate class 2023-04-25 22:57:30 +02:00
NEZNAMY 6412461576 Simplify 2023-04-25 19:46:07 +02:00
NEZNAMY 5732eb366b Remove unused fields and methods 2023-04-25 19:36:03 +02:00
NEZNAMY ed3df8bb68 Recode redisbungee support and fix many bugs 2023-04-25 19:07:13 +02:00
NEZNAMY 787f531203 Remove unused fields 2023-04-25 19:00:57 +02:00
NEZNAMY cf5d888901 Remove unused parameter 2023-04-23 22:08:59 +02:00
NEZNAMY 1969e5f755 Global playerlist - Remove redundant entry removal on server switch (proxy removes it) 2023-04-23 15:57:43 +02:00
NEZNAMY 8d12ee0958 Remove unused import 2023-04-23 15:57:10 +02:00
NEZNAMY c3bbc89c5b Add final modifier where possible 2023-04-23 15:56:57 +02:00
NEZNAMY 625c7cf3c2 Fix issue with legacy color codes 2023-04-23 11:58:35 +02:00
NEZNAMY 14f0321992 Reduce static usage 2023-04-22 22:43:25 +02:00
NEZNAMY e5294c596a Change way of detection for presence of other plugins 2023-04-22 21:04:57 +02:00
NEZNAMY c83290a99a Fix error in RedisBungee 2023-04-22 20:56:48 +02:00
NEZNAMY 8c66310af0 Add RedisBungee support to Velocity as well 2023-04-22 19:17:05 +02:00
NEZNAMY 5ae91bf89e Update config comment (global playerlist will no longer duplicate players if this issue occurs) 2023-04-22 13:44:13 +02:00
NEZNAMY d5dc1b7bdb Simplify 2023-04-22 13:39:12 +02:00
NEZNAMY 864eee3349 Spectator Fix - Resend on server switch 2023-04-22 13:32:43 +02:00
NEZNAMY 88932e3a5e Move bungee component conversion out of shared to avoid class not found error 2023-04-20 21:59:04 +02:00
NEZNAMY 4ebc60ff00 Print original error instead of the current one 2023-04-20 21:43:05 +02:00
NEZNAMY b0cb63b05d Remove weird code in error printing 2023-04-20 21:19:08 +02:00
NEZNAMY 1db40ee2d5 Fix layout loading 2023-04-19 21:20:50 +02:00
NEZNAMY fd3f0ebd21 Move classes into packages 2023-04-19 11:46:22 +02:00
NEZNAMY ce73069345 Remove hover/click event from chat components 2023-04-18 13:54:06 +02:00
NEZNAMY 088f2748e3 Print amount of startup warns into the console 2023-04-17 20:39:35 +02:00
NEZNAMY d9a8c69f43 Refactor ViaVersion hook and drop ProtocolSupport hook as the plugin is abandoned 2023-04-17 19:23:54 +02:00
NEZNAMY 16ff503b6a Add back task queue while plugin is loading 2023-04-17 18:20:54 +02:00
NEZNAMY 68c78b9c73 Make field public 2023-04-17 18:04:17 +02:00
NEZNAMY 0c9d78a644 Fix method name 2023-04-15 18:59:54 +02:00
NEZNAMY 99d22642e2 Scoreboard - Fix placeholders not being updated in title on scoreboard switch 2023-04-15 15:22:02 +02:00
NEZNAMY dc762eacf8 Fill all fields in plugin.yml 2023-04-13 20:47:01 +02:00
NEZNAMY 5a44f30140 Reorder permission constants 2023-04-13 20:37:53 +02:00
NEZNAMY 82e86b0f8a Fix NPE on reload 2023-04-13 18:02:21 +02:00
NEZNAMY 9c4eb4359c Document empty methods 2023-04-12 21:53:32 +02:00
NEZNAMY 827c380463 Move more reflection related methods to ReflectionUtils 2023-04-12 21:50:01 +02:00
NEZNAMY 7c4fc324c8 Simplify 2023-04-12 21:18:29 +02:00
NEZNAMY 46215f3304 Fix indentation 2023-04-12 21:15:16 +02:00
NEZNAMY 1accc21365 Avoid possible NPE 2023-04-12 21:11:29 +02:00
NEZNAMY b74c2f62f7 Replace star import with explicit imports 2023-04-12 21:08:38 +02:00
NEZNAMY 9d14c0c923 Resend header/footer on server switch because velocity clears it 2023-04-12 16:17:12 +02:00
NEZNAMY 650fda5781 Reorder class loading to make it cleaner 2023-04-11 16:43:40 +02:00
NEZNAMY 286ccf5836 Reorder class loading to make it cleaner 2023-04-10 19:08:54 +02:00
NEZNAMY dfa310666c Move reflection related methods to ReflectionUtils 2023-04-10 19:02:35 +02:00
NEZNAMY 06595241ab Remove plugins from softdepend which are no longer being hooked into 2023-04-10 18:38:57 +02:00
NEZNAMY 0f80dd1cfd Simplify 2023-04-10 18:33:02 +02:00
NEZNAMY 7bc5be264c Define dependencies directly instead of using versions file 2023-04-10 16:23:44 +02:00
NEZNAMY e31784fb1e Include initial task delay to prevent errors while plugin is still loading 2023-04-10 13:15:14 +02:00
NEZNAMY ae156f424b Move layout to config.yml 2023-04-10 13:11:41 +02:00
NEZNAMY cfe0b3883e Remove deleted placeholder from default configuration 2023-04-10 12:49:54 +02:00
NEZNAMY fc6beaa0a5 Add removing of removed config option to converter 2023-04-10 12:45:11 +02:00
NEZNAMY 5f2140b147 Make placeholder output replacements no longer require splitting config section with each "." used in placeholder 2023-04-10 12:43:28 +02:00
NEZNAMY c497bdff39 Swap condition registration order for proper detection of type 2023-04-10 12:22:16 +02:00
NEZNAMY 7c84b6432e Simplify condition classes (or maybe just make them more complicated?) 2023-04-10 01:21:14 +02:00
NEZNAMY 3f787c3b0b Create separate Platform class for consistency 2023-04-10 00:00:32 +02:00
NEZNAMY 2046a39e99 Simplify 2023-04-09 23:42:32 +02:00
NEZNAMY 2ccf89e396 Further simplify Fabric code changes for older server versions 2023-04-08 22:45:43 +02:00
NEZNAMY efaebc3cb0 Simplify code changes for older versions on Fabric 2023-04-08 17:03:56 +02:00
NEZNAMY d7c952cc36 Fix placeholders from bridge not updating if player is not loaded yet when response is sent 2023-04-08 15:19:56 +02:00
NEZNAMY 1d3ea37129 Prevent bridge form re-registering placeholders that got deleted from config 2023-04-08 15:06:58 +02:00
NEZNAMY 1e9c47398d Add bridge connection status to debug command 2023-04-08 14:43:05 +02:00
NEZNAMY 5a1f48f1a5 Apparently it cannot be null 2023-04-08 14:25:03 +02:00
NEZNAMY ed65554d30 Remove duplication in player/playeruuid/group commands 2023-04-07 22:36:35 +02:00
NEZNAMY 0f19970401 Clean up ChatModifier serialization 2023-04-07 22:04:57 +02:00
NEZNAMY b419499710 Remove unnecessary fully qualified name 2023-04-07 21:58:38 +02:00
NEZNAMY 14a5f30b74 Split method for processing plugin messages into multiple 2023-04-07 21:48:38 +02:00
NEZNAMY 302cdf200f Small refactor of classes implemented by platforms 2023-04-07 21:32:15 +02:00
NEZNAMY bdde257cac Remove unused fields 2023-04-07 13:01:25 +02:00
NEZNAMY 73af013bca Change usage of methods which didn't exist before on fabric 2023-04-06 18:26:26 +02:00
Callum Seabrook e421427007 Disabled access widener validation task for Fabric 2023-04-06 16:17:51 +01:00
NEZNAMY 169a180d68 Remove unused imports 2023-04-06 16:28:28 +02:00
Callum Seabrook 16a19bf578 Switched to access wideners for player info entries on Fabric 2023-04-06 14:29:43 +01:00
Callum Seabrook 5b39204a8a Cleaned up Krypton code 2023-04-06 13:54:54 +01:00
Callum Seabrook b2bb125248 Switched Krypton tab list to API and removed server dependency 2023-04-06 13:35:08 +01:00
NEZNAMY 980354104b Remove fabric constant that is only used once 2023-04-06 00:18:15 +02:00
NEZNAMY b27571dcaa Catch UnsupportedOperationException 2023-04-05 22:27:44 +02:00
NEZNAMY b215bf9000 Fix dumb mistake 2023-04-05 21:10:04 +02:00
NEZNAMY ab75b13b3f Add option to choose target minecraft version on Fabric all the way down to 1.17 2023-04-05 20:42:51 +02:00
Callum Seabrook 31cd2aeb08 Made getFeature generic and removed casts 2023-04-05 19:18:39 +01:00
Callum Seabrook 8b6b33b314 Fixed compile 2023-04-05 18:40:10 +01:00
Callum Seabrook 1b66257ece Removed chat session from ProxyTabPlayer 2023-04-05 18:30:52 +01:00
Callum Seabrook bed9fcf212 Show new blank scoreboard to joining players on Krypton 2023-04-05 18:22:01 +01:00
Callum Seabrook 692f309750 Switched to API instead of packets for Krypton scoreboard 2023-04-05 16:30:19 +01:00
Callum Seabrook 2c9c9b502a Renamed Main to KryptonTAB for consistency 2023-04-05 15:48:50 +01:00
Callum Seabrook 3da8fd2a77 Fixed failed startup without Spark present on Krypton 2023-04-05 15:45:56 +01:00
Callum Seabrook ba6826f3d1 Added variable to change target Minecraft version for Fabric 2023-04-05 12:19:59 +01:00
Callum Seabrook 68b3629437 Added permissions API support for Fabric 2023-04-05 12:08:32 +01:00
Callum Seabrook 8bc5962d1c Use reflection for changing player info entries 2023-04-05 11:55:25 +01:00
NEZNAMY b8aa1982e4 Improve ViaVersion check on Fabric 2023-04-05 00:57:35 +02:00
NEZNAMY e0a427732e Update README.md 2023-04-04 23:25:38 +02:00
NEZNAMY 8d1f60f5fa Fix github actions 2023-04-04 23:16:15 +02:00
NEZNAMY 5cd7fdf385 Small improvements and fixes to fabric 2023-04-04 23:14:51 +02:00
Callum Seabrook e54d342ac5 Made relocations have a consistent pattern 2023-04-04 21:30:52 +01:00
Callum Seabrook 9019261c2a Fabric support 2023-04-04 21:27:55 +01:00
Callum Seabrook b1a5092053 Added Adventure-based boss bar handler for platforms using Adventure 2023-04-04 20:11:27 +01:00
NEZNAMY ef8bdbb40f Spectator fix - Add delay on join to avoid being too early 2023-04-04 21:08:19 +02:00
Callum Seabrook 0d67826b3d Removed message component cache on Bukkit 2023-04-04 19:34:24 +01:00
NEZNAMY 6c99e28d51 Improve code style in Scoreboard class 2023-04-04 17:21:38 +02:00
NEZNAMY 13931aafa5 Rethrow exceptions as IllegalStateException instead of RuntimeException 2023-04-04 17:01:17 +02:00
NEZNAMY 089e7ce8b5 Move class out of package 2023-04-04 15:52:01 +02:00
NEZNAMY 54287c8a29 Fix color getter 2023-04-04 15:41:18 +02:00
NEZNAMY 5ebc5dee21 Make gamemode change detection a periodic task instead of listening to packets 2023-04-04 15:29:34 +02:00
NEZNAMY bedbdbcca9 Remove redundant interface class 2023-04-04 14:44:37 +02:00
NEZNAMY a1c35adf4c Convert to adventure components directly instead of deserializing string 2023-04-04 14:34:56 +02:00
NEZNAMY 81b6a9be8b Remove redundant component deserialization attempts 2023-04-04 13:50:21 +02:00
Callum Seabrook 88eee58329 Moved chat system out of API 2023-04-02 22:49:15 +01:00
Callum Seabrook 2f02a5bda4 Removed unlimited nametags from Krypton 2023-04-02 21:11:05 +01:00
Callum Seabrook ba716df634 Removed unlimited nametags from Sponge 8 2023-04-02 20:12:30 +01:00
NEZNAMY 988292b82a XD 2023-04-02 16:30:06 +02:00
Callum Seabrook d52cfdd6e6 Start of Fabric 2023-04-02 13:55:38 +01:00
Callum Seabrook b13a49539f Updated to Gradle 8 2023-04-02 13:47:37 +01:00
NEZNAMY 32a39a361c Improve marking vanish placeholder as used for features listening to vanish status change 2023-04-02 13:46:20 +02:00
NEZNAMY 0e2e9b9ae6 Fix playerlist formatting not updating on unvanish 2023-04-02 13:41:14 +02:00
NEZNAMY 331faefde2 Fix compilation 2023-04-02 12:57:46 +02:00
NEZNAMY 1603ebe9fc Remove unused parameter 2023-04-02 12:43:15 +02:00
NEZNAMY bad4359469 Remove usage of separated initializers 2023-04-02 12:17:16 +02:00
NEZNAMY a860b463ed Merge ifs 2023-04-02 12:13:01 +02:00
NEZNAMY b3b0a96bb8 Remove commented out code that will never come back 2023-04-02 12:11:20 +02:00
NEZNAMY c211724d13 RedisBungee - Don't send yellow number / belowname if feature is disabled (#861) 2023-04-02 12:02:01 +02:00
NEZNAMY 0fb9a832ca Fix raw generic use 2023-04-02 00:34:42 +02:00
NEZNAMY 7ce1a97c93 Remove player from map on quit 2023-04-02 00:10:33 +02:00
NEZNAMY 1d461c1adf Make Scoreboard class generic to avoid massive casting 2023-04-02 00:02:31 +02:00
NEZNAMY 5ec09c37bc Remove things from API which shouldn't be there 2023-04-01 22:10:11 +02:00
NEZNAMY 95a20766c3 Simplify redisbungee belowname/yellow number forwarding 2023-04-01 17:41:25 +02:00
NEZNAMY 87feb1c2bf Improve misconfiguration checks and management 2023-04-01 17:33:34 +02:00
NEZNAMY 8c732ac7e9 Use defined constant instead of literal string 2023-04-01 13:01:26 +02:00
NEZNAMY 977c1f4d74 Remove unused field 2023-04-01 12:46:04 +02:00
NEZNAMY 65ac22aadb Perform scoreboard objective & team re-registration on server switch instead of listening to Login packet, which is assumed to be sent always 2023-04-01 12:37:02 +02:00
NEZNAMY 8e7a14bdb8 PlayerList - Format players after they un-vanish 2023-04-01 12:07:19 +02:00
NEZNAMY 4693a297b6 Remove unused field 2023-04-01 01:41:03 +02:00
NEZNAMY af69dcd9b5 Add this branch to github actions 2023-04-01 01:20:56 +02:00
NEZNAMY 71110fc722 Remove redundant conversion from older versions 2023-04-01 01:16:50 +02:00
NEZNAMY c2af5632a2 Remove hidden ghost player fix feature 2023-04-01 01:13:21 +02:00
NEZNAMY 399e813ca4 Remove placeholder refresh intervals categories to reduce confusion, split them in code based on identifier 2023-04-01 01:10:05 +02:00
NEZNAMY daac7c6171 Rename config conversion methods 2023-04-01 00:52:30 +02:00
NEZNAMY 940352ef2c Replace null checks with @NonNull 2023-04-01 00:47:21 +02:00
NEZNAMY c70b909c0f Remove disabled worlds/servers from bossbar and scoreboard, since conditions can achieve the same 2023-04-01 00:43:36 +02:00
NEZNAMY dcc2eb9217 Remove vault hook, vault placeholders and %afk% placeholder 2023-04-01 00:34:12 +02:00
NEZNAMY 5425b3b6ea Finish previous commit and remove pet fix feature 2023-04-01 00:17:48 +02:00
NEZNAMY a90ea3e3fa Remove ping spoof feature 2023-04-01 00:03:21 +02:00
NEZNAMY 6d52b7b615 4.0.0-SNAPSHOT 2023-04-01 00:01:43 +02:00
NEZNAMY 51635a7322 3.3.2 2023-03-31 20:44:09 +02:00
NEZNAMY 481b33ba55 Print error message if plugin message could not be sent 2023-03-31 15:30:30 +02:00
NEZNAMY 22c785fc99 Add error message when plugin message could not be processed 2023-03-31 15:21:53 +02:00
NEZNAMY 42d4159b69 Global PlayerList - Register placeholders in constructor to avoid it being registered as PAPI placeholder 2023-03-31 14:41:21 +02:00
NEZNAMY 6d95a2f06d Fix error on concurrent access 2023-03-31 13:40:50 +02:00
NEZNAMY 7f0b1d8a2e Fix rare error on /btab reload 2023-03-31 13:40:37 +02:00
NEZNAMY a3fecd0fea Unregister tab expansion on unload to fix compatibility with latest PAPI release 2023-03-30 21:17:09 +02:00
NEZNAMY f3d6a54a2a Merge remote-tracking branch 'origin/master' 2023-03-29 17:24:21 +02:00
NEZNAMY 1d434f2557 Add more documentation 2023-03-29 17:24:11 +02:00
NEZNAMY b3500086e4 Merge pull request #856 from zelvalea/master
optimizations in CPUManager
2023-03-28 23:23:48 +02:00
Amoeba bf9202af38 added time constants 2023-03-28 20:31:29 +03:00
Amoeba bd2c683568 fixed happens before and cpu usage statistics 2023-03-28 20:09:51 +03:00
Amoeba c03feaab23 fixed nanosToPercent 2023-03-28 19:44:11 +03:00
Amoeba 9cb9ccbd2a optimize 2023-03-28 19:21:48 +03:00
Callum Seabrook 4606ebd588 Use single thread for tasks and remove ThreadManager from API 2023-03-28 12:32:13 +01:00
Callum Seabrook 679be83c5a Merge pull request #854 from zelvalea/master 2023-03-28 11:51:03 +01:00
NEZNAMY afe868bb95 Fix group update through bridge after recoding group updating 2023-03-28 01:21:29 +02:00
ZelvaLea c9ce3aa23e reduced number of threads in the pool, fixed races 2023-03-28 01:15:04 +03:00
NEZNAMY 11a49c4874 Remove unnecessary full import 2023-03-27 21:21:27 +02:00
NEZNAMY 65d2a0fba9 Remove unused field 2023-03-27 21:19:15 +02:00
NEZNAMY c1219195c7 Remove workarounds for fixing compilation, which are no longer needed 2023-03-26 17:06:57 +02:00
NEZNAMY fca0dfc91b More constant extraction to plugin.yml & bungee.yml 2023-03-26 17:02:32 +02:00
NEZNAMY 7f1cc3063c Move text cutting to 16/32 characters to avoid duplication 2023-03-26 16:53:47 +02:00
NEZNAMY e444c25287 Convert krypton to java 2023-03-26 16:36:51 +02:00
NEZNAMY 476354e407 Change thrown exception 2023-03-25 23:25:07 +01:00
NEZNAMY 9f84d3f22f Remove cpu measurement of chosen methods 2023-03-25 23:22:28 +01:00
NEZNAMY 4608ff360c Simplify 2023-03-25 23:12:48 +01:00
NEZNAMY 68b12e199d Placeholders - Measure per-placeholder cpu usage on join as well 2023-03-25 20:54:53 +01:00
NEZNAMY 4b1151f769 Use defined value instead of duplicating it in build settings 2023-03-25 20:25:27 +01:00
NEZNAMY 6687214f2a Sponge - Add support all the way down to Sponge 5 2023-03-25 19:22:07 +01:00
NEZNAMY a57757258e Sponge - Use API for scoreboards instead of packets (also small bug fix) 2023-03-25 18:41:56 +01:00
NEZNAMY 3a6060c45d Fix display name change on 1.7 2023-03-25 14:29:27 +01:00
NEZNAMY ee375c1b60 Unify tablist management between proxies 2023-03-25 14:22:40 +01:00
NEZNAMY c9d870cca0 Use placeholder refreshing engine for refreshing player groups instead of creating another thread 2023-03-23 14:52:19 +01:00
NEZNAMY 3ad8015cc1 Placeholder manager - Initialize task with the lowest refresh interval immediately instead of re-initializing 2023-03-23 14:19:42 +01:00
NEZNAMY 33609c322f Remove duplicated Field#setAccessible 2023-03-22 00:59:02 +01:00
NEZNAMY 431b89c487 Create constant for "textures" String in skin data 2023-03-22 00:33:16 +01:00
NEZNAMY 35a146992c Remove redundant checks and simplify 2023-03-22 00:27:46 +01:00
NEZNAMY dedee114c4 BungeeCord - Split boss bar handler into 2 classes 2023-03-21 20:07:11 +01:00
NEZNAMY 9d42af0388 Bukkit - Split boss bar handler into 3 classes 2023-03-21 18:39:08 +01:00
NEZNAMY 8f5d81bc33 Remove redundant annotation 2023-03-21 18:38:41 +01:00
NEZNAMY b17f5563dd Remove unused method 2023-03-21 14:09:57 +01:00
NEZNAMY 0ab8bb363a Unlimited NameTags - Force marker tag for 1.8.x and remove config option 2023-03-20 22:33:56 +01:00
NEZNAMY ac5fca86bd Split TabFeature into multiple interfaces based on used methods 2023-03-20 19:36:40 +01:00
NEZNAMY 28c2c2e193 Fix armor stand metadata on spawn 2023-03-20 16:25:37 +01:00
NEZNAMY 904c0b6a17 Fix anti-override for tablist name formatting (and possibly ping spoof & spectator fix) 2023-03-20 16:21:23 +01:00
NEZNAMY f3c31bc92c Fix error 2023-03-20 12:42:42 +01:00
NEZNAMY 6016b84889 BungeeCord - Fix bossbar color & style update 2023-03-19 22:24:13 +01:00
NEZNAMY cfb5cb3a9f Create object for calling bossbar methods 2023-03-19 22:07:45 +01:00
NEZNAMY 1746f6b1d0 Bukkit - Send all tablist packets grouped, ViaVersion splits them properly for 1.7 players 2023-03-19 21:21:33 +01:00
NEZNAMY 9c3979a0d9 More tablist fixes on 1.7 2023-03-19 21:04:52 +01:00
NEZNAMY 810676c69f Bukkit - Fix NPE on <1.8 servers 2023-03-19 16:44:55 +01:00
NEZNAMY d0892a245a BungeeCord - Fix NPE kick on 1.7 2023-03-19 16:40:53 +01:00
NEZNAMY f539b1b93b BungeeCord - Split TabList class into 3 based on version & make 1.7 actually work (potential future use?) 2023-03-19 14:50:02 +01:00
NEZNAMY adfa64a29f Scoreboard - Fix unregistering teams of lines that aren't displayed due to placeholder output being empty 2023-03-19 14:07:44 +01:00
NEZNAMY d4f86ee79d Remove redundant declaration 2023-03-19 13:43:06 +01:00
NEZNAMY 6ebe31b737 Add @NonNull / @Nullable annotations to TeamManager (#843) 2023-03-19 13:38:58 +01:00
NEZNAMY dcbd5e62d4 Fix packet un-cancel breaking PetFix (#842) 2023-03-19 13:26:24 +01:00
NEZNAMY a7e6e49363 Fix #845 (1.7 requires non-null title in scoreboard unregister action) 2023-03-19 12:52:56 +01:00
NEZNAMY d115257ff7 Move DisplaySlot class inside Scoreboard 2023-03-18 23:53:49 +01:00
NEZNAMY d578be276c Remove duplicated caches 2023-03-18 22:35:16 +01:00
NEZNAMY e338f57441 Completely get rid of PacketBuilder class 2023-03-18 22:25:05 +01:00
Callum Seabrook c87321b5b0 Rewrote packet injection for Krypton 2023-03-18 19:37:34 +00:00
NEZNAMY 84bb9b449b Add methods for manipulating entities instead of using sendPacket 2023-03-18 19:22:29 +01:00
NEZNAMY 9d613fc24d Rework tablist packet management to make it more API-style 2023-03-18 17:44:43 +01:00
NEZNAMY 3f2ae3131e Add back a default animation, which is still used in default scoreboard 2023-03-18 00:14:56 +01:00
NEZNAMY 0e9f53bd58 Fix wrong action on objective unregister 2023-03-17 18:20:47 +01:00
NEZNAMY 3981815b63 Create Scoreboard interface for calling scoreboard-related methods 2023-03-17 15:04:55 +01:00
NEZNAMY 3ef99e4e7c Better abstraction of pipeline injection 2023-03-16 15:16:24 +01:00
NEZNAMY 76767a0958 Use API-style managing of scoreboard teams 2023-03-16 13:53:50 +01:00
NEZNAMY 1683943d58 Use API-style managing of scoreboard objectives 2023-03-16 01:07:21 +01:00
NEZNAMY cc0dbe8623 Move sendPluginMessage method to ProxyTabPlayer 2023-03-16 00:03:13 +01:00
NEZNAMY b056251e07 Remove calculating of packets sent by the plugin 2023-03-15 23:50:23 +01:00
NEZNAMY 3b352c66e2 Change way how scoreboard score and display objective packets are sent 2023-03-15 23:31:30 +01:00
NEZNAMY b4f0ea73c1 Supplier with Exception is Callable 2023-03-15 21:43:27 +01:00
NEZNAMY 1c683788b5 BungeeCord - Create cleaner methods for player info action conversion 2023-03-15 21:29:58 +01:00
NEZNAMY 250597df2d Sponge 8 - Fix class cast exception 2023-03-15 21:07:20 +01:00
NEZNAMY 0d2d1d5aaa Sponge 8 - Use direct code instead of reflection for entity teleport packet 2023-03-15 21:00:42 +01:00
NEZNAMY 061375d1e7 3.3.2-SNAPSHOT 2023-03-15 21:00:14 +01:00
NEZNAMY 5b05614305 Remove unused field 2023-03-15 20:13:29 +01:00
NEZNAMY 69db2e0e53 Use API style code for bossbars since packets were not used anymore 2023-03-15 20:03:10 +01:00
NEZNAMY 00ef364324 Use APIs for header/footer instead of packets where possible (rip bukkit) 2023-03-15 16:13:31 +01:00
NEZNAMY de68312b6b Use APIs for chat messages instead of packets 2023-03-15 14:36:25 +01:00
NEZNAMY ddac08bcbc Fix bungee compilation (did md5 break something?) 2023-03-15 14:31:59 +01:00
NEZNAMY 517e285bb3 Fix bossbar error on <1.9 from recode 2023-03-15 14:29:13 +01:00
NEZNAMY 81a08a6b51 3.3.1 2023-03-14 19:18:01 +01:00
NEZNAMY 4dfef1d032 1.19.4 support 2023-03-14 19:15:15 +01:00
NEZNAMY 5d38e28cae Extract more constants and add config option 2023-03-14 18:35:25 +01:00
NEZNAMY 66a12d10c4 Layout - Resend on server switch on Velocity 2023-03-14 17:27:27 +01:00
NEZNAMY 1a4027c8d5 Remove unused fields and methods 2023-03-14 16:15:55 +01:00
NEZNAMY 2a0243c51a RedisSupport - Add missing packet source 2023-03-14 15:24:13 +01:00
NEZNAMY 4851d09e70 More abstraction of unlimited nametag mode & packets it uses 2023-03-14 15:20:49 +01:00
NEZNAMY 3cdf3accfd Remove redundant checks 2023-03-14 10:46:27 +01:00
NEZNAMY fd1f094216 Layout - Small cleanup in code 2023-03-14 00:22:02 +01:00
NEZNAMY 25ece1ecb8 Move ViaVersion hook (and remove safety checks, hopefully it works correctly now) 2023-03-13 23:31:10 +01:00
NEZNAMY 802e65c280 Change constructor fields to getters in features 2023-03-13 23:04:22 +01:00
NEZNAMY 882688f056 Layout - Cache remove packet 2023-03-13 21:52:29 +01:00
NEZNAMY 97d60d0ab3 Bungee - Remove unused field (and simplify) 2023-03-13 21:33:48 +01:00
NEZNAMY 9ef99daed1 Revert feature loading as references were not null when they were supposed to be 2023-03-13 21:31:48 +01:00
NEZNAMY 71c85d9d39 NameTags - Speed up unloading 2023-03-13 19:36:05 +01:00
NEZNAMY b981ab46be Add debug messages about feature unloading times 2023-03-13 19:35:45 +01:00
NEZNAMY 016633e494 BelowName - Speed up reloads by caching values for players (tested with 100 bots, reloads were 2x faster) 2023-03-13 19:22:00 +01:00
NEZNAMY 1db862ab56 NameTags - Speed up reloading (tested with 100 bots, reload was 3x faster) 2023-03-13 19:15:45 +01:00
NEZNAMY 3563786310 PlayerList - Drastically speed up reloads (up to 10+ times with high player counts) 2023-03-13 19:01:26 +01:00
NEZNAMY ac8851dd6a Cache EnumSets for info packet for better performance 2023-03-13 18:22:16 +01:00
NEZNAMY 53ab2d9793 Commands - Do not load widths for widthcheck command unless command is used 2023-03-13 18:03:55 +01:00
NEZNAMY 2a58c86ffc Move code from initializer to load 2023-03-13 16:35:30 +01:00
NEZNAMY fa46d527ae Spectator Fix - Don't send useless packets on load/unload 2023-03-13 15:17:13 +01:00
NEZNAMY 667bd38305 Velocity - Fix Velocity being Velocity exception 2023-03-13 14:51:52 +01:00
NEZNAMY faba439466 Global PlayerList - Send all affected entries in a single packet, reducing amount of packets sent and improving performance 2023-03-13 14:47:29 +01:00
NEZNAMY c301157758 Global PlayerList - No longer delay task on quit as I was not able to reproduce the bug; Update placeholders periodically as they didn't update properly on vanish change anyway 2023-03-13 14:14:06 +01:00
NEZNAMY 8d09d425a4 Global PlayerList - No longer prevent other sources from removing players, better organize adding on server switch as well 2023-03-13 13:26:12 +01:00
NEZNAMY 11f03d5a10 Simplify 2023-03-13 12:58:19 +01:00
NEZNAMY 83625202a1 Merge pull request #841 from NEZNAMY/better-pipeline-injection
Better pipeline injection
2023-03-12 14:39:19 +01:00
Callum Seabrook eb4b715a88 Move pipeline injection to its own package 2023-03-12 13:35:47 +00:00
Callum Seabrook 89dce941cf Add RequiredArgsConstructor to NettyPipelineInjector 2023-03-12 13:31:58 +00:00
Callum Seabrook 6371b67e9e Removed player Channel and moved Netty injection to NettyPipelineInjector 2023-03-12 13:23:16 +00:00
NEZNAMY 966e27418a Bukkit - Attempt to fix error on ArrayList#remove 2023-03-11 15:35:31 +01:00
NEZNAMY 4adf7d1734 Bukkit - Fix NoSuchElementException that doesn't make sense 2023-03-11 15:25:06 +01:00
NEZNAMY 1a4c4a6fe8 Add more debug messages about feature loading times 2023-03-11 15:14:12 +01:00
NEZNAMY 7ff36592ae Do not re-initialize ErrorManager 2023-03-11 14:27:23 +01:00
NEZNAMY 1b513412d2 Remove redundant import 2023-03-10 13:20:14 +01:00
NEZNAMY f2bb43fbcd Make tabExpansion variable not null and add default empty implementation 2023-03-10 13:16:22 +01:00
NEZNAMY df5d07d885 Include forgotten code from previous commit 2023-03-10 13:13:21 +01:00
NEZNAMY 0ad2f33c4c Further clean up feature loading and mutual hooks 2023-03-10 12:45:28 +01:00
NEZNAMY dee48fccb3 Partially de-spaghetti feature loading and mutual hooking 2023-03-09 00:13:15 +01:00
NEZNAMY 9ca372ab13 Velocity is XD 2023-03-07 23:07:26 +01:00
NEZNAMY 58a849a902 Update README.md 2023-03-06 18:15:04 +01:00
NEZNAMY 895072ec35 Update README.md 2023-03-06 18:07:14 +01:00
NEZNAMY 2b2c4d2c39 Update README.md 2023-03-06 12:03:45 +01:00
NEZNAMY d534b6e2e8 Layout - Make fixed slots take priority over player groups if a slot is used in both 2023-03-05 15:31:14 +01:00
NEZNAMY 783e9d9931 Fix wrong values in widths.txt 2023-03-02 21:06:15 +01:00
NEZNAMY a109d9b55b Enable widthcheck command and fix error in it 2023-03-02 20:54:28 +01:00
NEZNAMY 5ce59ce44f Fix compilation 2023-03-02 20:33:37 +01:00
NEZNAMY 1e9195a9bc Velocity - Add try/catch for calling new methods on old versions 2023-03-01 18:49:41 +01:00
NEZNAMY 3099d16468 Create SECURITY.md 2023-03-01 12:23:39 +01:00
NEZNAMY c9c6af346c Add new issue templates 2023-03-01 12:18:23 +01:00
NEZNAMY af80a43628 Catch Throwable in pipeline instead of Exception to reduce chance of plugin causing player disconnect in future unsupported versions 2023-02-28 23:33:31 +01:00
NEZNAMY dc3c98ec91 Bukkit - Change how ViaVersion is detected (to avoid wrong detection due to a plugin order load bug in 1.17.1) 2023-02-25 18:41:25 +01:00
NEZNAMY dffa2c83f6 Typo 2023-02-24 23:45:40 +01:00
NEZNAMY dc66f253a7 Config converter - Remove placeholder that got deleted 2023-02-24 23:42:35 +01:00
NEZNAMY 17498cbfc2 BungeeCord - Fix bytebuf deserialization from previous commits 2023-02-24 23:15:01 +01:00
NEZNAMY 96e4d30168 Include 1.5 in supported version range 2023-02-24 16:48:56 +01:00
NEZNAMY c9d1934bb9 Use lombok for empty private constructor 2023-02-24 16:33:39 +01:00
NEZNAMY 8bec083194 Remove redundant duplicated checks 2023-02-24 16:30:34 +01:00
NEZNAMY abf047be23 Fix global playerlist class being instantiated twice 2023-02-24 16:22:02 +01:00
NEZNAMY 4a95399d56 3.3.1-SNAPSHOT 2023-02-24 16:19:01 +01:00
NEZNAMY 885bf5154e NameTags - Fix updating nametag visibility of players in disabled world/server 2023-02-24 15:43:58 +01:00
NEZNAMY 3e146fc496 Simplify 2023-02-24 15:41:30 +01:00
NEZNAMY 95710bcaf5 Sorting - Fix team name change registering teams for players in disabled worlds/servers 2023-02-24 15:37:40 +01:00
NEZNAMY edd620f17d BelowName - Fix text refreshing packets being sent to players in disabled worlds/servers 2023-02-24 15:25:09 +01:00
NEZNAMY 9c466d8b1e Update comment 2023-02-24 14:57:56 +01:00
NEZNAMY b385ab70fb Simplify 2023-02-24 14:52:22 +01:00
NEZNAMY 140224840b Remove double registration of sorting feature 2023-02-23 21:24:10 +01:00
NEZNAMY 2078cd5a5f Downgrade sponge API dependencies to confirm support 2023-02-21 18:46:43 +01:00
NEZNAMY 27bae7fdbd 3.3.0 2023-02-21 17:03:39 +01:00
NEZNAMY 174b4214de Bukkit - Fix error from previous commits 2023-02-21 13:52:21 +01:00
NEZNAMY 4ac524840c Remove non-existing branch from build.yml 2023-02-20 20:42:48 +01:00
NEZNAMY dd4ce4e2c3 Remove redundant library (gson) 2023-02-20 17:34:38 +01:00
NEZNAMY 2a03d69628 Add @SuppressWarnings annotation to a method 2023-02-20 17:33:44 +01:00
NEZNAMY c28252e6ce RGB - Fix redundant color codes in conversion to legacy, causing issues with limits (#827) 2023-02-20 17:02:20 +01:00
NEZNAMY da1768d833 Further code cleanup 2023-02-20 16:43:49 +01:00
NEZNAMY b58c3e6b47 Fix typos 2023-02-20 12:11:58 +01:00
NEZNAMY c7575bdc8f Remove redundant throws and empty method 2023-02-20 12:00:01 +01:00
NEZNAMY e275d22061 Bukkit - Fix startup on <1.8 2023-02-20 00:35:50 +01:00
NEZNAMY b5600ef22a Fix merge conflict 2023-02-20 00:29:05 +01:00
NEZNAMY b8e14c9256 Merge branch 'master' of https://github.com/NEZNAMY/TAB
 Conflicts:
	krypton/src/main/kotlin/me/neznamy/tab/platforms/krypton/KryptonPlaceholderRegistry.kt
2023-02-19 23:58:11 +01:00
NEZNAMY 1af5b9a308 Bukkit - Further split NMS loading and packet creation 2023-02-19 23:58:01 +01:00
Callum Seabrook 2dd719c3a5 Added Spark placeholder support back to Krypton 2023-02-19 21:08:04 +00:00
NEZNAMY 45d94694cd Bukkit - Split NMS fields and initialization into multiple classes 2023-02-19 21:15:10 +01:00
NEZNAMY 3ce8c6a192 Code style - Extract duplicated code 2023-02-19 17:41:06 +01:00
NEZNAMY 7deb86f105 Fix typo 2023-02-19 17:28:25 +01:00
NEZNAMY d9b4f6a43f Bukkit - Move data watcher serializer initialization 2023-02-19 17:15:58 +01:00
NEZNAMY 54a7fb8721 Code style - Extract duplicated code for permission plugin detection 2023-02-19 16:08:02 +01:00
NEZNAMY d1dcb2f437 Merge remote-tracking branch 'origin/master' 2023-02-18 17:35:03 +01:00
NEZNAMY a92bab617a Unlimited nametags - Fix error caused by wrong method being called 2023-02-18 17:34:52 +01:00
Callum Seabrook 57e34bc595 Updated to latest Krypton and added TAB prefix to console 2023-02-15 23:58:25 +00:00
Callum Seabrook 953baa273c Build Krypton targeting Java 8 2023-02-15 20:23:39 +00:00
NEZNAMY c403cb3187 Fix startup after recode 2023-02-15 21:03:19 +01:00
NEZNAMY ffd6dc5bb9 Disable krypton compilation to fix Sponge 7 startup (due to a Sponge 7 bug) 2023-02-15 20:53:06 +01:00
NEZNAMY 0f6504a3dc Remove unused local variable 2023-02-15 20:28:55 +01:00
NEZNAMY f376fea598 Formatting 2023-02-15 20:26:50 +01:00
NEZNAMY 4896cdff91 Further extend lombok usage 2023-02-15 19:17:29 +01:00
NEZNAMY b4c87431bc Scoreboard - Fix placeholders rarely not refreshing in title 2023-02-15 19:16:29 +01:00
NEZNAMY 1cffbab97d Remove plugin message text from /tab cpu due to being impossible to read 2023-02-15 15:14:30 +01:00
NEZNAMY 9b0711075a Code style - Use constants in more places 2023-02-15 15:06:15 +01:00
NEZNAMY 17a8e902eb Velocity - Use data folder given by the platform instead of manually defining it 2023-02-15 15:01:16 +01:00
Callum Seabrook 4bdb5ba245 Use more constants for plugin info 2023-02-15 12:16:48 +00:00
NEZNAMY fd7748d280 Merge remote-tracking branch 'origin/master' 2023-02-15 12:51:36 +01:00
NEZNAMY 317b0292ff Fix error on sponge (and redundancy on bukkit) 2023-02-15 12:51:19 +01:00
Callum Seabrook b87be649bc Made ARMOR_STAND_ID constant and removed packet builder singleton for Sponge 2023-02-15 11:51:09 +00:00
Callum Seabrook e2dda54011 Added sneaking support for unlimited nametags Sponge 2023-02-15 11:43:05 +00:00
NEZNAMY d17518c39b Sponge7 - Fix broken scoreboards 2023-02-14 23:19:33 +01:00
NEZNAMY 48541dd0bd Placeholders - Fix NPE 2023-02-14 22:29:28 +01:00
NEZNAMY b83b023fee Sponge8 - Add ViaVersion hook 2023-02-14 22:29:13 +01:00
NEZNAMY 60e0c78033 Add Sponge7 module 2023-02-14 22:28:32 +01:00
NEZNAMY a395f7f01f Unlimited NameTags - Fix entity type detection from previous commits 2023-02-14 18:46:17 +01:00
NEZNAMY 09c36ef69e Relocate yamlassist as well 2023-02-14 18:28:45 +01:00
NEZNAMY 9d5fa685a0 Rename folder as well 2023-02-14 18:25:08 +01:00
NEZNAMY 6794f593fa Rename sponge module to sponge8 2023-02-14 17:39:41 +01:00
NEZNAMY 5e9965276f Code style - Change how packet builder is initialized in Platform class 2023-02-14 16:54:58 +01:00
NEZNAMY 1473038955 Code style - Fix redundant imports, throws, extract constants, grammar 2023-02-14 16:39:21 +01:00
Callum Seabrook 2041ca57f3 Finished Sponge support 2023-02-14 14:38:09 +00:00
NEZNAMY 098782d820 3.3.0-SNAPSHOT 2023-02-14 12:53:10 +01:00
NEZNAMY 87e9a6defd 3.2.5 2023-02-13 16:40:36 +01:00
NEZNAMY 3d896ff828 More abstraction of unlimited nametag mode (also a small fix from previous commit) 2023-02-13 14:25:38 +01:00
NEZNAMY bf93240888 Unlimited NameTags - Make armor stands visible for spectators (#785) 2023-02-13 13:57:49 +01:00
NEZNAMY 0b0e30c3c9 Disable sponge module until compilation is fixed 2023-02-13 12:54:05 +01:00
NEZNAMY 84d3816bd1 Fix NPE 2023-02-12 12:51:37 +01:00
NEZNAMY 04ff606947 Merge branch 'master' of https://github.com/NEZNAMY/TAB 2023-02-12 12:29:06 +01:00
NEZNAMY 1cb8e6e238 Almost finish Sponge 8 2023-02-12 12:29:01 +01:00
NEZNAMY 4a2226170d Merge pull request #819 from Tanguygab/master
added support for *server or *world (just like server* and world*)
2023-02-12 12:27:03 +01:00
Tanguygab 1469124cfc added support for *server or *world (just like server* and world*) 2023-02-12 11:41:11 +01:00
NEZNAMY 0826095e73 Merge branch 'master' of https://github.com/NEZNAMY/TAB 2023-02-11 15:34:05 +01:00
NEZNAMY 1bd698adde Code style - Create custom cache object to avoid code duplication 2023-02-11 14:33:31 +00:00
Callum Seabrook 1058d269ff Start of rewrite of Sponge for v8 over v7 2023-02-11 14:13:05 +00:00
NEZNAMY bacd87b78e Code style - Create custom cache object to avoid code duplication 2023-02-11 13:08:20 +01:00
Callum Seabrook 5befbe8780 Updated Sponge platform 2023-02-10 23:11:38 +00:00
Callum Seabrook e159b2adae Finished Sponge implementation (mostly) 2023-02-10 23:08:21 +00:00
Callum Seabrook 52f7418853 The start of Sponge 2023-02-10 23:08:21 +00:00
Callum Seabrook 76061f7ccd Set up Sponge skeleton project 2023-02-10 23:08:21 +00:00
NEZNAMY 7d39e21eae Fix mistake after recode 2023-02-11 00:07:10 +01:00
NEZNAMY fee3723474 Code style - More abstraction of features and feature loading 2023-02-10 23:06:52 +01:00
NEZNAMY 2f0e4c6888 Merge remote-tracking branch 'origin/master' 2023-02-10 12:58:49 +01:00
NEZNAMY b04cb6d3c5 Config converter - Reverse old config detection (#762) 2023-02-10 12:58:07 +01:00
Callum Seabrook a9228a698a Fixed NPE being thrown when player info data name is null for Krypton 2023-02-09 16:18:13 +00:00
NEZNAMY 27102495d8 Code style - Use lombok in more locations 2023-02-08 00:49:48 +01:00
NEZNAMY d1bf96ab33 Code style - Use lombok for getters/setters 2023-02-07 23:14:02 +01:00
NEZNAMY 3360dbb468 Update README.md 2023-02-07 20:21:14 +01:00
NEZNAMY d224e7584e Create CONTRIBUTING.md 2023-02-07 20:20:31 +01:00
Callum Seabrook 6373540076 Updated Krypton platform and removed Indra 2023-02-07 16:56:58 +00:00
NEZNAMY 5f78aca997 Hide proxy-only methods into proxy player object 2023-02-07 15:33:24 +01:00
NEZNAMY 145d944d33 Bukkit - Remove unused (and incorrectly implemented) code 2023-02-07 15:26:01 +01:00
NEZNAMY ac91940e3b Velocity - Send packet using wanted player uuid instead of random if entry does not exist (apparently it goes through even if not registered) 2023-01-31 21:36:26 +01:00
NEZNAMY ef8452be73 Code style - Simplify BungeeCord info packet read/write based on client version 2023-01-31 18:23:24 +01:00
NEZNAMY 47e0810697 Placeholders - Remove %essentialsnick% placeholder due to being pretty redundant (keeping empty implementation so users don't get it suddenly broken) 2023-01-31 17:11:45 +01:00
NEZNAMY 1f30f225c7 Code style - Use reflection for PremiumVanish API instead of direct code with dependencies 2023-01-31 16:17:33 +01:00
NEZNAMY fcbfd60ddb Code style - Call method directly when command sender is console 2023-01-31 15:55:28 +01:00
NEZNAMY 46f9033713 Code style - Add final modifier to variable 2023-01-31 15:54:48 +01:00
NEZNAMY 7e65018a0e Velocity - Switch to non-deprecated method 2023-01-31 15:51:28 +01:00
NEZNAMY 9ef3485968 Code style - Create a method for convenience to avoid duplicated code 2023-01-27 15:52:38 +01:00
NEZNAMY 257f8f1145 Commands - Remove properly length from debug output 2023-01-27 15:24:26 +01:00
NEZNAMY 8d65cbb0e5 3.2.5-SNAPSHOT 2023-01-26 10:35:08 +01:00
NEZNAMY 20d221e3ca Merge pull request #806 from NotAlexNoyle/proposal
Propose adopting open source license
2023-01-25 12:17:56 +01:00
NEZNAMY 94072acf10 3.2.4 2023-01-25 10:39:44 +01:00
NEZNAMY 0422cc2597 Update issue templates 2023-01-24 14:00:13 +01:00
NEZNAMY 58f61e645b 3.2.4-SNAPSHOT 2023-01-24 10:45:11 +01:00
NEZNAMY 5f416bd9e5 Unlimited NameTags - Avoid Bukkit API NPE (#800, #804) 2023-01-24 10:44:35 +01:00
NotAlexNoyle 64528c913c Propose adopting open source license 2023-01-23 22:33:21 -05:00
NEZNAMY 357e7c6a49 Revert "Remove redundant try/catch"
This reverts commit 1777d8bf01.
2023-01-23 14:39:54 +01:00
NEZNAMY 81dd202053 3.2.3 2023-01-21 14:58:34 +01:00
NEZNAMY 189797aa73 Bukkit - Use the other constructor for player info packet which is cleaner (also #797) 2023-01-21 00:18:19 +01:00
NEZNAMY 1ae2ef7cad Fix compilation 2023-01-21 00:17:02 +01:00
NEZNAMY de14e14d33 Revert "Placeholders - Add timeout for placeholders to return value, causing TAB to freeze"
This reverts commit 37caed3123.
2023-01-19 22:30:09 +01:00
NEZNAMY 19892c14c1 Revert "Placeholders - Increase placeholder retrieve timeout to 500ms (#792)"
This reverts commit 6d85875fde.
2023-01-19 22:29:59 +01:00
NEZNAMY 2e00c4c002 Revert "NameTags - Fix error that doesn't make sense (#794)"
This reverts commit 12f5dd52b4.
2023-01-19 22:29:52 +01:00
NEZNAMY 97aa367629 Revert "Fix thread pool not being single threaded (maybe #781?)"
This reverts commit 87cc9a030b.
2023-01-19 22:28:22 +01:00
NEZNAMY 87cc9a030b Fix thread pool not being single threaded (maybe #781?) 2023-01-19 22:01:11 +01:00
NEZNAMY 8ba83d1cb1 BossBar - Fix errors when progress is below 0 or above 100 2023-01-19 16:59:05 +01:00
NEZNAMY 9f0e60bd47 Per world PlayerList - Remove redundant task schedule to main thread 2023-01-19 16:58:45 +01:00
NEZNAMY 93b2a25b2e Merge pull request #795 from Chris6ix/update-actions
Update Actions
2023-01-17 22:01:37 +01:00
Chris 4242d7a839 Remove Test Build Trigger 2023-01-17 21:33:33 +01:00
Chris 0ddb99bd46 Trigger Test Build 2023-01-17 21:29:34 +01:00
Chris 969672e3ad Update Actions 2023-01-17 21:26:40 +01:00
NEZNAMY 2423fbb150 Update README.md 2023-01-17 20:28:47 +01:00
NEZNAMY a99928dbf5 Placeholders - Colorize output of relational placeholders as well 2023-01-17 20:25:06 +01:00
NEZNAMY 12f5dd52b4 NameTags - Fix error that doesn't make sense (#794) 2023-01-17 15:38:20 +01:00
NEZNAMY 2bd105446e Bukkit - Properly send RGB messages into console (only for Paper+, Spigot doesn't support RGB at all) 2023-01-17 14:11:51 +01:00
NEZNAMY 6d85875fde Placeholders - Increase placeholder retrieve timeout to 500ms (#792) 2023-01-16 18:49:23 +01:00
NEZNAMY 42810aa490 3.2.3-SNAPSHOT 2023-01-16 18:47:42 +01:00
NEZNAMY bd31521bd3 3.2.2 2023-01-15 12:02:05 +01:00
NEZNAMY ec0deb8378 Yellow Number - Disable the feature for Bedrock players 2023-01-12 21:57:56 +01:00
NEZNAMY ae66b6e9a1 RGB - Fix MiniMessage->Bukkit conversion being after Bukkit->TAB, making it not translate anymore 2023-01-12 14:55:41 +01:00
NEZNAMY 3b86becebd Header/Footer - Do not add &r after \n anymore 2023-01-12 14:53:38 +01:00
NEZNAMY 4a8d86825b Configuration - Small changes to default configuration files 2023-01-10 18:56:34 +01:00
NEZNAMY 54a3bd81b4 Global PlayerList - Increase player removal prevention delay to 2000ms from 500ms 2023-01-10 16:49:16 +01:00
NEZNAMY b6768cca99 CPU manager - Add try/catch for task scheduling (#781) 2023-01-10 16:48:28 +01:00
NEZNAMY 60c414deed Bukkit - Remove redundant methods in nms loader 2023-01-05 16:48:16 +01:00
NEZNAMY 009283a83f Update README.md 2023-01-05 16:04:38 +01:00
Callum Seabrook 4a430b97df Merge pull request #779 from JT122406/master
Updates
2023-01-04 22:50:08 +00:00
NEZNAMY 722333da2e Fix RejectedExecutionException (#769) 2023-01-04 19:15:56 +01:00
NEZNAMY 1215af5262 Bukkit - Add 1.5.0 support 2023-01-04 18:28:24 +01:00
NEZNAMY 254088c37b Bukkit - Repackage nms loaders (also fix startup on Thermos) 2023-01-04 18:14:39 +01:00
J.T. McQuiggandCallum Seabrook cb2ce4acca Update gradle/libs.versions.toml
Co-authored-by: Callum Seabrook <callum.seabrook@prevarinite.com>
2023-01-04 11:20:55 -05:00
J.T.McQuigg 872adca8fd Updates 2023-01-03 23:09:35 -05:00
J.T.McQuigg f37cc0bdd8 Gradle 7.6 2023-01-03 23:02:04 -05:00
NEZNAMY 4063578ac3 Code style - Remove duplicate .toLowerCase() 2023-01-02 20:45:23 +01:00
NEZNAMY 2528de7eeb Code style - Use built-in String#trim function 2023-01-02 20:25:11 +01:00
NEZNAMY 37caed3123 Placeholders - Add timeout for placeholders to return value, causing TAB to freeze 2022-12-23 14:49:31 +01:00
NEZNAMY 27fe9dfb12 Commands - Make player command update player instantly if uuid is used instead of player name 2022-12-21 22:00:58 +01:00
NEZNAMY 0169cbd4d2 Bukkit - Fix wrong method taken sometimes, causing player kick with unlimited nametag mode 2022-12-20 15:08:18 +01:00
NEZNAMY ed760aec08 Aligned PlayerList - Fix rare error that makes no sense 2022-12-20 15:04:48 +01:00
NEZNAMY 858cbcefeb Code style - Add toString override 2022-12-20 15:04:21 +01:00
NEZNAMY 8a87d581a9 Scoreboard - Do not send packets to players who cannot see that specific scoreboard 2022-12-18 17:16:26 +01:00
NEZNAMY 6d642f4e51 NameTags - Fix players getting unregistered with wrong team name 2022-12-17 19:12:00 +01:00
NEZNAMY aca63640bc Attempt to fix rare NPE 2022-12-17 19:08:32 +01:00
NEZNAMY 1845a35315 3.2.2-SNAPSHOT 2022-12-16 22:25:39 +01:00
NEZNAMY cab5f89a95 Remove redundant check 2022-12-16 22:03:21 +01:00
NEZNAMY 1777d8bf01 Remove redundant try/catch 2022-12-16 21:14:47 +01:00
NEZNAMY 91b0bfaa9d Configuration - Simplify file copying, since default files already are encoded with UTF-8 encoding 2022-12-16 15:04:52 +01:00
NEZNAMY f1cf994d10 3.2.1 2022-12-16 11:27:48 +01:00
NEZNAMY 69957be933 Pet name fix - Fix excessive CPU usage caused by heavy operation and not caching the result 2022-12-15 00:22:23 +01:00
NEZNAMY b78eb5efb6 Bukkit - Remove forgotten debug stack trace printing 2022-12-15 00:21:28 +01:00
NEZNAMY 3577ad1964 Bukkit - Fix NPE in packet creation on <1.13 (#763) 2022-12-14 18:02:04 +01:00
NEZNAMY 4510491177 3.2.0 2022-12-12 09:46:21 +01:00
NEZNAMY 01b3a12377 1.19.3 support 2022-12-12 09:46:12 +01:00
NEZNAMY 64ae9863fb Bukkit - Drop old event API system 2022-12-10 12:27:51 +01:00
NEZNAMY ecd315a407 Sorting - Fix error from previous commit (.toLowerCase made string longer) 2022-12-08 11:20:58 +01:00
NEZNAMY 678eed288e Conditions - Add OR type for anonymous conditions using "|" symbol 2022-12-06 10:32:41 +01:00
NEZNAMY 9510455cb1 Conditions - Fix anonymous conditions not updating from previous commit 2022-12-06 10:31:29 +01:00
NEZNAMY e925ce23d0 Conditions - Fix nested conditions not working if they are defined below the condition using them 2022-12-06 09:51:16 +01:00
NEZNAMY c68cad6a1e Global PlayerList - Fix feature breaking nick/skin changes (minecraft mechanic changed in 1.19) (#752) 2022-12-06 09:50:00 +01:00
NEZNAMY 01d6eda4fb Configuration - Use luckperms placeholders instead of vault in default configuration (and make them return empty value if LP is not found) 2022-12-04 14:19:21 +01:00
NEZNAMY 73e7119bbc Configuration - add hidden server-name option for %server% value (useful with MySQL) 2022-12-04 11:49:59 +01:00
NEZNAMY cea781382a Sorting - Fix wrong team name being unregistered (#727) 2022-12-03 21:18:38 +01:00
NEZNAMY cf25b84e86 Commands - Fix debug command showing sorting is disabled even if layout is enabled for sorting 2022-12-03 21:16:29 +01:00
NEZNAMY 86e1d22390 Sorting - Only use 1 character for sorting by groups, permissions and predefined values; Improve debug output of sorting results 2022-12-03 12:16:38 +01:00
NEZNAMY 1625be111f Global PlayerList - Make server names in server groups and spy-servers not case-sensitive 2022-12-02 23:18:40 +01:00
NEZNAMY 00cda3b2aa Placeholders - Load all used placeholders on join in placeholder manager to make cpu usage appear under that "feature" instead of a feature actually using the placeholders 2022-12-01 22:46:40 +01:00
NEZNAMY 85a00a4436 Code style - Extract minimum placeholder refresh interval into an editable constant 2022-12-01 22:36:33 +01:00
NEZNAMY 37aec1a497 Global PlayerList - Add %playerlist-group_<group>% placeholder for online count in each group 2022-12-01 22:32:43 +01:00
NEZNAMY ef637616ee Placeholders - Improve error message 2022-11-27 17:13:24 +01:00
NEZNAMY af3b5067fb BossBar - Ignore players in disabled worlds/servers in announce command (#748) 2022-11-25 11:23:48 +01:00
NEZNAMY 53e5b15f96 Tab Expansion - Fix error in nested placeholder parsing 2022-11-24 11:01:55 +01:00
NEZNAMY 6a3afae607 Implement empty method 2022-11-16 12:24:03 +01:00
NEZNAMY 2e05c7d9d1 Another attempt for #727 2022-11-15 19:15:49 +01:00
NEZNAMY fb698a04b7 Configuration - Merge default config.yml files into one 2022-11-12 19:11:36 +01:00
NEZNAMY 52bdf30ddb Merge remote-tracking branch 'origin/master' 2022-11-09 22:34:22 +01:00
NEZNAMY a92f07aa40 Tab Expansion - Resend values to bridge on server switch (#740) 2022-11-09 22:34:09 +01:00
NEZNAMY 003ff7f99d Merge pull request #739 from CoachYT1/patch-1
bump org.yaml:snakeyaml to 1.33
2022-11-09 21:59:08 +01:00
NEZNAMY 47b9806ae7 Tab Expansion - Parse nested placeholders in replace function 2022-11-07 22:26:17 +01:00
CoachYT d2a7c65e08 bump org.yaml:snakeyaml to 1.33
snakeyaml 1.30 is affected by 5 vulnerabilities and should be upgraded to the latest version
2022-11-07 17:53:24 +01:00
NEZNAMY e232336a5f Add check for modifying non-existing teams (#727) 2022-11-06 22:42:23 +01:00
NEZNAMY 8816c75212 BungeeCord - Fix crash on 1.7 caused by unregistering non-existing objectives (login packet cleared them) (#727) 2022-11-04 13:31:34 +01:00
NEZNAMY f9d54751ba Fix rare ConcurrentModificationException 2022-11-04 12:53:00 +01:00
NEZNAMY 43d41ee761 BungeeCord - Improve unsupported BungeeCord build message 2022-11-01 17:55:43 +01:00
NEZNAMY 4512ba8d5e NameTags - Print a console warn if both unlimited nametags and invisible nametags are enabled 2022-10-30 17:56:00 +01:00
NEZNAMY 8b55bca564 Remove redundant variable 2022-10-30 13:40:32 +01:00
NEZNAMY d8d54970d3 Code style - Clean up vanish check code 2022-10-30 13:29:45 +01:00
NEZNAMY 15ea4482f9 Bukkit - Drop direct Essentials hook for vanishing as it supports metadata 2022-10-30 13:27:24 +01:00
NEZNAMY 87f9f38eac Update issue templates 2022-10-29 18:35:11 +02:00
NEZNAMY dba559f041 Layout - Fix startup error caused by invalid number as slot 2022-10-29 12:17:04 +02:00
NEZNAMY c610b6f323 PlayerList - Fix name applying on server switch when pipeline injection is disabled 2022-10-26 17:36:08 +02:00
NEZNAMY a5fb900e19 API - Add back TabPlayer#getTeamName() 2022-10-24 14:05:39 +02:00
NEZNAMY 09d6e455f5 Layout - Implement a fix for compatibility with plugins which add empty player name into their 2022-10-21 19:55:59 +02:00
NEZNAMY e68097b0f4 Layout - Fix startup error if slots is a single number instead of interval 2022-10-16 15:32:26 +02:00
NEZNAMY 0744fed953 Merge branch 'master' of https://github.com/NEZNAMY/TAB 2022-10-16 14:40:42 +02:00
NEZNAMY de0adf4067 MySQL - Attempt to fix startup error (#717) 2022-10-16 13:12:54 +02:00
NEZNAMY 76bf2b3efc Update links in README 2022-10-16 13:11:56 +02:00
NEZNAMY c089badeb4 Configuration - Remove owner and admin settings from default configuration 2022-10-15 19:15:38 +02:00
NEZNAMY b3b99d366a Placeholders - Fix relational placeholders updating causing normal placeholders to not refresh 2022-10-14 19:28:05 +02:00
NEZNAMY 4a36486f65 Bukkit - Fix startup on 1.8 2022-10-08 12:41:05 +02:00
NEZNAMY 75126d00d9 BossBar - Fix countdown placeholder not activating on usage in PlaceholderAPI 2022-10-06 16:43:06 +02:00
NEZNAMY 17ebf95d5b BossBar - Fix announcement bars disappearing on refresh 2022-10-06 16:42:32 +02:00
NEZNAMY c764420cfe Code Style - Simplify field value assignment 2022-10-06 15:33:50 +02:00
Callum Seabrook 28f05fc2af Changed publishing artifact IDs to begin with "tab-" 2022-10-06 12:02:28 +01:00
Callum Seabrook a420892887 Fixed publishing ID 2022-10-06 11:54:06 +01:00
NEZNAMY d910dc5913 Header / Footer - Prioritize world over server in config.yml as well 2022-10-06 11:11:00 +02:00
NEZNAMY c9c1cbc349 Layout - Fix anti-override for playerlist names being disabled even when no layout is visible 2022-09-26 11:02:14 +02:00
NEZNAMY fd4704f75e 3.1.5 2022-09-20 15:46:28 +02:00
NEZNAMY 5400ca637f Global PlayerList - Do not fill display name for 1.7 players 2022-09-19 18:23:16 +02:00
NEZNAMY 79d2610117 Global PlayerList - Fix server switch when pipeline injection is disabled 2022-09-17 18:38:06 +02:00
NEZNAMY 6a51f4cb9d BungeeCord - Fix 1.7 players not being processed fully on server switch (reapplying scoreboards) 2022-09-13 18:33:52 +02:00
NEZNAMY c190776665 Scoreboard - Fix show command enabling scoreboard for players who disabled it using toggle command 2022-09-13 18:32:54 +02:00
NEZNAMY 3765a1232e Merge pull request #697 from JT122406/master
Updates and Velocity Deprecation Fix
2022-08-27 19:48:00 +02:00
J.T. McQuigg 28866eba21 More Updates and Build Fix 2022-08-27 13:07:28 -04:00
J.T. McQuigg 08adee3dc3 Recomment this out for PR 2022-08-27 11:57:34 -04:00
J.T. McQuigg 8a1adaf2cd More Updates 2022-08-27 11:57:08 -04:00
J.T. McQuigg fdb9accaa6 Updates and don't use Deprecation in Velocity module 2022-08-27 11:42:15 -04:00
NEZNAMY 4f7656748b Merge pull request #695 from Tanguygab/master
added StartWith `|-` and EndsWith `-|` condition types
2022-08-25 22:25:48 +02:00
Tanguygab 03e4495ac7 added |- and -| conditions 2022-08-25 15:15:21 +02:00
NEZNAMY 01af5cb9e1 Placeholders - Fix nested placeholders not being applied when updating from nested?!! (#694) 2022-08-24 16:52:01 +02:00
NEZNAMY 8d49f32df2 Code style - Change the way API instance is set 2022-08-22 20:30:16 +02:00
NEZNAMY 8a955b3bc8 Javadoc - Further improve documentation 2022-08-22 20:27:20 +02:00
NEZNAMY ead40cb413 Merge pull request #691 from Tanguygab/master
Commands - Added target and -s arguments for /tab nametag preview/toggle (#690)
2022-08-22 16:22:32 +02:00
Tanguygab 5e07f78d4f updated messages.yml 2022-08-22 16:20:43 +02:00
Tanguygab c7d98795bc Revert "* for all players in /tab scoreboard show"
This reverts commit e4f33b58f7.
2022-08-22 16:13:46 +02:00
Tanguygab 9f637e3d6a added target and -s arguments for /tab nametag preview/toggle 2022-08-22 16:09:23 +02:00
Tanguygab 2d5f074c78 Merge remote-tracking branch 'upstream/master' 2022-08-22 15:35:23 +02:00
NEZNAMY 3be6ba484d API - Fix show_item hover event on 1.16+ 2022-08-18 22:36:43 +02:00
NEZNAMY d9d74e7a32 Placeholders - Fix NPE in %essentialsnick% event listener due to Essentials bug (#684) 2022-08-18 12:46:54 +02:00
NEZNAMY 887306a5ed Bukkit - Include 1.19.2 in supported version range 2022-08-16 01:25:15 +02:00
NEZNAMY 4b2542eb4f Global Playerlist - Add config option to disable (and enable) profile key filling (#680) 2022-08-15 13:28:56 +02:00
NEZNAMY 66bd3baa3e Layout - Add config option to show vanished players in layout 2022-08-14 15:41:19 +02:00
NEZNAMY bf32004f8f Layout - Do not format original entries in any way (can cause spaces) 2022-08-13 17:50:28 +02:00
NEZNAMY bfb2df9c95 Commands - Show storage type in debug output 2022-08-13 17:44:46 +02:00
Callum Seabrook ddeb05e408 Merge pull request #662 from JT122406/Updates
Update Gradle Wrapper to 7.5
2022-08-12 16:58:38 +01:00
Callum Seabrook 9312d61258 Fix some more BS 2022-08-12 16:49:30 +01:00
Callum Seabrook d44909bc42 Fixed some BS 2022-08-12 16:41:26 +01:00
Callum Seabrook 1d77df335c Switched to Indra for publishing and improved code reuse in build scripts 2022-08-12 16:29:12 +01:00
NEZNAMY a268dc25f4 BungeeCord - Use direct code for proxy module again 2022-08-12 15:46:14 +02:00
NEZNAMY 8c5696faa0 Bukkit - Register universal placeholders after bukkit ones to fix reference issue with nested placeholders 2022-08-12 15:05:40 +02:00
NEZNAMY 94f3ccfb7d Javadoc - Further improve documentation 2022-08-12 15:04:49 +02:00
NEZNAMY 576329214d Add 1.19.2 to known versions 2022-08-11 17:57:49 +02:00
NEZNAMY 5c13c2e225 Velocity - Remove join processing delay since the required delay is already included elsewhere 2022-08-11 17:49:42 +02:00
NEZNAMY 1070f85617 Placeholders - Retry updateValue if player is not loaded yet (might fix #564) 2022-08-11 17:48:26 +02:00
NEZNAMY 7c9dc87fcb NameTags - Make canSeeFriendlyInvisibles flag configurable 2022-08-09 14:12:14 +02:00
NEZNAMY 363e58bf91 API - Expose another method 2022-08-04 17:06:30 +02:00
NEZNAMY daca3f5b71 3.1.4 2022-08-04 15:43:53 +02:00
NEZNAMY a7d2ec084b Use profile key in player info packet (#673) 2022-08-03 12:57:48 +02:00
NEZNAMY 167f8cd0ff BungeeCord - Remove Waterfall tablist rewrite hook since the option doesn't work as I expected 2022-08-03 11:14:10 +02:00
NEZNAMY 170307f45f Catch everything 2022-07-29 15:49:59 +02:00
NEZNAMY 2f36377780 Revert "Placeholder output replacements - Apply again after applying nested placeholders"
This reverts commit 2706cd5881.
2022-07-29 12:48:13 +02:00
NEZNAMY 48c565d85d 3.1.3 2022-07-28 17:59:15 +02:00
NEZNAMY 86b3cc4044 Sorting - Fix startup error caused by misconfiguration (#664) 2022-07-28 11:40:42 +02:00
NEZNAMY 6a2d5091b8 Bukkit - Add 1.19.1 support 2022-07-28 11:30:34 +02:00
J.T. McQuigg dc09e77190 Update Gradle Wrapper to 7.5 2022-07-26 17:16:56 -04:00
NEZNAMY 4fc139c0c6 Remove synchronized lock from sendCustomPacket method 2022-07-26 21:57:36 +02:00
NEZNAMY e5d800f469 API - Expose a few more methods 2022-07-26 21:56:16 +02:00
NEZNAMY 4879ac28b5 PingSpoof - Add Layout compatibility 2022-07-25 15:34:33 +02:00
NEZNAMY bd0badab48 Feature management - Don't deserialize objective packets if no feature is listening to them 2022-07-24 21:20:55 +02:00
NEZNAMY 5575a26d3b Placeholders - Use event instead of refresh task for %essentialsnick% placeholder 2022-07-24 20:27:43 +02:00
NEZNAMY d8cbe96949 BossBar - Fix issues with hidden-by-default enabled 2022-07-24 17:55:04 +02:00
NEZNAMY cfb506a7ff BossBar - Make Wither's size (nearly) zero on 1.8 (#654) 2022-07-24 13:28:18 +02:00
Tanguygab d5b0ff7f40 Merge remote-tracking branch 'upstream/master' 2022-07-24 13:11:11 +02:00
NEZNAMY 31d259210c Bukkit - Add support for mojang mapped jars 2022-07-21 12:56:23 +02:00
NEZNAMY 39112b8d41 Tab expansion - Add %tab_nametag_visibility% and rename %tab_ntpreview% to %tab_nametag_preview% 2022-07-20 00:14:38 +02:00
NEZNAMY 4c92286ebb Thread management - Increase max thread pool size to 20 2022-07-19 14:02:44 +02:00
NEZNAMY a317aeba85 Plugin message handling - Fix ClassCastException when a placeholder is externally registered as a server placeholder 2022-07-19 13:30:32 +02:00
NEZNAMY dcaf17294e Aligned PlayerList - Fix commit ebd67dd - Do not save config if no changes were made 2022-07-19 12:00:16 +02:00
NEZNAMY 0bc734689a Unlimited Nametags - Fix per-world formatting not applying on world switch 2022-07-19 00:22:11 +02:00
NEZNAMY d0c2c00cc9 BungeeCord - Respect Waterfall's tablist rewrite config option (#652) 2022-07-18 19:25:07 +02:00
NEZNAMY fd02328af9 Aligned PlayerList - Update widths.txt for 1.19 2022-07-18 14:55:05 +02:00
NEZNAMY 3b7de31324 Aligned PlayerList - Add a subcommand (disabled by default) for mass-verifying character widths 2022-07-18 14:52:44 +02:00
NEZNAMY ebd67dd025 Aligned PlayerList - Remove custom widths from config that match default value 2022-07-17 21:30:56 +02:00
NEZNAMY 4557a39ae2 RGB - Fix &r getting removed 2022-07-17 21:29:59 +02:00
NEZNAMY ce1eb299d3 Conditions - Fix conditions being 1 loop behind nested placeholders 2022-07-16 22:58:37 +02:00
Callum Seabrook 20ab3f0a72 Disabled JavaDoc generation for all but API and added property to enable for API 2022-07-16 20:11:58 +01:00
NEZNAMY d61f90c25c Code style - use api module instead of shared where possible 2022-07-16 20:56:59 +02:00
NEZNAMY 90474e7592 Layout - Fix startup error when a layout is missing groups section 2022-07-16 19:15:18 +02:00
NEZNAMY a2e28003bc Code style - Move TabConstants class to api module 2022-07-16 19:13:31 +02:00
NEZNAMY 6e409c3dcd Thread management - Use scheduled executor for repeating and delayed tasks 2022-07-16 18:39:13 +02:00
NEZNAMY 85a699c8de Commands - Only show announcement bars in auto-complete for bossbar announcement command 2022-07-16 18:33:57 +02:00
NEZNAMY a788d1fb23 Commands - Add missing permission check when toggling scoreboard using player argument 2022-07-16 14:14:35 +02:00
NEZNAMY ab5b72375c Code style - Remove redundant suppression and cast 2022-07-13 16:42:36 +02:00
NEZNAMY 3a023c51b5 Catch NoClassDefFoundError which is rarely thrown on reloads and leads to memory leaks 2022-07-13 16:24:17 +02:00
NEZNAMY 0ad91bcafe Sorting - Fix space in sorting types causing it to not work 2022-07-13 15:25:30 +02:00
NEZNAMY f41ea3bcab Unlimited Nametags - Improve heights to match vanilla & remove config option for space between lines, since original value was found 2022-07-13 14:57:07 +02:00
NEZNAMY 327dc4b416 Unlimited Nametags - Fix sneaking not being detected immediately on reload 2022-07-13 14:55:39 +02:00
NEZNAMY 27e7779456 Unlimited Nametags - Do not spawn for <1.8 players 2022-07-13 14:02:33 +02:00
NEZNAMY a7b2f5bb22 BungeeCord - Fix NPE on <1.8 clients 2022-07-13 13:32:53 +02:00
NEZNAMY 19fcb7c946 Layout - Do not send latency update packets to <1.8 clients 2022-07-13 13:32:23 +02:00
NEZNAMY 2706cd5881 Placeholder output replacements - Apply again after applying nested placeholders 2022-07-13 12:17:39 +02:00
NEZNAMY 4e2abd9c5b Bukkit - Fix startup on 1.7.x and 1.8.0 2022-07-13 12:04:21 +02:00
NEZNAMY 51ba2fa80a Placeholder output replacements - Fix exact match detection when input is not colored (new placeholderapi version) 2022-07-11 00:28:14 +02:00
NEZNAMY fd60cd0a21 Change the way the module is disabled 2022-07-06 22:00:52 +02:00
NEZNAMY 5025372c05 Revert "Code style - Remove unused method" 2022-07-06 21:15:54 +02:00
NEZNAMY 4806bd075f Configuration - Fix NPE when disabled world/server is null 2022-07-05 19:09:56 +02:00
NEZNAMY 370d17757a Add poor and unreliable MiniMessage support 2022-07-04 18:06:19 +02:00
NEZNAMY a648d7e75f Scoreboard - Fix NPE when using show command from console without player argument (#639) 2022-07-04 14:05:44 +02:00
NEZNAMY 518e1c5310 AlignedPlayerList - Fix rare NPE caused by multi-thread access 2022-07-04 13:46:29 +02:00
NEZNAMY 11539d8290 Commands - Allow removing per-world/server values 2022-07-04 13:44:08 +02:00
Tanguygab e4f33b58f7 * for all players in /tab scoreboard show 2022-07-04 13:34:04 +02:00
NEZNAMY 073caa9515 Compilation - Bump Authlib version 2022-07-04 13:33:00 +02:00
NEZNAMY 2b06b11916 Scoreboard - Fix same lines of text not appearing with use-numbers true 2022-06-24 21:16:45 +02:00
NEZNAMY 032b0f8a41 Configuration - Fix NPE when copying bukkit config to bungeecord 2022-06-19 14:05:59 +02:00
NEZNAMY 9391363f9b Unlimited Nametags - Disable on boat with chest as well (#625) 2022-06-19 12:36:35 +02:00
NEZNAMY 467fb2e9c7 Bukkit - Use reflection for LibsDisguises hook 2022-06-18 16:12:53 +02:00
NEZNAMY 257893b8de Downgrade dependency to fix compilation 2022-06-18 16:12:09 +02:00
NEZNAMY e919839de5 Merge pull request #623 from JT122406/Updates
Repo Bumps
2022-06-18 14:12:41 +02:00
J.T. McQuigg 77d372cbee Use new RedisBungee 2022-06-18 07:42:38 -04:00
J.T. McQuigg 03e9facaf7 Repo Bumps 2022-06-18 07:35:45 -04:00
NEZNAMY f3e459d911 Revert "BungeeCord - Retry plugin message processing if player isn't loaded for any reason (#564)"
This reverts commit dffac5deb8.
2022-06-17 14:15:39 +02:00
NEZNAMY 36feff0e04 Sorting - Fix off-by-1 possibly causing sorting to not work correctly for players without sorting group/permission 2022-06-16 18:53:42 +02:00
NEZNAMY 0320140a1b BungeeCord - Fix vanish/invisible status not resetting on server switch 2022-06-12 14:16:20 +02:00
NEZNAMY 4fb1b1c9f9 3.1.2 2022-06-11 18:01:17 +02:00
NEZNAMY 37f3896a41 Update to 1.19 2022-06-11 18:01:08 +02:00
NEZNAMY e1c152d95d Add missing change in previous commit 2022-06-11 18:00:08 +02:00
NEZNAMY dffac5deb8 BungeeCord - Retry plugin message processing if player isn't loaded for any reason (#564) 2022-06-11 17:57:18 +02:00
NEZNAMY 8aa3bbfad3 Scoreboard - Fix RGB codes not translating into legacy correctly in long lines 2022-06-09 23:10:44 +02:00
NEZNAMY 5bb4006e55 Scoreboard - Fix additional empty lines when use-numbers is enabled 2022-06-08 00:46:32 +02:00
NEZNAMY e06a406682 Clean up repositories 2022-06-08 00:45:21 +02:00
NEZNAMY a19719be4b Configuration - Remove deleted placeholder from default config 2022-06-03 23:47:41 +02:00
NEZNAMY 35856a9f3d Merge branch 'master' of https://github.com/NEZNAMY/TAB 2022-06-02 15:50:46 +02:00
NEZNAMY cf1d5d5ee2 Code style - Remove unused method 2022-06-01 20:23:16 +02:00
NEZNAMY f69a845e51 Bukkit - Implement chat message sending on <1.7 2022-05-31 12:21:07 +02:00
NEZNAMY db67e93bb8 Disable compilation of a module 2022-05-31 11:51:21 +02:00
NEZNAMY 313f089222 Aligned Suffix - Fix memory leak 2022-05-20 01:10:00 +02:00
NEZNAMY 458c08ded7 Tab expansion - Slightly optimize placeholder retrieving 2022-05-18 01:39:20 +02:00
NEZNAMY fe6cc7417f Placeholders - Fix refresh interval forwarding to bridge (#597) (2nd attempt) 2022-05-17 19:00:23 +02:00
NEZNAMY 181c94a808 Code style - Extract strings into constants 2022-05-13 00:42:30 +02:00
NEZNAMY 9ff6f02d8d Code style - Remove unused code and other minor changes 2022-05-12 22:49:41 +02:00
NEZNAMY 3cf74516d9 Bukkit - Remove unused data watcher registries 2022-05-12 22:25:18 +02:00
NEZNAMY 31f5502c16 BungeeCord - Delete TAB's bungeecord events (to make users switch to universal ones) 2022-05-12 22:04:37 +02:00
NEZNAMY 671d60bd72 API - Throw user-friendly exception if player is not loaded yet (#585) 2022-05-10 18:32:09 +02:00
NEZNAMY 294e866501 Placeholders - Fix refresh interval forwarding to bridge (#597) 2022-05-10 18:21:13 +02:00
NEZNAMY 96789100e3 Bukkit - Wrap incoming components instead of deserializing and then serializing them 2022-05-10 13:22:27 +02:00
NEZNAMY ea934fc7fb GroupManager - Add null check for player group from permission plugin 2022-05-08 12:48:06 +02:00
NEZNAMY d529b7b340 Sorting - Allow placeholders with ":" inside to work properly in PLACEHOLDER sorting type 2022-05-08 12:47:40 +02:00
NEZNAMY 092ca7f9f8 Aligned Suffix - Assume players can see themselves when vanished 2022-05-03 18:03:29 +02:00
NEZNAMY 79f4bdb869 Unlimited Nametags - Do not delay respawn by 1 tick anymore to fix OOM 2022-05-01 13:07:42 +02:00
NEZNAMY b0d2d0f7dc NickCompatibility - Clean up code 2022-04-30 20:01:40 +02:00
NEZNAMY cdf58c1dfe Teams - set canSeeFriendlyInvisibles to true 2022-04-30 18:21:46 +02:00
NEZNAMY 4680de6022 Feature management - Add try/catch for each feature in join processing (#560) 2022-04-30 17:22:03 +02:00
NEZNAMY e8f61181b6 Error logging - Log (critical) errors into console even when error file is full 2022-04-30 17:20:24 +02:00
NEZNAMY 75e9e007d0 Fix disabled worlds not loading correctly (from #6f07cf4) 2022-04-28 17:27:23 +02:00
NEZNAMY 3574ef7c0b Belowname - Do not update score when entering disabled world 2022-04-28 12:20:54 +02:00
NEZNAMY 86158036d2 Commands - Make permission group assigning more obvious in debug output 2022-04-28 11:55:21 +02:00
NEZNAMY e73beb47a3 API - Fix scoreboard Line#setText not working 2022-04-26 23:23:42 +02:00
NEZNAMY 0db5f1dd73 Scoreboard - Fix NPE when a line is null 2022-04-23 14:18:30 +02:00
NEZNAMY 6dcdc2aa58 PetFix - Fix attack packet cancellation 2022-04-20 10:46:08 +02:00
NEZNAMY 64601137e8 Scoreboard - Show empty lines when defined as empty, only hide when placeholder output is empty 2022-04-15 00:07:44 +02:00
NEZNAMY af7697b670 BungeeCord - Fixed NPE from moving to reflection 2022-04-14 23:24:45 +02:00
NEZNAMY 9e4f46088b Commands - Do not force refresh players who are not loaded yet (#560) 2022-04-12 11:21:06 +02:00
NEZNAMY 91e71a9b9c Layout - Fixed NPE when player had no layout visible 2022-04-10 23:32:13 +02:00
NEZNAMY 1198ffb847 BungeeCord - Use reflection for proxy module access due to the repository no longer being available 2022-04-10 23:31:51 +02:00
NEZNAMY 72116ecd0c Javadoc - Further improve documentation 2022-04-10 21:08:19 +02:00
NEZNAMY 04ebb7123d Code style - Move NMS object declaration and initialization 2022-04-10 20:28:29 +02:00
NEZNAMY 43096beafe Bukkit - Use ConsoleCommandSender for colored messages (#555) 2022-04-09 18:27:37 +02:00
NEZNAMY 2a08c62456 Tab expansion - Fix server placeholders not loading on join 2022-04-07 15:44:58 +02:00
NEZNAMY b62d74c3fa Code style - Remove unnecessary reflection 2022-04-06 20:38:03 +02:00
NEZNAMY 652fb5a6ad Bukkit - Switch from Paper to Purpur API 2022-04-06 19:11:19 +02:00
NEZNAMY d1f25cc19f Bukkit - Disable checking for plugins with compatibility issue 2022-04-06 18:25:12 +02:00
NEZNAMY dc6a9d9761 Fix layout startup 2022-04-06 13:44:16 +02:00
NEZNAMY 838d725715 Code style - Removed redundant static modifiers 2022-04-06 13:31:31 +02:00
NEZNAMY c45acb39ca Code style - Clean up variable initialization 2022-04-06 13:10:11 +02:00
NEZNAMY 957edf2a52 Javadoc - Fixed compilation warn 2022-04-06 12:44:54 +02:00
NEZNAMY d969c6ed0e Code style - Change way of checking if server is proxy 2022-04-06 12:41:20 +02:00
NEZNAMY dd6fca961c Code style - Clean up configuration loading 2022-04-06 12:34:39 +02:00
NEZNAMY e88a6df456 Config - remove hidden unregister-before-register option and remove the function entirely. Hopefully with improved checks this should not be necessary anymore. It caused client errors, as well as #549 2022-04-06 11:35:03 +02:00
NEZNAMY 3a4530c999 RGB - Finish #552 - Only replace clean gradients in property initialization 2022-04-05 23:24:37 +02:00
NEZNAMY b623dba40a Merge branch 'master' of https://github.com/NEZNAMY/TAB 2022-04-05 23:20:13 +02:00
NEZNAMY e2fd945109 Merge pull request #552 from lucypoulton/feat/kyori-rgb-format
Add support for Kyori MiniMessage RGB format
2022-04-05 23:19:52 +02:00
NEZNAMY e6dc3cda31 Unlimited nametags - Manually destroy armor stands on world switch 2022-04-05 20:21:36 +02:00
Lucy Poulton 18d8ff127a add support for kyori minimessage rgb format 2022-04-05 14:25:22 +01:00
NEZNAMY 4a9526451f Code style - Remove redundant "triggerMode" flag from Placeholder class due being redundant. Setting refresh to -1 has the same effect. 2022-04-04 19:03:51 +02:00
NEZNAMY 669d89c870 Code style - Move tab expansion code to interface 2022-04-04 18:15:06 +02:00
NEZNAMY 39161f2af5 Nametags - Reduced CPU usage of anti-override 2022-04-04 16:02:32 +02:00
NEZNAMY be8c33e3fc Velocity - Delay join event processing to avoid unformatted tablist names 2022-04-03 14:08:19 +02:00
NEZNAMY 7c1a27f9df Javadoc - Further improve documentation 2022-04-02 19:07:18 +02:00
NEZNAMY 342cc93dbf Code style - Clean up code 2022-04-02 13:17:15 +02:00
NEZNAMY 6f07cf439b Code style - Clean up loading of disabled servers/worlds 2022-04-01 23:40:04 +02:00
NEZNAMY 1d4d00b69b Code style - Clean up code with usage of @Inject 2022-04-01 23:21:30 +02:00
NEZNAMY 54cb3e4d54 3.1.1 2022-04-01 10:02:26 +02:00
NEZNAMY b0fc2caef9 RedisBungee - Detect player name change from other proxies 2022-03-31 21:54:51 +02:00
NEZNAMY 1221509d24 MySQL - Do not lowercase _DEFAULT_ group name, which caused it to not load (#546) (for real this time) 2022-03-31 20:52:12 +02:00
NEZNAMY 17f5f60504 MySQL - Do not lowercase _DEFAULT_ group name, which caused it to not load (#546) 2022-03-31 17:02:12 +02:00
NEZNAMY a8b0b488c6 Layout - Implement latency updating for player slots (#545) 2022-03-31 15:45:14 +02:00
NEZNAMY 6d922d5b70 Unlimited nametags - Fix NPE when player moves too quickly after joining 2022-03-31 14:50:54 +02:00
NEZNAMY 1ab62a33e3 Placeholders - Improve refresh task interval adaptation (#543) 2022-03-31 10:01:10 +02:00
NEZNAMY f9540a1e78 Tab Expansion - Fix placeholders not loading on player join 2022-03-29 11:17:04 +02:00
NEZNAMY a720bf2c8b Unlimited nametags - Do not allow preview command when armor stands are disabled for player 2022-03-28 21:25:42 +02:00
NEZNAMY c143eab6fb Global playerlist - Fix player possibly being removed from playerlist after reconnecting rapidly (#539) 2022-03-28 20:57:47 +02:00
NEZNAMY 1afb20af8b Code style - Avoid reassigning parameters 2022-03-28 12:57:31 +02:00
NEZNAMY c6f27c839d Code style - Document empty method body 2022-03-28 12:49:37 +02:00
NEZNAMY 742f1708c5 Code style - Remove unused import 2022-03-28 12:47:19 +02:00
NEZNAMY ac9601a48b Unlimited nametags - Fix nametag toggle command not hiding vanilla name on players with disabled armor stands via API 2022-03-28 12:13:23 +02:00
NEZNAMY 4cd109a5fc Javadoc - Update style and fix alignment after replacing tabs with spaces 2022-03-26 23:13:19 +01:00
NEZNAMY 078554a8b0 RedisBungee - Fix /btab reload removing players from tablist when global playerlist is disabled 2022-03-25 14:46:59 +01:00
NEZNAMY 464e2f4f64 RedisBungee - Fix duplicated team names through proxies 2022-03-25 14:46:22 +01:00
NEZNAMY b84f55aa18 RedisBungee - Fix errors and issues when unlimited nametag mode is enabled 2022-03-25 14:45:55 +01:00
NEZNAMY be2f780bfa Drop LuckPerms event hook and go back to periodic task. Too many issues related to events. 2022-03-25 10:27:36 +01:00
NEZNAMY 262d8493a6 fix NPE 2022-03-25 09:33:32 +01:00
NEZNAMY 24e12e871b finish #534 2022-03-24 22:33:18 +01:00
NEZNAMY a2ee75339c 3.1.1-pre2 2022-03-24 22:20:25 +01:00
NEZNAMY 9c28c4d63c add auto complete for group names in group command 2022-03-22 22:12:55 +01:00
NEZNAMY 7d57da1424 fix disableArmorStands method not destroying armor stands 2022-03-22 13:06:28 +01:00
NEZNAMY b77b20ba4d expose placeholder output getters in the API 2022-03-22 11:54:30 +01:00
NEZNAMY 57ae58f093 call super.onQuit as it should 2022-03-21 20:26:56 +01:00
NEZNAMY b29c878688 Merge remote-tracking branch 'origin/master' 2022-03-21 08:51:52 +01:00
NEZNAMY 5a5a6c76c1 another banger that took a week to fix 2022-03-21 08:51:32 +01:00
NEZNAMY f6a53f537c fix NPE 2022-03-21 08:46:02 +01:00
NEZNAMY d86ed37208 allow negative values in replacement intervals using ~ 2022-03-20 17:55:17 +01:00
NEZNAMY 92b945f28d Merge pull request #534 from itsmemac/master
fix nametag preview help text
2022-03-20 15:03:07 +01:00
Mac cb164f0055 fix nametag preview help text
it seems new update `/tab ntpreview` has been replaced with `/tab nametag preview`
Help text was not updated
2022-03-20 19:31:38 +05:30
NEZNAMY acfe37c1b5 fix NPE 2022-03-20 12:50:30 +01:00
NEZNAMY 44ded26df4 change method call order in which groups are refreshed 2022-03-19 16:13:39 +01:00
NEZNAMY 6dbd92a010 remove players from map on quit 2022-03-19 16:12:06 +01:00
NEZNAMY f729ca0ad2 fix NPE 2022-03-19 16:11:45 +01:00
NEZNAMY 065490c077 Merge branch 'master' of https://github.com/NEZNAMY/TAB 2022-03-18 17:12:20 +01:00
NEZNAMY da6425dd93 Merge pull request #530 from CoachYT1/master
Update dependencies & GitHub actions
2022-03-15 08:25:12 +01:00
CoachYT 250dcbc676 Update build.yml 2022-03-14 12:18:41 +01:00
CoachYT de4ca4a88f Update libs.versions.toml 2022-03-14 12:15:58 +01:00
NEZNAMY 723a0c890e fix NPE 2022-03-13 22:36:37 +01:00
NEZNAMY 7085e7df20 do not forward group if assigning by permissions 2022-03-13 22:36:25 +01:00
NEZNAMY 09496d60f3 add argument check 2022-03-13 13:19:05 +01:00
NEZNAMY bf6bc26a5c add check into API for all the users who shade API into their projects 2022-03-13 13:16:20 +01:00
NEZNAMY a7217eae15 fix placeholders used only in tab expansion not refreshing 2022-03-13 13:12:37 +01:00
NEZNAMY 2a532ef9b7 update README.md 2022-03-13 13:11:37 +01:00
NEZNAMY c304ded924 avoid thread spam from LP events 2022-03-11 15:06:13 +01:00
NEZNAMY 4d8c47a505 #517 - make group names not case-sensitive when connected to MySQL 2022-03-09 10:22:51 +01:00
NEZNAMY d3e0ccbf34 forward nametag preview on server switch 2022-03-09 09:08:49 +01:00
NEZNAMY 3c82b46148 fix updating of invalid score on server switch when pipeline injection is disabled 2022-03-08 23:09:29 +01:00
NEZNAMY 07d7f2cc17 catch StackOverflowError as well 2022-03-08 21:50:10 +01:00
NEZNAMY 54d4f09ab1 fix StackOverflowError when using placeholder identifier inside its own replacements (will act the same as %value%) 2022-03-08 21:45:11 +01:00
NEZNAMY e8c698b5e8 #517 - fix mysql header/footer download/upload 2022-03-07 22:14:49 +01:00
NEZNAMY b096906ffd 3.1.1-pre1 2022-03-07 18:59:40 +01:00
NEZNAMY 5a9cec12fa WeakHashMap isn't so weak after all (fixed memory leak) 2022-03-07 18:59:22 +01:00
NEZNAMY a2ed71751f fix NPE 2022-03-07 18:58:10 +01:00
NEZNAMY 5a3a2df920 simplify 2022-03-07 15:50:24 +01:00
NEZNAMY 9d07e669ea merge ifs 2022-03-07 15:50:12 +01:00
NEZNAMY aa18f1cc35 remove unnecessary full path 2022-03-07 14:03:04 +01:00
NEZNAMY 668d78ea64 remove redundant constructor 2022-03-07 13:59:38 +01:00
NEZNAMY 6f62581d6e print OOM into file instead of throwing into console 2022-03-07 12:53:12 +01:00
NEZNAMY 06686ada5c add synchronized lock to printError method 2022-03-07 12:21:47 +01:00
NEZNAMY 4380482606 remove direct reference to player channel on bukkit 2022-03-07 12:21:24 +01:00
NEZNAMY d5112b3d32 fix group refreshing introduced in previous commit which in the end didn't even fix the issue it was supposed to 2022-03-06 20:26:49 +01:00
NEZNAMY ef67506640 fix error caused by concurrent access 2022-03-06 12:01:50 +01:00
NEZNAMY c2ea4d2793 #516 - skin signature can be null 2022-03-05 16:29:16 +01:00
NEZNAMY f0d8d479bd 3.1.0 2022-03-04 22:46:16 +01:00
NEZNAMY 2d46d70c92 Fix super rare permission group detecting issue when using TAB on bungeecord with assigning by permissions with using backend permissions with many online players. Jesus. 2022-03-04 22:38:43 +01:00
NEZNAMY 4320bb7cb4 try to fix rare error that doesn't make sense 2022-03-04 22:36:53 +01:00
NEZNAMY 398e8ed5ff remove redundant space 2022-03-04 12:31:43 +01:00
NEZNAMY 4e8b804337 prefer per-world settings over per-server 2022-03-04 10:39:45 +01:00
NEZNAMY de7c664e0d remove redundant check 2022-03-02 14:17:05 +01:00
NEZNAMY c7600a2e3d fix issues for players with unknown version 2022-03-02 13:34:29 +01:00
NEZNAMY 8b34e82aab simplify 2022-03-02 12:49:26 +01:00
NEZNAMY c96efe8802 use Logger for console messages 2022-03-02 12:46:33 +01:00
NEZNAMY 0a1bfd3a2e 3.1.0-pre3 2022-03-02 10:57:23 +01:00
NEZNAMY 755cf9ce43 1.18.2 2022-03-02 10:56:46 +01:00
NEZNAMY c6aca74396 fix NPE when assigning groups by permissions on bungeecord 2022-03-01 22:37:37 +01:00
NEZNAMY b5b7f3c16c add try/catch for PremiumVanish hook 2022-02-28 23:26:53 +01:00
NEZNAMY 293162b484 show name of file with syntax error correctly in error message 2022-02-28 15:27:17 +01:00
NEZNAMY bd543b7b9d fix rare NPE (#504) 2022-02-25 20:49:40 +01:00
NEZNAMY 994fe9f482 fix conversion error when bossbar names are numbers (#506) 2022-02-25 20:48:28 +01:00
NEZNAMY f657bdb14c update README.md 2022-02-22 23:42:16 +01:00
NEZNAMY a4238e1191 compensate for 1.8.0 client sided bug (#501) 2022-02-22 08:05:45 +01:00
NEZNAMY daf08423b4 3.1.0-pre2 2022-02-21 19:01:40 +01:00
NEZNAMY 91367f3d3a fix wrong text displayed 2022-02-21 16:33:21 +01:00
NEZNAMY 9dbd52b638 replace tabs with 4 spaces 2022-02-21 16:15:52 +01:00
NEZNAMY 22c6be2770 fix names not updating when new max player joins 2022-02-21 16:05:51 +01:00
NEZNAMY fb261c9f90 cleanup 2022-02-21 12:43:23 +01:00
NEZNAMY 638e35bf90 more abstraction 2022-02-21 12:40:15 +01:00
NEZNAMY 25d13862ae initialize server version & data folder constants instead of having per-platform getters 2022-02-21 12:30:02 +01:00
NEZNAMY 1c8f483138 split content of plugin message handler classes into other classes 2022-02-21 11:57:43 +01:00
NEZNAMY 92ad215873 more code abstraction 2022-02-21 11:06:02 +01:00
NEZNAMY 7ed3cfbb7c fix vanish status not refreshing correctly on bungeecord 2022-02-20 23:42:43 +01:00
NEZNAMY 53e75a27be avoid bytebuf instance check entirely if deserialization is disabled 2022-02-20 23:08:15 +01:00
NEZNAMY 1b67819c3c only forward relevant properties to expansion and fix values not updating 2022-02-20 15:16:12 +01:00
NEZNAMY 07f8020f79 fix syntax error in default file 2022-02-20 14:53:31 +01:00
NEZNAMY b12d0680d8 massively optimize some API methods 2022-02-20 14:50:05 +01:00
NEZNAMY 64247d913e implement "/tab nametag toggle" command hiding nametags of all players for command sender 2022-02-19 21:29:22 +01:00
NEZNAMY 3575cdae85 move code & respawn armor stands on world switch if preview is enabled 2022-02-19 14:27:04 +01:00
NEZNAMY f71a542247 add check for directory existence 2022-02-19 13:56:59 +01:00
NEZNAMY 46cc59138b skip action if list is empty 2022-02-19 13:31:00 +01:00
NEZNAMY 46bfa5112e for some reason this check is needed as well 2022-02-19 13:29:32 +01:00
NEZNAMY fcdff51783 use pre-allocated enum values array (again) 2022-02-19 13:29:18 +01:00
NEZNAMY a4be4ae419 fix check not working properly 2022-02-19 13:28:05 +01:00
NEZNAMY 7083352b9a cache enum values to reduce memory allocations 2022-02-18 23:37:27 +01:00
NEZNAMY 956a0f46c0 name the second thread pool as well 2022-02-18 23:26:26 +01:00
NEZNAMY aea1864627 iterate over arrays to reduce allocations 2022-02-18 23:01:29 +01:00
NEZNAMY 803b87111a make packet deserializing on BungeeCord use 30x less CPU 2022-02-18 22:40:36 +01:00
NEZNAMY f64a641b63 fix NPE caused by a dumb mistake 2022-02-18 12:49:28 +01:00
NEZNAMY 7f9bb354d7 remove wrong null checks 2022-02-18 12:48:08 +01:00
NEZNAMY 4b7b6284f8 move code to avoid duplication 2022-02-18 12:38:55 +01:00
NEZNAMY bbccd26415 remove %maxplayers% placeholder 2022-02-18 12:35:31 +01:00
NEZNAMY bab7c737b3 add more precondition checks 2022-02-18 12:31:06 +01:00
NEZNAMY 3169787b41 fix NPE on /btab parse 2022-02-18 11:13:34 +01:00
NEZNAMY f29bbc6657 move config option loading 2022-02-17 23:04:21 +01:00
NEZNAMY f53cd5ae11 fix armor stands heights not updating 2022-02-17 22:39:59 +01:00
NEZNAMY 38d36b5ab5 remove unused softdependency 2022-02-17 21:33:54 +01:00
NEZNAMY 8f8f596abc drop direct UltraPermissions hook (still supported via Vault) 2022-02-17 16:28:43 +01:00
NEZNAMY 2afc8abdb2 rename fields from "method" to "action" 2022-02-17 16:19:57 +01:00
NEZNAMY 38dd948306 cleanup 2022-02-17 11:37:28 +01:00
NEZNAMY e393cf0a10 make code more universal 2022-02-17 11:35:36 +01:00
NEZNAMY 4f451017e3 make PacketBuilder not abstract and add default implementation to delete a redundant class 2022-02-17 11:17:27 +01:00
NEZNAMY 9cb31af48a class cleanup using consumer 2022-02-17 10:56:45 +01:00
NEZNAMY 2c17041b27 universal registration of %online_<server>% on proxies 2022-02-17 10:34:55 +01:00
NEZNAMY 72c75a443e more abstraction of RedisBungee feature 2022-02-16 20:04:06 +01:00
NEZNAMY 1ba6384647 update README.md 2022-02-16 18:57:40 +01:00
NEZNAMY e2edf9a37c delete unused file 2022-02-16 17:35:23 +01:00
NEZNAMY cb0bfd095d 3.1.0-pre1 2022-02-15 13:05:53 +01:00
NEZNAMY ec03dd4755 fix long line creating empty line above it 2022-02-15 13:05:21 +01:00
NEZNAMY de44f5ae42 update issue templates 2022-02-14 21:34:22 +01:00
NEZNAMY 5ee6796172 implement #347 and probably fix original issue in #475 2022-02-14 21:13:38 +01:00
NEZNAMY d034fca513 add MySQL data conversion commands 2022-02-14 15:58:28 +01:00
NEZNAMY f65c3fb29a remove unused code 2022-02-14 00:02:38 +01:00
NEZNAMY 7192bc9d69 resend objectives/teams on server switch even when pipeline injection is disabled 2022-02-14 00:02:06 +01:00
NEZNAMY d7636a05f4 drastically reduce amount of permission checks by the feature 2022-02-13 23:05:47 +01:00
NEZNAMY bd93301634 send missing packets on that thing through bridge 2022-02-13 21:58:32 +01:00
NEZNAMY b0558ba0a2 just one \t 2022-02-13 21:57:53 +01:00
NEZNAMY 251934bb4b fix NPE on group info when mysql is enabled 2022-02-13 17:01:13 +01:00
NEZNAMY f2c9ef5d30 implement tab expansion on BungeeCord through bridge 2022-02-13 16:43:17 +01:00
NEZNAMY 15a072bbaa fix weird NPE 2022-02-13 13:52:07 +01:00
NEZNAMY 8f1c303862 implement /tab groups and /tab group <name> subcommands 2022-02-12 14:07:23 +01:00
NEZNAMY c79d2e3e6e fix BossBar placeholders not updating when changing value while it was hidden 2022-02-11 19:41:59 +01:00
NEZNAMY f45d8d860b default condition type to AND instead of OR 2022-02-11 19:40:54 +01:00
NEZNAMY 88f31184a0 add back \t for stack traces 2022-02-11 17:54:11 +01:00
NEZNAMY d5368baab4 add final modifier 2022-02-11 17:22:14 +01:00
NEZNAMY 10f645226c fix bridge placeholder refreshing from replacements 2022-02-11 17:12:54 +01:00
NEZNAMY 322c572cd6 add new issue template for wiki changes 2022-02-11 14:19:24 +01:00
NEZNAMY fdfeb178b5 update error.yml 2022-02-10 21:04:37 +01:00
NEZNAMY 1c63cdba91 update error.yml 2022-02-10 21:03:31 +01:00
NEZNAMY 289d0db8e3 create error template 2022-02-10 21:02:26 +01:00
NEZNAMY 9adacca77f upgrade bug report template 2022-02-10 20:59:12 +01:00
NEZNAMY 7dc6813274 avoid NegativeArraySizeException when copying collection by avoiding that operation 2022-02-10 17:53:30 +01:00
NEZNAMY 77bf1cfbb9 #494 2022-02-10 15:44:07 +01:00
NEZNAMY 8f28350579 initial unlimited nametags on bungee support 2022-02-10 15:33:35 +01:00
NEZNAMY 2d06d0c1d3 fix compatibility issue with other plugins 2022-02-06 13:21:35 +01:00
NEZNAMY 7e8301afcd goodbye 3 days of my life 2022-02-05 13:59:12 +01:00
NEZNAMY 2600e8f856 send empty player slots in a single packet 2022-02-03 22:58:35 +01:00
NEZNAMY 914748e14e add toString override to Skin 2022-02-03 22:32:54 +01:00
NEZNAMY 21a7b633e7 simplify 2022-02-01 19:15:57 +01:00
NEZNAMY a77d4352e2 convert classes into anonymous ones 2022-02-01 18:54:01 +01:00
NEZNAMY a7a21e0e51 fix another config conversion bug 2022-02-01 14:49:53 +01:00
NEZNAMY a0a14cd285 fix NPE 2022-02-01 14:18:03 +01:00
NEZNAMY 44b7bedd53 fix bossbar never showing when joining disabled world/server 2022-02-01 14:16:04 +01:00
NEZNAMY 409a0808c1 fix NumberFormatException with Placeholder sorting type 2022-02-01 14:08:22 +01:00
NEZNAMY 4214d02fad send join plugin message on server switch as well 2022-02-01 12:52:02 +01:00
NEZNAMY bc1abb1b58 more javadocs and moved some variables around 2022-01-31 21:37:10 +01:00
NEZNAMY 2f2f53ba4d #488 2022-01-31 20:26:19 +01:00
NEZNAMY cbeb4c151d remove errorDescription parameter from submitted tasks 2022-01-30 19:01:22 +01:00
NEZNAMY 1d5ca70790 remove bridge placeholder usage from cpu command since it's no longer measured 2022-01-30 18:38:03 +01:00
NEZNAMY 1f619ff4d3 allow enabling pet fix feature on proxy and forward status to bridge 2022-01-30 00:43:55 +01:00
NEZNAMY f5acdebe60 bridge recode to drastically reduce packet flow & allow relational placeholder support 2022-01-30 00:34:00 +01:00
NEZNAMY bd59922204 more docs, general cleanup 2022-01-29 15:49:55 +01:00
NEZNAMY c4d9482c79 remove unused code 2022-01-28 21:12:31 +01:00
NEZNAMY 8faef8f017 class cleanup 2022-01-28 20:56:02 +01:00
NEZNAMY 284161db77 create and use Skin class instead of forwarding Objects 2022-01-28 20:54:33 +01:00
NEZNAMY 78db2b66ef placeholder cleanup, unification and performance improvements 2022-01-28 17:18:52 +01:00
NEZNAMY 0d71643ecb make ping value of layout slots configurable 2022-01-28 16:25:39 +01:00
NEZNAMY 9a7a105e7b fix %serveronline% and %worldonline% inaccuracies 2022-01-28 11:25:13 +01:00
NEZNAMY f54d024d97 3.0.2 2022-01-27 20:43:29 +01:00
NEZNAMY 94338bd53f update nested placeholders immediately on plugin message 2022-01-27 13:17:24 +01:00
NEZNAMY 1a9ecc0313 fix belowname update packets being sent in disabled worlds / servers 2022-01-26 22:04:13 +01:00
NEZNAMY 4baeb7b945 properly cancel delayed tasks on shutdown / reload 2022-01-26 18:24:24 +01:00
NEZNAMY baee479fb5 3.0.2-pre6 2022-01-26 01:03:29 +01:00
NEZNAMY 5ad4b2e9c4 so many issues from one wrong method call 2022-01-25 22:57:31 +01:00
NEZNAMY 26657cddfc code style suggestions by intellij 2022-01-25 22:56:52 +01:00
NEZNAMY 947a922f8c reduce amount of logged warns in console 2022-01-25 16:08:46 +01:00
NEZNAMY a2be76184e use tab's thread manager for scoreboard and bossbar announcing 2022-01-25 00:43:57 +01:00
NEZNAMY 8ddb733dc3 do not freeze tab's thread with delayed tasks 2022-01-25 00:33:44 +01:00
NEZNAMY 94e016129b run repeating task for the first time with initial delay 2022-01-25 00:33:21 +01:00
NEZNAMY 5e653ded5d process events in a single thread on velocity as well 2022-01-23 22:04:47 +01:00
NEZNAMY 1bf8097c3f 3.0.2-pre5 2022-01-23 21:39:16 +01:00
NEZNAMY 3d2f11ffd2 move enable call just in case 2022-01-23 18:28:08 +01:00
NEZNAMY 5e77a22d7a further javadoc progress 2022-01-23 18:27:46 +01:00
NEZNAMY 1dffcb1dc3 remove all thread safety checks since they are no longer needed 2022-01-23 17:24:26 +01:00
NEZNAMY edc18cbafb run all tasks in the same thread 2022-01-23 16:49:50 +01:00
NEZNAMY 2f23194432 3.0.2-pre4 2022-01-23 11:06:42 +01:00
NEZNAMY 20709472be fix vehicle / passenger handling 2022-01-23 11:06:16 +01:00
NEZNAMY 7a8c6a0cec some more velocity fixes 2022-01-22 23:11:51 +01:00
NEZNAMY 88558e40a7 round health even when copying max health 2022-01-21 14:49:27 +01:00
NEZNAMY 79386b2b6b allow 64 character scoreboard on <1.13 using "Long|" line prefix 2022-01-21 13:12:03 +01:00
NEZNAMY 3aad8d3cb5 allow per-server / per-world properties through commands 2022-01-21 10:49:06 +01:00
NEZNAMY 272a6f37ad fix NPE 2022-01-20 18:49:33 +01:00
NEZNAMY e10081025d fix load() method not executing methods in correct order resulting in enormous load times with large player counts 2022-01-20 18:31:04 +01:00
NEZNAMY e03a6d8f11 attempt to fix rare error probably caused by concurrent access 2022-01-20 18:29:37 +01:00
NEZNAMY 98e7dc0321 match velocity fixes in AlignedPlayerList as well 2022-01-20 18:24:52 +01:00
NEZNAMY 74438c5d74 so this is why someone was getting a NPE 2022-01-20 18:02:14 +01:00
NEZNAMY 0c4e548565 further increase event processing delay on velocity 2022-01-20 17:06:03 +01:00
NEZNAMY cc70e01e96 merge classes together 2022-01-20 14:34:19 +01:00
NEZNAMY 7c635748af simplify 2022-01-20 13:58:05 +01:00
NEZNAMY 0c874ad56d only keep lowercase entries in sorting map 2022-01-20 13:51:24 +01:00
NEZNAMY 2fb7f80b71 always display bossbars in defined order 2022-01-20 13:14:40 +01:00
NEZNAMY 3f7c3414ce increase server switch processing delay on velocity 2022-01-18 11:23:04 +01:00
NEZNAMY 97165db44d fix bridge placeholders rarely not working in scoreboard 2022-01-18 11:11:10 +01:00
NEZNAMY 82cdf04cf0 add feature override check for onServerChange 2022-01-18 11:10:34 +01:00
NEZNAMY 171d899609 3.0.2-pre3 2022-01-14 20:51:37 +01:00
NEZNAMY 6432278d5d fix scoreboard detection from other plugins not resetting on server switch 2022-01-14 20:41:15 +01:00
NEZNAMY ccaff12451 fix NPE caused by concurrent access 2022-01-14 20:40:54 +01:00
NEZNAMY 11347c080b more debug messages 2022-01-14 15:50:13 +01:00
NEZNAMY 553676c3f9 catch LinkageError instead of more specific ones 2022-01-14 15:49:49 +01:00
NEZNAMY 40b70e7418 fix compatibility with forks that set version field to "Unknown" 2022-01-14 14:22:52 +01:00
NEZNAMY 0ea75019ae catch NoSuchMethodError as well 2022-01-14 14:21:46 +01:00
NEZNAMY dbc092df77 add some missing bossbar command feedback (#462) 2022-01-14 11:09:15 +01:00
NEZNAMY 68049f0dca extract duplicated code into method (and also cancel tasks if plugin fails to load) 2022-01-13 20:54:58 +01:00
NEZNAMY 9db5dfc175 fix NPE when getting last value but placeholder threw error 2022-01-13 20:48:49 +01:00
NEZNAMY 039a316b3b clear players if plugin fails to load 2022-01-13 20:48:16 +01:00
NEZNAMY f4b529f1ce update README.md 2022-01-11 18:50:44 +01:00
NEZNAMY 9c6d606103 code cleanup 2022-01-11 17:57:15 +01:00
NEZNAMY 6cdc06aae7 fix config option path 2022-01-11 17:45:54 +01:00
NEZNAMY 2684654e7b drop redundant remove-strings option 2022-01-11 17:45:07 +01:00
NEZNAMY 25bcc33204 remove harming check 2022-01-10 20:44:41 +01:00
Callum Seabrook e5b3f6215b Added relocation for event 2022-01-10 15:03:16 +00:00
NEZNAMY 9306eadd90 a couple of config conversion fixes 2022-01-09 18:42:13 +01:00
NEZNAMY a27fbb5b8b MessageFile now extends YamlConfigurationFile 2022-01-08 17:27:28 +01:00
NEZNAMY cd4c82b0b8 Merge pull request #477 from JannesStroehlein/master
Fixed localization issue when dealing with floats numbers
2022-01-08 14:45:57 +01:00
Jannes Ströhlein aa6179ee9e made all decimal seperators points instead of some being commas. The commas made the placeholder replacement logic malfunction (2,43 -> 243 instead of 2.43) 2022-01-08 14:39:11 +01:00
NEZNAMY 6594b8c2dc fix replacements being applied twice for bridge placeholders (#476) 2022-01-07 10:47:19 +01:00
NEZNAMY d4c2cdf003 fix startup error when using placeholders with colors inside 2022-01-06 18:41:05 +01:00
NEZNAMY 2b529c37f5 fix rare concurrent modification 2022-01-06 17:55:16 +01:00
NEZNAMY 8599cd925b fix %vanished% refreshing with a much higher delay than it should on bungeecord 2022-01-05 14:32:22 +01:00
NEZNAMY 89f37b4b9e add synchronized modifier to stay safe 2022-01-04 16:46:40 +01:00
NEZNAMY f3136e85ee use equals instead of equalsIgnoreCase for better performance 2022-01-04 16:21:18 +01:00
NEZNAMY 845743073c fix wrong mysql checks 2022-01-04 15:33:36 +01:00
NEZNAMY b2c7bacaf9 fix errors when eventbus fails to load 2022-01-04 15:16:34 +01:00
NEZNAMY ed1673f032 fix #472 2022-01-04 15:15:53 +01:00
NEZNAMY bac9d443ea process all bungee events async 2022-01-03 20:32:28 +01:00
NEZNAMY 90e3868c08 use WeakHashMap for player mysql data & fix playeruuid not working 2022-01-03 15:53:07 +01:00
NEZNAMY c428572e01 add null check that doesn't really make sense, but someone needs it 2022-01-03 14:33:16 +01:00
NEZNAMY 884b5755ec 3.0.2-pre2 2022-01-02 22:47:51 +01:00
NEZNAMY 32d7366795 several fixes in redisbungee support when global playerlist is disabled 2022-01-02 22:47:11 +01:00
NEZNAMY 21bf4a5450 fix using % symbol without any placeholders resulting in %% being displayed 2022-01-02 22:38:59 +01:00
NEZNAMY 8042b02cf5 update README.md 2022-01-02 21:59:08 +01:00
NEZNAMY ae7cdd3982 no longer sending redundant packets on server/world switch 2022-01-01 22:03:19 +01:00
NEZNAMY 9ba945ad76 cache components on velocity as well 2022-01-01 21:51:18 +01:00
NEZNAMY 9cd04c3660 small optimization 2022-01-01 19:12:01 +01:00
NEZNAMY 444bc19781 fix pipeline injection detection on velocity 2022-01-01 18:23:46 +01:00
NEZNAMY eb08c4ba04 convert %afk% replacement when upgrading from free version as well 2022-01-01 14:34:57 +01:00
NEZNAMY 5846e24a29 improve placeholder API 2022-01-01 01:33:03 +01:00
NEZNAMY 9c2c09e433 remove debug messages 2021-12-31 14:20:08 +01:00
NEZNAMY 3c4329697b add PlayerLoadEvent#isJoin() method 2021-12-31 14:12:36 +01:00
NEZNAMY af9951d993 Merge branch 'master' of https://github.com/NEZNAMY/TAB 2021-12-31 13:54:52 +01:00
NEZNAMY 630f6df2f5 Merge pull request #467 from NamiUni/patch-1
Correctly display the number of players online.
2021-12-31 13:54:38 +01:00
Namiu/うにたろう fcf07b8e7b Correctly display the number of players online. 2021-12-31 21:49:12 +09:00
NEZNAMY 4824c2f626 send remove packet always, just to stay safe 2021-12-30 14:01:05 +01:00
NEZNAMY 2b6b2e1b63 create a constant to reduce memory allocations 2021-12-29 18:02:22 +01:00
NEZNAMY 6926c1e57f redisbungee should not add/remove players when global playerlist is disabled 2021-12-29 17:12:16 +01:00
NEZNAMY 6a00a7f1ca fix wrong map key type 2021-12-29 00:32:51 +01:00
NEZNAMY 288c3d4c87 add onClickCopyToClipBoard method to ChatModifier class 2021-12-29 00:27:11 +01:00
NEZNAMY ac497bcc41 ignore vanished players in layout 2021-12-28 22:31:45 +01:00
NEZNAMY 7b8d0d6845 fix startup error when fixes slots list is null 2021-12-28 22:05:44 +01:00
NEZNAMY a9a4589fae disable logging of invalid numbers due to false positive on BungeeCord before bridge placeholders are initialized 2021-12-28 18:53:29 +01:00
NEZNAMY b8f972a774 disable scoreboard score packet check due to problems it causes 2021-12-28 18:44:14 +01:00
NEZNAMY 305e388478 translate to a more user-friendly exception when bossbar.yml is missing when trying to convert configuration 2021-12-26 15:18:42 +01:00
NEZNAMY 97e7848a78 add catch for IllegalStateException which may be thrown when using plugman 2021-12-26 15:15:16 +01:00
NEZNAMY d33058a924 fix rare error caused by concurrent access 2021-12-26 15:14:53 +01:00
NEZNAMY eda3cc1f17 fix yellow number & belowname not appearing after client reset packet (on server switch) 2021-12-26 14:47:02 +01:00
NEZNAMY 47043ad4ad fix check if injection is loaded by external plugin 2021-12-24 01:10:26 +01:00
NEZNAMY acf20088cc do not send packet if not needed 2021-12-24 01:09:43 +01:00
NEZNAMY 374cb2766c initialize array just in case 2021-12-24 00:54:31 +01:00
NEZNAMY 31685b9ba5 unregister-before-register should always be disabled on proxy 2021-12-24 00:35:38 +01:00
NEZNAMY 722ff4ce52 3.0.2-pre1 2021-12-23 21:05:45 +01:00
NEZNAMY 161b375043 add floodgate as softdepend to avoid md5 message 2021-12-23 21:04:17 +01:00
NEZNAMY 2c14191cde do not send yellow number to players in disabled worlds/servers 2021-12-23 20:48:45 +01:00
NEZNAMY 486546918f (probably) fix #455 2021-12-23 19:18:09 +01:00
NEZNAMY 23d08e58a4 make help menu text configurable (#448) 2021-12-23 19:15:55 +01:00
NEZNAMY 4c4c34ecaa fix #453 2021-12-23 18:55:29 +01:00
NEZNAMY bd3f2fd70a initialize EventBus in declaration 2021-12-23 18:52:59 +01:00
NEZNAMY b80e42a635 fix NPE in custom lines 2021-12-23 15:32:19 +01:00
NEZNAMY 9446a034d0 fix layout resetting on server switch on velocity 2021-12-23 13:41:13 +01:00
NEZNAMY da0c6ab3fd remove unused import 2021-12-23 11:58:57 +01:00
NEZNAMY c1adb27ee5 remove PacketAPI class as it's no longer needed 2021-12-22 20:54:03 +01:00
NEZNAMY 980d3027e3 use defined constant 2021-12-22 19:23:21 +01:00
NEZNAMY 53ba533f9b small optimizations in reducing amount of sent packets 2021-12-22 19:20:27 +01:00
NEZNAMY e40827da65 don't send empty packets 2021-12-22 18:45:15 +01:00
NEZNAMY b9848b6a96 add debug message for player quit processing time 2021-12-22 18:09:03 +01:00
NEZNAMY 147593b11a use WeakHashMap to store player data in features to not need to remove it on quit 2021-12-22 18:08:47 +01:00
NEZNAMY 21652f928b remove online placeholder update on join/leave 2021-12-22 16:05:07 +01:00
NEZNAMY 5b0352aff0 only unregister teams, no need for scores as well 2021-12-22 15:18:21 +01:00
NEZNAMY b2da2fa096 update README.md 2021-12-22 15:04:12 +01:00
NEZNAMY 0cbb01a2a8 fix #447 2021-12-22 15:02:55 +01:00
NEZNAMY 179840968d Merge branch 'master' of https://github.com/NEZNAMY/TAB 2021-12-22 15:00:53 +01:00
NEZNAMY 3b9c1649a1 Merge pull request #452 from kacperleague9/v3
Setup workflow artifact
2021-12-22 14:47:41 +01:00
NEZNAMY 5750c7dbe1 Merge pull request #440 from NEZNAMY/common-events
Added platform agnostic event system
2021-12-22 14:01:16 +01:00
Callum Seabrook 7ceca359be Let's not recreate the event bus on reload 2021-12-22 12:42:48 +00:00
Callum Seabrook 0f8152a6ed Remove priorities, make events interfaces, and expose bus to API 2021-12-22 11:44:56 +00:00
Callum Seabrook b3258bb020 Added platform agnostic event system 2021-12-22 11:43:30 +00:00
Kacper Smoliński 4b2e705cbc Update build.yml 2021-12-22 08:43:48 +01:00
Kacper Smoliński 31e41382f8 Update build.yml 2021-12-22 08:39:30 +01:00
Kacper Smoliński ecda7192dc Update build.yml 2021-12-22 08:22:32 +01:00
Kacper Smoliński 9a48562b9f test gradle workflow 2021-12-22 08:20:18 +01:00
NEZNAMY c181b58bc1 fix NPE that makes no sense 2021-12-21 17:18:32 +01:00
NEZNAMY 2624afa2ed update README.md 2021-12-21 12:04:18 +01:00
Callum Seabrook 3690af1e35 Removed vanished placeholder from Krypton registry 2021-12-20 18:09:13 +00:00
NEZNAMY 98966d3b38 update README.md 2021-12-20 19:06:09 +01:00
NEZNAMY 41fdd16ce1 fix error when running /tab scoreboard show 2021-12-19 18:52:25 +01:00
NEZNAMY 1bc94859c0 Merge branch 'master' of https://github.com/NEZNAMY/TAB 2021-12-19 18:42:23 +01:00
Callum Seabrook 60f6f36437 Error manager good print stack trace bad 2021-12-19 13:16:43 +00:00
Callum Seabrook 82267ba16a Updated dependencies 2021-12-19 13:10:02 +00:00
NEZNAMY 14260deef8 make method synchronized to avoid rare bug caused by misconfiguration 2021-12-18 23:41:11 +01:00
NEZNAMY 8ba7342ccf register vanish placeholder in universal since implementation is same 2021-12-18 12:19:32 +01:00
NEZNAMY f6b935d78e fix double vanish status request on placeholder refresh 2021-12-18 12:17:39 +01:00
NEZNAMY 8cf3ae2091 ping spoof should only affect real players (#444) 2021-12-17 14:55:40 +01:00
NEZNAMY e02b997521 do not use %tps% in default config on bungeecord 2021-12-17 14:50:20 +01:00
NEZNAMY 229cef13c9 add cooldowns for attribute refreshing to prevent massive packet spam with many online players 2021-12-17 14:37:14 +01:00
NEZNAMY f503d6f896 move initialization to declaration to try to fix #442 2021-12-17 14:36:33 +01:00
NEZNAMY d851166bb7 add check for duplicated objectives and score updates without objectives 2021-12-17 13:56:44 +01:00
NEZNAMY 638a861350 display plugin message content in sent packets logging 2021-12-16 20:41:09 +01:00
NEZNAMY 20d7e4cbb0 fix entries with same value skipped in /tab cpu 2021-12-16 20:40:27 +01:00
NEZNAMY 36ccedd7c6 remove unused import 2021-12-16 18:08:38 +01:00
NEZNAMY 31854ba7a6 fix world being requested from bridge twice on reload 2021-12-16 18:07:22 +01:00
NEZNAMY 2639f07f5c recode and fixed 11 issues in config conversion 2021-12-16 17:56:29 +01:00
NEZNAMY b6e13f557f small fix in default config 2021-12-16 17:02:41 +01:00
NEZNAMY 6333d90059 remove redundant check 2021-12-16 17:02:27 +01:00
NEZNAMY fea5d0ec56 Merge branch 'master' of https://github.com/NEZNAMY/TAB 2021-12-16 11:07:50 +01:00
NEZNAMY c77f02d1fd disable LD hook until they fix the repository 2021-12-16 11:04:43 +01:00
NEZNAMY c498965cae add API to return player's active scoreboard 2021-12-16 11:03:54 +01:00
Callum Seabrook cdaa77071d Updated Krypton to 0.59.2 2021-12-14 11:48:25 +00:00
NEZNAMY 6a72678c8d simplify 2021-12-14 10:19:47 +01:00
NEZNAMY bb67fc622f fix errors when redisbungee is not enabled correctly 2021-12-13 18:22:16 +01:00
NEZNAMY 5b50c02d93 fix replacements not working in some placeholders 2021-12-13 16:36:54 +01:00
NEZNAMY ffec7e3266 fix world/server groups loading in header/footer 2021-12-13 14:09:56 +01:00
NEZNAMY 039c1e7027 fix velocity compilation 2021-12-11 21:27:29 +01:00
NEZNAMY b27a21b3b8 remove unused variable and imports 2021-12-11 20:03:44 +01:00
NEZNAMY 2bcb5f617e create constants for feature names 2021-12-11 19:51:11 +01:00
NEZNAMY 7bf5294f9f remove redundant check 2021-12-11 17:43:49 +01:00
NEZNAMY c2fd1940f0 separate character width file loading into another method 2021-12-11 17:41:35 +01:00
NEZNAMY 2d095ce6db fix compilation 2021-12-11 17:24:57 +01:00
NEZNAMY e88bc36fca remove unused field 2021-12-11 17:23:20 +01:00
NEZNAMY 5613ea4f77 fix placeholders not updating in replacements 2021-12-11 17:12:58 +01:00
NEZNAMY 9c41599d60 remove redundant escape (again) 2021-12-11 16:04:40 +01:00
NEZNAMY 5f8dd869e0 remove redundant escape in RGB patterns 2021-12-11 15:58:45 +01:00
NEZNAMY fb17df0b7e add registered placeholders to command complete in parse command 2021-12-11 14:53:38 +01:00
NEZNAMY 900ae83028 3.0.1 2021-12-11 12:11:58 +01:00
NEZNAMY 2c09db25b7 Merge pull request #432 from LeonMangler/patch-1
Load TAB after PremiumVanish
2021-12-11 12:10:26 +01:00
NEZNAMY 004e53fa29 Merge pull request #437 from Tanguygab/master
fix NPE when executing scoreboard cmd from console
2021-12-11 12:10:01 +01:00
NEZNAMY e285b143d5 3.0.0-pre3 2021-12-11 00:15:44 +01:00
NEZNAMY f78eb0ffed add API to change group temporarily 2021-12-11 00:14:13 +01:00
NEZNAMY 4d761e1d6e allow decimals in sorting by placeholder 2021-12-11 00:04:20 +01:00
NEZNAMY 4a8c975319 fix startup on bungeecord when assigning groups by permissions AND using bukkit permission manager 2021-12-10 23:45:55 +01:00
NEZNAMY fe56b7ed2d add LP group event listener as well & fix refreshing when assigning by permissions 2021-12-10 23:21:40 +01:00
NEZNAMY 5a74654807 fix scoreboard being enabled by default when converting config 2021-12-10 22:16:08 +01:00
NEZNAMY 533ce4a529 remove unused import 2021-12-10 20:55:19 +01:00
Tanguygab 4ea3780114 fix NPE when executing cmd from console 2021-12-10 19:36:45 +01:00
NEZNAMY 0d229ee26c do not send objective changes before they are registered 2021-12-10 18:25:56 +01:00
NEZNAMY 29079ecad5 add 1.18.1 to recognized versions 2021-12-10 16:01:21 +01:00
NEZNAMY ea88401a58 fix NPE when placeholder returns null 2021-12-10 15:25:17 +01:00
NEZNAMY 298cef4d1f fix startup error if replacement value is null 2021-12-10 15:24:45 +01:00
NEZNAMY a51e9495de add player load status checks to other placeholder types as well 2021-12-10 15:12:43 +01:00
NEZNAMY eead8ca1e2 attempt to avoid rare concurrent modification 2021-12-10 15:11:39 +01:00
NEZNAMY a30712bc38 unregister on bungeecord as well to avoid issues with new bukkit-focused check 2021-12-10 14:56:06 +01:00
NEZNAMY 07b443fb21 actually fixed the error 2021-12-10 14:54:23 +01:00
NEZNAMY 61d927305c add very likely useless check to try to prevent errors 2021-12-10 13:24:29 +01:00
NEZNAMY 8f21c2f27d fix mohist (again) 2021-12-09 22:34:20 +01:00
NEZNAMY 9fcf76e0c4 3.0.1-pre2 2021-12-09 14:53:16 +01:00
NEZNAMY 773afe2fb5 fix _DEFAULT_ not being used when using MySQL (#433) 2021-12-09 14:05:28 +01:00
NEZNAMY 83ce5bd476 Drop <#RRGGBB> format due to conflict with the gradient pattern starting the same way (#430) 2021-12-09 13:50:04 +01:00
NEZNAMY 75a341c240 fix placeholder refreshing being broken for time travelers 2021-12-09 13:44:51 +01:00
NEZNAMY 921a793b5c return identifier instead of null for sync placeholders before initialized 2021-12-09 13:05:31 +01:00
NEZNAMY c1b92868cd fix world forwarding on bungeecord 2021-12-08 20:39:51 +01:00
NEZNAMY 94d19d728d fix condition refresh when only trigger placeholders are used inside 2021-12-08 20:38:39 +01:00
NEZNAMY 8ef518f7e2 add null check for tablist properties when refreshing 2021-12-08 19:11:43 +01:00
NEZNAMY 79fd1148a9 add back animation format converting from 2.8.10 -> 2.9.0 2021-12-08 18:51:00 +01:00
NEZNAMY 313ba8d765 attempt to fix error caused by concurrent access 2021-12-08 18:43:22 +01:00
NEZNAMY c12c422357 fix NPE when editing unknown bossbar 2021-12-08 18:37:56 +01:00
NEZNAMY b14c97d18a add try/catch for ConcurrentModificationException 2021-12-08 18:34:39 +01:00
NEZNAMY 2fe345cb65 add back "barcolors" animation since it's used in default config 2021-12-08 18:11:03 +01:00
NEZNAMY 96ff81370c fix animations lagging when using nested animations 2021-12-08 18:09:48 +01:00
Leon Mangler c4a1f41673 Load TAB after PremiumVanish
When BungeeTabPlayer#isVanished uses PV's API, PV needs to actually be enabled, not just loaded. A soft-dependency should ensure that PV is fully enabled before TAB's onEnable() uses the API.
2021-12-08 17:37:13 +01:00
NEZNAMY ca4c8ccb20 Merge branch 'master' of https://github.com/NEZNAMY/TAB 2021-12-08 15:57:51 +01:00
Callum Seabrook 7471006f8a Updated to Krypton 0.58 2021-12-07 18:14:23 +00:00
NEZNAMY 896c709824 fix small memory leak 2021-12-04 22:41:55 +01:00
NEZNAMY 473a37cb6a fix NPE 2021-12-04 22:29:10 +01:00
NEZNAMY 9e84d96051 Add back %essentialsnick% for all the crybabies we get in #community-support who didn't even bother reading changelog of a major plugin update which is supposed to hint big changes were made and the changelog should be read. 2021-12-04 20:56:30 +01:00
NEZNAMY 019466d84d remove unused code 2021-12-04 19:27:02 +01:00
NEZNAMY c222061529 slightly optimize width calculation & partially avoid #347 2021-12-04 19:15:36 +01:00
NEZNAMY acdd99404c use different functions for file operations 2021-12-04 19:08:58 +01:00
NEZNAMY 799381bff3 properly convert objects to string 2021-12-04 19:02:11 +01:00
NEZNAMY b3654977ca cast to long 2021-12-04 18:59:03 +01:00
NEZNAMY b67d1928b5 add "final" modifier 2021-12-04 18:58:00 +01:00
NEZNAMY 052748d2b9 simplify 2021-12-04 18:47:18 +01:00
NEZNAMY e265187ff8 call function instead of duplicating code 2021-12-04 18:10:44 +01:00
NEZNAMY c622a95550 use fixed interval to avoid startup error 2021-12-04 17:09:40 +01:00
NEZNAMY 94d71a245b Merge branch 'master' of https://github.com/NEZNAMY/TAB 2021-12-04 13:28:23 +01:00
NEZNAMY a9403269be add LP softdepend on bungeecord 2021-12-04 13:26:16 +01:00
Callum Seabrook dfe6768eb5 Moved YamlAssist to Krypton repository version 2021-12-04 12:19:55 +00:00
Callum Seabrook d88bf65806 Setup publishing for all but the JAR module 2021-12-04 12:05:35 +00:00
NEZNAMY 30929062d6 what happened here 2021-12-04 12:20:56 +01:00
NEZNAMY 747e3d692d clear registered teams on login packet 2021-12-04 12:16:07 +01:00
Callum Seabrook 1d3ecbb7ed Somehow forgot that display name is now nullable 2021-12-04 10:28:25 +00:00
Callum Seabrook 39b88b0dd5 Updated Krypton to 0.57 2021-12-04 10:24:18 +00:00
NEZNAMY d13d3eb055 bridge placeholders will return identifier until they are initialized instead of null 2021-12-03 16:21:04 +01:00
NEZNAMY f8f72b9074 rgb support for remaining players text as well 2021-12-03 15:47:51 +01:00
NEZNAMY a9d0b0a0ae 3.0.1-pre1 2021-12-03 15:38:46 +01:00
NEZNAMY 37bd624537 double-fix for bungeecord bug kick 2021-12-03 15:37:23 +01:00
NEZNAMY e19f4ed771 reorder bungee.yml to match PluginDescription.java order 2021-12-03 12:11:27 +01:00
NEZNAMY c828fa8d52 Merge remote-tracking branch 'origin/master' 2021-12-03 12:00:36 +01:00
NEZNAMY 9e080a5f5c add argument check 2021-12-03 12:00:20 +01:00
NEZNAMY 7d7d4c05ab remove debug message 2021-12-03 11:59:34 +01:00
NEZNAMY d4c7044708 add proper color support to layout more players text 2021-12-02 20:36:38 +01:00
Callum Seabrook 52dd8c7c8b Added run folder to gitignore for test servers 2021-12-02 18:49:11 +00:00
NEZNAMY 398ac8b6cf register invalid relational placeholders on proxy correctly, so it doesn't throw errors 2021-12-02 18:12:53 +01:00
NEZNAMY 911792b214 Merge branch 'master' of https://github.com/NEZNAMY/TAB 2021-12-02 13:50:21 +01:00
Callum Seabrook 8e54989502 Setup new publish repository for API 2021-12-02 12:49:11 +00:00
NEZNAMY 4f16579063 support mineskin by uuid 2021-12-02 11:01:19 +01:00
NEZNAMY e1f1698413 fix startup on mohist 1.12.2 2021-12-02 10:09:25 +01:00
NEZNAMY 5eb999b98a fixed typos, capital letters, more docs 2021-12-01 15:52:18 +01:00
NEZNAMY 5e7af835d8 %online% cannot be trigger due to vanish checks 2021-12-01 10:12:05 +01:00
NEZNAMY f19f2c5a20 add conversion for multiple groups with same sorting priority 2021-12-01 08:57:24 +01:00
NEZNAMY ff2aceb781 fix placeholder in default layout.yml 2021-12-01 08:50:37 +01:00
NEZNAMY dc1410adbb update README 2021-11-30 22:05:57 +01:00
NEZNAMY 49af38f3c5 3.0.0 2021-11-30 19:42:48 +01:00
NEZNAMY 09cf4dcd07 actually fix krypton compilation 2021-11-30 19:42:37 +01:00
Callum Seabrook 95c92285b9 Fixed Krypton 2021-11-30 18:05:07 +00:00
NEZNAMY 81b7be9205 remove tpsbar from default config (it's on wiki now) 2021-11-30 18:19:06 +01:00
NEZNAMY c308cde139 fix condition default value of "false" 2021-11-29 18:47:27 +01:00
NEZNAMY 49889cd2cc fix %afk% conversion 2021-11-29 12:33:28 +01:00
NEZNAMY d0ea71f0c9 fix method name 2021-11-28 21:42:25 +01:00
NEZNAMY a6f93dae1e Merge pull request #418 from KryptonMC/v3
Added blossom for plugin version source replacement
2021-11-28 13:34:09 +01:00
Callum Seabrook f968999393 Added blossom for plugin version source replacement 2021-11-28 12:21:15 +00:00
NEZNAMY 37348ed1f4 3.0.0-pre4 2021-11-28 12:19:41 +01:00
NEZNAMY 8602d39d7c fix mysql & load playerdata on every join 2021-11-28 12:14:34 +01:00
NEZNAMY fd41390e20 Merge pull request #417 from NEZNAMY/revert-416-v3
Revert "Switched to adapters over whacky NMSStorage"
2021-11-28 00:44:36 +01:00
NEZNAMY 712064bced Revert "Switched to adapters over whacky NMSStorage" 2021-11-28 00:44:25 +01:00
NEZNAMY 771a696de0 Merge pull request #416 from KryptonMC/v3
Switched to adapters over whacky NMSStorage
2021-11-28 00:02:01 +01:00
Callum Seabrook a56cbcc2f4 Added 1_17_R1 adapter 2021-11-27 23:01:11 +00:00
Callum Seabrook 8e659a2c97 Switched to adapters over whacky NMSStorage 2021-11-27 22:41:04 +00:00
NEZNAMY 423bd0adb8 1.18 2021-11-27 21:28:41 +01:00
NEZNAMY 1987848f8b fix weird NPE 2021-11-27 21:28:36 +01:00
NEZNAMY 13ac8541f2 fix utf symbol in default config 2021-11-27 21:04:31 +01:00
NEZNAMY 0e42d61ffa add %tab_scoreboard_name% placeholder 2021-11-27 18:09:35 +01:00
NEZNAMY 64b4cb1bb9 fix component cloning missing color 2021-11-27 14:08:13 +01:00
NEZNAMY efd723deec add else statement 2021-11-26 21:19:46 +01:00
NEZNAMY 4c2d2068a4 Merge pull request #415 from AlessioGr/v3
Improve TAB Completion for /tab width command
2021-11-25 11:14:37 +01:00
AlessioGr 32529dd7e9 Improve TAB Completion for /tab width command
Signed-off-by: AlessioGr <alessio@gravili.de>
2021-11-25 11:12:04 +01:00
NEZNAMY 3ad54d5f21 Merge pull request #414 from AlessioGr/v3
Further improve Width command
2021-11-25 10:56:38 +01:00
AlessioGr 6d81c37645 Further improve Width command
Signed-off-by: AlessioGr <alessio@gravili.de>
2021-11-25 10:50:53 +01:00
NEZNAMY da1c51eb5b Merge pull request #413 from AlessioGr/v3
Improve /tab width command
2021-11-25 10:18:26 +01:00
AlessioGr 70c37fb9f2 fix Codacy Static Code Analysis warning
Signed-off-by: AlessioGr <alessio@gravili.de>
2021-11-25 10:17:01 +01:00
AlessioGr 5e565be35b Improve /tab width command
Signed-off-by: AlessioGr <alessio@gravili.de>
2021-11-25 10:07:32 +01:00
NEZNAMY eeb39ca228 code style 2021-11-25 09:09:56 +01:00
NEZNAMY 2d5bc2bc52 on load as well 2021-11-24 15:08:47 +01:00
NEZNAMY 4fb517c8cb fix #412 2021-11-24 15:08:07 +01:00
NEZNAMY de376cd9f4 fix onServerChange not being called when it should be 2021-11-24 15:06:52 +01:00
NEZNAMY d939984f08 refresh animations at their original rate while keeping sync 2021-11-24 14:47:19 +01:00
NEZNAMY 89edcb7a38 fix %online_<server>% placeholders 2021-11-24 14:17:53 +01:00
NEZNAMY ac16a0fb26 set gradients first to fix issue from latest new format 2021-11-24 07:39:39 +01:00
NEZNAMY 9189fb2082 3.0.0-pre3 2021-11-23 00:03:38 +01:00
NEZNAMY a2e7670560 Merge branch 'v3' of https://github.com/NEZNAMY/TAB into v3 2021-11-22 23:13:55 +01:00
NEZNAMY 7c9f14b4d9 Merge pull request #411 from KryptonMC/v3
Added Java components for publishing and sources and javadoc jars
2021-11-22 23:13:29 +01:00
NEZNAMY f05849aada fix error on reload 2021-11-22 21:14:00 +01:00
NEZNAMY 66e91ee4e8 don't set numbers if disabled 2021-11-22 21:10:01 +01:00
NEZNAMY 015d8de101 fix error with static lines 2021-11-22 21:08:54 +01:00
Callum Seabrook 69e575e0ef Added Java components for publishing and sources and javadoc jars 2021-11-22 18:46:14 +00:00
NEZNAMY 6c84e49a7f improve default files 2021-11-22 10:01:37 +01:00
NEZNAMY f4e5e8fd72 fix startup error 2021-11-22 09:51:13 +01:00
NEZNAMY fe8c738196 only catch ClassNotFoundException in fabric check 2021-11-22 09:37:20 +01:00
NEZNAMY 665dfac5ea remove unnecessary String.valueOf 2021-11-21 21:50:33 +01:00
NEZNAMY 57f9806819 fix /tab reload breaking external placeholders 2021-11-21 21:32:44 +01:00
NEZNAMY 7874135014 update scoreboard scores when line hides/shows 2021-11-21 21:32:28 +01:00
NEZNAMY f86e7b17ef add another rgb format 2021-11-21 21:04:51 +01:00
NEZNAMY 3803173745 Merge branch 'v3' of https://github.com/NEZNAMY/TAB into v3 2021-11-21 13:31:56 +01:00
NEZNAMY 6af30bf6df improve placeholder registration at runtime 2021-11-21 13:31:43 +01:00
NEZNAMY 7bea6a214a Merge pull request #410 from KryptonMC/v3
Updated Krypton, added vehicle support, and fixed many features being non-functional
2021-11-21 13:30:51 +01:00
Callum Seabrook 9becc35fa1 Fixed many features in Krypton 2021-11-21 12:24:52 +00:00
NEZNAMY 7212a4cd7f round health up 2021-11-21 12:09:24 +01:00
NEZNAMY c604640ab9 fix placeholder registration at runtime 2021-11-21 11:23:13 +01:00
NEZNAMY 23fee2b7b7 fix LP suffix placeholder 2021-11-20 23:44:32 +01:00
NEZNAMY c3d521960e only call onDisable if placeholder was used 2021-11-20 23:09:44 +01:00
NEZNAMY 484396cce1 move %online% update to a better spot and fix NPE 2021-11-20 22:50:49 +01:00
NEZNAMY ce4dec6136 disable krypton compilation 2021-11-20 21:13:59 +01:00
NEZNAMY 67f42f518e implement trigger placeholders 2021-11-20 21:13:50 +01:00
Callum Seabrook 0a0e947282 Added option to specify the config name to use 2021-11-20 19:46:26 +00:00
Callum Seabrook 8a4127574a Fixed NPEs from packets and formatting on Spark placeholders 2021-11-20 18:33:20 +00:00
Callum Seabrook b29d3e5d6a Updated to Krypton 0.50 and made vehicle refresher actually work 2021-11-20 17:41:46 +00:00
NEZNAMY daaece8d36 Merge branch 'v3' of https://github.com/NEZNAMY/TAB into v3 2021-11-20 11:48:49 +01:00
NEZNAMY 0e5b1aaf0e obtain channel instance 2021-11-20 11:48:28 +01:00
NEZNAMY e672e49435 Merge pull request #409 from KryptonMC/v3
Updated Krypton to latest and added support for newest changes
2021-11-20 11:13:50 +01:00
NEZNAMY b9a38a486d make packetBuilder field editable 2021-11-20 10:59:21 +01:00
Callum Seabrook d34c46658d Added refresh display names to refresher constructors 2021-11-19 23:54:48 +00:00
Callum Seabrook e120b647ea Cleaned up Krypton platform and added support for new features 2021-11-19 23:52:46 +00:00
Callum Seabrook 936b8ae903 Updated to Krypton 0.48.1 2021-11-19 23:52:19 +00:00
NEZNAMY 147fe2c277 fix krypton 2021-11-20 00:14:06 +01:00
NEZNAMY 84413aa490 define refresh display name in super() call 2021-11-19 23:13:19 +01:00
NEZNAMY 3fea95f8c5 instance is never null 2021-11-19 22:51:53 +01:00
NEZNAMY b839bce010 change display name and split elsewhere in cpu output 2021-11-19 22:51:05 +01:00
NEZNAMY fc70c098a9 add "final" modifier to all fields possible 2021-11-18 23:00:09 +01:00
NEZNAMY 7b74d73a9a add getter for defined lines into API 2021-11-18 20:38:54 +01:00
NEZNAMY 44ee3bbdfe using shortcuts 2021-11-18 18:30:05 +01:00
NEZNAMY 673285baf8 copy files automatically in UTF-8 encoding 2021-11-18 15:47:10 +01:00
NEZNAMY 2b22e327e3 cache player name widths in aligned suffix
and maybe introduce new bugs, who knows
2021-11-18 15:20:25 +01:00
NEZNAMY 95d65236f6 in NPE 2021-11-18 14:11:02 +01:00
NEZNAMY 8971172444 fix typo in messages 2021-11-18 14:08:05 +01:00
NEZNAMY 6ff5836ca9 fix NPE on fabric 2021-11-18 12:01:47 +01:00
NEZNAMY 8e9a4e9601 use the other way of checking server minor version 2021-11-18 11:54:17 +01:00
NEZNAMY 1ce5c05622 use more universal code 2021-11-18 11:48:52 +01:00
NEZNAMY 7f83e83aed refresh boats in vehicle refresher as well 2021-11-18 11:33:37 +01:00
NEZNAMY e677e7345b remove vehicle on quit 2021-11-18 11:18:11 +01:00
NEZNAMY ae52aa2c55 instant vehicle enter teleport instead of an animation 2021-11-18 11:13:40 +01:00
NEZNAMY b83f6e93bf refreshing vehicles and preview using placeholder engine instead of refreshing task 2021-11-18 11:01:37 +01:00
NEZNAMY 3606ee6275 fix startup on fabric 2021-11-17 21:28:48 +01:00
NEZNAMY 70571cccfe replace stacked reflection exceptions with ReflectiveOperationException 2021-11-17 21:20:12 +01:00
NEZNAMY 87fe02b0b4 attempt to clean up NMSStorage class 2021-11-17 21:05:23 +01:00
NEZNAMY 8e48087f65 load config options in field declarations instead of constructors 2021-11-17 18:45:58 +01:00
NEZNAMY 4e7c3ee2f1 remove duplicated file 2021-11-17 13:33:17 +01:00
NEZNAMY 60a7549662 move constants 2021-11-17 13:32:51 +01:00
NEZNAMY fe7c9488d8 rework property API per-feature 2021-11-16 16:51:31 +01:00
NEZNAMY b7d39e55b6 send armor stand destroy without delay as well 2021-11-16 16:10:51 +01:00
NEZNAMY 805d8030b4 add option to disable unlimited nametags for specific player using API 2021-11-16 16:08:06 +01:00
NEZNAMY 4c6fc5d2d2 fix #408
caused by unregister-register operation on server switch being removed in v3 due to per-world/per-server scoreboards being removed
2021-11-16 12:18:30 +01:00
NEZNAMY 913b8ee238 avoid duplicating code 2021-11-16 11:49:54 +01:00
NEZNAMY 3688e4d938 Merge pull request #407 from KryptonMC/gradle
Gradle!
2021-11-15 21:58:41 +01:00
Callum Seabrook 03842db57f Removed SonarQube and updated workflow to match 2021-11-15 20:56:19 +00:00
Callum Seabrook 6f34157a84 Added inclusion for gradle wrapper 2021-11-15 20:56:19 +00:00
Callum Seabrook 86a82faa15 Fixed Krypton and Velocity annotation processors not working 2021-11-15 20:56:19 +00:00
Callum Seabrook 2e506b72a6 Fixed incorrect shading 2021-11-15 20:56:19 +00:00
Callum Seabrook d2ba0a22d5 These should be this 2021-11-15 20:56:19 +00:00
Callum Seabrook cfc3488a8c Switched build to Gradle 2021-11-15 20:56:17 +00:00
NEZNAMY 0463e82470 Merge pull request #406 from NEZNAMY/revert-405-v3
Revert "Made Krypton a separate JAR"
2021-11-15 18:12:08 +01:00
NEZNAMY 93b151b377 Revert "Made Krypton a separate JAR" 2021-11-15 18:11:47 +01:00
NEZNAMY 1c6fa28d87 Merge pull request #405 from KryptonMC/v3
Made Krypton a separate JAR
2021-11-15 18:06:23 +01:00
Callum Seabrook 71d01263b5 Made Krypton a separate JAR 2021-11-15 17:04:50 +00:00
NEZNAMY 23268907bd compile krypton with java 8 2021-11-15 17:22:43 +01:00
NEZNAMY 076e3061b3 fix pauseTeamHandling not disabling unlimited nametags 2021-11-15 17:15:33 +01:00
NEZNAMY d9f8fa2ed0 split feature elements in cpu output 2021-11-15 16:03:13 +01:00
NEZNAMY c33f9a6d61 drop latency refresher since it doesn't work with new change anymore 2021-11-15 15:49:57 +01:00
NEZNAMY 07f71f3d4d add support for CMI's {#RRGGBB<>} shortcut 2021-11-15 15:40:46 +01:00
NEZNAMY 48f8a4c718 fix spectators exposed for players who joined
caused by pipeline injection being late (async)
2021-11-15 15:03:33 +01:00
NEZNAMY ff29b1badf remove deleted options from conversion 2021-11-15 14:54:49 +01:00
NEZNAMY 05d3233c03 fix typo 2021-11-15 14:50:19 +01:00
NEZNAMY 203b5d925b fix wrong argument 2021-11-15 14:30:08 +01:00
NEZNAMY b2f6338b0b fix krypton 2021-11-15 14:12:32 +01:00
NEZNAMY 26e526d5fe create constants for permission checks 2021-11-15 13:55:03 +01:00
NEZNAMY 054d6c58cb rename class 2021-11-15 13:22:42 +01:00
NEZNAMY cc6b5ea0f5 add missing repository 2021-11-15 13:16:32 +01:00
NEZNAMY 495985ace8 Merge branch 'v3' of https://github.com/NEZNAMY/TAB into v3 2021-11-15 12:36:55 +01:00
NEZNAMY a304853a7b rework command output messages and rename file translation.yml -> messages.yml 2021-11-15 12:36:52 +01:00
NEZNAMY eb2c58f0e9 Merge pull request #404 from KryptonMC/feature/krypton
Added support for Krypton
2021-11-15 12:09:31 +01:00
NEZNAMY 125429bccd ignore case when getting player by name 2021-11-15 11:23:33 +01:00
Callum Seabrook c5bf1b65ba Added online placeholders and made spark placeholders server placeholders 2021-11-14 15:09:35 +00:00
Callum Seabrook 5286a018df Added support for Krypton 2021-11-14 15:09:34 +00:00
NEZNAMY c408744385 add back %% transforming into a single % 2021-11-14 14:19:05 +01:00
NEZNAMY 5efd5f310f change names of slots 2021-11-13 23:52:15 +01:00
NEZNAMY e35c14d8e3 measure NMS hook load time 2021-11-13 22:07:55 +01:00
NEZNAMY d49fcc2307 properly send action bar messages on velocity 2021-11-13 18:48:49 +01:00
NEZNAMY afc1dfcf10 remove redundant initialization 2021-11-13 14:49:17 +01:00
NEZNAMY 2dd06ed0c3 cleanup in placeholder registration 2021-11-13 13:35:28 +01:00
NEZNAMY 2ca223cd2c drop AntiAFKPlus hook 2021-11-13 13:24:29 +01:00
NEZNAMY f6cf018625 update supported versions 2021-11-13 13:18:45 +01:00
NEZNAMY 1d7806c96e fill exception message 2021-11-12 17:18:05 +01:00
NEZNAMY 650fd892f8 fix error when output is not a number 2021-11-12 16:52:52 +01:00
NEZNAMY 83710b14b1 add "me" player name completion to /tab parse 2021-11-12 16:47:49 +01:00
NEZNAMY 1eeb22f579 do not send score changes when player is not loaded yet 2021-11-12 16:47:31 +01:00
NEZNAMY 1d70e73106 add null check for redisbungee api instance 2021-11-12 13:57:37 +01:00
NEZNAMY 9d93b52be1 only process nicking once instead of for every online player 2021-11-12 13:21:52 +01:00
NEZNAMY 4431772007 create instance of CollisionManager on 1.8 to prevent NPEs 2021-11-12 13:15:14 +01:00
NEZNAMY f17fafbb48 shorter alternative 2021-11-11 22:41:31 +01:00
NEZNAMY 8d30399f33 initial support for nick plugins 2021-11-11 22:20:59 +01:00
NEZNAMY 5feb934a4a add space 2021-11-11 18:06:30 +01:00
NEZNAMY 9466b96f69 properly forward team flags in packets 2021-11-11 13:08:40 +01:00
NEZNAMY ad00d1b145 only start layout feature on 1.8+ 2021-11-11 13:08:06 +01:00
NEZNAMY 89ea9ba8a0 return empty list instead of null 2021-11-11 11:57:24 +01:00
NEZNAMY e08fb3eeb6 fix skin saving 2021-11-11 11:52:58 +01:00
NEZNAMY 5800c8910e split skinmanager class into multiple 2021-11-11 11:48:55 +01:00
NEZNAMY 1ec77cb0b5 don't refresh collision if no disguise plugin is available 2021-11-11 11:09:37 +01:00
NEZNAMY 3329514066 decrease default time to 10000 since it can't get higher than that anyway 2021-11-11 10:41:11 +01:00
NEZNAMY addc3f322f load feature after registering placeholders correctly to avoid wrong registration 2021-11-11 10:40:56 +01:00
NEZNAMY 79dcd16d37 only refresh visibility if 1.8.x clients are accepted 2021-11-11 10:09:58 +01:00
NEZNAMY 802c72a9aa don't refresh collision if it's disabled already 2021-11-10 22:53:01 +01:00
NEZNAMY bf96676df5 properly update collision on api call 2021-11-10 22:48:21 +01:00
NEZNAMY d245b93196 remove unnecessary this. 2021-11-10 21:51:59 +01:00
NEZNAMY 6f96b555e9 split collision management into separate class + placeholder based refreshing instead of repeating task 2021-11-10 21:47:48 +01:00
NEZNAMY 872700d1be create placeholder for visibility check instead of refreshing task 2021-11-10 21:01:07 +01:00
NEZNAMY 1ac08ee1f2 try/catch for more exception types 2021-11-10 20:34:06 +01:00
NEZNAMY ada433150c fix forceTeamName method not working 2021-11-10 13:58:02 +01:00
NEZNAMY ee40a69e57 use cleaner alternative 2021-11-10 13:57:37 +01:00
NEZNAMY d6fcaffa99 add team name changing support to redisbungee 2021-11-10 13:45:42 +01:00
NEZNAMY fe4bdda549 fix property name in debug output 2021-11-10 13:01:08 +01:00
NEZNAMY 6a1016a383 move &r 2021-11-10 12:59:14 +01:00
NEZNAMY c53f08d0a7 surround deserialize method with try/catch instead of throwing 2021-11-10 11:59:51 +01:00
NEZNAMY 2807ff30e6 fix premiumconfig not being deleted 2021-11-10 11:23:41 +01:00
NEZNAMY cf3b9c21dd apply rgb formats later so raw value returns actual raw value 2021-11-09 11:07:28 +01:00
NEZNAMY ee616412d6 simplify 2021-11-08 19:13:45 +01:00
NEZNAMY 341c6f8722 3.0.0-pre2 2021-11-07 15:27:25 +01:00
NEZNAMY 978df99e5c create dummy placeholder instead of thread for cpu stats reset 2021-11-06 19:19:03 +01:00
NEZNAMY a91e2a90b4 fix substring size 2021-11-06 15:25:44 +01:00
NEZNAMY 49c54c6a58 Merge pull request #402 from Tanguygab/v3
added texture skin type for Layout SkinManager
2021-11-04 12:17:38 +01:00
Tanguygab 6b72163dbe added texture: skin type 2021-11-04 12:09:14 +01:00
NEZNAMY 93a04c64d2 fix startup error with relational placeholders 2021-11-03 22:41:15 +01:00
NEZNAMY d01d814778 show configured fake ping instead of 0 2021-11-02 21:33:39 +01:00
NEZNAMY af15c256b9 use more accurate task name 2021-11-02 21:32:16 +01:00
NEZNAMY dde0056ba2 fix nested placeholders not working in replacements 2021-11-02 20:34:25 +01:00
NEZNAMY dede5b548c reduce memory allocations of property loading 2021-11-02 14:55:02 +01:00
NEZNAMY 7be0831e7c do not use split function if not needed 2021-11-02 14:33:54 +01:00
NEZNAMY 660275dc74 change List to array 2021-11-02 13:37:45 +01:00
NEZNAMY 957e01fbf2 dynamic placeholder refresh task interval based on fastest placeholder 2021-11-02 00:41:14 +01:00
NEZNAMY b01ffaf763 simplify 2021-11-02 00:00:54 +01:00
NEZNAMY 8d6d53a448 use stringbuilder 2021-11-01 22:34:45 +01:00
NEZNAMY 8f13bfcb4a merge ifs 2021-11-01 22:32:29 +01:00
NEZNAMY ddf45bf7a7 remove unnecessary {} 2021-11-01 22:31:36 +01:00
NEZNAMY 9fabeac7e1 remove redundant cast 2021-11-01 22:30:15 +01:00
NEZNAMY 758b1f9365 simplify return 2021-11-01 22:29:34 +01:00
NEZNAMY 0050d34d0e remove redundant check 2021-11-01 22:27:09 +01:00
NEZNAMY fd547383c4 remove unused methods 2021-11-01 22:02:35 +01:00
NEZNAMY edb640f496 add expected team name into logging 2021-11-01 21:38:35 +01:00
NEZNAMY 4569fa3e86 optimize method 2021-11-01 21:22:58 +01:00
NEZNAMY 33af012352 remove redundant call 2021-11-01 20:58:42 +01:00
NEZNAMY 5cc6688d9c optimize disabled world checking for unlimited nametags 2021-11-01 20:45:40 +01:00
NEZNAMY f8a5f610bb remove redundant null check 2021-11-01 18:57:12 +01:00
NEZNAMY 877ac8adc7 GroupManager refreshing engine change from repeating task to placeholder core 2021-11-01 18:22:36 +01:00
NEZNAMY 39040c263e refresh world on switch instead of periodically on proxy 2021-11-01 17:03:05 +01:00
NEZNAMY 08759762a1 fix global playerlist on velocity 2021-11-01 15:50:12 +01:00
NEZNAMY 7897fbcf36 fix tablist format on server switch on velocity 2021-11-01 15:45:09 +01:00
NEZNAMY ce93bb1afb fix NPE with component sent to console 2021-11-01 15:12:44 +01:00
NEZNAMY 3e8085f460 fix sorting startup with layout on proxy 2021-11-01 15:06:09 +01:00
NEZNAMY 2ab201d278 print LibsDisguises hook error once instead of spamming it 2021-11-01 14:42:09 +01:00
NEZNAMY ccdac844b9 move plugin info component to command class 2021-11-01 14:39:34 +01:00
NEZNAMY 4474939c51 small code structure change 2021-11-01 14:19:31 +01:00
NEZNAMY f32975ccb0 decrease wither distance to 60 blocks 2021-11-01 14:17:05 +01:00
NEZNAMY 4f92b22955 use placeholder refreshing engine for bossbar updating instead of repeating task
this will also reduce teleports if players don't move
2021-11-01 14:07:24 +01:00
NEZNAMY 1d8ac0ab45 warn in console about Tablisknu compatibility issue 2021-11-01 12:52:33 +01:00
NEZNAMY 4cfc5258b2 add separate cpu measuring of hasPermission method 2021-11-01 12:30:48 +01:00
NEZNAMY 14b7415005 cache floodgate presence 2021-11-01 00:29:48 +01:00
NEZNAMY f482b712ca save registered scoreboards in array to reduce allocations from iteration 2021-11-01 00:25:40 +01:00
NEZNAMY c40a5cbaaa changed parse command syntax to include player name 2021-11-01 00:13:14 +01:00
NEZNAMY 9d0efca1e5 avoid any possible double bossbar create 2021-10-29 13:03:37 +02:00
NEZNAMY cf4d76e9a4 make method synchronized to avoid rare error 2021-10-28 15:58:12 +02:00
NEZNAMY 56569509f9 use ConcurrentHashMap to avoid ConcurrentModificationException 2021-10-27 21:07:05 +02:00
NEZNAMY a0904be305 use more appropriate names for anonymous conditions 2021-10-26 21:15:14 +02:00
NEZNAMY 7d156fb47b fix rare NPE 2021-10-26 21:04:34 +02:00
NEZNAMY e1796d24ad fix mysql 2021-10-24 10:48:19 +02:00
NEZNAMY 2899b1f8eb add announcement-bar property instead of listing default-bars 2021-10-21 13:14:14 +02:00
NEZNAMY 335a033091 fix NPE 2021-10-21 09:24:22 +02:00
NEZNAMY 80aa2367b0 add back width command
as well as showing character sequence if a multi-character symbol is entered
2021-10-20 21:06:17 +02:00
NEZNAMY e6ca5884a3 only decrease interval instead of possibly increasing 2021-10-20 20:14:59 +02:00
NEZNAMY ef52c84e25 calculate condition refresh intervals based on fastest placeholder 2021-10-20 19:03:25 +02:00
NEZNAMY 478f2fc9ae add back support for ; and * for groups in per-world / per-server 2021-10-20 18:25:21 +02:00
NEZNAMY 98afededa6 create method to clean up code 2021-10-20 18:04:03 +02:00
NEZNAMY 7ad2ca9f16 add viaversion compatibility check 2021-10-20 18:02:13 +02:00
NEZNAMY 03ab379c63 remove default-scoreboard option when converting config 2021-10-20 17:51:38 +02:00
NEZNAMY bd71efd22b update readme to reflect this branch 2021-10-19 22:52:27 +02:00
NEZNAMY 87b7a1c759 initial RedisBungee support
this update was only slightly tested and may contain bugs, which will eventually be fixed
2021-10-19 22:49:40 +02:00
NEZNAMY 5c59c3b1b8 fix server switch listener on bungeecord 2021-10-19 21:18:08 +02:00
NEZNAMY bb98db4568 remove and rename placeholders 2021-10-19 20:42:23 +02:00
NEZNAMY 80f0afd600 disable layout by default 2021-10-19 14:17:56 +02:00
NEZNAMY 5bc37b51bb fix player initialization 2021-10-19 14:10:04 +02:00
NEZNAMY 0f68892d11 add sorting by player name to conversion 2021-10-18 18:23:50 +02:00
NEZNAMY 37e731c2fd fix typo 2021-10-18 14:10:06 +02:00
NEZNAMY 8312ae30f1 add getter for spyServers list 2021-10-18 13:58:50 +02:00
NEZNAMY 28ec42dddf improve parity between platforms 2021-10-17 20:45:25 +02:00
NEZNAMY d9f572188e bump YamlAssist version 2021-10-17 16:54:47 +02:00
NEZNAMY 720a95d472 3.0.0-pre1 2021-10-17 12:12:35 +02:00
NEZNAMY 74ba60f4f1 fix resetScoreboard not working 2021-10-16 21:35:52 +02:00
NEZNAMY e717473a21 code style 2021-10-16 00:39:26 +02:00
NEZNAMY aca1e26c3b attempt to fix concurrent modification 2021-10-15 21:27:18 +02:00
NEZNAMY 0b1bcebc72 move initialization 2021-10-15 21:07:16 +02:00
NEZNAMY 058a5dca17 fix NPE 2021-10-15 20:43:17 +02:00
NEZNAMY da21131f9c code style 2021-10-15 20:35:25 +02:00
NEZNAMY 30fd9f84e0 code style 2021-10-15 20:29:35 +02:00
NEZNAMY 291f881e61 remove unused import 2021-10-15 19:52:13 +02:00
NEZNAMY bdb465b54e change return type from Future<?> to Future<Void> 2021-10-15 19:46:26 +02:00
NEZNAMY e39a10da22 code style 2021-10-15 17:37:48 +02:00
NEZNAMY 8f4ab6a7f1 fix premiumconfig absence when using free version 2021-10-15 17:20:22 +02:00
NEZNAMY 3259fc1a52 improve console message 2021-10-15 17:16:32 +02:00
NEZNAMY 05d85a0dc1 rethrow exceptions 2021-10-15 17:05:24 +02:00
NEZNAMY e7c4658805 add missing collision option conversion 2021-10-15 17:02:14 +02:00
NEZNAMY 51220bcae6 fix startup when sorting placeholder is not valid 2021-10-15 17:01:47 +02:00
NEZNAMY e8ff42dd75 fix typos 2021-10-15 17:01:15 +02:00
NEZNAMY 6bd54ccf2b Merge pull request #393 from Tanguygab/v3
Added 2.9.2 -> 3.0 config converter
2021-10-15 16:42:54 +02:00
NEZNAMY c3bcaba61e reduce retry count and only print error if debug is enabled 2021-10-15 16:40:37 +02:00
Tanguygab 14693b4a6e converting _OTHER_ to _DEFAULT_ 2021-10-13 15:12:12 +02:00
Tanguygab b1a75df507 Merge remote-tracking branch 'upstream/v3' into v3 2021-10-13 14:58:57 +02:00
NEZNAMY 42d65cf0dd create a copy of map to avoid error on modification 2021-10-10 17:08:30 +02:00
NEZNAMY b18803e343 add null check 2021-10-10 17:00:15 +02:00
NEZNAMY a36a071dbe update sorting error message to match new config 2021-10-10 16:53:39 +02:00
NEZNAMY edc95e1fa0 create dummy entity to use in packet constructor instead of using first player
which randomly caused NoSuchElementException
2021-10-10 16:51:14 +02:00
NEZNAMY 11b3d3ef41 remove unnecessary null check from previous testing 2021-10-10 16:45:10 +02:00
NEZNAMY 64f339b1fa synchronize list to avoid rare toArray null element issue 2021-10-10 16:09:09 +02:00
Tanguygab a6eefa7afd using File.separator instead of \\ 2021-10-09 00:53:26 +02:00
Tanguygab 837d1fb43d check if legacy config 2021-10-09 00:44:56 +02:00
Tanguygab 0d190b4ade checking if file already exists 2021-10-09 00:30:25 +02:00
Tanguygab fbc7acea60 wrong config 2021-10-09 00:25:29 +02:00
Tanguygab e6676e1a05 added 2.9.2 -> 3.0 config conversion 2021-10-09 00:22:28 +02:00
Tanguygab b9a56c6c65 Intellij didn't recognize API's classes without that for some reasons 2021-10-09 00:21:42 +02:00
NEZNAMY 520c152cc6 add debug message when missing config option was added 2021-10-08 23:35:20 +02:00
NEZNAMY f7ddf6f872 add null check 2021-10-07 09:57:05 +02:00
NEZNAMY e6997d81c1 do not show layout to bedrock and 1.7 players 2021-10-06 09:57:16 +02:00
NEZNAMY 31923fc73c attempt to fix rare error 2021-10-03 23:30:33 +02:00
NEZNAMY 5dbfc97780 fix placeholders only used in tab expansion not refreshing 2021-10-03 23:30:11 +02:00
NEZNAMY da525fa1c8 no longer require nametag sorting feature for layout to work 2021-09-23 18:39:01 +02:00
NEZNAMY 372866ee95 fix typo 2021-09-23 14:41:10 +02:00
NEZNAMY d1e1df01c0 only recalculate used placeholders if changed 2021-09-23 11:53:20 +02:00
NEZNAMY b12d9f352b port changes from #389 2021-09-20 22:38:48 +02:00
NEZNAMY b3dc4b617b change lists back to sets to avoid duplicates and cpu leak 2021-09-20 20:18:54 +02:00
NEZNAMY 67e3ff368d create class for placeholder replacements and reduce memory allocations 2021-09-20 18:25:48 +02:00
NEZNAMY 569ad41894 separate groupmanager class and fix loading order 2021-09-19 00:42:55 +02:00
NEZNAMY bd5225967d replace all sets with lists 2021-09-15 18:14:45 +02:00
NEZNAMY 9c9df4ee3b pre-parse static numeric values in conditions for better performance and lower memory allocations 2021-09-13 21:26:10 +02:00
NEZNAMY a859a20062 fix API scoreboard overridden on world/server switch 2021-09-13 21:03:43 +02:00
NEZNAMY 4fd8e736f9 add option to disable remaining players text in layout 2021-09-13 20:56:46 +02:00
NEZNAMY 41fc9b329b improve placeholder exception catching 2021-09-12 13:37:29 +02:00
NEZNAMY 3ea9408103 optimize conditions using functions 2021-09-11 23:33:44 +02:00
NEZNAMY 589170ac8a catch specific exceptions and remove redundant catch 2021-09-11 23:29:26 +02:00
NEZNAMY 54bd6cd402 use more optimized check and avoid exception throwing 2021-09-11 22:41:35 +02:00
NEZNAMY 9374b56ec7 fix method not working correctly after recode 2021-09-11 22:39:36 +02:00
NEZNAMY f6a3ea79ef use Bukkit.getTPS() if possible 2021-09-11 19:25:23 +02:00
NEZNAMY 840e2610c5 remove unused field 2021-09-08 13:44:04 +02:00
NEZNAMY d673dbf1cc fix memory leak in layouts 2021-09-07 23:27:18 +02:00
NEZNAMY 26c5de3122 include layout name in fixed slot property name to fix clash 2021-09-07 22:59:55 +02:00
NEZNAMY 7c5d2647c8 fix NPE 2021-09-07 21:49:17 +02:00
NEZNAMY 3a6256179c code cleanup with shorter load alternative 2021-09-07 19:59:39 +02:00
NEZNAMY 1d4e5fbd70 share Yaml instance across configuration files 2021-09-07 19:24:32 +02:00
NEZNAMY a456fffe45 placeholder classes no longer need to be abstract 2021-09-07 18:55:12 +02:00
NEZNAMY 3240924b2c aligned playerlist class now extends playerlist 2021-09-07 18:20:09 +02:00
NEZNAMY 670406991c match _OTHER_ being renamed to _DEFAULT_ 2021-09-07 14:56:55 +02:00
NEZNAMY 839543bbdd fix memory leak 2021-09-07 01:09:45 +02:00
NEZNAMY 47511b33a3 remove placeholder refresh interval check 2021-09-07 01:09:38 +02:00
NEZNAMY 264fd0b3a4 merge methods 2021-09-06 20:41:25 +02:00
NEZNAMY f10af90c14 remove redundant check 2021-09-06 20:34:08 +02:00
NEZNAMY 782a82ea30 use essentials directly instead of reflection 2021-09-06 20:05:25 +02:00
NEZNAMY bc0d6bb09e drop AFK+ support since it has papi support 2021-09-06 19:39:44 +02:00
NEZNAMY 54fd9d9492 rethrow InterruptedException 2021-09-06 16:15:21 +02:00
NEZNAMY 59f804c96a replace lambdas with method references 2021-09-06 16:12:51 +02:00
NEZNAMY fba1325abe remove forgotten debug message 2021-09-06 16:06:53 +02:00
NEZNAMY 4b634ad67a add support for multiple layouts with conditions 2021-09-06 16:02:17 +02:00
NEZNAMY 3990ba055a use first color in case of 1 character gradient instead of middle color 2021-09-06 15:33:40 +02:00
NEZNAMY 48784a3d7a fix random NPE which should never be thrown 2021-09-06 15:09:24 +02:00
NEZNAMY 61e87718da avoid NPE caused by invalid data sent 2021-09-06 15:02:49 +02:00
NEZNAMY a55dd34eda initialize world on proxy to prevent NPE 2021-09-06 13:20:35 +02:00
NEZNAMY fc304e5dc7 fix string comparison 2021-09-06 11:26:13 +02:00
NEZNAMY 3870950e29 avoid duplicating code 2021-09-06 01:21:54 +02:00
NEZNAMY fc97830d22 change abstract class to interface and save as array to save memory when iterating 2021-09-06 00:45:35 +02:00
NEZNAMY c7579c259b cache property names 2021-09-06 00:19:52 +02:00
NEZNAMY 1272e09a73 fix sync placeholders registering non-sync version if they didn't parse 2021-09-05 20:19:10 +02:00
NEZNAMY 79b4cbe7f1 fix gradient if text is only 1 character long 2021-09-05 17:26:44 +02:00
NEZNAMY 9a000f7881 fix startup if injection is not enabled 2021-09-05 17:16:28 +02:00
NEZNAMY 30367ad328 fix tps placeholder in default configs 2021-09-05 17:12:15 +02:00
NEZNAMY d67b447895 include plugin message packets in packet count 2021-09-05 16:28:42 +02:00
NEZNAMY 0d9c727dde remove separate measurement of component conversion methods 2021-09-05 16:26:37 +02:00
NEZNAMY 321a56d5cf add override check to onQuit as well 2021-09-05 13:36:20 +02:00
NEZNAMY fbbc4ee864 change display name of cpu value 2021-09-05 00:21:03 +02:00
NEZNAMY 36f6e792db only refresh belowname in same world (and server) 2021-09-05 00:11:30 +02:00
NEZNAMY f71c7c5076 show N/A for %world% on proxy if bridge is missing 2021-09-04 23:49:16 +02:00
NEZNAMY 33ec5a5cce remove internal: prefix from vanish placeholder since literal output is not used directly and add it on bukkit as well 2021-09-04 23:43:16 +02:00
NEZNAMY bbcf0add3f don't deserialize bytebufs if no features use it 2021-09-04 23:40:02 +02:00
NEZNAMY 80aa041d1c fix desync between my workspace and github (2/2) 2021-09-04 20:27:33 +02:00
NEZNAMY 35617e97a5 fix desync between my workspace and github (1/2) 2021-09-04 20:26:07 +02:00
NEZNAMY 9a802c0db9 fix vanished player removal 2021-09-04 20:24:32 +02:00
NEZNAMY d588f2fdee new config example equal to purpur's tpsbar 2021-09-04 13:10:26 +02:00
NEZNAMY ad0424175d partially redocument api package 2021-09-02 21:35:35 +02:00
NEZNAMY 3bf9856c26 fix nearby players registration 2021-09-01 23:35:24 +02:00
NEZNAMY 2395ee05f9 save cached placeholder array in Placeholder type 2021-08-31 20:33:10 +02:00
NEZNAMY 2a5168e800 add API methods used by addon 2021-08-31 15:32:20 +02:00
NEZNAMY da861cc73c sorting by name is no longer forced and is configurable 2021-08-29 11:35:32 +02:00
NEZNAMY 4cd974cb0e ignore empty collections 2021-08-29 11:23:27 +02:00
NEZNAMY 14cb32fc58 don't start task if no permission plugin is found 2021-08-29 11:08:15 +02:00
NEZNAMY 3197671950 use placeholder refresh core to refresh team names instead of repeating task 2021-08-29 11:07:22 +02:00
NEZNAMY cd29baf9cc fix sync placeholders from v3 placeholder loading recode 2021-08-28 22:41:29 +02:00
NEZNAMY 03ca76e679 add config option to disable latency updating 2021-08-28 22:21:05 +02:00
NEZNAMY 933855baac add override check to all methods to not have cpu output spammed with 0s 2021-08-28 22:15:54 +02:00
NEZNAMY ee61259114 rework placeholder registration methods 2021-08-28 18:06:42 +02:00
NEZNAMY d26f88e0f1 add check which should not be necessary 2021-08-28 17:24:23 +02:00
NEZNAMY c8fc144b8a replace field with local variable 2021-08-28 17:07:49 +02:00
NEZNAMY d8ae647140 again 2021-08-28 16:59:01 +02:00
NEZNAMY ab5767bee8 move some methods around 2021-08-28 16:49:07 +02:00
NEZNAMY 7c63d3c176 nah 2021-08-28 16:27:50 +02:00
NEZNAMY d837dfdd77 remove duplication 2021-08-28 16:10:50 +02:00
NEZNAMY 31612a7cb1 refer to EnumChatFormat class for colorizing and color char 2021-08-28 16:04:26 +02:00
NEZNAMY 3d25ec32c0 create and use platform-specific config file 2021-08-28 15:06:03 +02:00
NEZNAMY e3cda07f0f fix NPE during startup 2021-08-28 14:54:11 +02:00
NEZNAMY 18762961e1 count cpu usage of LP event listener 2021-08-28 14:22:18 +02:00
NEZNAMY 9cc1112a3e use event listener for LP group refreshing instead of repeating task 2021-08-28 11:22:08 +02:00
NEZNAMY 2204a8437f remove method that is no longer used 2021-08-28 11:21:26 +02:00
NEZNAMY c37e0d2fab avoid NPE 2021-08-28 11:03:28 +02:00
NEZNAMY 4ce85692a7 fix method from recode 2021-08-28 11:00:43 +02:00
NEZNAMY 860658f367 move PermissionPlugin instance to GroupRefresher class 2021-08-27 21:29:49 +02:00
NEZNAMY 4310ce95ea increase refresh interval 2021-08-27 18:28:37 +02:00
NEZNAMY 66ae6b2a33 hook into LD directly instead of using reflection 2021-08-27 18:17:00 +02:00
NEZNAMY 5f45a38f08 save nearby players into array 2021-08-27 18:03:44 +02:00
NEZNAMY c26cd30dfd fix component cache between legacy and modern versions and cache raw strings for bungeecord as well 2021-08-27 16:32:24 +02:00
NEZNAMY 4b0fe94f34 handle 1.9 bossbar packet using VV API instead of directt packets 2021-08-27 15:52:15 +02:00
NEZNAMY 7fc80f8e10 fix bossbar load/unload on <1.9 2021-08-27 15:51:23 +02:00
NEZNAMY 2875676308 update URL 2021-08-27 14:50:17 +02:00
NEZNAMY 814726d545 fix startup on fabric 2021-08-27 13:18:28 +02:00
NEZNAMY 0ae60a0463 Update PipelineInjector.java 2021-08-27 12:33:16 +02:00
NEZNAMY c96bef9ac5 remove remove-strings array instead of list 2021-08-25 22:11:26 +02:00
NEZNAMY db9fd9e4d5 cache variables for %afk% placeholder 2021-08-25 21:55:12 +02:00
NEZNAMY 90ab2f0dbd remove redundant catch 2021-08-25 17:05:57 +02:00
NEZNAMY f8f6cb3cc2 simplify 2021-08-25 17:04:37 +02:00
NEZNAMY 72d741f795 move constructors 2021-08-25 16:56:29 +02:00
NEZNAMY e784f4bcf0 create constants instead of copying strings 2021-08-25 13:58:54 +02:00
NEZNAMY a50f34d2b4 merge calls 2021-08-25 01:22:11 +02:00
NEZNAMY dce58a7793 increase quit delay 2021-08-24 23:11:15 +02:00
NEZNAMY 5c9de8de7c fix placeholders only called through expansion not refreshing 2021-08-24 23:11:06 +02:00
NEZNAMY c1c2ceb33e no longer needed 2021-08-24 23:10:13 +02:00
NEZNAMY b39eca0e0e call placeholder directly since it's possible now 2021-08-24 23:07:53 +02:00
NEZNAMY cadcc69eef rename field 2021-08-24 18:55:18 +02:00
NEZNAMY 120f2b2d44 save bukkit bossbar style formats instead of replacing 2021-08-24 16:07:35 +02:00
NEZNAMY 495d7ecf19 save Formatter instance instead of creating new one every time 2021-08-24 15:47:38 +02:00
NEZNAMY 140a45a7cb cache enabled plugin booleans 2021-08-24 12:59:38 +02:00
NEZNAMY bd12ff73f8 cache created components to reduce memory allocations and speed up code 2021-08-23 18:33:24 +02:00
NEZNAMY 7b4182dce3 add floodgate hook to use numbered scoreboard for bedrock users 2021-08-23 17:36:45 +02:00
NEZNAMY f8098423a3 add header/footer API 2021-08-23 17:11:01 +02:00
NEZNAMY 9e1a8c29ac remove redundant .toString() call 2021-08-22 21:59:58 +02:00
NEZNAMY 157833d806 prevent NPE 2021-08-22 21:58:34 +02:00
NEZNAMY 91a61eb014 fix sorting not updating in layout 2021-08-22 18:29:39 +02:00
NEZNAMY 1f037dbda7 cache used placeholder keyset 2021-08-22 17:43:52 +02:00
NEZNAMY d9c68e7360 remove redundant check 2021-08-22 16:51:12 +02:00
NEZNAMY 51507d3905 use correct description 2021-08-22 16:50:34 +02:00
NEZNAMY 31e83ebbb5 use feature subcategories in sent packets in /tab cpu 2021-08-22 16:21:40 +02:00
NEZNAMY 3e2f1fb5a8 make layout display condition checking placeholder based instead of refreshing 2021-08-22 14:00:59 +02:00
NEZNAMY 5ad360eaf2 make bossbar display condition checking placeholder based instead of refreshing 2021-08-22 13:30:15 +02:00
NEZNAMY b7b8cd3fea make scoreboard display condition checking placeholder based instead of refreshing 2021-08-22 13:27:28 +02:00
NEZNAMY 243fccac9e make vanish status refreshing for global playerlist placeholder based 2021-08-22 13:07:01 +02:00
NEZNAMY 51b3035434 fix check 2021-08-21 22:10:54 +02:00
NEZNAMY be9fba23ac fix PLACEHOLDER sorting type requiring lowercase values 2021-08-21 19:00:36 +02:00
NEZNAMY 0ac9b703d5 remove redundant call 2021-08-21 17:40:02 +02:00
NEZNAMY 21c51ff074 remove debug message 2021-08-21 17:39:43 +02:00
NEZNAMY a735b2f0b0 split subfeatures for better cpu tracking 2021-08-21 17:31:56 +02:00
NEZNAMY 0baea2c5ea add remaining players text to layout 2021-08-21 17:14:53 +02:00
NEZNAMY ca2463567e bring fix from v2 2021-08-21 14:12:50 +02:00
NEZNAMY c950dc5f53 improve debug and fix sorting type name 2021-08-20 22:08:08 +02:00
NEZNAMY 5c6a29f2d7 colorize and use | instead of space for same priority 2021-08-20 22:07:33 +02:00
NEZNAMY 6e12a9d22e bring fix from v2 2021-08-20 16:51:13 +02:00
NEZNAMY df819853ef cache sorted players in layout 2021-08-20 10:56:12 +02:00
NEZNAMY d8c3fb4190 how did this get here 2021-08-20 09:55:28 +02:00
NEZNAMY 25e5ecfe61 disable belowname by default 2021-08-20 01:33:41 +02:00
NEZNAMY 809b5bbe18 cleaner check and return server version if hook failed 2021-08-19 14:54:48 +02:00
NEZNAMY 1ec9139307 remove one of 2 old methods 2021-08-18 23:13:21 +02:00
NEZNAMY 293ea1f6cf using strings instead of UsageType enum 2021-08-18 22:55:05 +02:00
NEZNAMY ed43a47ad7 added comment 2021-08-18 21:44:49 +02:00
NEZNAMY 82980639c8 drastically optimize unlimited nametags 2021-08-18 19:33:20 +02:00
NEZNAMY 01dd493475 fix inaccessible constructor 2021-08-17 20:39:33 +02:00
NEZNAMY 0b29c8c51b create and call method instead of copypasting 2021-08-17 19:35:34 +02:00
NEZNAMY 7c2f4277c3 small nms loading method changes 2021-08-17 19:31:03 +02:00
NEZNAMY 8c515f542c define all variables manually instead of using maps 2021-08-17 19:11:45 +02:00
NEZNAMY 73d80b136f fix NPE when disabled worlds/servers are not defined 2021-08-16 23:37:13 +02:00
NEZNAMY 93c5cf70a0 fix method name 2021-08-16 15:33:18 +02:00
NEZNAMY e2a098c3ff remove debug code 2021-08-16 15:32:13 +02:00
NEZNAMY c766048224 add fabric support via CardBoard 2021-08-16 13:45:06 +02:00
NEZNAMY 9eb87fae62 return methods by other parameters than name itself
let's see how many hotfixes will this require
2021-08-15 23:32:37 +02:00
NEZNAMY 7f2f4d8e3b easier way 2021-08-15 21:26:52 +02:00
NEZNAMY ce5f9c0f08 use existing field 2021-08-15 20:27:11 +02:00
NEZNAMY cf443ed217 create method instead of copypasting content 2021-08-15 20:25:17 +02:00
NEZNAMY bde582d8ff rename fields 2021-08-15 20:17:33 +02:00
NEZNAMY 0a00332580 implement /tab scoreboard show <name> [player] 2021-08-15 16:17:08 +02:00
NEZNAMY 137d7bf240 use scoreboard name in property names to avoid issues 2021-08-15 15:56:21 +02:00
NEZNAMY 302c7ef455 properly register and unregister lines when using via API 2021-08-15 15:50:34 +02:00
NEZNAMY 87b54a44c0 remove unused field 2021-08-15 15:29:52 +02:00
NEZNAMY f9eee0de93 improve tabcomplete 2021-08-15 15:18:22 +02:00
NEZNAMY 1114d2d30d register sorting placeholders for refreshing 2021-08-15 13:51:09 +02:00
NEZNAMY 65d50d046c mighty replace function 2021-08-14 12:03:57 +02:00
NEZNAMY b2ef957682 implement all data watcher registry values 2021-08-14 12:03:47 +02:00
NEZNAMY 56be23e304 specify placeholder in debug message 2021-08-14 00:03:27 +02:00
NEZNAMY 215869037b rename artifact 2021-08-13 23:54:28 +02:00
NEZNAMY f5d4581911 add and use custom packet classes for entity packets 2021-08-13 23:30:29 +02:00
NEZNAMY 5848efdf67 rename interface 2021-08-13 22:31:04 +02:00
NEZNAMY c79277afaf add &r after every sorting element 2021-08-13 21:59:42 +02:00
NEZNAMY 59c8e1ae1c increase access level 2021-08-12 20:10:21 +02:00
NEZNAMY d50678649a fix async event call 2021-08-12 15:28:32 +02:00
NEZNAMY c19f440094 add getter 2021-08-12 15:28:23 +02:00
NEZNAMY b60160f2b9 rename field 2021-08-12 13:33:37 +02:00
NEZNAMY e54c4ed435 use method reference instead 2021-08-12 13:32:47 +02:00
NEZNAMY 749774cd03 remove redundant throws 2021-08-12 13:31:13 +02:00
NEZNAMY 7cc609fdc3 remove wrong IF 2021-08-12 13:29:51 +02:00
NEZNAMY 2cc8bed203 apparently fix locale issue 2021-08-12 13:24:04 +02:00
NEZNAMY 175f02a1c3 fix forgotten change 2021-08-12 01:53:13 +02:00
NEZNAMY 8a8ac0ccde use default group name instead of null 2021-08-12 01:47:27 +02:00
NEZNAMY 168427f24e avoid code duplicates in pipeline injection 2021-08-12 01:13:36 +02:00
NEZNAMY 8338518405 armor stand API test 2021-08-12 00:49:24 +02:00
NEZNAMY 95783b7ff3 add, rename and repackage events 2021-08-12 00:14:34 +02:00
NEZNAMY f7a4f956d7 correctly update latency in global playerlist 2021-08-11 14:24:06 +02:00
NEZNAMY feea4d4785 not anymore 2021-08-11 13:00:42 +02:00
NEZNAMY e267623025 remove duplicated check 2021-08-11 12:59:57 +02:00
NEZNAMY 5c22583a52 correctly show arrays in output 2021-08-11 12:57:02 +02:00
NEZNAMY 7ba93c9742 rework scoreboard assign logic (simplify for users) 2021-08-11 12:53:05 +02:00
NEZNAMY b4b40bf82f remove unused parameter 2021-08-11 12:19:58 +02:00
NEZNAMY b96218f305 catch NoClassDefFoundError 2021-08-11 00:12:23 +02:00
NEZNAMY e4013a616f finish scoreboard line change API 2021-08-11 00:12:12 +02:00
NEZNAMY 6f3ab8f974 oops 2021-08-10 23:31:44 +02:00
NEZNAMY c47fc61b73 catch IllegalArgument 2021-08-10 23:27:09 +02:00
NEZNAMY 01042bbc54 api changes and stuff [buffering] 2021-08-10 20:53:55 +02:00
NEZNAMY e75f8b75c5 add catserver support 2021-08-09 00:10:15 +02:00
NEZNAMY ae5e77925a shorter code alternative 2021-08-08 23:33:26 +02:00
NEZNAMY b1f2a0e057 do not send bossbars if condition is not met 2021-08-08 22:13:38 +02:00
NEZNAMY 6f61d5aa11 drop direct per-world bossbar support (still doable with conditions) 2021-08-08 22:10:11 +02:00
NEZNAMY 9562f06fea remove warn 2021-08-08 21:49:17 +02:00
NEZNAMY c6eaf4ae03 do not show warning with default group 2021-08-08 20:47:19 +02:00
NEZNAMY 24c994dfb5 properly clone extra components 2021-08-07 19:16:55 +02:00
NEZNAMY f623e5d004 hexcode variable no longer uses # as prefix 2021-08-07 17:20:49 +02:00
NEZNAMY 9ac03a00d8 apply gradients in animations once instead of every refresh 2021-08-07 14:37:29 +02:00
NEZNAMY 52b819a1b7 use same feature name everywhere 2021-08-06 23:37:29 +02:00
NEZNAMY 3ad32e0fc7 iterating over arrays instead of lists where possible 2021-08-06 13:01:21 +02:00
NEZNAMY 18c4a55518 only initialize if used 2021-08-06 12:11:28 +02:00
NEZNAMY 0d8a889556 return if no rgb codes are used 2021-08-06 12:11:10 +02:00
NEZNAMY 25f180a297 change return type of nested placeholders to String[] 2021-08-06 12:01:29 +02:00
NEZNAMY ae2f2d8294 create string once instead of every refresh 2021-08-06 11:33:22 +02:00
NEZNAMY d3ac95d1f6 change return type of getOnlinePlayers to TabPlayer[] 2021-08-06 11:08:02 +02:00
NEZNAMY a138c4a1c7 significantly optimize PropertyImpl#update() method in specific cases 2021-08-06 01:31:57 +02:00
NEZNAMY 0f359e84d6 do not call parseFloat if not needed 2021-08-06 01:27:16 +02:00
NEZNAMY 49d73b7d4f simplify 2021-08-06 00:24:11 +02:00
NEZNAMY 33dc7b82ea do not warn about null group 2021-08-03 18:51:08 +02:00
NEZNAMY 4714ea6037 add back required checks until thread management code 2021-08-03 18:45:24 +02:00
NEZNAMY c2e5f241b0 give thread pool a custom name 2021-08-03 17:49:18 +02:00
NEZNAMY 7f0e299b74 getting my try/catch back 2021-08-03 17:06:43 +02:00
NEZNAMY e418ccf8e0 using StringBuilder 2021-08-03 16:54:32 +02:00
NEZNAMY 53e119c0ce only create a single instance of nms Scoreboard 2021-08-03 15:54:02 +02:00
NEZNAMY f934d3b7b1 display placeholderapi errors when debug is enabled 2021-08-03 15:53:21 +02:00
NEZNAMY 12d5b9f6f6 fix papi placeholder error causing last value to not apply 2021-08-03 14:05:48 +02:00
NEZNAMY 727a5cfbf5 remove unnecessary casts and calls 2021-08-03 13:40:26 +02:00
NEZNAMY 6345080769 initialize server placeholders on load and move task 2021-08-03 13:34:56 +02:00
NEZNAMY 928f3d32cd fix sorting by predefined placeholder 2021-08-03 13:08:35 +02:00
NEZNAMY 81fd2dc82f do not mass allocate memory (might break addon loading) 2021-08-03 01:50:37 +02:00
NEZNAMY 225918ac52 how did this even happen 2021-08-03 01:39:40 +02:00
NEZNAMY 796343bc5e cleanup and remove duplicated code 2021-08-03 01:39:00 +02:00
NEZNAMY cdb86f6c11 fix placeholder registration in anonymous conditions 2021-08-03 01:38:34 +02:00
NEZNAMY 625e26f01f change placeholder type to fix nested player placeholders 2021-08-03 01:05:54 +02:00
NEZNAMY 21f0429fd6 return type changes 2021-08-03 01:01:57 +02:00
NEZNAMY e7a30048cf replace Map with byte[] for better performance and memory 2021-08-02 23:04:44 +02:00
NEZNAMY ed952e19eb hopefully small optimizations with stringbuilder 2021-08-02 22:19:41 +02:00
NEZNAMY e4a7bdd0eb disable by default 2021-08-02 22:16:40 +02:00
NEZNAMY 13e394bbfe use arrays instead of lists 2021-08-02 21:40:05 +02:00
NEZNAMY a6b95064d9 optimize method's memory allocation 2021-08-02 21:33:17 +02:00
NEZNAMY c30a556bdc obviously update method names 2021-08-02 20:44:17 +02:00
NEZNAMY 2bebba740e fix NPE when player is not loaded 2021-08-02 20:26:33 +02:00
NEZNAMY 57dfb02689 fix false negative when nested placeholder changed value
also nested placeholders in conditions not being registered
2021-08-02 00:01:37 +02:00
NEZNAMY 7931d8b26e reformat 2021-08-01 14:50:43 +02:00
NEZNAMY 434d50b2d1 add skin support to layout 2021-08-01 14:44:05 +02:00
NEZNAMY fad905a426 simplify method 2021-08-01 01:01:55 +02:00
NEZNAMY 475c3b690b fix NPE when skin is null 2021-08-01 00:53:42 +02:00
NEZNAMY 88eae3cb9a fix NPE when placeholder returns null 2021-08-01 00:49:04 +02:00
NEZNAMY 0021c7233c fix placeholders used only in conditions not refreshing 2021-07-31 20:11:46 +02:00
NEZNAMY 725224b6c7 move method 2021-07-31 16:44:22 +02:00
NEZNAMY 28f399079d remove redundant check 2021-07-31 16:33:50 +02:00
NEZNAMY 3e0d594e29 remove unused code 2021-07-31 16:33:08 +02:00
NEZNAMY 9092b1f9b0 remove unused method 2021-07-31 16:21:10 +02:00
NEZNAMY 4ac30ff7b2 remove animation file conversion 2021-07-31 16:20:27 +02:00
NEZNAMY 803d3395d6 split method 2021-07-31 16:11:10 +02:00
NEZNAMY 51288231cd add displayname refreshing & aligned suffix support in layout 2021-07-31 15:25:09 +02:00
NEZNAMY a44cd528ef better YellowNumber integration with layout 2021-07-31 15:13:09 +02:00
NEZNAMY cfbe0b031e add way to not duplicate properties in layout 2021-07-31 14:57:34 +02:00
NEZNAMY bf7fb1620e use function that doesn't throw patern exception 2021-07-31 14:41:22 +02:00
NEZNAMY 50056fd301 implement backwards hoverable conversion 2021-07-30 22:23:15 +02:00
NEZNAMY 927b134996 move class to correct package 2021-07-29 23:35:40 +02:00
NEZNAMY 9d66619cda removed unnecessary cast 2021-07-29 23:25:39 +02:00
NEZNAMY c9670536cc fix conditions loading 2021-07-29 23:21:30 +02:00
NEZNAMY 731518a4fc implement chat hoverable conversion 2021-07-29 22:54:18 +02:00
NEZNAMY 764df316a7 fix startup 2021-07-29 16:29:13 +02:00
NEZNAMY 1ecfdafbe8 small fixes 2021-07-29 16:20:05 +02:00
NEZNAMY 4b09aeefd6 . 2021-07-29 16:11:09 +02:00
NEZNAMY 71e407c3a5 split IChatBaseComponent class 2021-07-29 15:14:30 +02:00
NEZNAMY 48c4e7432d . 2021-07-29 12:33:37 +02:00
NEZNAMY 202194c16f fix github compilation 2021-07-28 23:54:08 +02:00
NEZNAMY 0af5713483 more stuff 2021-07-28 23:51:08 +02:00
NEZNAMY 3b6a5c353c massively reduced memory allocations 2021-07-27 23:42:04 +02:00
NEZNAMY e6d8f34db0 more random things for code analysis websites 2021-07-26 16:42:50 +02:00
NEZNAMY ef97a0d184 . 2021-07-26 16:04:17 +02:00
NEZNAMY 40866754d1 . 2021-07-26 15:01:29 +02:00
NEZNAMY d5fb7d094c more random changes 2021-07-26 14:35:47 +02:00
NEZNAMY 48b861054c temporarily disable code 2021-07-26 13:07:04 +02:00
NEZNAMY 568b7541a4 random stuff 2021-07-26 13:05:19 +02:00
NEZNAMY 914a6e6a57 Update build.yml 2021-07-26 11:58:26 +02:00
NEZNAMY d1e737dc96 Update plugin.yml 2021-07-26 11:51:16 +02:00
NEZNAMY ae68a05f87 cpu boost and rip child groups 2021-07-26 02:11:27 +02:00
NEZNAMY 79e6f3ef1c further progress 2021-07-25 17:31:56 +02:00
NEZNAMY 5f137f4055 more api stuff 2021-07-24 23:31:14 +02:00
NEZNAMY 4f5215a312 more recoding and per-world support on bungee 2021-07-23 23:51:38 +02:00
NEZNAMY 06ea8f6cb1 initial mysql support 2021-07-15 21:54:03 +02:00
NEZNAMY 2e2890d8d3 config recode and more 2021-07-13 01:11:25 +02:00
NEZNAMY a07ef6c273 API & feature recode part 1 2021-07-12 00:11:01 +02:00
NEZNAMY a02acc9c67 remove file 2021-07-11 15:55:28 +02:00
NEZNAMY bc5e61b04b make conditional placeholders refresh intervals configurable 2021-07-11 15:43:41 +02:00
NEZNAMY 665036189d always show sync placeholders red 2021-07-11 15:34:36 +02:00
NEZNAMY 8fe72e7f2e remove cputest subcommand 2021-07-11 15:21:36 +02:00
NEZNAMY 4a373015de send different message when reload fails due to internal error 2021-07-11 15:17:56 +02:00
NEZNAMY 31ad540286 do not allow same bossbar announced multiple times at once 2021-07-11 15:07:01 +02:00
NEZNAMY 448faebfad ignore players who are not loaded
will fix double bossbar bug
2021-07-11 15:02:22 +02:00
NEZNAMY 3b7f25071e remove spigot link 2021-07-11 00:46:51 +02:00
NEZNAMY c661395bb0 Update README.md 2021-07-10 13:25:11 +02:00
NEZNAMY c231220b42 2.9.2 2021-07-10 13:01:29 +02:00
NEZNAMY 1c6e5bec73 fix IllegalArgument 2021-07-10 12:57:16 +02:00
NEZNAMY 8919aaad94 add missing config option 2021-07-09 16:42:10 +02:00
NEZNAMY ff6a2fe734 equals 2021-07-09 11:58:18 +02:00
NEZNAMY 5ca4f7e411 2.9.2-pre3 2021-07-07 17:13:01 +02:00
NEZNAMY 2c105718b0 1.17.1 support 2021-07-07 17:10:37 +02:00
NEZNAMY 9cc471f66f catch throwable in pipeline 2021-07-06 21:20:47 +02:00
NEZNAMY e18867c938 do not ignore Errors 2021-07-06 21:01:46 +02:00
NEZNAMY 27bd942c4c fix NoSuchFieldError on <1.11 2021-07-06 21:01:36 +02:00
NEZNAMY 234ca72e73 tab out stack traces 2021-07-06 21:01:17 +02:00
NEZNAMY f35a09a34d avoid rare NPE 2021-07-06 19:54:19 +02:00
NEZNAMY fa6d06a4ac 2.9.2-pre2 2021-07-06 09:50:48 +02:00
NEZNAMY ec6daeeadb colorize text immediately instead of in every refresh 2021-07-04 13:50:05 +02:00
NEZNAMY f24f25f071 apparently this method is required 2021-07-04 12:05:10 +02:00
NEZNAMY dbf0e3af9f small cpu and memory optimization in pet fix feature 2021-07-04 00:02:56 +02:00
NEZNAMY 6ecb607c0b add private constructor 2021-07-03 20:48:18 +02:00
NEZNAMY 1bf6b00be0 remove unnecessary code 2021-07-03 20:47:56 +02:00
NEZNAMY 4b4f52e39a use constants instead of literal strings 2021-07-03 20:35:50 +02:00
NEZNAMY 1170efbe02 cache disabled worlds 2021-07-03 19:52:42 +02:00
NEZNAMY 3e86e73fed refactor to avoid duplication 2021-07-03 16:51:49 +02:00
NEZNAMY dd43861572 cache methods for placeholders (mostly %afk%) 2021-07-03 16:32:37 +02:00
NEZNAMY 61a19ca9e0 Merge branch 'master' of https://github.com/NEZNAMY/TAB 2021-07-03 16:19:20 +02:00
NEZNAMY d02af31e7c Merge pull request #342 from etil2jz/patch-1
Update README.md
2021-07-03 16:16:38 +02:00
Arthur B ab7b88b67b Update README.md
Correct isPremium line
2021-07-03 16:13:52 +02:00
NEZNAMY b80c816c5a relocate json-simple 2021-07-01 18:56:51 +02:00
NEZNAMY c0ad6f49e7 minor changes 2021-07-01 18:53:24 +02:00
NEZNAMY 91a56a8c2c remove IllegalArgument throws forwarding 2021-07-01 12:09:09 +02:00
NEZNAMY 135a473dc5 more abstraction to remove duplications 2021-07-01 11:14:41 +02:00
NEZNAMY a8b53b07e4 increase delay and repeat times 2021-07-01 10:04:19 +02:00
NEZNAMY 171cbd4497 NPE fix when plugin is disabled and user does not have reload permission 2021-06-30 21:24:27 +02:00
NEZNAMY a1383612bc making code analysis websites happy part 6
+ switching to bukkit metrics shading instead of copying classes
2021-06-30 18:03:21 +02:00
NEZNAMY fe798c19f3 making code analysis websites happy part 5 2021-06-30 13:32:15 +02:00
NEZNAMY ead3add4cc making code analysis websites happy part 4 2021-06-30 11:54:14 +02:00
NEZNAMY db13c2d1c5 making code analysis websites happy part 3 2021-06-30 10:58:39 +02:00
NEZNAMY f2daab4b80 making code analysis websites happy part 2 2021-06-30 00:55:26 +02:00
NEZNAMY 6fd02c83ab attempt 2 2021-06-30 00:02:02 +02:00
NEZNAMY c288a0503a test 2021-06-29 23:54:12 +02:00
NEZNAMY 2e2b65a4bb making code analysis websites happy part 1 2021-06-29 23:48:23 +02:00
NEZNAMY 982d0a53f9 correctly set bossbar progress on add 2021-06-29 19:01:46 +02:00
NEZNAMY f89ecfb595 remove unused options 2021-06-29 14:10:42 +02:00
NEZNAMY bddb96a5fa increase default refresh 2021-06-29 14:05:57 +02:00
NEZNAMY 39b29d12e4 problem solved ez game ez life
referring to expansion download errors while jar file was modified such as https://paste.gg/p/anonymous/449c3eb326f34015993b4025002be355
2021-06-29 13:59:47 +02:00
NEZNAMY 6cb1e2c06d debug option is now public 2021-06-29 13:49:46 +02:00
NEZNAMY d932a9a862 add VV as softdepend to avoid troll console message 2021-06-29 13:29:19 +02:00
NEZNAMY 341b552d0b 2.9.2-pre1 2021-06-25 08:25:25 +02:00
NEZNAMY 1586bd9768 implement correct interface 2021-06-24 21:55:06 +02:00
NEZNAMY e8dde3a756 reuse the same instance 2021-06-24 21:51:37 +02:00
NEZNAMY bb591bf56d spigot fixed the bug 2021-06-24 20:18:07 +02:00
NEZNAMY 8cf83b276a fix the feature on 1.17 2021-06-23 21:59:24 +02:00
NEZNAMY a1547a7288 cleaner implementation of #322 2021-06-23 21:56:10 +02:00
NEZNAMY 0722403a23 remove duplicated line 2021-06-22 21:27:59 +02:00
NEZNAMY cd4a91d975 return afk if at least 1 plugin says player is afk 2021-06-22 20:42:26 +02:00
NEZNAMY c7870b4e9d fix NPE in API when feature is not enabled 2021-06-21 22:52:59 +02:00
NEZNAMY 239dae5a65 change reference type to player name 2021-06-21 22:43:47 +02:00
NEZNAMY 13c89d18d7 remove unused field since 1.17 support 2021-06-21 21:47:18 +02:00
NEZNAMY c5dc42eafe cleanup 2021-06-21 14:47:56 +02:00
NEZNAMY 59b3faab1e fix team name note message in console 2021-06-21 13:41:15 +02:00
NEZNAMY b88beb5002 added null check to placeholder registration 2021-06-21 12:58:46 +02:00
NEZNAMY 9fea35c25d retry viaversion call if it returned -1 2021-06-21 12:03:33 +02:00
NEZNAMY 372013bcc6 add online status into debug message 2021-06-21 11:07:21 +02:00
NEZNAMY 20ca58b570 fix NPE 2021-06-20 21:49:48 +02:00
NEZNAMY 9c4cca20fb just an attempt 2021-06-19 11:43:40 +02:00
NEZNAMY 6b8536a86e fix possible memory leak? 2021-06-19 11:41:46 +02:00
NEZNAMY 3b41857637 fixed NPE caused by misconfiguration 2021-06-19 09:27:33 +02:00
NEZNAMY fa78ac2157 fix it again? 2021-06-18 13:39:05 +02:00
NEZNAMY 0a0bb9c83c swap order to avoid NPE when player is not loaded 2021-06-18 12:28:19 +02:00
NEZNAMY 36834a039e 2.9.1 2021-06-17 18:43:34 +02:00
NEZNAMY 4960c898bb memory leak? 2021-06-17 18:35:35 +02:00
NEZNAMY af61edbc5c added replacements support to relational placeholders 2021-06-17 15:53:24 +02:00
NEZNAMY 237bfc08a1 forward raw packets instead, no idea why was it not working 2021-06-17 15:52:39 +02:00
NEZNAMY 032e9a089d bump supported versions 2021-06-17 12:50:37 +02:00
NEZNAMY ba83779dde create and use new field getter method 2021-06-16 21:51:51 +02:00
NEZNAMY 267d72f844 spacing 2021-06-16 21:38:24 +02:00
NEZNAMY b533cdb89f send deserialized packets instead of malformed bytebufs 2021-06-16 17:26:05 +02:00
NEZNAMY 3f118ac76b add option to define custom character widths 2021-06-16 16:24:08 +02:00
NEZNAMY 08a8f0097c fix wrong constructor taken on random 1.8.8 forks 2021-06-16 16:23:26 +02:00
NEZNAMY c7a3599e46 update maven repository 2021-06-16 14:22:45 +02:00
NEZNAMY 62f80baa69 version bump 2021-06-16 14:01:31 +02:00
NEZNAMY 09dc8cd437 version bump 2021-06-16 13:52:27 +02:00
NEZNAMY c613ba401b remove unnecessary this. 2021-06-16 13:03:52 +02:00
NEZNAMY 866df0b5cf remove duplicate content 2021-06-16 11:12:43 +02:00
NEZNAMY 8f2b56ba05 2.9.0 2021-06-16 10:09:20 +02:00
NEZNAMY 2049885f11 more accurate error message 2021-06-16 09:56:15 +02:00
NEZNAMY 4caef337d5 ANOTHER BOSSBAR API BUG IN ANOTHER PLATFORM HAHA LOL 2021-06-15 23:37:02 +02:00
NEZNAMY a644792bf6 simplify 2021-06-15 22:50:16 +02:00
NEZNAMY 54c7f8fc6a drop the rest of title packet 2021-06-15 22:49:23 +02:00
NEZNAMY 2e59b87bbe use getters instead of fields 2021-06-15 22:46:42 +02:00
NEZNAMY f89242ad8f add and use magic code Boolean getters 2021-06-15 22:40:02 +02:00
NEZNAMY 845903788c remove unused code 2021-06-15 22:39:32 +02:00
NEZNAMY 53a9047c20 fix conflict between hidden-by-default and remember-toggle-choice 2021-06-15 22:36:55 +02:00
NEZNAMY a2b74bbc30 correctly display used color codes in parse error messages 2021-06-15 22:36:31 +02:00
NEZNAMY 50ef93cc45 fix stack overflow and stretch with relational placeholders 2021-06-15 22:36:00 +02:00
NEZNAMY e2a5da9c14 deserialize other scoreboard packets as well 2021-06-15 22:35:24 +02:00
NEZNAMY bf31116d0d split method 2021-06-15 22:34:42 +02:00
NEZNAMY d79fa8c4f3 drop title packet 2021-06-15 22:34:31 +02:00
NEZNAMY 87e0a7bea3 remove unused fields 2021-06-15 22:33:33 +02:00
NEZNAMY b34cabd55c optimize check 2021-06-15 22:32:50 +02:00
NEZNAMY 704bd36c77 do not try to use rgb on <1.16 servers 2021-06-14 09:35:23 +02:00
NEZNAMY 5c2c4d0f4b improved error message 2021-06-14 08:43:36 +02:00
NEZNAMY 80cca5cb34 fix #329 2021-06-14 08:22:37 +02:00
NEZNAMY dcd603f2f5 null check to prevent errors 2021-06-13 22:10:30 +02:00
NEZNAMY 1bee3b49bf sending bossbar using bukkit api 2021-06-13 20:46:16 +02:00
NEZNAMY 11bcccb8f9 fix reload from previous commit 2021-06-13 20:24:39 +02:00
NEZNAMY 7425493706 initialization cleanup 2021-06-13 19:09:34 +02:00
NEZNAMY dca0cfd424 removed old value from config 2021-06-13 17:09:03 +02:00
NEZNAMY 21314def89 fix #328 2021-06-13 15:57:06 +02:00
NEZNAMY 90e544d279 option to take groups from backend servers 2021-06-13 11:54:03 +02:00
NEZNAMY 89e21558a1 2.8.11-pre19 2021-06-12 23:23:15 +02:00
NEZNAMY b28cc51457 spigot one dot god damn seventeen 2021-06-12 23:19:09 +02:00
NEZNAMY 2d0a203b5f increased initial delay 2021-06-12 14:28:44 +02:00
NEZNAMY 2948666c1d 2.8.11-pre18 2021-06-11 19:14:47 +02:00
NEZNAMY b2a2659546 added little comment 2021-06-11 17:14:03 +02:00
NEZNAMY e2eb7102c9 removed unnecessary 'throws' from methods 2021-06-10 21:22:15 +02:00
NEZNAMY 56301e653b splitting method into multiple 2021-06-10 21:13:40 +02:00
NEZNAMY 1d825e08d2 using correct uuid all the time 2021-06-10 19:38:46 +02:00
NEZNAMY c81a27709c 1.17 bungeecord 2021-06-10 17:22:58 +02:00
NEZNAMY 2b143172f8 spacing 2021-06-10 17:19:55 +02:00
NEZNAMY 84330ec6eb Merge branch 'master' of https://github.com/NEZNAMY/TAB 2021-06-10 17:19:25 +02:00
NEZNAMY 0bd703de7f Merge pull request #325 from Camotoy/viaversion4.0.0
Update to ViaVersion 4.0.0
2021-06-10 17:17:55 +02:00
Camotoy e6a55b7d5c Change packet ID if using 1.17 2021-06-10 11:13:45 -04:00
Camotoy b6ec7631d2 Update to ViaVersion 4.0.0
Tested on 1.17 and the bossbar showed up with no error in console.
2021-06-10 10:53:36 -04:00
NEZNAMY 5abbd00d63 fixed unloading when entering disabled world 2021-06-10 11:22:07 +02:00
NEZNAMY 515c94976e removed internal methods from TabPlayer API interface 2021-06-09 21:06:01 +02:00
NEZNAMY 912adad8f6 player 2021-06-09 20:08:36 +02:00
NEZNAMY 70fdd193a3 Merge branch 'master' of https://github.com/NEZNAMY/TAB 2021-06-09 19:43:08 +02:00
NEZNAMY 9d83e968fc Merge pull request #323 from Score2/bukkit-permission
Support to obtain bukkit permissions from bungee.
2021-06-09 19:42:35 +02:00
83669 04329da133 resolve. 2021-06-10 01:41:32 +08:00
83669 19ccfbb1a6 Merge branch 'master' of https://github.com/NEZNAMY/TAB into bukkit-permission
 Conflicts:
	velocity-1.1.0/src/main/resources/velocityconfig.yml
2021-06-10 01:29:02 +08:00
83669 c53ab09abc Support to obtain bukkit permissions from bungee. 2021-06-10 01:24:23 +08:00
NEZNAMY a4d8daac1d fixed wrong logic causing name formatting to not work 2021-06-09 16:12:33 +02:00
NEZNAMY 99d566d521 wrong action order 2021-06-09 16:05:08 +02:00
NEZNAMY aa37f73161 fixed wrong config option name 2021-06-09 15:54:12 +02:00
NEZNAMY 087518378d pom.xml cleanup 2021-06-09 15:39:57 +02:00
NEZNAMY 913d27929b shortcut and no longer requiring guava 2021-06-09 15:24:04 +02:00
NEZNAMY 530d39bec5 added property name into exception message 2021-06-09 10:47:42 +02:00
NEZNAMY cf70dc3845 fixed priorities (caused <= and >= to not work) 2021-06-08 23:17:31 +02:00
NEZNAMY d1421fee3f new colors 2021-06-08 21:58:18 +02:00
NEZNAMY 3ec490b36e only the the API now 2021-06-08 09:58:46 +02:00
NEZNAMY ee42685179 Added API to disable team handling of a player 2021-06-07 13:31:44 +02:00
NEZNAMY e02d687771 PingSpoof and SpectatorFix now properly load/unload 2021-06-06 14:55:47 +02:00
NEZNAMY dddb592253 update to default config comments 2021-06-05 20:22:20 +02:00
NEZNAMY d0ad88d317 fixed potential security issue when player is not loaded due to an error 2021-06-05 20:20:02 +02:00
NEZNAMY 3d3ce0151f added gamemode getter to TabPlayer 2021-06-05 19:56:37 +02:00
NEZNAMY f017b0e562 %canseeonline% now uses vanish detection from previous commits instead of PV API on bungeecord 2021-06-05 19:47:03 +02:00
NEZNAMY 4ba2bb669b added back 1.5 and 1.6 support 2021-06-05 16:26:32 +02:00
NEZNAMY 9fc2424736 Create FUNDING.yml 2021-06-03 16:55:26 +02:00
NEZNAMY 980c01ea70 this never happened 2021-06-01 13:25:01 +02:00
NEZNAMY 758edcaf5c fixed NPE in API usage 2021-05-30 20:48:49 +02:00
NEZNAMY 950f825e31 added unnecessary softdependency due to md5's troll console message 2021-05-30 20:47:48 +02:00
NEZNAMY 0a985f5c78 using method from component to save color codes due to limits 2021-05-28 11:43:17 +02:00
NEZNAMY 58353f4e6d wrong variable 2021-05-28 11:41:22 +02:00
NEZNAMY c3d2b5c4b0 fixed error in initialization 2021-05-28 11:19:45 +02:00
NEZNAMY c2764b4b8a removed redundant ; 2021-05-28 11:19:31 +02:00
NEZNAMY 9bc8ad0d23 typo 2021-05-28 09:47:02 +02:00
NEZNAMY 488c3540a8 using more reliable check 2021-05-27 19:58:17 +02:00
NEZNAMY 1d03950a64 removed technically useless check 2021-05-27 19:51:21 +02:00
NEZNAMY e24ea7df2e added null check, continuation of previous commit 2021-05-27 18:06:09 +02:00
NEZNAMY fe5e3d6405 better compatibility with forks that use "Unknown" server version
by using a minor version check which is more reliable
2021-05-27 16:20:08 +02:00
NEZNAMY db8584e40b correctly translating colors 2021-05-27 16:18:43 +02:00
NEZNAMY 2e4db38d1a properly compensating for the bug on all horse types 2021-05-25 14:31:44 +02:00
679 changed files with 45448 additions and 89207 deletions

No files matched your search

+7
View File
@@ -0,0 +1,7 @@
* text=auto
*.sh text eol=lf
gradlew text eol=lf
*.bat text eol=crlf
*.jar binary
-28
View File
@@ -1,28 +0,0 @@
---
name: Bug report
about: Report a bug
title: ''
labels: ''
assignees: ''
---
**Server version**
**Plugin version** ("latest" is not a version)
**Describe the bug**
**How to reproduce**
**Expected behavior**
**Actual behavior**
**Additional info** (errors, screenshots, ...)
+73
View File
@@ -0,0 +1,73 @@
name: Bug Report
description: Plugin does not work as described.
labels: ["Type: Bug"]
body:
- type: input
attributes:
label: Server version
description: Version and type of used server software where TAB is installed.
placeholder: Spigot 1.18.1
validations:
required: true
- type: input
attributes:
label: TAB version
description: Full version in numbers, "latest" is not a version.
placeholder: 3.0.2
validations:
required: true
- type: textarea
attributes:
label: Plugin list
description: Full list of plugins (output of /plugins)
placeholder: ...
validations:
required: true
- type: textarea
attributes:
label: Describe the bug
description: How the plugin behaves
validations:
required: true
- type: textarea
attributes:
label: Expected behavior
description: How the plugin is supposed to behave instead with your configuration.
validations:
required: true
- type: textarea
attributes:
label: Steps to reproduce
description: What to do in order to reproduce this issue
placeholder: |
Step 1: ..
Step 2: ..
validations:
required: true
- type: textarea
attributes:
label: Additional info
description: Anything else you want to provide that will help in resolving the issue faster, such as screenshots or videos.
validations:
required: false
- type: checkboxes
attributes:
label: Checklist
description: Let's make sure this report is valid
options:
- label: I am running latest version of the plugin
required: true
- label: I have read the wiki to make sure it's not an issue with configuration
required: true
- label: I ticked all of the boxes without actually reading them
required: false
- label: I have read the Compatibility wiki page and am not trying to run the plugin on an unsupported server version / platform
required: true
- label: I am willing to cooperate to get this issue resolved faster, including providing any additional information requested or testing new builds
required: true
@@ -0,0 +1,38 @@
name: Compatibility issue
description: A compatibility issue with another plugin/mod or a specific version of a platform marked as supported
labels: ["Type: Compatibility issue"]
body:
- type: input
attributes:
label: TAB version
description: Full version in numbers, "latest" is not a version.
placeholder: 4.0.0
validations:
required: true
- type: textarea
attributes:
label: Software causing compatibility issue
description: plugin/mod/platform version causing the issue
validations:
required: true
- type: textarea
attributes:
label: Additional info
description: Anything else you want to provide that will help in resolving the issue faster.
validations:
required: false
- type: checkboxes
attributes:
label: Checklist
description: Let's make sure this report is valid
options:
- label: I am running latest version of the plugin
required: true
- label: I ticked all of the boxes without actually reading them
required: false
- label: The compatibility wiki page does not mention this incompatibility
required: true
- label: I am willing to cooperate to get this issue resolved faster, including providing any additional information requested or testing new builds
required: true
+5
View File
@@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Support
url: https://discord.gg/YPqXt63YQj
about: Fresh new community discord providing support with all plugins, including TAB
+57
View File
@@ -0,0 +1,57 @@
name: Error
description: Error message with a stack trace in console or error file.
labels: ["Type: Error"]
body:
- type: input
attributes:
label: Server version
description: Version and type of used server software where TAB is installed.
placeholder: Spigot 1.18.1
validations:
required: true
- type: input
attributes:
label: TAB version
description: Full version in numbers, "latest" is not a version.
placeholder: 3.0.2
validations:
required: true
- type: textarea
attributes:
label: Stack trace
description: The error message and stack trace you received in console or errors.log file.
validations:
required: true
- type: textarea
attributes:
label: Steps to reproduce (if known)
description: What to do in order to reproduce this issue
placeholder: |
Step 1: ..
Step 2: ..
validations:
required: false
- type: textarea
attributes:
label: Additional info
description: Any other info you want to provide.
validations:
required: false
- type: checkboxes
attributes:
label: Checklist
description: Let's make sure this report is valid
options:
- label: I am running latest version of the plugin
required: true
- label: I have included a paste of the error
required: true
- label: I ticked all of the boxes without actually reading them
required: false
- label: I have read the Compatibility wiki page and am not trying to run the plugin on an unsupported server version / platform
required: true
+56
View File
@@ -0,0 +1,56 @@
name: Memory leak
description: Memory leak caused by TAB.
labels: ["Type: Memory leak"]
body:
- type: input
attributes:
label: Server version
description: Version and type of used server software where TAB is installed.
placeholder: Spigot 1.18.1
validations:
required: true
- type: input
attributes:
label: TAB version
description: Full version in numbers, "latest" is not a version.
placeholder: 3.0.2
validations:
required: true
- type: textarea
attributes:
label: Heap dump
description: Link to uploaded memory dump which I can look into.
validations:
required: true
- type: textarea
attributes:
label: Uncleared object(s)
description: Objects you believe should have been removed from the memory but are not
placeholder: |
There is only 1 player online, but heap dump has 100 instances of TabPlayer
validations:
required: false
- type: textarea
attributes:
label: Additional info
description: Any other info you want to provide.
validations:
required: false
- type: checkboxes
attributes:
label: Checklist
description: Let's make sure this report is valid
options:
- label: I am running latest version of the plugin
required: true
- label: I have included download link of my heap dump
required: true
- label: I ticked all of the boxes without actually reading them
required: false
- label: I have explained what I believe is wrong with the heap dump
required: true
@@ -0,0 +1,55 @@
name: Performance issue
description: Performance issue in TAB or in server caused by TAB
labels: ["Type: Performance"]
body:
- type: input
attributes:
label: Server version
description: Version and type of used server software where TAB is installed.
placeholder: Spigot 1.18.1
validations:
required: true
- type: input
attributes:
label: TAB version
description: Full version in numbers, "latest" is not a version.
placeholder: 3.0.2
validations:
required: true
- type: textarea
attributes:
label: Evidence
description: Any evidence proving the performance issue, such as output of /tab cpu or timings.
validations:
required: true
- type: textarea
attributes:
label: Steps to reproduce (if known)
description: What to do in order to reproduce this issue
placeholder: |
Step 1: ..
Step 2: ..
validations:
required: false
- type: textarea
attributes:
label: Additional info
description: Any other info you want to provide.
validations:
required: false
- type: checkboxes
attributes:
label: Checklist
description: Let's make sure this report is valid
options:
- label: I am running latest version of the plugin
required: true
- label: I have included sufficient evidence of the issue
required: true
- label: I ticked all of the boxes without actually reading them
required: false
+29
View File
@@ -0,0 +1,29 @@
name: Wiki change
description: Change to text on a wiki page or adding a new section.
labels: ["Type: Wiki change"]
body:
- type: input
attributes:
label: Page link
description: Link to the page that should receive the change.
placeholder: https://github.com/NEZNAMY/TAB/wiki/Installation
validations:
required: true
- type: textarea
attributes:
label: Current text (if applicable)
description: Current version of the text (if modifying), ignore in case of new section.
placeholder: |
Installation on Bukkit/Spigot/Paper is as simple as it can be. Just put the plugin into plugins folder and restart the server. You can also run `/plugman load tab` to load the plugin while server is running.
validations:
required: false
- type: textarea
attributes:
label: New text
description: What the text should be changed to / how should new section look
placeholder: |
Put the plugin into plugins folder and restart the server. In case you don't want to restart your server, loading with plugins like PlugMan is supported.
validations:
required: true
+14
View File
@@ -0,0 +1,14 @@
# About
This folder contains the plugin's description as advertised on various marketplaces which use various syntaxes
(bbcode, markdown).
While this is not an accurate folder to have this stored in (`.github`),
it is the closest if we don't want to create a folder for this in the root.
The file structure of this folder is as following:
| File name | Description |
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| images | Folder containing all images used in the descriptions and wiki for advertising. Used not only as a backup, but for hosting them as well, so we do not need to rely on third party websites. |
| description_markdown.md | Plugin description written in **markdown** syntax. Used by **Modrinth**. |
| description_bbcode.txt | Plugin description written in **bbcode** syntax. Used by **SpigotMC** and **BuiltByBit**. |
+178
View File
@@ -0,0 +1,178 @@
[IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_About.png[/IMG]
TAB is an all-in-one plugin for displaying information in various places, which aims to outperform all similar plugins in terms of features, compatibility and performance.
The compact configuration allows you to get the plugin to work the way you want regardless of how simple or complex you want it to be or how experienced you are. The default configuration already contains useful values and examples to give you a better understanding and get you started quickly with instant results. The extensive [URL='https://github.com/NEZNAMY/TAB/wiki']wiki[/URL] answers any of your questions.
[IMG]https://img.shields.io/badge/Release-5.0.5-blue.svg[/IMG]
[IMG]https://img.shields.io/badge/Minecraft-1.5%20--%201.21.4-blue.svg[/IMG]
[IMG]https://img.shields.io/badge/Java-8+-blue.svg[/IMG]
[URL='https://github.com/NEZNAMY/TAB'][IMG]https://img.shields.io/badge/GitHub-Source%20code-yellow.svg[/IMG][/URL]
[URL='https://github.com/NEZNAMY/TAB/issues'][IMG]https://img.shields.io/github/issues/neznamy/tab?label=Issues[/IMG][/URL]
[URL='https://github.com/NEZNAMY/TAB/wiki'][IMG]https://img.shields.io/badge/Documentation-Wiki-yellow.svg[/IMG][/URL]
[CENTER][B][SIZE=7]Discord?[/SIZE][/B][/CENTER]
Official support by me is no longer provided to free users due to limited time and extreme inefficiency (see [URL='https://github.com/NEZNAMY/TAB?tab=readme-ov-file#provided-services']provided services[/URL] for more info).
However, you can join this [URL='https://discord.gg/YPqXt63YQj']fresh new community discord[/URL] made by a nice person who promises to help everyone with all plugins, including TAB.
Before you consider requiring assistance, check out the [URL='https://github.com/NEZNAMY/TAB/wiki']wiki[/URL] first. It will answer any questions you may have and is also constantly getting improved.
[CENTER][IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_Features.png[/IMG]
[IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_HeaderFooter.png[/IMG]
[IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Example_HeaderFooter.png[/IMG][/CENTER]
[LIST]
[*]Per-world / per-server support
[*]Per-group / per-player support
[*]Disable if a specified condition is met
[/LIST]
[CENTER][IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_NameTags.png[/IMG]
[IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Example_NameTags.png[/IMG][/CENTER]
[LIST]
[*]Configurable prefix and suffix
[*]Per-world / per-server support
[*]Per-group / per-player support
[*]Disable if a specified condition is met
[*]Make nametags completely invisible
[*]Control collision rule
[*]Automatic compensation for 1.8.x client sided bug making nametags of invisible players still visible
[*]Anti-override to prevent other plugins from overriding this one
[/LIST]
[IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_Sorting.png[/IMG]
[CENTER][IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Example_Sorting.png[/IMG][/CENTER]
[LIST]
[*]Sorting by primary permission group
[*]Sorting by permission nodes
[*]Sorting by a numeric placeholder from lowest to highest or highest to lowest
[*]Alphabetically by a placeholder (A-Z or Z-A)
[*]Sorting by pre-defined placeholder values
[*]Combination of multiple sorting types
[*]Enable / disable case-sensitive sorting
[/LIST]
[CENTER][IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_TablistFormatting.png[/IMG]
[IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Example_TablistFormatting.png[/IMG][/CENTER]
[LIST]
[*]Configurable prefix, name and suffix
[*]Per-world / per-server support
[*]Per-group / per-player support
[*]Disable if a specified condition is met
[*]Anti-override to prevent other plugins from overriding this one
[/LIST]
[CENTER][IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_PlayerlistObjective.png[/IMG]
[IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Example_PlayerlistObjectiveNumber.png[/IMG]
[IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Example_PlayerlistObjectiveHealth.png[/IMG]
[IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Example_PlayerlistObjectiveFancy.png[/IMG][/CENTER]
[LIST]
[*]Display value of any numeric placeholder or hearts
[*]Display any text on 1.20.3+
[*]Disable if a specified condition is met
[/LIST]
[CENTER][IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_Belowname.png[/IMG]
[IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Example_BelownameComparison.png[/IMG][/CENTER]
[LIST]
[*]Display value of any numeric placeholder (<1.20.3) or any text (1.20.3+)
[*]Configurable text
[*]Disable if a specified condition is met
[/LIST]
[CENTER][IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_Bossbar.png[/IMG]
[IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Example_BossBar.png[/IMG][/CENTER]
[LIST]
[*]Configurable text, progress, color and style
[*]Define display condition to see a bossbar
[*]Announce defined bossbar for specified amount of time
[*]Configurable toggle command and message
[*]Option to remember toggle choice between logins
[/LIST]
[CENTER][IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_GlobalPlayerlist.png[/IMG][/CENTER]
[LIST]
[*]Display players from all servers on a proxy network in tablist
[*]Configurable server groups to share playerlist instead of with all servers
[*]Ability to create isolated servers
[*]Servers where people will see everyone
[*]Compatible with vanish plugins
[*]Option to display players from other servers as spectators
[/LIST]
[CENTER][IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_Layout.png[/IMG]
[IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Example_Layout.png[/IMG][/CENTER]
[LIST]
[*]Customize all 80 tablist slots
[*]Create static slots with any text and skin
[*]Create player groups based on conditions
[*]Multiple layouts based on conditions
[/LIST]
[CENTER][IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_Scoreboard.png[/IMG]
[IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Example_ScoreboardComparison.png[/IMG][/CENTER]
[LIST]
[*]Display up to 15 lines
[*]Option to show 0 (or any other static number) in every line instead of 1-15
[*]Fully configurable text on right side of lines on 1.20.3+
[*]Displaying different scoreboards based on conditions (output of placeholder, permissions)
[*]Up to 64 characters per line for <1.13, unlimited for 1.13+ clients
[*]Customizable toggle command and message
[*]Option to remember toggle choice between logins
[*]Automatic detection of scoreboards from other plugins to hide own and show it again once other plugin hides its scoreboard
[/LIST]
[CENTER][IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_PerWorldPlayerlist.png[/IMG][/CENTER]
[LIST]
[*]Only display players from current world in tablist
[*]Group worlds which should share players
[*]Worlds where players see everyone
[*]Option to see all players in all worlds for players with permission
[/LIST]
[CENTER][IMG]https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_API.png[/IMG][/CENTER]
[LIST]
[*]Change player prefix/name/suffix in tablist
[*]Change header/footer
[*]Change nametag prefix / suffix
[*]Change player collision rule and nametag visibility
[*]Change sorting priority
[*]Create custom scoreboards, show different scoreboard, toggle scoreboard
[*]Create custom placeholders
[*]Create custom boss bars, toggle bossbar visibility, announce bossbar
[*]... and more!
[/LIST]
[LIST]
[*]Placeholder support
[LIST]
[*]Internal placeholders with customizable output
[*]Create and use custom animations
[*]All placeholders and animations are supported in all features
[*]Full PlaceholderAPI support including relational placeholders
[*]PlaceholderAPI support on BungeeCord
[/LIST]
[*]Placeholder output replacements
[LIST]
[*]Modify output of any placeholder, including PlaceholderAPI placeholders
[*]Replace exact text with another text
[*]Change output if it's in a number interval
[*]Set value if none of the above is met
[*]Use original placeholder's output in new one
[*]Support for nested placeholders
[*]Can be used in other plugins as well
[/LIST]
[*]RGB Support
[LIST]
[*]5 supported RGB patterns
[*]4 supported gradient patterns
[*]Automatically display closest color to legacy clients
[*]Configurable color for legacy clients
[*]Supported in all features [B]where possible[/B]
[/LIST]
[*]Conditional placeholders
[LIST]
[*]Conditions based on placeholder output (comparing numeric value, exact output)
[*]Conditions based on permission node
[*]Combine conditions with AND or OR
[*]Configurable output of both cases when condition is and isn't met
[*]Placeholder support in condition output
[/LIST]
[*]High performance
[LIST]
[*]Full control of CPU usage by optimizing configuration and disabling unwanted features
[*]Fully asynchronous - no impact on TPS
[*]Check plugin's CPU usage using /tab cpu
[/LIST]
[*]RedisBungee support
[*]MySQL support
[*]Fully client-sided, server-side stays unaffected (scoreboards with their teams and objectives, bossbar entities, armor stands)
[*]Disable vanilla feature making players in spectator gamemode appear on the bottom of tablist
[*]Possible errors moved into a separate file to not spam your console
[*]Yaml error assistant for more user-friendly messages and fix suggestions
[*]Many misconfiguration checks to help solve issues much faster
[/LIST]
+165
View File
@@ -0,0 +1,165 @@
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_About.png)
TAB is an all-in-one plugin for displaying information in various places, which aims to outperform all similar plugins in terms of features, compatibility and performance.
The compact configuration allows you to get the plugin to work the way you want regardless of how simple or complex you want it to be or how experienced you are.
The default configuration already contains useful values and examples to give you a better understanding and get you started quickly with instant results.
The extensive [wiki](https://github.com/NEZNAMY/TAB/wiki) answers any of your questions.
![https://img.shields.io/badge/Release-5.0.5-blue.svg](https://img.shields.io/badge/Release-5.0.5-blue.svg)
![https://img.shields.io/badge/Minecraft-1.5%20--%201.21.4-blue.svg](https://img.shields.io/badge/Minecraft-1.5%20--%201.21.4-blue.svg)
![https://img.shields.io/badge/Java-8+-blue.svg](https://img.shields.io/badge/Java-8+-blue.svg)
[![https://img.shields.io/badge/GitHub-Source%20code-yellow.svg](https://img.shields.io/badge/GitHub-Source%20code-yellow.svg)](https://github.com/NEZNAMY/TAB)
[![https://img.shields.io/github/issues/neznamy/tab?label=Issues](https://img.shields.io/github/issues/neznamy/tab?label=Issues)](https://github.com/NEZNAMY/TAB/issues)
[![https://img.shields.io/badge/Documentation-Wiki-yellow.svg](https://img.shields.io/badge/Documentation-Wiki-yellow.svg)](https://github.com/NEZNAMY/TAB/wiki)
# Discord?
Official support by me is no longer provided to free users due to limited time and extreme inefficiency (see [provided services]([https://github.com/NEZNAMY/TAB?tab=readme-ov-file#provided-services](https://github.com/NEZNAMY/TAB?tab=readme-ov-file#provided-services)) for more info).
However, you can join this [fresh new community discord]([https://discord.gg/YPqXt63YQj](https://discord.gg/YPqXt63YQj)) made by a nice person who promises to help everyone with all plugins, including TAB.
Before you consider requiring assistance, check out the [wiki](https://github.com/NEZNAMY/TAB/wiki) first. It will answer any questions you may have and is also constantly getting improved.
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_Features.png)
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_HeaderFooter.png)
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Example_HeaderFooter.png)
* Per-world / per-server support
* Per-group / per-player support
* Disable if a specified condition is met
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_NameTags.png)
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Example_NameTags.png)
* Configurable prefix and suffix
* Per-world / per-server support
* Per-group / per-player support
* Disable if a specified condition is met
* Make nametags completely invisible
* Control collision rule
* Automatic compensation for 1.8.x client sided bug making nametags of invisible players still visible
* Anti-override to prevent other plugins from overriding this one
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_Sorting.png)
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Example_Sorting.png)
* Sorting by primary permission group
* Sorting by permission nodes
* Sorting by a numeric placeholder from lowest to highest or highest to lowest
* Alphabetically by a placeholder (A-Z or Z-A)
* Sorting by pre-defined placeholder values
* Combination of multiple sorting types
* Enable / disable case-sensitive sorting
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_TablistFormatting.png)
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Example_TablistFormatting.png)
* Configurable prefix, name and suffix
* Per-world / per-server support
* Per-group / per-player support
* Disable if a specified condition is met
* Anti-override to prevent other plugins from overriding this one
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_PlayerlistObjective.png)
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Example_PlayerlistObjectiveNumber.png)
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Example_PlayerlistObjectiveHealth.png)
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Example_PlayerlistObjectiveFancy.png)
* Display value of any numeric placeholder or hearts
* Display any text on 1.20.3+
* Disable if a specified condition is met
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_Belowname.png)
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Example_BelownameComparison.png)
* Display value of any numeric placeholder (<1.20.3) or any text (1.20.3+)
* Configurable text
* Disable if a specified condition is met
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_Bossbar.png)
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Example_BossBar.png)
* Configurable text, progress, color and style
* Define display condition to see a bossbar
* Announce defined bossbar for specified amount of time
* Configurable toggle command and message
* Option to remember toggle choice between logins
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_GlobalPlayerlist.png)
* Display players from all servers on a proxy network in tablist
* Configurable server groups to share playerlist instead of with all servers
* Ability to create isolated servers
* Servers where people will see everyone
* Compatible with vanish plugins
* Option to display players from other servers as spectators
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_Layout.png)
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Example_Layout.png)
* Customize all 80 tablist slots
* Create static slots with any text and skin
* Create player groups based on conditions
* Multiple layouts based on conditions
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_Scoreboard.png)
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Example_ScoreboardComparison.png)
* Display up to 15 lines
* Option to show 0 (or any other static number) in every line instead of 1-15
* Fully configurable text on the right side of lines on 1.20.3+
* Displaying different scoreboards based on conditions (output of placeholder, permissions)
* Up to 64 characters per line for <1.13, unlimited for 1.13+ clients
* Customizable toggle command and message
* Option to remember toggle choice between logins
* Automatic detection of scoreboards from other plugins to hide own and show it again once the other plugin hides its scoreboard
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_PerWorldPlayerlist.png)
* Only display players from the same world in tablist
* Group worlds which should share players
* Worlds where players see everyone
* Option to see all players in all worlds for players with permission
![](https://raw.githubusercontent.com/NEZNAMY/TAB/master/.github/description/images/Section_API.png)
* Change player prefix/name/suffix in tablist
* Change header/footer
* Change nametag prefix / suffix
* Change player collision rule and nametag visibility
* Change sorting priority
* Create custom scoreboards, show different scoreboard, toggle scoreboard
* Create custom placeholders
* Create custom boss bars, toggle bossbar visibility, announce bossbar
* ... and more!
.
.
.
.
.
Placeholder support
* Internal placeholders with customizable output
* Create and use custom animations
* All placeholders and animations are supported in all features
* Full [PlaceholderAPI]('https://www.spigotmc.org/resources/placeholderapi.6245/') support including [relational placeholders]('https://www.spigotmc.org/resources/placeholderapi.6245/update?update=167267')
* PlaceholderAPI support on BungeeCord / Velocity
Placeholder output replacements
* Modify output of any placeholder, including PlaceholderAPI placeholders
* Replace exact text with another text
* Change output if it's in a number interval
* Set value if none of the above is met
* Use original placeholder's output in new one
* Support for nested placeholders
* Can be used in other plugins as well
RGB Support
* 5 supported RGB patterns
* 3 supported gradient patterns
* Supported in all features **where possible**
Conditional placeholders
* Conditions based on placeholder output (comparing numeric value, exact output)
* Conditions based on permission node
* Combine conditions with `AND` or `OR`
* Configurable output of both cases when condition is and isn't met
* Placeholder support in conditions
High performance
* Full control of CPU usage by optimizing configuration and disabling unwanted features
* Fully asynchronous - no impact on TPS
* Check plugin's CPU usage using /tab cpu
RedisBungee support
MySQL support
Fully client-sided, server-side stays unaffected
Disable vanilla feature making players in spectator gamemode appear on the bottom of tablist
Possible errors moved into a separate file to not spam your console
Yaml error assistant for more user-friendly messages and fix suggestions
Many misconfiguration checks to help solve issues much faster
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

+11
View File
@@ -0,0 +1,11 @@
# About
This is a backup of the wiki in case anything happened to the repository, so the wiki will not get lost forever.
The "Clone this wiki locally" option on GitHub wiki does not actually work (the downloaded file is malformed) and cannot be used to import data from the file (?).
Since GitHub wiki does not support reading the wiki from source code, every change
to the wiki must be copied here as well. The wiki is being updated on an almost daily basis for many reasons, including, but not limited to
updating compatibility page (especially when new MC versions come out), adding more examples, improving descriptions, fixing mistakes or
adding information that was previously missing. This synchronization will be done periodically once a month.
# Hyperlinks
All hyperlinks used inside the wiki link to other wiki pages using full URLs. As a result, they will all be broken when browsing here.
This is expected and will not be resolved.
+46
View File
@@ -0,0 +1,46 @@
## Getting started
* [Why TAB?](https://github.com/NEZNAMY/TAB/wiki/Why-TAB%3F)
* [Installation](https://github.com/NEZNAMY/TAB/wiki/Installation)
* [Commands & Permissions](https://github.com/NEZNAMY/TAB/wiki/Commands-&-Permissions)
* [Frequently Asked Questions](https://github.com/NEZNAMY/TAB/wiki/Frequently-Asked-Questions)
* [Compatibility](https://github.com/NEZNAMY/TAB/wiki/Compatibility)
* [How to assign players into groups](https://github.com/NEZNAMY/TAB/wiki/How-to-assign-players-into-groups)
* [Known issues](https://github.com/NEZNAMY/TAB/wiki/Known-issues)
* [TAB-Bridge plugin](https://github.com/NEZNAMY/TAB/wiki/TAB-Bridge)
## Core features
* [Belowname](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Belowname)
* [Bossbar](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Bossbar)
* [Global playerlist](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Global-playerlist)
* [Header/Footer](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Header-&-Footer)
* [Layout](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Layout)
* [Nametags](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Nametags)
* [Per world playerlist](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Per-world-playerlist)
* [Ping spoof](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Ping-Spoof)
* [Playerlist objective](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Playerlist-Objective)
* [RedisBungee support](https://github.com/NEZNAMY/TAB/wiki/Feature-info:-RedisBungee-support)
* [Scoreboard](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Scoreboard)
* [Sorting in tablist](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Sorting-players-in-tablist)
* [Spectator fix](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Spectator-fix)
* [Tablist name formatting](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Tablist-name-formatting)
## Functions
* [Animations](https://github.com/NEZNAMY/TAB/wiki/Animations)
* [Conditional placeholders](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Conditional-placeholders)
* [Error logging](https://github.com/NEZNAMY/TAB/wiki/Error-logging)
* [MySQL](https://github.com/NEZNAMY/TAB/wiki/MySQL)
* [Placeholder output replacements](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Placeholder-output-replacements)
* [Placeholders](https://github.com/NEZNAMY/TAB/wiki/Placeholders)
* [RGB/font usage](https://github.com/NEZNAMY/TAB/wiki/How-to-use-RGB-color-codes)
## Other
* [Additional information](https://github.com/NEZNAMY/TAB/wiki/Additional-information)
* [Bedrock compatibility](https://github.com/NEZNAMY/TAB/wiki/Bedrock-compatibility)
* [Client-sided mechanics](https://github.com/NEZNAMY/TAB/wiki/Client%E2%80%90sided-mechanics)
* [Developer API](https://github.com/NEZNAMY/TAB/wiki/Developer-API)
* [How to display name from nickname plugins](https://github.com/NEZNAMY/TAB/wiki/How-to-display-name-from-nickname-plugins)
* [How to save config in UTF-8 encoding](https://github.com/NEZNAMY/TAB/wiki/How-to-save-the-config-in-UTF8-encoding)
* [How to set up compatibility with glow plugins](https://github.com/NEZNAMY/TAB/wiki/How-to-make-TAB-compatible-with-glow-plugins)
* [Mini guides collection](https://github.com/NEZNAMY/TAB/wiki/Mini-guides-collection)
* [Optimizing plugin's CPU usage](https://github.com/NEZNAMY/TAB/wiki/Optimizing-the-plugin)
* [Quick PlaceholderAPI startup guide](https://github.com/NEZNAMY/TAB/wiki/Quick-PlaceholderAPI-startup-guide)
+107
View File
@@ -0,0 +1,107 @@
# About
This is a collection of random information about the plugin not necessarily limited to a single feature or function.
# Content
* [Vanish detection](#vanish-detection)
* [Async player loading](#async-player-loading)
* [Scoreboard objective and team naming](#scoreboard-objective-and-team-naming)
* [Per-version experience](#per-version-experience)
* [Detection](#detection)
* [Differences](#differences)
* [Debug config option](#debug-config-option)
# Vanish detection
Although TAB does not manage vanishing players in any way,
it checks vanish status for features to be properly compatible.
At the moment, vanishing detection is used for:
* `%vanished%` placeholder (used for internal functionality, but can be used to display vanish status if one wants to)
* `%online%`, `%serveronline%`, `%worldonline%` and `%staffonline%` will not count vanished players
* [Global playerlist](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Global-playerlist) makes vanish plugins unable to remove players on other servers from tablist, vanish check will make TAB remove vanished players.
* Hide vanished players from [Layout](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Layout).
* Unregister teams of vanished players to players who cannot see them to prevent third party client exploits from seeing vanished players.
Permission `tab.seevanished` allows players to:
* See vanished players in [Global playerlist](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Global-playerlist).
* See vanished players in [Layout](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Layout).
* Not have teams of vanished players unregistered, which would make them not appear sorted properly and have no nametag prefix/suffix.
For a player to be detected, player has to have `vanished` metadata flag set to `true`.
Most, (if not all) vanish plugins do this, including, but not limited to CMI,
Essentials, SuperVanish, PremiumVanish and probably more.
If TAB is installed on BungeeCord,
[Bridge](https://github.com/NEZNAMY/TAB/wiki/TAB-Bridge) must be installed on backend servers
to forward vanish status to the proxy.
Additionally, if PremiumVanish is installed and vanish status of a player changes,
it is asked if the vanished player can be seen by each player.
Players who are marked as being able to see that vanished player by PV do not require `tab.seevaninished` permission.
# Async player loading
To not slow down the server, TAB loads players asynchronously on join.
As a casual user, this does not impact you, but there are some cases where you'll feel it:
* Players will not be accessible in the [API](https://github.com/NEZNAMY/TAB/wiki/Developer-API) during PlayerJoinEvent
* [TAB's PlaceholderAPI expansion](https://github.com/NEZNAMY/TAB/wiki/Placeholders#placeholderapi) will not be accessible during the join process, such as when trying to use it in plugins editing join messages (the exception is `replace_` placeholder, which doesn't directly use any TAB code).
# Scoreboard objective and team naming
There's a well-known BungeeCord bug that kicks players if a duplicate team or objective is registered.
This message also shows the name of the objective/team.
Before reporting this, make sure it actually comes from TAB.
TAB's objective and team naming:
* Objectives ("Objective ... already exists in this scoreboard")
* `TAB-BelowName` for [Belowname](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Belowname)
* `TAB-Scoreboard` for [Scoreboard](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Scoreboard)
* `TAB-PlayerList` for [Playerlist objective](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Playerlist-Objective)
* Teams ("Team ... already exists in this scoreboard")
* For sidebar scoreboard: `TAB-Sidebar-x` where `x` is a number from 1 to 15+ (for each line)
* For players: This is more complicated to use the 16-character limit to the max and heavily depends on configuration. If you are sorting by player names, part of player name will be there. It also often contains random non-alphanumeric symbols. The most reliable way is the team name (almost) always ending with `A` (or `B`, `C` etc. if you tried to sort several players into the same slot).
# Per-version experience
Minecraft has changed over the years.
It had some limits removed, some added, some bugs fixed, but also some bugs added.
TAB adapts code based on player's version for the best possible experience on each minecraft version.
## Detection
When TAB is installed on a proxy, the proxy's API is used to get player's version.
When TAB is installed on a backend server, ViaVersion's API is used to get player's version (as it's the only plugin allowing multiple versions, ProtocolSupport is abandoned).
You can check what version the plugin thinks player has by using any of the following:
* `/tab parse <player> %player-version%` - Shows version name, if multiple versions share the same protocol, the newer one is returned
* `/tab parse <player> %player-version-id%` - Returns network id of player's version
* Set `debug: true` in config and check console messages on player join, it will send a message containing game version ViaVersion API has returned
Player game version detection may fail. Here are a few possible scenarios why:
* ViaVersion is installed on BungeeCord
* And TAB on BungeeCord as well - ViaVersion makes BungeeCord API return version of the backend server player is connected to instead of player's actual version
* And TAB is on backend servers - There is no ViaVersion to hook into, therefore, there is no suspicion of player not using server's version and not having a way to verify it
* ViaVersion API returns `-1` - There is currently no known cause when or why this happens. However, when this happens, TAB prints a console warn notifying this has happened. Plugin will assume player is using the same version as the server in such cases.
When a player's game version is not detected correctly, player's experience will be very limited, see below.
## Differences
To ensure the best possible experience, TAB is currently checking for player's version to alter its logic in some way.
If a player's version is not detected correctly, a side effect might occur instead, making the situation worse.
You will not experience all of these, only those that affect the version difference between the server and client.
| Change of logic | Negative side effect if version is not detected correctly |
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Disabling [Layout](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Layout) for 1.7 players | [Layout](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Layout) entries being sent into the tablist of the player, breaking it as the layout is not designed support 1.7 |
| use alternate way of sorting [Layout](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Layout) entries for 1.19.3 - 1.21.1 as the optimal sorting way cannot be used | [Layout](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Layout) entries being out of order for 1.19.3 - 1.21.1 <br />Layout entries appearing in chat complete for <1.19.3 even if they don't have to |
| Show 1.9+ bossbar on 1.8 servers for 1.9+ players using ViaVersion API | No 1.9+ bossbar for 1.9+ players on 1.8 server |
| Disabling [Tablist name formatting](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Tablist-name-formatting) for 1.7 and lower due to a 16-character limit total to take advantage of the mechanic where nametags are displayed in tablist, which extends the limit to up to 48 characters (16 prefix, 16 name, 16 suffix) | Trying to fit the entire formatting into 16 characters, resulting in massive cutting and nametag feature not working |
| Play around <1.13 limitations of [Scoreboard](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Scoreboard) | Scoreboard lines limited to ~26 characters, even for 1.13+ clients <br />Scoreboard lines limited to 14 characters for < 1.13 clients |
| Cutting nametag prefix/suffix to 16 characters for <1.13, but keeping it full for 1.13+ | Nametag prefix/suffix being cut to 16 characters, even for 1.13+ clients |
# Debug config option
You may have noticed `debug: false` in your config.
Enabling it will unlock extra console messages beyond the usual misconfiguration / errors.
They give deeper information about what's going on in the plugin in case a more complex issue comes up.
Currently, it offers the following:
* Makes plugin print thrown errors into console as well, instead of just errors.log file. They are printed into the console even if the error log reaches the 16MB limit.
* Sends a message saying how long each feature + total it took to process player join/quit or plugin reload. High values may suggest something is not optimized correctly. Originally added for myself when optimizing, but adding/removing it each time would be too much of a hassle, so it remains as a debug message.
* Sends a message when plugin detects player name change by a nick plugin. Since lots of things are bound to player names, having players change their name and plugin not detecting it would result in plugin not working correctly them. Therefore, every time a player changes their nickname (or resets it), a message should pop up.
* Sends a message whenever another plugin sends a scoreboard (such as a mini-game plugin) and TAB hides its own. Then, when that other plugin removes its scoreboard, TAB sends its own back (and sends a console message).
* Sends a message regarding the bedrock client status of players who join in using Floodgate API. This includes a message if floodgate is not enabled correctly (API instance is null), as well as true/false bedrock status of players.
* Shows network id of protocol version of players who join when ViaVersion is installed. It should show the version players are actually using. If not, the plugin may not work correctly for those players. This is usually caused by having ViaVersion on proxy and backend.
* Sends a message whenever a placeholder takes more than 50 milliseconds to retrieve value. If it only happens once, it may be a random hiccup and can be ignored. In case of consistent problems, this may cause plugin overload.
* On proxy installation, shows how long did Bridge take to answer player join plugin message. This should be below 100ms. If it's continuously significantly higher, it suggests something bad is going on, either bridge being overloaded or the server itself.
+60
View File
@@ -0,0 +1,60 @@
# Content
* [Creating an animation](#creating-an-animation)
* [Using an animation](#using-an-animation)
* [Tips & Tricks](#tips--tricks)
* [External tools](#external-tools)
* [Additional info](#additional-info)
* [Additional note 1 - Frame synchronization](#additional-note-1---frame-synchronization)
# Creating an animation
Animations can be created in **animations.yml** file.
To begin, you can copy an already existing animation or directly modify already existing one.
Let's take a look at an example:
```animations:
Welcome: #this is name of the animation
change-interval: 400 #this is refresh interval of the animation in milliseconds
texts: #the frames of animation
- "&7&lW_"
- "&7&lW_"
- "&7&lWe_"
- "&7&lWel_"
- "&7&lWelc_"
- "&7&lWelco_"
- "&7&lWelcom_"
- "&7&lWelcome_"
- "&7&lWelcome_"
- "&7&lWelcome_"
- "&7&lWelcome_"
- "&7&lWelcom_"
- "&7&lWelco_"
- "&7&lWelc_"
- "&7&lWel_"
- "&7&lWe_"
- "&7&lW_"
- "&7&lW_"
```
This is an animation called `Welcome` with `change-interval` of `400` milliseconds, which is 2.5 refreshes per second. `Texts` are the actual frames of animation.
# Using an animation
To use an animation, use `%animation:<name>%` format.
In the example above it's `%animation:Welcome%`.
Animations are supported everywhere.
That includes header/footer, prefix/suffix, belowname, playerlist objective, bossbar and more.
# Tips & Tricks
* Animations don't need to be fast. You can use them as a changing text in general.
* Animations can also be used as a short alias to a long text. You can do this by creating an animation with one frame.
# External tools
If you want an animation too complicated to be done manually, you can check out these websites:
* https://www.birdflop.com/resources/animtab/
* https://starve-l.github.io/tab-animation.html
* https://srnyx.com/gradient
# Additional info
## Additional note 1 - Frame synchronization
All animations start at the same time, which is time of plugin being (re)loaded.
Thanks to this, all animations with the same number of frames and the same change interval will be synchronized.
If you want to synchronize multiple animations with a different change interval and different number of frames,
you need to make sure `(frame count)*(change interval)` is same for both animations,
for example one animation with 10 frames and 1000ms and second animation with 2 frames and 5000ms.
+33
View File
@@ -0,0 +1,33 @@
# Content
* [Detection](#detection)
* [Differences](#differences)
* [Issues with `.` in name](#issues-with--in-name)
# Detection
For TAB to properly detect player as a bedrock player, floodgate and TAB must be installed on the same server instance.
If TAB is installed on bukkit and floodgate is on both bungeecord and bukkit,
make sure [they are connected](https://geysermc.org/wiki/floodgate/setup/?platform=proxy-servers).
To make sure floodgate is configured correctly, you have two options:
* Set `debug: true` in TAB config and check console output on join/reload. It should say `Floodgate returned bedrock status TRUE for player <player>`.
* Run `/tab parse <player> %bedrock%`. It should return `true`.
If any of them say `false` for an actual bedrock player, you didn't connect floodgate correctly.
# Differences
It is a job of plugin allowing bedrock clients to connect (probably Geyser) to correctly translate all packets.
If you are experiencing an issue on bedrock but not java, it is most likely not an issue in TAB code.
Currently, TAB does check for bedrock clients for:
* Disabling [Layout](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Layout) for bedrock players.
This is the only known change required on the TAB's side.
# Issues with `.` in name
If you configured Geyser to prefix bedrock player names with `.`, it will mess up config loading,
because `.` is used to split a section path.
This means that using `/tab player <playername containing .> ...` will not work.
There are three solutions available:
* Use player UUID if commands are executed via another plugin (`/tab player <uuid> ...`).
* Use `playeruuid` type, which accepts player name and saves the online player's UUID (`/tab playeruuid <player name> ...`).
* Use a different username prefix than `.`.
+20
View File
@@ -0,0 +1,20 @@
# Content
* [About](#about)
* [Nametag format in tablist](#nametag-format-in-tablist)
* [Tablist entry overlap](#tablist-entry-overlap)
* [Tablist entry widths](#tablist-entry-widths)
# About
This is a collection of mechanics related to the plugin explaining how does the minecraft client process information from the server and what you can and what you cannot impact.
# Nametag format in tablist
When disabling [Tablist name formatting](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Tablist-name-formatting), nametag prefix/suffix will be displayed in tablist instead. If you don't want any prefixes in tablist, keep the feature enabled but don't set any prefixes. Disabling this option is only useful to allow other plugins to use the feature or to intentionally display teams in tablist.
# Tablist entry overlap
When having enough online players for 3–4 columns (or using [Layout](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Layout)) and their name formats are too long, they might overlap. This is caused by attempting to display text wider than the monitor can handle.
There isn't really any ideal solution for this. Here are a few tips that might help:
* Decrease GUI scale in client options to make text smaller
* Make tablist entries shorter, such as avoiding using bold text (&l) or using short aliases for ranks instead of their full names (such as `A` instead of `Admin`).
# Tablist entry widths
All tablist entries are rendered with the same width regardless of their content to match width of the longest text. This is done globally, not on a per-column basis. Therefore, one wide entry with make them all render wide, even if the content is empty. This can be a problem when using [Layout](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Layout) to force all 80 slots. Just like in the point above, you need to make the longest entry shorter to have the tablist smaller.
+144
View File
@@ -0,0 +1,144 @@
# About
This page lists all the commands and permissions that are available with TAB.
Commands have required permissions associated with them.
**BungeeCord / Velocity users:**
* If you have TAB installed **on the proxy**, use **/btab** instead of /tab. Permissions are the same.
* Permission nodes are checked on the server where the plugin is installed (by default). This means that with TAB on BungeeCord, permission nodes are checked on BungeeCord, and therefore you'll need a permission plugin there as well. If you wish to take permission groups and checks from backend servers instead, set `use-bukkit-permissions-manager: true` in config.
# Content
* [Configuration](#configuration-commands)
* [/tab \<player/group/playeruuid\> \<name\> \<property\> [value] [options]](#tab-playergroupplayeruuid-name-property-value-options)
* [/tab \<player/group/playeruuid\> \<name\> remove](#tab-playergroupplayeruuid-name-remove)
* [/tab reload](#tab-reload)
* [/tab debug [player]](#tab-debug-player)
* [/tab group \<group\>](#tab-group-group)
* [/tab groups](#tab-groups)
* [Bossbar](#bossbar)
* [/tab bossbar send \<name\> \[player\]](#tab-bossbar-show-name-player)
* [/tab bossbar [on/off/toggle] [player] [options]](#tab-bossbar-onofftoggle-player-options)
* [/tab bossbar announce \<name\> \<length\>](#tab-bossbar-announce-name-duration)
* [Scoreboard](#scoreboard)
* [/tab scoreboard show \<name\> \[player\]](#tab-scoreboard-show-name-player)
* [/tab scoreboard [on/off/toggle] [player] [options]](#tab-scoreboard-onofftoggle-player-options)
* [/tab scoreboard announce \<name\> \<length\>](#tab-scoreboard-announce-name-duration)
* [Nametags / Teams](#nametags--teams)
* [/tab nametag toggle](#tab-nametag-toggle)
* [/tab setcollision <player> <true/false>](#tab-setcollision-player-truefalse)
* [MySQL](#mysql)
* [/tab mysql upload](#tab-mysql-upload)
* [/tab mysql download](#tab-mysql-download)
* [Other](#other)
* [/tab cpu](#tab-cpu)
* [/tab parse \<player\> \<placeholder\>](#tab-parse-player-text)
* [Additional permissions](#additional-permissions)
# Configuration commands
## /tab \<player/group/playeruuid\> \<name\> \<property\> [value] [options]
* **Permission:** `tab.change.<property>`
* **Description:** Changes a property of a group/player to the given value. No value argument will result in that property being deleted.
#### Properties
* For tablist: `tabprefix`, `customtabname`, and `tabsuffix`.
* For nametag: `tagprefix` and `tagsuffix`.
#### Options
* `-s <server>` - Applying value only for a specific server
* `-w <world>` - Applying value only for a specific world
#### Names for each command type
* player: Supports both player name and raw uuid. Player doesn't need to be online.
* playeruuid: Requires name of an online player. Equal to using `player` with player's uuid.
* group: Using group names from permission plugin. `_DEFAULT_` is used for default settings for all groups.
## /tab \<player/group/playeruuid\> \<name\> remove
* **Permission:** `tab.remove`
* **Description:** Removes all direct data from the given player/group.
#### Notes
* The `playeruuid` argument requires the name of an **online player** to remove data from.
## /tab reload
* **Permission:** `tab.reload`
* **Description:** Unloads the plugin, loads configuration files including changes and loads the plugin.
## /tab debug [player]
* **Permission:** `tab.debug`
* **Description:** Shows the server version, plugin version, permission group choice logic, and sorting type. If player argument is filled, shows info about that player:
* On BungeeCord, shows whether player is connected to the backend server with [Bridge](https://github.com/NEZNAMY/TAB/wiki/TAB-Bridge) plugin or not.
* Sorting value & explanation, useful to see what went wrong if players are not sorted correctly.
* Primary group set using [How to assign players into groups](https://github.com/NEZNAMY/TAB/wiki/How-to-assign-players-into-groups)
* List of all configured properties, their values and source.
## /tab group \<group\>
* **Permission:** `tab.groupinfo`
* **Description:** Shows all settings applied to the specified group, both global and per-world / per-server. Handy when plugin is connected to MySQL, where you have no other way to effectively check group settings.
## /tab groups
* **Permission:** `tab.grouplist`
* **Description:** Shows a list of all groups that have anything assigned to them, either globally or per-world / per-server. Handy when plugin is connected to MySQL, where you have no other way to effectively check your groups.
# Scoreboard
## /tab scoreboard show \<name\> \[player\]
* **Permission:** `tab.scoreboard.show` for showing to yourself, `tab.scoreboard.show.other` for showing to others.
* **Description:** Shows the scoreboard with the given `name`, either to yourself if no `player` was given, or to the given `player`.
## /tab scoreboard [on/off/toggle] [player] [options]
* **Permission:** `tab.scoreboard.toggle` for toggling for yourself, `tab.scoreboard.toggle.other` for toggling for others.
* **Description:** Shows / hides / toggles scoreboard of specified player. If no player was given, command affects the sender.
* **Options:**
* `-s` for silent toggling (no chat message for affected player)
## /tab scoreboard announce \<name\> \<duration\>
* **Permission:** `tab.announce.scoreboard`
* **Description:** Shows the scoreboard with the given `name` to every player on the server for the given `duration`, in seconds.
# Bossbar
## /tab bossbar show \<name\> \[player\]
* **Permission:** `tab.bossbar.show` for showing to yourself, `tab.bossbar.show.other` for showing to others.
* **Description:** Shows the bossbar with the given `name`, either to yourself if no `player` was given, or to the given `player`.
## /tab bossbar [on/off/toggle] [player] [options]
* **Permission:** `tab.bossbar.toggle` for toggling for yourself, `tab.bossbar.toggle.other` for toggling for others.
* **Description:** Shows / hides / toggles bossbar of specified player. If no player was given, command affects the sender.
* **Options:**
* `-s` for silent toggling (no chat message for affected player)
## /tab bossbar announce \<name\> \<duration\>
* **Permission:** `tab.announce.bar`
* **Description:** Shows the bossbar with the given `name` to every player on the server for the given `duration`, in seconds.
# Nametags / Teams
## /tab nametag toggle
* **Permission:** `tab.nametag.toggle`
* **Description:** Toggles nametag visibility on all players for player who ran the command. Running the command again will make nametags visible again.
## /tab setcollision \<player\> \<true|false\>
* **Permission:** `tab.setcollision`
* **Description:** Forces collision rule for specified player, overriding configuration.
# MySQL
## /tab mysql upload
* **Permission:** `tab.mysql.upload`
* **Description:** Uploads all data from users.yml and groups.yml to MySQL. MySQL must be enabled and connected for this command to work.
## /tab mysql download
* **Permission:** `tab.mysql.download`
* **Description:** Downloads all data to users.yml and groups.yml from MySQL. MySQL must be enabled and connected for this command to work.
# Other
## /tab cpu
* **Permission:** `tab.cpu`
* **Description:** Shows approximate CPU usage of the plugin from the last 10 seconds. There are parts that are impossible to be measured, so this shows slightly less than the real value is. The content is self-explanatory. All major ways to decrease CPU usage can be found at [Optimizing the plugin](https://github.com/NEZNAMY/TAB/wiki/Optimizing-the-plugin).
## /tab parse \<player\> \<text\>
* **Permission:** `tab.parse`
* **Description:** Replaces all placeholders (both the plugin's internal ones, and those from PlaceholderAPI if it is installed) in the given `text`. It can be used to verify if a placeholder works as expected.
# Additional permissions
* `tab.admin` - Allows the player to execute all commands.
* `tab.bypass` - If the per-world player list is enabled as well as this permission, it allows the player to see everyone on the server, regardless of what the per-world player list settings allow. For example, if your per-world player list is set up to isolate worlds A and B, players with this permission will see all players from both A and B on their player list, whereas players that don't have the permission will only see either players from world A or players from world B, depending on what world they are in.
* `tab.staff` - Allows the player to be counted in the `%staffonline%` placeholder.
* `tab.spectatorbypass` - If enabling bypass permission in [Spectator fix](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Spectator-fix), this is the permission.
* `tab.tabcomplete` - Allows the player to auto-complete the `/tab` command.
* `tab.seevanished` - Allows the player to see other vanished players on the [Global Playerlist](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Global-playerlist) and [Layout](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Layout).
+144
View File
@@ -0,0 +1,144 @@
# Content
* [Requirements](#requirements)
* [Supported server software and versions](#supported-server-software-and-versions)
* [Supported features per platform](#supported-features-per-platform)
* [Plugin hooks](#plugin-hooks)
* [All platforms](#all-platforms)
* [Bukkit](#bukkit)
* [BungeeCord](#bungeecord)
* [Fabric](#fabric)
* [Sponge](#sponge)
* [Velocity](#velocity)
* [Compatibility issues](#compatibility-issues)
# Requirements
TAB does not depend on any other plugins.
It is compiled with Java 8 and therefore supports any version of 8 and above.
# Supported server software and versions
<table>
<thead>
<tr>
<th>Software type</th>
<th>Software name</th>
<th>Supported versions</th>
</tr>
</thead>
<tbody>
<tr>
<td rowspan=2>Vanilla</td>
<td rowspan=1><a href="https://getbukkit.org/">Bukkit</a> (+forge hybrids)</td>
<td>✔ (1.5 - 1.21.4)</td>
</tr>
<tr>
<td rowspan=1><a href="https://www.spongepowered.org/">Sponge</a></td>
<td>✔ (1.9<sup>1</sup> - 1.21.4)</td>
</tr>
</tbody>
<tbody>
<tr>
<td rowspan=2>Modded</td>
<td rowspan=1><a href="https://fabricmc.net">Fabric</a></td>
<td>✔ (1.14 - 1.21.4)</td>
</tr>
<tr>
<td rowspan=1><a href="https://minecraftforge.net">Forge</a></td>
<td>❌</td>
</tr>
</tbody>
<tbody>
<tr>
<td rowspan=2>Proxies</td>
<td rowspan=1><a href="https://ci.md-5.net/job/BungeeCord/">BungeeCord</a></td>
<td>✔ (latest only<sup>2</sup>)</td>
</tr>
<tr>
<td rowspan=1><a href="https://www.velocitypowered.com/">Velocity</a></td>
<td>✔ (latest only<sup>2</sup>)</td>
</tr>
</tbody>
</table>
<sup>1</sup> Due to a bug in Sponge 7, it cannot coexist in the same jar with classes compiled with Java higher than 8, which is required by some other platforms. To get the plugin to run on Sponge 7, you will need to do one of the following:
* Compile the plugin yourself and use the jar from `sponge7/build/libs`, which only contains sponge support instead of the universal jar from `jar/build/libs`.
* Unzip the plugin jar, go to `me/neznamy/tab/platforms/` and delete everything except `sponge7`.
<sup>2</sup> Latest only doesn't mean only the latest build will work,
it means the plugin was made to be compatible with the latest version/build.
Since breaking changes don't happen too often, it means a wide range of versions is usually supported.
When a breaking change occurs, the plugin is updated to support the new version,
automatically making old versions incompatible.
Since proxies support all client versions, there is never a reason to stay outdated,
so you can always safely update to new version/build of your proxy software if the plugin requires it.
# Supported features per platform
| Feature \ Platform | Bukkit / Hybrid | Sponge | Fabric | BungeeCord | Velocity |
| ------------- | ------------- | ------------- | ------------- | ------------- | ------------- |
| [Belowname](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Belowname) | ✔ | ✔ | ✔ | ✔ | ✔ (via [VSAPI](https://github.com/NEZNAMY/VelocityScoreboardAPI/releases)) |
| [BossBar](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Bossbar) | ✔ | ✔ | ✔ | ✔ | ✔ |
| [Global Playerlist](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Global-playerlist) | ❌ | ❌ | ❌ | ✔ | ✔ |
| [Header/Footer](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Header-&-Footer) | ✔ | ✔ | ✔ | ✔ | ✔ |
| [Layout](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Layout) | ✔ | ✔ | ✔ | ✔ | ✔ |
| [Nametags](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Nametags) & [Sorting](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Sorting-players-in-tablist) | ✔ |  ❗ | ✔ | ✔ | ✔ (via [VSAPI](https://github.com/NEZNAMY/VelocityScoreboardAPI/releases)) |
| [Per world playerlist](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Per-world-playerlist) | ✔ | ❌ | ❌ | ❌ | ❌ |
| [Playerlist objective](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Playerlist-Objective) | ✔ | ✔ | ✔ | ✔ | ✔ (via [VSAPI](https://github.com/NEZNAMY/VelocityScoreboardAPI/releases)) |
| [Scoreboard](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Scoreboard) | ✔ | ❗ | ✔ | ✔ | ✔ (via [VSAPI](https://github.com/NEZNAMY/VelocityScoreboardAPI/releases)) |
| [Spectator fix](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Spectator-fix) | ✔ | ✔ | ✔ | ✔ | ✔ |
| [Tablist names](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Tablist-name-formatting) | ✔ | ✔ | ✔ | ✔ | ✔ |
✔ = Fully functional
 ❗ = NameTags: Anti-override missing, Scoreboard: [compatibility with other plugins](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Scoreboard#compatibility-with-other-plugins) missing.
❌ = Completely missing
# Plugin hooks
To enhance user experience, TAB hooks into other plugins for better experience.
This set of plugins is different for each platform based on their availability.
Some are available on all platforms, some only in a few.
## All platforms
[**Floodgate**](https://github.com/GeyserMC/Floodgate) - For properly detecting bedrock players to adapt features for the best possible user experience.
[**LuckPerms**](https://github.com/LuckPerms/LuckPerms) - Detecting permission groups of players for per-group settings.
[**ViaVersion**](https://github.com/ViaVersion/ViaVersion) - For properly detecting player's version to adapt features for the best possible user experience.
## Bukkit
[**LibsDisguises**](https://github.com/libraryaddict/LibsDisguises) - Detecting disguised players to disable collision to avoid endless push by colliding with own copy created by LibsDisguises.
[**PlaceholderAPI**](https://github.com/PlaceholderAPI/PlaceholderAPI) - Allows users to use its placeholders inside TAB.
[**PremiumVanish**](https://www.spigotmc.org/resources/14404) - Supporting PremiumVanish's vanishing levels instead of using a basic compatibility system.
[**Vault**](https://github.com/milkbowl/Vault) - Detecting permission groups of players for per-group settings.
## BungeeCord
[**PremiumVanish**](https://www.spigotmc.org/resources/14404) -
Supporting PremiumVanish's vanishing levels instead of using a basic compatibility system.
[**RedisBungee**](https://github.com/ProxioDev/RedisBungee) -
Communicating with other proxies to properly display visuals on players on another proxy.
## Fabric
[**fabric-permissions-api**](https://github.com/lucko/fabric-permissions-api) - Supporting permission nodes instead of OP levels.
## Sponge
*None*
## Velocity
[**PremiumVanish**](https://www.spigotmc.org/resources/14404) -
Supporting PremiumVanish's vanishing levels instead of using a basic compatibility system.
[**RedisBungee**](https://github.com/ProxioDev/RedisBungee) -
Communicating with other proxies to properly display visuals on players on another proxy.
[**VelocityScoreboardAPI**](https://github.com/NEZNAMY/VelocityScoreboardAPI) -
Sending scoreboard packets (scoreboard-teams, belowname-objective, playerlist-objective, scoreboard)
# Compatibility issues
* **Glow plugins** will fail to apply glow color correctly. Check [How to make the plugin compatible with glow plugins](https://github.com/NEZNAMY/TAB/wiki/How-to-make-TAB-compatible-with-glow-plugins) for more information.
* **[Tablisknu](https://forums.skunity.com/resources/tablisknu.727/)** (skript addon) prevents TAB from assigning teams (sorting & nametags).
* **SkBee** (skript addon) sends empty scoreboard, causing TAB's to not show sometimes.
* **Waterfall**'s `disable_tab_list_rewrite: true` **may** cause tablist to use offline UUIDs while TAB expects online uuids, causing various problems (most notably tablist formatting not working). Checking for this option is not an option either, because tablist rewrite might still be enabled despite being disabled (don't ask how, I have no idea). Set the option to `false` if you are experiencing issues.
* **ViaVersion on BungeeCord and TAB on backend** acts like a client-sided protocol hack, making it impossible for TAB to know player's real version and causing issues related to it, see [Per-version experience](https://github.com/NEZNAMY/TAB/wiki/Additional-information#per-version-experience) for more info. Avoid this combination. Either install ViaVersion on all backend servers instead or install TAB on BungeeCord instead.
* **ViaVersion**'s `hide-scoreboard-numbers` config option makes [Belowname](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Belowname)'s `value` and [Playerlist objective](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Playerlist-Objective)'s `value` not visible for 1.20.3+ clients on <1.20.3 server when enabled. When using this setup, you'll need to keep the option disabled (sadly scoreboard numbers will not be hidden, solving this would require an implementation on ViaVersion's side).
* **Custom clients / resource packs** - Unofficially modified minecraft clients often tend to break things. Just Lunar client has tons of bugs that can be reproduced with TAB. Resource packs may also contain modifications you are not aware of, making things not look the way you want them to. If you are experiencing any visual issue and are using a custom client or resource pack, try it with a clean vanilla client. If it works there, it's an issue with the client / resource pack and TAB cannot do anything about it.
For example, here are a few bugs in LunarClient / FeatherClient that you may run into when using TAB:
* They add their icon to players in tablist, but don't widen the entries. This results in player names overlapping with latency bar. You can avoid this by configuring some spaces in tabsuffix.
* They don't support color field in chat components, which means they don't support RGB codes and will display bossbar without colors as well.
* Bossbar is not visible on 1.8.
* Rendering belowname 3 times.
* They don't respect nametag visibility rule, showing their own nametag using F5 even if set to invisible by the plugin.
* When the scoreboard is set to use all 0s, lines are rendered in opposite order on 1.20.3+.
* They don't display 1.20.3+ NumberFormat feature in scoreboard objectives.
* **Random Spigot/BungeeCord forks** - All safe patches for improving security & performance are present in well-known public opensource projects, such as Paper, Purpur or Waterfall. Using a random overpriced closed-source (and probably obfuscated) fork from BuiltByBit may not be safe, since they likely include unsafe patches that may break compatibility with plugins in an attempt to fix things that are not broken. Before spending your entire budget on such a fork, reconsider it first. Paper (and its forks) is a performance-oriented fork used by 2/3 of all MC servers worldwide, while the rest is still stuck on Spigot. It is highly unlikely your needs are so specific you need every single "improvement" anyone can come up with. If you need a feature, Purpur is a feature-oriented fork. Together with plugins you should achieve what you are looking for.
+97
View File
@@ -0,0 +1,97 @@
# Page content
* [Adding the dependency](#adding-the-dependency)
* [Getting started](#getting-started)
* [Lifespan of API calls](#lifespan-of-api-calls)
* [Events](#Events)
# External Content
* [BossBar](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Bossbar#api)
* [Header/Footer](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Header-&-Footer#api)
* [Nametags](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Nametags#api)
* [Scoreboard](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Scoreboard#api)
* [Sorting](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Sorting-players-in-tablist#api)
* [Tablist name formatting](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Tablist-name-formatting#api)
* [Placeholders](https://github.com/NEZNAMY/TAB/wiki/Placeholders#api)
# Adding the dependency
For Maven users, you can add the API dependency like this:
```xml
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
<dependency>
<groupId>com.github.NEZNAMY</groupId>
<artifactId>TAB-API</artifactId>
<version>5.0.5</version>
<scope>provided</scope>
</dependency>
```
Or, for Gradle users, here are a few examples:
Groovy:
```groovy
repositories {
maven { url 'https://jitpack.io' }
}
dependencies {
compileOnly 'com.github.NEZNAMY:TAB-API:5.0.5'
}
```
Kotlin:
```kotlin
repositories {
maven("https://jitpack.io")
}
dependencies {
compileOnly("com.github.NEZNAMY", "TAB-API", "5.0.5")
}
```
**WARNING: DO NOT SHADE THE API IN TO YOUR JAR! DO NOT RELOCATE THE API FROM ITS ORIGINAL PACKAGE!**
If you relocate, the API that you are calling will also get relocated in your code, meaning that you will be trying to call the relocated API. If you shade the API in, your code could load that bundled API, causing class path conflicts.
Ensure that you are using **`<scope>provided</scope>` for Maven**, or **`compileOnly` for Gradle**.
# Getting started
First, you need to get an instance of the API.
You can do this with `TabAPI.getInstance()`.
The `TabAPI` class that you want to import is located in the `me.neznamy.tab.api` package.
If you do not see this imported,
or it is imported but the package is not `me.neznamy.tab.api`, then you have the **wrong class**.
Now you have the instance, you can get a `TabPlayer` with the methods `getPlayer(UUID)` and `getPlayer(String)`, to get players by UUID and name respectively.
If no player was found with the UUID or the name that you gave, these methods will return `null`. It is important that you catch this, to avoid running in to a `NullPointerException`. You should **NOT** assume that just because a player has logged in that TAB will already have a player for them, as players are processed asynchronously. This will be especially true for join events like `PlayerJoinEvent`.
If you want to be 100% sure that the player you want is loaded when you want to process them, use `PlayerLoadEvent`.
This will give you the `TabPlayer` that has been loaded, so that you can process that `TabPlayer`.
See below for more details on how to use the event.
# Lifespan of API calls
All API calls result in temporary changes to the plugin's logic.
When the plugin is reloaded or server restarted, all previous API calls will lose effect.
This also applies for players after they reconnect—they are reset back.
If you want to perform long-term changes to player's prefix or suffix,
call TAB's [commands](https://github.com/NEZNAMY/TAB/wiki/Commands-&-Permissions) from your plugin.
If you want to re-apply your changes on plugin reload, listen to [events](#events) using plugin's own event system,
specifically `TabLoadEvent`, which is called on plugin reload.
# Events
TAB is using a custom platform-independent event API. As such, the same event listener code will work on all supported platforms. Usage is also different, let's take a look at an example:
```
TabAPI.getInstance().getEventBus().register(PlayerLoadEvent.class, event -> {
TabPlayer tabPlayer = event.getPlayer();
//do something
});
```
TAB plugin provides the following events:
* `TabLoadEvent` - Called when the plugin has finished its load, either on startup or plugin reload.
* `PlayerLoadEvent` - Called when the plugin has finished loading a player (either join or plugin reload).
* `PlaceholderRegisterEvent` - Called when the plugin is about to register a parser for used PlaceholderAPI placeholder, allowing to override it.
+52
View File
@@ -0,0 +1,52 @@
# Content
* [About](#about)
* [errors.log](#errorslog)
* [placeholder-errors.log](#placeholder-errorslog)
* [anti-override.log](#anti-overridelog)
# About
TAB logs various events in multiple files to keep the console clean.
All of these notifications are negative, so they should be looked at.
Files are only created when something is about to get logged.
This means if you have none of these files in your folder, everything is good.
It is safe to delete the logs any time while the server is running without needing to reload the plugin or anything.
All files have their sizes limited to 16 MB to avoid giant files consisting of the same error repeating over and over.
Remember these files are **logs**; therefore, after solving the problems you must delete them.
These files will not delete themselves.
After deleting a file, there is no need to perform any other action.
Every time an error is about to be logged, the file is created if it doesn't exist.
Java errors usually contain stack traces.
If you got an error spamming with an error message but no stack trace,
the most common cause is java not including it because too many errors were thrown already.
To bypass this check, add `-XX:-OmitStackTraceInFastThrow` to your startup parameters.
# errors.log
No one likes having their console spammed with errors.
Fixing errors is the most reliable solution, however, that takes time,
and you usually don't get an update fixing an error the second you report it.
Because of that, all plugin errors are moved to this file instead.
# placeholder-errors.log
This file is used
to track errors thrown by PlaceholderAPI expansions when trying to retrieve the value of a placeholder.
These should be reported to the expansion author.
First line(s) of error should give you a good idea which expansion it is,
as well as the actual placeholder which threw the error
(displayed on top of the error).
# anti-override.log
This file logs all attempts of other plugins to override TAB's visuals.
This is checking for features that only a single plugin can be displaying info in at once
(such as nametag prefix/suffix, tablist prefix/suffix).
This means that (at least) one of your plugins is not configured correctly,
and you didn't disable functions you don't want.
If you want TAB to use a feature, disable it in other plugins.
If you want a different plugin to display it, disable it in TAB (disabled features do not log this).
It is unfortunately not possible to easily figure out which plugin is causing it, you can only guess from the message.
Although this is technically unnecessary since TAB automatically blocks other plugins from overriding it,
it's good to have your plugins configured properly.
+161
View File
@@ -0,0 +1,161 @@
# Content
* [About](#about)
* [Configuration](#configuration)
* [Additional info](#additional-info)
* [Additional note 1 - Copying nametag visibility rule](#additional-note-1---copying-nametag-visibility-rule)
* [Additional note 2 - Hidden on sneak on 1.8](#additional-note-2---hidden-on-sneak-on-18)
* [Additional note 3 - Visible on NPCs](#additional-note-3---visible-on-npcs)
* [Tips & Tricks](#tips--tricks)
* [Tip 1 - Heart symbol](#tip-1---heart-symbol)
* [Tip 2 - Displaying health as 0-10 or in %](#tip-2---displaying-health-as-0-10-or-in-)
* [Limitations](#limitations)
* [Examples](#examples)
* [Example 1 - Per-world values](#example-1---per-world-values)
* [Example 2 - Hiding `title` for 1.20.3+ players](#example-2---hiding-title-for-1203-players)
# About
The scoreboard objective with BELOW_NAME display slot that adds another line of text below nametag of players.
It is only visible on players within 8-block range.
This value is client sided and cannot be changed by the plugin.
![](https://images-ext-1.discordapp.net/external/YlGPCRDJVeZZI0TPWmVBKyHszxSkjatmclyqUThvTz8/https/image.prntscr.com/image/jcETUzVQQYqectQ2aI4iqQ.png)
This line automatically appears on all player entities when enabled. **Therefore, it is not possible to only display it on some players or not display it on NPCs**.
The feature can be configured in **config.yml** under **belowname-objective** section.
The feature's properties are displayed as `[score]` + space + `title` (no, the space cannot be removed), where `[score]` is:
* `value` for 1.20.2- (will show `0` on NPCs)
* `fancy-value` for 1.20.3+ (will show `fancy-value-default` on NPCs)
# Configuration
| Option name | Default value | Description |
|---------------------|-----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| enabled | true | Enables / Disables the feature |
| value | %health% | [1.20.2-] An integer from -2147483648 to 2147483647, doesn't support decimal values. The number is always white. Supports placeholders with player-specific output, such as player health. Only visible on 1.20.2 and lower. <br/> **Note**: Even if you only support 1.20.3+, you still need to configure this value to properly evaluate to a number, because the value is still sent to the client (just not displayed). You can set it to `0` for simplicity. |
| fancy-value | &c%health% | [1.20.3+] Any text, supports placeholders with per-player output. Only visible on 1.20.3+. |
| fancy-value-default | NPC | [1.20.3+] Default display for all player entities. Plugin uses the value above for every real player, therefore this default value will only appear on player entities which are not actual players, a.k.a. NPCs. Only visible on 1.20.3+. |
| title | Health | Text displayed after `value`. It is formally called scoreboard title, which is displayed on all player entities and value is shared on all players and therefore not bound to specific players, which makes it unable to display the value per-player. It should only contain static text or placeholders which return same value for all players. All inserted placeholders are parsed for the player viewing the text. This is intentional to allow advanced configuration with conditions for per-world values for example. |
| disable-condition | %world%=disabledworld | A [condition](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Conditional-placeholders) that must be met for disabling the feature for players. Set to empty for not disabling the feature ever. |
# Additional Info
## Additional note 1 - Copying nametag visibility rule
The minecraft feature is programmed to be affected by nametag visibility rule.
This means that when the nametag is set to invisible, belowname will be invisible as well.
## Additional note 2 - Hidden on sneak on 1.8
Belowname is not visible on 1.8.x clients when player is sneaking. This is client-sided behavior and cannot be changed by the server.
## Additional note 3 - Visible on NPCs
Belowname objective is automatically attached to all entities of player type with the default value of
`0` (<1.20.3) or value configured as `fancy-value-default` (1.20.3+).
This includes player NPCs.
There is currently only one way to make them not visible on NPCs.
From [Additional note 1 - Copying nametag visibility rule](#additional-note-1---copying-nametag-visibility-rule) we know
that belowname is not visible if player's nametag is invisible.
NPC plugin can take advantage of this by using teams to hide the original name and display a hologram instead.
This is how you can achieve it using the following popular NPC plugins:
* **Citizens**:
* 1 - Select the NPC (`/npc select <ID>` or `/npc select` to select the nearest NPC)
* 2 - Hide its original nametag (which also hides belowname) using `/npc name`
* 3 - Display your desired text using `/npc hologram add <text>` ([more info](https://wiki.citizensnpcs.co/Commands#:~:text=the%20NPC%20hitbox-,/npc%20hologram,-add%20%5Btext%5D%20%7C%20set))
# Tips & Tricks
## Tip 1 - Heart symbol
If you want to show health of players and display a heart symbol as text, you can use this one: `❤`.
```
belowname-objective:
title: "&4❤"
```
> [!IMPORTANT]
> Make sure your config is saved in UTF-8 encoding to properly read the heart symbol.
## Tip 2 - Displaying health as 0-10 or in %
If you want health to display health as 0-10 instead of 0-20, you can achieve it with PlaceholderAPI:
* `%math_0_{player_health}/2%` for 0-10
* `%math_0_{player_health}*5%` for 0-100
# Limitations
* [1.5 - 1.12.2] Title length is limited to 32 characters (including color codes).
* [1.5 - 1.20.2] `value` is limited to a white number.
* The format is a **[score] + space + shared title**. No, the space cannot be removed.
* The title is the same on all players, therefore, it cannot be personalized (such as player's faction). Only [score] can be per-player.
* It appears on all entities of player type. **This includes player NPCs.**
# Examples
## Example 1 - Per-world values
This feature doesn't directly support per-world values or similar.
However, this can be achieved with conditions.
Let's make `fancy-value` conditional based on player's world.
Let's make an example with 3 worlds.
Check if player is in world `world1`, then show one text.
If not, check if player is in world `world2`, then show another text.
If not, show the final text.
This can be achieved by chaining 2 conditions:
```
conditions:
belowname1:
conditions:
- "%world%=world1"
true: "Text to display in world world1" # Player is in world world1, display the text
false: "%condition:belowname2%" # Player is not in world world1, check another condition
belowname2:
conditions:
- "%world%=world2"
true: "Text to display in world world2" # Player is in world world2, display the text
false: "Text to display in other worlds" # Player is not in any of the 2 worlds
```
> [!WARNING]
> DO NOT JUST RANDOMLY PASTE THIS ENTIRE "CONDITIONS" SECTION INTO YOUR CONFIG!
> INSTEAD, EDIT YOUR EXISTING CONDITIONS SECTION TO PREVENT HAVING THE SECTION TWICE,
> HAVING SECOND ONE COMPLETELY OVERRIDE THE FIRST ONE!
Finally, use this condition as value in `fancy-value`:
```
belowname-objective:
fancy-value: "%condition:belowname1%"
```
If you are under 1.20.3 and want to make `value` and `title` conditional,
create two condition chains, one for each value and use them.
> [!NOTE]
> This is just an example, the plugin is not limited to displaying different values only per world.
> If you want per server values on BungeeCord, use %server% with server names.
> If you want WorldGuard regions, use %worldguard_region_name% with region names.
> This works for any placeholder offered by the plugin or by PlaceholderAPI.
## Example 2 - Hiding `title` for 1.20.3+ players
1.20.3 has replaced `value` field,
which is limited to a white number with value configurable as `fancy-value`, which has no limits.
However, `title` field is still visible on 1.20.3+.
If you support both version ranges and want to make the best out of the new functionality,
you might want to not show `title` to 1.20.3+ players anymore,
since you can fully customize the text you want to display in `fancy-value`.
First, let's remind ourselves what `title` *actually* is.
It is actually called scoreboard title.
Yes, just like the one on top of sidebar, just displayed elsewhere.
This is why it displays on all players and placeholders are parsed for the viewing player.
With this knowledge, all we need to do is check for player's version and only show something for <1.20.3.
For this, we will use `%player-version-id%` placeholder,
which returns the network protocol version of player's game version, which can then be compared to.
```
conditions:
version:
- "%player-version-id%>=765" # 1.20.3 is 765
true: "" # Show empty value for 1.20.3+
false: "Some text to display"
```
> [!WARNING]
> DO NOT JUST RANDOMLY PASTE THIS ENTIRE "CONDITIONS" SECTION INTO YOUR CONFIG!
> INSTEAD, EDIT YOUR EXISTING CONDITIONS SECTION TO PREVENT HAVING THE SECTION TWICE,
> HAVING SECOND ONE COMPLETELY OVERRIDE THE FIRST ONE!
```
belowname-objective:
title: "%condition:version%"
```
Unfortunately, due to the limitations of this feature,
there is a forced space between `value`/`fancy-value` and `title`,
even if the `title` is empty.
You'll either need to live with it, or put some shared text there to avoid having a space at the end.
+221
View File
@@ -0,0 +1,221 @@
# Content
* [About](#about)
* [Configuration](#configuration)
* [Defining bossbars](#defining-bossbars)
* [style](#style)
* [color](#color)
* [progress](#progress)
* [text](#text)
* [announcement-bar](#announcement-bar)
* [display-condition](#display-condition)
* [Announce command](#announce-command)
* [Additional settings](#additional-settings)
* [Limitations](#limitations)
* [Additional info](#additional-info)
* [Additional note 1 - Hiding bar itself](#additional-note-1---hiding-bar-itself)
* [Additional note 2 - Not hiding on server switch](#additional-note-2---not-hiding-on-server-switch)
* [API](#api)
* [Tips & Tricks](#tips--tricks)
* [Tip 1 - Animated bossbar color](#tip-1---animated-bossbar-color)
* [Tip 2 - Switching between bossbars with condition](#tip-2---switching-between-bossbars-with-condition)
# About
![](https://images-ext-2.discordapp.net/external/0H5v5gcK12jm-O_kljlx-iYdJ1Q3wBsY_Dch7Jr_aAk/https/image.prntscr.com/image/x4VewIuiRwO-XLGTvDxfWw.png)
Bars with text on top of the screen originally designed to display the health of ender dragon & wither,
but plugins found another use for it.
In 1.9, mojang added a packet
dedicated to displaying text without requiring an entity and allowing customizable color and style as well.
TAB only supports this new functionality, and the feature does not support 1.8 and lower.
This feature can be configured in **config.yml** under **bossbar** section.
# Configuration
## Defining bossbars
```
bossbar:
bars:
MyBossbar:
style: "PROGRESS"
color: "%animation:barcolors%"
progress: "100"
text: "&fWebsite: &bwww.domain.com"
```
Every bossbar line has 4 properties:
### style
Type of bossbar division.
You can choose from 5 styles: **PROGRESS**, **NOTCHED_6**, **NOTCHED_10**, **NOTCHED_12** and **NOTCHED_20**
![](https://images-ext-1.discordapp.net/external/yMuJNksnulOd_ZtI3yGw6CaQhon-ewVHsqaMzT8RcGk/https/image.prntscr.com/image/FzWSvsalTW6YVRPPK3oa9g.png)
These were defined by mojang, no other options are available. Other plugins may be using different names, but it's the same result in the end.
### color
Color of bossbar.
You can choose from 7 colors: **BLUE**, **GREEN**, **PINK**, **PURPLE**, **RED**, **WHITE** and **YELLOW**
![](https://images-ext-2.discordapp.net/external/MwNGvtNT0vspb_xiGUyx_WQNayvSmb8h0Sk4W7Vxfoc/https/image.prntscr.com/image/fM7kq5XIRCiTN5n-ffpNyA.png)
These were defined by mojang, no other options are available.
### progress
A number from 0 to 100. Accepts decimals.
![image](https://user-images.githubusercontent.com/6338394/196031770-2208848c-8e38-44cc-aa49-c86427160cab.png)
If you want to show the progress of a placeholder's value relative to a maximum one, you can use the [Math Expansion](https://github.com/PlaceholderAPI/PlaceholderAPI/wiki/Placeholders#math) from PlaceholderAPI and use a placeholder like this one: `%math_{placeholder_current_value}/{placeholder_max_value}*100%` or `%math_{placeholder_current_value}/<max_value>*100%` if your max value is fixed.
> [!NOTE]
> Replace the text in between the `{}` with the actual placeholder you want to use and `<max_value>` with a valid number
(i.e., 20).
You cannot use the `%placeholder%` format inside the math placeholder.
Example for showing a player's health: `%math_{player_health}/20*100%` or `%math_{player_health}/{player_max_health}*100%`
### text
Text of the bossbar. Length is not limited, supports RGB codes on 1.16+. Does not support newlines.
### announcement-bar
When set to true, the bossbar will not appear by default, only when used in announce command.
```
bossbar:
bars:
MyBossbar:
style: "PROGRESS"
color: "BLUE"
progress: "100"
text: "Text"
announcement-bar: true #false or undefined means it will be visible all the time
```
### display-condition
[Condition](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Conditional-placeholders) that must be met for player to see the bossbar. Even when using announce command on a bossbar with display condition, players must meet it to see the bossbar. When condition is not defined, bossbar has no requirement to be displayed.
**Example**:
```
bossbar:
bars:
MyBossbar:
style: "PROGRESS"
color: "BLUE"
progress: "100"
text: "This bossbar is only visible in world 'world'"
display-condition: "%world%=world"
```
## Announce command
`/tab bossbar announce <name> <time>`
`name` is name of bossbar defined in config.yml under **bossbar** section, `time` is length of display time in seconds.
When using a bossbar announcement, you have a new placeholder available:
`%countdown%` that shows remaining time of the announcement in seconds.
You can further use this placeholder in progress, for example,
using Math expansion from PlaceholderAPI, such as `%math_{tab_placeholder_countdown}/<total time>*100%`.
## Additional settings
| Option name | Default value | Description |
|------------------------|---------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| enabled | false | Enables / Disables the feature |
| toggle-command | /bossbar | A command to toggle bossbar visibility for player running the command. This command requires `tab.bossbar.toggle` permission. <br />**Note:** This command will not appear in command auto-complete, because it's not a real registered command. Registered commands must be defined in plugin jar directly and cannot be dynamic. If you want to solve this, you can try getting a dummy private plugin made which registers that command. |
| remember-toggle-choice | false | When enabled, disabling bossbar using `toggle-command` is remembered between reloads and restarts. |
| hidden-by-default | false | When enabled, bossbar will automatically be hidden until toggle command is used. |
# Limitations
* Does not support newlines. If you want to display more lines, you'll need to create multiple bossbars.
* The bar itself cannot be removed from the server side. However, it can be removed with a resource pack.
# Additional info
## Additional note 1 - Hiding bar itself
If you want to hide the bossbar itself and only show text, this is possible, but not from the plugin's side.
You'll need to create a custom resource pack where the bar is invisible.
Then, you need to force your players to get the resource pack.
## Additional note 2 - Not hiding on server switch
When under a proxy network and having TAB installed on backend server and switching to another server,
the bossbar will not hide.
This is because BungeeCord makes it look like a world switch to the client.
To avoid this, the only way is to install TAB on BungeeCord and disable bossbar on that server.
# API
*To get started with the API, see [Developer API](https://github.com/NEZNAMY/TAB/wiki/Developer-API) page.*
To access this feature, you'll need to obtain `BossBarManager` instance. Get it using `TabAPI.getInstance().getBossBarManager()`. If this feature is disabled, the method will return `null`.
A boss bar is made up of a few things:
* A name. This is either the name given in the config, if the bar was loaded from the config, or a random UUID string when created with API.
* A title. This is the display message of the boss bar.
* The progress from 0 to 100.
* The color. This determines what color the boss bar will appear when it is shown to clients.
* The style. This determines how many segments, if any, the boss bar will be split to.
Let's start with methods in `BossBarManager`:
* `BossBarManager#createBossBar(String, float, BarColor, BarStyle` - Creates new bossbar using direct values.
* `BossBarManager#createBossBar(String, String, String, String` - Creates new bossbar. Accepts all the previous parameters as strings, to allow for placeholders, though the given placeholders must match the requirements (progress will be a number, color and style matching enum names).
* `BossBarManager#getBossBar(String)` - Returns bossbar by name defined in config.
* `BossBarManager#toggleBossBar(TabPlayer, boolean)` - Toggles all bossbars for specified player. The boolean flags whether toggle message defined in messages.yml should be sent to the player or not.
* `BossBarManager#hasBossBarVisible(TabPlayer)` - Returns `true` if player has bossbars visible, `false` if disabled using toggling.
* `BossBarManager#setBossBarVisible(TabPlayer, boolean, boolean)` - Sets bossbar visibility status for specified player to specified value (first boolean). Second boolean determines whether toggle message configured in messages.yml should be sent or not.
* `BossBarManager#sendBossBarTemporarily(TabPlayer, String, int)` - Temporarily sends bossbar to player. String defines name of the bossbar defined in config. Int defines length in milliseconds.
* `BossBarManager#announceBossBar(String, int)` - Sends bossbar with specified name in config to all players for `int` milliseconds.
* `BossBarManager#getAnnouncedBossBars()` - Returns all bossbars, which are currently being announced.
* `BossBarManager#getRegisteredBossBars()` - Returns map of all registered bossbars using configuration or the API.
Methods in `BossBar`:
* `BossBar#getName()` - Returns name of the bossbar defined in config, or randomly generated UUID string when generated using API.
* `BossBar#setTitle(String)` - Sets title. Accepts placeholders, which will be replaced and periodically updated.
* `BossBar#setProgress(String)` - Sets progress. Accepts placeholders, which will be replaced and periodically updated.
* `BossBar#setProgress(float)` - Sets progress.
* `BossBar#setColor(String)` - Sets color. Accepts placeholders, which will be replaced and periodically updated.
* `BossBar#setColor(BarColor)` - Sets color.
* `BossBar#setStyle(String)` - Sets style. Accepts placeholders, which will be replaced and periodically updated.
* `BossBar#setStyle(BarStyle)` - Sets style.
* `BossBar#getTitle()` - Returns raw title.
* `BossBar#getProgress()` - Returns raw progress as string.
* `BossBar#getColor()` - Returns raw color as string.
* `BossBar#getStyle()` - Returns raw style as string.
* `BossBar#addPlayer(TabPlayer)` - Sends the bossbar to specified player.
* `BossBar#removePlayer(TabPlayer)` - Removes the bossbar from specified player.
* `BossBar#getPlayers()` - Returns all players that can currently see this bossbar.
* `BossBar#containsPlayer(TabPlayer)` - Returns `true` if player can see this bossbar, `false` if not.
* `BossBar#isAnnouncementBar()` - Returns `true` if this bossbar is defined as announcement bar in config, `false` if visible permanently.
# Tips & Tricks
## Tip 1 - Animated bossbar color
You can animate the color of a bossbar using [animations](https://github.com/NEZNAMY/TAB/wiki/Animations).
First, create an animation in **animations.yml**, such as
```
BossColor:
change-interval: 1000
texts:
- "BLUE"
- "YELLOW"
```
Then, use the animation in bossbar configuration
```
bars:
ServerInfo:
style: "PROGRESS"
color: "%animation:BossColor%"
progress: "100"
text: "&fWebsite: &bwww.domain.com"
```
This bossbar will change color every second between blue and yellow colors.
You can do the same with progress, style and text as well.
## Tip 2 - Switching between bossbars with condition
If you want the plugin to switch between bossbars based on a condition, first consider using condition for text itself
(or some other property).
If this is not an option (you want text, color, style and progress to be different, which would result in 4 conditions),
create 2 bars and give them the same condition, except, negate it.
If your original condition uses `=`, make second condition use `!=`.
For number comparisons, negate `<` using `>=` and so on.
**Example**:
```
bars:
full:
style: "PROGRESS"
color: "YELLOW"
progress: "100"
text: "&aYour health is full"
display-condition: "%health%=20"
notfull:
style: "PROGRESS"
color: "RED"
progress: "0"
text: "&cYou took damage"
display-condition: "%health%!=20"
```
@@ -0,0 +1,217 @@
# Content
* [About](#about)
* [Condition types](#condition-types)
* [Number comparations](#number-comparations)
* [Text operations](#text-operations)
* [Permission](#permission)
* [Multiple condition requirements](#multiple-condition-requirements)
* [Condition output](#condition-output)
* [Configuration](#configuration)
* [Usage](#usage)
* [Displaying text](#displaying-text)
* [Display condition of a feature](#display-condition-of-a-feature)
* [Short format](#short-format)
* [Refresh interval](#refresh-interval)
* [Examples](#examples)
* [Example 1 - Chaining conditional placeholders](#example-1---chaining-conditional-placeholders)
* [Example 2 - Conditions in conditions](#example-2---conditions-in-conditions)
# About
Conditions / conditional placeholders allow you
to create output which depends on the output of other placeholders or permission requirement.
They have 2 main uses in the plugin:
* Display condition which must be met to be able to see something (bossbar, scoreboard, layout)
* Conditional placeholders which return defined outputs in both cases if the condition passes or fails
# Condition types
## Number comparations
`>=`: greater than or equal to
Example: `%ping%>=100` will pass if the player's ping is greater than or equal to `100`.
`>`: greater than
Example: `%ping%>100` will pass if the player's ping is greater than `100`.
`<=`: less than or equal to
Example: `%ping%<=100` will pass if the player's ping is less than or equal to `100`.
`<`: less than
Example: `%ping%<100` will pass if the player's ping is less than `100`.
## Text operations
`=`: equal to (must match exactly)
Example: `%world%=world` will pass if player is in world `world`.
`!=`: not equal to (opposite of the above)
Example: `%world%!=world` will pass if player is in any world except `world`.
**Note 1**: For `=` and `!=` you can check for empty output of a placeholder using `%my_placeholder%=` and `%my_placeholder%!=`.
`<-`: contains (left side for full text, right side text to contain)
Example: `%world%<-lobby-` will pass if player is in any world that contains `lobby-` (such as `lobby-1` etc.).
`|-`: starts with (left side for full text, right side text to start with)
Example: `%world%|-lobby-` will pass if player is in any world that starts with `lobby-` (such as `lobby-1` etc.).
`-|`: ends with (left side for full text, right side text to end with)
Example: `%world%-|nether` will pass if player is in any world that ends with `nether` (such as `world_nether` etc.).
**Note 2**: For string operators, the text must match placeholder's output exactly, including color codes.
If you are using [Placeholder output replacements](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Placeholder-output-replacements),
condition must contain the altered output.
To see the exact output of a placeholder including color codes, use `/tab parse <player> <placeholder>`.
## Permission
`permission:<value>`: permission requirement
Example: `permission:my.permission` will pass if player has `my.permission` permission.
# Multiple condition requirements
Each condition has a `conditions` parameter, which a list of conditions. If you define more than 1 condition, you must specify the condition type.
This value can be found under `type` field. Types are:
* `AND` - all sub-conditions must be met for the final condition to pass
* `OR` - at least one sub-condition must be met for the final condition to pass
If you only defined one subcondition, you don't need to define the type at all, since it's not used for anything.
# Condition output
If using condition as a placeholder, you can specify output in both cases using `yes` and `no` values. `yes` is used when condition passes, `no` if not. If using condition only as a view requirement, you can leave these values empty / not specify them at all.
# Configuration
Open **config.yml** and find this section:
```
conditions:
health:
conditions:
- '%health%<21'
- '%health%>15'
type: AND
yes: Healthy!
no: Damaged!
```
`health` is name of our condition in this case.
`conditions` is a list of subconditions that must be met for this condition to pass.
`type` defines whether all subconditions must be met or at least one.
`yes` & `no` define output in both cases.
# Usage
You have 2 ways to use conditions.
## Displaying text
The first way is to use conditions to display text.
Configure outputs in `yes` and `no` values and then use `%condition:<name>%`,
which will output text defined in `yes` or `no` depending on if condition is met or not.
<details>
<summary>Example</summary>
```
conditions:
serverName:
conditions:
- "%server%=lobby"
yes: "You are in the lobby"
no: "You are not in lobby"
```
Use with `%condition:serverName%`
</details>
## Display condition of a feature
The second way is to use condition's name in places where a condition is accepted.
This includes display conditions for bossbar, scoreboard and layout.
In these cases, yes/no texts are unused; therefore, they do not need to be defined.
<details>
<summary>Example</summary>
```
conditions:
MyCondition:
conditions:
- "permission:tab.admin"
```
```
scoreboards:
MyScoreboard:
display-condition: MyCondition
```
In this example, scoreboard will only be displayed to players with `tab.admin` permission.
</details>
### Short format
If trying to use a condition on place where it's available (bossbar display condition, scoreboard display condition) where you don't need the yes/no values, you can use a short format instead.
This can be used by simply creating all subconditions and separating them with `;` for `AND` condition type. For `OR` type, use `|`.
<details>
<summary>Example</summary>
Single condition:
```
display-condition: "%server%=lobby"
```
Multiple conditions, all of them must be met:
```
display-condition: "%server%=lobby;%world%=world"
```
Multiple conditions, at least one of them must be met:
```
display-condition: "%server%=lobby|%server%=lobby2"
```
</details>
# Refresh interval
Conditions are just placeholders after all, and, as such, they must be refreshed periodically.
Refresh intervals of conditions are not directly configurable.
They are based on placeholders used inside (subconditions, yes/no values).
Permission checks count as 1000ms.
To configure refresh intervals of placeholders,
check out the [Optimization guide](https://github.com/NEZNAMY/TAB/wiki/Optimizing-the-plugin#2---placeholder-refresh-intervals).
# Examples
## Example 1 - Chaining conditional placeholders
Let's create colored ping by chaining conditions using multiple intervals for ping quality. This specific case would be easier done using [replacements](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Placeholder-output-replacements), but this is just an example. Let's say we want <50 for good, <100 for medium and 100+ for bad. Let's create the first condition:
```
conditions:
ping:
conditions:
- "%ping%<50"
true: "&a%ping%"
false: "%condition:ping2%"
```
When ping is <50, display it as green. Otherwise, use another condition. Put them together and we get
```
conditions:
ping:
conditions:
- "%ping%<50"
true: "&a%ping%" # Ping is < 50, display as green
false: "%condition:ping2%" # Ping is 50+, check another condition
ping2:
conditions:
- "%ping%<100"
true: "&e%ping%" # Ping is < 100, display as yellow
false: "&c%ping%" # Ping is 100+, display as red
```
Finally, we can use this ping placeholder using `%condition:ping%`.
This example chained 2 conditions, but more can be used. There is no limit.
# Example 2 - Conditions in conditions
If you want to use a condition in another one,
for example, to use both "AND" and "OR" types, create 2 conditions and use one in the other one.
For example, if we want to check that player is in server `lobby` **and** in worlds **either** `world1` or `world2`,
it can be achieved in the following way:
```
conditions:
world:
conditions:
- "%world%=world1"
- "%world%=world2"
type: OR
main:
conditions:
- "%condition:world%=true"
- "%server%=lobby"
type: AND
```
Then, use condition `main` as the display condition. Note that `yes`/`no` values were not defined, as such, they default to `true` and `false`, respectively. Therefore, we use the placeholder from the condition and check if the result is `true`. Then, check if player is also in the specified server.
@@ -0,0 +1,75 @@
# Content
* [About](#about)
* [Configuration](#configuration)
* [Grouping players only from certain servers](#grouping-players-only-from-certain-servers)
* [Configuring isolated servers](#configuring-isolated-servers)
* [Seeing all players on the network from some server](#seeing-all-players-on-the-network-from-some-server)
* [Compatibility with vanish plugins](#compatibility-with-vanish-plugins)
# About
This feature allows you to see players from other servers under a bungeecord network, instead of only seeing players on the same server.
To use this feature, you need [TAB installed on bungeecord](https://github.com/NEZNAMY/TAB/wiki/Installation#bungeecord). This option is not available on bukkit and will not be added.
# Configuration
| Option name | Default value | Description |
|----------------------------------------|---------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| enabled | false | Enables / Disables the feature |
| server-groups | *Map* | See [Grouping players only from certain servers](#grouping-players-only-from-certain-servers) |
| spy-servers | *List* | See [Seeing all players on the network from some server](#seeing-all-players-on-the-network-from-some-server) |
| display-others-as-spectators | false | When enabled, players on different servers will appear as having spectator gamemode in tablist. |
| display-vanished-players-as-spectators | true | When enabled, vanished players will show as in spectator gamemode for those, who have permission to see vanished players (tab.seevanished) (others will obviously not see them at all). Vanished players will still see themselves in the gamemode they are actually in, since changing that would cause problems (client would think it's in spectator gamemode while it isn't). |
| isolate-unlisted-servers | false | When enabled, servers not listed in any group will not share playerlist with any other server, instead of sharing it with other unlisted servers. |
| update-latency | false | When **enabled**, plugin will send ping update to players on other servers, since backend servers only send ping updates of players on the same server. This is displayed as the green bar in tablist, unless altered by a mod / resource pack (?). <br /> <br />When **disabled**, ping of players on other servers will be set to 0 (5 bars). <br /> <br />Disabled by default, because it's not only not very useful, but also has a very high CPU usage to due spamming a large amount of packets (especially on large networks). |
## Grouping players only from certain servers
In case you want multiple servers to share playerlist,
but not with every server, create a server group and put servers there.
The default example
```
global-playerlist:
server-groups:
lobbies:
- lobby1
- lobby2
group2:
- server1
- server2
```
Contains 2 groups, each of them consisting of 2 servers.
Server group name can be anything (in our case, they're called "lobbies" and "group2").
Under group name, list the actual server names defined in config.yml of bungeecord.
With this setup, "lobby1" and "lobby2" will share playerlist, as well as "server1" with "server2". All unlisted servers are automatically put into a hidden default group and share playerlist. This means that all other servers except these 4 will share playerlist.
To make all servers share the playerlist, simply clear server groups and set
```
server-groups: {}
```
## Configuring isolated servers
If you want servers which are isolated (no one will see these players, and they will not see anyone on other servers),
create a new group and only put that 1 server there.
For example:
```
global-playerlist:
server-groups:
test1:
- isolatedServer1
test2:
- isolatedServer2
```
## Seeing all players on the network from some server
If, despite configuring server groups,
you want players to see everyone on the network if they're connected to specific server(s),
you can list those servers at
```
global-playerlist:
spy-servers:
- spyserver1
- spyserver2
```
Now, players connected to "spyserver1" or "spyserver2" will see everyone on the network in tablist, but no one else (unless on another spy server / in the same server group) will see them.
# Compatibility with vanish plugins
For compatibility with vanish plugins, vanish status must be detected correctly. See [Additional information - Vanish detection](https://github.com/NEZNAMY/TAB/wiki/Additional-information#vanish-detection) for more info.
+127
View File
@@ -0,0 +1,127 @@
# Content
* [About](#about)
* [Configuration](#configuration)
* [Global settings](#global-settings)
* [Per-world / per-server](#per-world--per-server)
* [Per-group / per-player](#per-group--per-player)
* [Additional info](#additional-info)
* [Additional note 1 - Not resetting on server switch](#additional-note-1---not-resetting-on-server-switch)
* [Tips & Tricks](#tips--tricks)
* [Tip 1 - Dynamic line count](#tip-1---dynamic-line-count)
* [API](#api)
# About
Minecraft feature **introduced in 1.8** showing text above and below playerlist. It cannot be displayed on 1.7 clients in any way.
![](https://images-ext-2.discordapp.net/external/Jm9G7_fX8Rq4KU-Syj57W2a_leel380bZ4lmd6c0vBs/https/image.prntscr.com/image/qvuAdtgZTDeZ4IeABi8I3g.png)
# Configuration
| Option name | Default value | Description |
|-------------------|-----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| enabled | true | Enables / Disables the feature |
| disable-condition | %world%=disabledworld | A [condition](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Conditional-placeholders) that must be met for disabling the feature for players. Set to empty for not disabling the feature ever. |
## Global settings
The example above is using this configuration:
```
header-footer:
header:
- "This is the first line of header"
- "2nd line of header"
footer:
- "This is the first line of footer"
- "2nd line of footer"
```
It is the default header/footer for everyone, unless overridden in some way.
## Per-world / per-server
```
header-footer:
per-world:
<your world>:
header:
- "Header in specified world"
footer:
- "Footer in specified world"
per-server:
<your server>:
header:
- "Header in specified server"
footer:
- "Footer in specified server"
```
For multiple worlds/servers to share the same settings, separate them with `;`.
For worlds/servers starting with a specified text, use `*` after the shared part. For ending with a shared part, use `*` at the beginning.
Example:
```
header-footer:
per-world:
world1;world2:
header:
- "Shared header in worlds world1 and world2"
lobby-*:
header:
- "Header in all worlds starting with lobby-"
```
> [!NOTE]
> To make per-world work on proxy installation,
> install the [TAB-Bridge](https://www.mc-market.org/resources/21641) plugin on your backend servers.
## Per-group / per-player
**groups.yml**
```
MyGroup:
header:
- "This is a header for MyGroup group"
footer:
- "This is a footer for MyGroup group"
per-world:
MyWorld:
TestGroup:
header:
- "Header for group TestGroup in world MyWorld"
```
Same for users, which can be configured in **users.yml**.
# Additional info
## Additional note 1 - Not resetting on server switch
When under a BungeeCord network and having TAB installed on backend server and switching to another server, the header/footer will not reset. This is because BungeeCord makes it look like a world switch to the client. To avoid this, you have 2 options:
* Install TAB on BungeeCord and disable header/footer on the server.
* Install a plugin that sends some, or even empty header/footer on join.
# Tips & Tricks
## Tip 1 - Dynamic line count
The entire header is just a single character sequence that allows newline symbol (`\n`) for new lines. It is only being split into multiple lines in config for convenience to make it readable when configuring and editing. Same for footer.
If using a placeholder that returns the newline symbol, it will create a new line. You can use this to your advantage and create a [conditional placeholder](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Conditional-placeholders) or an [animation](https://github.com/NEZNAMY/TAB/wiki/Animations) that includes newline in some frames.
<details>
<summary>Example</summary>
**animations.yml**
```
MyAnimation:
change-interval: 1000
texts:
- "First frame with only 1 line"
- "Second frame\nconsisting of 2 lines"
```
**config.yml**
```
header-footer:
header:
- "%animation:MyAnimation%"
```
</details>
# API
*To get started with the API, see [Developer API](https://github.com/NEZNAMY/TAB/wiki/Developer-API) page.*
To access this feature, you'll need to obtain `HeaderFooterManager` instance. Get it using `TabAPI.getInstance().getHeaderFooterManager()`. If this feature is disabled, the method will return `null`.
To set the header and/or footer for a player, use the following:
* `HeaderFooterManager#setHeader(TabPlayer, String)`
* `HeaderFooterManager#setFooter(TabPlayer, String)`
* `HeaderFooterManager#setHeaderAndFooter(TabPlayer, String, String)`
To reset the header and/or footer for a player back to their original values, use `null` as argument.
+282
View File
@@ -0,0 +1,282 @@
# Content
* [About](#about)
* [Creating a layout](#creating-a-layout)
* [Display condition](#display-condition)
* [Fixed slots](#fixed-slots)
* [Player groups](#player-groups)
* [Managing multiple layouts with conditions](#managing-multiple-layouts-with-conditions)
* [Skins](#skins)
* [Format](#format)
* [Additional settings](#additional-settings)
* [Additional info](#additional-info)
* [Additional note 1 - Playerlist objective incompatibility](#additional-note-1---playerlist-objective-incompatibility)
* [Additional note 2 - Global playerlist incompatibility](#additional-note-2---global-playerlist-incompatibility)
* [Additional note 3 - [1.19.3 - 1.21.1] Entries in chat complete](#additional-note-3---1193---1211-entries-in-chat-complete)
* [Additional note 4 - Per world playerlist incompatibility](#additional-note-4---per-world-playerlist-incompatibility)
* [Additional note 5 - [1.8 - 1.21.3] Second layer of skin missing](#additional-note-5---18---1213-second-layer-of-skin-missing)
* [Examples](#examples)
* [Example 1 - Per-server columns](#example-1---per-server-columns)
# About
This feature allows you to customize all 80 tablist slots. Displaying less than 4 columns is currently not supported. This feature can be enabled and configured in **config.yml** file under **layout** section.
This feature is only available for versions **1.8** and up due to massive tablist changes, which would make 1.7- compatibility require a complete rewrite of the functionality and could still cause all kinds of visual issues, including, but not limited to compatibility with other plugins adding/removing players from the tablist.
# Creating a layout
Layouts can be creating in config under `layout.layouts` section. Each layout contains 3 settings: Fixed slots, player groups and display condition (optional).
## Display condition
Condition that must be met for player to see the layout.
If player does not meet the condition, the next defined layout's condition is checked.
If a player does not meet any defined display condition, they will see the default tablist.
Display condition is optional and doesn't need to be set.
For list of possible condition types see [Conditions page](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Conditional-placeholders).
Example:
```
layouts:
staff:
condition: "permission:tab.staff"
```
This layout will only be visible to players with `tab.staff` permission.
## Fixed slots
These are slots with fixed position that contain configurable text and skin.
They can be configured under `fixed-slots` option of each layout. The definition syntax is `SLOT|TEXT|SKIN`. If you don't want to define custom skin for that slot, use `SLOT|TEXT`.
`SLOT` - The position of the fixed slot. It can be from 1 to 80. By default, the direction is set to columns, so the first column is 1-20.
`TEXT` - the text. It supports placeholders.
`SKIN` - layout's skin, see below for configuration.
Example:
```
layouts:
staff:
fixed-slots:
- '1|&3RAM&f:'
- '2|&b%memory-used%MB / %memory-max%MB'
- '3|&8&m '
- '4|&3TPS&f:'
- '5|&b%tps%'
```
## Player groups
These are groups of players that meet the specified condition. They consist of 2 parts - condition and slots.
**1. Condition**
The condition players must meet to be displayed in the group.
If a player doesn't meet condition for a group, the next group's condition is checked
(groups are checked in the order they are defined in config).
If player doesn't meet any condition, they are not displayed at all.
Display condition is not required (can be used to make a "default" group with the remaining players).
**2. Slots**
Slot intervals dedicated to the group. Interval `1-5` would mean all slots from 1 to 5. In case you want to define multiple intervals to exclude some slots, define another interval below the first one.
Example:
```
layouts:
myLayout:
groups:
staff:
condition: permission:tab.staff
slots:
- '24-40'
players:
slots:
- '44-80'
```
In this example, slots `24-40` will be reserved for players with `tab.staff` permission. Players without that permission will be in slots `44-80`.
# Managing multiple layouts with conditions
You can define multiple layouts and display them based on a condition.
To do so, define `condition` for layouts.
Conditions are checked in the order layouts are defined in config.
If layout doesn't specify condition, it is displayed with no requirement.
If a player does not meet display condition for any layout, they will see the classic tablist.
Example:
```
layouts:
staff:
condition: "permission:tab.staff"
fixed-slots:
...
groups:
...
default:
fixed-slots:
...
groups:
...
```
In this example, players with `tab.staff` permission will see `staff` layout, others will see `default` layout.
# Skins
In slots where players are, their skin is displayed. For fixed slots, if their skin is defined, it is used, otherwise `default-skin` is used. It is also used if invalid skin is specified anywhere.
## Format
Currently, TAB supports 3 skin formats:
* `mineskin:<ID>` - takes UUID from [MineSkin](https://mineskin.org). You can find some pre-uploaded skins at the bottom of this page.
* `player:<name>` - displays skin of player `name`
* `texture:<texture>` - uses literal skin texture. This lets you use heads from [Minecraft-Heads](https://minecraft-heads.com/custom-heads) by taking the texture in the `Minecraft-URL` field.
![](https://cdn.discordapp.com/attachments/817789229479624728/916373892237512715/unknown.png)
Some pre-uploaded Mineskin skins:
```yml
BTLP's balance.png: 510604280
BTLP's clock.png: 2053951237
BTLP's server.png: 604037953
BTLP's ping.png: 796704708
BTLP's players.png: 1160612233
BTLP's rank.png: 527763880
Aqua: 1749359849
Black: 1551047136
Blue: 1870064311
Dark Aqua: 1893783461
Dark Blue: 899643609
Dark Gray: 383747683
Dark Green: 588254656
Dark Purple: 2061328517
Dark Red: 924139093
Gold: 1074335506
Gray: 745109047
Green: 224445819
Pink: 1818936290
Red: 1160568696
White: 1105851698
Yellow: 1307755006
```
# Additional settings
| Option name | Default value | Description |
|-------------------------------|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| direction | COLUMNS | Defines direction of slots. Options are COLUMNS (top to bottom, left to right) and ROWS (left to right, top to bottom). This does not only change the slot numbers in configuration, but will also affect the way players are being filled into player groups. |
| enable-remaining-players-text | true | When enabled, the last slot of player group will show how many more players there are, instead of using the last slot for one more player. |
| remaining-players-text | "... and %s more" | Text to show if option above is enabled. |
| default-skin | "mineskin:383747683" | Default skin to display for fixed slots that do not define a skin, empty slots and fixed slots with invalid skin. |
| empty-slot-ping-value | 1000 | Ping value to use for fixed slots and empty slots. The ping intervals for bars are client sided and are as following: <br />- Negative value: ✖ <br />- 0 - 149: 5 bars <br />- 150 - 299: 4 bars <br />- 300 - 599: 3 bars <br />- 600 - 999: 2 bars <br />- 1000+: 1 bar |
![image](https://user-images.githubusercontent.com/6338394/179363352-40f815d4-fc37-4ca1-8056-298488e84a60.png)
![image](https://user-images.githubusercontent.com/6338394/179355373-3e50b8c5-95d7-4470-b93f-deb162ccc145.png)
# Additional info
## Additional note 1 - Playerlist objective incompatibility
To avoid showing fake players in tab-complete, TAB uses an empty string as the fake players' names.
Though Minecraft's scoreboard objectives (which help achieve the Playerlist objective feature) only use players' names and not players' UUIDs to define values.
As a result, it is impossible for TAB to assign a different value for each fake player since they all have the same name, making the [Playerlist objective](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Playerlist-Objective) feature incompatible.
## Additional note 2 - Global playerlist incompatibility
The way this feature works is by pushing all real players out of the tablist and showing fake players instead.
As a result, enabling [Global playerlist](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Global-playerlist) feature won't make any difference, since real players aren't visible in the tablist.
Layout feature is capable of working with all online players connected to the server where TAB is installed, meaning it can show players from all servers when installed on BungeeCord. Because of this, if you use layout, you can disable global playerlist to reduce resource usage.
## Additional note 3 - [1.19.3 - 1.21.1] Entries in chat complete
From 1.19.3 until 1.21.1 (inclusive), entries will also appear in chat complete.
The mechanic used to hide them on <1.19.3 can no longer be used since 1.19.3.
1.21.2 has added a new way of sorting players, which is being taken advantage of to restore empty chat complete.
> [!NOTE]
> To hide entries from chat complete on 1.21.2+,
the server also has to be 1.21.2+ so TAB can send the new content to the players
(having TAB installed on proxy counts as using the latest version).
## Additional note 4 - Per world playerlist incompatibility
Layout works by adding 80 fake players into the tablist, pushing real player entries out of view.
Because of this,
when using [per world playerlist](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Per-world-playerlist),
the feature will only hide the real players,
which are outside tablist and not visible anyway and not touch the layout entries.
However, you can replicate the same effect using layout feature itself, using conditions.
<details>
<summary>Example</summary>
*We are going to ignore fixed slots in the examples,
as they don't affect anything, and you can just configure them however you want.*
Let's create 2 layouts, one for world `world1` and one for world `world2`.
Each layout only displays players in that world.
```
layouts:
layout1:
condition: "%world%=world1"
fixed-slots: []
groups:
players:
condition: "%world%=world1"
slots:
- 1-80
layout2:
condition: "%world%=world2"
fixed-slots: []
groups:
players:
condition: "%world%=world2"
slots:
- 1-80
```
You can also merge multiple worlds into a group.
```
layouts:
layout1:
condition: "%world%=world1|%world%=world2"
fixed-slots: []
groups:
players:
condition: "%world%=world1|%world%=world2"
slots:
- 1-80
```
You can also replicate "ignore-effect-in-worlds" by creating a layout with condition for displaying, but not for groups.
```
layouts:
globalWorld:
condition: "%world%=globalWorld"
fixed-slots: []
groups:
players: # No condition here to show all players
slots:
- 1-80
```
</details>
## Additional note 5 - [1.8 - 1.21.3] Second layer of skin missing
Layout works by creating 80 fake entries, pushing real players out of the tablist.
Unfortunately, players must be spawned around the player viewing the tablist to see the second layer of their skin.
Since those fake entries you see are not the actual players and aren't spawned,
as a result, you won't see the second layers of skins.
This can only be fixed by actually letting the real entries display in the tablist,
which would require a rework of the feature, which is not planned.
**1.21.4 has added a new tablist option called "show hats", which layout sets to true.
They will be visible for 1.21.4+ players on 1.21.4+ servers (using a proxy counts as being latest).**
# Examples
## Example 1 - Per-server columns
```
layout:
enabled: true
direction: COLUMNS
default-skin: mineskin:383747683
enable-remaining-players-text: true
remaining-players-text: '... and %s more'
empty-slot-ping-value: 1000
layouts:
default:
fixed-slots:
- "1|&2&lLobby"
- "21|&2&lSurvival"
- "41|&2&lCreative"
- "61|&2&lSkyblock"
groups:
lobby:
condition: "%server%=lobby"
slots:
- 2-20
survival:
condition: "%server%=survival"
slots:
- 22-40
creative:
condition: "%server%=creative"
slots:
- 42-60
skyblock:
condition: "%server%=skyblock"
slots:
- 62-80
```
You can also remove the last condition (in this case `condition: "%server=skyblock%"`) and the columns will be used for all other servers, instead of just a specified one.
![image](https://github.com/NEZNAMY/TAB/assets/6338394/81016b5a-9b40-445e-8bfc-58204f5457f5)
+226
View File
@@ -0,0 +1,226 @@
# Content
* [About](#about)
* [Configuration](#configuration)
* [Groups and users](#groups-and-users)
* [Per-world / per-server](#per-world--per-server)
* [Priority system](#priority-system)
* [Placeholder support](#placeholder-support)
* [Additional settings](#additional-settings)
* [Tips & Tricks](#tips--tricks)
* [Limitations](#limitations)
* [Additional info](#additional-info)
* [Additional note 1 - NPC (in)compatibility](#additional-note-1---npc-incompatibility)
* [Additional note 2 - Prefix/suffix on pets](#additional-note-2---prefixsuffix-on-pets)
* [Additional note 3 - Changing name itself](#additional-note-3---changing-name-itself)
* [Additional note 4 - F1 view](#additional-note-4---f1-view)
* [Additional note 5 - Transparent players](#additional-note-5---transparent-players)
* [API](#api)
* [Changing prefix and suffix](#changing-prefix-and-suffix)
* [Collision](#collision)
* [Manipulating visibility](#manipulating-visibility)
* [Disabling team handling](#disabling-team-handling)
# About
Nametags are controlled by a feature called scoreboard teams. They offer 6 properties:
* Team name - used for sorting players in tablist, see [Sorting guide](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Sorting-players-in-tablist) for more info
* Prefix - prefix displayed in nametag, it will be referred to as `tagprefix`
* Suffix - suffix displayed in nametag, it will be referred to as `tagsuffix`
* Nametag visibility rule
* Collision rule
* Team color (1.13+) - used to set name and glow color (check out [How to make TAB compatible with glow plugins](https://github.com/NEZNAMY/TAB/wiki/How-to-make-TAB-compatible-with-glow-plugins)) (on 1.12- it uses last color of prefix).
When enabling this feature, TAB will control all of these. It is not possible to take values from 2 different teams (plugins). Most of the compatibility problems with other plugins can be solved with placeholders. If you want sorting but not nametags, just don't configure any prefix/suffix. If you want another plugin to handle teams, configure sorting in that plugin.
This feature can be configured in **config.yml** under **scoreboard-teams** section.
# Configuration
## Groups and users
Properties can be applied in 2 ways: groups and users. Users can be defined by both username and their UUID. Values applied to users take priority over groups.
**groups.yml**
```
admin:
tagprefix: "&4&lAdmin &r"
```
This can also be achieved with commands, in this case `/tab group admin tagprefix "&4&lAdmin &r"`.
**users.yml**
```
_NEZNAMY_:
tagprefix: "&6&lTAB &r"
# An alternate way using UUID
237d8b55-3f97-4749-aa60-e9fe97b45062:
tagprefix: "&6&lTAB &r"
```
This can also be achieved with commands, in this case `/tab player _NEZNAMY_ tagprefix "&4&lAdmin &r"` or `/tab playeruuid _NEZNAMY_ tagprefix "&4&lAdmin &r"`.
Properties can also be set as "default" for everyone who does not have them defined.
For that purpose, a group keyword `_DEFAULT_` was made.
Example:
**groups.yml**
```
admin:
tagprefix: "&4&lAdmin &r"
_DEFAULT_:
tagprefix: "&7" # This will be displayed on everyone except admin
```
## Per-world / per-server
Values can also be applied per-world (and per-server on bungeecord), where they can be defined per group/user. These values take priority over global settings. Example:
**groups.yml**
```
per-world:
world1:
_DEFAULT_:
tagprefix: "&a" # Everyone in world "world1" will have this prefix
per-server:
server1:
_DEFAULT_:
tagprefix: "&a" # Everyone in server "server1" will have this prefix
```
For multiple worlds/servers to share the same settings, separate them with a`;`.
For worlds/server starting with a specified text, use `*` after shared part. For ending with a shared part, use `*` at the beginning.
Example:
```
per-world:
world1;world2:
_DEFAULT_:
tagsuffix: "Shared tagsuffix in worlds world1 and world2"
lobby-*:
_DEFAULT_:
tagsuffix: "Suffix in all worlds starting with lobby-"
```
## Priority system
The full list of priorities looks like this:
1. value set using the [API](#api)
2. per-world / per-server applied to username
3. value applied to username
4. per-world / per-server applied to uuid
5. value applied to uuid
6. per-world / per-server applied to player's group
7. per-world / per-server applied to group `_DEFAULT_`
8. value applied to player's group
9. value applied to group `_DEFAULT_`
This list is browsed through until the first match is found. If no match is found, empty value is used.
Values are taken independently of each other.
This means you can set per-world tagprefix, but only keep one global tagsuffix, for example.
You can see the source of a value displayed on player by using `/tab debug <player>` and checking "source"
part of the value you are looking for.
## Placeholder support
All values fully support [TAB's internal placeholders](https://github.com/NEZNAMY/TAB/wiki/Placeholders#internal-placeholders) and [PlaceholderAPI placeholders](https://github.com/PlaceholderAPI/PlaceholderAPI/wiki/Placeholders) including relational placeholders.
The number of placeholders is not limited, and they can be used in combination with static text as well.
## Additional settings
| Option name | Default value | Description |
|-----------------------------|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| enabled | true | Enables / Disables the feature |
| enable-collision | true | Controls collision rule. Available values are: <br />- `true` - Collision will be enabled permanently. <br />- `false` - Collision will be disabled permanently. <br /> - *Conditional expression* - Collision will be enabled if player meets the condition (for example `%world%=world` will result in collision only being enabled for players in world `world`). <br /> - *Condition name* - Uses name of a [defined condition](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Conditional-placeholders) that must be met for a player to have collision enabled. |
| invisible-nametags | false | When enabled, everyone will have invisible nametag all the time. Option to hide nametags was added in minecraft **1.8**, therefore it will not work on 1.7 and lower. |
| anti-override | true | While enabled, prevents other plugins from assigning online players into teams and making TAB not work correctly. They should be configured to not use teams, however many users fail to disable features in other plugins that they don't want, making this option required. Some plugins don't even say they use teams to achieve their goals. Did you know even Paper uses teams? |
| can-see-friendly-invisibles | false | Controlling value of the team flag. It allows you to see invisible players in the same team as transparent instead of completely invisible. Since TAB places each player into an individual team, this option will only take effect in combination with plugins that spawn a dummy clone of the player (sit or disguise plugins). |
| disable-condition | %world%=disabledworld | A [condition](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Conditional-placeholders) that must be met for disabling the feature for players. Set to empty for not disabling the feature ever. |
# Tips & Tricks
If you want TAB to only take prefixes/suffixes from the permission plugin,
delete all groups from **groups.yml** and only keep this:
```
_DEFAULT_:
tagprefix: "%luckperms-prefix%"
tagsuffix: "%luckperms-suffix%"
```
# Limitations
* [1.5 - 1.12.2] Prefix/suffix length is limited to 16 characters (including color codes).
* [1.13+] The name can only have one code. That is either color or magic code (such as &4 or &l), but not both.
* The name cannot be effectively changed and the plugin doesn't offer it.
* Name does not support RGB codes. Any used RGB colors will be rounded to the nearest legacy code.
* The same value manages name color and glow color, which means they cannot be different.
# Additional info
## Additional note 1 - NPC (in)compatibility
Teams are bound to player names, not uuids or entity ids.
Because of that, they will affect all player entities with that name.
This includes NPCs with the same names as online players, and prefixes/suffixes will be displayed on those as well.
To avoid it, make their names not match any online player and use holograms to display them instead
(Citizens plugin has an option for this).
## Additional note 2 - Prefix/suffix on pets
Since 1.9 teams affect tamed animals as well, displaying prefix/suffix on them as well and if nametags are set to be invisible, they will be completely invisible as well. If you want to avoid it, install [this plugin](https://www.spigotmc.org/resources/109466/).
## Additional note 3 - Changing name itself
Teams do not allow to change the nametag name itself.
Changing name is a complicated process which is slightly out of scope of the plugin as well,
this is what nick plugins are about.
On top of that, it's a pain
requiring a ton of different packets which change their structure every version and with how many versions the plugin supports,
it doesn't sound like fun doing.
## Additional note 4 - F1 view
Using teams causes player nametags to remain visible when using F1 view.
The plugin cannot avoid this in any way.
The only possible solution would be to modify the client.
## Additional note 5 - Transparent players
Minecraft's teams can show players in the same team transparent (partially invisible).
This requires both players (viewer and target) to be in the same team.
As such, this effect is impossible to achieve with TAB,
because it puts every player into a different team
to properly sort players and give them different prefix/suffix in nametag
(and more, such as collision and nametag visibility).
If you want this effect, the only way is to use another plugin that offers this and disable TAB's teams entirely by setting
```
scoreboard-teams:
enabled: false
```
In config.yml. Keep in mind, you'll not be able to use any team features if you do so.
# API
*To get started with the API, see [Developer API](https://github.com/NEZNAMY/TAB/wiki/Developer-API) page.*
To access this feature, you'll need to obtain `NameTagManager` instance. Get it using `TabAPI.getInstance().getNameTagManager()`. If this feature is disabled, the method will return `null`.
## Changing prefix and suffix
To set the values for the respective formatting, use the following:
* `NameTagManager#setPrefix(TabPlayer, String)`
* `NameTagManager#setSuffix(TabPlayer, String)`
To reset them, set values to `null`.
To get custom values previously set using the API (they will return `null` if no custom value is set):
* `NameTagManager#getCustomPrefix(TabPlayer)`
* `NameTagManager#getCustomSuffix(TabPlayer)`
To get the original value set by the plugin based on configuration:
* `NameTagManager#getOriginalPrefix(TabPlayer)`
* `NameTagManager#getOriginalSuffix(TabPlayer)`
> [!NOTE]
> These values are only temporary,
> meaning they won't get saved anywhere and will get reset on player quit or plugin reload.
> If you wish to save these values into file,
> use [commands](https://github.com/NEZNAMY/TAB/wiki/Commands-&-Permissions#tab-playergroupplayeruuid-name-property-value-options).
## Collision
* `NameTagManager#getCollisionRule(TabPlayer)` - Returns forced collision rule using the API, `null` if no value was forced and player follows the configuration.
* `NameTagManager#setCollisionRule(TabPlayer, Boolean)` - Forces collision rule to the player. Use `null` to reset value and make it follow configuration again.
## Manipulating visibility
* `NameTagManager#hideNametag(TabPlayer)` - Hides player's nametag from all players
* `NameTagManager#hideNametag(TabPlayer, TabPlayer)` - Hides player's nametag from a specific player, where the first `TabPlayer` is the player whose nametag you want to hide, and the second `TabPlayer` is the player who you want to hide the first player's nametag from.
* `NameTagManager#showNametag(TabPlayer)` - Shows player's nametag back again for everyone
* `NameTagManager#showNametag(TabPlayer, TabPlayer)` - Shows player's nametag back. The first `TabPlayer` is the player whose nametag you want to show, and the second `TabPlayer` is the player who you want to show the first player's nametag to.
* `NameTagManager#hasHiddenNametag(TabPlayer)` - Returns `true` if player has hidden nametag for everyone, `false` if not
* `NameTagManager#hasHiddenNametag(TabPlayer, TabPlayer)` - Returns `true` if player has hidden nametag for specific player, `false` if not. The first `TabPlayer` is the player whose nametag you want to check is hidden, and the second `TabPlayer` is the player who you want to check if they can see the first player's nametag.
## Disabling team handling
* `NameTagManager#pauseTeamHandling(TabPlayer)` - Pauses team handling for a specific player. This will unregister the player's team and disable anti-override for teams.
* `NameTagManager#resumeTeamHandling(TabPlayer)` - Resumes team handling for a specific player. This will register the player's team and enable anti-override for teams.
* `NameTagManager#hasTeamHandlingPaused(TabPlayer)` - Returns `true` if handling is disabled using methods above, `false` if not.
@@ -0,0 +1,35 @@
# Content
* [About](#about)
* [Configuration](#configuration)
* [Grouping playerlist from multiple worlds](#grouping-playerlist-from-multiple-worlds)
# About
This feature allows you to limit players you see in tablist to only players in your world, or in a group of worlds.
This feature can be configured in **config.yml** under **per-world-playerlist** section.
To use it, you need TAB installed on bukkit server. This feature is not available on BungeeCord.
# Configuration
| Option name | Default value | Description |
|--------------------------------|---------------|-------------------------------------------------------------------------------------------------------------|
| enabled | false | Enables / Disables the feature. |
| allow-bypass-permission | false | If enabled, players with `tab.bypass` permission will see everyone in tablist despite this feature enabled. |
| ignore-effect-in-worlds | *List* | List of worlds where players will see everyone in tablist, not just players in the same world / world group |
| shared-playerlist-world-groups | *Map* | See [Grouping playerlist from multiple worlds](#grouping-playerlist-from-multiple-worlds) |
## Grouping playerlist from multiple worlds
In case you want multiple worlds to share playerlist despite this option enabled, create a group and put world names there. The default example
```
per-world-playerlist:
shared-playerlist-world-groups:
lobby:
- lobby1
- lobby2
minigames:
- paintball
- bedwars
```
Contains 2 groups, each of them consisting of 2 worlds.
World group name can be anything (in our case, they're called "lobby" and "minigames").
Under group name, list the actual world names.
With this setup, "lobby1" and "lobby2" will share playerlist, as well as "paintball" with "bedwars". All other worlds will have playerlist not shared with any other worlds. Creating a group for 1 world only is completely useless.
+26
View File
@@ -0,0 +1,26 @@
# About
By default, the server sends information about ping of players to everyone,
which you can see in the tablist as the green bar.
Some modified clients allow seeing the exact value instead of just bars.
This feature spoofs the ping value of all players to the configured value, hiding their true ping.
I don't know why anyone would want to do that.
# Configuration
Find this section in your **config.yml**
```
ping-spoof:
enabled: false
value: 0
```
To enable the feature, set `enabled: true`.
When the feature is enabled, everyone's ping value will be shown as value configured in `value` field.
The ping intervals for bars are client sided and are as following:
| Ping value | Displayed icon |
| ----------- | -------------- |
| Negative | ![image](https://user-images.githubusercontent.com/6338394/179717654-add90ec7-1321-41a3-99e6-76420e665833.png)|
| 0 - 149 | ![image](https://user-images.githubusercontent.com/6338394/179717531-3c6409b6-6bf8-41c1-a150-ce0ed615e5a5.png)|
| 150 - 299 | ![image](https://user-images.githubusercontent.com/6338394/179717804-cfedfe33-7846-4b60-8559-be2b902b4a75.png)|
| 300 - 599 | ![image](https://user-images.githubusercontent.com/6338394/179717915-0bccc83c-a2db-4459-9a76-58754f1307df.png)|
| 600 - 999 | ![image](https://user-images.githubusercontent.com/6338394/179717996-eec0942a-17c9-44ff-9428-3137f76f50a4.png)|
| 1000+ | ![image](https://user-images.githubusercontent.com/6338394/179718067-a3c86f83-cb57-436e-97ef-f3de394d9c41.png)|
@@ -0,0 +1,196 @@
# Content
* [About](#about)
* [Configuration](#configuration)
* [Supported replacement patterns](#supported-replacement-patterns)
* [Pattern 1: Exact text](#pattern-1-exact-text)
* [Pattern 2: Number intervals](#pattern-2-number-intervals)
* [Pattern 3: else](#pattern-3-else)
* [Supported content in values](#supported-content-in-values)
* [Using in other plugins](#using-in-other-plugins)
* [Examples](#examples)
* [Example 1 - Adding brackets to placeholder output if it returns non-empty value](#example-1---adding-brackets-to-placeholder-output-if-it-returns-non-empty-value)
* [Example 2 - Replicating PlaceholderAPI's %player_colored_ping%](#example-2---replicating-placeholderapis-player_colored_ping)
* [Example 3 - Using both original and replaced output](#example-3---using-both-original-and-replaced-output)
# About
Most placeholders don't have fully configurable output, making you unable to customize it as you'd like.
This is especially a problem with placeholders such as vanish or afk ones that return "yes"
or "no" instead of some fancy text.
It is a job of the plugins providing placeholders to allow control over outputs,
but for plugins that don't we have a solution - now you're able to configure output of any placeholder in many ways.
# Configuration
Open **config.yml** and find this section:
```
placeholder-output-replacements:
<placeholder>:
<original output>: <new output>
```
## Supported replacement patterns
### Pattern 1: Exact text
If the placeholder's output is exact to the text on the left side, it will return text on the right side.
<details>
<summary>Example</summary>
```
placeholder-output-replacements:
"%tps%":
"20": "Running at perfect 20 TPS!"
"%essentials_vanished%":
"yes": " &7[V]"
"no": ""
```
</details>
> [!NOTE]
> If you want to replace empty output, use `""` or `''` on the left side.
> [!NOTE]
> The text must match exactly, including color codes.
> To check the color codes a placeholder returns use
> [`/tab parse <player> <placeholder>`](https://github.com/NEZNAMY/TAB/wiki/Commands-&-Permissions#tab-parse-text)
> and check "Without colors" part.
### Pattern 2: Number intervals
Output will be replaced if it's numeric and belongs in a configured interval.
<details>
<summary>Example</summary>
```
placeholder-output-replacements:
"%tps%":
"15-20": "Solid"
"5-15": "Bad"
"0-5": "Terrible"
```
</details>
> [!NOTE]
> If a number is included in more than 1 interval (just like 5 and 15 from the example above), the one higher is used.
> In this case, 15 would give `Solid` and 5 would give `Bad`.
Intervals can be defined using both `-` and `~`.
If you need support for negative values, use `~` for an interval instead of `-`.
<details>
<summary>Example</summary>
```
placeholder-output-replacements:
"%my_negative_placeholder%":
"-100~-1": "Negative"
"0": "Zero"
"1-100": "Positive"
```
</details>
### Pattern 3: else
If none of the configured outputs are used and "else" is set, that value will be used instead.
<details>
<summary>Example</summary>
```
placeholder-output-replacements:
"%tps%":
"20": "Running at perfect 20 TPS!"
"15-20": "Solid"
"5-15": "Bad"
"else": "Terrible" #0-5 in this case
```
</details>
## Supported content in values
You can use placeholders inside outputs, including the original placeholder you are altering.
It will return the original output of the placeholder.
<details>
<summary>Example</summary>
```
placeholder-output-replacements:
"%tps%":
"20": "Running at perfect 20 TPS!"
"15-20": "%tps% (Solid)"
"5-15": "%tps% (Bad)"
"else": "%tps% (Terrible)"
```
With this example, if TPS reaches, for example 17.5, the output would be `17.5 (Solid)`.
</details>
# Using in other plugins
These replacements are only supported inside TAB. They won't work in other plugins.
If you want to use these in other plugins, you'll need to [enable tab's PlaceholderAPI expansion](https://github.com/NEZNAMY/TAB/wiki/Placeholders#placeholderapi) and use `%tab_replace_<placeholder>%`. If you, for example, configure output for %player_health%, use `%tab_replace_player_health%`.
This only works for PlaceholderAPI placeholders, not TAB's internal ones. For TAB's internal ones use `%tab_placeholder_<placeholder>`, such as for %health% use `%tab_placeholder_health%`.
# Examples
## Example 1 - Adding brackets to placeholder output if it returns non-empty value
When displaying faction or clan of players, you may want to add brackets if a player is in a faction/clan,
but not show them if they are not in one.
To achieve this,
we are going to use [Pattern 1: Exact text](#pattern-1-exact-text) and [Pattern 3: else](#pattern-3-else).
If the placeholder returned nothing, show nothing.
Otherwise, show the output with added brackets:
```
placeholder-output-replacements:
"%my_placeholder%":
"": ""
"else": "[%my_placeholder%] "
```
Note that you'll need to match the placeholder output exactly. Not all clan/faction-like plugins return empty value when player doesn't have any. They may return just a color code, such as `&7`, in which case replacing empty value won't work. To see what the exact output of a placeholder is, use `/tab parse <player> <placeholder>` and check "Without colors" part. If that's the case, you'll need to change it on the left side. Example:
```
placeholder-output-replacements:
"%my_placeholder%":
"&7": ""
"else": "[%my_placeholder%] "
```
**Don't forget that parse command applies replacements, so when trying to see what placeholder returns, you should disable any previously configured replacements for that placeholder to see the correct raw output**.
## Example 2 - Replicating PlaceholderAPI's %player_colored_ping%
> [!NOTE]
> Please note that this is just an example to demonstrate the plugin's functionality.
> It is not supposed to discourage anyone from using PlaceholderAPI or any of its placeholders.*
The placeholder allows you to configure intervals in config.yml. Default values are <50 for good, <100 for medium and 100+ for high. We can achieve this using [Pattern 2: Number intervals](#pattern-2-number-intervals) and [Pattern 3: else](#pattern-3-else). When put together, it looks as following:
```
placeholder-output-replacements:
"%ping%":
"0-50": "&a%ping%"
"51-100": "&e%ping%"
"else": "&c%ping%"
```
Keep in mind that now the placeholder will no longer return just a number,
which can break features like [Playerlist Objective](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Playerlist-Objective),
which require a numeric input (for versions prior to 1.20.3).
If you want that feature and ping to be displayed there, replacements won't work for you,
and you'll need
to use [Conditional placeholders](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Conditional-placeholders) instead
to achieve colored ping.
# Example 3 - Using both original and replaced output
Once configured, replacements are applied as the placeholder output everywhere. It is not directly possible to use original output in one place and replaced in another.
If you need this, you should consider [conditional placeholders](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Conditional-placeholders) instead.
If conditional placeholders are too complicated to use, there are alternate ways. The main point of the solution is to create different placeholder that eventually calls the same function and returns the same result. This can be done by "wrapping" the placeholder into another one. The easiest way using existing TAB's functions is using animations. Create an animation with a single frame that contains the placeholder and configure replacements for that placeholder instead.
<details>
<summary>Example for %ping%</summary>
**animations.yml**:
```
ping:
change-interval: 50 # Actual value doesn't matter
texts:
- "%ping%"
```
Then, configure replacements for the animation in **config.yml**:
```
placeholder-output-replacements:
"%animation:ping%":
"0-50": "&a%animation:ping%" # %ping% would work too
"51-100": "&e%animation:ping%"
"else": "&c%animation:ping%"
```
Now, you can use `%ping%` for original output and `%animation:ping%` for replaced.
</details>
@@ -0,0 +1,34 @@
# Content
* [About](#about)
* [Configuration](#configuration)
* [Limitations](#limitations)
* [Additional info](#additional-info)
* [Additional note 1 - Spectator gamemode](#additional-note-1---spectator-gamemode)
# About
The scoreboard objective with PLAYER_LIST display slot. On 1.20.2- it supports 2 display types:
* yellow number
![](https://images-ext-1.discordapp.net/external/ioDTFWFe9qUGg8ZgNFCPIoXN6B-EnbqHb0WXE9200a8/https/image.prntscr.com/image/w8sjR4y9QhuaEcnU5tGTmw.png)
* hearts
![](https://images-ext-2.discordapp.net/external/RxWu_5hBSLUWqS7vCvSPY9PnNxkYfAMQQXwkbi6GEyU/https/image.prntscr.com/image/edpM4XpOT1q3SsQ5vYNjzQ.png)
Since 1.20.3, it can display any text.
![image](https://github.com/NEZNAMY/TAB/assets/6338394/2300b73e-d0cb-4eec-8ff1-e16be60bba49)
This feature can be configured in **config.yml** under **playerlist-objective** section.
# Configuration
| Option name | Default value | Description |
|-------------------|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| enabled | true | Enables / Disables the feature |
| value | "%ping%" | [1.20.2-] Defines value displayed. You can set this to any placeholder that outputs a number. Setting value to `%health%`, `%player_health%` or `%player_health_rounded%` will result in the display type being changed to hearts instead of number. If you want to display health but as a number and not hearts, set value to `0%health%` for example. Only visible on 1.20.2 and lower. <br/> **Note**: Even if you only support 1.20.3+, you still need to configure this value to properly evaluate to a number, because the value is still sent to the client (just not displayed). You can set it to `0` for simplicity. |
| fancy-value | "&7Ping: %ping%" | [1.20.3+] Value to display for 1.20.3+ clients. Supports any text. |
| disable-condition | %world%=disabledworld | A [condition](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Conditional-placeholders) that must be met for disabling the feature for players. Set to empty for not disabling the feature ever. |
# Limitations
* [1.5 - 1.20.2] Only 2 display types are supported - yellow number and hearts.
* [1.5 - 1.20.2] A yellow 0 will appear on all tablist entries that aren't actual players (such as NPCs and [layout](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Layout) entries) and it cannot be removed.
# Additional info
## Additional note 1 - Spectator gamemode
The feature will not be visible on players with spectator gamemode. To resolve this, check out [Spectator fix](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Spectator-fix) feature.
+318
View File
@@ -0,0 +1,318 @@
# Content
* [About](#about)
* [Creating a scoreboard](#creating-a-scoreboard)
* [title](#title)
* [lines](#lines)
* [Alignment](#alignment)
* [Empty placeholder output](#empty-placeholder-output)
* [display-condition](#display-condition)
* [Chaining scoreboards](#chaining-scoreboards)
* [Announce command](#announce-command)
* [Additional settings](#additional-settings)
* [Limitations](#limitations)
* [Longer lines](#longer-lines)
* [Compatibility with other plugins](#compatibility-with-other-plugins)
* [API](#api)
* [Creating custom scoreboards](#creating-custom-scoreboards)
* [Showing custom scoreboards](#showing-custom-scoreboards)
* [Toggling scoreboard visibility](#toggling-scoreboard-visibility)
* [Announcing a scoreboard](#announcing-a-scoreboard)
* [Examples](#examples)
* [Example 1 - Per-world scoreboards](#example-1---per-world-scoreboards)
* [Example 2 - Periodical scoreboard switching](#example-2---periodical-scoreboard-switching)
* [Example 3 - Per-version scoreboards](#example-3---per-version-scoreboards)
# About
Scoreboard objective with SIDEBAR display slot.
This feature can be configured in **config.yml** under **scoreboard** section.
# Creating a scoreboard
Scoreboards can be created in `scoreboards` section. You can define as many scoreboards as you want. Each scoreboard can have a condition requirement, which must be met to display the scoreboard. If it's not met, the next defined scoreboard is checked and so on. If the last defined scoreboard has a condition requirement which isn't met, player won't see anything.
Each scoreboard defines up to 3 parameters:
## title
Title of the scoreboard.
Limited to 32 characters on MineCraft versions below 1.13 (including color codes).
It is automatically centered by the client.
## lines
Up to 15 lines of text. You can define more, but the client won't display them.
Since 1.20.3, you can also configure the value on the right side, which no longer has to be a red number. To set it, use `||` sequence and put right-side text after it. Example:
```
lines:
- "Left side text 1||Right side text 1"
- "Left side text 2....||Right side text 2...."
- "Left side text 3.......||Right side text 3......."
```
Will give you the following:
![image](https://github.com/NEZNAMY/TAB/assets/6338394/785e4e66-935c-4233-8a16-f3e34386cfd0)
The right side text will not be visible at 1.20.2 and lower, and numbers will be displayed instead.
To properly see the right side, not only the client has to be 1.20.3+, but the server as well,
since the plugin cannot send a packet that does not exist (on older versions).
Proxies always include new content and therefore count as the latest version.
This can be used to send new content to new players while having an outdated server version.
### Alignment
The left side of the text is automatically aligned to the left,
while the right side is automatically aligned to the right.
This is done by the client and is out of plugin's control.
If you want to center a line, you'll need to do it manually.
If dynamic placeholder output length is preventing your from doing it,
you can try to bypass it by adding spaces before and after it to artificially increase and force the scoreboard width,
such as
`- " Centered text "` (or more spaces if needed).
### Empty placeholder output
When a line consists only of a placeholder that returned empty output, the line will be hidden completely. This is intentional to allow dynamic scoreboard size based on placeholder output. This is not the case if empty line is configured (`""`), to allow empty lines in configuration.
## display-condition
A [condition](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Conditional-placeholders) that must be met to display this scoreboard. If it isn't met for the player, the next scoreboard's condition is checked.
# Chaining scoreboards
When defining more than 1 scoreboard in config, the plugin will display the correct scoreboard based on conditions.
The plugin goes through all defined scoreboards, starting with the scoreboard on top.
If the scoreboard's condition is met or not set, it is displayed.
If not, the next defined scoreboard is checked and so on.
If no suitable scoreboard is found (the last one has a condition requirement which wasn't met), none is displayed.
Example:
```
scoreboards:
scoreboard1:
display-condition: "permission:tab.scoreboard.admin"
title: "Title 1"
lines:
- "Scoreboard for admins"
scoreboard2:
display-condition: "%world%=myWorld"
title: "Title 2"
lines:
- "Scoreboard in world myWorld"
scoreboard3:
title: "Title 3"
lines:
- "Line 1"
```
Scoreboard `scoreboard1` is checked first. If condition is not met, `scoreboard2` is checked. If that condition is not met, `scoreboard3` is displayed.
If a player meets both conditions (has defined permission and is in defined world), `scoreboard1` will be displayed, because it is defined first and therefore has the highest priority. You can switch scoreboards based on your priority needs.
# Announce command
This takes priority over the current scoreboard.
Once the announcement is over, the previous scoreboard is restored.
`/tab announce scoreboard <name> <time>`
name - name of scoreboard to be displayed
time - number of seconds to display the scoreboard for
# Additional settings
| Option name | Default value | Description |
|----------------------------|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| enabled | false | Enables / Disables the feature |
| toggle-command | /sb | Command that can be used to toggle scoreboard for the player running the command. Players need `tab.scoreboard.toggle` permission to use it. <br />**Note:** This command will not appear in command auto-complete, because it's not a real registered command. Registered commands must be defined in plugin jar directly and cannot be dynamic. If you want to solve this, you can try getting a dummy private plugin made which registers that command. |
| remember-toggle-choice | false | When enabled, toggling decision is saved into a file to remember it even after reloads/restarts/reconnects |
| hidden-by-default | false | If enabled, scoreboard will automatically be hidden on join until toggle command is used to show it. |
| use-numbers | false | If enabled, numbers 1-15 will be used in the scoreboard. If disabled, `static-number` is shown everywhere. |
| static-number | 0 | If `use-numbers` is disabled, this is number to be in all lines. |
| delay-on-join-milliseconds | 0 | Delay in milliseconds to send scoreboard after joining. |
# Limitations
* [1.5 - 1.12.2] The title is limited to 32 characters (including color codes).
* [1.5 - 1.12.2] Line length is limited to 28 characters (including color codes) (68 on lines with static text / [Longer lines](#longer-lines)).
* [1.5 - 1.20.2] The red numbers on the right really cannot be removed from the plugin side (a client modification / resource pack is necessary).
* The client only displays up to 15 lines. If a plugin sends more, only the top 15 scores will be displayed. Changing this would require a client modification.
# Longer lines
To make sure the scoreboard never flickers, it's only using prefix/suffix components to display text.
These can easily be changed without any visual issues.
The player name part, however, cannot be changed.
A line has to be completely removed and a new one added.
There's a chance a frame is rendered between these 2 packets are sent,
causing the scoreboard to have 1 line missing for 1 frame, causing the visual issue known as "flickering".
However,
if your scoreboard only has placeholders that don't change value often
(pretty much any placeholder except animations, really),
you can make TAB use player name part,
allowing you to use an additional up to 40 characters.
To do so, add `Long|` prefix to all lines that should use this bypass.
```
lines:
- "Classic line with shorter limit"
- "Long|Long line with much higher character limit"
```
This bypass is automatically enabled for all lines that only use static text
(since there's nothing to refresh and cause flickering),
therefore doing it for such lines (like in the example above) has no effect.
# Compatibility with other plugins
TAB automatically detects scoreboard coming from other plugins, and when one is sent, TAB hides its own scoreboard.
Later, when the other plugin hides its scoreboard, TAB will send its scoreboard back to the player.
This detection must be available on your platform.
For that,
see the Scoreboard section on [compatibility page](https://github.com/NEZNAMY/TAB/wiki/Compatibility#supported-features-per-platform).
If it says ✔, the detection is available.
If it says ❗, it means this detection is not available on your platform.
As a result, when the other plugin hides its scoreboard, TAB will not be able to resend its own.
If you want this detection,
and it's not supported by your platform,
you can achieve it
using an alternate solution with conditions that will make TAB display no scoreboard if the condition is not met.
For this, you'll need to have more information about when exactly do plugins send scoreboards and how to detect it.
<details>
<summary>Example using PremiumVanish</summary>
When you are vanished using PremiumVanish plugin, placeholder `%premiumvanish_isvanished%` will return `Yes` instead of the usual `No`. You can put this as a display condition to all defined scoreboards.
An original
```
scoreboards:
scoreboard1:
title: Default
lines:
- 'Line of text'
```
would turn into
```
scoreboards:
scoreboard1:
display-condition: "%premiumvanish_isvanished%=No"
title: Default
lines:
- 'Line of text'
```
Remember to add this condition to all of your scoreboards if you have more than 1
(for those with an existing condition merge them using `;`).
Keep in mind [placeholder output replacements](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Placeholder-output-replacements) apply to placeholders here as well,
so if you configured a fancy output for that placeholder, you'll need to use it in the display condition as well.
To see what exactly has placeholder returned, use `/tab parse <player> <placeholder>`.
</details>
# API
*To get started with the API, see [Developer API](https://github.com/NEZNAMY/TAB/wiki/Developer-API) page.*
To access this feature, you'll need to obtain `ScoreboardManager` instance. Get it using `TabAPI.getInstance().getScoreboardManager()`. If this feature is disabled, the method will return `null`.
## Creating custom scoreboards
You can create and register new scoreboards using `ScoreboardManager#createScoreboard(String, String, List<String>)`, where the first `String` is the name, the second `String` is the title that will be displayed, and the `List<String>` is the list of lines that the scoreboard will display.
## Showing custom scoreboards
To show your new scoreboard to a player, you can use `ScoreboardManager#showScoreboard(TabPlayer, Scoreboard)`, where the `TabPlayer` is the player you want to show the scoreboard to, and the `Scoreboard` is the scoreboard you want to show. Doing this will also disable automatic scoreboard updating for the player, so that your scoreboard does not get overridden until you unregister it.
To reset the scoreboard that a player is using to the default scoreboard that they should be seeing as determined by the config, use `ScoreboardManager#resetScoreboard(TabPlayer)`.
To determine whether a player has a custom scoreboard set (one that was shown through the API), use `ScoreboardManager#hasCustomScoreboard(TabPlayer)`.
## Toggling scoreboard visibility
To change whether a player can see scoreboards, use `ScoreboardManager#setScoreboardVisible(TabPlayer, boolean, boolean)`, and to determine whether a player can see scoreboards, use `ScoreboardManager#hasScoreboardVisible(TabPlayer)`.
To toggle whether a player can see scoreboards, use `ScoreboardManager#toggleScoreboard(TabPlayer, boolean)`. This will either make scoreboards visible if they are not already, or make them hidden if they are currently visible.
## Announcing a scoreboard
To announce a scoreboard to all players on the server for a given number of ticks,
use `ScoreboardManager#announceScoreboard(String, int)`,
which will look up a scoreboard with the given `String` name,
and if one is found, send it to all players for the given `int` ticks.
# Examples
## Example 1 - Per-world scoreboards
We will be using a condition of "equals" (=) type and check for output of `%world%` placeholder.
If condition is met, it means player is in that world and the scoreboard is displayed.
If not, check for the next scoreboard's condition.
If none of the conditions are met, display the default scoreboard.
```
scoreboards:
# start
scoreboard1:
display-condition: "%world%=world1"
title: 'Scoreboard 1'
lines:
- 'You are in world world1'
# first condition didn't pass, try next
scoreboard2:
display-condition: "%world%=world2"
title: 'Scoreboard 2'
lines:
- 'You are in world world2'
# first two conditions didn't pass, try next
scoreboard3:
display-condition: "%world%=world3"
title: 'Scoreboard 3'
lines:
- 'You are in world world3'
# none of the conditions above passed, display default scoreboard
default:
title: 'Default scoreboard'
lines:
- 'You are not in any of the worlds listed above'
```
> [!NOTE]
> This is just an example, the plugin is not limited to displaying scoreboard only per world.
> If you want per server scoreboards on proxy, use %server% with server names.
> If you want worldguard regions, use %worldguard_region_name% with region names.
> This works for any placeholder offered by the plugin or by PlaceholderAPI.
## Example 2 - Periodical scoreboard switching
We can use [animations](https://github.com/NEZNAMY/TAB/wiki/Animations) to make the plugin switch between scoreboards using display condition. Let's say we want to switch between 2 scoreboards. First, we create an animation:
**animations.yml**
```
switchingScoreboard:
change-interval: 10000
texts:
- "1"
- "2"
```
This animation will switch frames every 10 seconds.
Then, we will use the output of this animation as a display condition.
If animation is on the first frame, display the first scoreboard.
Otherwise, display the second scoreboard.
Result:
**config.yml**
```
scoreboards:
scoreboard1:
display-condition: "%animation:switchingScoreboard%=1" # If animation is on the first frame
title: "Scoreboard 1"
lines:
- 'Text'
# Animation is on the second frame
scoreboard2:
title: "Scoreboard 2"
lines:
- 'Text'
```
We don't need to define display condition for the second scoreboard,
since if animation is not on the first frame, it has to be on the second one.
If using more than 2, you will need to define display condition for all of them (except the last one).
# Example 3 - Per-version scoreboards
1.20.3 has added new features to scoreboards, which are not visible to older clients. If you want to use new features for new players while still displaying things properly for older players, you'll need to create 2 different scoreboards.
You'll find 2 placeholders useful for this:
* `%player-version-id%` - Returns network ID of player's protocol version. Unlike with version names, you can perform numerical comparisons with these. You can find all version IDs [here](https://github.com/NEZNAMY/TAB/blob/master/shared/src/main/java/me/neznamy/tab/shared/ProtocolVersion.java). For example, 1.20.3 is 765.
* `%bedrock%` - Returns `true` if player is using the bedrock edition, which does not support new functions either.
We only want the first scoreboard for players with version 765 or greater and not bedrock players. This can be achieved with the following condition: `display-condition: "%player-version-id%>=765;%bedrock%=false"`.
Let's go ahead and set it up (with proper spacing):
```
scoreboards:
scoreboard-1.20.3+:
title: "Scoreboard for 1.20.3+ and not bedrock"
display-condition: "%player-version-id%>=765;%bedrock%=false" # Only display it to players using 1.20.3+ AND NOT bedrock edition
lines:
- "* &eOnline&7:||%online%"
- "* &eCurrent World&7:||%worldonline%"
- "* &eStaff&7:||%staffonline%"
- "* &bRank&7:||%group%"
- "* &bPing&7:||%ping%&8ms"
- "* &bWorld&7:||%world%"
scoreboard:
title: "Scoreboard for <1.20.3 and bedrock"
lines:
- "* &eOnline&7: &f%online%"
- "* &eCurrent World&7: &f%worldonline%"
- "* &eStaff&7: &f%staffonline%"
- "* &bRank&7: &f%group%"
- "* &bPing&7: &f%ping%&8ms"
- "* &bWorld&7: &f%world%"
```
+257
View File
@@ -0,0 +1,257 @@
# Content
* [Enabling](#enabling)
* [Methods of sorting](#methods-of-sorting)
* [GROUPS](#groups)
* [PERMISSIONS](#permissions)
* [PLACEHOLDER](#placeholder)
* [PLACEHOLDER_A_TO_Z](#placeholder_a_to_z)
* [PLACEHOLDER_Z_TO_A](#placeholder_z_to_a)
* [PLACEHOLDER_LOW_TO_HIGH](#placeholder_low_to_high)
* [PLACEHOLDER_HIGH_TO_LOW](#placeholder_high_to_low)
* [Multiple elements with the same priority](#multiple-elements-with-the-same-priority)
* [Combining multiple sorting types](#combining-multiple-sorting-types)
* [Additional settings](#additional-settings)
* [Additional info](#additional-info)
* [Additional note 1 - Limitations](#additional-note-1---limitations)
* [Additional note 2 - per-world sorting](#additional-note-2---per-world-sorting)
* [Additional note 3 - Compatibility issues with other plugins](#additional-note-3---compatibility-issues-with-other-plugins)
* [Common mistakes](#common-mistakes)
* [API](#api)
# Enabling
To enable sorting, you must have either [Nametags](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Nametags) or [Layout](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Layout) (or both) enabled.
> [!TIP]
> To verify you enabled sorting, run `/tab debug`. It will say `Sorting type:` followed by anything except `DISABLED`.
# Methods of sorting
Below are all the different methods that you can use to sort players.
## GROUPS
This is the default and recommended method. Players will be sorted by their primary permission group, according to the configured group list.
First, put your players into groups in your permission plugin.
All the ways to do it can be found
at [How to assign players into groups](https://github.com/NEZNAMY/TAB/wiki/How-to-assign-players-into-groups).
> [!TIP]
> Verify player's group using `/tab debug <player>`.
It should say `Primary permission group:` followed by group you configured.
If not, you did not assign players into groups correctly.
Second, place all of your groups in to a comma separated list **in order of priority** into `sorting-types`. Example:
```yaml
scoreboard-teams:
sorting-types:
- "GROUPS:owner,admin,mod,default"
```
> [!TIP]
> Verify configured sorting priority of players using `/tab debug <player>`.
It should show a message like this:
![image](https://github.com/NEZNAMY/TAB/assets/6338394/095d8523-e8c0-4eff-8935-b0b8e6e0d5ff)
If a group is not in the list, you will get the following:
![image](https://github.com/NEZNAMY/TAB/assets/6338394/9c530873-87c9-4db7-8916-a6121dbeed37)
If that's the case, you forgot to add that group into the list.
## PERMISSIONS
> [!CAUTION]
> This method is not recommended,
> as many low quality servers give OP to every staff member and don't know how to negate permissions,
> making this option not function as intended.
> If you think you can pull it off, and sorting by primary group is not an option, you can give this a try.
This method is, however, handy when trying to sort specific players without assigning them into a group.
This method will sort players based on permission nodes they have.
Place all of your permissions in to a comma separated list **in order of priority**.
For example, if you have the permissions `my.permission.1`, `my.permission.2`, `my.permission.3`, and want to have players sorted in that order, you would end up with a configuration like `PERMISSIONS:my.permission.1,my.permission.2,my.permission.3`.
Example:
```yaml
scoreboard-teams:
sorting-types:
- "PERMISSIONS:my.permission.1,my.permission.2,my.permission.3"
```
> [!TIP]
> Verify sorting permissions of a player using `/tab debug <player>`
## PLACEHOLDER
This method sorts players using the output of a placeholder and comparing that to pre-defined values.
To configure this sorting type, write the placeholder that you want to use, followed by a colon (`:`), followed by a comma separated list of outputs to check against.
For example, if you want to sort players using the output of the `%essentials_afk%` placeholder, depending on whether it is `yes` or `no`, you would do that using a configuration such as `PLACEHOLDER:%essentials_afk%:no,yes`, where players who the placeholder outputs `no` for will be sorted above players who the placeholder outputs `yes` for in this case, putting AFK players on the bottom.
Example:
```yaml
scoreboard-teams:
sorting-types:
- "PLACEHOLDER:%essentials_afk%:no,yes"
```
## PLACEHOLDER_A_TO_Z
This method sorts players alphabetically, according to the output of a placeholder.
To configure this sorting type, write the placeholder that you want to use. That's it.
For example, if you want to sort players by their name alphabetically, you would do that using a configuration such as `PLACEHOLDER_A_TO_Z:%player%`.
Example:
```yaml
scoreboard-teams:
sorting-types:
- "PLACEHOLDER_A_TO_Z:%player%"
```
## PLACEHOLDER_Z_TO_A
This method sorts players reverse alphabetically, according to the output of a placeholder.
This is identical to the above A to Z sorting, except that the alphabet is backwards, so Z comes first, and A comes last.
To configure this sorting type, write the placeholder that you want to use. That's it.
For example, if you want to sort players by their name reverse alphabetically, you would do that using a configuration such as `PLACEHOLDER_Z_TO_A:%player%`.
Example:
```yaml
scoreboard-teams:
sorting-types:
- "PLACEHOLDER_Z_TO_A:%player%"
```
## PLACEHOLDER_LOW_TO_HIGH
This method sorts players numerically depending on the output of a **numeric** placeholder from the lowest value to the highest value.
**Only placeholders that output number values will work with this sorting type!**
Supported number interval is from -1,000,000,000 to 1,000,000,000 and 5 decimal places.
To configure this sorting type, write the placeholder that you want to use. That's it.
For example, if you want to sort players using the output of the `%health%` placeholder from the lowest health to highest, you would do that using a configuration such as `PLACEHOLDER_LOW_TO_HIGH:%health%`.
Example:
```yaml
scoreboard-teams:
sorting-types:
- "PLACEHOLDER_LOW_TO_HIGH:%health%"
```
## PLACEHOLDER_HIGH_TO_LOW
This method sorts players numerically depending on the output of a **numeric** placeholder from the highest value to the lowest value.
**Only placeholders that output number values will work with this sorting type!**
Supported number interval is from -1,000,000,000 to 1,000,000,000 and 5 decimal places.
To configure this sorting type, write the placeholder that you want to use. That's it.
For example, if you want to sort players using LuckPerms weights, you would do that using a configuration such as `PLACEHOLDER_HIGH_TO_LOW:%luckperms_highest_group_weight%`.
Example:
```yaml
scoreboard-teams:
sorting-types:
- "PLACEHOLDER_HIGH_TO_LOW:%luckperms_highest_group_weight%"
```
# Multiple elements with the same priority
If using a sorting type that uses pre-defined values ([GROUPS](#groups), [PERMISSIONS](#permissions) or [PLACEHOLDER](#placeholder)), you can sort multiple elements with the same priority by separating them with `|` symbol. Example using group sorting:
```
scoreboard-teams:
sorting-types:
- "GROUPS:owner,admin,vip1|vip2,default"
```
Where `vip1` and `vip2` will be sorted with the same priority (3rd).
This works for permissions and pre-defined placeholder values as well.
# Combining multiple sorting types
Since `sorting-types` is a list, you are able to use more than one sorting type. Sorting type priorities go in the same order as defined in the config. Let's take a look at the default config:
```
sorting-types:
- "GROUPS:owner,admin,mod,helper,builder,vip,default"
- "PLACEHOLDER_A_TO_Z:%player%"
```
Here, players are sorted by their group first.
Owner goes above admin etc. However,
if 2 people have the same group (such as admin), the next sorting type decides the final order.
In this case, admin with alphabetically lower username will be higher in the tablist.
A common request is putting AFK players on the bottom of tablist. This can be achieved with the following configuration:
```
sorting-types:
- "PLACEHOLDER:%essentials_afk%:no,yes"
- "GROUPS:owner,admin,mod,helper,builder,vip,default"
- "PLACEHOLDER_A_TO_Z:%player%"
```
With AFK status taking the highest priority, AFK players will always be sorted below players which are not AFK.
Both player groups (afk and non-afk) then follow the rest of the logic explained above to define the final order.
If trying to copy-paste this example, keep
in mind [Placeholder output replacements](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Placeholder-output-replacements) work here as well,
so if you are using a fancier output for %essentials_afk%,
you will need to use outputs respectively when defining sorting as well.
Although you can theoretically use as many sorting types as you want, there are still strict limits set by mojang. See more about these limits and how to avoid them as much as possible at [Additional note 1 - Limitations](#additional-note-1---limitations).
# Additional settings
| Option name | Default value | Description |
|------------------------|---------------|------------------------------------------------------------------------|
| case-sensitive-sorting | true | When enabled, players will be sorted as A-Z a-z. When disabled, Aa-Zz. |
# Additional info
## Additional note 1 - Limitations
All sorting elements must together build a team name up to 16 characters long. Because of that, cuts in placeholder outputs may be required. TAB is already using the shortest possible values for all sorting types:
* `GROUPS`, `PERMISSIONS` and `PLACEHOLDER` - 1 character
* `PLACEHOLDER_LOW_TO_HIGH` and `PLACEHOLDER_HIGH_TO_LOW` - 3 characters
* `PLACEHOLDER_A_TO_Z` and `PLACEHOLDER_Z_TO_A` - as many as used
All your sorting types must be within a 15-character limit.
Any characters above that will be cut off (TAB reserves 1 character to ensure each player is in a unique team).
To get the most out of it, use the 1-character sorting types where possible.
You can bypass this limit by using [Layout](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Layout) feature.
Player ordering is fully plugin-sided and therefore is not artificially limited.
## Additional note 2 - per-world sorting
Defining a per-world sorting type is not supported.
However,
this can be achieved with [Conditional placeholders](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Conditional-placeholders).
Check for %world% and return one placeholder if it matches, another one if not.
This will work with anything, not just worlds (server, regions, etc.).
## Additional note 3 - Compatibility issues with other plugins
As you already know by now, sorting is managed by scoreboard teams (their names to be exact).
Player can only be a member of one team.
In other words, only one plugin can handle teams at a time.
Having multiple plugins handling teams is supposed to end in a disaster.
Fortunately, TAB contains a function that prevents other plugins from assigning players into teams.
This can be enabled/disabled by toggling `anti-override` setting under `scoreboard-teams`.
This is, however, highly recommended to keep enabled, unless all of your plugins are configured correctly.
When a plugin tries to override TAB's teams, this action is logged into `anti-override.log` file.
If your file is empty / does not exist, it means you have no conflicting plugins / settings and can disable this option,
slightly boosting performance.
If the file exists, most of the time you can guess where the teams come from by their name.
Here are a few common teams and their sources (`xxxx` means any, usually random character sequence):
* `collideRule_xxxx` - this comes from Paper. Not going to explain why as that would be quite long, but the way you can avoid is by setting `enable-player-collisions: true` in paper config and `enable-collision: false` in TAB config (yes, collisions will be disabled).
* `CMINPxx` - CMI, set `DisableTeamManagement: true` in `plugins/CMI/config.yml`.
* `CIT-xxxxxxxxxxxx` - Citizens NPC with the same name as some online player. Make NPC names not match real players and use holograms to display your desired text (/npc name or something).
* `PVP-xxxxxxxxxxxx` - Team coming from [PvPManager](https://www.spigotmc.org/resources/pvpmanager-lite.845/) plugin.
This detection, however, is not 100%.
Because of that, you may still be experiencing a compatibility issue even with anti-override enabled.
To identify such an issue, check if /tab reload fixes your sorting issue.
If it does, it's a compatibility issue of some sort.
If not, it is most likely a misconfiguration issue.
# Common mistakes
Every possible mistake could be called "not reading this wiki page", but that would make this section pointless.
For that reason, let's call it list of mistakes made when following this page.
The most common mistakes include:
* Disabling both teams and layout, not realizing it disables sorting as well.
* Disabling anti-override without disabling teams in other plugins.
* Mistaking `primary-group-finding-list` for the sorting list, despite that list having nothing to do with sorting and by default even having a comment above it saying it has nothing to do with sorting.
* Not configuring primary groups correctly. This can have multiple reasons, such as
* Not configuring group weights in LuckPerms.
* Accidentally enabling `use-bukkit-permission-manager` option when on BungeeCord without knowing what it does.
* Installing TAB on BungeeCord without having any permission plugin on BungeeCord.
* Enabling `assign-groups-by-permissions` without giving those permissions (or the opposite - giving away OP to users, resulting in the highest group being taken).
[Debug command](https://github.com/NEZNAMY/TAB/wiki/Commands-&-Permissions#tab-debug-player) will help you identify if this is your case.
* Using a plugin that causes TAB to fail to apply teams (such as Tablisknu). This includes installing TAB plugin on both bukkit and bungeecord, causing the installations to conflict.
# API
*To get started with the API, see [Developer API](https://github.com/NEZNAMY/TAB/wiki/Developer-API) page.*
To access this feature, you'll need to obtain `SortingManager` instance. Get it using `TabAPI.getInstance().getSortingManager()`. If sorting is disabled, the method will return `null`.
You can change player's team name using the following methods:
* `SortingManager#forceTeamName(TabPlayer, String)` - Sets player's team name to specified value (and performs team unregister & register with new name).
* `SortingManager#getForcedTeamName(TabPlayer)` - Returns player's forced team name using the method above. Will return `null` if no value is set.
Unfortunately, there is no simple way of just changing one's position while still accounting for other players.
This is because the plugin supports a lot of sorting options, not just groups,
so doing amateur stuff like "priority 1, 2" doesn't make sense.
If you are really only interested in sorting by groups and changing group which player is sorted as,
you can use `TabPlayer#setTemporaryGroup(String)`.
To reset the group back to normal, call the function with `null` argument.
@@ -0,0 +1,31 @@
# Content
* [About](#about)
* [Enabling](#enabling)
* [Permissions](#permissions)
* [Additional info](#additional-info)
* [Additional note 1 - Seeing yourself still as spectator](#additional-note-1---seeing-yourself-still-as-spectator)
# About
With the introduction of spectator gamemode in 1.8,
players having it automatically appear on the bottom of tablist with transparent name and missing [Playerlist Objective](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Playerlist-Objective).
This feature cancels gamemode change packets to spectator gamemode, cancelling this minecraft feature.
# Enabling
To enable this feature, open **config.yml** and set
```
prevent-spectator-effect:
enabled: true
```
# Permissions
| Permission | Description |
|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `tab.spectatorbypass` | Players with this permission will see spectators the usual way despite this feature being enabled. If you don't want players (or even staff members) to bypass this feature, don't give them that permission. |
# Additional info
## Additional note 1 - Seeing yourself still as spectator
Receiving information about going spectator gamemode allows players to clip through walls.
Cancelling this on self would result in inability to go through walls.
To avoid this, the information will be canceled for every player except the one going spectator gamemode.
Therefore, if you change gamemode to spectator, you will still see yourself on the bottom,
but no one else will (unless someone has the bypass permission).
@@ -0,0 +1,163 @@
# Content
* [About](#about)
* [Configuration](#configuration)
* [Introduction](#introduction)
* [Groups and users](#groups-and-users)
* [Per-world / per-server](#per-world--per-server)
* [Priority system](#priority-system)
* [Placeholder support](#placeholder-support)
* [Additional settings](#additional-settings)
* [Tips & Tricks](#tips--tricks)
* [API](#api)
# About
This feature allows you to configure player name formats in the tablist.
It was added to minecraft in version 1.8.
Versions 1.7 and lower only allow up to 16 characters including name,
which is too limiting and not supported by this plugin.
If you wish to have prefix/suffix for 1.7 and lower,
take advantage of [this client-sided mechanic](https://github.com/NEZNAMY/TAB/wiki/Client%E2%80%90sided-mechanics#nametag-format-in-tablist) and configure tagprefix/tagsuffix,
which will appear in the tablist.
![image](https://user-images.githubusercontent.com/6338394/205877929-4df82c78-9773-4614-b4a3-93e1673d6046.png)
Settings of this feature can be configured in **config.yml** under **tablist-name-formatting** section.
# Configuration
## Introduction
The display name is split into 3 parts for convenience:
`tabprefix` - first part of the text, this is where prefix is usually configured
`customtabname` - second part of the text, it will be used as player name. If customtabname is not defined at all (not just setting empty value!), player's original name will be used instead
`tabsuffix` - last part of the text, this is where suffix is usually configured
These values are then merged and displayed in the tablist.
![image](https://user-images.githubusercontent.com/6338394/205877510-e40f93ce-80df-46f2-84f0-c113e0e813e8.png)
You are free to use the 3 properties in any way you want since they are only split for convenience.
However, it is still a good idea to use them for their designed purpose to not get lost a poor configuration.
This means that the text which should appear before player's name should be put into `tabprefix`,
any placeholder that is supposed to display player's name (such as from a nickname plugin)
should go into `customtabname` and any text that should appear after player's name should be put into `tabsuffix`.
## Groups and users
Properties can be applied in 2 ways: groups and users.
Users can be defined by both username and their UUID.
Values applied to users take priority over groups.
Example:
**groups.yml**
```
admin:
tabprefix: "&4&lAdmin &r"
```
This can also be achieved with commands, in this case `/tab group admin tabprefix "&4&lAdmin &r"`.
**users.yml**
```
_NEZNAMY_:
tabprefix: "&6&lTAB &r"
# An alternate way using UUID
237d8b55-3f97-4749-aa60-e9fe97b45062:
tabprefix: "&6&lTAB &r"
```
This can also be achieved with commands, in this case `/tab player _NEZNAMY_ tabprefix "&6&lTAB &r"` or `/tab playeruuid _NEZNAMY_ tabprefix "&6&lTAB &r"`.
Properties can also be set as "default" for everyone who does not have them defined.
For that purpose, a group keyword `_DEFAULT_` was made.
Example:
**groups.yml**
```
admin:
tabprefix: "&4&lAdmin &r"
_DEFAULT_:
tabprefix: "&7" # This will be displayed on everyone except admin
```
## Per-world / per-server
Values can also be applied per-world (and per-server on bungeecord), where they can be defined per group/user. These values take priority over global settings. Example:
**groups.yml**
```
per-world:
world1:
_DEFAULT_:
tabprefix: "&a" # Everyone in world "world1" will have this prefix
per-server:
server1:
_DEFAULT_:
tabprefix: "&a" # Everyone in server "server1" will have this prefix
```
For multiple worlds/servers to share the same settings, separate them with `;`.
For worlds/servers starting with a specified text, use `*` after shared part. For ending with a shared part, use `*` at the beginning.
Example:
```
per-world:
world1;world2:
_DEFAULT_:
tabsuffix: "Shared tabsuffix in worlds world1 and world2"
lobby-*:
_DEFAULT_:
tabsuffix: "Suffix in all worlds starting with lobby-"
```
## Priority system
The full list of priorities looks like this:
1. value set using the [API](#api)
2. per-world / per-server applied to username
3. value applied to username
4. per-world / per-server applied to uuid
5. value applied to uuid
6. per-world / per-server applied to player's group
7. per-world / per-server applied to group `_DEFAULT_`
8. value applied to player's group
9. value applied to group `_DEFAULT_`
This list is browsed through until the first match is found. If no match is found, empty value is used (except `customtabname`, which defaults to player's name).
Values are taken independently of each other.
This means you can set per-world tabprefix, but only keep one global tabsuffix, for example.
You can see the source of a value displayed on player by using `/tab debug <player>` and checking "source"
part of the value you are looking for.
## Placeholder support
All values fully support [TAB's internal placeholders](https://github.com/NEZNAMY/TAB/wiki/Placeholders#internal-placeholders) and [PlaceholderAPI placeholders](https://github.com/PlaceholderAPI/PlaceholderAPI/wiki/Placeholders) including relational placeholders.
The number of placeholders is not limited, and they can be used in combination with static text as well.
## Additional settings
| Option name | Default value | Description |
|-------------------|-----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| enabled | true | Enables / Disables the feature |
| anti-override | true | When enabled, prevents other plugins from overriding TAB. This results in slightly higher CPU usage, but will make sure the function works as expected. <br />Unlike with teams, attempts to override TAB are not logged into anti-override.log file. This is due to high amount of false positives from TAB's own features, as well as bungeecord server switch, higher CPU usage and more. Whether you need this or not depends on how properly your plugins are configured. Some of them attempt to format tablist even if you'd not expect it from such plugin. Keep this enabled to stay safe. |
| disable-condition | %world%=disabledworld | A [condition](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Conditional-placeholders) that must be met for disabling the feature for players. Set to empty for not disabling the feature ever. |
# Tips & Tricks
If you want TAB to only take prefixes/suffixes from your permission plugin,
delete all groups from **groups.yml** and only keep this:
```
_DEFAULT_:
tabprefix: "%luckperms-prefix%"
tabsuffix: "%luckperms-suffix%"
```
# API
*To get started with the API, see [Developer API](https://github.com/NEZNAMY/TAB/wiki/Developer-API) page.*
To access this feature, you'll need to obtain `TabListFormatManager` instance. Get it using `TabAPI.getInstance().getTabListFormatManager()`. If this feature is disabled, the method will return `null`.
To set the values for the respective formatting, use the following:
* `TabListFormatManager#setPrefix(TabPlayer, String)`
* `TabListFormatManager#setName(TabPlayer, String)`
* `TabListFormatManager#setSuffix(TabPlayer, String)`
To reset the values, set them to `null`.
To get custom values previously set using the API (they will return `null` if no custom value is set):
* `TabListFormatManager#getCustomPrefix(TabPlayer)`
* `TabListFormatManager#getCustomName(TabPlayer)`
* `TabListFormatManager#getCustomSuffix(TabPlayer)`
To get the original value set by the plugin based on configuration:
* `TabListFormatManager#getOriginalPrefix(TabPlayer)`
* `TabListFormatManager#getOriginalName(TabPlayer)`
* `TabListFormatManager#getOriginalSuffix(TabPlayer)`
**Note**: These values are only temporary, meaning they won't get saved anywhere and will get reset on player quit or plugin reload. If you wish to save these values into file, use [commands](https://github.com/NEZNAMY/TAB/wiki/Commands-&-Permissions#tab-playergroupplayeruuid-name-property-value-options).
@@ -0,0 +1,13 @@
When a plugin for linking proxies is detected, TAB automatically enables its hook to add support for it.
No configuration is necessary.
Supported redis plugins:
* [RedisBungee](https://github.com/ProxioDev/RedisBungee)
Supported features:
* [Belowname](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Belowname)
* [Global playerlist](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Global-playerlist)
* [Nametags](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Nametags) & [Sorting](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Sorting-players-in-tablist)
* [Tablist name formatting](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Tablist-name-formatting)
* [Playerlist Objective](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Playerlist-Objective)
The hook does not and will never support [Layout](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Layout), which would require drastic changes to the feature itself and wouldn't be worth it, since the amount of visible players is usually even lower due to fixed slots and RedisBungee is used on networks with many players, so there will be enough players to work with anyway.
+139
View File
@@ -0,0 +1,139 @@
# Content
* [#1 - Why are NPCs showing up in the tablist?](#1---why-are-npcs-showing-up-in-the-tablist)
* [#2 - How to make TAB work with LuckPerms?](#2---how-to-make-tab-work-with-luckperms)
* [#3 - I enabled MySQL, and my prefix is now gone!](#3---i-enabled-mysql-and-my-prefix-is-now-gone)
* [#4 - Why is player sorting not working?](#4---why-is-player-sorting-not-working)
* [#5 - How to add players to %staffonline% placeholder?](#5---how-to-add-players-to-the-staffonline-placeholder)
* [#6 - How to make player heads visible in tablist?](#6---how-to-make-player-heads-visible-in-tablist)
* [#7 - Where can i find current default config files?](#7---where-can-i-find-current-default-config-files)
* [#8 - How can I split players into multiple columns?](#8---how-can-i-split-players-into-multiple-columns)
* [#9 - How to use space in prefix/suffix command?](#9---how-to-use-spaces-in-prefixsuffix-command)
* [#10 - Can I change/remove the green connection bar in tablist?](#10---can-i-changeremove-the-green-connection-bar-in-tablist)
* [#11 - Placeholder is not working](#11---placeholder-is-not-working)
* [#12 - How can I display ItemsAdder images?](#12---how-can-i-display-itemsadder-images)
* [#13 - How can I use UTF characters in configuration?](#13---how-can-i-use-utf-characters-in-configuration)
* [#14 - Is there a way to remove all players from tablist?](#14---is-there-a-way-to-remove-all-players-from-tablist)
* [#15 - How to add images to tablist?](#15---how-to-add-images-to-tablist)
* [#16 - Is MiniMessage supported?](#16---is-minimessage-supported)
* [#17 - Is it possible to show the number of players in a specific group, similar to staffonline placeholder?](#17---is-it-possible-to-show-the-number-of-players-in-a-specific-group-similar-to-staffonline-placeholder)
* [#18 - Why is the plugin flagged as a virus by Windows defender?](#18---why-is-the-plugin-flagged-as-a-virus-by-windows-defender)
## #1 - Why are NPCs showing up in the tablist?
See [Citizens FAQ](https://wiki.citizensnpcs.co/Frequently_Asked_Questions#Why_are_NPCs_showing_up_in_the_tablist.3F).
## #2 - How to make TAB work with LuckPerms?
* If you want to take prefixes/suffixes, check [this guide](https://github.com/NEZNAMY/TAB/wiki/Mini-guides-collection#taking-prefixessuffixes-from-permission-plugin) and use `%luckperms-prefix%` & `%luckperms-suffix%`.
* Sorting:
First, [Configure weights correctly in LuckPerms](https://github.com/NEZNAMY/TAB/wiki/How-to-setup-weights-priorities#luckperms). Then, you have 2 options:
* Configure [sorting by groups](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Sorting-players-in-tablist#groups) (recommended).
* Sorting by weights directly: `PLACEHOLDER_HIGH_TO_LOW:%luckperms_highest_group_weight%`.
## #3 - I enabled MySQL, and my prefix is now gone!
When enabling [MySQL](https://github.com/NEZNAMY/TAB/wiki/MySQL), it will be used as a data storage and groups.yml / users.yml files will no longer be used.
If you want to upload your configuration to MySQL (or download it back to files), use [MySQL conversion commands](https://github.com/NEZNAMY/TAB/wiki/MySQL#data-conversion) - [`/tab mysql upload`](https://github.com/NEZNAMY/TAB/wiki/MySQL#uploading-from-files-to-mysql) and [`/tab mysql download`](https://github.com/NEZNAMY/TAB/wiki/MySQL#downloading-from-mysql-to-files), respectively.
After you are done, run `/tab reload` for the changes to take effect.
## #4 - Why is player sorting not working?
See [Common mistakes section on sorting page](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Sorting-players-in-tablist#common-mistakes).
## #5 - How to add players to the %staffonline% placeholder?
Give them the `tab.staff` permission.
## #6 - How to make player heads visible in tablist?
Players who did not buy the game will never be able to see heads.
The client displays Player heads when connection to the server is an online connection authenticated through Mojang.
It cannot be directly controlled by plugins.
The intended way to reach this is by setting `online-mode=true` in `server.properties`.
If you want to allow pirates on your server,
you can still display heads for players who bought the game by changing their connections to online connections.
Most commonly used plugins for this are [FastLogin](https://www.spigotmc.org/resources/14153/) and [JPremium](https://www.spigotmc.org/resources/27766/),
which change connections of premium players who enabled it to online connections.
The same goes for disabling heads - you cannot disable them if you have online mode enabled.
## #7 - Where can i find current default config files?
You can do any of the following:
* Check the [source code](https://github.com/NEZNAMY/TAB/tree/master/shared/src/main/resources/config).
* Delete or rename a file, and the plugin will regenerate it.
* Open the plugin jar as a zip file and take files from there.
## #8 - How can I split players into multiple columns?
The client puts players into columns, it is not managed by the server.
The only way is to get more players.
They automatically split into more columns at 21, 41 and 61 players (due to limit of 20 entries per column).
If you don't mind getting all 80 slots filled with fake player slots,
check out the [Layout](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Layout) feature.
## #9 - How to use spaces in prefix/suffix command?
Use "", for example `/tab group owner tabprefix "&2&lOwner&r "`
## #10 - Can I change/remove the green connection bar in tablist?
The connection bar is client sided and cannot be re-textured or removed by TAB.
You will need a custom minecraft client or a resource pack.
## #11 - Placeholder is not working
Most common reasons for a placeholder to not work include:
* Using % symbol by itself, which breaks placeholder starts and ends and therefore breaks all placeholders after it (use %% to display the symbol)
* Trying to use a PlaceholderAPI placeholder without downloading its expansion or not having PlaceholderAPI installed at all
* Trying to use [TAB's internal bukkit-only placeholders](https://github.com/NEZNAMY/TAB/wiki/Placeholders#bukkit-only) on BungeeCord
* Trying to use [PlaceholderAPI placeholders on BungeeCord](https://github.com/NEZNAMY/TAB/wiki/How-to-set-up-PlaceholderAPI-support-on-bungeecord) without installing [bridge plugin](https://www.mc-market.org/resources/20631/)
The full list of reasons can be found on the [Placeholders](https://github.com/NEZNAMY/TAB/wiki/Placeholders#placeholder-is-not-working) page.
## #12 - How can I display ItemsAdder images?
ItemsAdder offers placeholders, which return the respective symbol to which your desired image is bound to. You can get them using ItemsAdder's PlaceholderAPI expansion using their `%img_<name>%` placeholder. ItemsAdder's internal placeholders (`:something:`) will not work in TAB.
If you are unable to change the references
(for example, because they are defined in permission plugin and used elsewhere as well),
you can use [PlaceholderAPI](https://github.com/NEZNAMY/TAB/wiki/Quick-PlaceholderAPI-startup-guide)'s `imgfix` expansion
that replaces format of given placeholders into the correct format.
Example: `%luckperms_prefix%` -> `%imgfix_{luckperms_prefix}%`
## #13 - How can I use UTF characters in configuration?
**Option 1**: [Save the file in UTF-8 encoding](https://github.com/NEZNAMY/TAB/wiki/How-to-save-the-config-in-UTF8-encoding) and use your desired symbol directly.
**Option 2**: Find hex code of your symbol (4 hexadecimal numbers) and use `\uxxxx` format,
where `xxxx` is hex code of the symbol.
Make sure to also wrap the text into `""` for the text to properly take `\` as an escape symbol.
Using `''` will result in the text being display literally, not as a code.
**Note:** Minecraft does not support every single UTF symbol and displays unsupported symbols as a box. You can try sending your symbol into chat and see if it works or not. If not, it's not supported by MC.
## #14 - Is there a way to remove all players from tablist?
For a player to be visible in game, they must be in the tablist as well.
Remember the NPC in tablist issue?
If you don't mind players not appearing in the game, get a plugin that hides all players.
If you want to see them in the game, however, your only choice is to put a lot of empty lines into header,
which will push all players out of the screen.
## #15 - How to add images to tablist?
You can check out [this reddit post](https://www.reddit.com/r/admincraft/comments/llrgty/comment/gnswdcz/?utm_source=share&utm_medium=web2x&context=3).
When using the symbol in configuration using \u format, remember to use `""` in config instead of `''`.
## #16 - Is MiniMessage supported?
Kind of.
MiniMessage support **is** included; however, this doesn't mean it is guaranteed to work.
MiniMessage library must be included in your server software.
TAB does not include this library.
* It **is** included in **Paper 1.18.2** and higher, **Velocity** and **Sponge 8**.
* It **is not** included in **Spigot**, any server software for 1.18.1 and lower, **BungeeCord**, **Sponge 7** and **Fabric**.
If you believe MiniMessage should be supported on your server but doesn't work, open a bug report.
## #17 - Is it possible to show the number of players in a specific group, similar to staffonline placeholder?
The plugin's internal placeholders are limited, and this kind of functionality is not included.
However,
you can achieve this using PlaceholderAPI's `PlayerList` expansion
and following [this example](https://github.com/Tanguygab/PlayerList-PlaceholderAPI-Expansion/wiki#list-of-players-in-group).
## #18 - Why is the plugin flagged as a virus by Windows defender?
First, this is a false positive.
[Here](https://www.spigotmc.org/threads/windows-defender-false-positives.639507/)'s a spigot thread confirming it.
After experimenting with VirusTotal,
it turns out the antivirus software available on the website used flags [bStats](https://github.com/Bastian/bStats) library as malicious.
Its purpose is to collect anonymous data about servers and submitting it to [bStats.org](https://bstats.org/),
where plugin authors can see how many servers use their plugins (if they don't disable it).
It also checks for CPU and OS types, which could be the reason for the false positive.
[Here](https://bstats.org/plugin/bukkit/TAB%20Reborn/5304) is one of TAB's pages as an example.
Windows defender could be flagging it for the same reason.
+37
View File
@@ -0,0 +1,37 @@
# About the wiki
The wiki explains the functionality of the plugin as of version **5.0.5**.
If your config looks different or is missing some features, you are using an old version of the plugin.
To get the latest version, check [releases](https://github.com/NEZNAMY/TAB/releases/).
Wiki for older plugin versions is not available.
If you plan to run your server for longer than 1 week,
it's a good idea to read this wiki as it explains everything about the plugin.
This will give you knowledge to do things you had no idea were possible, giving you an advantage over everyone else.
A lot of examples on the wiki use PlaceholderAPI placeholders without explaining its installation step by step. If you are going to use the examples and aren't familiar with the plugin, check out [Quick PlaceholderAPI startup guide](https://github.com/NEZNAMY/TAB/wiki/Quick-PlaceholderAPI-startup-guide).
# Limitations of plugins
TAB is a plugin.
It only modifies the server behavior to your liking.
It does not add anything into the game.
Because of that, you'll need
to carefully read the limitations of each feature to know what they are capable of and what they are not capable of.
Some of the undesired behavior can be altered using a resource pack and some using a modified client.
Both of these are out of scope of TAB as a plugin; therefore, no advanced information regarding this is provided.
# Public plugin
TAB is a public plugin designed to satisfy the needs of a majority of servers.
This means it has functions not everyone will need. All you need to do is disable functions you don't want. Disabled features do not consume the CPU at all.
On the other hand, it cannot contain everything everyone can think of.
There must be a balance
between providing as much as possible while making the configuration as short and readable as possible.
This is not an easy task.
The majority of things that are not supported directly can be achieved in different ways.
Adding direct way for everything everyone asks for would not only take a lot of time,
but make the plugin harder to configure for everyone, as well as introduce a lot of duplicate ways to achieve things,
making the plugin overcomplicated.
If your need is very specific and not available in the plugin in any way,
you should look into private plugin development.
You will end up with a plugin made just for you with everything you want and nothing else.
@@ -0,0 +1,58 @@
# Content
* [About](#about)
* [Option 1: Primary group from permission plugin](#option-1-primary-group-from-permission-plugin)
* [Option 2: Permission nodes](#option-2-permission-nodes)
* [Taking groups from backend servers when TAB is on proxy](#taking-groups-from-backend-servers-when-tab-is-on-proxy)
## About
TAB uses groups to assign properties (such as tabprefix) and sort players in tablist (if sorting by groups). You have 2 ways of configuring primary groups of players in TAB.
First option hooks into your permission plugin and takes groups from it. Therefore, your permission plugin must be supported.
**Supported permission plugins**: **LuckPerms** everywhere, on Bukkit any plugin supporting **Vault**.
If your permission plugin is not supported, you can use [Option 2](#option-2-permission-nodes).
## Option 1: Primary group from permission plugin
This is the default method and recommended.
TAB will ask your permission plugin for player's primary group.
There are 2 simple steps to this:
* Keep `assign-groups-by-permissions: false` in your config
* Put players into groups in your permission plugin
> [!CAUTION]
> If assigning players into multiple groups, make sure their weights are correct
> (for luckperms /lp group \<group\> setweight \<number\>).
> [!TIP]
> Verify player's group using `/tab debug <player>`. It should say `Primary permission group: <your group>`.
## Option 2: Permission nodes
Instead of taking whole groups, TAB will check for permission nodes and assign groups based on the highest permission.
1. Go to config.yml and set `assign-groups-by-permissions: true`.
2. Give `tab.group.<group name>` permission to the user/permission group.
3. Put all possible groups into `primary-group-finding-list`.
This is necessary because:
#1 - there's no way to get the list of permissions, only checking for a permission.
The list will be used for a list of permissions to check for.
#2 - if a player has permission for more than one group, the list will be used to pick the correct one
(the one higher in the list).
> [!WARNING]
> Remember that OP = all permissions!
> That's the whole point of OP function.
> To grant all permissions.
> In that case,
> you need to negate permissions in your permission plugin for other groups which are higher than player's wanted group.
# Taking groups from backend servers when TAB is on proxy
By default, TAB takes groups from the permission plugin installed on the same server instance.
In the case of proxy installation, groups are by default taken from the proxy.
To see how is your proxy permission plugin configured, use its respective command
(for LuckPerms it's `/lpb user <player> info` instead of `/lp`).
If you don't have your permission plugin synced using MySQL for sharing groups and don't wish to, and want groups to be taken from backend servers instead, enable the config option:
```
use-bukkit-permissions-manager: true
```
When enabling it, all group **and** permission requests will be done through [Bridge plugin](https://github.com/NEZNAMY/TAB/wiki/TAB-Bridge) to take data from backend servers. Your groups will now match data from backend server a player is connected to (in case of LuckPerms `/lp user <player> info`).
When assigning by permissions instead of taking the primary group directly from permission plugin,
the permission nodes (`tab.group.<name>`) will be taken from backend servers instead.
@@ -0,0 +1,98 @@
# Content
* [Tablist](#tablist)
* [Nametag](#nametag)
* [Tips & Tricks](#tips--tricks)
* [Tip 1 - Nickname prefix](#tip-1---nickname-prefix)
* [Tip 2 - Sorting nicked players with the lowest priority](#tip-2---sorting-nicked-players-with-the-lowest-priority)
# Tablist
This one is straightforward.
The tablist format of players is one text split into 3 parts in the plugin for convenience
(tabprefix, customtabname, tabsuffix).
Using `customtabname` you can configure name part into any placeholder you want,
including one from your nickname plugin.
All you need is a working PlaceholderAPI placeholder from your nickname plugin.
Example:
**groups.yml**
```
_DEFAULT_:
customtabname: '%essentials_nickname%'
```
or using in-game command `/tab group _DEFAULT_ customtabname %essentials_nickname%`.
This example uses `%essentials_nickname%` placeholder from Essentials. Giving it to `_DEFAULT_` group keyword makes it a default value for all groups that do not override this property.
> [!CAUTION]
> Do NOT put nickname placeholder into tabprefix!
> You will end up with double names!
> Put the nickname placeholder into customtabname instead.
# Nametag
Nametags are more complicated because they consist of player's username, team prefix and team suffix.
There is no intended way to do this.
The only way is changing it using a nickname plugin.
Some nickname plugins actually change name in game profile, which also changes it in nametag.
You will need to find one that offers this and then use it.
This is a complicated process with lots of side effects, so TAB does not offer it.
# Proper compatibility with plugins that change profile name
If using a nickname plugin that changes player's profile name to change it in the name tag,
this has lots of side effects.
Most notably, it breaks all name-bound features,
especially [nametags](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Nametags) and [sorting](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Sorting-players-in-tablist).
For that reason, TAB must detect name change.
This is done automatically on Bukkit, BungeeCord and Fabric.
This detection is not available on Sponge and Velocity.
In order for TAB to properly detect name change, player UUID must remain the same,
otherwise it's a random entry with a random uuid and random name, which TAB isn't able to match with actual players.
Make sure your nickname plugin is not changing UUID of players.
If UUID changes, the plugin won't be able to properly format names even in the tablist,
since entries there are bound to UUIDs and by changing it, it will break.
Identifying whether name change detection is working properly or not can be checked
by setting `debug: true` in config and checking console on name change.
It should say `Processing name change of player <player name> to <new nickname>`.
If it doesn't, something went wrong, most likely UUID not matching.
# Tips & Tricks
## Tip 1 - Nickname prefix
By default, Essentials prefixes nicknames of players in chat using `~` symbol for nicked players. We can very easily replicate that with [Conditional placeholders](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Conditional-placeholders). First, create a new condition:
```
conditions:
nick:
conditions:
- '%essentials_nickname%=%player%'
yes: "%player%" # If nickname = player name -> player is not nicked
no: "~%essentials_nickname%" # If nickname != player name -> player is nicked
```
Then, use `%condition:nick%` in your `customtabname` instead of the placeholder directly.
# Tip 2 - Sorting nicked players with the lowest priority
Let's say your sorting list looks like this:
```
sorting-types:
- "GROUPS:owner,admin,mod,helper,builder,vip,default"
- "PLACEHOLDER_A_TO_Z:%player%"
```
Let's also assume that you want every nicked player to be sorted as `default`. This can be achieved using [sorting by placeholder](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Sorting-players-in-tablist#placeholder) and creating a [condition](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Conditional-placeholders) that will return output based on nick status. First, let's create the condition:
```
conditions:
group:
conditions:
- '%haonick_isNicked%=true'
yes: "default"
no: "%group%"
```
When the condition is met, meaning player is nicked, it will return the group we want nicked players to be sorted as, in this case `default`. Otherwise, return player's actual group.
The condition check may differ with different nickname plugins. You will need to check documentation of your nickname plugin to see what kind of placeholders it offers and what they return (you can also use `/tab parse` to see what exactly did a placeholder return).
In this case, we are using placeholder `%haonick_isNicked%`, which returns `true` for nicked players.
If using Essentials, the line would look like this: `%essentials_nickname%!=%player%`, because Essentials is made to return player's actual name when not nicked, meaning when it's not equal, player is nicked.
Finally, use the conditional placeholder in sorting:
```
sorting-types:
- PLACEHOLDER:%condition:group%:owner,admin,mod,helper,builder,vip,default"
- PLACEHOLDER_A_TO_Z:%player%
```
This will result in nicked players being sorted as `default`.
If you want to achieve something more complicated, such as not only sorted as default, but another rank, you will need to dig deeper into your problem, analyzing available placeholders and functions that will help you achieve your result.
@@ -0,0 +1,31 @@
This guide will explain how to solve the incompatibility with glow plugins.
# Content
* [Reason for compatibility issue](#reason-for-compatibility-issue)
* [Solution](#Solution)
* [Examples of glow plugins](#examples-of-glow-plugins)
## Reason for compatibility issue
Glow color is managed by scoreboard teams, which also handle nametag formatting and player sorting in tablist. Only one plugin can handle teams at a time. Because of that, TAB will prevent glow plugins from assigning players into teams.
## Solution
The solution to get around this issue is to use the glow plugin's placeholder (if it has any).
This placeholder has to be at the end of the player's `tagprefix` as it has to be the last color in the prefix.
> [!WARNING]
> For Minecraft versions below 1.13 the prefix can't be longer than 14 characters due to [16-character limit](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Nametags#limitations) total
(glow placeholder adds 2 characters - `&` and the color code)
**Example:**
This example uses the placeholder of the [eGlow](https://www.spigotmc.org/resources/63295/) plugin.
**groups.yml**
```
_DEFAULT_:
tagprefix: '%vault-prefix%%eglow_glowcolor%'
```
## Examples of glow plugins
- [eGlow](https://www.spigotmc.org/resources/63295/) (%eglow_glowcolor%) (Paid)
- [CMI](https://www.spigotmc.org/resources/3742/) (%cmi_user_glow_code%) (Paid)
- ... more?
@@ -0,0 +1,28 @@
# Programs
* [Notepad](#notepad)
* [Notepad++](#notepad-1)
* [Sublime Text 3](#sublime-text-3)
* [WinSCP](#winscp)
***
# Notepad
Open the file > Click file > Save as... > Set encoding to UTF-8 > Click save
![](https://i.ibb.co/zQHbL3p/notepad.png)
***
# Notepad++
Open the file > Click encoding > Click UTF-8 (if that didn't work, use Convert to UTF-8)
![](https://i.ibb.co/qNdj80Q/notepad.png)
***
# Sublime Text 3
![](https://cdn.discordapp.com/attachments/659545536533364776/847537718236938260/unknown.png)
***
# WinSCP
Open the file in WinSCP and check if it is in UTF-8 encoding already (1). If it is not, click on ENCODING at the top (2), select UTF-8 (3) and then save the file. You can now edit the file as you like and paste in characters.
![](https://i.ibb.co/nRxDmHk/Win-SCP-Xlxw-Qfft-Cb.png)
![](https://i.ibb.co/dP77yzp/Win-SCP-UXWc4-Xdp2-N.png)
@@ -0,0 +1,72 @@
# Content
* [Introduction](#introduction)
* [Usage](#usage)
* [Magic codes](#magic-codes)
* [Invalid code handling](#invalid-code-handling)
* [Compatibility with <1.16](#compatibility-with-116)
* [Fonts](#fonts)
* [Usage](#usage-1)
* [Compatibility with RGB and gradients](#compatibility-with-rgb-and-gradients)
# Introduction
As of 1.16, mojang introduced RGB color support.
This allows us to use 256^3 different colors instead of the original 16 ones.
This is not supported on <1.16 in any way.
# Usage
Supported RGB formats:
* `#RRGGBB`
* `&#RRGGBB`
* `{#RRGGBB}`
* `#<RRGGBB>`
* `&x&R&R&G&G&B&B`
Gradients:
* `<#RRGGBB>Text</#RRGGBB>`
* `{#RRGGBB>}Text{#RRGGBB<}`
* `<$#RRGGBB>Text<$#RRGGBB>`
TAB uses the first by default, but is able to accept the other types as well without leaving any characters (such as `{}`) behind.
**Gradients only support 2 colors, using more will result in an invalid syntax and won't work.**
> [!CAUTION]
> Remember to replace `RRGGBB` with actual hexadecimal numbers (0-9, a-f)!
You can use a tool like [this one](https://htmlcolorcodes.com/) to easily find suitable colors.
## Magic codes
Just like with legacy colors, use color first, then magic codes (in any order). For example with **bold**: `#00FFFF&lText`.
For gradients, put the magic codes at the beginning of text. For example `<#00FF00>&lBold gradient text</#FF00FF>`.
# Invalid code handling
In case you accidentally use invalid hex color code, the plugin will simply ignore it and keep it in raw format.
# Compatibility with <1.16
Since <1.16 clients do not understand these color codes, something else must be displayed instead.
TAB, server software or viaversion (depending on your setup)
will find the closest legacy color to the desired RGB combination and will use that color instead.
# Fonts
The plugin offers usage of the font feature introduced in Minecraft 1.16.
> [!IMPORTANT]
> This does NOT refer to different character sets!
> This refers to different fonts defined in resource packs or MC itself.
## Usage
The syntax is `<font:FONT_NAME>Text</font>` where `FONT_NAME` is name of your desired font.
**Example**
`<font:minecraft:alt>This is a text written in minecraft enchantment table language which no one understands</font>`
**Result**
![image](https://github.com/NEZNAMY/TAB/assets/6338394/9a19cb1b-2761-4500-b058-2e7a7cd68d14)
## Compatibility with RGB and gradients
When trying to use both font and RGB or gradients, font must be outside and RGB/gradients inside.
**Example**
`<font:minecraft:alt><#00FF00>This is a colorful text written in minecraft enchantment table language which no one understands, but it looks pretty</#FF0000></font>`
**Result**
![image](https://github.com/NEZNAMY/TAB/assets/6338394/81da5bc4-1920-4dad-bcf5-002b5de741f8)
+65
View File
@@ -0,0 +1,65 @@
# Content
* [Backend](#backend)
* [BungeeCord / Velocity](#bungeecord--velocity)
* [Proxy installation](#proxy-installation)
* [Backend installation](#backend-installation)
* [Mixed installation](#mixed-installation)
* [Updating the plugin](#updating-the-plugin)
# Backend
Installation on Bukkit / Fabric / Sponge is as simple as it can be.
Put the plugin into the plugins folder and restart the server.
Dynamic (re)loads at runtime such as `/plugman load tab` to load the plugin are fully supported.
However, plugins hooking into TAB may break when you use such ways to (re)load it.
# BungeeCord / Velocity
When running a network, you have 3 options:
* Installing TAB only on the proxy (recommended)
* Installing TAB on all backend servers instead
* Installing TAB everywhere and disabling features, so they don't conflict (not recommended)
See below for more information regarding each way.
## Proxy installation
This is the recommended setup.
Put the plugin into the plugins folder of the proxy server and restart it.
**Recommended**:
Install [TAB-Bridge](https://github.com/NEZNAMY/TAB/wiki/TAB-Bridge) on your **backend servers** for PlaceholderAPI support and more.
**Recommended**:
If you are using **Velocity**,
install [VelocityScoreboardAPI](https://github.com/NEZNAMY/VelocityScoreboardAPI/) plugin **on the proxy** for scoreboard-related features to work.
> [!NOTE]
> With proxy installation, use **/btab** command instead of **/tab**.
Advantages of proxy installation compared to installing on all backend servers instead:
* Can use the [Global player list](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Global-playerlist) and [Layout](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Layout) can work with all players connected to the proxy
* Can use new content for new clients even if a backend server version is old (1.16+ RGB codes, 1.20.3+ scoreboard features)
* Avoid [header/footer](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Header-&-Footer#additional-note-1---not-resetting-on-server-switch) and [bossbar](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Bossbar#additional-note-2---not-hiding-on-server-switch) not disappearing on server switch
* Configuration files in a single place for easier editing / no need to use MySQL for syncing data
Disadvantages compared to installing on all backend servers instead:
* No [per-world player list](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Per-world-playerlist) (can be achieved by installing the plugin on backend servers and disabling all features except the per-world player list)
## Backend installation
Just like when not running a network, install the plugin on all servers where you want the plugin. However, this setup is not as good (see advantages of proxy installation).
## Mixed installation
Mixed installation is absolutely not recommended and should be avoided.
It requires you to disable features to make only 1 instance handle a single feature at a time,
which most people fail miserably to do,
resulting in issues such as header/footer flashing between proxy and backend configuration.
With bridge, you are able to achieve almost anything with proxy installation.
# Updating the plugin
Updating the plugin is always as simple as replacing old jar with the new one.
You do not need to reset your configuration files or make any manual changes to them.
If any changes to configuration are made (changed / removed / added),
TAB will automatically convert your existing configuration files to the latest format
(most notably 2.9.2 → 3.0.0, but any other changes as well).
Downgrading is completely unsupported, as an old plugin version cannot know what the future config format is / will be.
Just like Minecraft itself.
There is no reason for downgrading anyway, as every version is superior to older versions released before it.
+15
View File
@@ -0,0 +1,15 @@
# About
This is collection if minecraft issues/bugs you may experience when using TAB, which are not TAB bugs and cannot be fixed with a plugin.
# 1.5.x - 1.12.x - Unwanted space
You may see unwanted space at the end of a line of text even if you didn't configure any.
This is a client sided bug.
To avoid it, add `&r` after ending bold segment (for example, prefix `&4&lAdmin&r&6`).
# 1.15.x - Strikethrough and underline
Using &m (strikethrough) and &n (underline) does not work in header,
last line of the scoreboard and possibly other places
([MC-180110](https://bugs.mojang.com/browse/MC-180110)).
# 1.20 - 1.20.4 - Chat over tablist
Visual bug rendering chat over the tablist ([MC-263256](https://bugs.mojang.com/browse/MC-263256)).
+206
View File
@@ -0,0 +1,206 @@
# Content
Combine the knowledge gathered by reading the wiki to get interesting results, most frequently asked ones listed here.
* [Displaying kill / death counter in tablist](#displaying-kill--death-counter-in-tablist)
* [Taking prefixes/suffixes from permission plugin](#taking-prefixessuffixes-from-permission-plugin)
* [Showing player's version in tablist](#showing-players-version-in-tablist)
* [Replicating Purpur's TPSBar](#replicating-purpurs-tpsbar)
* [BedWars1058 compatibility](#bedwars1058-compatibility)
* [Displaying AFK status in tablist](#displaying-afk-status-in-tablist)
* [Showing combined online player count from multiple servers](#showing-combined-online-player-count-from-multiple-servers)
* [Option 1 - Using global playerlist](#option-1---using-global-playerlist)
* [Option 2 - Using PlaceholderAPI](#option-2---using-placeholderapi)
# Displaying kill / death counter in tablist
This example uses PlaceholderAPI placeholders.
Kills:
```
playerlist-objective:
enabled: true
value: "%statistic_player_kills%"
```
Deaths:
```
playerlist-objective:
enabled: true
value: "%statistic_deaths%"
```
**Note:** These values are taken from server stats. You can modify / reset them for each player in `<main world>/stats/<player uuid>.json` file.
# Taking prefixes/suffixes from permission plugin
Delete all groups from **groups.yml** and only keep this:
```
_DEFAULT_:
tabprefix: "%vault_prefix%"
tagprefix: "%vault_prefix%"
tabsuffix: "%vault_suffix%"
tagsuffix: "%vault_suffix%"
```
This requires Vault and a permission plugin to work.
If you have luckperms installed on the same server instance, you can use TAB's internal `%luckperms-prefix%` (and suffix) placeholders instead.
**Note:** If TAB is on bungeecord, and you want prefixes to be taken from backend servers, use `%vault_prefix%` (or `%luckperms_prefix%`) with [PlaceholderAPI support on bungeecord](https://github.com/NEZNAMY/TAB/wiki/TAB-Bridge).
# Showing player's version in tablist
Run `/tab group _DEFAULT_ tabsuffix " &8[&3%player-version%&8]"` or any other color combination you want. You can also include other placeholders with it. You can also modify it directly in **groups.yml** file instead. With the provided example command, you'll get the following result:
![image](https://github.com/NEZNAMY/TAB/assets/6338394/2327b482-e8da-4940-9aa8-ea2bdda64b6f)
# Replicating Purpur's TPSBar
*This guide was made purely for demonstration of TAB's functionality to show you can even do things like this with conditions. It is not meant to be used as a replacement for Purpur or any of its functions or discouraging users from using Purpur.*
By default, Purpur's TPSBar shows server's TPS, MSPT and player ping.
These change colors from green to red based on value.
The easier way
to achieve this is with [Placeholder output replacements](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Placeholder-output-replacements-(premium-only)),
however, it alters placeholders everywhere inside TAB,
which would result in features like [Playerlist objective](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Playerlist-Objective)
to stop working correctly when %ping% is used,
since it would contain color codes now.
For that reason,
we will use [Conditions](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Conditional-placeholders) instead.
When TPS is above 19, it displays as `<#55FF55>value</#00AA00>`. When above 15, `<#FFFF55>value</#FFAA00>`, otherwise `<#FF5555>value</#AA0000>`. This can be achieved with 2 conditions:
```
conditions:
tps:
conditions:
- "%tps%>=19"
yes: "<#55FF55>%tps%</#00AA00>"
no: "%condition:tps2%"
tps2:
conditions:
- "%tps%>=15"
yes: "<#FFFF55>%tps%</#FFAA00>"
no: "<#FF5555>%tps%</#AA0000>"
```
To use this, we will use `%condition:tps%`.
Now, repeat for mspt and ping. For mspt, purpur's intervals are <40, <50, 50+. For ping, it's <100, <200, 200+.
Conditions for mspt and ping may look something like this:
```
conditions:
mspt:
conditions:
- "%mspt%<40"
yes: "<#55FF55>%mspt%</#00AA00>"
no: "%condition:mspt2%"
mspt2:
conditions:
- "%mspt%<50"
yes: "<#FFFF55>%mspt%</#FFAA00>"
no: "<#FF5555>%mspt%</#AA0000>"
ping:
conditions:
- "%ping%<100"
yes: "<#55FF55>%ping%</#00AA00>"
no: "%condition:ping2%"
ping2:
conditions:
- "%ping%<200"
yes: "<#FFFF55>%ping%</#FFAA00>"
no: "<#FF5555>%ping%</#AA0000>"
```
To use them, we will use `%condition:mspt%` and `%condition:ping%`. Purpur's TPSBar is using mspt as bossbar progress with range from 0 to 50. This can be achieved with PlaceholderAPI's math expansion: `%math_0_{tab_placeholder_mspt}*2%`. It always uses `GREEN` color and `NOTCHED_20` style. Let's put all of this together:
```
bars:
tpsbar:
style: NOTCHED_20
color: GREEN
progress: "%math_0_{tab_placeholder_mspt}*2%"
text: "&7TPS&e: %condition:tps% &7MSPT&e: %condition:mspt% &7Ping&e: %condition:ping%&7ms"
```
The last step is to configure when should this bossbar be displayed. One way is to use bossbar announce/send command. Another is to use display conditions. An example can look like `display-condition: "permission:tab.tpsbar`. Now, only players with the permission will see the bossbar.
# BedWars1058 compatibility
## Sorting
To sort teams through TAB, add the PLACEHOLDER_A_TO_Z sorting type with the %bw1058_player_team% placeholder. Example:
```yml
sorting-types:
- "PLACEHOLDER_A_TO_Z:%bw1058_player_team%"
- "GROUPS:admin,mod,default"
- "PLACEHOLDER_A_TO_Z:%player%"
```
## Team name in tablist/nametag
To display the team name in the tablist, use this command: `/tab group _DEFAULT_ tabprefix %bw1058_player_team%`
The same goes for the nametag, but with tagprefix instead: `/tab group _DEFAULT_ tagprefix %bw1058_player_team%`
To display only the first letter of the team, download this PlaceholderAPI expansion: https://api.extendedclip.com/expansions/bw1058plus/
and use `%bw1058plus_team_letter%` instead, if you want the color as well, put `%bw1058plus_team_color%` right before.
## Rank in lobby & Team name in game
If you want to display the rank of the player while he's in the lobby or waiting lobby,
BUT show the team name while in the game, then don't worry, there's a way.
You can create a condition which checks if the player's current team = nothing (which means the player isn't playing),
and return either the rank or the team name depending on that condition.
Example:
```yml
conditions:
rankOrTeam:
conditions:
- "%bw1058_player_team%="
yes: "%luckperms-prefix%"
no: "%bw1058_player_team%"
```
And then do `/tab group _DEFAULT_ tabprefix %condition:rankOrTeam%` and `/tab group _DEFAULT_ tagprefix %condition:rankOrTeam%` so it shows in your nametag and in your tablist name.
# Displaying AFK status in tablist
First, you'll need to get an AFK plugin. TAB does not track player AFK status. Then, find a PlaceholderAPI placeholder for your AFK plugin in their documentation, such as
* `%essentials_afk%` for Essentials
* `%cmi_user_afk_symbol%` for CMI
* `%purpur_player_afk%` for Purpur (server software)
Remember to install PlaceholderAPI and the respective expansion of your afk plugin.
Then, use the placeholder in configuration wherever you want it.
Assuming you want it for all players,
use `_DEFAULT_` group keyword in **groups.yml** for default settings for all groups.
Combined with other settings, it may look like this for tabsuffix:
```
_DEFAULT_:
tabsuffix: "%luckperms-suffix%%essentials_afk%"
```
Or running an in-game command: `/tab group _DEFAULT_ tabsuffix %luckperms-suffix%%essentials_afk%`.
This is not limited to displaying AFK status in suffix, you can also use it in tabprefix instead (or nametags).
Finally, you will most likely need to set up [placeholder output replacements](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Placeholder-output-replacements) for the placeholder, as lots of them, including the %essentials_afk% placeholder used as an example, return `yes` and `no` values, which you most likely want to customize.
As mentioned, by default, Essentials' afk placeholder returns `yes` / `no` (unless modified in PlaceholderAPI's config.yml). Other placeholders may return different values. To find out what a placeholder returned, use `/tab parse <player> <placeholder>`. Remember to include color codes as well.
An example customization may look like this:
```
placeholder-output-replacements:
"%essentials_afk%":
"yes": " &4&lAFK"
"no": "" # display nothing if not afk
```
Keep in mind that some placeholders don't need this.
For example, CMI has 2 placeholders - %cmi_user_afk% that returns true/false,
and %cmi_user_afk_symbol% that returns AFK text configured in CMI configuration.
Therefore, if you decide to use the latter one, you don't need to set up replacements.
# Showing combined online player count from multiple servers
## Option 1 - Using global playerlist
The first way is to install TAB on the proxy
and enable [global playerlist](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Global-playerlist).
It allows you to create groups of servers that share playerlist.
These groups can then be used to show player count on those servers using a placeholder.
Using the following example:
```
global-playerlist:
enabled: true
server-groups:
lobbies:
- lobby1
- lobby2
```
Servers `lobby1` and `lobby2` will share playerlist. You will also be able to use placeholder formula `%playerlist-group_<group>%`, in this case `%playerlist-group_lobbies%`. It will show amount of players on `lobby1` and `lobby2` combined.
Advantage of this is the natural compatibility with global playerlist's settings,
which is also its disadvantage, since global playerlist has to be configured that way.
When using [layout](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Layout) feature,
global playerlist is redundant and having it enabled only for the placeholder is inefficient.
## Option 2 - Using PlaceholderAPI
Unlike the first option, this one offers much more freedom, but also requires another plugin. You'll need to [download PlaceholderAPI and its expansions called math and bungee](https://github.com/NEZNAMY/TAB/wiki/Quick-PlaceholderAPI-startup-guide) (`/papi ecloud download bungee`, `/papi ecloud download math`, `/papi reload`).
First, you need placeholders for online count on specific servers. Bungee expansion does exactly that. The format is `%bungee_<server>%`. To merge the online counts, use math expansion. The syntax will be `%math_0_<expression>%`, where `expression` uses online counts from specific servers from bungee expansion. Finally, you'll end up with a placeholder like `%math_0_{bungee_lobby1}+{bungee_lobby2}%`. This placeholder will merge online counts from `lobby1` and `lobby2`.
Please note that by default, bungee expansion updates values only every 30 seconds. This can be changed in PlaceholderAPI's config. If the numbers still don't show correct value, check if the placeholder works correctly using `/papi parse me <placeholder>`. If not, this is not a TAB issue.
Advantage of this is no requirement for a specific TAB feature to be enabled, which also includes no need to have TAB installed on the proxy. The downside is relying on 3rd party software. If TAB is on proxy, you'll also need [bridge plugin](https://github.com/NEZNAMY/TAB/wiki/TAB-Bridge).
+77
View File
@@ -0,0 +1,77 @@
* [About](#about)
* [Availability](#availability)
* [Enabling](#enabling)
* [Configuration changes](#configuration-changes)
* [Data conversion](#data-conversion)
* [Downloading from MySQL to files](#downloading-from-mysql-to-files)
* [Uploading from files to MySQL](#uploading-from-files-to-mysql)
* [Synchronization frequency](#synchronization-frequency)
# About
By default, groups and users are stored in separate files (groups.yml and users.yml).
Enabling MySQL will use it as storage of groups and users instead of the files.
`playerdata.yml` file (for toggling scoreboard/bossbar and remembering the decision)
is not affected and will still be used instead of MySQL.
It may be added in the future.
All tables from TAB are prefixed with `tab_`, currently `tab_groups` for groups and `tab_users` for users.
# Availability
Before attempting to use the function, make sure your server software has an integrated MySQL driver.
TAB does not contain it by itself.
See the compatibility table below for current information about compatibility:
| Platform | Available |
|------------|-----------|
| Bukkit | ✔ |
| BungeeCord | ✔ |
| Fabric | ❌ |
| Sponge | ❌ |
| Velocity | ❌ |
# Enabling
Find this section in **config.yml**:
```
mysql:
enabled: false
host: 127.0.0.1
port: 3306
database: tab
username: user
password: password
useSSL: true
```
Enabling it will enable MySQL. The other settings are pretty straight forward.
# Configuration changes
Once enabled, configured values in groups.yml and users.yml will not be visible anymore,
which is expected because your database is empty when created.
This is not a bug.
All you need to do is [upload your data to the database](#uploading-from-files-to-mysql).
Since groups.yml and users.yml files will no longer be used, making any changes to them will take no effect. If you wish to perform any changes, you have 2 options:
* Use in-game commands, which will upload changes to the database
* Upload the file to the database after every change (will not work for removing though) (useful when enabling for the first time).
# Data conversion
## Downloading from MySQL to files
This can be done using `/tab mysql download` command (permission is `tab.mysql.download`). It will download all data from the MySQL and save into groups.yml / users.yml.
This command requires the MySQL function enabled.
Existing data in files will not intentionally be deleted, but may get overwritten.
## Uploading from files to MySQL
This can be done using `/tab mysql upload` command (permission is `tab.mysql.upload`). It will upload all content from groups.yml and users.yml into MySQL.
This command requires the MySQL function enabled.
Existing data in the database will not intentionally be deleted, but may get overwritten.
# Synchronization frequency
When using files to store data, it's simple -
groups.yml and users.yml files are loaded into memory and read from when needed.
When a command is run to update something, it is updated in memory and saved into files as well.
When using MySQL, the plugin has to keep data up to date with other servers, but at the same time not kill the server with requests all the time.
For writing, both groups and users, whenever a command is used to update something, the update is sent to the database immediately.
For reading, data is updated as following:
* Groups - All data from groups table is loaded into memory on a load (server start, plugin reload). When a player joins in or any other action, values from memory are checked. Therefore, if a change is made on another server, it will not be visible until the plugin is reloaded.
* Users - Nothing is loaded on a plugin load. Whenever a player joins, all data of that player is requested from the database. Therefore, if a player's data changes on another server, it is visible immediately when a player joins this one, without the need to reload the plugin.
+136
View File
@@ -0,0 +1,136 @@
This guide will explain all primary ways you can reduce plugin's CPU usage besides the obvious things like "don't spam animations" or "disable features you don't want".
The usage can be checked at any time using [**/tab cpu**](https://github.com/NEZNAMY/TAB/wiki/Commands-&-Permissions#tab-cpu) command. If the numbers appear to be higher than they should be, check this guide for various ways to optimize the plugin. Most of these apply for all platforms, but some of them are only specific for some platforms.
# Content
* [#1 - [All platforms] Static text instead of placeholders](#1---all-platforms-static-text-instead-of-placeholders)
* [#2 - [All platforms] Placeholder refresh intervals](#2---all-platforms-placeholder-refresh-intervals)
* [#3 - [All platforms] Don't use RGB](#3---all-platforms-dont-use-rgb)
* [#4 - [All platforms] Don't use animations](#4---all-platforms-dont-use-animations)
* [#5 - [All platforms] Disable anti-override](#5---all-platforms-disable-anti-override)
* [#6 - [All platforms] Disable tablist name formatting](#6---all-platforms-disable-tablist-name-formatting)
* [#7 - [All platforms] Increase permission refresh interval](#7---all-platforms-increase-permission-refresh-interval)
* [#8 - [BungeeCord / Velocity] Disable TAB expansion](#8---bungeecord--velocity-disable-tab-expansion)
* [#9 - [BungeeCord / Velocity] Disable update-latency option in global playerlist](#9---bungeecord--velocity-disable-update-latency-option-in-global-playerlist)
* [#10 - [BungeeCord] Disable ByteBuf deserialization](#10---bungeecord-disable-bytebuf-deserialization)
# #1 - [All platforms] Static text instead of placeholders
Static text doesn't need to be refreshed periodically, resulting in better performance.
Some placeholders can be replaced with static text, such as placeholder for max player counts,
since that value doesn't change at runtime.
Another option is to configure prefixes per-group in config
instead of using placeholders to take those values from your permission plugin.
# #2 - [All platforms] Placeholder refresh intervals
Some placeholders take a long time to process and result in high cpu usage. However, this can be optimized by configuring refresh interval of placeholders.
This only works for PlaceholderAPI placeholders. Internal ones have an interval hardcoded already with values I found the most appropriate.
To begin, find this part in your config
```yml
placeholderapi-refresh-intervals:
default-refresh-interval: 500
"%server_uptime%": 1000
"%server_tps_1_colored%": 1000
"%player_health%": 200
"%player_ping%": 1000
"%vault_prefix%": 1000
"%rel_factionsuuid_relation_color%": 500
```
Refresh interval is in milliseconds. It must be divisible by 50.
`default-refresh-interval` is refresh interval for all unlisted PlaceholderAPI placeholders.
Keep in mind that CPU measurement is reset every 10 seconds.
This means that if you configure a higher refresh interval than 10000,
there will be intervals when placeholder didn't refresh at all,
making it look like the CPU is perfect, while on the next refresh it may be high.
For this reason, if you want to cleanly track usage, keep the interval at 10000 at most.
Using a higher interval will help if needed, but may lead to misleading info in cpu output.
# #3 - [All platforms] Don't use RGB
Though RGB colors look good, they require the text to be split into several components with `color` field used instead of the whole text pasted into the `text` field. This is a complicated process that takes quite some time. Sticking to legacy colors results in better performance.
# #4 - [All platforms] Don't use animations
While animations look cool, they also have a high resource usage.
This is because they work by spamming updates every time an animation switches to a new frame.
When animations are not used, no updates need to be sent (unless another placeholder changes value),
not causing extra CPU usage.
# #5 - [All platforms] Disable anti-override
By default, TAB prevents other plugins from overriding it.
This is because many server owners are not competent enough to configure their plugins correctly,
such as disabling CMI collision handling which breaks nametags or even disabling team handling in paper.
This obviously causes higher CPU usage.
TAB logs all override attempts of teams into [anti-override.log](https://github.com/NEZNAMY/TAB/wiki/Action-logging#anti-overridelog) file.
If you didn't get the file, it looks like you configured your plugins correctly.
In that case, you can disable anti-override for teams in TAB.
```
scoreboard-teams:
anti-override: false
```
Tablist formatting is trickier, as override attempts are not logged because it would have a lot of false positives.
You will need to try and see.
```
tablist-name-formatting:
anti-override: false
```
# #6 - [All platforms] Disable tablist name formatting
As we already know from [Client-sided mechanics](https://github.com/NEZNAMY/TAB/wiki/Client%E2%80%90sided-mechanics#nametag-format-in-tablist) page,
the nametag format appears in tablist if tablist name is not defined.
You can take advantage of this to effectively disable one entire feature and its cpu usage,
while not losing on anything.
However, you can only do this if:
* You are fine with nametag and tablist formats being identical, which also means all [nametag limitations](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Nametags#limitations) will transfer to tablist as well
* You don't have any plugin formatting the tablist names
Whether you have another plugin attempting to handle them or not may not be easy to identify with a lot of plugins and not enough time spent configuring them. In that case, your best choice is to try it and see. If tablist names break, it means you have another plugin and cannot take advantage of this optimization option.
# #7 - [All platforms] Increase permission refresh interval
Plugin needs to constantly check permissions for:
* Permission checks in conditions
* Permission checks if sorting by permissions
* Group retrieving from permission plugin (for sorting / per-group properties)
* Prefix/suffix placeholders taking data from your permission plugin
default value
```
permission-refresh-interval: 1000
```
Refreshes them every second.
If you don't need any permission/group changes to take effect within a second,
you can increase this value for better performance.
# #8 - [BungeeCord / Velocity] Disable TAB expansion
To maximize the performance of TAB's response to PlaceholderAPI request,
values are tracked in advance and then quickly returned.
This process takes resources and is especially heavy on proxy installation,
where values must be constantly sent to bridge using plugin messages.
Disabling TAB's PlaceholderAPI expansion if you don't use it improves performance.
**config.yml**:
```
placeholders:
register-tab-expansion: false
```
# #9 - [BungeeCord / Velocity] Disable update-latency option in global playerlist
When [Global playerlist](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Global-playerlist) is enabled, you can enable / disable [update-latency](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Global-playerlist#:~:text=other%20unlisted%20servers.-,update%2Dlatency,-false) option (open the link for detailed description of the option). Disabling this option massively improves performance.
# #10 - [BungeeCord] Disable ByteBuf deserialization
In order for anti-override to work properly, some packets must be manually deserialized due to BungeeCord not doing it. If you don't need it, you can disable those functions, which will also disable the deserialization completely. To do so, you must disable 2 functions (only having 1 disabled is not enough):
#1 - Anti-override for teams
```
scoreboard-teams:
anti-override: false
```
Whether you need anti-override or not depends on the configuration of your plugins.
The easiest way is to have it enabled and see if you get `anti-override.log` file in TAB folder.
If you don't, you don't need it.
If you do, you'll need to do some configuring.
[Here](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Sorting-players-in-tablist#additional-note-3---compatibility-issues-with-other-plugins)
are a few examples of software and their team names, which you may find helpful.
#2 - Scoreboard detection of other plugins
TAB checks for packets sent by other plugins, and if another plugin sends a scoreboard,
TAB hides its own and resends it after the other plugin removes it.
This check cannot be disabled if the scoreboard is enabled.
+241
View File
@@ -0,0 +1,241 @@
# Content
* [About](#about)
* [Internal placeholders](#internal-placeholders)
* [Universal](#universal)
* [Backend only](#backend-only)
* [BungeeCord only](#bungeecord-only)
* [PlaceholderAPI](#placeholderapi)
* [Relational placeholders](#relational-placeholders)
* [About](#about-1)
* [Usage](#usage)
* [Refreshing](#refreshing)
* [Refresh intervals](#refresh-intervals)
* [Sync refreshing](#sync-refreshing)
* [Placeholder is not working](#placeholder-is-not-working)
* [Internal placeholder is not working](#internal-placeholder-is-not-working)
* [PlaceholderAPI placeholder is not working](#placeholderapi-placeholder-is-not-working)
* [API](#api)
* [Server placeholders](#server-placeholders)
* [Player placeholders](#player-placeholders)
* [Relational placeholders](#relational-placeholders-1)
# About
TAB offers various placeholders to display the most common information. It also supports [PlaceholderAPI placeholders](https://github.com/PlaceholderAPI/PlaceholderAPI/wiki/Placeholders).
# Internal placeholders
Basic placeholders provided by the plugin. Most of these placeholders were added because they were requested by people who don't want to install another plugin just to show username. Some of them have configurable output in config.yml in `Placeholders` section. Unused placeholders do not affect performance in any way.
Placeholders must be refreshed.
All internal placeholders have a manually defined refresh interval,
which I found the most optimal and cannot be changed.
Time is in milliseconds.
It is used for placeholders which are in fact constants (such as %player%),
or fire an event each time they change, which can be listened to (such as %world%) and value updated.
Refresh interval for conditions is set to be equal to the fastest refreshing placeholder used inside each condition.
## Universal
These placeholders are available on all platforms.
| Identifier | Refresh interval | Description |
|---------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| %online% | 1000 | Total online player count on server where plugin is installed (excluding [vanished players](https://github.com/NEZNAMY/TAB/wiki/Additional-information#vanish-detection)). If the plugin is installed on a proxy, it will show total player count on the whole network. |
| %world% | -1 | Name of world where player is |
| %worldonline% | 1000 | Amount of players in the same world (excluding [vanished players](https://github.com/NEZNAMY/TAB/wiki/Additional-information#vanish-detection)) as the player |
| %ping% | 500 | Player's ping to the server where TAB is installed. <br />**Note**: This value is measured by the server and TAB is only retrieving that value. If it's wrong, it's not a TAB issue. |
| %player% | -1 | Player's name |
| %time% | 500 | Current real time, output is configurable in **config.yml** in `time-format` option |
| %date% | 60000 | Current date, output is configurable in **config.yml** in `date-format` option |
| %staffonline% | 2000 | Amount of online players with `tab.staff` permission |
| %nonstaffonline% | 2000 | Amount of online players without `tab.staff` permission |
| %memory-used% | 200 | Used RAM of server in MB |
| %memory-max% | -1 | Total RAM of server in MB |
| %memory-used-gb% | 200 | Used RAM of server in GB |
| %memory-max-gb% | -1 | Total RAM of server in GB |
| %player-version% | -1 | User-friendly version of player, such as `1.14.4`. For versions that share the same protocol version number, the higher one is returned (for example 1.20 & 1.20.1 -> 1.20.1 is returned) |
| %player-version-id% | -1 | Network ID of player's version. You can see the full version map on [fan wiki](https://wiki.vg/Protocol_version_numbers) for all versions or [TAB's source code](https://github.com/NEZNAMY/TAB/blob/master/shared/src/main/java/me/neznamy/tab/shared/ProtocolVersion.java) for releases only. Useful for conditions to create per-version results. |
| %luckperms-prefix% | 1000 | Prefix from LuckPerms from the server where TAB is installed |
| %luckperms-suffix% | 1000 | Suffix from LuckPerms from the server where TAB is installed |
| %displayname% | 500 | Display name variable set by permission plugin, typically prefix + name + suffix |
| %group% | 1000 | Returns player's primary group name. Created for internal functionality, but can be used as a display placeholder as well. |
| %vanished% | 1000 | Returns `true`/`false` based on player's vanish status. Created for internal functionality, but can be used as a display placeholder as well. |
| %bedrock% | -1 | Returns `true`/`false` based on whether player is using Bedrock edition or not (Java) |
| %% | -1 | Returns the `%` symbol. Useful to display `%` symbol without breaking all placeholders after it |
## Backend only
These placeholders only work when TAB is installed on a backend server (Bukkit / Sponge / Fabric), they don't work when TAB is on BungeeCord. If you have TAB installed on BungeeCord and wish to use these, use their [PlaceholderAPI](https://github.com/NEZNAMY/TAB/wiki/Quick-PlaceholderAPI-startup-guide) alternative with [Bridge plugin](https://github.com/NEZNAMY/TAB/wiki/TAB-Bridge) installed for PlaceholderAPI support on BungeeCord.
| Identifier | Refresh interval | Description | PlaceholderAPI alternative |
| ------------- | ------------- | ------------- | ------------- |
| %health% | 100 | Player's health, rounded up to match Minecraft's heart display. | %player_health_rounded% |
| %displayname% | 500 | Player's display name value set by permission plugin. | %player_displayname% |
| %tps% | 1000 | TPS of server from the last minute (measured by server, not available on Fabric as it doesn't measure the value) | %server_tps_1% |
| %mspt% | 1000 | Server's current milliseconds per tick (Paper / Sponge 8+ / Fabric only) | - |
## BungeeCord only
| Identifier | Refresh interval | Description |
|------------------------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| %server% | -1 | Name of server where player is, defined in proxy's config. |
| %serveronline% | 1000 | Amount of online players on server where the player is (excluding vanished players) |
| %online_\<server name\>% | 1000 | Amount of online players on specified server (excluding vanished players) |
| %playerlist-group_\<group\>% | 1000 | Amount of online players in specified [global playerlist](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Global-playerlist) group (therefore the feature must be enabled) |
# PlaceholderAPI
PlaceholderAPI is supported and relational placeholders are supported too.
When parsing relational placeholders,
TAB puts viewer as the first player argument and target player as the second argument.
You can find most of the placeholders
that PlaceholderAPI offers on [PlaceholderAPI wiki](https://github.com/PlaceholderAPI/PlaceholderAPI/wiki/Placeholders).
Some plugins are not listed there, for those you'll need to check their own wiki for placeholders.
TAB also offers its own placeholders into PlaceholderAPI. To enable TAB's expansion, set
```
placeholders:
register-tab-expansion: true
```
in **config.yml**.
Full list of placeholders:
| Identifier | Description |
| ------------- | ------------- |
| %tab_tabprefix% | Current tabprefix with replaced placeholders |
| %tab_tabsuffix% | Current tabsuffix with replaced placeholders |
| %tab_tagprefix% | Current tagprefix with replaced placeholders |
| %tab_tagsuffix% | Current tagsuffix with replaced placeholders |
| %tab_customtabname% | Current customtabname with replaced placeholders |
| %tab_tabprefix_raw% | Raw tabprefix containing raw placeholders |
| %tab_tabsuffix_raw% | Raw tabsuffix containing raw placeholders |
| %tab_tagprefix_raw% | Raw tagprefix containing raw placeholders |
| %tab_tagsuffix_raw% | Raw tagsuffix containing raw placeholders |
| %tab_customtabname_raw% | Raw customtabname containing raw placeholders |
| %tab_scoreboard_name% | Returns name of player's currently displayed scoreboard or empty string if none is displayed due to no display condition being met |
| %tab_scoreboard_visible% | "Enabled" if visible, "Disabled" if not |
| %tab_bossbar_visible% | "Enabled" if visible, "Disabled" if not |
| %tab_nametag_preview% | "Enabled" if previewing armor stands using /tab nametag preview, "Disabled" if not |
| %tab_nametag_visibility% | "Enabled" if player can see nametags, "Disabled" if disabled using /tab nametag toggle |
| %tab_replace_\<placeholder\>% | Applies [Placeholder output replacements](https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Placeholder-output-replacements) to a PlaceholderAPI placeholder (for example %tab_replace_essentials_vanished%) |
| %tab_placeholder_\<placeholder\>% | returns value of tab's internal placeholder (such as %tab_placeholder_animation:name% for %animation:name%) |
# Relational placeholders
## About
Unlike classic placeholders which take either 0
(placeholders with the same output for all players) or 1 (per-player placeholders) players,
relational placeholders take in 2 players.
The first usage was to display relation between two players, specifically enemies / allies (red / green) for factions,
allowing players to see faction names of other players colored based on relation.
While the usage is not limited to this, the name of the 2-player placeholder type has been established as "relational"
and will be called that everywhere.
## Usage
TAB does not offer any internal relational placeholders. However, it has full support for PlaceholderAPI placeholders. You can also register your own relational placeholders using the [API](#relational-placeholders-1). In PlaceholderAPI, all relational placeholder identifiers must start with `%rel_`. This rule is adopted and used in TAB as well (including those registered via API).
When passing players into the function, first player is the player viewing the text, second player is the one text is being displayed on.
Code wise, the PlaceholderAPI request function becomes
```
public String onPlaceholderRequest(Player viewer, Player target, String identifier)
```
where `viewer` is the player looking and `target` is the player the value is being displayed on.
When trying to use placeholders from other plugins, you will need to check their documentation and search for relational placeholders. If your plugin does not appear to offer any, you ran out of luck and TAB cannot do anything about it.
To properly distinguish viewer/target (if needed), your relational placeholder expansion must follow the same order as TAB does. Since PlaceholderAPI never created any convention regarding this, and instead it calls the players `one` and `two`, I had to decide and this is the decision.
# Refreshing
## Refresh intervals
TAB is refreshing placeholders in intervals. For internal placeholders it's using values I found the most optimal and set directly in the plugin. Refresh intervals for PlaceholderAPI placeholders can be [configured](https://github.com/NEZNAMY/TAB/wiki/Optimizing-the-plugin#2---placeholder-refresh-intervals).
## Sync refreshing
By default, all placeholders are refreshed asynchronously,
so they don't slow down the server, since reading should be a thread-safe operation.
Some placeholders, however, require to be refreshed in the main thread,
causing problems or throwing errors when refreshed asynchronously.
For these, replace them with `%sync:<original placeholder>%` and they will be refreshed in the main thread,
for example `%server_total_entities%` -> `%sync:server_total_entities%`.
Keep in mind that now you should configure a reasonable refresh interval for these placeholders to not cause TPS drops
(with async placeholders it doesn't really matter).
Configured refresh intervals and CPU usage of placeholders can be checked using `/tab cpu`.
# Placeholder is not working
When using a placeholder, you should know if it's a [TAB's internal placeholder](#internal-placeholders) or a [PlaceholderAPI placeholder](https://github.com/PlaceholderAPI/PlaceholderAPI/wiki/Placeholders). If you don't, that's the problem.
> [!CAUTION]
> Remember that using `%` symbol will mess up placeholder starts and ends, breaking all placeholders after it.
> To make the symbol display correctly without messing up placeholders, use `%%` to display the symbol.
> **Example:** `Sale 100% OFF! %some_placeholder%` -> `Sale 100%% OFF! %some_placeholder%`.
## Internal placeholder is not working
All TAB's internal placeholders are listed above.
Some of them are bukkit only (meaning they won't work on bungeecord) and some are bungee only.
> [!IMPORTANT]
> Trying to use a bukkit-only placeholder on bungeecord will not work.
> If you want to use those,
> [set up PlaceholderAPI support on bungeecord](https://github.com/NEZNAMY/TAB/wiki/TAB-Bridge)
> and find their PlaceholderAPI equivalent.
> For example, you can use %vault_prefix% instead of %vault-prefix%,
> %player_health_rounded% instead of %health% and so on.
## PlaceholderAPI placeholder is not working
If you have TAB installed on bungeecord, make sure you [set up PlaceholderAPI support on bungeecord](https://github.com/NEZNAMY/TAB/wiki/TAB-Bridge) as there is no other way to retrieve data from technically a different server.
> [!TIP]
> Use `/papi parse me <placeholder>` to check if the placeholder is working.
> If it does not work, the issue is not on TAB's end.
# API
*To get started with the API, see [Developer API](https://github.com/NEZNAMY/TAB/wiki/Developer-API) page.*
For working with placeholders, you will need the `PlaceholderManager`. Get it using `TabAPI.getInstance().getPlaceholderManager()`.
Placeholders have two attributes:
* An identifier, which is used to uniquely identify the placeholder. This is also what's usually used for replacement. For example, in `%uptime%`, the identifier is `%uptime%`.
* A refresh rate in milliseconds, which is how often the placeholder's refresh function will be called, to get a new value to display. Use `-1` to make the placeholder never refresh periodically. This can be used for either constants or placeholders that update on events, and you wish to update their value manually using functions in the respective placeholder interface.
## Server placeholders
Server placeholders are global to the entire plugin. Their values are not dependent on player.
Examples of server placeholders would be uptime and TPS placeholders.
To register a new server placeholder, use `PlaceholderManager#registerServerPlaceholder(String, int, Supplier<Object>)`. The first two parameters are explained above, and the last parameter is a function that will be called to refresh the value of the placeholder.
<details>
<summary>Example</summary>
```
TabAPI.getInstance().getPlaceholderManager().registerServerPlaceholder("%system-time%", 50, () -> System.currentTimeMillis());
```
This placeholder will show current system time and update every 50 milliseconds.
</details>
## Player placeholders
Player placeholders are calculated on a per-player basis. These depend on the player that we want to get the value for.
Examples of player placeholders would be username and prefix.
To register a new player placeholder, use `PlaceholderManager#registerPlayerPlaceholder(String, int, Function<TabPlayer, Object>)`. The first two parameters are explained above, and the last parameter is a function that will be called to refresh the value of the placeholder.
<details>
<summary>Example</summary>
```
TabAPI.getInstance().getPlaceholderManager().registerPlayerPlaceholder("%player-uuid%", -1, player -> player.getUniqueId());
```
This placeholder will show player's UUID and never refreshes, since UUID doesn't change at runtime.
</details>
## Relational placeholders
Relational placeholders are calculated using a pair of players, instead of a single one. These depend on the player pair that we want to get the value for. Their identifier must start with `rel_`.
To register a new relational placeholder, use `PlaceholderManager#registerRelationalPlaceholder(String, int, BiFunction<TabPlayer, TabPlayer, Object>)`. The first two parameters are explained above, and the last parameter is a function that will be called to refresh the value of the placeholder.
<details>
<summary>Example</summary>
```
TabAPI.getInstance().getPlaceholderManager().registerRelationalPlaceholder("%rel_staff_version%", 1000, (viewer, target) -> {
if (viewer.hasPermission("tab.staff")) {
return target.getVersion().getFriendlyName();
} else {
return "";
}
});
```
This placeholder will show the version of players, but only to those, who have `tab.staff` permission.
The first player in the method is viewer, the second player is target.
The same order is applied when hooking into PlaceholderAPI as well.
</details>
@@ -0,0 +1,29 @@
# About
This is a quick guide for [PlaceholderAPI](https://www.spigotmc.org/resources/placeholderapi.6245/) plugin, which is often referred to on the wiki, and we also get many assistance requests with TAB which turn out to be asking for help with PlaceholderAPI. Whether its documentation is not clear enough, missing information or users just don't read it isn't the topic here to judge, instead, a quick guide with everything needed is provided.
# Installation
PlaceholderAPI is a standalone bukkit plugin that can be installed just like any other plugin.
It does not support BungeeCord.
If you have TAB on BungeeCord and wish to use PlaceholderAPI placeholders,
you'll need to install [Bridge](https://www.spigotmc.org/resources/83966) plugin on backend servers.
Alongside other features, it forwards PlaceholderAPI support to the proxy.
# Expansions
To effectively scale and allow the level of modification it does,
PlaceholderAPI is using placeholder packages called expansions.
They are loaded into the plugin on startup.
Each expansion can be created and modified independently of the main plugin's update frequency.
Each expansion has a name, which is used to identify its placeholders.
The syntax is `%<expansion>_<placeholder>%`, where `<expansion>` is name of the expansion,
for example `player` and `<placeholder>` is placeholder of the expansion, for example `health`,
which returns player's health.
The full placeholder syntax will then be `%player_health%`.
Some plugins offer their own expansions,
which are either integrated into the plugin itself or external on PlaceholderAPI cloud.
Integrated expansions are not downloaded; instead, plugins register them automatically.
You can download / update external expansions using `/papi ecloud download <expansion>`. After downloading it, run `/papi reload` to enable it.
# Checking if placeholder is working
To check if a placeholder is working, run `/papi parse <player> <placeholder>`. You can also use `me` as player, which parses placeholder for the player who ran the command. If the command outputs the identifier you entered and not the actual output, it means you either entered and invalid placeholder or you are missing an expansion (or you have an outdated version of the expansion), see above.
+33
View File
@@ -0,0 +1,33 @@
# About
When TAB is installed on BungeeCord, the plugin has very limited access to information. It is unable to retrieve internal server data, as well as hook into backend plugins, because it's a different server.
Bridge is a backend plugin that sends this data to the proxy, allowing TAB to work better when installed on BungeeCord.
You can download it from [GitHub](https://github.com/NEZNAMY/TAB-Bridge/releases) or [Spigot](https://www.spigotmc.org/resources/83966).
# Installation
Installation is as simple as it can be.
Put it into the plugins folder of your backend servers.
Bridge is NOT a BungeeCord plugin!
Bridge itself has no config file, as everything is configured in the main plugin.
# Features
* Forwarding PlaceholderAPI support to the proxy
* Allow detection if player is invisible to make their nametag invisible (compensation for 1.8.x client sided bug)
* Allow detection if a player is disguised to disable collision to prevent endless push
* Forwarding permission groups of players if no permission plugin is installed on BungeeCord
* Forwarding vanish status for compatibility with global playerlist / layout features
* Forward player's world for %world% and per-world settings
* Allow TAB's PlaceholderAPI expansion with TAB on BungeeCord
* Forward player's gamemode for spectator fix feature to work
# Compatibility
Just like with Minecraft, when there is a change in the communication protocol,
older software will not be compatible with the new one.
You should always be running the latest versions of both TAB and Bridge.
# Confirming it works
You have many ways to verify TAB and Bridge are properly connected. Besides checking if the features above work, the easiest one is to run `/btab debug <player>`.
If it's properly connected, you'll get a message saying this:
![image](https://github.com/NEZNAMY/TAB/assets/6338394/3f8dd978-a8bd-4613-9ea1-a56340194859)
If it's not properly connected, you'll get this message:
![image](https://github.com/NEZNAMY/TAB/assets/6338394/a90018bc-2c3b-4bf5-b54c-56621178ce80)
If this is the case, it means Bridge is either not installed or versions are not compatible. Update both to the latest version.
+147
View File
@@ -0,0 +1,147 @@
# ---------------------------------------
# THIS PAGE IS A WORK IN PROGRESS
# ---------------------------------------
# About
This page compares TAB to other plugins offering similar features based on various parameters.
### Open issues
Number of open issues on GitHub. Keep in mind this number shouldn't be taken 100% seriously, because:
* People often open issues to ask for help instead of reporting an issue.
* If nobody is using a plugin, nobody can find bugs. Bug not found doesn't mean it's not there.
* Some issues may be feature requests, which may not be present elsewhere as those are not accepted.
### Price
The price to get the jar. Most plugins are free, some are paid.
### Minecraft
Supported Minecraft versions by the plugin.
### Platforms
Supported platforms by the plugin. Full tracked list includes:
* Bukkit ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577)
* Sponge ![image](https://github.com/NEZNAMY/TAB/assets/6338394/f3cc3194-6dfc-4b15-8d46-52144a4a0352)
* Fabric ![image](https://github.com/NEZNAMY/TAB/assets/6338394/ffbf8384-fff5-4a32-8fc5-0768246e91c1)
* Forge ![image](https://github.com/NEZNAMY/TAB/assets/6338394/268c1571-0087-466b-b502-ec16017ac1d6)
* BungeeCord ![image](https://github.com/NEZNAMY/TAB/assets/6338394/99ae3191-7b35-4883-91a9-4edbb1e88ac9)
* Velocity ![image](https://github.com/NEZNAMY/TAB/assets/6338394/53ad76a7-f61c-4b4f-8411-32ad5c473c4d)
### Async
Whether the plugin runs in server's main thread (sync) or in a different thread (async). If a plugin is running sync, it may slow down the server's TPS. All of these features can be done async.
# Belowname
| Attribute | [TAB](https://github.com/NEZNAMY/TAB) |
|-----------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Open issues** | ![Issues](https://img.shields.io/github/issues/NEZNAMY/TAB) |
| **Price** | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) |
| **Minecraft** | 1.5+ |
| **Platforms** | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/f3cc3194-6dfc-4b15-8d46-52144a4a0352) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/ffbf8384-fff5-4a32-8fc5-0768246e91c1) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/99ae3191-7b35-4883-91a9-4edbb1e88ac9) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/53ad76a7-f61c-4b4f-8411-32ad5c473c4d) |
| **Async** | ✔ |
| PlaceholderAPI support | ✔ |
| Configurable number | ✔ |
| Configurable text | ✔ |
| 1.20.3+ NumberFormat support | ✔ |
| Conditionally disable the feature | If any specified condition is met |
# Bossbar
| Attribute | [TAB](https://github.com/NEZNAMY/TAB) | [UltraBar](https://github.com/ryandw11/UltraBar) | [AnimaBossBar](https://www.spigotmc.org/resources/bossbar-spigot-free-bossbar-plugin-1-9-1-18-1.59135/) |
|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| **Open issues** | ![Issues](https://img.shields.io/github/issues/NEZNAMY/TAB) | ![Issues](https://img.shields.io/github/issues/ryandw11/UltraBar) | - |
| **Price** | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) |
| **Minecraft** | 1.5+ | 1.12+ | 1.9 - 1.18.1 |
| **Platforms** | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/f3cc3194-6dfc-4b15-8d46-52144a4a0352) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/ffbf8384-fff5-4a32-8fc5-0768246e91c1) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/99ae3191-7b35-4883-91a9-4edbb1e88ac9) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/53ad76a7-f61c-4b4f-8411-32ad5c473c4d) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) |
| **Async** | ✔ | ❌ | ❌ |
| Announcements | ✔ (defined in config) | ✔ (defined at runtime) | ✔ (defined at runtime) |
| Toggle command | ✔ (customizable) | ❌ | ❌ |
| Display condition | Anything that has a placeholder | On join / death / command / in worldguard region | ❌ |
# Global Playerlist
| Attribute | [TAB](https://github.com/NEZNAMY/TAB) | [BungeeTabListPlus](https://github.com/CodeCrafter47/BungeeTabListPlus) | [Velocitab](https://github.com/WiIIiam278/Velocitab) |
|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|
| **Open issues** | ![Issues](https://img.shields.io/github/issues/NEZNAMY/TAB) | ![Issues](https://img.shields.io/github/issues/CodeCrafter47/BungeeTabListPlus) | ![Issues](https://img.shields.io/github/issues/WiIIiam278/Velocitab) |
| **Price** | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) |
| **Platforms** | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/99ae3191-7b35-4883-91a9-4edbb1e88ac9) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/53ad76a7-f61c-4b4f-8411-32ad5c473c4d) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/99ae3191-7b35-4883-91a9-4edbb1e88ac9) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/53ad76a7-f61c-4b4f-8411-32ad5c473c4d) |
# Header/Footer
| Attribute | [TAB](https://github.com/NEZNAMY/TAB) | [TabList](https://github.com/montlikadani/TabList) |
|-----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Open issues** | ![Issues](https://img.shields.io/github/issues/NEZNAMY/TAB) | ![Issues](https://img.shields.io/github/issues/montlikadani/TabList) |
| **Price** | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) |
| **Platforms** | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/f3cc3194-6dfc-4b15-8d46-52144a4a0352) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/ffbf8384-fff5-4a32-8fc5-0768246e91c1) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/99ae3191-7b35-4883-91a9-4edbb1e88ac9) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/53ad76a7-f61c-4b4f-8411-32ad5c473c4d) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/f3cc3194-6dfc-4b15-8d46-52144a4a0352) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/99ae3191-7b35-4883-91a9-4edbb1e88ac9) |
# Layout
| Attribute | [TAB](https://github.com/NEZNAMY/TAB) | [BungeeTabListPlus](https://github.com/CodeCrafter47/BungeeTabListPlus) |
|-----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Open issues** | ![Issues](https://img.shields.io/github/issues/NEZNAMY/TAB) | ![Issues](https://img.shields.io/github/issues/CodeCrafter47/BungeeTabListPlus) |
| **Price** | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) |
| **Platforms** | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/f3cc3194-6dfc-4b15-8d46-52144a4a0352) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/ffbf8384-fff5-4a32-8fc5-0768246e91c1) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/99ae3191-7b35-4883-91a9-4edbb1e88ac9) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/53ad76a7-f61c-4b4f-8411-32ad5c473c4d) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/99ae3191-7b35-4883-91a9-4edbb1e88ac9) |
# Nametags
| Attribute | [TAB](https://github.com/NEZNAMY/TAB) | [NametagEdit](https://github.com/sgtcaze/NametagEdit) |
|-----------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|
| **Open issues** | ![Issues](https://img.shields.io/github/issues/NEZNAMY/TAB) | ![Issues](https://img.shields.io/github/issues/sgtcaze/NametagEdit) |
| **Price** | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) |
| **Minecraft** | 1.5+ | 1.7+ |
| **Platforms** | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/f3cc3194-6dfc-4b15-8d46-52144a4a0352) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/ffbf8384-fff5-4a32-8fc5-0768246e91c1) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/99ae3191-7b35-4883-91a9-4edbb1e88ac9) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/53ad76a7-f61c-4b4f-8411-32ad5c473c4d) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) |
| **Async** | ✔ | ❌ |
| Customization | Per-group<br />Per-player<br />Per-world<br />Per-server | Per-group<br />Per-player |
| PlaceholderAPI support | ✔ | ✔ |
| Configurable collision | ✔ | ✔ |
| Configurable nametag visibility | ✔ | ❌ |
| Conditionally disable the feature | If any specified condition is met | ❌ |
| Bonus | - Option to use armor stands to bypass<br />   all limits and support multiple lines<br />- Anti-override to avoid random plugins breaking it | - |
# Per world playerlist
# Playerlist objective
| Attribute | [TAB](https://github.com/NEZNAMY/TAB) | [TabList](https://github.com/montlikadani/TabList) |
|-----------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Open issues** | ![Issues](https://img.shields.io/github/issues/NEZNAMY/TAB) | ![Issues](https://img.shields.io/github/issues/montlikadani/TabList) |
| **Price** | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) |
| **Platforms** | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/f3cc3194-6dfc-4b15-8d46-52144a4a0352) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/ffbf8384-fff5-4a32-8fc5-0768246e91c1) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/99ae3191-7b35-4883-91a9-4edbb1e88ac9) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/53ad76a7-f61c-4b4f-8411-32ad5c473c4d) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/f3cc3194-6dfc-4b15-8d46-52144a4a0352) |
| Display any number | ✔ | ✔ |
| Supports hearts display type | ✔ | ✔ |
| 1.20.3+ NumberFormat support | ✔ | ❌ |
| Conditionally disable the feature | When any specified condition is met | Disable in worlds |
# Scoreboard
| Attribute | [TAB](https://github.com/NEZNAMY/TAB) | [RealScoreboard](https://github.com/joserodpt/RealScoreboard) | [AnimatedScoreboard](https://www.spigotmc.org/resources/20848/) | [SternalBoard](https://github.com/ShieldCommunity/SternalBoard) | [KiteBoard](https://github.com/Niall7459/KiteBoard-Documentation) |
|---------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Open issues** | ![Issues](https://img.shields.io/github/issues/NEZNAMY/TAB) | ![Issues](https://img.shields.io/github/issues/joserodpt/RealScoreboard) | - | ![Issues](https://img.shields.io/github/issues/ShieldCommunity/SternalBoard) | ![Issues](https://img.shields.io/github/issues/Niall7459/KiteBoard-Documentation) |
| **Price** | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/1286a130-6173-4414-b5c6-43d79d75794d) |
| **Minecraft** | 1.5+ | 1.13+ | 1.8+ | 1.7+ | 1.8 - 1.20.1 |
| **Platforms** | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/f3cc3194-6dfc-4b15-8d46-52144a4a0352) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/ffbf8384-fff5-4a32-8fc5-0768246e91c1) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/99ae3191-7b35-4883-91a9-4edbb1e88ac9) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/53ad76a7-f61c-4b4f-8411-32ad5c473c4d) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) |
| **Async** | ✔ | ✔ | ✔ | ✔ | ✔ |
| Customizable toggle command | ✔ | ❌ | ❌ | ❌ | ❌ |
| 1.20.3+ NumberFormat support | ✔ | ❌ | ❌ | ❌ | ❌ |
| Max line length limit (<1.13 / 1.13+) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/b770a19b-9f1a-44c1-8164-394c788998b8) / ![image](https://github.com/NEZNAMY/TAB/assets/6338394/3c7c3e31-31e6-4bce-9453-b74b0cadd942) | - / ![image](https://github.com/NEZNAMY/TAB/assets/6338394/3c7c3e31-31e6-4bce-9453-b74b0cadd942) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/98d0f411-5b2c-4ab2-a167-8189d5c32a02) / ![image](https://github.com/NEZNAMY/TAB/assets/6338394/3c7c3e31-31e6-4bce-9453-b74b0cadd942) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/98d0f411-5b2c-4ab2-a167-8189d5c32a02) / ![image](https://github.com/NEZNAMY/TAB/assets/6338394/3c7c3e31-31e6-4bce-9453-b74b0cadd942) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/98d0f411-5b2c-4ab2-a167-8189d5c32a02) / ![image](https://github.com/NEZNAMY/TAB/assets/6338394/3c7c3e31-31e6-4bce-9453-b74b0cadd942) |
| Attribute | [FeatherBoard](https://www.spigotmc.org/resources/featherboard.2691/) | [UltraScoreboards](https://www.spigotmc.org/resources/ultra-scoreboards.93726/) | [QuickBoard](https://github.com/tadeas-drab/QuickBoard) | [SimpleScore](https://github.com/r4g3baby/SimpleScore) | [InfiniteScoreboard](https://www.spigotmc.org/resources/infinite-scoreboard.87425/) |
|---------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Open issues** | - | - | ![Issues](https://img.shields.io/github/issues/tadeas-drab/QuickBoard) | ![Issues](https://img.shields.io/github/issues/r4g3baby/SimpleScore) | - |
| **Price** | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/dd25c457-6b4e-4771-a366-3c5ec154f007) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/f2a536e5-4a56-4b5c-9e3d-a86d8761876e) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) |
| **Minecraft** | 1.7+ | 1.8+ | 1.8 - 1.16.1 | 1.8+ | 1.8 - 1.19 |
| **Platforms** | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/99ae3191-7b35-4883-91a9-4edbb1e88ac9) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) |
| **Async** | ✔ | ❌ | ❌ | ❌ | ✔ |
| Customizable toggle command | ❌ | ❌ | ❌ | ❌ | ❌ |
| 1.20.3+ NumberFormat support | ❌ | ❌ | ❌ | ❌ | ❌ |
| Max line length limit (<1.13 / 1.13+) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/09e5314f-ac46-40ec-b8c8-3ba54a5bf8fc)-![image](https://github.com/NEZNAMY/TAB/assets/6338394/b770a19b-9f1a-44c1-8164-394c788998b8) / ![image](https://github.com/NEZNAMY/TAB/assets/6338394/3c7c3e31-31e6-4bce-9453-b74b0cadd942) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/ed5c6f89-d700-41a2-b4dd-49ebc846d8c7) / ![image](https://github.com/NEZNAMY/TAB/assets/6338394/3c7c3e31-31e6-4bce-9453-b74b0cadd942) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/98d0f411-5b2c-4ab2-a167-8189d5c32a02) / ![image](https://github.com/NEZNAMY/TAB/assets/6338394/5db3ba81-3956-4b84-950f-6132d5a10c71) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/98d0f411-5b2c-4ab2-a167-8189d5c32a02) / ![image](https://github.com/NEZNAMY/TAB/assets/6338394/5db3ba81-3956-4b84-950f-6132d5a10c71) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/09e5314f-ac46-40ec-b8c8-3ba54a5bf8fc) / ![image](https://github.com/NEZNAMY/TAB/assets/6338394/5db3ba81-3956-4b84-950f-6132d5a10c71) |
# Sorting
| Attribute | [TAB](https://github.com/NEZNAMY/TAB) | [NametagEdit](https://github.com/sgtcaze/NametagEdit) | [TabList](https://github.com/montlikadani/TabList) | [Velocitab](https://github.com/WiIIiam278/Velocitab) |
|-----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|
| **Open issues** | ![Issues](https://img.shields.io/github/issues/NEZNAMY/TAB) | ![Issues](https://img.shields.io/github/issues/sgtcaze/NametagEdit) | ![Issues](https://img.shields.io/github/issues/montlikadani/TabList) | ![Issues](https://img.shields.io/github/issues/WiIIiam278/Velocitab) |
| **Price** | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) |
| **Minecraft** | 1.8+ | 1.8+ | 1.8+ | 1.8+ |
| **Platforms** | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/f3cc3194-6dfc-4b15-8d46-52144a4a0352) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/ffbf8384-fff5-4a32-8fc5-0768246e91c1) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/99ae3191-7b35-4883-91a9-4edbb1e88ac9) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/53ad76a7-f61c-4b4f-8411-32ad5c473c4d) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/f3cc3194-6dfc-4b15-8d46-52144a4a0352) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/53ad76a7-f61c-4b4f-8411-32ad5c473c4d) |
| **Async** | ✔ | ❌ | ✔ | ✔ |
| Sorting options | Groups<br />Permissions<br />Placeholder alphabetically<br />Placeholder numerically<br />Pre-defined placeholder values | Groups | Groups | Placeholder alphabetically<br />Placeholder numerically |
# Tablist name formatting
| Attribute | [TAB](https://github.com/NEZNAMY/TAB) | [TabList](https://github.com/montlikadani/TabList) | [BungeeTabListPlus](https://github.com/CodeCrafter47/BungeeTabListPlus) | [SimpleTabList](https://github.com/TheYIMIR/SimpleTabList) | [Velocitab](https://github.com/WiIIiam278/Velocitab) |
|-----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|
| **Open issues** | ![Issues](https://img.shields.io/github/issues/NEZNAMY/TAB) | ![Issues](https://img.shields.io/github/issues/montlikadani/TabList) | ![Issues](https://img.shields.io/github/issues/CodeCrafter47/BungeeTabListPlus) | ![Issues](https://img.shields.io/github/issues/TheYIMIR/SimpleTabList) | ![Issues](https://img.shields.io/github/issues/WiIIiam278/Velocitab) |
| **Price** | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/9bfa85bd-771c-4d78-ab15-be76665bd84a) |
| **Minecraft** | 1.8+ | 1.8+ | 1.8+ | 1.16+ | 1.8+ |
| **Platforms** | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/f3cc3194-6dfc-4b15-8d46-52144a4a0352) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/ffbf8384-fff5-4a32-8fc5-0768246e91c1) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/99ae3191-7b35-4883-91a9-4edbb1e88ac9) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/53ad76a7-f61c-4b4f-8411-32ad5c473c4d) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/f3cc3194-6dfc-4b15-8d46-52144a4a0352) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/99ae3191-7b35-4883-91a9-4edbb1e88ac9) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) ![image](https://github.com/NEZNAMY/TAB/assets/6338394/99ae3191-7b35-4883-91a9-4edbb1e88ac9) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/e39f160b-f2f4-4ccc-84ad-583092741577) | ![image](https://github.com/NEZNAMY/TAB/assets/6338394/53ad76a7-f61c-4b4f-8411-32ad5c473c4d) |
| **Async** | ✔ | ✔ | ✔ | ❌ | ✔ |
+48
View File
@@ -0,0 +1,48 @@
## Easy to install
Support for all possible Minecraft versions containing features the plugin is able to take advantage of.
Support for multiple platforms (Bukkit, BungeeCord, Velocity, Fabric, Sponge),
with everything contained in a single jar which you can download directly.
No need to browse version history, ask what plugin version you need for your server version,
visit random websites looking for the download button, or anything similar.
The same jar supports all versions & platforms, and the latest plugin version will always work for you.
## It works
The plugin doesn't spam your console with errors, doesn't have compatibility issues with half of the plugins,
and doesn't just decide to randomly stop working for no reason.
It just works.
Bug reports are fixed with the highest priority and preferred over adding new features.
It's not unusual for a plugin of this size to have a 3-digit open issue count on GitHub.
Meanwhile, TAB is always at 1-digit count.
## Feature packed
All the most requested features in a single plugin.
No need to install many plugins, disable features, so they don't conflict with each other,
or be forced to run your server on a version that all the plugins support in common.
All features, all server versions in a single plugin.
## Beyond the limits
Mojang decided to put some kind of limitation on almost every feature TAB offers. Other developers simply say "Mojang limit, nothing we can do about it, goodbye". This is not the case here. With every limitation I find, I look for ways to bypass it, and I've found most of them. These bypasses require a ton of work involved, and it's much easier to say "not possible" than actually doing it.
## Up to date
The plugin is not abandoned.
It is constantly getting updated to fix reported bugs,
add support for new MC versions as they come out and get new optimizations.
All that can help it run as smoothly as possible, whilst still working the way you want it to.
## High performance
Unlike with other plugins where "high performance"
often means your CPU usage will be high, TAB has a very low CPU footprint.
There is a [command](https://github.com/NEZNAMY/TAB/wiki/Commands-&-Permissions#tab-cpu) available
that shows the entire plugin's CPU usage.
Here you can see which part of TAB is occupying the most of your CPU.
There are [many ways to optimize TAB](https://github.com/NEZNAMY/TAB/wiki/Optimizing-the-plugin)
to get the most out of it,
the most common being increasing refresh rates for individual placeholders if they're inefficient.
This is done on a per-placeholder basis,
instead of slowing down the refresh rate of an entire feature, which may break animations.
Performance is also actively monitored on large servers, and observations show that it performs very well,
meaning it will almost certainly perform even better on smaller servers.
## Simple yet powerful configuration
Compared to other plugins, each feature is easier to configure and actually offers more.
Want a simple result with simple configuration? No problem. Want a complicated result? No problem.
+41
View File
@@ -0,0 +1,41 @@
name: Build
on:
push:
branches:
- master
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4 # https://github.com/actions/checkout/releases
with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
- name: Set up JDK 21
uses: actions/setup-java@v4 # https://github.com/actions/setup-java/releases
with:
distribution: 'temurin'
java-version: 21
- name: Cache Gradle
uses: actions/cache@v4.2.0 # https://github.com/actions/cache/releases
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Build and analyze
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
run: ./gradlew clean build
- name: Rename JAR with Build Number
run: |
original_jar=$(find jar/build/libs -type f -name "TAB-*.jar")
new_name=$(echo "$original_jar" | sed "s/TAB-\(.*\)\.jar/TAB-\1+${{ github.run_number }}.jar/")
mv "$original_jar" "$new_name"
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4.3.3 # https://github.com/actions/upload-artifact/releases
with:
name: Click here to download
path: jar/build/libs/TAB-*+${{ github.run_number }}.jar
+6 -1
View File
@@ -33,5 +33,10 @@ hs_err_pid*
.idea/
# other
.gitattributes
*.iml
run/
# Gradle
.gradle/
build/
!gradle/wrapper/gradle-wrapper.jar
+9
View File
@@ -0,0 +1,9 @@
If this plugin has helped you in any way, and you would like to return something back
to make the plugin even better, there is a lot of ways to contribute:
* Open a **pull request** containing a new feature or a bug fix, which you believe many users will benefit from.
* Make detailed high-quality **bug reports**. The difference between a bug getting fixed in 1 week vs 1 hour
is in quality of the report (typically providing correct steps to reproduce that actually work).
* Test **experimental builds**, which can be found in [GitHub Actions](https://github.com/NEZNAMY/TAB/actions) for problems of any kind including bugs.
This way you will help make the actual releases more stable / help get stable releases sooner.
* Help improve the wiki by opening a [Wiki change issue](https://github.com/NEZNAMY/TAB/issues/new?assignees=&labels=Wiki&template=wiki_change.yml),
where you can improve existing descriptions, add information you found missing, fix typos / grammar mistakes or add more examples.
+1 -28
View File
@@ -1,4 +1,4 @@
Apache License
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
@@ -172,30 +172,3 @@ Apache License
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+54 -45
View File
@@ -1,46 +1,55 @@
## Introduction
Here it is. After countless requests to go opensource, I did it to make those people quiet. It worked.
It's already been a year and I still can't see any positives of it. This way I just made it easier for everyone to make a plugin as good, so people can stop using it and switch to something better. Or just get premium version for free.
## Compiling
Plugin can be compiled using maven. Once you've purchased the premium version, you can enable premium features by setting [this line to return true](https://github.com/NEZNAMY/TAB/blob/master/shared/src/main/java/me/neznamy/tab/shared/TAB.java#L78) and apply your code improvements. Enabling it without purchasing the plugin may result in the features not working correctly.
**No support is provided for self-compiled jars, only for official compilations.** If you compiled it yourself, it is highly likely you modified something, which might be the reason why is the plugin not working. If you didn't modify anything, you can just get the plugin from official download places.
## Links
Free version
    Spigot (releases): https://www.spigotmc.org/resources/57806/
    Pre-releases https://github.com/NEZNAMY/TAB/releases
Premium version
    Polymart (releases): https://polymart.org/resource/484
    MC-Market (releases): https://www.mc-market.org/resources/14009/
    Pre-releases on discord for verified buyers
Bukkit bridge https://www.spigotmc.org/resources/83966/
Wiki https://github.com/NEZNAMY/TAB/wiki
Discord invite link: https://discord.gg/EaSvdk6
## Downloads
Official release: https://www.spigotmc.org/resources/57806/
Pre-releases: https://github.com/NEZNAMY/TAB/releases
## Maven Repository
```
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
# About
TAB aims to be a superior all-in-one minecraft plugin for displaying information that outperforms all
similar plugins in terms of features, performance and compatibility.
More information can be found at [Why TAB?](https://github.com/NEZNAMY/TAB/wiki/Why-TAB%3F) wiki page.
<dependencies>
<!-- TAB -->
<dependency>
<groupId>com.github.NEZNAMY</groupId>
<artifactId>TAB-API</artifactId>
<version>2.8.10</version>
</dependency>
</dependencies>
```
# Download
### Releases
You can download full releases from [GitHub releases](https://github.com/NEZNAMY/TAB/releases),
[SpigotMC](https://www.spigotmc.org/resources/57806/), [Modrinth](https://modrinth.com/plugin/tab-was-taken) or [BuiltByBit](https://builtbybit.com/resources/20631).
### Dev builds
Plugin's development is continuous and contains lots of small changes/fixes not worthy of being called a full
update, therefore development builds are being created and eventually a full update is released when enough changes are made.
If you want to benefit from a recent change in the code before official release, you can download development builds
from [GitHub actions](https://github.com/NEZNAMY/TAB/actions) (you must be logged into GitHub to be able to download it).
# Compiling
Compilation requires JDK 21 and up.
To compile the plugin, run `./gradlew build` from the terminal.
Once the plugin compiles, grab the jar from `/jar/build/libs/` folder.
The universal jar contains all modules for all supported platforms.
# Documentation
You can find everything about the plugin on the [Wiki](https://github.com/NEZNAMY/TAB/wiki). This includes a detailed description
of all features, as well as information regarding compatibility or limitations of each feature.
# Issues
The [Issues](https://github.com/NEZNAMY/TAB/issues) section is an issue tracker for all the kind of problems covered in issue templates.
Please refrain from attempting to use it to receive help with your server, such issues will be closed immediately.
When opening an issue, provide as much information as possible. The difference between a bug getting fixed in 1 week vs 1 hour
is in quality of the report. Bug reports where steps to reproduce are "idk" have no value and will not help to get the bug fixed at all.
# Contributing
See [CONTRIBUTING.md](https://github.com/NEZNAMY/TAB/blob/master/CONTRIBUTING.md)
# Provided services
The plugin is being used by a large amount of servers, which also means the demand for my attention is high. Unfortunately,
I am no longer able to keep up with the demand since I don't want to dedicate my whole existence to a free plugin.
In order to provide the best quality of all provided services, the amount of services provided may vary over time.
Here is the full list of potential services and their status:
| Service type | Availability |
|-------------------------------|--------------|
| Updates for new MC versions | ✔ |
| Bug fixes | ✔ |
| Wiki improvements | ✔ |
| Performance optimizations | ✔ |
| Feature requests | ❌ |
| Customer support<sup>1</sup> | ✔ |
| Free user support<sup>2</sup> | ❌* |
<sup>1</sup> - Unrestricted assistance with the plugin for those, who bought a copy of the plugin when it was purchasable.
<sup>2</sup> - Unlimited access to my free time for everyone in the world.
*Instead, you can use [this fresh new community discord](https://discord.gg/YPqXt63YQj) made by a nice person who will provide this service.
+2
View File
@@ -0,0 +1,2 @@
# Security Policy
If you found a security issue, send me a private message anywhere.
+7
View File
@@ -0,0 +1,7 @@
dependencies {
compileOnlyApi("org.jetbrains:annotations:24.1.0")
}
tasks.javadoc {
enabled = project.hasProperty("enable-javadoc")
}
@@ -0,0 +1,135 @@
package me.neznamy.tab.api;
import java.util.UUID;
import lombok.NonNull;
import lombok.Setter;
import me.neznamy.tab.api.bossbar.BossBarManager;
import me.neznamy.tab.api.event.EventBus;
import me.neznamy.tab.api.placeholder.PlaceholderManager;
import me.neznamy.tab.api.scoreboard.ScoreboardManager;
import me.neznamy.tab.api.tablist.SortingManager;
import me.neznamy.tab.api.tablist.HeaderFooterManager;
import me.neznamy.tab.api.tablist.TabListFormatManager;
import me.neznamy.tab.api.nametag.NameTagManager;
import me.neznamy.tab.api.tablist.layout.LayoutManager;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* The primary API class to get instances of other API classes
*/
public abstract class TabAPI {
/** Instance of the API */
@Setter private static TabAPI instance;
/**
* Returns API instance. If instance was not set by the plugin, throws
* {@code IllegalStateException}. This is usually caused by shading the API
* into own project, which is not allowed. Another option is calling the method
* before plugin was able to load.
*
* @return API instance
* @throws IllegalStateException
* If instance is {@code null}
*/
public static @NotNull TabAPI getInstance() {
if (instance == null) throw new IllegalStateException("The API instance is null. This can have 2 possible causes: \n" +
"#1 - API was called before TAB was loaded. This means your plugin was loaded before TAB was. To make sure your " +
"plugin loads after TAB, add it as a depend or soft depend of your plugin.\n" +
"#2 - You shaded TAB's classes into your plugin, instead of only using them. This is not allowed. To verify this " +
"is your case, unzip your plugin and check for TAB's classes. If they are there, you will need to fix your compiler " +
"to not include them, such as scope provided for maven compilation.");
return instance;
}
/**
* Returns player object from given UUID
*
* @param id
* Player UUID
* @return player object from given UUID
*/
public abstract @Nullable TabPlayer getPlayer(@NonNull UUID id);
/**
* Returns player object from given name
*
* @param name
* Player name
* @return player object from given name
*/
public abstract @Nullable TabPlayer getPlayer(@NonNull String name);
/**
* Returns collection of all online players. Will return empty list if plugin is disabled (due to a broken configuration file for example).
*
* @return collection of online players
*/
public abstract @NotNull TabPlayer[] getOnlinePlayers();
/**
* Return BossBar manager instance if the feature is enabled. If not, returns {@code null}.
*
* @return BossBar manager
*/
public abstract @Nullable BossBarManager getBossBarManager();
/**
* Returns scoreboard manager instance if the feature is enabled. If not, returns {@code null}.
*
* @return scoreboard manager
*/
public abstract @Nullable ScoreboardManager getScoreboardManager();
/**
* Returns team manager instance if the feature is enabled. If not, returns {@code null}.
*
* @return team manager
*/
public abstract @Nullable NameTagManager getNameTagManager();
/**
* Returns header/footer manager instance if the feature is enabled. If not, returns {@code null}.
*
* @return Header/footer manager
*/
public abstract @Nullable HeaderFooterManager getHeaderFooterManager();
/**
* Returns PlaceholderManager instance
*
* @return PlaceholderManager instance
*/
public abstract @NotNull PlaceholderManager getPlaceholderManager();
/**
* Returns TabList name format manager instance if the feature is enabled. If not, returns {@code null}.
*
* @return TabList name format manager
*/
public abstract @Nullable TabListFormatManager getTabListFormatManager();
/**
* Returns Layout manager instance if the feature is enabled. If not, returns {@code null}.
*
* @return Layout manager
*/
public abstract @Nullable LayoutManager getLayoutManager();
/**
* Returns Sorting manager instance if at least one feature capable of sorting players is enabled.
* If not, returns {@code null}.
*
* @return Sorting manager
*/
public abstract @Nullable SortingManager getSortingManager();
/**
* Gets the event bus for registering listeners for TAB events.
*
* @return the event bus
*/
public abstract @Nullable EventBus getEventBus();
}
@@ -0,0 +1,126 @@
package me.neznamy.tab.api;
import lombok.NonNull;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.UUID;
/**
* An interface representing a player
*/
@SuppressWarnings("unused") // API class
public interface TabPlayer {
/**
* Returns player's name
*
* @return Player's name
*/
@NotNull
String getName();
/**
* Returns player's UUID
*
* @return Player's UUID
*/
@NotNull
UUID getUniqueId();
/**
* Returns platform-specific entity
*
* @return platform's player object
*/
@NotNull
Object getPlayer();
/**
* Returns true once the player is successfully loaded (onJoin method ran through all methods)
*
* @return {@code true} if player is fully loaded, {@code false} otherwise
*/
boolean isLoaded();
/**
* Returns player's primary permission group. If group has been changed using
* {@link #setTemporaryGroup(String)}, returns that value. Otherwise, returns group
* detected by standard group assign logic
*
* @return player's primary permission group
*/
@NotNull
String getGroup();
/**
* Temporarily overrides player's group and applies all changes coming from new group.
* This includes all properties and sorting, if used.
* Set to {@code null} to reset back.
*
* @param group
* New group to use
* @see #hasTemporaryGroup()
*/
void setTemporaryGroup(@Nullable String group);
/**
* Returns {@code true} if a temporary group was applied to the player using {@link #setTemporaryGroup(String)}.
* If no group was set, returns {@code false}
*
* @return {@code true} if group is set, {@code false} if not
* @see #setTemporaryGroup(String)
*/
boolean hasTemporaryGroup();
/**
* Changes expected profile name of the player. This adapts all name-bound features
* to use this new profile name if another plugin changed profile name of the player. <p>
* Automatic profile name change detection is available on Bukkit, BungeeCord and Fabric,
* therefore using this is redundant there. This function is only needed on Sponge and Velocity,
* where the detection is not available. <p>
* Warning: This function does NOT change player's profile name, it only updates the tracked
* name inside the plugin.
*
* @param profileName
* New expected profile name
*/
void setExpectedProfileName(@NonNull String profileName);
/**
* Returns player's expected profile name. This defaults to player's username, but may
* get changed by other plugins and then detected by TAB.
*
* @return Player's expected profile name
*/
@NotNull
String getExpectedProfileName();
/**
* Returns name of the server the player is connected to.
* This requires TAB on proxy.
* On backend installation, this method returns {@code "N/A"}.
*
* @return Player's server on proxy or {@code "N/A"} on backend installation
*/
@NotNull
String getServer();
/**
* Returns name of the world the player is in.
* On proxy installation, TAB-Bridge must be installed to forward this info to the proxy.
* Otherwise, it will return {@code "N/A"}.
*
* @return Player's world or {@code "N/A"} on proxy installation without TAB-Bridge installed
*/
@NotNull
String getWorld();
/**
* Returns {@code true} if this player is a bedrock player, {@code false} if not.
*
* @return {@code true} if this player is a bedrock player, {@code false} if not
*/
boolean isBedrockPlayer();
}
@@ -0,0 +1,30 @@
package me.neznamy.tab.api.bossbar;
/**
* An enum representing all available BossBar colors.
* Calling ordinal() will return color's network ID.
*/
@SuppressWarnings("unused") // API class
public enum BarColor {
/** Pink color */
PINK,
/** Blue color */
BLUE,
/** Red color */
RED,
/** Green color */
GREEN,
/** Yellow color */
YELLOW,
/** Purple color */
PURPLE,
/** White color */
WHITE
}
@@ -0,0 +1,24 @@
package me.neznamy.tab.api.bossbar;
/**
* An enum representing all available BossBar styles.
* Calling ordinal() will return style's network ID.
*/
@SuppressWarnings("unused") // API class
public enum BarStyle {
/** Fully solid line */
PROGRESS,
/** Line segmented into 6 parts */
NOTCHED_6,
/** Line segmented into 10 parts */
NOTCHED_10,
/** Line segmented into 12 parts */
NOTCHED_12,
/** Line segmented into 20 parts */
NOTCHED_20
}
@@ -0,0 +1,213 @@
package me.neznamy.tab.api.bossbar;
import java.util.List;
import java.util.UUID;
import lombok.NonNull;
import me.neznamy.tab.api.TabPlayer;
import org.jetbrains.annotations.NotNull;
/**
* An interface representing a BossBar line.
* <p>
* It uses 1.9+ BossBar feature, allowing configurable styles
* and colors, as well as display several bars at once. Limit of maximum
* displayed BossBars depends on client resolution and GUI scale, up to
* 9 concurrent BossBars displayed at once.
*/
public interface BossBar {
/**
* Returns name of this BossBar. If it was defined in config, returns
* the name specified in config. If it was made using the API, returns
* randomly generated ID given to this BossBar when creating.
*
* @return name of BossBar
*/
@NotNull String getName();
/**
* Returns randomly generated uuid of this BossBar used internally to match
* the BossBar in client with packets or with Bukkit API BossBar instances.
*
* @return uuid of this BossBar
*/
@NotNull UUID getUniqueId();
/**
* Changes BossBar title to specified string, supporting placeholders.
* <p>
* If title contains new placeholders not used before, they are registered using
* standard registration logic and refreshed periodically. No need to call
* this method to try to keep placeholder values up to date.
* <p>
* If specified title is equal to the current one, nothing happens.
*
* @param title
* New title to display in this BossBar
*/
void setTitle(@NonNull String title);
/**
* Changes BossBar progress to specified string, supporting placeholders.
* The string must be a string version of a float value, or a placeholder that
* outputs a float value with range 0-100.
* <p>
* If progress contains new placeholders not used before, they are registered using
* standard registration logic and refreshed periodically. No need to call
* this method to try to keep placeholder values up to date.
* <p>
* If specified progress is equal to the current one, nothing happens.
*
* @param progress
* New progress to use in this BossBar
*/
void setProgress(@NonNull String progress);
/**
* Changes BossBar progress to specified value ranging from 0 to 100.
* <p>
* If specified progress is equal to the current one, nothing happens.
*
* @param progress
* New progress to use in this BossBar
*/
void setProgress(float progress);
/**
* Changes BossBar color to specified string, supporting placeholders.
* The string must be a string version of one of the supported values,
* or a placeholder that outputs one of them.
* <p>
* If color contains new placeholders not used before, they are registered using
* standard registration logic and refreshed periodically. No need to call
* this method to try to keep placeholder values up to date.
* <p>
* If specified color is equal to the current one, nothing happens.
*
* @param color
* New color to use in this BossBar
*/
void setColor(@NonNull String color);
/**
* Changes BossBar color to specified enum constant.
* <p>
* If specified color is equal to the current one, nothing happens.
*
* @param color
* New color to use in this BossBar
*/
void setColor(@NonNull BarColor color);
/**
* Changes BossBar style to specified string, supporting placeholders.
* The string must be a string version of one of the supported values,
* or a placeholder that outputs one of them.
* <p>
* If style contains new placeholders not used before, they are registered using
* standard registration logic and refreshed periodically. No need to call
* this method to try to keep placeholder values up to date.
* <p>
* If specified style is equal to the current one, nothing happens.
*
* @param style
* New style to use in this BossBar
*/
void setStyle(@NonNull String style);
/**
* Changes BossBar style to specified enum constant.
* <p>
* If specified style is equal to the current one, nothing happens.
*
* @param style
* New style to use in this BossBar
*/
void setStyle(@NonNull BarStyle style);
/**
* Returns current title of the BossBar in raw format. If it contains placeholders,
* their raw identifiers are used in the result.
*
* @return title of the BossBar
*/
@NotNull String getTitle();
/**
* Returns progress of the BossBar as a string, which is either entered string
* containing placeholders or entered number converted to string
*
* @return entered progress as a string
*/
@NotNull String getProgress();
/**
* Returns color of the BossBar as a string, which is either entered string
* containing placeholders or entered enum value converted to string
*
* @return entered color as a string
*/
@NotNull String getColor();
/**
* Returns style of the BossBar as a string, which is either entered string
* containing placeholders or entered enum value converted to string
*
* @return entered style as a string
*/
@NotNull String getStyle();
/**
* Registers this BossBar to specified player.
* <p>
* If the player already sees this BossBar, nothing happens.
*
* @param player
* Player to register this BossBar to
*/
void addPlayer(@NonNull TabPlayer player);
/**
* Unregisters this BossBar from specified player.
* <p>
* If the player does not see this BossBar, nothing happens.
*
* @param player
* Player to unregister this BossBar from
*/
void removePlayer(@NonNull TabPlayer player);
/**
* Returns list of players who can see this BossBar.
* <p>
* The returned list can only be used to read. Writing
* will not work properly. For adding/removing players see {@link #addPlayer(TabPlayer)}
* and {@link #removePlayer(TabPlayer)}.
*
* @return List of players seeing this BossBar
*/
@NotNull List<TabPlayer> getPlayers();
/**
* Returns {@code true} if this bossbar is visible to specified player based on
* display condition or adding via {@link #addPlayer(TabPlayer)}, {@code false} if not.
* <p>
* This may return {@code true} even if player cannot physically see the bossbar due to
* having it disabled via toggle command or {@link BossBarManager#toggleBossBar(TabPlayer, boolean)}
* (or {@link BossBarManager#setBossBarVisible(TabPlayer, boolean, boolean)}).
*
* @param player
* Player to check
* @return {@code true} if player is allowed to see this Boss Bar, {@code false} if not.
*/
boolean containsPlayer(@NonNull TabPlayer player);
/**
* Returns {@code true} if this boss bar is configured as announcement-only bar,
* {@code false} if not.
*
* @return {@code true} if bar is announcement only, {@code false} if not
*/
boolean isAnnouncementBar();
}
@@ -0,0 +1,157 @@
package me.neznamy.tab.api.bossbar;
import java.util.List;
import java.util.Map;
import lombok.NonNull;
import me.neznamy.tab.api.TabAPI;
import me.neznamy.tab.api.TabPlayer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* An interface allowing work with BossBars such as creating, sending
* and toggling.
* <p>
* Instance can be obtained using {@link TabAPI#getBossBarManager()}.
* This requires the BossBar feature to be enabled in config, otherwise the method will
* return {@code null}.
*/
@SuppressWarnings("unused") // API class
public interface BossBarManager {
/**
* Creates BossBar with specified parameters and registers it to BossBar manager,
* allowing to retrieve it later.
*
* @param title
* Title to display, supports placeholders
* @param progress
* Progress to use. Must be between 0 and 100
* @param color
* Color to use
* @param style
* Style to use
* @return The newly created BossBar
*/
@NotNull BossBar createBossBar(@NonNull String title, float progress, @NonNull BarColor color, @NonNull BarStyle style);
/**
* Creates BossBar with specified parameters and registers it to BossBar manager,
* allowing to retrieve it later.
*
* @param title
* Title to display, supports placeholders
* @param progress
* Progress to use. Must be a string version of a number, or
* a placeholder that returns a number
* @param color
* Color to use. Must be a string version of one of enum constants, or
* a placeholder that returns one of them
* @param style
* Style to use. Must be a string version of one of enum constants, or
* a placeholder that returns one of them
* @return The newly created BossBar
*/
@NotNull BossBar createBossBar(@NonNull String title, @NonNull String progress, @NonNull String color, @NonNull String style);
/**
* Returns registered BossBar with given name. For BossBars from config it is the name
* they were created with, for API BossBars their randomly generated name, which can be
* retrieved using {@link me.neznamy.tab.api.bossbar.BossBar#getName()}.
* Returns {@code null} if no such BossBar exists.
*
* @param name
* Name of registered BossBar
* @return BossBar with specified name
*/
@Nullable BossBar getBossBar(@NonNull String name);
/**
* Returns a map of all registered BossBars. This includes both BossBars from config
* and those registered via API.
* <p>
* Map key is BossBar's name available in {@link me.neznamy.tab.api.bossbar.BossBar#getName()},
* map value is the BossBar interface.
*
* @return all registered BossBars
*/
@NotNull Map<String, BossBar> getRegisteredBossBars();
/**
* Toggles BossBar for this player and sends toggle message if {@code sendToggleMessage} is true.
*
* @param player
* Player to toggle BossBar for
* @param sendToggleMessage
* {@code true} if toggle message should be sent, {@code false} if not
* @see #hasBossBarVisible(TabPlayer)
* @see #setBossBarVisible(TabPlayer, boolean, boolean)
*/
void toggleBossBar(@NonNull TabPlayer player, boolean sendToggleMessage);
/**
* Returns true if player can see BossBars, false if toggled via command or API.
*
* @param player
* Player to check toggle status of
* @return {@code true} if visible, {@code false} if disabled (toggled)
* @see #toggleBossBar(TabPlayer, boolean)
* @see #setBossBarVisible(TabPlayer, boolean, boolean)
*/
boolean hasBossBarVisible(@NonNull TabPlayer player);
/**
* Sets BossBar visibility of player to set value. If value did not change, nothing happens.
* If visibility changed, toggle message is sent if {@code sendToggleMessage} is {@code true}.
*
* @param player
* Player to set BossBar visibility of
* @param visible
* {@code true} if BossBar should be visible, {@code false} if not
* @param sendToggleMessage
* {@code true} if toggle message should be sent if value changed, {@code false} if not
* @see #toggleBossBar(TabPlayer, boolean)
* @see #hasBossBarVisible(TabPlayer)
*/
void setBossBarVisible(@NonNull TabPlayer player, boolean visible, boolean sendToggleMessage);
/**
* Temporarily displays registered BossBar to player for specified amount of time in seconds.
*
* @param player
* Player to show BossBar to
* @param bossBar
* Name of registered BossBar to show
* @param duration
* In seconds for how long should BossBar be displayed
* @throws IllegalArgumentException
* if no BossBar with specified name exists
* @see #announceBossBar(String, int)
* @see #getAnnouncedBossBars()
*/
void sendBossBarTemporarily(@NonNull TabPlayer player, @NonNull String bossBar, int duration);
/**
* Temporarily displays registered BossBar to all players for specified amount of time in seconds.
*
* @param bossBar
* Name of registered BossBar to show
* @param duration
* In seconds for how long should BossBar be displayed
* @throws IllegalArgumentException
* if no BossBar with specified name exists
* @see #sendBossBarTemporarily(TabPlayer, String, int)
* @see #getAnnouncedBossBars()
*/
void announceBossBar(@NonNull String bossBar, int duration);
/**
* Returns list of BossBars which are currently being announced.
*
* @return list of currently active BossBar announcements
* @see #sendBossBarTemporarily(TabPlayer, String, int)
* @see #announceBossBar(String, int)
*/
@NotNull List<BossBar> getAnnouncedBossBars();
}
@@ -0,0 +1,56 @@
package me.neznamy.tab.api.event;
import lombok.NonNull;
/**
* The event bus. This is used to register event listeners/handlers for
* handling events that may be fired by TAB.
*/
@SuppressWarnings("unused") // API class
public interface EventBus {
/**
* Scans the given listener for any method that is annotated with
* {@link Subscribe} and registers it as a listener to this event bus.
*
* <p>All methods in this class that are annotated with {@link Subscribe}
* must meet the following criteria:
* <ul>
* <li>It must be <strong>public</strong>.</li>
* <li>It must <strong>not</strong> be abstract.</li>
* <li>It must have exactly <strong>one</strong> parameter.</li>
* <li>Its single parameter must be <strong>an event</strong>.</li>
* </ul>
* If a method does not meet the above criteria, an exception <strong>will</strong>
* be thrown.
*
* @param listener the listener to register
* @throws RuntimeException if a method does not meet the criteria
*/
void register(@NonNull Object listener);
/**
* Registers the given handler to this event bus.
*
* @param type the class type of the event
* @param handler the handler to register
* @param <E> the type of the event
*/
<E extends TabEvent> void register(@NonNull Class<E> type, @NonNull EventHandler<E> handler);
/**
* Scans the given listener for any method that is annotated with
* {@link Subscribe} and unregisters it from this event bus.
*
* @param listener the listener to unregister
*/
void unregister(@NonNull Object listener);
/**
* Unregisters the given handler from this event bus.
*
* @param handler the handler to unregister
* @param <E> the type of the event
*/
<E extends TabEvent> void unregister(@NonNull EventHandler<E> handler);
}
@@ -0,0 +1,18 @@
package me.neznamy.tab.api.event;
/**
* A handler for an event. This allows listening for events in a more
* functional style.
*
* @param <E> the type of event this handler handles
*/
@FunctionalInterface
public interface EventHandler<E> {
/**
* Called when the given event is fired from an event bus.
*
* @param event the event to handle
*/
void handle(E event);
}
@@ -0,0 +1,14 @@
package me.neznamy.tab.api.event;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Subscribes to a {@link TabEvent}.
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Subscribe {
}
@@ -0,0 +1,10 @@
package me.neznamy.tab.api.event;
/**
* An event that may be fired by TAB when something occurs.
*
* <p>This is a marker interface. All events <strong>must</strong> implement this
* interface.
*/
public interface TabEvent {
}
@@ -0,0 +1,26 @@
package me.neznamy.tab.api.event.player;
import me.neznamy.tab.api.TabPlayer;
import me.neznamy.tab.api.event.TabEvent;
import org.jetbrains.annotations.NotNull;
/**
* Called when the player has been fully loaded by TAB.
*/
public interface PlayerLoadEvent extends TabEvent {
/**
* Gets the player that was loaded.
*
* @return the player that was loaded
*/
@NotNull TabPlayer getPlayer();
/**
* Returns {@code true} if player was loaded because they joined,
* {@code false} if the player was loaded because tab reload command was executed
*
* @return {@code true} if player joined, {@code false} if plugin was reloaded
*/
boolean isJoin();
}
Loaded 100 of 679 files, more files were not shown because too many files have changed in this diff. Show more