BKCommonLib
BKCommonLib is no longer being updated on dev.bukkit.org.
If you want to use the latest version, use spigot.
Latest version: 1.57
CraftBukkit/SportBukkit/Spigot/MCPC+ build: CB 1.6.4 R1.0 / CB 1.6.4 R2.1 / Spigot 1.7
Older builds available: CB 1.5.2-R1.0 / CB 1.6.2-R1.0
Tekkit: Untested and thus unsupported, some features may not work as expected
Description
This utility library shares all the common code needs for various plugins, and having them in one library heavily reduces the amount of duplicated code. The featured utilities are varied, and whenever something is missing in Bukkit, it is added in BKCommonLib. This is one of the reasons why it has become this large: there are simply a lot of things Bukkit doesn't (want to) offer.
BKCommonLib has versioning on a per-plugin basis, so when a certain plugin needs version 2, and version 1 is installed, the server owner is automatically notified and the plugin is not enabled. This prevents the common mishaps with outdated BKCommonLib versions.
Other than utilities and services, this library offers a wide variety of reflection and user-friendly ways of accessing net.minecraft.server. If your plugin requires the use of the internals, but do not want to risk changing field and method names, you can depend on BKCommonLib to provide them for you. This allows you to remain compatible between CraftBukkit versions automatically, and reduces silent failure hazards.
Reasons for you to depend on this library
- You need to access Minecraft internals in your plugin, and Bukkit has no API for it
- You are tired of re-uploading the same version over again because of the internals changing
- You want to work with Vector/math logic, or need to use other utility classes
- The YAML of Bukkit dislikes you, and you want this to be easier
- You want to easily read and write configuration/data files
- You want easy access to data conversion utilities to convert user input
- You want to work with inventories in an advanced fashion
- You want to work with unique server events
- You want to alter entity behaviour (such as handling block collisions, custom movement, etc.)
- You want plugin messages/permissions to be configurable
- You want to work with (async)tasks without storing IDs
- You want to send and manipulate packets
Features
- General
- PluginBase for easy access to metrics, permissions, localization and more
- Permission defaults for storing the permissions a plugin uses
- Localization for making the messages of a plugin configurable
- Utilities
- General utilities for String, Logic, BlockFace and Math operations
- Block utilities for Block-related operations (states, data, etc.)
- ItemUtil for Inventory, Items and Item Transfer utilities
- RecipeUtil to work with crafting and furnace recipes
- Various Collections for auto-filtering, converting and even interpolation
- Data storage
- Configuration API with nodes, headers and other goodies
- NBT API designed after the configuration API
- (Compressed)DataReader/DataWriter to read and write data from/to file
- Entities
- CommonEntity implementations with added utilities
- EntityController for altering entity behaviour
- EntityNetworkController for altering entity network logic
- Services
- Metrics for keeping track of plugin statistics
- Conversion for conversions between all types of data
- Events and Listeners to keep track of changes on the server
- Packet services and API to keep track of packets
- Task class for easier task scheduling
- Scoreboard services to setup scoreboards without criteria
- Tab View service to alter what is shown when players press tab
Getting started
To start using BKCommonLib, you have two options (after adding BKCommonLib as dependency in the plugin.yml):
Include the jar file as a dependency
Like any dependency, keep the jar file somewhere on your computer and add it to your classpath. Nothing special here.
Make a (new) maven project and include it
Add the following repository:
<repository> <id>dj-tcraft repository</id> <url>http://ci.dj-tcraft.nl/plugin/repository/everything/</url> </repository>
And the following dependency (may need to update version):
<dependency> <groupId>com.bergerkiller.bukkit</groupId> <artifactId>BKCommonLib</artifactId> <version>1.54-SNAPSHOT</version> <scope>provided</scope> </dependency>
Dependencies BKCommonLib uses
BKCommonLib supports various other plugins and projects. Below all of these are listed:
- Vault - for permission plugin support
- ProtocolLib - to avoid packet listening conflicts
- Showcase(Standalone) - to ignore showcased items
- HyperConomy - to ignore shop items
- BleedingMobs - to ignore particles
- CGLib - for generating nms.Entity classes on-the-fly to supply Entity Controllers
- Objenesis - for generating classes without calling constructors (needed for various fixes inside class constructors)
Plugins that require BKCommonLib to be installed:
Disclaimer
This plugin utilises Hidendra's plugin metrics system, which means that the following information is collected and sent to mcstats.org:
- A unique identifier
- The server's version of Java
- Whether the server is in offline or online mode
- The plugin's version
- The server's version
- The OS version/name and architecture
- The core count for the CPU
- The number of players online
- The Metrics version Opting out of this service can be done by editing plugins/Plugin Metrics/config.yml and changing opt-out to true.
License
This library uses an open license. Feel free to use whatever code you need from it, you do not have to ask me either. If you want me to add certain features, that is fine too. Everyone is allowed to use this Library as a dependency. I do recommend extending 'PluginBase' instead of 'JavaPlugin' then, as it allows you to automatically deal with the BKCommonLib versioning checks. See also: BKCommonLib license file
This product includes software developed by the Apache Software Foundation (http://www.apache.org/)
Links:
Compatibility
BKCommonLib supports ProtocolLib when it is enabled, but if it is not, the player connection is replaced resulting in several incompatibilities. To fix these incompatibility issues, install ProtocolLib next to BKCommonLib. This can not be stressed enough. When incompatibility occurs, BKCommonLib will notify you in the console and will disable itself. The following plugins are known to be incompatible when ProtocolLib is NOT installed:
Metrics
This plugin sends server count and dependency statistics to MCStats.org. You can (globally) opt out in the PluginMetrics/config.yml file.
Banner
I use a banner in my depending plugins. This banner is automatically updated when a new version of BKCommonLib is out. It is a quick and efficient way to keep track of updates for this library. This was needed, too, because a lot of people were using outdated BKCommonLib versions, which resulted in bug reports...too many of them. And I do not want to waste your time with invalid reports. You have a plugin that uses BKCommonLib? Feel free to use the banner on your download page.
[[http://dev.bukkit.org/bukkit-plugins/bkcommonlib/|{{http://ci.dj-tcraft.nl/job/BKCommonLib/lastSuccessfulBuild/artifact/target/BKCommonLibVersion.png|Go to the BKCommonLib Dev-bukkit page}}]]







-
View User Profile
-
Send Message
Posted Jan 29, 2013@euphonik
No, without BKCommonLib all plugisn using it wiuld pretty much need double code.
This plugin contains extremely easy to use classes
Is reflection already in bukkit?
And BlockList?
Everything goes much much faster then coding the same thing for all those plugins.
maybe 10% of the features is already in bukkit, but in that case they are made to be easier to acces
Have you even looked at the source code?
-
View User Profile
-
Send Message
Posted Jan 29, 2013this is full of stuff that is already provided in standard java libs and the bukkit API, how is that reducing duplicate code?
-
View User Profile
-
Send Message
Posted Jan 28, 2013@WoZo
Some plugins that use that function take some respond time,
it handles all tasks from all plugins that support bkc.
-
View User Profile
-
Send Message
Posted Jan 28, 2013@lenis0012
Thank you, I will update.
-
View User Profile
-
Send Message
Posted Jan 28, 2013Anyone know why this would be causing lag?
Total duration: 2372.039 ms / 500 ticks Average duration: 4.744 ms/tick Selected task: Task #28 Plugin: BKCommonLib Location: com.bergerkiller.bukkit.common.internal.CommonPlugin$NextTickHandler
-
View User Profile
-
Send Message
Posted Jan 28, 2013@xclucky
@Lama0
@xclucky
Yes v1.43 is for build 2601 - 2603
and v1.44 is for build 2604+
There is no option sayng 1.4.7-R0.2, as DevBukkit only builds against beta builds
Howerer if you have checked the file description you should have seen that it only works on 1.4.7-R0.2
I highly recomment updating to 1.4.7-R0.2
It has tons of bugfixes.
-
View User Profile
-
Send Message
Posted Jan 28, 2013@Lama0
I have also noticed that 1.43 works instead of 1.44. Why does it take BukkitDev SO LONG to approve projects if they're not even checking to see if they work with the versions they are said to... Bunch of lazy tards... >.>
-
View User Profile
-
Send Message
Posted Jan 28, 2013I got the same error as xclucky, however I tried using 1.43 instead of 1.44, and all those errors are gone, and the server works fine.
I think I have Build #2602, and 1.44 is rated for #2604+?
Don't know if this has anything to do with it, just something I noticed.
-
View User Profile
-
Send Message
Posted Jan 28, 2013I got an error upon startup:
-
View User Profile
-
Send Message
Posted Jan 28, 2013@slight2k12
thats the problem, nto with 2604+
this is because Maven does not seem to like snapshots, it wont compile it with 1.4.7-0.2
-
View User Profile
-
Send Message
Posted Jan 28, 2013fyi: the jenkins-link works again: http://ci.herocraftonline.com/job/BKCommonLib/ warning: build#53 doesn't work on CB2604+
-
View User Profile
-
Send Message
Posted Jan 27, 2013@lenis0012
Maybe use a dropbox temporary until you get jenkins working.
Thanks for the hard work!
-
View User Profile
-
Send Message
Posted Jan 27, 2013@Psychokiller1888
1.4.7-R0.1 Is full of bugs, and a lot of people already run on 1.4.7-R0.2
normaly this wont be a problem but right now we have 2 problems at once:
1) The new dev bulds changed so much that they broke BKC, TC, MW and NL.
2) Our Jenkins is begging out and no longer works ocrrctly
normaly if 1, was happening i would just post workign versions for dev builds on jenkins and wait for a new beta build to build on for BukkitDev
and if just 2, was happening i would jsut upload working builds to BukkitDev, as they also work on the latest beta build.
But this is really annoying for as well me as the users of my plugins.
It is necesarry for alot of people to have builds compatible with 1.4.7-R0.2
One of the biggest changes is that 1.4.7-R0.2 actualy supports nether portals, even if a multi-world plugin is installed
before this commit everyoen using a mutli world plugin could not use nether portals.
I know you miss Bergerkiller, but he has made his decissions.
I might be not as good as him but its better than nothing.
-
View User Profile
-
Send Message
Posted Jan 27, 2013No but forget it LordKitsuna, he's right.... Let's developp on dev builds, as it makes no sense. The fact is that mister dev, in is will of doing the best for the plugin, went a bit too fast and forgot he was on a dev build and doesn't want to admit it. Easy to see as 1.44 was released for 1.4.7-R0.1 initially.
"R: v1.44 for CB 1.4.7-R0.1 Jan 22, 2013"
Anyway, nothing makes sense here, imagine he wants us to be on dev build, but the library is only compatible with 2604 to 2615 were dev builds are going faster... So theoritecally, at least, you'll almost never be in the correct condition for use and hence, support.
Gosh, missing Bergerkiller courtesy...
-
View User Profile
-
Send Message
Posted Jan 27, 2013@lenis0012
initially no because i am super smart best admin and tend to forget that bukkit has build numbers altogether so at first it was just a bunch of numbers to me and as for most people i believe they ignore the banner entirely which short of huge red bold underlined text i dont think can be helped.
-
View User Profile
-
Send Message
Posted Jan 26, 2013Hello. I have a small problem. What is it? I have 1.45 2013-01-27 04:08:58 [INFO] [BKCommonLib] BKCommonLib is running on Minecraft v1_4_R1 2013-01-27 04:08:58 [SEVERE] [BKCommonLib] Common.VERSION needs to be updated to contain '145'! 2013-01-27 04:08:59 [INFO] BKCommonLib version 1.45 enabled! (0.024s)
-
View User Profile
-
Send Message
Posted Jan 26, 2013@LordKitsuna
CraftBukkit is undergoing heavy vhanges.
alot of plugins are heaving problems with the new getBukkitEntity wich now points to CraftEntity instead of Entity, this has been added in CraftBukkit 2604.
And when you look at the banner, it says its for 2604-2615
that makes sense right?
-
View User Profile
-
Send Message
Posted Jan 25, 2013@robotnikthingy
the issue to your problem was answered about 3 posts or so below your own.
@lenis0012: any reason it only works with the dev build? just wondering if something changed in the builds that caused the new bkcl to not work with the beta. Im mostly suspect because one of my other plugins doesnt like the dev build, so for now im just sitting on the old version of bkcl till my other plugins work right with a newer version. (which will most likely happen soon on a dev build or something)
-
View User Profile
-
Send Message
Posted Jan 25, 2013@lenis0012
"Usually" is exactly what I was thinking of... Informatic is not about usually and approximativity. Anyway, do what you want, I actually don't care, it's my dev opinion and you can't change it. Dev builds are for devs, beta builds for beta experienced users and releases for public, that's a fact. Thanks for carrying on Bergerkiller's work and continue your great work :)
-
View User Profile
-
Send Message
Posted Jan 25, 2013@Psychokiller1888
What you just said is rubbish
I can tell you that beta builds usualy have more bugs than dev builds.
They dont recode the entire software when they release a new build, they are not crazy
they just fix bugs etc.
if you want to use the latest beta build then use v1.43