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 Jul 30, 20132013-07-30 15:57:46 [SEVERE] [BKCommonLib] Unhandled exception number 256 occured in onPacketSending(PacketEvent) for BKCommonLib java.lang.ArrayIndexOutOfBoundsException: 8 at com.bergerkiller.bukkit.common.internal.CommonTabController$PlayerTabInfo.handlePlayerInfoPacket(CommonTabController.java:417) at com.bergerkiller.bukkit.common.internal.CommonTabController.onPacketSend(CommonTabController.java:260) at com.bergerkiller.bukkit.common.internal.network.ProtocolLibPacketHandler$CommonPacketListener.onPacketSending(ProtocolLibPacketHandler.java:225) at com.comphenix.protocol.injector.SortedPacketListenerList.invokePacketSending(SortedPacketListenerList.java:113) at com.comphenix.protocol.injector.PacketFilterManager.handlePacket(PacketFilterManager.java:544) at com.comphenix.protocol.injector.PacketFilterManager.invokePacketSending(PacketFilterManager.java:519) at com.comphenix.protocol.injector.spigot.SpigotPacketInjector.packetQueued(SpigotPacketInjector.java:442) at com.comphenix.protocol.injector.spigot.SpigotPacketInjector.packetQueued(SpigotPacketInjector.java:422) at com.comphenix.protocol.injector.spigot.SpigotPacketInjector$2.intercept(SpigotPacketInjector.java:205) at org.spigotmc.netty.PacketListener$$EnhancerByCGLIB$$1eaa21be.packetQueued(<generated>) at org.spigotmc.netty.PacketListener.callQueued(PacketListener.java:73) at org.spigotmc.netty.NettyNetworkManager.queue(NettyNetworkManager.java:168) at net.minecraft.server.v1_6_R2.PlayerConnection.sendPacket(PlayerConnection.java:738) at net.minecraft.server.v1_6_R2.PlayerList.tick(PlayerList.java:739) at net.minecraft.server.v1_6_R2.MinecraftServer.t(MinecraftServer.java:596) at net.minecraft.server.v1_6_R2.DedicatedServer.t(DedicatedServer.java:239) at net.minecraft.server.v1_6_R2.MinecraftServer.s(MinecraftServer.java:481) at net.minecraft.server.v1_6_R2.MinecraftServer.run(MinecraftServer.java:413) at net.minecraft.server.v1_6_R2.ThreadServerApplication.run(SourceFile:582)
-
View User Profile
-
Send Message
Posted Jul 29, 2013@Morpheus1101 It's right above the comments (image link)
-
View User Profile
-
Send Message
Posted Jul 28, 2013To ask perhaps a stipid question which ive failed to find myself .. whats the link to the dev server as im running 1.6.2 an wish to use the dev build of this plugin to make use of the NoLagg plugin.
-
View User Profile
-
Send Message
Posted Jul 27, 2013@craftik7
The only difference between the RB and the developer build is a bug fix that corrects "silenced" packets, which is merely a way to prevent packet listeners from being executed.
I doubt downgrading really had an impact - it might be that the error is random, or some other plugin caused it.
-
View User Profile
-
Send Message
Posted Jul 27, 2013@bergerkiller
Ok thanks. I installed protocolib RB 2.5.0 + Nolag dev + BKCommonlib dev and it works! So I think the problem was in latest dev of protocollib - there was no errors i think only it says that packet was corrupted so then it shutdowns the server or something like that I dont have the log anymore sorry.
-
View User Profile
-
Send Message
Posted Jul 26, 2013@laseromich Hmn wait so MCPC+ now supports 1.6.2 too, huh? I will look into it, although the errors are kinda too obvious to miss. Thanks for reporting.
-
View User Profile
-
Send Message
Posted Jul 26, 2013i was post crashlog to github
-
View User Profile
-
Send Message
Posted Jul 26, 2013@craftik7 Do you have any errors whatsoever? It's working fine locally, and I'm running the same plugin combination as you... In case the protocollib development build is broken then that needs fixing, not BKCommonLib. I need to know the error to know what's up. (and with that I say the /actual/ error, not 'protocol error', as that is far too vague)
-
View User Profile
-
Send Message
Posted Jul 26, 2013#238 26.7.2013 9:00:32 Is broken!! Server shutdowns immediately!
Edit: Using CraftBukkit latest. Plus NoLagg. No OrebFuscator. Also using latest DEV Protocollib
Edit2: What is that? > 11:34:03 [INFO] Disconnecting /5.178.63.185:1571: Protocol error
-
View User Profile
-
Send Message
Posted Jul 26, 2013For everyone having issues with NoLagg and Orebfuscator, try updating to the 1.54-SNAPSHOT #238 development build of BKCommonLib. The next version of ProtocolLib fixes that issue too.
-
View User Profile
-
Send Message
Posted Jul 25, 2013@PhatMale It's a development builds. When we make it official, we take the latest build from there and upload it on here. It is the exact same builds as the official builds, but then in-development.
@StevensOnln1 Issue is that people overlooked the transparent-with-link image as well. I can make it a flashing seizure-invoking spam image but then people will complain about that. I will make the text a link then, that's possible to do. Any other suggestions?
-
View User Profile
-
Send Message
Posted Jul 25, 2013The new background images for the dev builds link makes it really hard to read. Perhaps you could change the colour of the link text to white or yellow so that it stands out more?
-
View User Profile
-
Send Message
Posted Jul 25, 2013also whats difference between the bkcommonlib.jar file and the bkcommonlib-1.54_snapshot.jar file?
i always download and run the snapshot file as it usually runs smoothly on my server.
-
View User Profile
-
Send Message
Posted Jul 25, 2013dev build site http://ci.dj-tcraft.nl/job/BKCommonLib/
Link in banner not working correctly.
-
View User Profile
-
Send Message
Posted Jul 25, 2013Please update this for 1.6.2, my server need this for working
-
View User Profile
-
Send Message
Posted Jul 24, 2013Can you please release a dev build for 1.6.2, I got errors for this plugin, It doesn't want to load on 1.6.2
-
View User Profile
-
Send Message
Posted Jul 23, 2013@bergerkiller
DevBukkit needs a 'like' button =)
-
View User Profile
-
Send Message
Posted Jul 21, 2013@GamerLP0 This plugin runs on CraftBukkit, Spigot and MCPC+ without a need of other plugins. It does support Vault, but that is optional.
If you mean IDE plugins needed to 'use' BKCommonLib for writing your own plugin: just downloading the .jar file and adding it to your classpath would be enough. (just like adding the Bukkit.jar). I do recommend making a maven project instead though, you can find more help on that subject online.
-
View User Profile
-
Send Message
Posted Jul 21, 2013What plugins are needed to work in this plugin
-
View User Profile
-
Send Message
Posted Jul 19, 2013Important notice: we are reinstalling jenkins, maven and all plugins running on it due to severe issues. Please stand by as we fix everything up and start to re-build the projects.
EDIT
Done!