:toc:
:toclevels: 2

= Fawe annotations explained

If we have modified parts of the WorldEdit codebase, we considered annotating it with different styles of comments, which
are explained in this document.

== In-line annotations

[source,java]
-----------------
public static Player adapt(com.sk89q.worldedit.entity.Player player) {
        //FAWE start - Get player from PlayerProxy instead of BukkitPlayer if null
        player = PlayerProxy.unwrap(player);
        return player == null ? null : ((BukkitPlayer) player).getPlayer();
        //FAWE end
}
-----------------
The `-sources` jar retains comments, if you add the FAWE API to your maven or gradle project, you can view differences between the projects with ease.
Behind the `//FAWE start - ` you can find a comment what has been changed and why it has been changed.

== Block annotations

[source,java]
-----------------
//FAWE start
    @Override
    public void setPermission(String permission, boolean value) {
    }
//FAWE end
-----------------
Annotations can cover whole methods or go beyond the method and wrap around several added methods.

== Package annotations
Class additions are added under the `com.fastasyncworldedit` namespace, but sometimes classes need to be added in package private.
If that is done, you can find a `package-info.java` file within the package affected that outlines FAWE added classes:
[source,java]
-----------------
/**
* The following classes are FAWE additions:
*
* @see com.sk89q.worldedit.world.block.BlockTypesCache
*/
package com.sk89q.worldedit.world.block;
-----------------

== Undocumented annotations
Specific changes are not annotated:

* `com.fastasyncworldedit.core.configuration.Caption` in `com.sk89q.worldedit` packages have been changed from
`com.sk89q.worldedit.util.formatting.text.Text` to allow the usage of color codes for messages.

* Certain Log4J loggers have been adjusted to use the proper format of placeholders.