How to contribute with code

by CoolJWB

Guidelines for the contribution of code

As a team, it is important that everyone can collaborate, therefore standards have been set that all code must follow. This document focuses on the development of Java plugins, however, the general rules apply to all code. As a general rule, everything must be in English. This applies to front-end (what users come in contact with) aswell as back-end (all project names, descriptions, variable names and comments).

Symbols:

(…) – Parentheses

[…] – Brackets

{…} – Braces, Curly brackets

〈…〉 - Angle brackets

IDE:

As IDE for Java plugins it is recommended to use IntelliJ with the plugin Minecraft Development installed.

Automatik:

Som verktyg så använder vi Gradles wrapper, om du är osäker på hur man använder eller installerar detta kontakta nuvarande ansvarig för dev teamet eller passade senior utvecklare.

För att bygga med Gradlew så navigera till rotmappen av ditt projekt med ex. Git bash, Kommandotolken, Powershell eller andra typer av skalprogram och exekvera “gradlew build” eller “./gradlew build”.

Nya projekt:

För att skapa ett nytt projekt så för en plugin hittar du de olika server typerna under fliken Minecraft Plugin och väljer sedan passande server typ gällande projektet.

Du ska använda “com.minexnetwork” som GroupId och ArtifactId skall endast vara namnet på projektet och inget annat. Utgångsversionen ska vara ”v0.1” och Gradle ska användas för automatik.

Du väljer nu en passande Minecraft version för projektet och beskriver sedan projektet kortfattat i beskrivningen. De utvecklare som är tilldelade projektet sätts som authors och webbsite ska vara satt till “minexnetwork.com”.

Kod och projektstruktur:

Bidrag av kod till ett projekt måste hålla sig till vissa standarder för att göra läsbarheten av koden lättare för alla.

Organisering:

För att få en gemensam struktur på filer och paket så ska alla paket och övriga filer vara i små bokstäver medans klassnamn ska alltid börja med stor bokstav där stor bokstav också sätts efter nya ord ex. EventManager, PlayerManager eller PacketUtils.

Kommando klasser ska placeras i ett paketet ”commands” och vara namngivna ”Command_” och sedan kommandot ex. ”Command_Heal”.

Klasser som hanterar event eller större delar av pluginen ska vara i paketet managers ex. ”CommandManager”.

Mindre klasser som ska hantera mindre områden och behövs i flera klasser placeras i paketet utils och heta ex. ”MojangUtils”.

Filer som är längre än 2000 rader är besvärliga och bör undvikas, försök att indela kod som används vid flera tillfällen till egna klasser.

Nya klasser:

En ny klass ska initieras av en dokumentation kommentar av klassen ovanför klass huvudet och under implementeringar.

/**
* This is a class that does this and that.
* Date: 2020-01-01
* @author [Head-Dev] William Bergh
*/

Indrag och rader:

Alla rader efter måsvingar eller efter huvuden av kontrollstrukturer ska flyttas 4 mellanslag till höger (använd tab).

Kommentarer:

En generell regel som ska strävas att uppnå är att all kod ska vara så väl kommenterad så att ingen ska behöva fråga vad det gör. Här följer några exempel på hur kommentarer bör vara strukturerade.

/* This is a one-line comment */
/*
* This is a
* multi line
* comment.
*/

Dokument kommentarer ska också användas före metoder.

/**
* A method that does multiplication.
* @param firstNumber The first number to multiply.
* @param secondNumber The second number to multiply.
* @returns The product of the first and second number.
*/

Variabler:

Globala variabler (variabler som används i flera metoder/klasser) skall deklareras under klass huvudet. Istället om variabeln endast används i en metod så ska den deklareras lokalt.

Om en variabel behövs globalt så ska getters och setters användas.

Variabelnamnet ska börja med liten bokstav och om variabelnamnet är sammansatt av olika ord så ska det andra och följande ord börja med stor bokstav.

Metoder:

För enkelhetens skull så ska metoder vara väl dokumenterade med dokument kommentarer eller vanliga kommentarer (beroende på vad språket stöder) ovanför metoden. Denna ska innehålla vad metoden gör, parametrarna och vad den returnerar (om detta finns).

Selektioner:

Eftersom det blir lätt fel om if selektioner saknar klammerparanteser så är det ett krav att en if selektion har klammerparanteser (såvida det inte är en terny operator).

Som standard så ska if selektioner ha klammerparanteser på samma rad och elses ska ha klammerparanteser både före och efter.

if (statement) {
// Kod
} else if (statement) {
// Kod
} else {
// Kod
}