Bukkit/Bukkit — pull request #861 by Icyene (2013-04-19 01:35:46+00:00)
Title: [B+C] Implemented mass block change API. Adds BUKKIT-4114

**The Issue:**
--------------------
Internally, Bukkit's Block.setType* and Block.setData calls end up sending a packet to update player clients. When updating large amounts of blocks, this causes a flood of packets which most clients have trouble dealing with.

It is possible to queue block changes and send them in bulk, per chunk to desired players. This would result in one chunk update packet against possible thousands of block change packets, effectively drastically reducing block modification lag.

**Justification for this PR:**
---------------------------------------
I created this API because there is a dire need for a robust block API in Bukkit. Many popular plugins (WorldEdit comes to mind) would benefit from fast block changes without the hassle of NMS.

**PR Breakdown:**
---------------------------------------
Bukkit: Adds set(Block|Data)*Fast interface methods & JavaDocs.
CraftBukkit: Implements said methods. All methods are self contained.

**Testing results and Materials:**
------------------------------------------------
Using this method, an entire chunk can be set to glass in an average of 300ms (Tested on Windows 7 localhost server, 2GB RAM).

BulkBlockTest: https://dl.dropboxusercontent.com/u/67341745/test/BulkBlockTest.jar
Compiled CraftBukkit: https://dl.dropboxusercontent.com/u/67341745/test/craftbukkit.jar

**Relevant PRs:**
---------------------------------------
CraftBukkit: https://github.com/Bukkit/CraftBukkit/pull/1142

**JIRA Tickets:**
---------------------------------------
BUKKIT-4114 - https://bukkit.atlassian.net/browse/BUKKIT-4114