summaryrefslogtreecommitdiffstats
path: root/CONTRIBUTING.md
diff options
context:
space:
mode:
Diffstat (limited to 'CONTRIBUTING.md')
-rw-r--r--CONTRIBUTING.md40
1 files changed, 23 insertions, 17 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 83173a6af..0c36be8b7 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,35 +1,41 @@
Code Stuff
----------
- * Because some devs use MSVC2008, we use C++03 - no C++11 magic for now at least :(
+ * We use C++03 with some C++11 extensions (ask if you think that something would be useful)
* Use the provided wrappers for OS stuff:
- - Threading is done by inheriting from cIsThread, thread synchronization through cCriticalSection, cSemaphore and cEvent, file access and filesystem operations through the cFile class, high-precision timers through cTimer, high-precision sleep through cSleep
+ - Threading is done by inheriting from `cIsThread`, thread synchronization through `cCriticalSection`, `cSemaphore` and `cEvent`, file access and filesystem operations through the `cFile` class, high-precision timers through `cTimer`, high-precision sleep through `cSleep`
* No magic numbers, use named constants:
- - E_ITEM_XXX, E_BLOCK_XXX and E_META_XXX for items and blocks
- - E_ENTITY_TYPE_XXX for mob types
- - dimNether, dimOverworld and dimEnd for world dimension
- - gmSurvival, gmCreative, gmAdventure for game modes
- - wSunny, wRain, wThunderstorm for weather
- - cChunkDef::Width, cChunkDef::Height for chunk dimensions (C++)
+ - `E_ITEM_XXX`, `E_BLOCK_XXX` and `E_META_XXX` for items and blocks
+ - `cEntity::etXXX` for entity types, `cMonster::mtXXX` for mob types
+ - `dimNether`, `dimOverworld` and `dimEnd` for world dimension
+ - `gmSurvival`, `gmCreative`, `gmAdventure` for game modes
+ - `wSunny`, `wRain`, `wThunderstorm` for weather
+ - `cChunkDef::Width`, `cChunkDef::Height` for chunk dimensions (C++)
- etc.
- * Instead of checking for specific value, use Is functions, if available:
- - cPlayer:IsGameModeCreative() instead of (cPlayer:GetGameMode() == gmCreative)
- * Please use tabs for indentation and spaces for alignment. This means that if it's at line start, it's a tab; if it's in the middle of a line, it's a space
+ * Instead of checking for a specific value, use an `IsXXX` function, if available:
+ - `cPlayer:IsGameModeCreative()` instead of` (cPlayer:GetGameMode() == gmCreative)` (the player can also inherit the gamemode from the world, which the value-d condition doesn't catch)
+ * Please use **tabs for indentation and spaces for alignment**. This means that if it's at line start, it's a tab; if it's in the middle of a line, it's a space
* Alpha-sort stuff that makes sense alpha-sorting - long lists of similar items etc.
* Keep individual functions spaced out by 5 empty lines, this enhances readability and makes navigation in the source file easier.
* Add those extra parentheses to conditions, especially in C++
- - "if ((a == 1) && ((b == 2) || (c == 3)))" instead of ambiguous "if (a == 1 && b == 2 || c == 3)"
- - This helps prevent mistakes such as "if (a & 1 == 0)"
+ - `if ((a == 1) && ((b == 2) || (c == 3)))` instead of ambiguous `if (a == 1 && b == 2 || c == 3)`
+ - This helps prevent mistakes such as `if (a & 1 == 0)`
* White space is free, so use it freely
- "freely" as in "plentifully", not "arbitrarily"
+ * All `case` statements inside a `switch` need an extra indent.
* Each and every control statement deserves its braces. This helps maintainability later on when the file is edited, lines added or removed - the control logic doesn't break so easily.
- * Please leave the first line of all source files blank, to get around an IDE bug.
- * Also leave the last line of all source files blank (GCC and GIT can complain otherwise)
+ - The only exception: a `switch` statement with all `case` statements being a single short statement is allowed to use the short brace-less form.
+ - These two rules really mean that indent is governed by braces
+ * Add an empty last line in all source files (GCC and GIT can complain otherwise)
+ * Use doxy-comments for functions in the header file, format as `/** Description */`
+ * Use spaces after the comment markers: `// Comment` instead of `//Comment`
Copyright
---------
-Your work should be licensed under the Apache license, and you should add yourself to the CONTRIBUTORS file.
+Your work must be licensed at least under the Apache license.
-If your work is not licensed under the Apache license, then it must be compatible and marked as such. Note that only plugins may choose a different license; MC-server's internals need to be single-license.
+You can add yourself to the CONTRIBUTORS file if you wish.
+
+**PLUGINS ONLY**: If your plugin is not licensed under the Apache license, then it must be compatible and marked as such. This is only valid for the plugins included within the MCServer source; plugins developed on separate repositories can use whatever license they want.