From 6921e6f2aa12c3702369d2dabcf227f3ecf2d786 Mon Sep 17 00:00:00 2001 From: Intyre Date: Fri, 25 Jul 2014 06:58:57 +0200 Subject: [PATCH] docs for pocketmine-mp.readthedocs.org --- .gitignore | 6 +- docs/Makefile | 177 ++++++++++++ docs/README.md | 15 ++ docs/make.bat | 242 +++++++++++++++++ docs/requirements.txt | 2 + docs/source/conf.py | 334 +++++++++++++++++++++++ docs/source/config.rst | 428 ++++++++++++++++++++++++++++++ docs/source/developers.rst | 25 ++ docs/source/faq.rst | 71 +++++ docs/source/git.rst | 61 +++++ docs/source/img/PocketMine.png | Bin 0 -> 11651 bytes docs/source/img/create-issue.png | Bin 0 -> 47368 bytes docs/source/img/git-clone-url.png | Bin 0 -> 15193 bytes docs/source/img/git-fork.png | Bin 0 -> 12196 bytes docs/source/index.rst | 19 ++ docs/source/intro.rst | 26 ++ docs/source/issues.rst | 20 ++ docs/source/plugins.rst | 78 ++++++ docs/source/require.rst | 35 +++ docs/source/setup.rst | 74 ++++++ docs/source/update.rst | 37 +++ 21 files changed, 1649 insertions(+), 1 deletion(-) create mode 100644 docs/Makefile create mode 100644 docs/README.md create mode 100644 docs/make.bat create mode 100644 docs/requirements.txt create mode 100644 docs/source/conf.py create mode 100644 docs/source/config.rst create mode 100644 docs/source/developers.rst create mode 100644 docs/source/faq.rst create mode 100644 docs/source/git.rst create mode 100644 docs/source/img/PocketMine.png create mode 100644 docs/source/img/create-issue.png create mode 100644 docs/source/img/git-clone-url.png create mode 100644 docs/source/img/git-fork.png create mode 100644 docs/source/index.rst create mode 100644 docs/source/intro.rst create mode 100644 docs/source/issues.rst create mode 100644 docs/source/plugins.rst create mode 100644 docs/source/require.rst create mode 100644 docs/source/setup.rst create mode 100644 docs/source/update.rst diff --git a/.gitignore b/.gitignore index b394e4e51c..e4bc658d0e 100644 --- a/.gitignore +++ b/.gitignore @@ -20,4 +20,8 @@ Desktop.ini # Mac crap .DS_Store -/nbproject/private/ \ No newline at end of file +/nbproject/private/ + +# Sphinx-doc +/docs/build/ +!/docs/requirements.txt diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000000..9557e36d49 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,177 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = build + +# User-friendly check for sphinx-build +ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) +$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) +endif + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " xml to make Docutils-native XML files" + @echo " pseudoxml to make pseudoxml-XML files for display purposes" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/PocketMine-MP.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/PocketMine-MP.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/PocketMine-MP" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/PocketMine-MP" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +latexpdfja: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through platex and dvipdfmx..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." + +xml: + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml + @echo + @echo "Build finished. The XML files are in $(BUILDDIR)/xml." + +pseudoxml: + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml + @echo + @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000000..d8ab0a3562 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,15 @@ +PocketMine-MP Documentation +=========================== + +PocketMine-MP Documentation for http://pocketmine-mp.readthedocs.org/ + +Build local +----------- + +To build the documentation you need python and 2 extra modules. + +* Sphinx +* sphinx_rtd_theme + +or install it using `pip -r requirements` + diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 0000000000..0e17f6ac90 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,242 @@ +@ECHO OFF + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set BUILDDIR=build +set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% source +set I18NSPHINXOPTS=%SPHINXOPTS% source +if NOT "%PAPER%" == "" ( + set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% + set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% +) + +if "%1" == "" goto help + +if "%1" == "help" ( + :help + echo.Please use `make ^` where ^ is one of + echo. html to make standalone HTML files + echo. dirhtml to make HTML files named index.html in directories + echo. singlehtml to make a single large HTML file + echo. pickle to make pickle files + echo. json to make JSON files + echo. htmlhelp to make HTML files and a HTML help project + echo. qthelp to make HTML files and a qthelp project + echo. devhelp to make HTML files and a Devhelp project + echo. epub to make an epub + echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter + echo. text to make text files + echo. man to make manual pages + echo. texinfo to make Texinfo files + echo. gettext to make PO message catalogs + echo. changes to make an overview over all changed/added/deprecated items + echo. xml to make Docutils-native XML files + echo. pseudoxml to make pseudoxml-XML files for display purposes + echo. linkcheck to check all external links for integrity + echo. doctest to run all doctests embedded in the documentation if enabled + goto end +) + +if "%1" == "clean" ( + for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i + del /q /s %BUILDDIR%\* + goto end +) + + +%SPHINXBUILD% 2> nul +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +if "%1" == "html" ( + %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/html. + goto end +) + +if "%1" == "dirhtml" ( + %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. + goto end +) + +if "%1" == "singlehtml" ( + %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. + goto end +) + +if "%1" == "pickle" ( + %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the pickle files. + goto end +) + +if "%1" == "json" ( + %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the JSON files. + goto end +) + +if "%1" == "htmlhelp" ( + %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run HTML Help Workshop with the ^ +.hhp project file in %BUILDDIR%/htmlhelp. + goto end +) + +if "%1" == "qthelp" ( + %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run "qcollectiongenerator" with the ^ +.qhcp project file in %BUILDDIR%/qthelp, like this: + echo.^> qcollectiongenerator %BUILDDIR%\qthelp\PocketMine-MP.qhcp + echo.To view the help file: + echo.^> assistant -collectionFile %BUILDDIR%\qthelp\PocketMine-MP.ghc + goto end +) + +if "%1" == "devhelp" ( + %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. + goto end +) + +if "%1" == "epub" ( + %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The epub file is in %BUILDDIR%/epub. + goto end +) + +if "%1" == "latex" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "latexpdf" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + cd %BUILDDIR%/latex + make all-pdf + cd %BUILDDIR%/.. + echo. + echo.Build finished; the PDF files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "latexpdfja" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + cd %BUILDDIR%/latex + make all-pdf-ja + cd %BUILDDIR%/.. + echo. + echo.Build finished; the PDF files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "text" ( + %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The text files are in %BUILDDIR%/text. + goto end +) + +if "%1" == "man" ( + %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The manual pages are in %BUILDDIR%/man. + goto end +) + +if "%1" == "texinfo" ( + %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. + goto end +) + +if "%1" == "gettext" ( + %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The message catalogs are in %BUILDDIR%/locale. + goto end +) + +if "%1" == "changes" ( + %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes + if errorlevel 1 exit /b 1 + echo. + echo.The overview file is in %BUILDDIR%/changes. + goto end +) + +if "%1" == "linkcheck" ( + %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck + if errorlevel 1 exit /b 1 + echo. + echo.Link check complete; look for any errors in the above output ^ +or in %BUILDDIR%/linkcheck/output.txt. + goto end +) + +if "%1" == "doctest" ( + %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest + if errorlevel 1 exit /b 1 + echo. + echo.Testing of doctests in the sources finished, look at the ^ +results in %BUILDDIR%/doctest/output.txt. + goto end +) + +if "%1" == "xml" ( + %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The XML files are in %BUILDDIR%/xml. + goto end +) + +if "%1" == "pseudoxml" ( + %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. + goto end +) + +:end diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 0000000000..ab3f3dd415 --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,2 @@ +Sphinx +sphinx_rtd_theme diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 0000000000..0af437f910 --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,334 @@ +# -*- coding: utf-8 -*- +# +# PocketMine-MP documentation build configuration file, created by +# sphinx-quickstart on Mon Jul 21 07:51:00 2014. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys +import os + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'PocketMine-MP' +copyright = u'2014, PocketMine Team' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '1.4' +# The full version, including alpha/beta/rc tags. +release = 'Alpha 1.4dev' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = [] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built documents. +#keep_warnings = False + + +# -- Options for HTML output ---------------------------------------------- +# on_rtd is whether we are on readthedocs.org +on_rtd = os.environ.get('READTHEDOCS', None) == 'True' + +if not on_rtd: # only import and set the theme if we're building docs locally + import sphinx_rtd_theme + html_theme = 'sphinx_rtd_theme' + html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +#html_theme = 'default' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +#html_extra_path = [] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +html_show_sphinx = False + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'PocketMine-MPDocsdoc' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { +# The paper size ('letterpaper' or 'a4paper'). +#'papersize': 'letterpaper', + +# The font size ('10pt', '11pt' or '12pt'). +#'pointsize': '10pt', + +# Additional stuff for the LaTeX preamble. +#'preamble': '', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ('index', 'PocketMine-MPDocs.tex', u'PocketMine-MP Documentation', + u'Intyre', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'pocketmine-mpdocs', u'PocketMine-MP Documentation', + [u'Intyre'], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ('index', 'PocketMine-MPDocs', u'PocketMine-MP Documentation', + u'Intyre', 'PocketMine-MPDocs', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +#texinfo_no_detailmenu = False + +# -- Options for Epub output ---------------------------------------------- + +# Bibliographic Dublin Core info. +epub_title = u'PocketMine-MP' +epub_author = u'PocketMine Team' +epub_publisher = u'PocketMine' +epub_copyright = u'2014, PocketMine' + +# The basename for the epub file. It defaults to the project name. +#epub_basename = u'MCPE Tools' + +# The HTML theme for the epub output. Since the default themes are not optimized +# for small screen space, using the same theme for HTML and epub output is +# usually not wise. This defaults to 'epub', a theme designed to save visual +# space. +#epub_theme = 'epub' + +# The language of the text. It defaults to the language option +# or en if the language is not set. +epub_language = 'en' + +# The scheme of the identifier. Typical schemes are ISBN or URL. +#epub_scheme = '' + +# The unique identifier of the text. This can be a ISBN number +# or the project homepage. +#epub_identifier = '' + +# A unique identification for the text. +#epub_uid = '' + +# A tuple containing the cover image and cover page html template filenames. +#epub_cover = () + +# A sequence of (type, uri, title) tuples for the guide element of content.opf. +#epub_guide = () + +# HTML files that should be inserted before the pages created by sphinx. +# The format is a list of tuples containing the path and title. +#epub_pre_files = [] + +# HTML files shat should be inserted after the pages created by sphinx. +# The format is a list of tuples containing the path and title. +#epub_post_files = [] + +# A list of files that should not be packed into the epub file. +epub_exclude_files = ['search.html'] + +# The depth of the table of contents in toc.ncx. +#epub_tocdepth = 3 + +# Allow duplicate toc entries. +#epub_tocdup = True + +# Choose between 'default' and 'includehidden'. +#epub_tocscope = 'default' + +# Fix unsupported image types using the PIL. +#epub_fix_images = False + +# Scale large images. +#epub_max_image_width = 0 + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#epub_show_urls = 'inline' + +# If false, no index is generated. +epub_use_index = False diff --git a/docs/source/config.rst b/docs/source/config.rst new file mode 100644 index 0000000000..9b5e840255 --- /dev/null +++ b/docs/source/config.rst @@ -0,0 +1,428 @@ +.. _config: + +Configuration +============= +.. contents:: + :depth: 2 + +Basic settings +-------------- +When you start the server for the first time you will get a set-up wizard. + +Set-up wizard +------------- +.. code-block:: text + + PocketMine-MP/ $ ./start.sh + [*] PocketMine-MP set-up wizard + [*] Please select a language: + English => en + Español => es + 中文 => zh + Pyccĸий => ru + 日本語 => ja + Deutsch => de + 한국어 => ko + Français => fr + Italiano => it + Nederlands => nl + Svenska => sv + Suomi => fi + Türkçe => tr + [?] Language (en): + +Choose the language you want and press enter + +.. code-block:: text + + [?] Language (en): en + +.. code-block:: text + + [*] English has been correctly selected. + Welcome to PocketMine-MP! + Before starting setting up your new server you have to accept the license. + PocketMine-MP is licensed under the LGPL License, + that you can read opening the LICENSE file on this folder. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + +.. code-block:: text + + [?] Do you accept the License? (y/N): y + [?] Do you want to skip the set-up wizard? (y/N): + +If this is not the first time or you already have a custom properties file you can skip the wizard. + +.. code-block:: text + + [?] Do you want to skip the set-up wizard? (y/N): n + +.. code-block:: text + + [*] You are going to set up your server now. + [*] If you don't want to change the default value, just press Enter. + [*] You can edit them later on the server.properties file. + [?] Give a name to your server (Minecraft: PE Server): + [*] Do not change the default port value if this is your first server. + [?] Server port (19132): + [*] The RAM is the maximum amount of memory PocketMine-MP will use. A value of 128-256 MB is recommended + [?] Server RAM in MB (256): + [*] Choose between Creative (1) or Survival (0) + [?] Default Game mode: (0): + [?] Max. online players (20): + [*] The spawn protection disallows placing/breaking blocks in the spawn zone except for OPs + [?] Enable spawn protection? (Y/n): + [*] An OP is the player admin of the server. OPs can run more commands than normal players + [?] OP player name (example, your game name): + [!] You will be able to add an OP user later using /op + [*] The white-list only allows players in it to join. + [?] Do you want to enable the white-list? (y/N): + [!] Query is a protocol used by diferent tools to get information of your server and players logged in. + [!] If you disable it, you won't be able to use server lists. + [?] Do you want to disable Query? (y/N): + [*] RCON is a protocol to remote connect with the server console using a password. + [?] Do you want to enable RCON? (y/N): + [*] Getting your external IP and internal IP + [!] Your external IP is *.*.*.*. You may have to port-forward to your internal *.*.*.* + [!] Be sure to check it, if you have to forward and you skip that, no external players will be able to join. [Press Enter][*] You have finished the set-up wizard correctly + [*] Check the Plugin Repository to add new features, minigames, or advanced protection to your server + [*] PocketMine-MP will now start. Type /help to view the list of available commands. + +Everything is now configurated. PocketMine will now start. + +.. code-block:: text + + 19:01:52 [INFO] Starting Minecraft: PE server version v0.9.1 alpha + 19:01:52 [INFO] Loading pocketmine.yml... + 19:01:52 [INFO] Loading server properties... + 19:01:52 [INFO] Starting Minecraft PE server on *:19132 + 19:01:52 [INFO] This server is running PocketMine-MP version Alpha_1.4dev "絶好(Zekkou)ケーキ(Cake)" (API 1.1.0) + 19:01:52 [INFO] PocketMine-MP is distributed under the LGPL License + 19:01:52 [NOTICE] Level "world" not found + 19:01:52 [INFO] Preparing level "world" + 19:01:52 [NOTICE] Spawn terrain for level "world" is being generated in the background + 19:01:52 [INFO] Starting GS4 status listener + 19:01:52 [INFO] Setting query port to 19132 + 19:01:52 [INFO] Query running on 0.0.0.0:19132 + 19:01:52 [INFO] Default game type: SURVIVAL + 19:01:52 [INFO] Done (4941.533s)! For help, type "help" or "?" + +When there are no errors and you see the same message then the server is started. Now you should be able to join the server! + +Server properties +----------------- + +.. contents:: + :local: + + +allow-flight +++++++++++++ + +======= ========= +Type Default +======= ========= +boolean false +======= ========= + +Allows users to use flight on your server while in Survival mode, if they have a mod that provides flight installed. If enabled, they will be kicked after flying for 5 seconds. Disabling this will remove the player speed limit. + +difficulty +++++++++++ + +============= ========= +Type Default +============= ========= +integer (0-3) 1 +============= ========= + +Level of difficulty of the game, Survival/Adventure mode only. + +0. Peaceful +1. Easy +2. Normal +3. Hard + +enable-query +++++++++++++ + +======= ========= +Type Default +======= ========= +boolean true +======= ========= + +Enables the GameSpy4 UT3 Query Protocol server listener. Used to get information about the server. It'll listen on the same port as the server (using the same UDP interface). + +enable-rcon ++++++++++++ + +======= ========= +Type Default +======= ========= +boolean false +======= ========= + +RCON is a protocol to allow remote access to the server console. It'll listen y default on the same port as the server, but using TCP. You can also set the `rcon.port`, `rcon.threads` and `rcon.clients-per-thread` properties, but you'll have to manually add them. + +rcon.password ++++++++++++++ + +====== ============ +Type Default +====== ============ +string random value +====== ============ + +The password that RCON will check. And empty string will cause all the requests to be refused. + +gamemode +++++++++ + +============= ========= +Type Default +============= ========= +integer (0-3) 0 +============= ========= + +Defines the mode of gameplay. + +0. Survival +1. Creative +2. Adventure +3. Spectator` + +generator-settings +++++++++++++++++++ + +====== ========= +Type Default +====== ========= +string blank +====== ========= + +The settings used to customize Superflat world generation. See `Superflat on the MC Wiki `_ for possible settings and examples. + +hardcore +++++++++ + +======= ========= +Type Default +======= ========= +boolean false +======= ========= + +If enabled, players will be permanently banned if they die. + +level-name +++++++++++ + +====== ========= +Type Default +====== ========= +string world +====== ========= + +Default world name. If it doesn't exist, the server will create a new one using the Default generator. + +level-seed +++++++++++ + +====== ========= +Type Default +====== ========= +string blank +====== ========= + +A seed for your world. + +level-type +++++++++++ + +====== ========= +Type Default +====== ========= +string DEFAULT +====== ========= + +Determines the type of map that is generated. `DEFAULT => Standard world, FLAT => A flat world` + +max-players ++++++++++++ + +======= ========= +Type Default +======= ========= +integer 20 +======= ========= + +The maximum number of players that can play on the server at the same time. + +server-type ++++++++++++ + +====== ========= +Type Default +====== ========= +string normal +====== ========= + +Defines server type shown in server list. `normal, minecon` + +server-name ++++++++++++ + +====== ==================== +Type Default +====== ==================== +string Minecraft: PE Server +====== ==================== + +Server name in the Client server list. + +description ++++++++++++ + +====== =============================== +Type Default +====== =============================== +string Server made using PocketMine-MP +====== =============================== + +Marquee shown in the Client server list. + +motd +++++ + +====== =============================== +Type Default +====== =============================== +string Welcome @player to this server! +====== =============================== + +Message that is sent to welcome a player. + +pvp ++++ + +======= ========= +Type Default +======= ========= +boolean true +======= ========= + +Enable PvP on the server, allowing players to damage each other directly. + +server-port ++++++++++++ + +================= ========= +Type Default +================= ========= +integer (1-65534) 19132 +================= ========= + +Port that the server will listen on. Note that the client will only show servers on the range 19132-19135. To be accesible over the internet, this port must be `forwarded `_ if the server is hosted in a network using `NAT `_ (If you have a home router/firewall). + +server-usage +++++++++++++ + +======= ========= +Type Default +======= ========= +boolean true +======= ========= + +Sends anonymous usage data to PocketMine.net, including the release version, online users and OS (Win, Linux, Mac). These are shown `here `_. + +spawn-animals ++++++++++++++ + +======= ========= +Type Default +======= ========= +boolean true +======= ========= + +Determines if animals will be able to spawn. Random spawns will be implemented in the future. + +spawn-monsters +++++++++++++++ + +======= ========= +Type Default +======= ========= +boolean true +======= ========= + +Determines if monsters will be able to spawn. Random spawns will be implemented in the future. + +spawn-protection +++++++++++++++++ + +======= ========= +Type Default +======= ========= +integer 16 +======= ========= + +Determines the radius of the spawn protection. Only OPs will be able to place/break blocks inside. Note: Setting this to 0 will not disable spawn protection. 0 will protect the single block at the spawn point. You can disable this using -1 as the value. + +view-distance ++++++++++++++ + +======= ========= +Type Default +======= ========= +integer 10 +======= ========= + +Sets the amount of world data the server sends the client, measured in chunks in each direction of the player. + +white-list +++++++++++ + +======= ========= +Type Default +======= ========= +boolean false +======= ========= + +Enables or disables whitelisting. + +upnp-forwarding ++++++++++++++++ + +======= ========= +Type Default +======= ========= +boolean false +======= ========= + +Only available on Windows. Tries UPnP automatic port forwarding. + +memory-limit +++++++++++++ + +========================== ========= +Type Default +========================== ========= +integer (plus unit suffix) 128M +========================== ========= + +Maximum memory that the server will allocate. The server won't work correctly with less than 128M + +debug.level ++++++++++++ + +======= ========= +Type Default +======= ========= +integer 1 +======= ========= + +Changes the log output. Max output level is 4 diff --git a/docs/source/developers.rst b/docs/source/developers.rst new file mode 100644 index 0000000000..a3aec9ab54 --- /dev/null +++ b/docs/source/developers.rst @@ -0,0 +1,25 @@ +.. _developers: + +Developers Information +====================== + +Contributing Code +----------------- +* Use the `Pull Request system `_, your request will be checked and discussed. +* Create a single branch for that pull request +* Code using the syntax as in PocketMine-MP. See below for an example. +* The code must be clear and written in English, comments included. + +:doc:`git` + +Check the `Contribution Guidelines `_ on github for more information. + +*Thanks for contributing to PocketMine-MP!* + +API Documentation +----------------- +Read the documentation on `docs.pocketmine.net `_ or the latest on `jenkins.pocketmine.net `_ + +Extending PocketMine-MP +----------------------- +PocketMine-MP has an API that you can use to add new things. For more information look at the :doc:`plugins ` page. diff --git a/docs/source/faq.rst b/docs/source/faq.rst new file mode 100644 index 0000000000..8b633b3127 --- /dev/null +++ b/docs/source/faq.rst @@ -0,0 +1,71 @@ +.. _faq: + +FAQ - Frequently Asked Questions +================================ + +.. contents:: + :local: + :depth: 2 + +Installation +------------ + +How do I install PHP? / How do I install this Server? ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +Check the installation instructions on the :ref:`installation ` page. + +Failed loading opcache.so ++++++++++++++++++++++++++ +This will fail when you did not use the installer. This can be fixed with a single command. + +.. code-block:: sh + + sed "s/^zend_extension=.*opcache.so/zend_extension=$(find $(pwd) -name opcache.so | sed 's/\//\\\//g')/g" \ + bin/php5/bin/php.ini | tee bin/php5/bin/php.ini + +Playing +------- + +Can PC Minecraft clients connect to this server ++++++++++++++++++++++++++++++++++++++++++++++++ +No + +Plugins +------- + +How do I install Plugins +++++++++++++++++++++++++ +Download the ``.phar`` file and move it to the ``plugins`` folder + +Can i use .php files +++++++++++++++++++++ +Yes, but only when the `DevTools `_ plugin is installed and the plugin/PocketMine API versions are both the same + +Connecting +---------- + +How do I connect to the server? ++++++++++++++++++++++++++++++++ +* Tap Play -> Edit -> External, then fill in the server details +* If it is in your local network, you will find it highlighted on the play menu, without needing to add it + +Can other users connect to my server +++++++++++++++++++++++++++++++++++++ +Users on the same network are able to join the server. If you want other people from outside your own network to be able to join then you need to port-forward + +Do I have to open ports? +++++++++++++++++++++++++ +If you have a firewall setup then you need to allow access to ``UDP port 19132`` + +.. note:: + + Do you want to use **RCON** then ``TCP port 19132`` also needs access. + +Do I have to configure port forwarding? ++++++++++++++++++++++++++++++++++++++++++++ +This is only needed when you want people from outside your network to connect. Check `portforward.com `_ or us `Google `_ to find the instructions + +.. note:: + + * UDP port: 19132 for PocketMine and Query + * TCP port: 19132 for RCON diff --git a/docs/source/git.rst b/docs/source/git.rst new file mode 100644 index 0000000000..bfb0bb464c --- /dev/null +++ b/docs/source/git.rst @@ -0,0 +1,61 @@ +.. _git: + +How to use git +============== + +Clone PocketMine-MP +------------------- +Get the clone URL from `PocketMine/PocketMine-MP `_ + +.. code-block:: sh + + $ git clone git@github.com:PocketMine/PocketMine-MP.git PocketMine-MP.git # clone the original repository into PocketMine-MP.git + $ cd PocketMine-MP.git # change directory to PocketMine-MP.git + + +How to make a pull request +-------------------------- +Go to the `PocketMine/PocketMine-MP `_ repository and hit the **Fork** button. You should now have a forked repo from **PocketMine/PocketMine-MP** in your own repositories. + +.. image:: img/git-fork.png + +Get the clone URL from the fork and clone it into another directory: + +.. code-block:: sh + + $ git clone git clone PocketMine-MP-Fork.git # clone the original repository into PocketMine-MP-Fork.git + $ git checkout -b feature # create and switch to branch feature (it can be any name) + $ git branch # shows current branch + * feature # current branch + master + +Make your changes to the code and commit it: + +.. note:: + Only commit changes described in the commit message + +.. code-block:: sh + + $ git status # check the status + $ git add # add all changed files + $ git commit -m 'description of changes' # make a commit with a message + $ git push origin feature # push to your branch + +Take a look at GitHub and make a pull request. If the pull request is accepted and merged you can pull the changes back into your fork. + +.. note:: + To pull from the original repository you need to add the upstream + ``$ git remote add upstream git@github.com:PocketMine/PocketMine-MP.git`` + +.. code-block:: sh + + $ git checkout master # switch back to the master branch + $ git fetch upstream # download latest commits from the upstream + $ git merge upstream/master # merge changes from upstream/master into your master branch + +Remove the branch you made with + +.. code-block:: sh + + $ git branch -d feature # remove the branch to keep it clean + diff --git a/docs/source/img/PocketMine.png b/docs/source/img/PocketMine.png new file mode 100644 index 0000000000000000000000000000000000000000..aecf578a49180e5de31ffcfa2741581e3908dacc GIT binary patch literal 11651 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 literal 0 HcmV?d00001 diff --git a/docs/source/img/create-issue.png b/docs/source/img/create-issue.png new file mode 100644 index 0000000000000000000000000000000000000000..fe57a50a1f068d2d164076120f98a0e44f2125f3 GIT binary patch literal 47368 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 Zq-W%Q)!Z<`<9}vcq{S7)YDJ8K{tvoFOnU$T literal 0 HcmV?d00001 diff --git a/docs/source/img/git-fork.png b/docs/source/img/git-fork.png new file mode 100644 index 0000000000000000000000000000000000000000..920fbf2144d18997e50a44da96410effa2dfdca8 GIT binary patch literal 12196 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 literal 0 HcmV?d00001 diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 0000000000..149e337908 --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,19 @@ +.. image:: img/PocketMine.png + :align: center + +PocketMine Documentation +======================== + +.. toctree:: + :maxdepth: 2 + + intro + require + setup + config + update + faq + developers + plugins + issues + \ No newline at end of file diff --git a/docs/source/intro.rst b/docs/source/intro.rst new file mode 100644 index 0000000000..eb0d854d64 --- /dev/null +++ b/docs/source/intro.rst @@ -0,0 +1,26 @@ +.. _intro: + +Introduction +============ +.. image:: img/PocketMine.png + :align: center + +PocketMine-MP is a server software for Minecraft PE (Pocket Edition). +It has a :doc:`Plugin API ` that enables a :doc:`developer ` to extend it and add new features, or change default ones. + +Supported features +------------------ +* Get all your friends in one server. Or run a public server. +* Disables flying, item hack, running & more. With an On/Off switch. +* Extend the game in the way you want, add awesome features. +* Teleport players, whitelist your server, tune the server, Remote Console. +* Load different levels at once, and teleport back and forth. +* Endless features, and we continuously implement new things. + +Contact and Support +------------------- +* `@PocketMine `_ on twitter +* `#pocketmine `_ for support @ irc.freenode.net +* `#mcpedevs `_ for development @ irc.freenode.net +* Mailing list: `Discussion group `_ + diff --git a/docs/source/issues.rst b/docs/source/issues.rst new file mode 100644 index 0000000000..6f5e8faafa --- /dev/null +++ b/docs/source/issues.rst @@ -0,0 +1,20 @@ +.. _issues: + +Issues +====== + +Check the following things and update if needed before making a new issue: + +* PocketMine-MP version +* PHP binary version +* Plugin versions + + +When you have the latest version of those files and the problem still occures and you are sure a **plugin** is not the cause then `make an new issue `_ on GitHub. + +Give as much information as you can about when or what happened. + +.. warning:: + Did the server crash and generated it a crash dump? Post it on `pastie `_ or `pastebin `_ and provide a link to it in your issue. + +.. image:: img/create-issue.png \ No newline at end of file diff --git a/docs/source/plugins.rst b/docs/source/plugins.rst new file mode 100644 index 0000000000..8a8f1897b0 --- /dev/null +++ b/docs/source/plugins.rst @@ -0,0 +1,78 @@ +.. plugins: + +Plugins +======= +**PocketMine is extendable!** + +Plugins are available on the `PocketMine website `_ or you can make your own plugin. + +Below is an skeleton with the minimal needed directories, files and content. + +Basic plugin structure +---------------------- + +.. contents:: + :local: + :depth: 2 + +Directories ++++++++++++ +Make sure your base structure looks like this + +.. code-block:: sh + + Example + ├── plugin.yml + └── src + └── Example + └── Main.php + + 2 directories, 2 files + +plugin.yml +++++++++++ +This file is required in a plugin. It contains the information used by PocketMine-MP to load this plugin. It's in YAML format (you will use this format for plugin configurations). It has four required fields: name, version, api and main. Each one of these fields (and all the optional ones) are described on the plugin.yml page. Be sure that it is named exactly plugin.yml. + +======= ==================================================================================== +field data +======= ==================================================================================== +name The name for your plugin +main The namespace and classname pointing to your main plugin class. It is case sensitive +version The version string of your plugin +api Minimal PocketMine-MP API version required for your plugin +======= ==================================================================================== + +.. code-block:: yaml + + name: Example + main: Example\Main + version: 1.0.0 + api: [1.0.0] + +Main.php +++++++++ +Now, create the main class file, that will include the PluginBase Class that starts the plugin. You can name it whatever you want, but a common way to name it is like the plugin name or Main. + +.. code-block:: php + + getLogger()->info("onLoad() has been called!"); + } + + public function onEnable(){ + $this->getLogger()->info("onEnable() has been called!"); + } + + public function onDisable(){ + $this->getLogger()->info("onDisable() has been called!"); + } + } + diff --git a/docs/source/require.rst b/docs/source/require.rst new file mode 100644 index 0000000000..250d8a5adc --- /dev/null +++ b/docs/source/require.rst @@ -0,0 +1,35 @@ +.. _require: + +Requirements +============ +A few extra extensions are needed to run PocketMine-MP with php. Thats why it does not work on standard php binaries. +You can get the latest versions of the binaries from a few places + +Custom PHP binaries +------------------- +* `Windows `_ +* `MacOS `_ +* `CentOS `_ +* `Linux `_ or `Jenkins `_ +* `Linux ARM `_ or `Jenkins `_ +* `Android `_ or `Jenkins `_ +* `Raspbian `_ + +Third-party Libraries/Protocols Used +------------------------------------ +* `PHP Sockets `_ +* `PHP SQLite3 `_ +* `PHP BCMath `_ +* `PHP pthreads `_ by `krakjoe `_ : Threading for PHP - Share Nothing, Do Everything. +* `PHP YAML `_ by Bryan Davis: The Yaml PHP Extension provides a wrapper to the LibYAML library. +* `LibYAML `_ by Kirill Simonov: A YAML 1.1 parser and emitter written in C. +* `cURL `_ : cURL is a command line tool for transferring data with URL syntax +* `Zlib `_ : A Massively Spiffy Yet Delicately Unobtrusive Compression Library +* `Source RCON Protocol `_ +* `UT3 Query Protocol `_ + +.. _PHP-Windows: http://sourceforge.net/projects/pocketmine/files/windows/dev/ +.. _PHP-SourceForge: http://sourceforge.net/projects/pocketmine/files/builds/ +.. _PHP-Jenkins: http://jenkins.pocketmine.net/ +.. _PM-Stable: https://github.com/PocketMine/PocketMine-MP/releases +.. _PM-Dev: http://jenkins.pocketmine.net/job/PocketMine-MP/ diff --git a/docs/source/setup.rst b/docs/source/setup.rst new file mode 100644 index 0000000000..c5dd61dfec --- /dev/null +++ b/docs/source/setup.rst @@ -0,0 +1,74 @@ +.. _setup: + +Installation +============ + +Installing on Windows +--------------------- +Download the latest version from `sourceforge `_ + +.. warning:: + If the provided x64 binary does not work then try the x86 binary! + +Installing on Linux +------------------- +Open the terminal + +Navigate where you want to install/update PocketMine-MP. You can move around using ``cd [directory]``, and create directories using ``mkdir [name]`` + +.. code-block:: sh + + ~/ $ mkdir PocketMine-MP # make new directory + ~/ $ cd PocketMine-MP # change to directory + PocketMine-MP/ $ + +Run the following code. It will download PocketMine-MP, download the PHP binaries or compile it if binaries are not available. + +.. code-block:: sh + + PocketMine-MP/ $ curl -sL \ + https://raw.githubusercontent.com/PocketMine/php-build-scripts/master/installer.sh \ + | bash -s - -v development + + [INFO] Found PocketMine-MP Alpha_1.4dev (build 289) using API 1.1.0 + [INFO] This development build was released on Thu Jul 17 21:31:35 CEST 2014 + [INFO] Installing/updating PocketMine-MP on directory ./ + [1/3] Cleaning... + [2/3] Downloading PocketMine-MP Alpha_1.4dev-289 phar... done! + [3/3] Obtaining PHP: detecting if build is available... + [3/3] Linux 64-bit PHP build available, downloading PHP_5.5.14_x86-64_Linux.tar.gz... checking... regenerating php.ini... done + [INFO] Everything done! Run ./start.sh to start PocketMine-MP + +Installing on OS X +------------------ +Open the Terminal.app. (Applications -> Utilities -> Terminal) + +Navigate where you want to install/update PocketMine-MP. You can move around using ``cd [directory]``, and create directories using ``mkdir [name]`` + +.. code-block:: sh + + ~/ $ mkdir PocketMine-MP # make new directory + ~/ $ cd PocketMine-MP # change to directory + PocketMine-MP/ $ + +Run the following code. It will download PocketMine-MP, download the PHP binaries or compile it if binaries are not available. + +.. code-block:: sh + + PocketMine-MP/ $ curl -sL \ + https://raw.githubusercontent.com/PocketMine/php-build-scripts/master/installer.sh \ + | bash -s - -v development + + [INFO] Found PocketMine-MP Alpha_1.4dev (build 289) using API 1.1.0 + [INFO] This development build was released on Thu Jul 17 21:31:35 CEST 2014 + [INFO] Installing/updating PocketMine-MP on directory ./ + [1/3] Cleaning... + [2/3] Downloading PocketMine-MP Alpha_1.4dev-289 phar... done! + [3/3] Obtaining PHP: detecting if build is available... + [3/3] MacOS 64-bit PHP build available, downloading PHP_5.5.14_x86-64_MacOS.tar.gz... checking... regenerating php.ini... done + [INFO] Everything done! Run ./start.sh to start PocketMine-MP + + +Installing on Android +--------------------- +Install `PocketMine-MP for Android `_ diff --git a/docs/source/update.rst b/docs/source/update.rst new file mode 100644 index 0000000000..2c8fc70d12 --- /dev/null +++ b/docs/source/update.rst @@ -0,0 +1,37 @@ +.. _update: + +Updating +======== + +.. contents:: + :local: + :depth: 2 + +Manually update +--------------- + +Update PHP binary ++++++++++++++++++ + +Download the PHP binary for your OS: + +* `Windows `_ +* `MacOS `_ +* `CentOS `_ +* `Linux `_ or `Jenkins `_ +* `Linux ARM `_ or `Jenkins `_ +* `Android `_ or `Jenkins `_ +* `Raspbian `_ + +Update PocketMine-MP +++++++++++++++++++++ + +Download the latest `stable `_ or `development `_ release . + +.. note:: Dont forget to rename the file to ``PocketMine-MP.phar`` + +.. _PHP-Windows: http://sourceforge.net/projects/pocketmine/files/windows/dev/ +.. _PHP-SourceForge: http://sourceforge.net/projects/pocketmine/files/builds/ +.. _PHP-Jenkins: http://jenkins.pocketmine.net/ +.. _PM-Stable: https://github.com/PocketMine/PocketMine-MP/releases +.. _PM-Dev: http://jenkins.pocketmine.net/job/PocketMine-MP/