From 23b8ce807cd92ec9c6026a35eeca858dba0f1e2d Mon Sep 17 00:00:00 2001 From: ST-DDT Date: Sat, 1 Sep 2018 03:08:46 +0200 Subject: [PATCH] Fixing typos (#757) * Trying to earn the achievement: Read the docs completely... * Tons of fixes --- source/about/assets.rst | 2 +- source/about/faq.rst | 9 +-- source/about/glossary.rst | 14 ++-- source/about/history.rst | 21 +++--- source/about/introduction.rst | 2 +- source/about/posting.rst | 2 +- source/about/privacy.rst | 2 +- source/about/rules.rst | 26 ++++---- source/about/structure.rst | 48 +++++++------- source/contributing/howtogit.rst | 35 +++++----- .../implementation/datamanipulator.rst | 10 +-- .../implementation/git-implementation.rst | 12 ++-- source/contributing/implementation/index.rst | 4 +- source/contributing/implementation/mixins.rst | 2 +- source/contributing/index.rst | 2 +- source/contributing/spongedocs.rst | 10 +-- source/contributing/versioning.rst | 8 +-- source/ore/api.rst | 38 +++++------ source/ore/guidelines.rst | 2 +- source/ore/publish.rst | 49 +++++++------- source/ore/routes/list-projects.rst | 2 +- source/ore/routes/list-users.rst | 14 ++-- source/ore/routes/list-versions.rst | 2 +- source/plugin/assets.rst | 2 +- source/plugin/blocks/concepts.rst | 2 +- source/plugin/blocks/modifying.rst | 2 +- source/plugin/blocks/tileentities.rst | 2 +- source/plugin/buildsystem.rst | 2 +- source/plugin/commands/arguments.rst | 2 +- source/plugin/commands/childcommands.rst | 2 +- source/plugin/commands/creating.rst | 4 +- source/plugin/commands/service.rst | 2 +- source/plugin/configuration/index.rst | 2 +- source/plugin/configuration/loaders.rst | 2 +- source/plugin/configuration/nodes.rst | 2 +- .../plugin/data/custom/datamanipulators.rst | 6 +- source/plugin/data/custom/serialization.rst | 4 +- source/plugin/data/datamanipulators.rst | 8 +-- source/plugin/data/index.rst | 4 +- source/plugin/data/keys.rst | 4 +- source/plugin/database.rst | 2 +- source/plugin/debugging.rst | 4 +- source/plugin/economy/basics.rst | 2 +- source/plugin/effects.rst | 2 +- source/plugin/event/causes.rst | 4 +- source/plugin/event/custom.rst | 2 +- source/plugin/event/filters.rst | 12 ++-- source/plugin/event/index.rst | 2 +- source/plugin/event/listeners.rst | 2 +- .../plugin/internals/access-transformers.rst | 2 +- source/plugin/internals/mcp-setup.rst | 6 +- source/plugin/internals/mcp.rst | 2 +- source/plugin/items/creating.rst | 2 +- source/plugin/items/usage.rst | 2 +- source/plugin/manager.rst | 2 +- source/plugin/optional/basic.rst | 12 ++-- source/plugin/optional/usage.rst | 4 +- source/plugin/permissions.rst | 8 +-- source/plugin/plugin-identifier.rst | 2 +- source/plugin/plugin-meta.rst | 2 +- source/plugin/practices/best.rst | 10 +-- source/plugin/project/gradle.rst | 2 +- source/plugin/scheduler.rst | 66 +++++++++---------- source/plugin/tab-lists.rst | 4 +- source/plugin/text/pagination.rst | 2 +- .../text/representations/configurate.rst | 2 +- source/plugin/text/representations/index.rst | 2 +- source/plugin/text/representations/json.rst | 2 +- source/plugin/trade-offers.rst | 8 +-- source/plugin/tutorials.rst | 2 +- source/plugin/wgen/customwgen.rst | 6 +- source/plugin/wgen/index.rst | 2 +- source/plugin/wgen/modifiers.rst | 4 +- source/plugin/workspace/idea.rst | 2 +- source/preparing/git.rst | 3 +- source/preparing/jdk.rst | 2 +- source/server/getting-started/bungeecord.rst | 4 +- .../configuration/server-properties.rst | 6 +- .../getting-started/implementations/index.rst | 10 +-- .../implementations/spongeforge.rst | 7 +- .../implementations/spongevanilla.rst | 2 +- source/server/getting-started/jre.rst | 2 +- source/server/getting-started/migrating.rst | 34 +++++----- .../server/management/performance-tweaks.rst | 4 +- source/server/management/plugins.rst | 2 +- source/server/spongineer/bugreport.rst | 16 +++-- source/server/spongineer/commands.rst | 20 +++--- source/server/spongineer/debugging.rst | 14 ++-- source/server/spongineer/logs.rst | 4 +- source/server/spongineer/troubleshooting.rst | 14 ++-- 90 files changed, 359 insertions(+), 343 deletions(-) diff --git a/source/about/assets.rst b/source/about/assets.rst index 6289bb5c37e5..c201e24258b8 100644 --- a/source/about/assets.rst +++ b/source/about/assets.rst @@ -3,7 +3,7 @@ Art Assets ========== This page provides the official SpongePowered logo and mascot. Feel free to use them to spread the word about Sponge. -However note that these images are **not** provided under the MIT License. +However, note that these images are **not** provided under the MIT License. .. note:: If you're reading a translated version, please note that the English license is the one which counts. Translated diff --git a/source/about/faq.rst b/source/about/faq.rst index 3ce69dd10076..c9a0ff0a25a6 100644 --- a/source/about/faq.rst +++ b/source/about/faq.rst @@ -46,7 +46,8 @@ There have also been community implementations due to the flexibility of the API (1) **LanternServer**, an open source and compatible Minecraft: Java Edition server that implements SpongeAPI. It does not rely on the vanilla codebase at all, allowing for it be more configurable, open, and performant. While still a work in progress, their project is quite promising and may one day be the choice for servers not - looking to run Forge mods. You can find their project `on Github `_. + looking to run Forge mods. You can find their project + `on GitHub `_. Where do I get Plugins for Sponge? ---------------------------------- @@ -110,9 +111,9 @@ Have a look at our plugin pages to get a quick-start: :doc:`/plugin/index` What can't I do with Sponge? / Limitations of Sponge? ----------------------------------------------------- -Sponge can't be used to create new blocks, textures, mobs on the clientside or any other content which would need -clientside modifications. SpongeAPI wont support sending mods or plugins to the client for now due to security -concerns. However you can make use of the ForgeAPI for clients and create Sponge plugins for the serverside. +Sponge can't be used to create new blocks, textures, mobs on the client-side or any other content which would need +client-side modifications. SpongeAPI won't support sending mods or plugins to the client for now due to security +concerns. However, you can make use of the ForgeAPI for clients and create Sponge plugins for the server-side. It is even possible to use Sponge on the client-side, but for several tasks mods are still required. I'm a Bukkit Plugin Developer! Why Can't Sponge Use Bukkit's API? diff --git a/source/about/glossary.rst b/source/about/glossary.rst index f8b1e32314b2..e1eaaf4473d3 100644 --- a/source/about/glossary.rst +++ b/source/about/glossary.rst @@ -44,12 +44,12 @@ Java MCP The Mod Coder Pack helps developers create mods for both the Minecraft server and client. http://www.modcoderpack.com/website Mixins - Specialised program components that inject Sponge into Minecraft. https://github.com/SpongePowered/Mixin/wiki + Specialized program components that inject Sponge into Minecraft. https://github.com/SpongePowered/Mixin/wiki Mod A Minecraft modification that changes gameplay somehow. Mods written using the Forge API need Forge to work, but some mods can be installed on their own. NPC - Non-Player Character. Any character not controlled by a player, eg. a Villager. + Non-Player Character. Any character not controlled by a player, e.g. a Villager. Ore The Official Sponge plugin hosting site, not ready yet. Use the Sponge Forums instead. Patreon @@ -58,7 +58,7 @@ Patreon Plugin A Minecraft mod that extends and changes Minecraft via SpongeAPI, usable only on Sponge servers. Project Leaders - The folks in charge of the entire Sponge Project, responsible for co-ordinating the activities of the various Teams and + The folks in charge of the entire Sponge Project, responsible for coordinating the activities of the various Teams and sub-projects. Pull Request (PR) A method of submitting contributions to an open development project, such as the Sponge repositories on GitHub. @@ -69,14 +69,14 @@ SpongeAPI SpongeAuth The authentication panel and SSO solution for all of the Sponge websites. https://auth.spongepowered.org/ SpongeCommon - A repository of code common to the official SpongeAPI implementations, used in building them. SpongeVanilla and SpongeForge - use this repository. + A repository of code common to the official SpongeAPI implementations, used in building them. SpongeVanilla and + SpongeForge use this repository. SpongeForge The implementation of SpongeAPI as a Forge Coremod. SpongeDocs Dedicated and frequently updated documentation, the best source of information on Sponge. Sponge Forums - Home to the Sponge Project and the second best source of information on Sponge. Update announcements are posted + Home to the Sponge Project and the second-best source of information on Sponge. Update announcements are posted regularly. https://forums.spongepowered.org/ Sponge Foundation The financial side of the project, a separate entity that accepts, manages and distributes donations. @@ -87,4 +87,4 @@ Spongie Spongy The sponge GitHub Bot that makes PR previews for the Docs. Team Leaders - The people who directs the Teams (WebDev, Docs, SysOps, subreddit, IRC). + The people who direct the Teams (WebDev, Docs, SysOps, subreddit, IRC). diff --git a/source/about/history.rst b/source/about/history.rst index 67c01fae2519..50f20c9fc345 100644 --- a/source/about/history.rst +++ b/source/about/history.rst @@ -10,7 +10,7 @@ The History of the Project ~~~~~~~~~~~~~~~~~~~~~~~~~~ Sponge was founded as a better alternative to the APIs that were available as of September 2014. The Sponge :doc:`staff` -consists of many people from different Communities, eg. Spout/Spoutcraft, Forge, Cauldron and a few others. +consists of many people from different Communities, e.g. Spout/Spoutcraft, Forge, Cauldron and a few others. When the development of Bukkit and Cauldron reached an abrupt end, the Minecraft community was shocked. Several developers from the above mentioned communities gathered in #nextstep on Esper.NET and discussed the future of Minecraft @@ -25,18 +25,19 @@ Several goals should be achieved with the new API: * protection against DMCA takedowns While the goals were mostly clear, the route to be taken was not. The soon-to-be Project was still nameless too. The -first mention of Sponge as the projects name was on Sept, 6th by Firehead94. Obviously the name stuck. +first mention of Sponge as the projects name was on Sept, 6th by Firehead94. Obviously, the name stuck. The initial commit to SpongeAPI and SpongeForge was made on September 7th and 8th, 2014 by one of the Sponge -Project leaders, Zidane. This was the beginning of the development of SpongeAPI and SpongeForge (named Sponge at the time). +Project leaders, Zidane. This was the beginning of the development of SpongeAPI and SpongeForge (named Sponge at the +time). On September 7th, 2014 the initial commit to Granite, an API based upon Vanilla Minecraft was made. Granite, originally -started as an independent project, was planned to implement it's own API and SpongeAPI. Granite and SpongeForge +started as an independent project, was planned to implement its own API and SpongeAPI. Granite and SpongeForge coexisted until April 20th, 2015. -The development of SpongeForge and the API gained momentum leading to a first API release on December 1st, 2014. However this -version was far from feature complete and an API-only release, meaning that there was no official implementation available -at that time. +The development of SpongeForge and the API gained momentum leading to a first API release on December 1st, 2014. +However, this version was far from feature complete and an API-only release, meaning that there was no official +implementation available at that time. On December 26th, 2014 the Granite Team decided to limit Granite to the usage of SpongeAPI. That made Granite the first unofficial Sponge Implementation for Vanilla Minecraft. On March 26th, the Granite Team finally joined the Sponge Team @@ -60,9 +61,9 @@ The History of Spongie ---------------------- Spongie first appeared in #Sponge on Esper.NET around September 2014. She was created and posted by -`DragonsPainter `__. Strad, another user, felt that Spongie would look better with -a moogle-like antenna, a Forge furnace instead of a Cauldron and replaced the Spigot with Spout. An anonymous user then -removed all labels and introduced her as the icon and background logo for the Sponge reddit section. +`DragonsPainter `__. Strad, another user, felt that Spongie would look better +with a moogle-like antenna, a Forge furnace instead of a Cauldron and replaced the Spigot with Spout. An anonymous user +then removed all labels and introduced her as the icon and background logo for the Sponge reddit section. This older version of Spongie sadly isn't available as vector graphic. Thus Sponge staff decided to create a new vectorized version. Two new drafts were then posted on diff --git a/source/about/introduction.rst b/source/about/introduction.rst index 965e5efc63fc..56f54fe647c0 100644 --- a/source/about/introduction.rst +++ b/source/about/introduction.rst @@ -43,7 +43,7 @@ Who Is behind Sponge? ~~~~~~~~~~~~~~~~~~~~~ The project leaders are blood, gabizou and Zidane. We are trying to be very open with the team to ensure the project leaders -do not end up “holding all of the keys.” Nonetheless, these three people make the final decisions to ensure the efficient +do not end up “holding all the keys.” Nonetheless, these three people make the final decisions to ensure the efficient operation of the project. A full list of staff members is located at :doc:`staff`. diff --git a/source/about/posting.rst b/source/about/posting.rst index b36adb8bfb04..068fc717eee7 100644 --- a/source/about/posting.rst +++ b/source/about/posting.rst @@ -33,7 +33,7 @@ Forum Rules Categorizing Your Posts ----------------------- -When creating new topics, use the drop down menu to the right of the topic title to set its category. Try to make sure +When creating new topics, use the drop-down menu to the right of the topic title to set its category. Try to make sure this category fits what you're posting about. If you don't know what a category implies, a description is next to each one in the drop down. diff --git a/source/about/privacy.rst b/source/about/privacy.rst index 23b681552248..1ba8e8c8cb88 100644 --- a/source/about/privacy.rst +++ b/source/about/privacy.rst @@ -69,7 +69,7 @@ Third Party Links ~~~~~~~~~~~~~~~~~ Occasionally, at our discretion, we may include or offer third party products or services on our site. -These third party sites have separate and independent privacy policies. We therefore have no responsibility or +These third-party sites have separate and independent privacy policies. We therefore have no responsibility or liability for the content and activities of these linked sites. Nonetheless, we seek to protect the integrity of our site and welcome any feedback about these sites. diff --git a/source/about/rules.rst b/source/about/rules.rst index ec8ef3f83ffc..b8d4c9b986ad 100644 --- a/source/about/rules.rst +++ b/source/about/rules.rst @@ -23,8 +23,8 @@ list of do's and don'ts. This stuff should all be common sense. * Follow Support Guidelines (when they exist) for any issues you may have. -* Don't abuse the channel (IRC, Forum, Discord, etc). This means don't spam, multipost, crosspost, or flood it. Be nice and - remember that we're all sharing the same virtual space. +* Don't abuse the channel (IRC, Forum, Discord, etc.). This means don't spam, multipost, crosspost, or flood it. Be nice + and remember that we're all sharing the same virtual space. * Try to keep the language at least PG-13. We're not your nanny and we're not going to give you grief over the odd curse word, but keep it within the bounds of reason and courtesy. @@ -36,8 +36,8 @@ list of do's and don'ts. This stuff should all be common sense. * Only private message ops/mods if something needs to be kept private, they are not your personal search engine. -* Please avoid discussions of politics, religion and similar controversial topics. Not only is it not relevant to Sponge, - it tends to create conflict where there doesn’t need to be any. +* Please avoid discussions of politics, religion and similar controversial topics. Not only is it not relevant to + Sponge, it tends to create conflict where there doesn’t need to be any. * Don't bash other projects, Mojang, or people associated with them. @@ -50,11 +50,13 @@ list of do's and don'ts. This stuff should all be common sense. * Do not attempt to make a sale or sell anything on Sponge websites or systems. This includes but is not limited to plugins (mods or any variation of the term), art assets, services, or any work to be provided. We specifically - *allow* offering a bounty in an *original post* in the **Service Exchange** area, and developers may seek commissioned work - in the **Devs Available** category. Any further discussion of payment in these (or any other) threads is prohibited. + *allow* offering a bounty in an *original post* in the **Service Exchange** area, and developers may seek commissioned + work in the **Devs Available** category. Any further discussion of payment in these (or any other) threads is + prohibited. - - Users may post job advertisements (with or without a bounty) within the “Service Exchange” Category, however they must - follow the `Template and Rules `__. + - Users may post job advertisements (with or without a bounty) within the “Service Exchange” Category, however they + must follow the + `Template and Rules `__. - Users may post job requests (with or without rates) within the “Devs Available” Category, however they must follow the `Template and Rules `__. @@ -85,7 +87,7 @@ list of do's and don'ts. This stuff should all be common sense. Any of the above rules are subject to change at any time without warning. Any content found to be in violation of these rules, even if the content was created before a rule was in place, can be removed by moderator approval. These - rules apply generally to all Sponge methods of communication, but each individual sub method (eg: subreddit or Forum - category) may have its own set of additional rules and guidelines to add on top of these general rules. If this is - the case, both sets of rules must be followed. Rules and guidelines evolve as the Sponge community evolves. Use only - as directed; excessive use of FLARD may rot your socks. + rules apply generally to all Sponge methods of communication, but each individual sub method (e.g.: subreddit or + Forum category) may have its own set of additional rules and guidelines to add on top of these general rules. If + this is the case, both sets of rules must be followed. Rules and guidelines evolve as the Sponge community evolves. + Use only as directed; excessive use of FLARD may rot your socks. diff --git a/source/about/structure.rst b/source/about/structure.rst index 8b514ebaf496..65c3d56aac4b 100644 --- a/source/about/structure.rst +++ b/source/about/structure.rst @@ -5,29 +5,29 @@ The Structure of the Sponge Project The Sponge Project consists of different subprojects, hosted in various repositories on GitHub. Here's a short overview before going into detail: -+-------------------------------------------------------------------+-------------------------------------------------------+---------------------------------------------------------------------------------+ -| Project | Description | What is done in the repository? | -+===================================================================+=======================================================+=================================================================================+ -| `SpongeAPI `_ | The API itself | Development of the API itself | -+-------------------------------------------------------------------+-------------------------------------------------------+---------------------------------------------------------------------------------+ -| `SpongeForge `_ | A SpongeAPI implementation built on top of Forge | Development of the parts of SpongeForge which rely on Forge | -+-------------------------------------------------------------------+-------------------------------------------------------+---------------------------------------------------------------------------------+ -| `SpongeVanilla `_ | A SpongeAPI implementation built directly on top | Development of the Vanilla Counterpart of the SpongeForge repository | -| | of Vanilla Minecraft | | -+-------------------------------------------------------------------+-------------------------------------------------------+---------------------------------------------------------------------------------+ -| `SpongeCommon `_ | The shared code between SpongeForge and SpongeVanilla | Development of all code which is shared between SpongeForge and SpongeVanilla | -+-------------------------------------------------------------------+-------------------------------------------------------+---------------------------------------------------------------------------------+ -| `Mixin `_ | The tool used to inject the implementations into | Development of our solution to hook Sponge into the Minecraft server | -| | the underlying code structure | | -+-------------------------------------------------------------------+-------------------------------------------------------+---------------------------------------------------------------------------------+ -| `SpongeDocs `_ | The official SpongeProject Documentation | Expanding, fixing and writing the SpongeDocs | -+-------------------------------------------------------------------+-------------------------------------------------------+---------------------------------------------------------------------------------+ -| `SpongeHome `_ | The website for the SpongeProject | Development of our website | -+-------------------------------------------------------------------+-------------------------------------------------------+---------------------------------------------------------------------------------+ -| `Ore `_ | Plugin hosting solution | Development of our plugin hosting solution | -+-------------------------------------------------------------------+-------------------------------------------------------+---------------------------------------------------------------------------------+ -| `SpongeAuth `_ | The authentication portal and SSO for our websites | Development of our authentication portal and SSO solution | -+-------------------------------------------------------------------+-------------------------------------------------------+---------------------------------------------------------------------------------+ ++-------------------------------------------------------------------+-------------------------------------------------------+-------------------------------------------------------------------------------+ +| Project | Description | What is done in the repository? | ++===================================================================+=======================================================+===============================================================================+ +| `SpongeAPI `_ | The API itself | Development of the API itself | ++-------------------------------------------------------------------+-------------------------------------------------------+-------------------------------------------------------------------------------+ +| `SpongeForge `_ | A SpongeAPI implementation built on top of Forge | Development of the parts of SpongeForge which rely on Forge | ++-------------------------------------------------------------------+-------------------------------------------------------+-------------------------------------------------------------------------------+ +| `SpongeVanilla `_ | A SpongeAPI implementation built directly on top | Development of the Vanilla Counterpart of the SpongeForge repository | +| | of Vanilla Minecraft | | ++-------------------------------------------------------------------+-------------------------------------------------------+-------------------------------------------------------------------------------+ +| `SpongeCommon `_ | The shared code between SpongeForge and SpongeVanilla | Development of all code which is shared between SpongeForge and SpongeVanilla | ++-------------------------------------------------------------------+-------------------------------------------------------+-------------------------------------------------------------------------------+ +| `Mixin `_ | The tool used to inject the implementations into | Development of our solution to hook Sponge into the Minecraft server | +| | the underlying code structure | | ++-------------------------------------------------------------------+-------------------------------------------------------+-------------------------------------------------------------------------------+ +| `SpongeDocs `_ | The official SpongeProject Documentation | Expanding, fixing and writing the SpongeDocs | ++-------------------------------------------------------------------+-------------------------------------------------------+-------------------------------------------------------------------------------+ +| `SpongeHome `_ | The website for the SpongeProject | Development of our website | ++-------------------------------------------------------------------+-------------------------------------------------------+-------------------------------------------------------------------------------+ +| `Ore `_ | Plugin hosting solution | Development of our plugin hosting solution | ++-------------------------------------------------------------------+-------------------------------------------------------+-------------------------------------------------------------------------------+ +| `SpongeAuth `_ | The authentication portal and SSO for our websites | Development of our authentication portal and SSO solution | ++-------------------------------------------------------------------+-------------------------------------------------------+-------------------------------------------------------------------------------+ SpongeCommon, SpongeForge and SpongeVanilla =========================================== @@ -43,7 +43,7 @@ building SpongeForge or SpongeVanilla from the repository *without* including Sp SpongeHome ========== -SpongeHome is the Sponge project's website. It's written in Golang, using the go-macaron library. It uses SCSS as it's +SpongeHome is the Sponge project's website. It's written in Golang, using the go-macaron library. It uses SCSS as its CSS preprocessor. Ore diff --git a/source/contributing/howtogit.rst b/source/contributing/howtogit.rst index 105583400cdd..25081bee7d07 100644 --- a/source/contributing/howtogit.rst +++ b/source/contributing/howtogit.rst @@ -66,7 +66,7 @@ clone is now located at ``YourGitHubAccount/ClonedRepoName``. Alright, first ste .. note:: - All branches from the original repository will get forked too, you recieve an exact clone of the forked repo. + All branches from the original repository will get forked too, you receive an exact clone of the forked repo. .. image:: /images/contributing/repo-fork.svg :alt: Repo forking @@ -79,10 +79,11 @@ Now you need to get this fork to your local machine to make your changes. Open t everything in. Second step finished, well done! .. note:: + Most steps can be done via GUI of your choice. If you're experienced with a command line interface, then you can use - it too. Each steps will show you the required commands to achieve the desired result. + it too. Each step will show you the required commands to achieve the desired result. -Alternatively you can do this via CLI (command line interface, ``CMD`` or ``powershell`` on windows). Note +Alternatively, you can do this via CLI (command line interface, ``CMD`` or ``powershell`` on windows). Note that you need to create the folder everything is getting cloned to yourself before typing this command: .. code-block:: bash @@ -108,7 +109,7 @@ should be a ``create branch`` button somewhere), or you can use the CLI with git git checkout -b [name_of_your_new_branch] This will create a ``branch`` with the name of your choice and switch to it. All changes you're about to make will be -on this branch. If you need to switch to another branch ( for example ``master``), just reuse this command. Third step +on this branch. If you need to switch to another branch (for example ``master``), just reuse this command. Third step done! Good job so far! To get an overview of your branches, just have a look at your git client or use: .. code-block:: bash @@ -133,7 +134,7 @@ is to build the Docs locally. Have a look at the 5. Commit the Changes ~~~~~~~~~~~~~~~~~~~~~ -When you're done, you need to bundle them into a single package (a ``commit``) and get them into the branch. Again your +When you're done, you need to bundle them into a single package (a ``commit``) and get them into the branch. Again, your git client will help you out. Add a meaningful name to your commit and a short description if needed. This can be done via CLI too: @@ -187,7 +188,7 @@ In this case it should be: You can either go to your forks page on GitHub.com (there should be a notice at the top of your forks page to guide you), or you can use your GitHub client to create a pull-request. The official GitHub for Win client uses the -the top right corner of the window for this. +top right corner of the window for this. .. image:: /images/contributing/repo-pr.svg :alt: PRs @@ -209,11 +210,12 @@ Advanced Git Squashing with Rebase ~~~~~~~~~~~~~~~~~~~~~ -Let's say you have finished your additions to the repo, and let's pretend that you made 137 commits while getting it done. -Your commit history will certainly look cluttered. It would be a shame if they were all recorded into the repo, wouldn't it? -Too many trivial commits also clutters the project commit history. Fortunately Git has a nice tool to circumvent this, it's -called a ``rebase``. Rebasing can take your 137 small commits and just turn them into one big commit. Awesome, isn't it? -Instead of reinventing the wheel, we'll just pass you a link to a very short and easily understandable squashing tutorial: +Let's say you have finished your additions to the repo, and let's pretend that you made 137 commits while getting it +done. Your commit history will certainly look cluttered. It would be a shame if they were all recorded into the repo, +wouldn't it? Too many trivial commits also clutters the project commit history. Fortunately, Git has a nice tool to +circumvent this, it's called a ``rebase``. Rebasing can take your 137 small commits and just turn them into one big +commit. Awesome, isn't it? Instead of reinventing the wheel, we'll just pass you a link to a very short and easily +understandable squashing tutorial: `Gitready: Squashing with Rebase `_ @@ -226,7 +228,7 @@ Setting Up a Remote ~~~~~~~~~~~~~~~~~~~ Naturally the original repo is the direct parent of your fork and your fork is the direct parent of your local clone. -However the original repo **isn't** the direct parent of your clone. This isn't a problem in the first place, but it +However, the original repo **isn't** the direct parent of your clone. This isn't a problem in the first place, but it prevents you from updating your clone to the latest changes on the original repo. If you setup the original repo as a remote (read: "parent") of your clone, you'll be able to grab all changes made to this repo and apply it to your local clone. Look below to see how grabbing and updating works. @@ -256,9 +258,10 @@ the output should look like: upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push) .. note:: - If you see the warning ``fatal: The current branch YourBranchName has no upstream branch.``, then the branch may not be on - the upstream remote. This may happen if this is the first time you are pushing a commit for the new branch. To push the - current branch and set the remote as upstream, use ``git push --set-upstream origin YourBranchName``. + + If you see the warning ``fatal: The current branch YourBranchName has no upstream branch.``, then the branch may not + be on the upstream remote. This may happen if this is the first time you are pushing a commit for the new branch. To + push the current branch and set the remote as upstream, use ``git push --set-upstream origin YourBranchName``. Rebasing ~~~~~~~~ @@ -268,7 +271,7 @@ means that your fork and your clone are outdated. This is not a big problem, but additions later on, it's strongly advised to ``rebase`` your changes against the latest changes on the original repo. If you haven't set up the remote repo yet, do it before trying to rebase. -A successfull rebase requires several steps: +A successful rebase requires several steps: 1. Fetch the Changes on the Remote Repo --------------------------------------- diff --git a/source/contributing/implementation/datamanipulator.rst b/source/contributing/implementation/datamanipulator.rst index 7a9d10ba7400..217644ea520c 100644 --- a/source/contributing/implementation/datamanipulator.rst +++ b/source/contributing/implementation/datamanipulator.rst @@ -118,12 +118,12 @@ The second constructor must } Since we know that both current health and maximum health are bounded values, we need to make sure no values -outside of these bounds can be passed. To achieve this we use guava's ``Preconditions`` of which we import the +outside of these bounds can be passed. To achieve this, we use guava's ``Preconditions`` of which we import the required methods statically. .. note:: - Never use so-called magic values (arbitrary numbers, booleans etc) in your code. Instead, locate the + Never use so-called magic values (arbitrary numbers, booleans etc.) in your code. Instead, locate the ``DataConstants`` class and use a fitting constant - or create one, if necessary. Accessors defined by the Interface @@ -235,7 +235,7 @@ The only differences are: * Instead of ``registerGettersAndSetters()``, the method is called ``registerGetters()`` When creating ``ImmutableDataHolder``\ s or ``ImmutableValue``\ s, check if it makes sense to use the -``ImmutableDataCachingUtil``. For example if you have ``WetData`` which contains nothing more than a boolean, it +``ImmutableDataCachingUtil``. For example, if you have ``WetData`` which contains nothing more than a boolean, it is more feasible to retain only two cached instances of ``ImmutableWetData`` - one for each possible value. For manipulators and values with many possible values (like ``SignData``) however, caching is proven to be too expensive. @@ -283,7 +283,7 @@ Next up is the ``DataProcessor``. A ``DataProcessor`` serves as a bridge between Minecraft's objects. Whenever any data is requested from or offered to ``DataHolders`` that exist in Vanilla Minecraft, those calls end up being delegated to a ``DataProcessor`` or a ``ValueProcessor``. -For your name, you should use the name of the ``DataManipulator`` interface and append ``Processor``. Thus for +For your name, you should use the name of the ``DataManipulator`` interface and append ``Processor``. Thus, for ``HealthData`` we create a ``HealthDataProcessor``. In order to reduce boilerplate code, the ``DataProcessor`` should inherit from the appropriate abstract class in @@ -433,7 +433,7 @@ returns ``Optional.empty()`` if the ``DataHolder`` is incompatible. ``AbstractEntityDataProcessor`` already handles filling from ``DataHolders`` by creating a ``DataManipulator`` from the holder and then merging it with the supplied manipulator, but the ``DataContainer`` deserialization it -can not provide. +cannot provide. .. code-block:: java diff --git a/source/contributing/implementation/git-implementation.rst b/source/contributing/implementation/git-implementation.rst index e8ceae89d6f0..de3c1dd1a9e3 100644 --- a/source/contributing/implementation/git-implementation.rst +++ b/source/contributing/implementation/git-implementation.rst @@ -6,21 +6,21 @@ Developing the API ================== The basic process of adding your changes is explained in the :doc:`../howtogit` section. On top of that we suggest that -you create your new branch with a meaningful name.With the new branching model you need to be aware which +you create your new branch with a meaningful name. With the new branching model, you need to be aware which branch you need to base your PRs on and where it should get merged afterwards. Read about the new branching and versioning model here: :doc:`../versioning` -Additionally we require that you ensure the module will compile with ``gradle compileJava``. +Additionally, we require that you ensure the module will compile with ``gradle compileJava``. This will run a simple build of the source files. When finished successfully, you can PR your changes to SpongeAPI repo. Developing the Implementation ============================= -The process for the implementations is almost the same as for the API. You add your changes as described in :doc:`../howtogit`. -Note that you should give your branches a meaningful name. With the new branching model you need to be aware which -branch you need to base your PRs on and where it should get merged afterwards. Read about the new branching and -versioning model here: :doc:`../versioning` +The process for the implementations is almost the same as for the API. You add your changes as described in +:doc:`../howtogit`. Note that you should give your branches a meaningful name. With the new branching model, you need to +be aware which branch you need to base your PRs on and where it should get merged afterwards. Read about the new +branching and versioning model here: :doc:`../versioning` Run ``gradle compileJava`` to check if everything compiles without errors. diff --git a/source/contributing/implementation/index.rst b/source/contributing/implementation/index.rst index 368f43c69a8d..a8f030b0263d 100644 --- a/source/contributing/implementation/index.rst +++ b/source/contributing/implementation/index.rst @@ -2,8 +2,8 @@ Developing Sponge ================= -This sections describes the best way to approach the project when you're intending to develop Sponge itself. It is -mandatory to be familiar with :doc:`git <../howtogit>` and our :doc:`codestyle`. Basic knowledge of the +These sections describe the best way to approach the project when you're intending to develop Sponge itself. It is +mandatory to be familiar with :doc:`git <../howtogit>` and our :doc:`codestyle`. Basic knowledge of :doc:`/about/structure` is also very helpful. If you want to join us in creating Sponge, head straight over to the :doc:`pr` page. diff --git a/source/contributing/implementation/mixins.rst b/source/contributing/implementation/mixins.rst index 36de66ae0278..2d67025a347a 100644 --- a/source/contributing/implementation/mixins.rst +++ b/source/contributing/implementation/mixins.rst @@ -23,7 +23,7 @@ repository itself, since almost everything is already documented. .. note:: - The Mixin project will be servicing a number of other projects in addition to Sponge itself. Therefore Mixin has its' + The Mixin project will be servicing a number of other projects in addition to Sponge itself. Therefore, Mixin has its own documentation together with the repository. diff --git a/source/contributing/index.rst b/source/contributing/index.rst index c5db390b1792..d989a763cb2a 100644 --- a/source/contributing/index.rst +++ b/source/contributing/index.rst @@ -57,7 +57,7 @@ well as the `SpongeDocs `_ is done Advanced Contributions ~~~~~~~~~~~~~~~~~~~~~~ -And finally these are the most difficult things you can help out with. Advanced knowledge of Java, Minecraft and at +And finally, these are the most difficult things you can help out with. Advanced knowledge of Java, Minecraft and at least basic knowledge of the `SpongeAPI `_ and its `structure `_ is strongly advised before attempting to help out with: diff --git a/source/contributing/spongedocs.rst b/source/contributing/spongedocs.rst index f6e8cd1636fe..9d25d9618dc4 100644 --- a/source/contributing/spongedocs.rst +++ b/source/contributing/spongedocs.rst @@ -28,7 +28,7 @@ Changes and additions to SpongeDocs should be submitted as a pull request to the requests to be refined during the review process. Incomplete explanations are also welcome, so don't shy away if there are some parts you do not understand. There will always be someone able to fill in the gaps. -The Docs are written in reStructuredText (reST), if you're familiar with Markdown (md) the step to reST shouldn't be to +The Docs are written in reStructuredText (reST), if you're familiar with Markdown (md) the step to reST shouldn't be too hard. If you're having issues with it we suggest that you join our `forums `_ or `#SpongeDocs `_ on Esper.net and ask for help there. @@ -76,12 +76,12 @@ writing Sponge Documentation. This list may get added to (or bent out of shape) i. Some languages may wish to use a phonetic translation as well. -10. Automated translations (eg. Google Translate) are strongly discouraged. These often contain serious errors, and are +10. Automated translations (e.g. Google Translate) are strongly discouraged. These often contain serious errors, and are very likely to be rejected. 11. Page Titles and Section Headings should be plain text, avoiding literal blocks and other formatting. -12. Code symbols should be capitalised in their original form and have no extra spaces (eg. blockState (a field name) or - BlockState (a class name), rather than *block state*). They should also be formatted as a literal using double - backticks (eg. ``blockState``) in body text. +12. Code symbols should be capitalized in their original form and have no extra spaces (e.g. blockState (a field name) + or BlockState (a class name), rather than *block state*). They should also be formatted as a literal using double + backticks (e.g. ``blockState``) in body text. 13. Lines should have a maximum length of 120 characters. 14. Imports should be written out in code blocks the first time they are referenced in each article, but not repeated after the first time. diff --git a/source/contributing/versioning.rst b/source/contributing/versioning.rst index 38ae72f66058..77a8a6cad11a 100644 --- a/source/contributing/versioning.rst +++ b/source/contributing/versioning.rst @@ -4,7 +4,7 @@ Versioning System and Repository Branch Layout With the release for beta we've moved SpongeAPI versioning to semantic versioning (see https://semver.org/). This change means that every time that we make a release we have to increment the version according to the rules -of semver. +of SemVer. SemVer ====== @@ -31,7 +31,7 @@ The Bleeding Branch The core of our repositories is the ``bleeding`` branch. Almost all changes will be added to ``bleeding``, including new features, changes, and bugfixes. The version of ``bleeding`` will always be the next major release version -appended with ``-SNAPSHOT`` (eg ``6.0.0-SNAPSHOT``) to denote that it is not yet a final build and subject to change. +appended with ``-SNAPSHOT`` (e.g. ``6.0.0-SNAPSHOT``) to denote that it is not yet a final build and subject to change. The primary reason for having the ``bleeding`` branch is to have a testing ground for changes. Even experienced members of the Sponge team can accidentally cause a build to fail or miss a bug. The ``bleeding`` branch will be @@ -70,7 +70,7 @@ SpongeDocs ========== The SpongeDocs themselves are unversioned following our philosophy that they will never be finished, but instead in a -constant flux of ever increasing usability. However they *target* a specific version of the API, generally the most +constant flux of ever increasing usability. However, they *target* a specific version of the API, generally the most recent *release* of SpongeAPI. Core Branch @@ -90,7 +90,7 @@ may be merged. A feature branch may only be merged into master if the changes / additions made in it are correct regarding the **SpongeAPI release currently targeted by the SpongeDocs**. Any feature branches that describe features not yet included in a release stay unmerged until the corresponding API version is released and becomes the new targeted version for the -SpongeDocs. However the Docs team might collect additions for a specific version on a single branch. +SpongeDocs. However, the Docs team might collect additions for a specific version on a single branch. .. image:: /images/contributing/versioning-release-branch.svg :alt: release branch example diff --git a/source/ore/api.rst b/source/ore/api.rst index b8be6e7d97fa..630890f0405e 100755 --- a/source/ore/api.rst +++ b/source/ore/api.rst @@ -73,25 +73,25 @@ Below is a list of the following routes that are currently available within the Deprecated Routes -~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~ -The following routes are deprecated and should not be used. The replacements are likely to differ from the old one so +The following routes are deprecated and should not be used. The replacements are likely to differ from the old one, so consult the docs before migrating. -+---------------------------------------------+---------------------------------------------------+ -| Deprecated | Replacement | -+---------------------------------------------+---------------------------------------------------+ -| `/api/projects` | `/api/v1/projects` | -+---------------------------------------------+---------------------------------------------------+ -| `/api/users` | `/api/v1/users` | -+---------------------------------------------+---------------------------------------------------+ -| `/api/projects/:pluginId/version` | `/api/v1/projects/:pluginId/version` | -+---------------------------------------------+---------------------------------------------------+ -| `/api/projects/:pluginId/versions/:version` | `/api/v1/projects/:pluginId/versions/:version` | -+---------------------------------------------+---------------------------------------------------+ -| `/api/projects/:pluginId` | `/api/v1/projects/:pluginId` | -+---------------------------------------------+---------------------------------------------------+ -| `/api/users/:username` | `/api/v1/users/:username` | -+---------------------------------------------+---------------------------------------------------+ -| `/api/projects/:pluginId/versions/:name` | `/api/v1/projects/:pluginId/versions/:name` | -+---------------------------------------------+---------------------------------------------------+ ++---------------------------------------------+------------------------------------------------+ +| Deprecated | Replacement | ++---------------------------------------------+------------------------------------------------+ +| `/api/projects` | `/api/v1/projects` | ++---------------------------------------------+------------------------------------------------+ +| `/api/users` | `/api/v1/users` | ++---------------------------------------------+------------------------------------------------+ +| `/api/projects/:pluginId/version` | `/api/v1/projects/:pluginId/version` | ++---------------------------------------------+------------------------------------------------+ +| `/api/projects/:pluginId/versions/:version` | `/api/v1/projects/:pluginId/versions/:version` | ++---------------------------------------------+------------------------------------------------+ +| `/api/projects/:pluginId` | `/api/v1/projects/:pluginId` | ++---------------------------------------------+------------------------------------------------+ +| `/api/users/:username` | `/api/v1/users/:username` | ++---------------------------------------------+------------------------------------------------+ +| `/api/projects/:pluginId/versions/:name` | `/api/v1/projects/:pluginId/versions/:name` | ++---------------------------------------------+------------------------------------------------+ diff --git a/source/ore/guidelines.rst b/source/ore/guidelines.rst index d710ba1bf2c0..f974047577b0 100644 --- a/source/ore/guidelines.rst +++ b/source/ore/guidelines.rst @@ -171,7 +171,7 @@ sources, and execution shell scripts. Monetization / Advertising ~~~~~~~~~~~~~~~~~~~~~~~~~~ -All functionality present in your plugin should be usable without restriction, and can not require a license key to operate. +All functionality present in your plugin should be usable without restriction, and cannot require a license key to operate. External APIs, such as translation or geolocation services, that require payment for functionality can be allowed but must be discussed among staff prior to approval. Plugins may not be used to display advertisements. diff --git a/source/ore/publish.rst b/source/ore/publish.rst index fc878e9759ed..9e947266abef 100755 --- a/source/ore/publish.rst +++ b/source/ore/publish.rst @@ -10,7 +10,7 @@ Packaging Your Plugin Ore requires any projects to be packaged with a ``mcmod.info`` descriptor file in the top-level of your JAR file. This file is used to automatically infer some important details about your project to make the upload process easier. Ore -will reject your plugin if this file is missing from the JAR. Luckily, SpongeAPI has a built in annotation processor +will reject your plugin if this file is missing from the JAR. Luckily, SpongeAPI has a built-in annotation processor that creates this file for you automatically, on compile, using the ``@Plugin`` annotation that you have likely already created in your plugin's main class. @@ -75,7 +75,7 @@ To do this, you can navigate to your profile and click the key symbol next to yo :align: center :alt: PGP public key 1 -You will then be prompted to enter your key into a text box. You must be sure to enter the key in it's entirety or +You will then be prompted to enter your key into a text box. You must be sure to enter the key in its entirety or signature validation will fail. .. image:: /images/ore/help_2.png @@ -150,12 +150,12 @@ Support cannot do anything, merely a way of showing that the member is a part of Documenting Your Project With Pages ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -To document your plugin Ore offers the creation of pages. By default you get a 'Home' page when you create your new Project. -To add new pages you can click on the '+' icon in the Pages bar on the right of the screen; doing so will open a pop-up where you -can choose a name and the parent page (adding a page on the Home page is not possible). If you choose the '' option the page -will become a root page where you can later add child pages on. If you choose to add it to another page the page will only show -when the parent page is expanded. -To document your pages you can use CommonMark. +To document your plugin Ore offers the creation of pages. By default, you get a 'Home' page when you create your new +Project. To add new pages, you can click on the '+' icon in the Pages bar on the right of the screen; doing so will open +a pop-up where you can choose a name and the parent page (adding a page on the Home page is not possible). If you +choose the '' option the page will become a root page where you can later add child pages on. If you choose to add +it to another page the page will only show when the parent page is expanded. To document your pages, you can use +CommonMark. Linking Pages ------------- @@ -171,33 +171,36 @@ If you have the following tree structure in your pages: - Permissions And you want to add a link from the home page to the Config page in Setup you can use `WikiLinks`. -To add a WikiLink use the format `[[Link]]` so on the home page you can add `[[Setup/Config]]` and this will get be converted to a -link that is guaranteed to work. +To add a WikiLink use the format `[[Link]]` so on the home page you can add `[[Setup/Config]]` and this will get be +converted to a link that is guaranteed to work. .. note:: - You can also specify a title for the link and separate it with a Pipe symbol so `[[Title|Link]]` will become a link with the title + You can also specify a title for the link and separate it with a Pipe symbol so `[[Title|Link]]` will become a link + with the title .. note:: - WikiLinks are only supported in Ore so if you use them on the Home-page they will not be displayed correctly on the forums. - However, we still recommend using WikiLinks instead of normal links to guarantee the future working of your wiki. + WikiLinks are only supported in Ore so if you use them on the Home-page they will not be displayed correctly on the + forums. However, we still recommend using WikiLinks instead of normal links to guarantee the future working of your + wiki. Project States -~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~ -When creating a new project a banner will appear telling you your project is in a 'new' state. -The new state is intended to indicated to users and admins you are still working on the setup of your project. If you have finished documenting -your plugin to make it comply with the guidelines, click the 'publish' button to complete the process. -However, if you don't publish it yourself then the project will be published automatically 24 hours after it's creation. +When creating a new project, a banner will appear telling you your project is in a 'new' state. +The new state is intended to indicated to users and admins you are still working on the setup of your project. If you +have finished documenting your plugin to make it comply with the guidelines, click the 'publish' button to complete the +process. However, if you don't publish it yourself then the project will be published automatically 24 hours after its +creation. Needs Changes ------------- -Ore staff can hide your project and request changes; the changes in question will be listed in the banner. This state will hide your project from the public; if you are done -you can send your project for approval. +Ore staff can hide your project and request changes; the changes in question will be listed in the banner. This state +will hide your project from the public; if you are done you can send your project for approval. Needs Approval -------------- -In this state your project is still hidden from the public while waiting for a staff member to review and validate the changes that were requested. -Please be patient, the staff members might be busy with other tasks. If the project gets approved it will automatically become visible again. -Please make sure to actually fix the points that require changes. +In this state your project is still hidden from the public while waiting for a staff member to review and validate the +changes that were requested. Please be patient, the staff members might be busy with other tasks. If the project gets +approved it will automatically become visible again. Please make sure to actually fix the points that require changes. diff --git a/source/ore/routes/list-projects.rst b/source/ore/routes/list-projects.rst index e0fdc33e6f08..ea71141f506c 100644 --- a/source/ore/routes/list-projects.rst +++ b/source/ore/routes/list-projects.rst @@ -17,7 +17,7 @@ Returns a list of projects based on given criteria. +------------+------------------------------+-------------------------------------------------------------+ | q | String | Search query. Checks against name, author, and description. | +------------+------------------------------+-------------------------------------------------------------+ -| limit | Integer | Limits the amount of projects returned (max / default: 25). | +| limit | Integer | Limits the number of projects returned (max / default: 25). | +------------+------------------------------+-------------------------------------------------------------+ | offset | Integer | Drops the first *n* projects from the result list. | +------------+------------------------------+-------------------------------------------------------------+ diff --git a/source/ore/routes/list-users.rst b/source/ore/routes/list-users.rst index a8d357c50821..91ed5f50afae 100644 --- a/source/ore/routes/list-users.rst +++ b/source/ore/routes/list-users.rst @@ -8,13 +8,13 @@ Returns a list of users based on given criteria. **Query parameters:** -+--------+-----------+-------------------------------------------------------------+ -| Name | Data Type | Description | -+========+===========+=============================================================+ -| limit | Integer | Limits the amount of users returned ( max / default: 25 ). | -+--------+-----------+-------------------------------------------------------------+ -| offset | Integer | Drops the first *n* users from the result list. | -+--------+-----------+-------------------------------------------------------------+ ++--------+-----------+----------------------------------------------------------+ +| Name | Data Type | Description | ++========+===========+==========================================================+ +| limit | Integer | Limits the number of users returned (max / default: 25). | ++--------+-----------+----------------------------------------------------------+ +| offset | Integer | Drops the first *n* users from the result list. | ++--------+-----------+----------------------------------------------------------+ **Sample output:** diff --git a/source/ore/routes/list-versions.rst b/source/ore/routes/list-versions.rst index 1af127638cff..2976cfd52ccc 100755 --- a/source/ore/routes/list-versions.rst +++ b/source/ore/routes/list-versions.rst @@ -13,7 +13,7 @@ Returns a list of versions for a project of a given plugin ID based on given cri +==========+=============================+=============================================================+ | channels | Comma Separated String List | Filters versions by channels (inclusive). | +----------+-----------------------------+-------------------------------------------------------------+ -| limit | Integer | Limits the amount of versions returned (max / default: 10). | +| limit | Integer | Limits the number of versions returned (max / default: 10). | +----------+-----------------------------+-------------------------------------------------------------+ | offset | Integer | Drops the first *n* versions from the result list. | +----------+-----------------------------+-------------------------------------------------------------+ diff --git a/source/plugin/assets.rst b/source/plugin/assets.rst index a54f96cf1d79..bee8de6042ab 100644 --- a/source/plugin/assets.rst +++ b/source/plugin/assets.rst @@ -9,7 +9,7 @@ The Asset API The :javadoc:`AssetManager` allows developers to retrieve resources from a plugin JAR. -A plugin's assets resides in a directory named ``assets/myplugin/`` where ``myplugin`` is the plugin ID. +A plugin's assets reside in a directory named ``assets/myplugin/`` where ``myplugin`` is the plugin ID. Once properly configured you can retrieve a resource for your (or any) plugin using the following code: diff --git a/source/plugin/blocks/concepts.rst b/source/plugin/blocks/concepts.rst index c04715cf4bab..7443b7b5c132 100644 --- a/source/plugin/blocks/concepts.rst +++ b/source/plugin/blocks/concepts.rst @@ -37,7 +37,7 @@ legacy reasons: for example, the furnace block consists of two base types (curre not utilizing their metadata at all. On the other hand, logs do use their metadata fully, but because the combination of properties exceeds 16 possible values (think tree type and direction), logs must be split over two base types. -In the future, there will only be one 16 bit number (65536 possible combinations of base type + properties). Blocks will +In the future, there will only be one 16-bit number (65536 possible combinations of base type + properties). Blocks will be assigned an ID automatically and this assignment will be stored in the world save file. This is illustrated below: 0 => minecraft:dirt[snowy=false,variant=default] diff --git a/source/plugin/blocks/modifying.rst b/source/plugin/blocks/modifying.rst index ad2c5dff3cf1..2e75aaab79a0 100644 --- a/source/plugin/blocks/modifying.rst +++ b/source/plugin/blocks/modifying.rst @@ -107,7 +107,7 @@ value. The following example will dry the block at a given ``Location``, if poss } Since the :javadoc:`WetData` data manipulator represents boolean data, by removing it we set the wetness of the block -(if it has any) to false. The ``dryState.isPresent()`` check will fail on block states that can not be wet since +(if it has any) to false. The ``dryState.isPresent()`` check will fail on block states that cannot be wet since ``dryState`` will be ``Optional.empty()`` in that case. Copying Blocks diff --git a/source/plugin/blocks/tileentities.rst b/source/plugin/blocks/tileentities.rst index 700a5d4d29a5..784561c8a002 100644 --- a/source/plugin/blocks/tileentities.rst +++ b/source/plugin/blocks/tileentities.rst @@ -98,7 +98,7 @@ opposed to the immutable ``BlockState``. Accessing Inventories ===================== -Quite a share of tile entities come with their own inventory, most notably chests and furnaces. That inventory can not +Quite a share of tile entities come with their own inventory, most notably chests and furnaces. That inventory cannot be accessed directly from the ``TileEntity`` interface. So a cast will be necessary. Since all tile entities containing an inventory extend the :javadoc:`TileEntityCarrier` interface it suffices to cast to that interface as shown below. diff --git a/source/plugin/buildsystem.rst b/source/plugin/buildsystem.rst index 33400a8b89b5..c67dd9a6fdbb 100644 --- a/source/plugin/buildsystem.rst +++ b/source/plugin/buildsystem.rst @@ -54,7 +54,7 @@ IDE. simplify the development process for you and other people wanting to contribute to your project. This method of developing plugins does not receive active testing by the Sponge team. -For developing plugins without a build system you need to download the SpongeAPI dependency manually from the +For developing plugins without a build system, you need to download the SpongeAPI dependency manually from the `SpongeAPI Download Page`_. For developing without a build system, we provide the ``shaded`` artifact which bundles all dependencies that would normally be automatically downloaded by the build system. diff --git a/source/plugin/commands/arguments.rst b/source/plugin/commands/arguments.rst index ff1d13cfee86..9cb6d0eaf332 100644 --- a/source/plugin/commands/arguments.rst +++ b/source/plugin/commands/arguments.rst @@ -277,7 +277,7 @@ objects selected by the selector. The following ``parseValue`` method from the ``CommandElement`` class attempts to parse a selector and return a set of entities based on the location of the ``CommandSource``. If the passed string does not start with ``@``, an exception -will be thrown indicating the passed argument is not a selector. +will be thrown indicating that the passed argument is not a selector. .. code-block:: java diff --git a/source/plugin/commands/childcommands.rst b/source/plugin/commands/childcommands.rst index 841ae4d88bac..419cce5591ba 100644 --- a/source/plugin/commands/childcommands.rst +++ b/source/plugin/commands/childcommands.rst @@ -81,5 +81,5 @@ is set to: commands and arguments from being executed (if the first argument of the fallback could be the same as the child command). -In all cases, if the arguments parse succesfully but the child executor throws an exception, the fallback +In all cases, if the arguments parse successfully but the child executor throws an exception, the fallback executor (if any) is not executed and the error message from the child executor is displayed. diff --git a/source/plugin/commands/creating.rst b/source/plugin/commands/creating.rst index 28ba65ff5173..d52d0d2c0ad0 100644 --- a/source/plugin/commands/creating.rst +++ b/source/plugin/commands/creating.rst @@ -107,7 +107,7 @@ Example: Simple Command Executor Player-Only Commands ~~~~~~~~~~~~~~~~~~~~ -Sometimes it is neccessary that only players can execute a command (e.g. a ``/suicide`` command). +Sometimes it is necessary that only players can execute a command (e.g. a ``/suicide`` command). Perform an ``instanceof`` check to determine the type of the :javadoc:`CommandSource`: @@ -166,7 +166,7 @@ This example uses a builder to create a ``CommandResult`` for a command which af Error Handling ============== -The ``execute()`` method may also throw a :javadoc:`CommandException`, signaling that an error occured while trying to +The ``execute()`` method may also throw a :javadoc:`CommandException`, signaling that an error occurred while trying to execute the command. If such an Exception is thrown, its message will be displayed to the command source, formatted as an error. Also, the commands usage message will be displayed. An :javadoc:`ArgumentParseException`, a subtype of ``CommandException`` is automatically thrown if the commands arguments could not be parsed. diff --git a/source/plugin/commands/service.rst b/source/plugin/commands/service.rst index cf53720cbb6b..fe3bff68bd98 100644 --- a/source/plugin/commands/service.rst +++ b/source/plugin/commands/service.rst @@ -31,7 +31,7 @@ the commands from the main plugin class, use ``this`` as the ``plugin`` paramete many Strings as you want. The first alias that isn't used by another command becomes the primary alias. This means aliases used by another command are ignored. -The ``CommandManager`` can also be used to call a command programatically: +The ``CommandManager`` can also be used to call a command programmatically: .. code-block:: java diff --git a/source/plugin/configuration/index.rst b/source/plugin/configuration/index.rst index a3423a759f9b..f3e5c76bb194 100644 --- a/source/plugin/configuration/index.rst +++ b/source/plugin/configuration/index.rst @@ -103,7 +103,7 @@ specific directory or to ``true`` to get the shared configuration directory. When your plugin is running for the first time, returned pathnames for configuration files and directories may not yet exist. If you delegate all reading / writing of files to Configurate, you do not need to worry about - non-existant paths as the library will handle them appropriately. + non-existent paths as the library will handle them appropriately. .. note:: diff --git a/source/plugin/configuration/loaders.rst b/source/plugin/configuration/loaders.rst index 5d3909df9a62..650551214bd5 100644 --- a/source/plugin/configuration/loaders.rst +++ b/source/plugin/configuration/loaders.rst @@ -119,6 +119,6 @@ Example: Loading a default config from the plugin jar file HoconConfigurationLoader.builder().setURL(jarConfigFile).build(); For this example it is important to note that the :javadoc:`AssetManager#getAsset(String)` method works relative to the -plugin's asset folder. So if in the above example the plugin ID is ``myplugin``, the ``defaultConfig.conf`` file +plugin's asset folder. So, if in the above example the plugin ID is ``myplugin``, the ``defaultConfig.conf`` file must not lie in the jar file root, but instead in the directory ``assets/myplugin``. For more information, see :doc:`the Asset API page <../assets>`. diff --git a/source/plugin/configuration/nodes.rst b/source/plugin/configuration/nodes.rst index 75ebb283cc06..db9eed53d31d 100644 --- a/source/plugin/configuration/nodes.rst +++ b/source/plugin/configuration/nodes.rst @@ -118,7 +118,7 @@ This prompts Configurate to locate the proper ``TypeSerializer`` for ``UUID``\ s value into a ``UUID``. The ``TypeSerializer`` (and by extension the above method) may throw an ``ObjectMappingException`` if it encounters incomplete or invalid data. -Now if we we want to write a new ``UUID`` to that config node, the syntax is very similar. Use the ``setValue()`` +Now if we want to write a new ``UUID`` to that config node, the syntax is very similar. Use the ``setValue()`` method with a ``TypeToken`` and the object you want to serialize. .. code-block:: java diff --git a/source/plugin/data/custom/datamanipulators.rst b/source/plugin/data/custom/datamanipulators.rst index 79daa0e60f2f..09234be08966 100644 --- a/source/plugin/data/custom/datamanipulators.rst +++ b/source/plugin/data/custom/datamanipulators.rst @@ -190,7 +190,7 @@ To register a ``DataManipulator`` Sponge has the :javadoc:`DataRegistration#buil .. warning:: - Data that was serialized prior to ``6.0.0``, or data where you have changed the ID, will *not* be recognised unless + Data that was serialized prior to ``6.0.0``, or data where you have changed the ID, will *not* be recognized unless registered with :javadoc:`DataManager#registerLegacyManipulatorIds(String, DataRegistration)`. If registering a pre-6.0.0 ``DataManipulator`` the ID is taken from `Class.getName()`, such as ``com.example.MyCustomData``. @@ -236,7 +236,7 @@ values that will be checked, as well as a :javadoc:`Comparator`. ``List`` and ``Mapped`` single types must instead implement ``ListData`` / ``MappedData`` (or the immutable equivalent). This adds additional methods to allow Map-like/List-like behavior directly on the ``DataManipulator``. -The following 3 methods must be defined on mutable manipluators: +The following 3 methods must be defined on mutable manipulators: ``fill(DataHolder, MergeFunction)`` should replace the data on your object with that of the given ``DataHolder``, using the result of ``MergeFunction#merge()``. @@ -299,7 +299,7 @@ using the result of ``MergeFunction#merge()``. Custom Single Types ------------------- -In addition to the , you need to override the following methods: +In addition to the methods from the simple single types, you need to override the following methods: ``getValueGetter()`` should pass the ``Value`` representing your data (see above). diff --git a/source/plugin/data/custom/serialization.rst b/source/plugin/data/custom/serialization.rst index 37b6087b8b79..8eee78f4d62a 100644 --- a/source/plugin/data/custom/serialization.rst +++ b/source/plugin/data/custom/serialization.rst @@ -30,7 +30,7 @@ Reading DataViews Whenever you're reading a serialized object, it's tempting to read all the individual values yourself in order to manually create all the required objects (and their parameters) for your data. However, depending on the data saved in -the container there are a few ways ways that are far more convenient: +the container there are a few ways that are far more convenient: - Common java types such as ``int``, ``String``, ``double``, ``List`` and ``Map`` can be retrieved using built-in methods ``getInt(DataQuery)``, ``getString(DataQuery)``, etc. Lists of these types can also be retrieved in a @@ -89,7 +89,7 @@ The next part is to implement a :javadoc:`DataBuilder`. It's recommended to exte it will try to upgrade your data if the version is less than the current version. There's only one method you need to implement - ``build(DataView)``, or ``buildContent(DataView)`` if you're using ``AbstractDataBuilder``. -You'll want to check that all the queries you want to retrieve are present using ``DataView.contains(Key...)``. If not +You'll want to check that all the queries you want to retrieve are present using ``DataView.contains(Key...)``. If not, the data is likely incomplete and you should return ``Optional.empty()``. If everything seems to be there, use the ``getX`` methods to construct the values and return a newly created object as diff --git a/source/plugin/data/datamanipulators.rst b/source/plugin/data/datamanipulators.rst index 85ebcfd09dfc..0ee254d20de5 100644 --- a/source/plugin/data/datamanipulators.rst +++ b/source/plugin/data/datamanipulators.rst @@ -18,7 +18,7 @@ Accessing and modifying data ============================ A data manipulator represents a certain component and all of its data. It stores a representation of that data and can -be offered to or created from data holders which possess a matching component. Again, let's use an example. And again +be offered to or created from data holders which possess a matching component. Again, let's use an example. Once more we try to heal someone (or something). **Code Example: Healing with data manipulators** @@ -46,7 +46,7 @@ try to heal someone (or something). } } -First we need to check if our target has health data. We do so by first asking it to provide us with its health +First, we need to check if our target has health data. We do so by first asking it to provide us with its health data by passing its class to the ``get()`` method. We get an ``Optional`` which we can use for our check. This ``Optional`` will be absent if either our target does not support :javadoc:`HealthData` or if it supports it but at the present moment does not hold any health data. @@ -101,7 +101,7 @@ that it contains *all* data pertaining to a certain component. Let us take a loo } } -First we check if both targets support HealthData. If they do, we save the health of both in one variable each. We +First, we check if both targets support HealthData. If they do, we save the health of both in one variable each. We don't need to bother with ``Optional`` this time since we verified that ``HealthData`` is supported and the ``getOrCreate()`` method ensures that even if no data is present, default values are generated. @@ -143,7 +143,7 @@ methods, which each will return a copy of the data. The only way to obtain an im from a data holder is obtaining a mutable one and then using ``asImmutable()``. A possible use case for this would be a custom event fired when someone is healed. It should provide copies of -the health data before and after, but event listeners should not be able to change them. Therefore we can write +the health data before and after, but event listeners should not be able to change them. Therefore, we can write our event to only provide ``ImmutableHealthData`` instances. That way, even if third party code gets to interact with our data, we can rest assured that it will not be changed. diff --git a/source/plugin/data/index.rst b/source/plugin/data/index.rst index ec0ac813a1a3..38393f0071e0 100644 --- a/source/plugin/data/index.rst +++ b/source/plugin/data/index.rst @@ -61,8 +61,8 @@ Property A property too is data, but not synchronized between server and clients. Therefore, it can only be changed by modifications present on both client and server. Since Sponge is not intended to require a client-side counterpart, properties are not modifiable. -Examples of properties are the harvesting ablities on tools (represented as :javadoc:`HarvestingProperty` or the damage -absorption of an equippable armor item (represented as :javadoc:`DamageAbsorptionProperty`). +Examples of properties are the harvesting abilities on tools (represented as :javadoc:`HarvestingProperty` or the damage +absorption of an equipable armor item (represented as :javadoc:`DamageAbsorptionProperty`). DataManipulator ~~~~~~~~~~~~~~~ diff --git a/source/plugin/data/keys.rst b/source/plugin/data/keys.rst index fba75b18e96c..f8cae0a14581 100644 --- a/source/plugin/data/keys.rst +++ b/source/plugin/data/keys.rst @@ -33,7 +33,7 @@ start out with an example: Now for the details of the above function. The first line checks if our given data holder supports a current health value. Only if it does, it can be healed after -all. Since a data holder can not have current health without having a maximum health and vice versa, a check for +all. Since a data holder cannot have current health without having a maximum health and vice versa, a check for one of the keys using the ``supports()`` method suffices. The second line uses the ``get()`` function to ask the data holder for its maximum health. Besides @@ -121,7 +121,7 @@ a tiny bit above that. } } -Again, we check if our target support the health key and then obtain the keyed value. A +Again, we check if our target supports the health key and then obtain the keyed value. A ``MutableBoundedValue`` contains a ``getMinValue()`` method, so we obtain the minimal value, add 1 and then set it to our data container. Internally, the ``set()`` method performs a check if our supplied value is valid and silently fails if it is not. Calling ``health.set(-2)`` would not change the value within ``health`` since it diff --git a/source/plugin/database.rst b/source/plugin/database.rst index 477b73a9769e..0d2e86606651 100644 --- a/source/plugin/database.rst +++ b/source/plugin/database.rst @@ -73,5 +73,5 @@ or, preferably, through a try-with-resources block. NoSQL ----- -Sponge does not currently provide any special abstraction over NoSQL databases (MongoDB etc). Plugins that wish to use +Sponge does not currently provide any special abstraction over NoSQL databases (MongoDB etc.). Plugins that wish to use NoSQL databases must provide their own connectors. diff --git a/source/plugin/debugging.rst b/source/plugin/debugging.rst index a1d4dbf14f44..e29caabe58de 100644 --- a/source/plugin/debugging.rst +++ b/source/plugin/debugging.rst @@ -117,7 +117,7 @@ Running the Configuration After you've followed the previous steps, you should be ready to start debugging. If you start your server from your IDE, its working directory will be the ``run`` directory in your -SpongeForge/SpongeVanilla project. All the files usually created by a server (worlds, configs etc) will be stored in +SpongeForge/SpongeVanilla project. All the files usually created by a server (worlds, configs etc.) will be stored in that ``run`` directory and persist over multiple runs of your local test server, just as if you manually copied a server .jar to the ``run`` directory and started it from there. @@ -130,7 +130,7 @@ right of it, ``Debug``. Eclipse ~~~~~~~ -Rather than pressing the green right-pointing arrow to run your Run/Debug configuration, click the drop down arrow of +Rather than pressing the green right-pointing arrow to run your Run/Debug configuration, click the drop-down arrow of the Debug icon (the one displaying a bug) and click your ``Test (Server)`` configuration. If it doesn't appear in the drop-down menu, click ``Debug Configurations``. Select ``Test (Server)`` configuration and hit the ``Debug`` button on the bottom left. diff --git a/source/plugin/economy/basics.rst b/source/plugin/economy/basics.rst index d9ff93a0d588..2506de58bf8f 100644 --- a/source/plugin/economy/basics.rst +++ b/source/plugin/economy/basics.rst @@ -33,7 +33,7 @@ Currency ======== The :javadoc:`Currency` object represents a form of Currency. ``Currency`` stores a display name (plural and singular), -a symbol, the amount of fractional digits, and whether the currency is the default currency for the economy. If the +a symbol, the number of fractional digits, and whether the currency is the default currency for the economy. If the economy plugin chooses, it can support multiple currencies. Accounts diff --git a/source/plugin/effects.rst b/source/plugin/effects.rst index 5dbc3c7e3982..b2635b8c11cf 100644 --- a/source/plugin/effects.rst +++ b/source/plugin/effects.rst @@ -33,7 +33,7 @@ With any given ``Viewer``, we can simply play a sound at a location: viewer.playSound(SoundTypes.ENTITY_CREEPER_PRIMED, new Vector3d(1, 65, 1), 1); Now let's break this down. First, the :javadoc:`SoundType` specifies the sound that will be -played. Next we have a ``Vector3d`` position. This position can be constructed, or it can be retrieved from a +played. Next, we have a ``Vector3d`` position. This position can be constructed, or it can be retrieved from a ``Location`` using the :javadoc:`Location#getPosition()` method. In the example above, the sound will be played at the coordinates ``1, 65, 1``. Lastly, we have the volume that the sound will be played at. The volume is a double that ranges from zero to two. diff --git a/source/plugin/event/causes.rst b/source/plugin/event/causes.rst index 054ad232b21f..055aa7cd5627 100644 --- a/source/plugin/event/causes.rst +++ b/source/plugin/event/causes.rst @@ -70,7 +70,7 @@ listing please see the `Javadocs `_. the event. Since a ``Cause`` may not be empty, it is guaranteed to have a ``root``. :javadoc:`Cause#first(Class)` returns the first object in the cause chain whose type is either the same as or is a -subtype of the given class. For example given a cause which contained a player followed by an entity +subtype of the given class. For example, given a cause which contained a player followed by an entity ``[Player, Entity, ...]`` .. code-block:: java @@ -82,7 +82,7 @@ subtype of the given class. For example given a cause which contained a player f Optional firstEntity = cause.first(Entity.class); // 2 } -Both optionals would contain the player object as it's type directly matched request for a +Both optionals would contain the player object as its type directly matched request for a Player type and it matched the request for an Entity type as Player is a subtype of Entity. :javadoc:`Cause#last(Class)` is similar to ``Cause#first(Class)`` except it returns the last value in the cause chain diff --git a/source/plugin/event/custom.rst b/source/plugin/event/custom.rst index beab6fdb5619..0605c012ea51 100644 --- a/source/plugin/event/custom.rst +++ b/source/plugin/event/custom.rst @@ -109,6 +109,6 @@ Example: Listen for Custom Event public void onPrivateMessage(PlayerMutationEvent event) { if(event.getMutation() == PlayerMutationEvent.Mutation.SPONTANEOUS_COMBUSTION) { event.setCancelled(true); - event.getTargetEntity().sendMessage(Text.of("You can not combust here, this is a non-smoking area!")); + event.getTargetEntity().sendMessage(Text.of("You cannot combust here, this is a non-smoking area!")); } } diff --git a/source/plugin/event/filters.rst b/source/plugin/event/filters.rst index 60f3b3643fd3..a7e266bd0559 100644 --- a/source/plugin/event/filters.rst +++ b/source/plugin/event/filters.rst @@ -71,7 +71,7 @@ recieve :javadoc:`DamageEntityEvent` and :javadoc:`DestructEntityEvent`\ s. **@IsCancelled** This annotation allows filtering events by their cancellation state at the time that your event listener would normally be -called. By default your event listener will not be called if the event has been cancelled by a previous event listener. +called. By default, your event listener will not be called if the event has been cancelled by a previous event listener. However you can change this behavior to one of three states depending on the :javadoc:`Tristate` value in the :javadoc:`IsCancelled` annotation. @@ -134,11 +134,11 @@ The** ``player`` **parameter will be set to that player.** **@After** This is similar to ``@Before``, but it instead uses :javadoc:`Cause#after(Class)`. **@All** This parameter source annotation requires that the annotated parameter be an array type. The returned array -will be equivalent to the contents of calling :javadoc:`Cause#allOf(Class)`. By default if the returned array would be +will be equivalent to the contents of calling :javadoc:`Cause#allOf(Class)`. By default, if the returned array would be empty then the validation fails however this can be disabled by setting ``ignoreEmpty=false``. -**In this example your listener will always be called, although the players array may be empty if the event's cause contained -no players.** +**In this example your listener will always be called, although the players array may be empty if the event's cause +contained no players.** .. code-block:: java @@ -155,8 +155,8 @@ parameter. parameter (This is equivalent to :javadoc:`Cause#get(String, Class)`). Additionally, the found object must match the type of the parameter. If no object is found meeting these criteria, then your listener is not called. -**In this example your listener will only be called if there is a player associated with the name** ``NamedCause.OWNER`` **. -The** ``player`` **parameter will be set to that player.** +**In this example your listener will only be called if there is a player associated with the name** +``NamedCause.OWNER``\ **. The** ``player`` **parameter will be set to that player.** .. code-block:: java diff --git a/source/plugin/event/index.rst b/source/plugin/event/index.rst index 8071fbdb67e2..be42a6540abd 100644 --- a/source/plugin/event/index.rst +++ b/source/plugin/event/index.rst @@ -19,7 +19,7 @@ Events cannot be sent to a specific set of plugins. All plugins that listen to a The event bus or event manager is the class that keeps track of which plugins are listening to which event, and is also responsible for distributing events to event listeners. -Sponge provides a built in callback for plugin reloading. See the :ref:`game-reload` section for more information. +Sponge provides a built-in callback for plugin reloading. See the :ref:`game-reload` section for more information. Contents diff --git a/source/plugin/event/listeners.rst b/source/plugin/event/listeners.rst index 714b935d9cce..50cb3a6293ac 100644 --- a/source/plugin/event/listeners.rst +++ b/source/plugin/event/listeners.rst @@ -147,7 +147,7 @@ cancellable and has been cancelled (such as by another plugin). GameReloadEvent ~~~~~~~~~~~~~~~ -To prevent all plugins providing their own reload commands, Sponge provides a built in callback for plugins to listen +To prevent all plugins providing their own reload commands, Sponge provides a built-in callback for plugins to listen to, and when executed, perform any reloading actions. What constitutes as a 'reloading action' is purely up to the plugin to decide. The :javadoc:`GameReloadEvent` will fire when a player executes the ``/sponge plugins reload`` command. The event is not necessarily limited to reloading configuration. diff --git a/source/plugin/internals/access-transformers.rst b/source/plugin/internals/access-transformers.rst index d6b75271d9fa..a7fcbf7987d4 100644 --- a/source/plugin/internals/access-transformers.rst +++ b/source/plugin/internals/access-transformers.rst @@ -12,7 +12,7 @@ environment, but ``func_71217_p`` in production. The re-obfuscation step only ha and fields, not the string parameter passed to the reflection call. As a solution, ForgeGradle supports using access transformers (or AT) that automatically make the specified -methods/fields public so you can reference them directly (without reflection). While they are primarily intented for +methods/fields public so you can reference them directly (without reflection). While they are primarily intended for usage with the Minecraft code base, they can be also applied to classes from other projects. If configured in the JAR manifest of the plugin, SpongeVanilla and Forge will also apply them in production. diff --git a/source/plugin/internals/mcp-setup.rst b/source/plugin/internals/mcp-setup.rst index 8b248a3a2f9a..65c01bee5407 100644 --- a/source/plugin/internals/mcp-setup.rst +++ b/source/plugin/internals/mcp-setup.rst @@ -21,9 +21,9 @@ You can choose between two different types of workspaces: problems on one of the platforms because of changes in the Minecraft code by Forge. Make sure to always test your plugin on both platforms when using MCP. -Choosing a MCP mappings version -``````````````````````````````` -To setup a MCP workspace you need to specify the MCP mappings version that will be used to de-obfuscate the Minecraft +Choosing an MCP mappings version +```````````````````````````````` +To setup an MCP workspace you need to specify the MCP mappings version that will be used to de-obfuscate the Minecraft source with human-readable names. A list of MCP mappings versions is available on the `Export page of the MCPBot `_. diff --git a/source/plugin/internals/mcp.rst b/source/plugin/internals/mcp.rst index 385dfc6b4d9b..af36f4c1fbad 100644 --- a/source/plugin/internals/mcp.rst +++ b/source/plugin/internals/mcp.rst @@ -43,7 +43,7 @@ MCP uses two different sets of mappings which are applied separately during the the development environment, and then re-obfuscated to Searge or Notch mappings. .. note:: - When you create a plugin you work with *MCP mappings* in your development environment. To run the plugin in + When you create a plugin, you work with *MCP mappings* in your development environment. To run the plugin in production (outside of your IDE) you need to re-obfuscate it to *Searge mappings*. Using the MCPBot diff --git a/source/plugin/items/creating.rst b/source/plugin/items/creating.rst index b5ee122c54e5..c36ceaef5640 100644 --- a/source/plugin/items/creating.rst +++ b/source/plugin/items/creating.rst @@ -85,7 +85,7 @@ That's it. You now have a fully enchanted, unbreakable, and beautifully named sw Spawning the Item ================= -Sure we can simply put the sword into a player's inventory, but what if we wanted to throw it out into the open world +Sure, we can simply put the sword into a player's inventory, but what if we wanted to throw it out into the open world and spawn the item? This is where :doc:`entity spawning <../entities/spawning>` comes into play. Since the in-game graphical representation of an ``ItemStack`` is :javadoc:`Item`, we can spawn it in similarly to a normal :javadoc:`Entity`. The :javadoc:`EntityType` will simply be :javadoc:`EntityTypes#ITEM` and we will need to specify diff --git a/source/plugin/items/usage.rst b/source/plugin/items/usage.rst index 44797f7b2cd5..ffe78093d80f 100644 --- a/source/plugin/items/usage.rst +++ b/source/plugin/items/usage.rst @@ -33,7 +33,7 @@ Checking the type of the item is very simple. You just need to call the :javadoc See how simple that is? Because sticks can stack, we can also find out how many are present. -Getting the amount of items in an ``ItemStack`` is relatively easy. The :javadoc:`ItemStack#getQuantity()` method will +Getting the number of items in an ``ItemStack`` is relatively easy. The :javadoc:`ItemStack#getQuantity()` method will handle this for us. Modifying ItemStack Data diff --git a/source/plugin/manager.rst b/source/plugin/manager.rst index e15e4c0f356d..2d74134004a7 100644 --- a/source/plugin/manager.rst +++ b/source/plugin/manager.rst @@ -24,7 +24,7 @@ Public methods inside the :javadoc:`PluginManager` are used to grab information plugins, alongside their instances. The plugins are stored inside a :javadoc:`PluginContainer` (discussed in next section) to allow for an easy center of information about the specific plugin. As an example, you can use the ``PluginManager`` to communicate with another plugin, grabbing its instance and using the methods it offers to provide -compability or extended features by means of your calling plugin. +compatibility or extended features by means of your calling plugin. Obtaining the Plugin Manager ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/source/plugin/optional/basic.rst b/source/plugin/optional/basic.rst index 976010506f67..862fca4c8287 100644 --- a/source/plugin/optional/basic.rst +++ b/source/plugin/optional/basic.rst @@ -62,7 +62,7 @@ with null checking. Assuming they have defined a local constant ``Foo``, the res } In this example, the plugin author is aware that the method can return null and has a constant available with a -default instance of ``Foo`` which can be used instead. Of course the plugin could just short-circuit the call entirely, +default instance of ``Foo`` which can be used instead. Of course, the plugin could just short-circuit the call entirely, or it could attempt to fetch `Foo` from somewhere else. The key message is that handling nulls even in simple cases can lead to spaghetti code quite quickly, and moreover relies on the plugin author to explicitly visit the method's contract to check whether a null check is necessary in the first place. @@ -77,7 +77,7 @@ However, let's now assume that in a later version of the game, the game develope checked the method contract when they first wrote their code are unwittingly handling the method incorrectly: with no null check in place any code using the ``Foo`` returned from ``getFoo`` is going to raise an NPE. -Thus we can see that allowing implicit nullable contracts leaves us with a selection of pretty awful solutions to +Thus, we can see that allowing implicit nullable contracts leaves us with a selection of pretty awful solutions to choose from: * Plugin authors can assume that **all** methods may return null and code defensively accordingly, however we've already seen that this leads to spaghetti code pretty quickly. @@ -94,9 +94,9 @@ there is a better way: 2. Optional and the Explicit Nullable Contract ============================================== -As mentioned above, APIs for Minecraft are in a difficult situation. Ultimately they need to provide a platform with +As mentioned above, APIs for Minecraft are in a difficult situation. Ultimately, they need to provide a platform with a *reasonable amount of implied stability* atop a platform (the game) with *absolutely no amount of implied stability*. -Thus any API for Minecraft needs to be designed with full awareness that any aspect of the game is liable to change at +Thus, any API for Minecraft needs to be designed with full awareness that any aspect of the game is liable to change at any time for any reason in any way imaginable; up to and including being removed altogether! This volatility is what leads to the problem with nullable method contracts described above. @@ -110,7 +110,7 @@ This volatility is what leads to the problem with nullable method contracts desc By encoding the possibility of returning ``null`` into an explicit contract, we replace the concept of *null checking* with the more nuanced concept of *may not exist*. We also stipulate this contract *from day one*. -So what does this mean? +So, what does this mean? In a nutshell, no longer do plugin authors have to worry about the possibility of ``null`` being returned. Instead the very possibility of a particular object not being available becomes encoded in the very fabric of their plugin code. @@ -184,7 +184,7 @@ Using ``Optional`` we can encode this much much more cleanly as: } This is merely the tip of the ``Optional`` iceberg. In java 8 ``Optional`` also supports the ``Consumer`` and -``Supplier`` interfaces, allowing lambas to be used for *absent* failover. Usage examples for those can be found on the +``Supplier`` interfaces, allowing lambdas to be used for *absent* failover. Usage examples for those can be found on the :doc:`usage` page. .. note:: diff --git a/source/plugin/optional/usage.rst b/source/plugin/optional/usage.rst index 9c9ed7b038cb..42af883ca6a1 100644 --- a/source/plugin/optional/usage.rst +++ b/source/plugin/optional/usage.rst @@ -61,7 +61,7 @@ just use String someString = getOptionalString().orElse(DEFAULT_STRING); -In some cases a default value has to be calculated in a way that has side effects or is particularly expensive. In such +In some cases, a default value has to be calculated in a way that has side effects or is particularly expensive. In such a case it is desirable to calculate the default value only if needed (*lazy evaluation*). The ``orElseGet()`` method accepts a ``Supplier`` instead of a pre-calculated value. If no value is present on the ``Optional`` itself, the ``Supplier`` will be called. Since ``Supplier`` is a functional interface, a lambda expression or method reference can @@ -241,7 +241,7 @@ using the basic ``isPresent()`` and ``get()`` methods gets nasty really quickly. } } -However through use of ``Optional``\ s methods for conditional code execution, all those presence checks are hidden, +However, through the use of ``Optional`` methods for conditional code execution, all those presence checks are hidden, reducing the boilerplate and indentation levels and thus leaving the code much more readable: .. code-block:: java diff --git a/source/plugin/permissions.rst b/source/plugin/permissions.rst index d45951f6f575..d826ea89893b 100644 --- a/source/plugin/permissions.rst +++ b/source/plugin/permissions.rst @@ -65,7 +65,7 @@ all. * ``myplugin.commands.teleport.execute`` * Only grants the user the permission to execute the command. Without this permission he is not able to execute the command even if he has other `teleport` permissions. - (With this permission alone the user would only be able to teleport himself to others in his current world.) + (With this permission alone, the user would only be able to teleport himself to others in his current world.) * ``myplugin.commands.teleport.all`` * Only grants the user the permission to teleport all players at once. @@ -187,7 +187,7 @@ configuration guideline for server owners use ``PermissionDescription``\'s role- assuming that all server owners will want these defaults (at least the first time the plugin runs) and that exceptions will require server owners to explicitly deny the permissions (which can't even be done without a custom permissions service implementation). This should roughly correspond to a guest on a single player lan world without - cheats. For example a chat plugin would allow sending chat messages by default to imitate vanilla game behaviour + cheats. For example, a chat plugin would allow sending chat messages by default to imitate vanilla game behavior for features that were changed by the plugin. .. note:: @@ -229,7 +229,7 @@ These are the default Subject Collections: named ``Subject``\s. Groups should be used if a specific subset of ``Subject``\s have additional permission settings such as a team, faction or role. * System - * Contains other ``Subject``\s used by the server such as the the console and possible remote consoles. + * Contains other ``Subject``\s used by the server such as the console and possible remote consoles. * Command Block * Contains all ``Subject``\s for command blocks. These are useful if you would like to run a ``CommandBlock`` only with the permissions of the creator. @@ -295,7 +295,7 @@ context key with your plugin id) unless these contexts are meant to be shared. ``ContextCalculator`` implementations must be **thread safe**, because they may be called from outside of the main thread, or even called in parallel. For to this reason, all non-name or non-uuid based ``ContextCalculator``\s - (such as location based ones) have to utilize a cache and must be to be updated using event listeners or + (such as location-based ones) have to utilize a cache and must be to be updated using event listeners or synchronized schedulers. Example diff --git a/source/plugin/plugin-identifier.rst b/source/plugin/plugin-identifier.rst index 36d518650054..dfa9d796708d 100644 --- a/source/plugin/plugin-identifier.rst +++ b/source/plugin/plugin-identifier.rst @@ -8,7 +8,7 @@ plugin ID (e.g. when defining plugin dependencies). The plugin ID is also used f folders for your plugin. .. note:: - The plugin ID must be lowercase and start with a alphabetic character. It may only contain alphanumeric characters, + The plugin ID must be lowercase and start with an alphabetic character. It may only contain alphanumeric characters, dashes or underscores. The plugin name does **not** have such a limitation and can even contain spaces or special characters. diff --git a/source/plugin/plugin-meta.rst b/source/plugin/plugin-meta.rst index 7c7a217f6bcf..0959ac913b38 100644 --- a/source/plugin/plugin-meta.rst +++ b/source/plugin/plugin-meta.rst @@ -94,7 +94,7 @@ Enabling -------- If you're using a build system such as Gradle or Maven and have not explicitly disabled annotation processing there is -nothing extra you need to do. By default the annotation processor will automatically run and generate a ``mcmod.info`` +nothing extra you need to do. By default, the annotation processor will automatically run and generate a ``mcmod.info`` file based on the contents of your ``@Plugin`` annotation. If you're not using a build system you need to manually enable annotation processing. diff --git a/source/plugin/practices/best.rst b/source/plugin/practices/best.rst index 6b2597cdcb00..745412599e04 100644 --- a/source/plugin/practices/best.rst +++ b/source/plugin/practices/best.rst @@ -31,9 +31,9 @@ about the Economy API :doc:`here <../economy/index>`, which details everything y Packets ~~~~~~~ -Anything to do with intercepting packets, or introducing custom items/blocks/entities/etc, is *not* planned to be part +Anything to do with intercepting packets, or introducing custom items/blocks/entities/etc., is *not* planned to be part of SpongeAPI. Note that using packets may be looking at the problem the wrong way, as there may be a solution -achievable with the existing SpongeAPI. In some cases it may be possible to add whatever is needed to SpongeAPI; +achievable with the existing SpongeAPI. In some cases, it may be possible to add whatever is needed to SpongeAPI; otherwise, the alternative is to use the Forge API and create a Mod instead. @@ -41,7 +41,7 @@ Using Forge or NMS Classes ~~~~~~~~~~~~~~~~~~~~~~~~~~ We do not recommend working with Forge or Minecraft base classes at all, unless it is to provide compatibility with a -mod for SpongeAPI. Most uses of NMS (net.minecraft.server) code in plugins do not fail gracefully, making +mod for SpongeAPI. Most uses of NMS (``net.minecraft.server``) code in plugins do not fail gracefully, making troubleshooting very difficult. Maintaining NMS modifications is also more difficult than using SpongeAPI. Mods that add to SpongeAPI using code internals will have to specifically write an API, which does not rely on underlying Minecraft code, to be usable by Sponge plugins. However, plugins can be created that load separate “compatibility” @@ -73,7 +73,7 @@ Some definitions may be helpful here. Tweak Mod (aka Tweaker) a subsystem-level mod which hooks directly into the game using LaunchWrapper, usually used for - ModSystems (eg. LiteLoader, FML) and stand-alone mods (eg. Optifine). Can interact with any aspect + ModSystems (e.g. LiteLoader, FML) and stand-alone mods (eg. Optifine). Can interact with any aspect of the game environment directly. Generally breaks every version. Core Mod @@ -108,7 +108,7 @@ because any features accessed via the API are likely to be much more stable. This type of mod can be used to implement plugins whose needs overflow the capability of the API (in the case of a plugin which needs to leverage mixins for a particular feature); but can also be used -for mods which want to leverage services afforded by the API (eg. a mod which wants to provide direct +for mods which want to leverage services afforded by the API (e.g. a mod which wants to provide direct support for permissions or chat channels). Unlike NMS-exploiting "plugins", a hybrid mod makes its nature clear. diff --git a/source/plugin/project/gradle.rst b/source/plugin/project/gradle.rst index 2b0d7368c581..ad6aedb378ef 100644 --- a/source/plugin/project/gradle.rst +++ b/source/plugin/project/gradle.rst @@ -61,7 +61,7 @@ manually: Overriding defaults ~~~~~~~~~~~~~~~~~~~ -By default the Gradle plugin will contribute the **plugin name**, **plugin version** and **description** automatically +By default, the Gradle plugin will contribute the **plugin name**, **plugin version** and **description** automatically to :doc:`/plugin/plugin-meta` with defaults defined in the project properties. It is also possible to override these if you want to specify them manually: diff --git a/source/plugin/scheduler.rst b/source/plugin/scheduler.rst index b0bab722751f..f736f507ccfd 100644 --- a/source/plugin/scheduler.rst +++ b/source/plugin/scheduler.rst @@ -65,38 +65,38 @@ Using the ``Task.Builder``, you can specify other, optional properties, as descr .. _TimeUnit: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html -+-----------------+-------------------------+--------------------------------------------------------------------------+ -| Property | Method Used | Description | -+=================+=========================+==========================================================================+ -| delay | delayTicks(long delay) | The optional amount of time to pass before the task is to be run. | -| | | | -| | delay(long delay, | The time is specified as a number of ticks with the ``delayTicks()`` | -| | TimeUnit unit) | method, or it may be provided as a number of a more convenient time | -| | | unit by specifying a TimeUnit_ with the delay() method. | -| | | | -| | | *Either method, but not both, can specified per task.* | -+-----------------+-------------------------+--------------------------------------------------------------------------+ -| interval | intervalTicks( | The amount of time between repetitions of the task. If an interval is | -| | long interval) | not specified, the task will not be repeated. | -| | | | -| | | The time is specified as a number of ticks with the ``intervalTicks()`` | -| | | method, or it may be provided as a number of a more convenient time | -| | interval(long interval,| unit by specifying a TimeUnit_ with the interval() method. | -| | TimeUnit unit) | | -| | | *Either method, but not both, can specified per task.* | -+-----------------+-------------------------+--------------------------------------------------------------------------+ -| synchronization | async() | A synchronous task is run in the game's main loop in series with the | -| | | tick cycle. If ``Task.Builder#async`` is used, the task will be run | -| | | asynchronously. Therefore, it will run in its own thread, independently | -| | | of the tick cycle, and may not safely use game state. | -| | | (See `Asynchronous Tasks`_.) | -+-----------------+-------------------------+--------------------------------------------------------------------------+ -| name | name(String name) | The name of the task. By default, the name of the task will be | -| | | PLUGIN_ID "-" ( "A-" | "S-" ) SERIAL_ID. For example, a default task name| -| | | could look like "fooplugin-A-12". No two active tasks will have the same | -| | | serial ID for the same synchronization type. If a task name is specified,| -| | | it should be descriptive and aid users in debugging your plugin. | -+-----------------+-------------------------+--------------------------------------------------------------------------+ ++-----------------+------------------------+---------------------------------------------------------------------------+ +| Property | Method Used | Description | ++=================+========================+===========================================================================+ +| delay | delayTicks(long delay) | The optional amount of time to pass before the task is to be run. | +| | | | +| | delay(long delay, | The time is specified as a number of ticks with the ``delayTicks()`` | +| | TimeUnit unit) | method, or it may be provided as a number of a more convenient time | +| | | unit by specifying a TimeUnit_ with the delay() method. | +| | | | +| | | *Either method, but not both, can specified per task.* | ++-----------------+------------------------+---------------------------------------------------------------------------+ +| interval | intervalTicks( | The amount of time between repetitions of the task. If an interval is | +| | long interval) | not specified, the task will not be repeated. | +| | | | +| | interval( | The time is specified as a number of ticks with the ``intervalTicks()`` | +| | long interval, | method, or it may be provided as a number of a more convenient time | +| | TimeUnit unit) | unit by specifying a TimeUnit_ with the interval() method. | +| | | | +| | | *Either method, but not both, can specified per task.* | ++-----------------+------------------------+---------------------------------------------------------------------------+ +| synchronization | async() | A synchronous task is run in the game's main loop in series with the | +| | | tick cycle. If ``Task.Builder#async`` is used, the task will be run | +| | | asynchronously. Therefore, it will run in its own thread, independently | +| | | of the tick cycle, and may not safely use game state. | +| | | (See `Asynchronous Tasks`_.) | ++-----------------+------------------------+---------------------------------------------------------------------------+ +| name | name(String name) | The name of the task. By default, the name of the task will be | +| | | PLUGIN_ID "-" ( "A-" | "S-" ) SERIAL_ID. For example, a default task name | +| | | could look like "fooplugin-A-12". No two active tasks will have the same | +| | | serial ID for the same synchronization type. If a task name is specified, | +| | | it should be descriptive and aid users in debugging your plugin. | ++-----------------+------------------------+---------------------------------------------------------------------------+ Lastly, submit the task to the scheduler using :javadoc:`Task.Builder#submit(Object)`. @@ -286,7 +286,7 @@ determined where that part of the operation is executed. This is different from the CompletableFuture or RxJava since they default to executing on the same thread on which the previous operation ended. -The fact that all these operation try to implicitly find an ``ExecutionContext`` means that you can easily use +The fact that all these operations try to implicitly find an ``ExecutionContext`` means that you can easily use the default ``ExecutionContext.global`` and specifically run the parts that need to be thread-safe on the Sponge server thread. diff --git a/source/plugin/tab-lists.rst b/source/plugin/tab-lists.rst index b5dbea9836a7..0c3946431f31 100644 --- a/source/plugin/tab-lists.rst +++ b/source/plugin/tab-lists.rst @@ -69,7 +69,7 @@ Now let's break this down. We set the list associated with the :javadoc:`TabList using the :javadoc:`TabListEntry.Builder#list(TabList)` method. We then set the game mode of our entry to :javadoc:`GameModes#SURVIVAL`. The game mode of our entry is used to determine various things. On the client, it is used to determine if a player is in creative or perhaps a spectator. If the game mode is spectator, then their name -will also appears gray and italicized. We then need to specify the ``GameProfile`` that the entry is associated with. +will also appear gray and italicized. We then need to specify the ``GameProfile`` that the entry is associated with. The ``GameProfile`` may be constructed using the ``GameProfile#of()`` method, or it can be obtained from a real profile, such as a player. For more information, see the :doc:`game-profile-manager` article. To apply the entry to the tab list, we simply need to call the :javadoc:`TabList#addEntry(TabListEntry)` method. @@ -116,7 +116,7 @@ entry: entry.setLatency(1000); entry.setGameMode(GameModes.SPECTATOR); -Alternatively to getting entries, we can also remove a specified entry. We must simply call the +As an alternative to getting entries, we can also remove a specified entry. We must simply call the :javadoc:`TabList#removeEntry(UUID)` method, specifying the ``UUID`` of the entry that we wish to remove. As with ``getEntry(UUID)``, this will return ``Optional.empty()`` if the specified UUID cannot be found. diff --git a/source/plugin/text/pagination.rst b/source/plugin/text/pagination.rst index ddf325ead185..28607e160444 100644 --- a/source/plugin/text/pagination.rst +++ b/source/plugin/text/pagination.rst @@ -87,7 +87,7 @@ To achieve the preceding output, we might use the following builder pattern: Finally, to send the paginated list to a :javadoc:`MessageReceiver`, use :javadoc:`PaginationList.Builder#sendTo(MessageReceiver)`. -And thats it! To recap, a fully functional paginated list could be generated and sent to a previously defined +And that's it! To recap, a fully functional paginated list could be generated and sent to a previously defined ``msgReceiver`` using the following code: .. code-block:: java diff --git a/source/plugin/text/representations/configurate.rst b/source/plugin/text/representations/configurate.rst index 6141dd0a3242..a27528168007 100644 --- a/source/plugin/text/representations/configurate.rst +++ b/source/plugin/text/representations/configurate.rst @@ -17,7 +17,7 @@ SpongeAPI offers support to serialize text directly to a Configurate configurati For information on how to use Configurate to create configuration files for your plugin, please refer to :doc:`/plugin/configuration/index`. -For example, the text "Hello World!", formatted with the color red and an underline, would have the following HOCON +For example, the text ``"Hello World!"``, formatted with the color red and an underline, would have the following HOCON representation: .. code-block:: guess diff --git a/source/plugin/text/representations/index.rst b/source/plugin/text/representations/index.rst index eabc721959a4..38a3e7654eae 100644 --- a/source/plugin/text/representations/index.rst +++ b/source/plugin/text/representations/index.rst @@ -37,7 +37,7 @@ Deserializing to Text ~~~~~~~~~~~~~~~~~~~~~ To deserialize a ``String`` into its corresponding ``Text`` object, simply use the -:javadoc:`TextSerializer#deserialize(String)` method, specififying the input ``String`` as the only argument. If the +:javadoc:`TextSerializer#deserialize(String)` method, specifying the input ``String`` as the only argument. If the input is incorrectly formatted, a :javadoc:`TextParseException` will be thrown. Alternatively, use the :javadoc:`TextSerializer#deserializeUnchecked(String)` method to deserialize without any exceptions. If there is an error, the raw input will be returned in the form of a ``Text`` object. diff --git a/source/plugin/text/representations/json.rst b/source/plugin/text/representations/json.rst index 7071288709bb..c54d3ab7c28c 100644 --- a/source/plugin/text/representations/json.rst +++ b/source/plugin/text/representations/json.rst @@ -13,7 +13,7 @@ JSON files. The data are stored in structures called trees. Each data point on a tree is a node. See :doc:`/plugin/configuration/nodes` for more information on this topic. -For example, the text "Hello World!", formatted with the color red and an underline, would have the following +For example, the text ``"Hello World!"``, formatted with the color red and an underline, would have the following representation in JSON: .. code-block:: json diff --git a/source/plugin/trade-offers.rst b/source/plugin/trade-offers.rst index 79232acaafa0..e0a45cd9ee5c 100644 --- a/source/plugin/trade-offers.rst +++ b/source/plugin/trade-offers.rst @@ -28,7 +28,7 @@ TradeOffer A trade offer consists of -* an primary/first buying :javadoc:`ItemStackSnapshot` +* a primary/first buying :javadoc:`ItemStackSnapshot` * an optional secondary buying ``ItemStackSnapshot`` * a selling ``ItemStackSnapshot`` * already used uses @@ -60,8 +60,8 @@ TradeOfferListMutator ~~~~~~~~~~~~~~~~~~~~~ A :javadoc:`TradeOfferListMutator` is an interface that is invoked during ``Villager`` level ups. -It can be used to replace existing ``TradeOffers`` (ex higher tier) and add new ``TradeOffers``. -Its simplist and only API provided variant is the ``TradeOfferGenerator``. +It can be used to replace existing ``TradeOffers`` (e.g. higher tier) and add new ``TradeOffers``. +Its simplest and only API provided variant is the ``TradeOfferGenerator``. The different ``TradeOfferListMutators`` for each level and ``Career`` can be configured in the :javadoc:`VillagerRegistry`. .. note:: @@ -105,7 +105,7 @@ VillagerRegistry ================ The ``VillagerRegistry`` can be obtained from the :javadoc:`GameRegistry`. It will be used to configure the -``TradeOfferListMutator`` that will be applied on a ``Villager``'s level-up . +``TradeOfferListMutator`` that will be applied on a ``Villager``'s level-up. .. code-block:: java diff --git a/source/plugin/tutorials.rst b/source/plugin/tutorials.rst index b1075b050c17..82f066e449aa 100644 --- a/source/plugin/tutorials.rst +++ b/source/plugin/tutorials.rst @@ -3,7 +3,7 @@ Tutorials ========= This section is a repository of links to instructional videos about sponge plugin development, prepared by trusted -developers. We hope these help guide you to great heights in sponge plugin development. +developers. We hope that these will guide you to great heights in sponge plugin development. Intellij IDEA diff --git a/source/plugin/wgen/customwgen.rst b/source/plugin/wgen/customwgen.rst index 21dd2d3829b7..80306911cccc 100644 --- a/source/plugin/wgen/customwgen.rst +++ b/source/plugin/wgen/customwgen.rst @@ -27,7 +27,7 @@ Modifying Vanilla Generation Sponge exposes a great deal of vanilla world generation, which can be manipulated through the various interfaces. Currently, the only elements of the generation process that are *easily* exposed to manipulation are the populators. -For a quick example, let's look at how we would change the cactii that spawn in deserts to be taller. +For a quick example, let's look at how we would change the cacti that spawn in deserts to be taller. .. code-block:: java @@ -78,8 +78,8 @@ Voila, now we have pumpkins everywhere. .. note:: In this example we added the pumpkin populator to the end of the populators list, but it should be noted that - this list is order dependent. So if you would like your populator to be called earlier than other populators, - as is usually a good idea with Forest populators, then your should add your populator to the start of the list. + this list is order dependent. So, if you would like your populator to be called earlier than other populators, + as is usually a good idea with Forest populators, then you should add your populator to the start of the list. These two examples should serve to help you get familiar with the realm of working with vanilla populators. This only touches the surface of what is possible. See the javadocs for a complete listing of available populators diff --git a/source/plugin/wgen/index.rst b/source/plugin/wgen/index.rst index 910709372bbf..dc9c4f57cfd8 100644 --- a/source/plugin/wgen/index.rst +++ b/source/plugin/wgen/index.rst @@ -77,5 +77,5 @@ during this phase is a 16x16 area offset by 8 in each of the x and z axes. Only the :javadoc:`Populator`\ s of the biome at the position (x*16+16, 0, z*16+16) are applied to this area. It does not apply a union of all the biomes as is the case for ``GenerationPopulator``\ s. -Populators are ideal for small features (eg. desert wells) and additional terrain covering (eg. trees). +Populators are ideal for small features (e.g. desert wells) and additional terrain covering (e.g. trees). Sponge provides access to a great number of vanilla specified populators which may be reconfigured for your use. diff --git a/source/plugin/wgen/modifiers.rst b/source/plugin/wgen/modifiers.rst index a68568d565b2..73784041ab9b 100644 --- a/source/plugin/wgen/modifiers.rst +++ b/source/plugin/wgen/modifiers.rst @@ -50,7 +50,7 @@ the ``WorldGeneratorModifier`` interface: As you can see, ``WorldGeneratorModifier`` has three methods which we override. :javadoc:`CatalogType#getId()` must be overridden to return a constant and unique identifier for your ``WorldGeneratorModifier``, this is the identifier which will be used in the world configuration to specify which worlds your modifier should be applied to. -:javadoc:`CatalogType#getName()` must be overriden with a constant and simple human-readable name for your modifier. +:javadoc:`CatalogType#getName()` must be overridden with a constant and simple human-readable name for your modifier. The third overridden method is where you make your changes to the world generator. This method is called by the implementation when it is creating the world generator for a world which has specified that your @@ -75,7 +75,7 @@ the first argument and your modifier as the second. } To apply your WorldGeneratorModifier to a world you must add it to the ``world-generation-modifiers`` array within -the world config file found at ``config/sponge/worlds/[dimension]/[worldName]/world.conf``. For example to apply +the world config file found at ``config/sponge/worlds/[dimension]/[worldName]/world.conf``. For example, to apply the skylands WorldGeneratorModifier to a world you would add the skylands modifier's id to the modifiers list. .. code-block:: guess diff --git a/source/plugin/workspace/idea.rst b/source/plugin/workspace/idea.rst index e2479597bcd9..668c2597842e 100644 --- a/source/plugin/workspace/idea.rst +++ b/source/plugin/workspace/idea.rst @@ -15,7 +15,7 @@ Using IDEA Minecraft Dev Plugin to Create a Working Starting Point The `Minecraft Development plugin `_ for IntelliJ is a great plugin by a community member which makes plugin project creation much easier while also providing some neat and useful features for -development. By default it will create a project which uses Gradle as the build tool. +development. By default, it will create a project which uses Gradle as the build tool. Installing the Minecraft Dev Plugin ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/source/preparing/git.rst b/source/preparing/git.rst index b21d60aa74c0..d0321766408d 100644 --- a/source/preparing/git.rst +++ b/source/preparing/git.rst @@ -53,7 +53,8 @@ The simplest method of installing Git on Linux is by using the package manager t You may need to prefix these commands with ``sudo``. 1. Launch the Terminal. -#. Run ``apt-get install git`` if you are on a Ubuntu or Debian-based distribution. Run ``yum install git`` if you are on Fedora. +#. Run ``apt-get install git`` if you are on an Ubuntu or Debian-based distribution. Run ``yum install git`` if you are + on Fedora. GitHub Desktop is currently not available for Linux, unlike Windows and Mac. diff --git a/source/preparing/jdk.rst b/source/preparing/jdk.rst index 653467f6abf0..aeffa38cb523 100644 --- a/source/preparing/jdk.rst +++ b/source/preparing/jdk.rst @@ -14,7 +14,7 @@ Before installing the JDK, uninstall any older versions of Java that are present Sponge contributors and Plugin authors must use JDK 8, as older versions of Java are no longer supported. Be aware that some Minecraft servers have still not yet migrated to Java 8. To run Sponge and its plugins - properly you must update to Java 8, as Sponge won't run on older versions (ie. Java 6 and 7). + properly you must update to Java 8, as Sponge won't run on older versions (i.e. Java 6 and 7). Oracle provides free downloads of the Java Development Kit on their website. Ensure that you are installing the JDK (Java Development Kit), not the JRE (Java Runtime Environment). There is a difference between the two. diff --git a/source/server/getting-started/bungeecord.rst b/source/server/getting-started/bungeecord.rst index c476ade8c2a8..dccf5c86a922 100644 --- a/source/server/getting-started/bungeecord.rst +++ b/source/server/getting-started/bungeecord.rst @@ -11,11 +11,11 @@ For more information about BungeeCord, what it is, how to set it up and how it w .. warning:: In order to connect servers to BungeeCord, you must run the servers in offline mode. In offline mode, without the proper precautions, anyone can log into the server using any name they wish, including those who have admin - permissions. Make sure you protect your servers using firewalls. If you are using linux, there is an IPTables guide + permissions. Make sure you protect your servers using firewalls. If you are using Linux, there is an IPTables guide at `SpigotMC Firewall guide `_, alternatively, some distributions come with `UncomplicatedFirewall "ufw" `_. -If you are not comfortable with tinkering with Linux, or you are unsure as to how to prevent unauthorised access to +If you are not comfortable with tinkering with Linux, or you are unsure as to how to prevent unauthorized access to your servers, consider consulting with someone who has more experience to ensure the security of your server. .. note:: diff --git a/source/server/getting-started/configuration/server-properties.rst b/source/server/getting-started/configuration/server-properties.rst index e750d1526bd0..bccee3a39758 100644 --- a/source/server/getting-started/configuration/server-properties.rst +++ b/source/server/getting-started/configuration/server-properties.rst @@ -148,8 +148,8 @@ Credit goes to the editors at the `Minecraft Wiki `. +If you want to run MinecraftForge mods or you prefer to use Sponge in singleplayer, then choose +:doc:`SpongeForge `. -If you only want to run a Mincraft server with plugins on it (but no mods), then you can choose :doc:`SpongeForge ` or -:doc:`SpongeVanilla `. SpongeForge supports vanilla clients, as long as you don't install Forge mods which require -clientside mods. If you prefer to run a server without Forge, then SpongeVanilla is your preferred option. +If you only want to run a Minecraft server with plugins on it (but no mods), then you can choose +:doc:`SpongeForge ` or :doc:`SpongeVanilla `. SpongeForge supports vanilla clients, as long +as you don't install Forge mods which require client-side mods. If you prefer to run a server without Forge, then +SpongeVanilla is your preferred option. SpongeVanilla and SpongeForge (without mods) behave the same, so the decision between the two is a matter of preference, not a choice of functionality or features. diff --git a/source/server/getting-started/implementations/spongeforge.rst b/source/server/getting-started/implementations/spongeforge.rst index 3d28270134c0..4cede55754ed 100644 --- a/source/server/getting-started/implementations/spongeforge.rst +++ b/source/server/getting-started/implementations/spongeforge.rst @@ -42,8 +42,9 @@ Example SpongeForge Jar files will always follow this naming scheme, to allow you to easily identify compatibility. -For example the file name ``spongeforge-1.12.2-2611-7.1.0-BETA-2990.jar`` is compatible with Minecraft version -``1.12.2``, was built with Forge ``114.23.2.2611`` (Build ``2611``), provides SpongeAPI ``7.1.0`` and was build number ``2990`` of SpongeForge. +For example, the file name ``spongeforge-1.12.2-2611-7.1.0-BETA-2990.jar`` is compatible with Minecraft version +``1.12.2``, was built with Forge ``114.23.2.2611`` (Build ``2611``), provides SpongeAPI ``7.1.0`` and was build number +``2990`` of SpongeForge. .. note:: @@ -56,7 +57,7 @@ For example the file name ``spongeforge-1.12.2-2611-7.1.0-BETA-2990.jar`` is com .. warning:: When investigating crash issues, you can freely try newer versions of Forge than listed on the SpongeForge Jar. - However it is recommended to also check with the matching version, to make sure your issue is not related to a + However, it is recommended to also check with the matching version, to make sure your issue is not related to a version mismatch. Even though there will be no guarantee of compatibility, please report any breakage to the issue tracker, so that SpongeForge can be updated. diff --git a/source/server/getting-started/implementations/spongevanilla.rst b/source/server/getting-started/implementations/spongevanilla.rst index 2b04f9051a3e..4bba3aa17b28 100644 --- a/source/server/getting-started/implementations/spongevanilla.rst +++ b/source/server/getting-started/implementations/spongevanilla.rst @@ -9,7 +9,7 @@ Overview ======== SpongeVanilla is an implementation of SpongeAPI that is created by patching the vanilla Minecraft server. This -means it is a stand-alone server, and does not utilise nor require Minecraft Forge or Forge mod loader (FML). +means it is a stand-alone server, and does not utilize nor require Minecraft Forge or Forge mod loader (FML). SpongeVanilla is being developed in parallel to the Forge version of Sponge, as an alternative platform for users who do not want to run a Forge server. Originally started as an independent project and named Granite, by developers **AzureusNation** and **VoltaSalt**, the SpongeVanilla team officially joined the Sponge development team in March 2015. diff --git a/source/server/getting-started/jre.rst b/source/server/getting-started/jre.rst index 89038dfba21c..479b4b5a8b1a 100644 --- a/source/server/getting-started/jre.rst +++ b/source/server/getting-started/jre.rst @@ -30,7 +30,7 @@ You may have to configure the path to the JRE/JDK in your If your computer supports it, you should use 64-bit versions of Java whenever possible. The Java installers from the `this website `__ should detect whether your computer is ready for 64-bit. -However the autodetection is sometimes wrong (try different browsers, if you are unsure). +However, the autodetection is sometimes wrong (try different browsers, if you are unsure). It is also possible to look this up in the system information window. diff --git a/source/server/getting-started/migrating.rst b/source/server/getting-started/migrating.rst index f6361169ba1e..734c1a61cd75 100644 --- a/source/server/getting-started/migrating.rst +++ b/source/server/getting-started/migrating.rst @@ -32,7 +32,7 @@ Worlds Forge, and thus SpongeForge (and also SpongeVanilla), use the same world structure as vanilla Minecraft. Vanilla Minecraft places the nether (typically ``world_nether``) and the end (typically ``world_the_end``) dimensions within the -``world`` folder. However Bukkit and Spigot *don't* use this system to save the worlds, thus migration is needed. +``world`` folder. However, Bukkit and Spigot *don't* use this system to save the worlds, thus migration is needed. SpongeForge and SpongeVanilla provide a fully automated conversion script which converts your worlds for you. This is how it works: @@ -153,21 +153,21 @@ only file from Canary that can be reused on Sponge. Nevertheless, it is possible to manually migrate some Canary configuration files to their Sponge counterparts, which have been provided below. -+----------------------------+----------------------------+ -| Canary file(s) | Sponge counterpart(s) | -+============================+============================+ -| server.cfg | server.properties | -| _.cfg | | -+----------------------------+----------------------------+ -| _.cfg | global.conf | -| | /dimension.conf | -+----------------------------+----------------------------+ -| ops.cfg | ops.json | -+----------------------------+----------------------------+ -| db.cfg | No counterpart | -+----------------------------+----------------------------+ -| motd.txt | No counterpart | -+----------------------------+----------------------------+ ++-------------------------+----------------------------+ +| Canary file(s) | Sponge counterpart(s) | ++=========================+============================+ +| server.cfg | server.properties | +| _.cfg | | ++-------------------------+----------------------------+ +| _.cfg | global.conf | +| | /dimension.conf | ++-------------------------+----------------------------+ +| ops.cfg | ops.json | ++-------------------------+----------------------------+ +| db.cfg | No counterpart | ++-------------------------+----------------------------+ +| motd.txt | No counterpart | ++-------------------------+----------------------------+ Plugins ------- @@ -238,7 +238,7 @@ vanilla Minecraft, such as ``server.properties``. At first you should decide if you want to run SpongeForge or SpongeVanilla. .. note:: - Both flavours of Sponge are able to serve vanilla clients. Keep in mind that this only applies to SpongeForge as + Both flavors of Sponge are able to serve vanilla clients. Keep in mind that this only applies to SpongeForge as long as you don't install Forge mods which require client modifications. 1. Stop your Vanilla server if it is still running diff --git a/source/server/management/performance-tweaks.rst b/source/server/management/performance-tweaks.rst index f035611c1117..1824de6fde7c 100644 --- a/source/server/management/performance-tweaks.rst +++ b/source/server/management/performance-tweaks.rst @@ -12,9 +12,9 @@ under heavy load. Entity Activation Range ======================= -This setting will alter the loading behaviour of entities around players. Lowering the value will only load close +This setting will alter the loading behavior of entities around players. Lowering the value will only load close entities, while raising it will also load entities that are far away from the player. Lower this to improve your -servers performance, especially with high entity and player counts. To disable activation range for a specific entity +server's performance, especially with high entity and player counts. To disable activation range for a specific entity set its value to ``0``. .. tip:: diff --git a/source/server/management/plugins.rst b/source/server/management/plugins.rst index a74c12aac42b..8883ae7d30bb 100644 --- a/source/server/management/plugins.rst +++ b/source/server/management/plugins.rst @@ -16,7 +16,7 @@ Finding Plugins to your server or computer. SpongePowered currently runs the `Ore platform `_ to make it easy for plugin developers -and users to distribute and download plugins. Alternatively you can search for plugins on the +and users to distribute and download plugins. Alternatively, you can search for plugins on the `SpongePowered forums `_. Installation diff --git a/source/server/spongineer/bugreport.rst b/source/server/spongineer/bugreport.rst index 6a20891a6b9f..7275611c8e04 100644 --- a/source/server/spongineer/bugreport.rst +++ b/source/server/spongineer/bugreport.rst @@ -8,15 +8,17 @@ If there is something wrong with the API or a feature missing you would like to plugins, please report it on the `SpongeAPI issue tracker `_. If there is something wrong with the server and you think the issue is only with SpongeForge or with mod interaction, -report it on the `SpongeForge issue tracker `_. If it is only occuring -on SpongeVanilla then report it on the `SpongeVanilla issue tracker `_, -but if the issue occurs with both implementations please report it on +report it on the `SpongeForge issue tracker `_. If it is only +occurring on SpongeVanilla then report it on the +`SpongeVanilla issue tracker `_, but if the issue occurs with +both implementations please report it on `SpongeCommon issue tracker `_. If you have an issue with the docs themselves, you can report it on the `SpongeDocs issue tracker `_. -Before submitting an issue please make sure you have already read through our our :doc:`debugging`, :doc:`troubleshooting` -and :doc:`logs` sections. If the problem still persists, then file a bug report, utilizing the issue template provided by -Github when you click the ``New Issue`` button and fill out everything applicable. If the project lacks an issue template, -please make sure to include as much relevant information as possible. +Before submitting an issue please make sure you have already read through our +:doc:`debugging`, :doc:`troubleshooting` and :doc:`logs` sections. If the problem still persists, then file a bug +report, utilizing the issue template provided by GitHub when you click the ``New Issue`` button and fill out everything +applicable. If the project lacks an issue template, please make sure to include as much relevant information as +possible. diff --git a/source/server/spongineer/commands.rst b/source/server/spongineer/commands.rst index ec462329ebd9..c5a7080c2645 100644 --- a/source/server/spongineer/commands.rst +++ b/source/server/spongineer/commands.rst @@ -31,14 +31,14 @@ Command Description Permission ====================== ========================================= ============================= /sponge audit Forces loading of unloaded classes to sponge.command.audit enable mixin debugging. -/sponge blockinfo Shows the type and the some additional sponge.command.blockinfo +/sponge blockinfo Shows the type and some additional sponge.command.blockinfo information about the block you are looking at. /sponge chunks Prints out the chunk data for a world, a sponge.command.chunks dimension, or globally. /sponge config Alters a global, world, or a dimension sponge.command.config config. -/sponge entityinfo Shows the type and the some additional sponge.command.entityinfo +/sponge entityinfo Shows the type and some additional sponge.command.entityinfo information about the entity you are looking at. /sponge heap Dumps the JVM heap. sponge.command.heap @@ -78,11 +78,11 @@ Command Description Permission In cases of command conflict, Sponge provides a primary alias mechanism to specify which command is to be used. For example, Minecraft provides the `reload `__ command and Sponge provides the `reload `__ command. To -specify which command to use, prefix it with minecraft or sponge and a ``:``. So, to use Sponge's reload command +specify which command to use, prefix it with ``minecraft`` or ``sponge`` and a ``:``. So, to use Sponge's reload command above, type in ``/sponge:reload``. This approach can also be used to handle conflicts between mods and/or plugins. Do the same thing, just use the mod-id or the plugin-id and a ``:``. An example is ``/examplemodid:tp``. -Furthermore, the primary alias mechanism can be used to overcome incompatibilties. Let's say a plugin registers a +Furthermore, the primary alias mechanism can be used to overcome incompatibilities. Let's say a plugin registers a command, but the command is incompatible with your mod. If you can configure your mod to use a Minecraft native command or another plugin's command, you can restore the expected behavior or prevent unexpected behaviors. @@ -99,8 +99,8 @@ command or another plugin's command, you can restore the expected behavior or pr a. ``/sponge config logging.chunk-load true`` - Since no dimension was specified, the dimension would default to the sender(player) dimension. So if you were in a - mystcraft dimension, this would alter the mystcraft dimension config. + Since no dimension was specified, the dimension would default to the sender(player) dimension. So, if you were in + a mystcraft dimension, this would alter the mystcraft dimension config. b. ``/sponge config -d minecraft:nether logging.chunk-load true`` @@ -121,7 +121,7 @@ Timings Timings are a tool built into Sponge that allows server administrators to monitor the performance of their server. Timings will collect information about a server so that a report may later be generated on the data. Information that is recorded by timings include the server motd, version, uptime, memory, installed plugins, tps, percent of tps loss, -amount of players, tile entities, entities, and chunks. +number of players, tile entities, entities, and chunks. Below is a list of sub-commands to ``/sponge timings``: ======================== ======================================== @@ -224,12 +224,12 @@ There are also extra permissions managing the access to the server: .. note:: - Sponge offers improved multi-world support, such as per-world world borders. By default Sponge only changes the + Sponge offers improved multi-world support, such as per-world world borders. By default, Sponge only changes the world border (or other world options) of the world the player is currently in. The vanilla behavior of setting it for all worlds can be restored using the global configuration and setting ``sponge.commands.multi-world-patches.worldborder`` (or the corresponding entry) to ``false``. See :doc:`/server/getting-started/configuration/sponge-conf` for details. Sponge assumes that multi-world plugins also - provide optimized configuration commands for those options and thus does not provide it's own variants. + provide optimized configuration commands for those options and thus does not provide its own variants. Player Commands =============== @@ -259,7 +259,7 @@ Command Features Sponge and most Sponge plugins support additional command features such as auto completion and hoverable text. The image below shows the output using the ``/sponge plugins`` command (yellow box). The elements in that list can be hovered over to get addition information such as the current version number (red box). Some elements in the example below also have -additional actions bound to them. For example the plugin entries in that list can be clicked to show more detailed +additional actions bound to them. For example, the plugin entries in that list can be clicked to show more detailed information (purple box) about that plugin. This is equivalent to sending the ``/sponge plugins `` command. The auto completion can be triggered by pressing tab. Entering ``/sponge plugins `` (with a trailing space) and then pressing tab will show a list of possible values (turquoise box) that can be used in that context. Pressing tab again diff --git a/source/server/spongineer/debugging.rst b/source/server/spongineer/debugging.rst index b4b7d24be2ca..96d9d939c2ac 100644 --- a/source/server/spongineer/debugging.rst +++ b/source/server/spongineer/debugging.rst @@ -9,8 +9,8 @@ Checklist ========= Whenever you encounter a crash or warning make sure you set SpongeForge or SpongeVanilla up correctly. Here's a short -checklist to help you out. If you're unsure on how to aquire the information needed, have a look at the :doc:`logs` page. -It explains how you get the desired answers out of your logfiles. +checklist to help you out. If you're unsure on how to acquire the information needed, have a look at the :doc:`logs` +page. It explains how you get the desired answers out of your log files. 1. Is Java 8 installed and is Sponge using it? @@ -19,7 +19,7 @@ Sponge requires Java 8 and will crash when using Java 7 or older. 2. Is the recommended Forge version installed? Usually SpongeForge will run on older or newer Forge builds than the recommended build. -However it is strongly advised to run the recommended build only. +However, it is strongly advised to run the recommended build only. If you encounter a crash and your versions are mismatching, match them first and try again. If you're unsure which Forge build you need, take a look at :doc:`/server/getting-started/implementations/spongeforge` @@ -117,7 +117,7 @@ feature too. A ``NoClassDefFoundError`` occurs when the plugin tries to access a class that isn't on the classpath. This happens when the API got adjusted or refactored lately and you're trying to run an older plugin on a newer build of Sponge -and vice versa. Always try to use the correct version! Either ask the Plugin author which Sponge version he build +and vice versa. Always try to use the correct version! Either ask the Plugin author which Sponge version he builds against or try updating/downgrading your SpongeForge or SpongeVanilla to solve this. Exceptions at Runtime @@ -211,9 +211,9 @@ mod names; checking the ``Caused by`` blocks may also help. If you encounter a bug it is usually a good idea to create a backup first, then try to reproduce it, then narrow it down by removing mods. Only then should you report the error. If the error occurs in the absence of Sponge - plugins, try removing SpongeForge. If the error persists its not related to Sponge. Its usually a good idea to - report bugs to the mod authors first as they have good knowledge of the parts of code they are working with. However - you can always contact us through IRC or other means. Please provide logs for bug reports, if possible. + plugins, try removing SpongeForge. If the error persists it's not related to Sponge. It's usually a good idea to + report bugs to the mod authors first as they have good knowledge of the parts of code they are working with. + However, you can always contact us through IRC or other means. Please provide logs for bug reports, if possible. Nasty bugs: Minecraft modding uses some advanced techniques such as Mixins and ClassLoaderTransformations, which means that although a Minecraft class has been reported as the cause, it does not mean the code executed inside is from diff --git a/source/server/spongineer/logs.rst b/source/server/spongineer/logs.rst index 5d3ca7a4fe5b..d4d9fcfa54d0 100644 --- a/source/server/spongineer/logs.rst +++ b/source/server/spongineer/logs.rst @@ -12,14 +12,14 @@ logfiles from SpongeForge and SpongeVanilla servers including short descriptions SpongeForge logfiles ==================== -SpongeForge writes several logfiles to the ``/logs`` folder located inside your servers directory. +SpongeForge writes several logfiles to the ``/logs`` folder located inside your server's directory. As of Forge 1.12.2 - 14.23.4.2705 these are: 1. ``debug.log`` #. ``latest.log`` debug.log -~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~ .. note:: diff --git a/source/server/spongineer/troubleshooting.rst b/source/server/spongineer/troubleshooting.rst index fd17ab92c253..ebe51ba9fc3d 100644 --- a/source/server/spongineer/troubleshooting.rst +++ b/source/server/spongineer/troubleshooting.rst @@ -31,7 +31,7 @@ Not Enough Free Memory **Symptoms**: Server crashes, often accompanied with "Out of Memory" messages. **Solutions**: Expand the maximum Perm memory size with the startup argument ``-XX:MaxPermSize=128``. Expand your -server heap memory (if possible) with startup arguments eg. ``-Xms1024M`` (1GB starting memory) and ``-Xmx2048M`` +server heap memory (if possible) with startup arguments e.g. ``-Xms1024M`` (1GB starting memory) and ``-Xmx2048M`` (2GB maximum). Monitor your free memory on the computer and see if there is some locked up in other processes. You may need to kill frozen java processes, or restart your machine. Memory leaks sometimes occur with bugs in plugins, which can take time to isolate. @@ -41,8 +41,8 @@ your Task Manager to see if you are using all available Memory. If you are, the to your system. If there is still plenty of memory available, you are running 32-bit Java. If you are using 32-bit Java, we recommend an upgrade to 64-bit Java, provided that your Operating System is also 64-bit. -Malformed Config File (eg. Bad Editing) ---------------------------------------- +Malformed Config File (e.g. Bad Editing) +---------------------------------------- **Symptom**: One (or more) plugins refuse to load, or behave in unexpected ways. The server log files will contain messages about unreadable files on startup. The server may crash, and data may be corrupted. @@ -61,15 +61,15 @@ incorrectly edited config file (above). Remove suspect plugins and add them agai each time. The problem may originate from one plugin that is out of date - check for updates. Plugin conflict may also be the cause, having two incompatible plugins. -Operating System Unstable (eg. Virus Infection) ------------------------------------------------ +Operating System Unstable (e.g. Virus Infection) +------------------------------------------------ **Symptom**: The server keeps crashing or timing out, and other parts of your operating system are also having problems. **Solution**: Stop everything. Thoroughly check your system and storage devices for malware and viruses. Good tools for this include AdwCleaner, Junkware Removal Tool, MalwareBytes, and most antivirus ware. Check your server files -for corruption after a clean restart of your system. Examine the hardware for damage too if the problems persist - eg. a -faulty power supply. +for corruption after a clean restart of your system. Examine the hardware for damage too if the problems persist - e.g. +a faulty power supply. Corrupted Data --------------