High performance Spigot fork that aims to fix gameplay and mechanics inconsistencies
Go to file
Mike Primm 32924f9757 [Bleeding] Fix corruption due to thread safety issues. Fixes BUKKIT-3333
The 'tag' NBTTagCompound field of the ItemStack assumes that it is OK to
save a reference to an NBT supplied via load() and assumes it is OK to
supply a reference to the internal field during a save(). Neither is true,
as Chunk NBT structures are required to be read-only once created (due to
being written asynchronously off the server thread AND due to the potential
to be passed to a new Chunk if the same chunk is reloaded before the
writing of the NBT is completed by the File I/O thread). Keeping a live
reference to the NBT copy passed in, or to the NBT value passed back
during saving, creates serious thread safety issues which can result in
corrupted data being written to the world data files.

The specific issue here was uncovered by the recent change to use
setName("") on the ItemStack.tag object. When a chunk is being loaded
again before its save is completed, this results in name of the field
in the NBT being set to "". This causes it to be saved as "" instead
of "tag" resulting in it not being properly reloaded in the future which
results in the itemstack losing all of its metadata.
2012-12-30 23:31:22 -06:00
src [Bleeding] Fix corruption due to thread safety issues. Fixes BUKKIT-3333 2012-12-30 23:31:22 -06:00
.gitignore Ignore minecraft resources in src directory 2011-11-29 21:20:14 +11: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
pom.xml Updated version to 1.4.6-R0.3-SNAPSHOT for development towards next release. 2012-12-29 22:27:49 -05:00
README.md Updated README.md with more coding and pull request conventions and tips to get your pull request accepted. 2012-02-24 00:09:53 -05:00

CraftBukkit

A Bukkit (Minecraft Server API) implementation

Website: http://bukkit.org
Bugs/Suggestions: http://leaky.bukkit.org

Compilation

We use maven to handle our dependencies.

  • Install Maven 3
  • Check out and install Bukkit
    • Note: this is not needed as the repository we use has Bukkit too, but you might have a newer one (with your own changes :D)
  • Check out this repo and: mvn clean package

Coding and Pull Request Conventions

  • We generally follow the Sun/Oracle coding standards.
  • No tabs; use 4 spaces instead.
  • No trailing whitespaces.
  • No CRLF line endings, LF only, put your gits 'core.autocrlf' on 'true'.
  • No 80 column limit or 'weird' midstatement newlines.
  • The number of commits in a pull request should be kept to a minimum (squish them into one most of the time - use common sense!).
  • No merges should be included in pull requests unless the pull request's purpose is a merge.
  • Pull requests should be tested (does it compile? AND does it work?) before submission.
  • Any major additions should have documentation ready and provided if applicable (this is usually the case).
  • Most pull requests should be accompanied by a corresponding Leaky ticket so we can associate commits with Leaky issues (this is primarily for changelog generation on dl.bukkit.org).
  • Try to follow test driven development where applicable.

If you make changes or add net.minecraft.server classes it is mandatory to:

  • Get the files from the mc-dev repo - make sure you have the last version!
  • Make a separate commit adding the new net.minecraft.server classes (commit message: "Added x for diff visibility" or so).
  • Then make further commits with your changes.
  • Mark your changes with:
    • 1 line; add a trailing: // CraftBukkit [- Optional reason]
    • 2+ lines; add
      • Before: // CraftBukkit start [- Optional comment]
      • After: // CraftBukkit end
  • Keep the diffs to a minimum (really important)

Tips to get your pull request accepted

Making sure you follow the above conventions is important, but just the beginning. Follow these tips to better the chances of your pull request being accepted and pulled.

  • Make sure you follow all of our conventions to the letter.
  • Make sure your code compiles under Java 5.
  • Provide proper JavaDocs where appropriate.
  • Provide proper accompanying documentation where appropriate.
  • Test your code.
  • Make sure to follow coding best practises.
  • Provide a test plugin binary and source for us to test your code with.
  • Your pull request should link to accompanying pull requests.
  • The description of your pull request should provide detailed information on the pull along with justification of the changes where applicable.