Custom Bukkit/Bungee plugins used by the former Overcast Network
NOTE: This repository is no longer maintained, but you can still contribute to forks.
Clone and install
Universe to download the required dependencies.
git clone [email protected]:Electroid/Universe.git cd Universe git submodule update --init mvn clean install
Clone and install
ProjectAres to build the suite of plugins.
cd .. git clone [email protected]:OvercastNetwork/ProjectAres.git cd ProjectAres mvn clean install
ProjectAres is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
A copy of the GNU Affero General Public License is included in the file LICENSE.txt, and can also be found at https://www.gnu.org/licenses/agpl-3.0.en.html
The AGPL license is quite restrictive, please make sure you understand it. If you run a modified version of this software as a network service, anyone who can use that service must also have access to the modified source code.
These plugins were converted from an internal project to open source in a rush, so they are not yet well adapted for third party use. Improving this adaptation is a top development priority, specifically:
You may find some help on the PGM Discord, in these channels:
#help Help with running a ProjectAres server
#contributing Discussion about contributing to ProjectAres
Please keep in mind that this help is provided by volunteers and other users, out of the kindness of their golden hearts, and not as an obligation to you.
To build everything, just run
mvn clean package.
This should download all dependencies from our repository and create several .jar files in the
target directories of each module.
If the build fails, please report it in Discord.
You can also download builds from our Jenkins server.
Appropriate SportBukkit settings are provided in
bukkit.yml.sample in this folder.
Of particular interest are these:
settings.bungeecord: trueThis is required in order to connect through Bungee
settings.legacy-knockback: trueEmulate knockback mechanics from older versions of Minecraft
settings.water-pushes-tnt: falseDisable water pushing TNT, a newer Minecraft feature that we don't use.
On any PGM or Lobby server, these external plugins can/must be loaded:
As well as these plugins from this repo:
For a PGM server, you also need:
For tournament support on PGM, you also need:
And for a Lobby server, you just need:
For a Bungee proxy, you just need these two:
UtilUtility code library (not a plugin) used by everything
coreUtils independent of Bukkit or Bungee
apiData models and services, not related to Minecraft
minecraftCode specific to Minecraft, including standalone service implementations
ocnHybrid plugin implementing OCN's HTTP and AMQP services
CommonsFunctionality common to all servers e.g. friends, nicknames, etc.
coreCode that is common to Bukkit and Bungee plugins
PGMPrimary Bukkit plugin on match servers
LobbyMain Bukkit plugin on lobby servers
TourneyBukkit plugin that extends PGM with tournament-related functionality
Direct dependencies between the Bukkit plugins:
The API plugin is used by all the other plugins to interact with the data model. It is split into interface and implementation layers, allowing different backends to be used. There is a built-in default backend that implements minimal functionality for running a standalone server. The api-ocn plugin is the backend implementation for the former Overcast Network.
null, generally speaking.
@Nullablewherever nulls are allowed. Place it before the type, if possible.
@Nonnull. Assume anything (in our own code) without
@Nullableis never null.
checkNotNullon constructor arguments for manually created objects. Don't check
@Injected values, they cannot be null.
finalfields, and create immutable data types, wherever possible.
get, but they can if you think it's important.
org.bukkit.plugin.Plugininside its private module.
Pluginwill need to be bound in some plugin's private module.
Plugindirectly. There are specific bindings for most Bukkit service types (e.g.
Configuration) and several interfaces of our own that wrap small parts of the Bukkit API (e.g.
Plugin, always inject the base interface, never a specific plugin's class. This makes it easy to move things between plugins.
@Singletonbound in a private environment (e.g. a plugin's private environment) will only be unique within that environment, not the entire process, so be careful not to accidentally duplicate a singleton in multiple private environments.
IllegalArgumentException, because it's hard to be certain where they come from. If you need to catch them, keep the code inside the
tryblock as small as possible.
tc.oc.commons.core.exception.ExceptionHandlerand pass it the exceptions.
LoggingExceptionHandleror some system logger. You can tell the user about the error so they know what's going on, but don't expect them to deal with it.
AsyncEvents) and scheduled tasks (except async tasks) run on the main thread.
FutureCallbacks to handle API results.
SyncExecutorto get back on the main thread from a background thread.
.propertiesfiles in Commons.
TranslatableComponentto display the localized message. However, it must pass through the
ComponentRenderContextbefore being sent to the player. That will apply the server-side translations.
crowdin-cli upload sourcesin the Commons folder. This should be done after the new code is deployed to production.