@@ -0,0 +1,2654 @@
+/*%0A * Copyright 2017 Hex %3Chex@hex.lc%3E%0A * and other copyright owners as documented in the project's IP log.%0A *%0A * Licensed under the Apache License, Version 2.0 (the %22License%22);%0A * you may not use this file except in compliance with the License.%0A * You may obtain a copy of the License at%0A *%0A *     http://www.apache.org/licenses/LICENSE-2.0%0A *%0A * Unless required by applicable law or agreed to in writing, software%0A * distributed under the License is distributed on an %22AS IS%22 BASIS,%0A * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.%0A * See the License for the specific language governing permissions and%0A * limitations under the License.%0A */%0Apackage org.basinmc.sink.command;%0A%0Aimport org.basinmc.faucet.command.Color;%0Aimport org.basinmc.faucet.command.Communicable;%0Aimport org.basinmc.faucet.command.annotation.Alias;%0Aimport org.basinmc.faucet.command.annotation.Command;%0Aimport org.basinmc.faucet.command.annotation.DateFormat;%0Aimport org.basinmc.faucet.command.annotation.Description;%0Aimport org.basinmc.faucet.command.annotation.Option;%0Aimport org.basinmc.faucet.command.annotation.Subcommand;%0Aimport org.basinmc.faucet.command.annotation.Supercommand;%0A%0Aimport java.util.Optional;%0A%0A// TODO - this class does nothing currently but serve as an example command implementation.%0A@Command(%22basinctl%22) // all hail our systemd overlords%0A@Alias(%22b%22)%0A@Description(%22Provides userspace access and control to server-specific functions.%22)%0Apublic class BasinCommand %7B%0A    @Supercommand%0A    public void printServerState(Communicable sender) %7B%0A        sender.sendMessage(Color.GOLD + %22Basin Server Software%22);%0A    %7D%0A%0A    @Subcommand(%22plugins%22)%0A    @Alias(%22pl%22)%0A    @Alias(%22bundles%22)%0A    @Description(%22List plugins.%22)%0A    public void plugins(Communicable sender,%0A                        @Option(desc = %22Nicely format output in a table%22, shortOpt = 't', longOpt = %22table%22) boolean table,%0A                        @Option(desc = %22Hide initialization states%22, shortOpt = 'H', longOpt = %22hide-init%22) boolean hideinit,%0A                        @Option(desc = %22Show internal bundles%22, shortOpt = 'a', longOpt = %22show-all%22) boolean all) %7B%0A%0A    %7D%0A%0A    @Subcommand(%22restart%22)%0A    @Alias(%22reload%22)%0A    @Description(%22Restart a bundle.%22)%0A    public void restart(Communicable sender,%0A                        @Option(desc = %22Bundle to restart, defaults to the server%22) Optional%3CString%3E bundleName,%0A                        @Option(desc = %22Delay before the restart occurs%22, shortOpt = 'd', longOpt = %22delay%22) @DateFormat long delay,%0A                        @Option(desc = %22Notify online players%22, shortOpt = 'n', longOpt = %22notify%22) boolean notify) %7B%0A%0A    %7D%0A%7D%0A

Add an example command implementation.