High performance Spigot fork that aims to fix gameplay and mechanics inconsistencies https://papermc.io/
Find a file
Geoff Crossland 963b19c599 Fix a few chunk saving race conditions
* ChunkRegionLoader.c() picks an entry in the save queue, removes that entry from the save queue and then actually writes the entry to the region file. So, between the last two steps, the entry is neither in the save queue nor is it in the region file; if somebody loads the chunk again (with ChunkRegionLoader.loadChunk()) in that gap, they'll get old data. I've delayed the removal until the saving is done.
* ChunkRegionLoader.c() also records the coords of the chunks it's currently saving in this.c. ChunkRegionLoader.a(ChunkCoordIntPair, NBTTagCompound), which adds an entry to the save queue, stops the addition of an entry if its coords are in this.c. Now, I'm guessing that Mojang's intended purpose for this mechanism was to prevent multiple parallel writes for the same chunk. The "stops the addition" bit above should then be something like "block until it's no longer in c"; in fact, the vanilla implementation is "discard the new state of the chunk". I've taken the easy route to solving this, by just making ChunkRegionLoader.c() synchronized (since, in normal use, only the chunk saving thread is in here).
2017-08-11 17:34:19 +10:00
nms-patches Fix a few chunk saving race conditions 2017-08-11 17:34:19 +10:00
src Fix CraftBanner initialisation. 2017-08-07 17:55:47 +10:00
.gitignore Update to Minecraft 1.8 2014-11-28 17:16:30 +11:00
applyPatches.sh Update to Minecraft 1.8.6 2015-05-25 22:04:32 +10:00
LGPL.txt We're LGPL. 2011-01-02 10:58:11 +01:00
LICENCE.txt We're LGPL. 2011-01-02 10:58:11 +01:00
makePatches.sh Cut fluff from patch headers. 2015-05-25 20:37:24 +10:00
pom.xml Update misc depends 2017-08-05 14:56:57 +10:00
README.md Update to Minecraft 1.12-pre2 2017-05-14 12:00:00 +10:00

CraftBukkit

An implementation of the Bukkit plugin API for Minecraft servers, currently maintained by SpigotMC.

Bug Reporting

The development team is very open to both bug and feature requests / suggestions. You can submit these on the JIRA Issue Tracker.

Compilation

CraftBukkit is a Java program which uses Maven 3 for compilation. To compile fresh from Git, simply perform the following steps:

  • Install Git using your preferred installation methods.
  • Download and run BuildTools

Some IDEs such as NetBeans can perform these steps for you. Any Maven capable Java IDE can be used to develop with CraftBukkit, however the current team's personal preference is to use NetBeans.

Contributing

Contributions of all sorts are welcome. To manage community contributions, we use the pull request functionality of Stash. In to gain access to Stash and create a pull request, you will first need to perform the following steps:

  • Create an account on JIRA.
  • Fill in the SpigotMC CLA and wait up to 24 hours for your Stash account to be activated. Please ensure that your username and email addresses match.
  • Log into Stash using your JIRA credentials.

Once you have performed these steps you can create a fork, push your code changes, and then submit it for review.

If you submit a PR involving both Bukkit and CraftBukkit, it's appreciated if each PR links the other. Additionally, every reference to an obfuscated field/method in NMS should be marked with // PAIL: Rename and optionally a suggested name, to make mapping creation easier. E.g.:

    entity.k.get(i).f(); // PAIL pathfinders, navigateToHome 

Also, make sure to include // Craftbukkit comments to indicate modified NMS sources.

Although the minimum requirement for compilation & usage is Java 8, we prefer all contributions to be written in Java 7 style code unless there is a compelling reason otherwise.