XSeries is a set of utility classes that provides different functions that are fully optimized to make plugin development easier. Most of the projects here aim to provide cross-version compatibility as well. Note that most of the methods have a complete JavaDoc so most of the explanation is there. Maven HTML: <dependency> <groupId>com.github.cryptomorin</groupId> <artifactId>XSeries</artifactId> <version>VERSION</version> </dependency> For the latest version check the XSeries GitHub page. Please read the maven part in the GitHub page as well. It's important. Performance & Memory Usage There is absolutely no performance difference between parsing the enum from these utilities and getting them directly from the Bukkit enum other than XMaterial utility which still has a really powerful cache system. Fun fact that the match method for strings, is even faster than Bukkit's in most cases. This is not just great for cross-version support, but for config options as well. While the cross-version utilities do consume a little memory, it's just insignificant. Other classes that are not made for cross-version compatibility aim to provide the best performance and options. The only downfall for using it is it's just going to increase your JAR file size by a few kbs. XParticle This utility will mainly focus on providing easier ways to display particles in different shapes. A particle enum will not be added as only two particle name have changed. All the methods in this class are special and unique. You'll need ParticleDisplay for this to work. Many static and animated shapes. Display images as particles. Text to particles. Complex shapes like tesseracts and double pendulums. XParticle will not add support for 1.8, reflection will be really heavy and the server will lag. XSound Special Methods: playAscendingNote - playSoundRepeatedly - stopMusic - playSoundFromString A really special method is playMusic. You can make your own song snippets. This method allows you to play notes with a short script without needing to use any redstone or noteblocks! Please share your work if you made any. I might replace it with the current snippet in the testMusic method. XBlock This is used to support block state and data for materials. XMaterial only handles ItemStacks. All the XMaterial exceptional materials for block comparing is in this class. All the methods in this class are special and unique. This requires XMaterial to work. XEnchantment These enchantments use an enum while the Bukkit one uses a class. There is also an Essentials version that uses classes ZEnchantment this class will not be updated. Special Methods: getBook XPotion These potion effects use an enum while the Bukkit one uses a class. Special Methods: buildItemWithEffects - throwPotion - addPotionEffectsFromString - parsePotionEffectFromString - isPotion ActionBar & Titles So first off all why did I do this when there are already a lot of utilities out there? Most of them are missing optimization and some features. Note that you need to have ReflectionUtils class for this to work. XItemStack Serialize YAML ItemStacks without item versions and the ugly class types. A neat and cross-version utility to serialize and deserialize items. Supports almost all the metas. SkullUtils Get skull with texture from different methods. UUIDs, usernames, URLs and Base64. This might not work if you're using maven. You'll have to add Spigot JAR directly to your dependencies. XEntity Spawn entities from YAML. Supports all entities. Uses XItemStack which uses XMaterial and XPotion. Supports 1.9+ XBiome Cross-version compatibility for biome names. Also has a few methods to change the biome in a selected area asynchronously. Special Methods: setBiome(Chunk) - setBiome(Location start, Location end) XMaterial Supports changed material names for 1.8 up to the latest version. Since this class is widely used, version related functions are in this class. supports(int) - getVersion(), getMajorVersion(String) ID (Magic Value) and ItemStack data support. Matching materials names with newer and older names. A list for the config to check with CONTAINS and REGEX prefix support. Support for duplicated names. Support for changed material names in 1.13 and 1.14 (not many of them changed) Support for damageable items. Item and Material parser. Comparing XMaterial with an ItemStack. Material name cleanup for all the methods. A small version checker feature. Java 8 techniques for optimization. Suggestion System for completely newly added materials. XMaterial is not related to BlockState, BlockData or MaterialData. You cannot do anything that is related to blocks with this. Adding support for every single block's data is craziness. Use XBlock instead. XMaterial v1 Resource To Those Bending Over Backwards to Support Outdated Versions... I just want to make one thing clear in this thread, please. So let me keep it short. While I agree with the post above, some server owners are still using 1.12 And yes, even 1.8 is still used, but you're the developer. If they don't like the combat system they can use a plugin like OldCombatMechanics. If you're worried about the performance, this is wrong. 1.12 fixed a lot of bugs and exploits, and performance improvements. The insignificant lag that you're experiencing is because of the new features added. This is completely normal. While most of these utilities support 1.8 version, I encourage all the developers to drop support for anything below 1.12 If people want to support lower versions, nothing is going to stop them. If this utility wasn't a thing, someone else would've create it with low performance. I made it instead so you can enjoy the high performance. Trust me, I've seen some really horrible codes related to this cross-version compatibility thing. While the utility is mostly used for cross-version compatibility, it also has some other useful methods. So please, do not bring up the discussion about why we shouldn't support outdated versions here. Please report any grammar or format problems. Also, feel free to make a pull request if you can improve the code. Even if it's a little optimization, but make sure to read the contributing guidelines section first.