Here follows a list of CraftBukkit bugs, problems or general code hazards that I don't expect to be fixed. These include simple line changes or other. Their reasoning for not fixing it is: 'this is of Mojang, we should not care', yet it still harms the developers that try to push CraftBukkit to it's edge. I also list the changes I made on my side to add support for these bugs. TileEntity world field is not visible and there is no getter Source file link Due to it being invisible, it is not possible to work with Tile Entities as a parameter without adding an additional reflection field to get the world from it. Which I did. PlayerInteractEvent is no longer working when player is holding placeable blocks Something with 'relies on Client messages'. I don't get it, you can handle the block placement, and add an interact event, right? Can't do much about it myself. Ticket, but was closed for some reason Chunk [0, 0] is randomly unloaded when players move fast Probably a Mojang bug, but should still be fixed. See this page. I added changes in NoLagg's dynamic view to deal with this properly. The hackish way, that is. Vehicle create events are fired from within minecart/boat constructor Results in you receiving an entity that doesn't even exist on the world, which can cause all sorts of odd bugs. Source file link 1 Source file link 2 It should be moved to: World link It is not possible to teleport non-player entities between worlds This is my solution logic. Which also takes care of passengers. Location objects is causing memory clutter Code style: Whenever someone calls entity.getLocation or when events are fired, a new Location is created on the stack. Unfortunately, it uses 3 doubles, 2 floats and a World, and can take up a lot of memory. This makes heavy operations take 20x as long. I had to work with raw variables instead, because I couldn't call entity.getLocation() 10K times without lowering tick rate. World region files are not closed upon world unloading It makes it impossible to delete worlds after you unload them. The streams have to be closed to fix this. I fixed it in MyWorlds using this code. Important values are missing or inaccessible in entities For example: minecart fuel, arrow hit block position and creeper fuse ticks. For now, I solve this with about 20-30 class files full of reflection Field (wrapper) classes in BKCommonLib. World set type ID is slow - lighting is being performed There is no multi-block change feature in Bukkit. There is no way to start block updating, mass-update and then stop block updating, after which lighting is re-initialized. This makes a lot of 'huge block change' plugins impossible to make...without using CraftBukkit of course. There are ways around it if you don't use Bukkit. Redstone events are bugged Levers don't always send redstone updates when toggled through code, even though physics (should) take care of that at some point, right? I had to use the block physics events for 60% of the redstone updates in Redstone Mania and TrainCarts because of this issue. (including a powered blocks set, unfortunately) Entity add and remove events are missing Instead of the many 'despawn' and 'spawn' events, work on two simple events: add and remove. It covers everyone's needs. I had to add my own IWorldAccess (now WorldManager due to unsafe casting) to handle these events. It overcomplicates everything way too much. Are all these events really needed? For real? Isn't one event for this enough? You can replace the following events: ItemDespawnEvent ItemSpawnEvent CreatureSpawnEvent VehicleCreateEvent ProjectileLaunchEvent ExplosionPrimeEvent With: Entity add event (both when chunks load and when spawning) Entity remove event (both when chunks unload and when removing) And have more use cases as a result as well. Now you can listen for ANY entity, precisely keep track of your entities without using a tick task and a collection of entities and reduce classes in the process. This would rid me of using the WorldListener (nms) to handle it, and would greatly reduce lag as well, as I can then cancel the event instead of setting the entity dead. (if you could also allow changing the entity being added, TrainCarts would be a lot easier to maintain!) Chunks and worlds don't allow you to iterate over tile entities What's wrong about iterating over all the chests, signs and furnaces in the world or chunk? They are in CraftBukkit, and I use them a lot. Proper material<>name mapping doesn't exist Had to implement my own. A configurable name<>id file on the server would make the developers' lives a lot easier. Right now everyone creates their own massive if-statement lists...or a map of them, like I have in BKCommonLib. Impossible to control pistons and redstone programatically There is no way to make a given block 'glow up' automatically. Not redstone either. The only possibility is levers right now. I doubt this will ever be introduced... Pistons can not be controlled...at all. For some reason doors work, but pistons remain impossible to work with. I think a lot of people would be happy when pistons get a proper API. Entity spawns can not be cancelled before creating the entity It makes spawn limiting plugins impossible to work with. PreSpawnEvent perhaps? Anyhow, the internal spawn mechanism causes a lot of tick rate loss when you try to block spawns. Chunk unloads are spammed There is no 'prune' time for chunk unloads. When a chunk is not seen by a player, the server tries to unload it tick after tick. Why allow it to be cancelled when you cause it to kill the server? Really, when a plugin denies you to unload it, stop attempting to unload that chunk for the next 200 ticks or so? Mysterious world load and unload bugs when teleporting After unloading and then loading a world, it is impossible to teleport to it without completely bugging yourself. You basically become a split personality, you visual self being in one world, your interacting self on another. It makes 'temporary worlds' impossible to do, you can't reload worlds. No Bukkit offline Block storage There is no class, like Location or Vector, which stores the world name and the xyz of a block. This makes it impossible to store blocks safely offline by players that want to. Using Block objects causes a lot of problems when worlds unload, and it is not possible to store blocks of unloaded worlds as a result. Now before you hate on me... I just want to get all these problems 'out there' while possible. I stopped filing bug reports after three 'come on, why not? This benefits all' reports were marked invalid because they covered the nms namespace. Even if they are about Bukkit features that use that namespace to even exist. So feeling bored? Want to do something? Look at one of these many problems and see what you can do. Who knows, maybe they will accept your pull request.