anchor.diff:  
   === Creating plugins and components
   
  -*  <<sdk/development/setup#,Creating a plugin>>
  -*  <<sdk/development/general#,Creating components>>
  -*  <<sdk/build_platform#,Building the jME SDK from scratch>> (not necessary for plugin development, only for contributors)
  +*  xref:development/setup.adoc[Creating a plugin]
  +*  xref:development/general.adoc[Creating components]
  +*  xref:build_platform.adoc[Building the jME SDK from scratch] (not necessary for plugin development, only for contributors)
   
   
   === Extending jMonkeyEngine SDK
   
  -*  <<sdk/development/scene#,The Main Scene>>
  -*  <<sdk/development/sceneexplorer#,The Scene Explorer>>
  -*  <<sdk/development/projects_assets#,Projects and Assets>>
  +*  xref:development/scene.adoc[The Main Scene]
  +*  xref:development/sceneexplorer.adoc[The Scene Explorer]
  +*  xref:development/projects_assets.adoc[Projects and Assets]
   
   
   === Recipes
   
  -*  <<sdk/development/extension_library#,Create a library plugin from a jar file>>
  -*  <<sdk/development/model_loader#,Create a new or custom model filetype and loader>>
  +*  xref:development/extension_library.adoc[Create a library plugin from a jar file]
  +*  xref:development/model_loader.adoc[Create a new or custom model filetype and loader]
   
   
   === General Notes
   
   *  *Remember the scene runs on the render thread and most everything you do in the plugin (button events etc.) runs on the AWT thread, always encapsulate calls to either side correctly via Callables/Runnables or register as an AppState to the SceneApplication to have an update() call by the render thread.*
   *  Although the scene can be accessed at any time via SceneApplication.getApplication() it is not recommended to modify the scene like that. Other plugins might be accessing the scene and updates will not be properly recognized. Use the sceneRequest object and the lookup of selected nodes and files to access things like the assetManager etc.
  -*  It became a standard in jMonkeyEngine SDK to start the name of methods that execute directly on the OpenGL thread with “do e.g “doMoveSpatial, this makes identifying threading issues easier.
  +*  It became a standard in jMonkeyEngine SDK to start the name of methods that execute directly on the OpenGL thread with "`do`" e.g "`doMoveSpatial`", this makes identifying threading issues easier.
   *  The AssetManager of jme3 is threadsafe and can be used from any thread to load assets
   *  You can get access to the ProjectAssetManager via the Lookup of a JmeSpatial and other objects
  -*  Use org.openide.filesystems.FileObject instead of java.io.File for file access, it always uses system-independent “/ path separators and has some more advanced functions that make file handling easier.
  -*  You can get a file from a string using Repository.getDefault().getDefaultFileSystem().getRoot().getFileObject(“aaa/bbb/ccc/whatever);
  +*  Use org.openide.filesystems.FileObject instead of java.io.File for file access, it always uses system-independent "`/`" path separators and has some more advanced functions that make file handling easier.
  +*  You can get a file from a string using Repository.getDefault().getDefaultFileSystem().getRoot().getFileObject("`aaa/bbb/ccc/whatever`");
   *  You can convert a regular java File to a FileObject and vice versa using org.openide.filesystems.FileUtil
   *  If you have problems with unresolved classes, check if all needed Libraries are registered in the settings of your Project. To find out which library contains a certain class, just enter the name in the library search field.
   
   
   === Teminology used here
   
  -*  A “plugin” is anything you can tick in the plugin manager of the SDK. It can contain editors, simple “Java SE Libraries” that you can add to your projects as jar files and other things like project templates etc.
  -*  A “module” is the project type that allows you to create plugins, strictly speaking all plugins are modules but there can be modules that are never shown in the plugin list and only exist as dependencies of other modules.
  -*  A “library” is an entry for a jar file (and optionally sources and javadocs) which can be added to a SDK project to be used and distributed with it
  -*  An “extension” is a generic name for stuff that extends the jME engine, like pathfinding algorithms or anything that can be used at the game runtime..
  +*  A "`plugin`" is anything you can tick in the plugin manager of the SDK. It can contain editors, simple "`Java SE Libraries`" that you can add to your projects as jar files and other things like project templates etc.
  +*  A "`module`" is the project type that allows you to create plugins, strictly speaking all plugins are modules but there can be modules that are never shown in the plugin list and only exist as dependencies of other modules.
  +*  A "`library`" is an entry for a jar file (and optionally sources and javadocs) which can be added to a SDK project to be used and distributed with it
  +*  An "`extension`" is a generic name for stuff that extends the jME engine, like pathfinding algorithms or anything that can be used at the game runtime..
   
   So if you have some cool code that others can use in their games too, you would make your extension a library by creating a module that the users can download as a plugin :)
   
  
positive.code: = development
  :author:
  :revnumber:
  :revdate: 2016/03/17 20:48
  :keywords: documentation, sdk, contribute
  :relfileprefix: ../
  :imagesdir: ..
  ifdef::env-github,env-browser[:outfilesuffix: .adoc]
  
  
  
  == Developing for jMonkeyEngine SDK
  
negative.code: === Handy things in jMonkeyEngine SDK Core
  
  *  com.jme3.gde.core.scene.controller
  **  AbstractCameraController → A basic camera control for plugins, used by SimpleSceneComposer and "`View Model`"
  **  SceneToolController → A basic controller for having selection, cursor etc. displayed in the scene, used by SimpleSceneComposer
  
  *  com.jme3.gde.core.scene
  