This commit is contained in:
kento2 2026-06-03 01:30:08 +02:00
parent e85228e717
commit 0cda14e3cc
34 changed files with 316 additions and 333 deletions

3
.idea/.gitignore generated vendored
View file

@ -1,3 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml

21
.idea/gradle.xml generated
View file

@ -1,21 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleHome" value="" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/core-bukkit-api" />
<option value="$PROJECT_DIR$/core-bukkit-impl" />
<option value="$PROJECT_DIR$/core-lib" />
<option value="$PROJECT_DIR$/core-velocity" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>
</project>

View file

@ -1,26 +0,0 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="ClassCanBeRecord" enabled="true" level="TEXT ATTRIBUTES" enabled_by_default="true" editorAttributes="CONSIDERATION_ATTRIBUTES">
<option name="myIgnoredAnnotations">
<list>
<option value="io.micronaut.*" />
<option value="jakarta.*" />
<option value="javax.*" />
<option value="lombok.Value" />
<option value="org.springframework.*" />
</list>
</option>
</inspection_tool>
<inspection_tool class="NullableProblems" enabled="true" level="WEAK WARNING" enabled_by_default="true" editorAttributes="INFO_ATTRIBUTES">
<option name="REPORT_NULLABLE_METHOD_OVERRIDES_NOTNULL" value="true" />
<option name="REPORT_NOT_ANNOTATED_METHOD_OVERRIDES_NOTNULL" value="true" />
<option name="REPORT_NOTNULL_PARAMETER_OVERRIDES_NULLABLE" value="true" />
<option name="REPORT_NOT_ANNOTATED_PARAMETER_OVERRIDES_NOTNULL" value="true" />
<option name="REPORT_NOT_ANNOTATED_GETTER" value="true" />
<option name="REPORT_NOT_ANNOTATED_SETTER_PARAMETER" value="true" />
<option name="REPORT_ANNOTATION_NOT_PROPAGATED_TO_OVERRIDERS" value="true" />
<option name="REPORT_NULLS_PASSED_TO_NON_ANNOTATED_METHOD" value="true" />
</inspection_tool>
</profile>
</component>

6
.idea/kotlinc.xml generated
View file

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="KotlinJpsPluginSettings">
<option name="version" value="2.2.10" />
</component>
</project>

7
.idea/misc.xml generated
View file

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

6
.idea/vcs.xml generated
View file

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

View file

@ -12,16 +12,16 @@ repositories {
} }
dependencies { dependencies {
//api("org.spigotmc:spigot-api:1.21.11-R0.1-SNAPSHOT") api(project(":core-lib"))
// Source: https://mvnrepository.com/artifact/io.nats/jnats api("org.spigotmc:spigot-api:1.21.11-R0.1-SNAPSHOT")
// https://mvnrepository.com/artifact/io.nats/jnats
implementation("io.nats:jnats:2.25.2") implementation("io.nats:jnats:2.25.2")
api("io.nats:jnats:2.25.2") api("io.nats:jnats:2.25.2")
api("de.kentoj.scrow:kencommandapi-core:0.4") api("de.kentoj.scrow:kencommandapi-core:0.8")
api("de.kentoj.scrow:kencommandapi-bukkit:0.4") api("de.kentoj.scrow:kencommandapi-bukkit:0.8")
api(project(":core-lib"))
} }
publishing { publishing {

View file

@ -19,7 +19,7 @@ public class ScrowAPI {
@Getter @Getter
private static @Nullable MongoDatabase database; private static @Nullable MongoDatabase database;
@Getter @Getter
private static BukkitKenCommandApi commandManager; private static BukkitKenCommandApi commandApi;
@Getter @Getter
private static Scheduler minecraftScheduler; private static Scheduler minecraftScheduler;
@Getter @Getter
@ -44,8 +44,8 @@ public class ScrowAPI {
} }
@ApiStatus.Internal @ApiStatus.Internal
public static void setCommandManager(BukkitKenCommandApi commandManager) { public static void setCommandApi(BukkitKenCommandApi commandApi) {
ScrowAPI.commandManager = commandManager; ScrowAPI.commandApi = commandApi;
} }
@ApiStatus.Internal @ApiStatus.Internal

View file

@ -3,7 +3,6 @@ plugins {
id("java") id("java")
id("com.gradleup.shadow") version "9.2.0" id("com.gradleup.shadow") version "9.2.0"
id("xyz.jpenilla.run-paper") version "2.3.1" id("xyz.jpenilla.run-paper") version "2.3.1"
kotlin("jvm")
} }
group = "de.kentoj.scrow" group = "de.kentoj.scrow"
@ -14,21 +13,16 @@ repositories {
} }
dependencies { dependencies {
testImplementation(platform("org.junit:junit-bom:5.10.0"))
testImplementation("org.junit.jupiter:junit-jupiter")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
implementation(kotlin("stdlib-jdk8"))
implementation(project(":core-bukkit-api")) implementation(project(":core-bukkit-api"))
implementation("org.spigotmc:spigot-api:1.21.11-R0.1-SNAPSHOT") implementation(kotlin("stdlib-jdk8"))
implementation("de.kentoj.scrow:kencommandapi-bukkit:0.4")
implementation(project(":core-lib")) //implementation("org.spigotmc:spigot-api:1.21.11-R0.1-SNAPSHOT")
//implementation("de.kentoj.scrow:kencommandapi-bukkit:0.8")
} }
tasks { tasks {
runServer { runServer {
minecraftVersion("1.21.11") minecraftVersion("1.21.11")
downloadPlugins { downloadPlugins {
url("https://hangarcdn.papermc.io/plugins/ViaVersion/ViaVersion/versions/5.7.1/PAPER/ViaVersion-5.7.1.jar") url("https://hangarcdn.papermc.io/plugins/ViaVersion/ViaVersion/versions/5.7.1/PAPER/ViaVersion-5.7.1.jar")
@ -40,10 +34,3 @@ tasks {
tasks.build { tasks.build {
dependsOn("shadowJar") dependsOn("shadowJar")
} }
tasks.test {
useJUnitPlatform()
}
kotlin {
jvmToolchain(21)
}

View file

@ -17,11 +17,11 @@ public class CoreImplPlugin extends JavaPlugin {
ScrowAPISurface.initScrowAPI(this, ENABLE_DATABASE); ScrowAPISurface.initScrowAPI(this, ENABLE_DATABASE);
{ {
ScrowAPI.getCommandManager().register(new FriendCommand().getRootNode()); ScrowAPI.getCommandApi().register(new FriendCommand().getRootNode());
ScrowAPI.getCommandManager().register(new CoinsCommand().getRootNode()); ScrowAPI.getCommandApi().register(new CoinsCommand().getRootNode());
ScrowAPI.getCommandManager().register(new CrownCommand().getRootNode()); ScrowAPI.getCommandApi().register(new CrownCommand().getRootNode());
ScrowAPI.getCommandManager().register(new PlayCommand().getRootNode()); ScrowAPI.getCommandApi().register(new PlayCommand().getRootNode());
ScrowAPI.getCommandManager().register(new LobbyCommand().getRootNode()); ScrowAPI.getCommandApi().register(new LobbyCommand().getRootNode());
} }
registerServer(); registerServer();

View file

@ -26,7 +26,7 @@ import reactor.core.scheduler.Schedulers;
import java.io.IOException; import java.io.IOException;
@NoArgsConstructor(access = AccessLevel.PRIVATE) @NoArgsConstructor(access = AccessLevel.NONE)
public class ScrowAPISurface { public class ScrowAPISurface {
private static @Nullable MongoClient mongoClient; private static @Nullable MongoClient mongoClient;
@ -75,7 +75,7 @@ public class ScrowAPISurface {
ScrowAPI.setFriendshipService(ScrowAPI.getDatabase() != null ? ScrowAPI.setFriendshipService(ScrowAPI.getDatabase() != null ?
new MongoFriendshipService(ScrowAPI.getDatabase()) : new InMemoryFriendshipService()); new MongoFriendshipService(ScrowAPI.getDatabase()) : new InMemoryFriendshipService());
ScrowAPI.setCommandManager(new BukkitKenCommandApi()); ScrowAPI.setCommandApi(new BukkitKenCommandApi());
} }
public static void destroyScrowAPI() { public static void destroyScrowAPI() {

View file

@ -1,7 +1,7 @@
package de.kentoj.scrow.bukkit.crown; package de.kentoj.scrow.bukkit.crown;
import de.kentoj.kencommandapi.BukkitCommandContext; import de.kentoj.kencommandapi.BukkitCommandContext;
import de.kentoj.kencommandapi.api.structure.node.CommandNode; import de.kentoj.kencommandapi.api.nodes.CommandNode;
import de.kentoj.scrow.bukkit.ScrowAPI; import de.kentoj.scrow.bukkit.ScrowAPI;
import lombok.Getter; import lombok.Getter;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -12,9 +12,9 @@ public class CrownCommand {
private final CommandNode<CommandSender, BukkitCommandContext> rootNode; private final CommandNode<CommandSender, BukkitCommandContext> rootNode;
public CrownCommand() { public CrownCommand() {
this.rootNode = ScrowAPI.getCommandManager().createNode("crown", "server-manager"); this.rootNode = ScrowAPI.getCommandApi().createNode("crown", "server-manager");
this.rootNode.addLiteral(new CrownListServersLiteral().getNode()); this.rootNode.addLiteral(new CrownListServersLiteral().getRootNode());
this.rootNode.addLiteral(new CrownDeployServerLiteral().getNode()); this.rootNode.addLiteral(new CrownDeployServerLiteral().getRootNode());
this.rootNode.addLiteral(new CrownDestroyServerLiteral().getNode()); this.rootNode.addLiteral(new CrownDestroyServerLiteral().getRootNode());
} }
} }

View file

@ -1,10 +1,10 @@
package de.kentoj.scrow.bukkit.crown; package de.kentoj.scrow.bukkit.crown;
import de.kentoj.kencommandapi.BukkitCommandContext; import de.kentoj.kencommandapi.BukkitCommandContext;
import de.kentoj.kencommandapi.api.argument.CommandArgument;
import de.kentoj.kencommandapi.api.nodes.CommandNode;
import de.kentoj.kencommandapi.api.processing.CommandExecutor; import de.kentoj.kencommandapi.api.processing.CommandExecutor;
import de.kentoj.kencommandapi.api.structure.argument.CommandArgument; import de.kentoj.kencommandapi.api.types.StringArgumentType;
import de.kentoj.kencommandapi.api.structure.argument.types.StringArgumentType;
import de.kentoj.kencommandapi.api.structure.node.CommandNode;
import de.kentoj.scrow.bukkit.ScrowAPI; import de.kentoj.scrow.bukkit.ScrowAPI;
import lombok.Getter; import lombok.Getter;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -12,15 +12,15 @@ import org.bukkit.command.CommandSender;
public class CrownDeployServerLiteral implements CommandExecutor<CommandSender, BukkitCommandContext> { public class CrownDeployServerLiteral implements CommandExecutor<CommandSender, BukkitCommandContext> {
@Getter @Getter
private final CommandNode<CommandSender, BukkitCommandContext> node; private final CommandNode<CommandSender, BukkitCommandContext> rootNode;
private final CommandArgument<CommandSender, BukkitCommandContext, String> templateArg; private final CommandArgument<CommandSender, BukkitCommandContext, String> templateArg;
public CrownDeployServerLiteral() { public CrownDeployServerLiteral() {
this.node = ScrowAPI.getCommandManager().createNode("deploy-server"); this.rootNode = ScrowAPI.getCommandApi().createNode("deploy-server");
this.node.setExecutor(this); this.rootNode.setExecutor(this);
{ {
this.templateArg = ScrowAPI.getCommandManager().createArgument("template", new StringArgumentType<>()); this.templateArg = ScrowAPI.getCommandApi().createArgument("template", new StringArgumentType<>());
this.node.addArgument(templateArg); this.rootNode.addArgument(templateArg);
} }
} }

View file

@ -1,10 +1,10 @@
package de.kentoj.scrow.bukkit.crown; package de.kentoj.scrow.bukkit.crown;
import de.kentoj.kencommandapi.BukkitCommandContext; import de.kentoj.kencommandapi.BukkitCommandContext;
import de.kentoj.kencommandapi.api.argument.CommandArgument;
import de.kentoj.kencommandapi.api.nodes.CommandNode;
import de.kentoj.kencommandapi.api.processing.CommandExecutor; import de.kentoj.kencommandapi.api.processing.CommandExecutor;
import de.kentoj.kencommandapi.api.structure.argument.CommandArgument; import de.kentoj.kencommandapi.api.types.StringArgumentType;
import de.kentoj.kencommandapi.api.structure.argument.types.StringArgumentType;
import de.kentoj.kencommandapi.api.structure.node.CommandNode;
import de.kentoj.scrow.bukkit.ScrowAPI; import de.kentoj.scrow.bukkit.ScrowAPI;
import de.kentoj.scrowlib.servermanager.ServerInstance; import de.kentoj.scrowlib.servermanager.ServerInstance;
import lombok.Getter; import lombok.Getter;
@ -15,14 +15,14 @@ import java.util.stream.Collectors;
public class CrownDestroyServerLiteral implements CommandExecutor<CommandSender, BukkitCommandContext> { public class CrownDestroyServerLiteral implements CommandExecutor<CommandSender, BukkitCommandContext> {
@Getter @Getter
private final CommandNode<CommandSender, BukkitCommandContext> node; private final CommandNode<CommandSender, BukkitCommandContext> rootNode;
private final CommandArgument<CommandSender, BukkitCommandContext, String> handleArg; private final CommandArgument<CommandSender, BukkitCommandContext, String> handleArg;
public CrownDestroyServerLiteral() { public CrownDestroyServerLiteral() {
this.node = ScrowAPI.getCommandManager().createNode("destroy-server"); this.rootNode = ScrowAPI.getCommandApi().createNode("destroy-server");
this.node.setExecutor(this); this.rootNode.setExecutor(this);
{ {
this.handleArg = ScrowAPI.getCommandManager().createArgument("template", new StringArgumentType<>()); this.handleArg = ScrowAPI.getCommandApi().createArgument("template", new StringArgumentType<>());
this.handleArg.setSuggestionProvider(ctx -> { this.handleArg.setSuggestionProvider(ctx -> {
//noinspection CodeBlock2Expr //noinspection CodeBlock2Expr
return ScrowAPI.getServerManager().getRunningServers() return ScrowAPI.getServerManager().getRunningServers()
@ -30,7 +30,7 @@ public class CrownDestroyServerLiteral implements CommandExecutor<CommandSender,
.collect(Collectors.toSet()) .collect(Collectors.toSet())
.toFuture(); .toFuture();
}); });
this.node.addArgument(handleArg); this.rootNode.addArgument(handleArg);
} }
} }

View file

@ -1,8 +1,8 @@
package de.kentoj.scrow.bukkit.crown; package de.kentoj.scrow.bukkit.crown;
import de.kentoj.kencommandapi.BukkitCommandContext; import de.kentoj.kencommandapi.BukkitCommandContext;
import de.kentoj.kencommandapi.api.nodes.CommandNode;
import de.kentoj.kencommandapi.api.processing.CommandExecutor; import de.kentoj.kencommandapi.api.processing.CommandExecutor;
import de.kentoj.kencommandapi.api.structure.node.CommandNode;
import de.kentoj.scrow.bukkit.ScrowAPI; import de.kentoj.scrow.bukkit.ScrowAPI;
import lombok.Getter; import lombok.Getter;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -10,11 +10,11 @@ import org.bukkit.command.CommandSender;
public class CrownListServersLiteral implements CommandExecutor<CommandSender, BukkitCommandContext> { public class CrownListServersLiteral implements CommandExecutor<CommandSender, BukkitCommandContext> {
@Getter @Getter
private final CommandNode<CommandSender, BukkitCommandContext> node; private final CommandNode<CommandSender, BukkitCommandContext> rootNode;
public CrownListServersLiteral() { public CrownListServersLiteral() {
this.node = ScrowAPI.getCommandManager().createNode("list-servers"); this.rootNode = ScrowAPI.getCommandApi().createNode("list-servers");
this.node.setExecutor(this); this.rootNode.setExecutor(this);
} }
@Override @Override

View file

@ -1,10 +1,9 @@
package de.kentoj.scrow.bukkit.economy; package de.kentoj.scrow.bukkit.economy;
import de.kentoj.kencommandapi.BukkitCommandContext; import de.kentoj.kencommandapi.BukkitCommandContext;
import de.kentoj.kencommandapi.api.processing.CommandContext; import de.kentoj.kencommandapi.api.argument.CommandArgument;
import de.kentoj.kencommandapi.api.structure.argument.CommandArgument; import de.kentoj.kencommandapi.api.nodes.CommandNode;
import de.kentoj.kencommandapi.api.structure.argument.types.IntegerArgumentType; import de.kentoj.kencommandapi.api.types.IntegerArgumentType;
import de.kentoj.kencommandapi.api.structure.node.CommandNode;
import de.kentoj.kencommandapi.type.OfflinePlayerArgumentType; import de.kentoj.kencommandapi.type.OfflinePlayerArgumentType;
import de.kentoj.scrow.bukkit.ScrowAPI; import de.kentoj.scrow.bukkit.ScrowAPI;
import lombok.Getter; import lombok.Getter;
@ -23,19 +22,19 @@ public class CoinsCommand {
private final CommandArgument<CommandSender, BukkitCommandContext, Integer> amountArg; private final CommandArgument<CommandSender, BukkitCommandContext, Integer> amountArg;
public CoinsCommand() { public CoinsCommand() {
this.rootNode = ScrowAPI.getCommandManager().createNode("coins", "eco"); this.rootNode = ScrowAPI.getCommandApi().createNode("coins", "eco");
this.playerArg = ScrowAPI.getCommandManager().createArgument("player", OfflinePlayerArgumentType.getInstance()); this.playerArg = ScrowAPI.getCommandApi().createArgument("player", OfflinePlayerArgumentType.getInstance());
this.amountArg = ScrowAPI.getCommandManager().createArgument("amount", new IntegerArgumentType<>()); this.amountArg = ScrowAPI.getCommandApi().createArgument("amount", new IntegerArgumentType<>());
{ {
var setLiteral = ScrowAPI.getCommandManager().createNode("set"); var setLiteral = ScrowAPI.getCommandApi().createNode("set");
rootNode.addLiteral(setLiteral); rootNode.addLiteral(setLiteral);
setLiteral.addArgument(playerArg); setLiteral.addArgument(playerArg);
setLiteral.addArgument(amountArg); setLiteral.addArgument(amountArg);
setLiteral.setExecutor(this::setCoins); setLiteral.setExecutor(this::setCoins);
} }
{ {
var getLiteral = ScrowAPI.getCommandManager().createNode("get"); var getLiteral = ScrowAPI.getCommandApi().createNode("get");
rootNode.addLiteral(getLiteral); rootNode.addLiteral(getLiteral);
getLiteral.addArgument(playerArg); getLiteral.addArgument(playerArg);
getLiteral.setExecutor(this::getCoins); getLiteral.setExecutor(this::getCoins);

View file

@ -1,27 +1,34 @@
package de.kentoj.scrow.bukkit.friends.command; package de.kentoj.scrow.bukkit.friends.command;
import de.kentoj.kencommandapi.BukkitCommandContext; import de.kentoj.kencommandapi.BukkitCommandContext;
import de.kentoj.kencommandapi.api.structure.node.CommandNode; import de.kentoj.kencommandapi.api.argument.CommandArgument;
import de.kentoj.kencommandapi.api.nodes.CommandNode;
import de.kentoj.kencommandapi.api.processing.CommandExecutor;
import de.kentoj.kencommandapi.type.OfflinePlayerArgumentType; import de.kentoj.kencommandapi.type.OfflinePlayerArgumentType;
import de.kentoj.scrow.bukkit.ScrowAPI; import de.kentoj.scrow.bukkit.ScrowAPI;
import de.kentoj.scrow.bukkit.friends.handler.FriendAddHandler; import de.kentoj.scrow.bukkit.friends.handler.FriendAddHandler;
import lombok.Getter; import lombok.Getter;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
public class FriendAddLiteral { public class FriendAddLiteral implements CommandExecutor<CommandSender, BukkitCommandContext> {
@Getter @Getter
private final CommandNode<CommandSender, BukkitCommandContext> node; private final CommandNode<CommandSender, BukkitCommandContext> rootNode;
private final CommandArgument<CommandSender, BukkitCommandContext, OfflinePlayer> playerArg;
public FriendAddLiteral() { public FriendAddLiteral() {
var cmdManager = ScrowAPI.getCommandManager(); var cmds = ScrowAPI.getCommandApi();
var playerArg = cmdManager.createArgument("player", OfflinePlayerArgumentType.getInstance());
this.node = cmdManager.createNode("add"); this.playerArg = cmds.createArgument("player", OfflinePlayerArgumentType.getInstance());
this.node.addArgument(playerArg); this.rootNode = cmds.createNode("add");
this.node.setExecutor(ctx -> { this.rootNode.addArgument(playerArg);
this.rootNode.setExecutor(this);
}
@Override
public void execute(BukkitCommandContext ctx) {
var handler = new FriendAddHandler(ctx.getPlayerSender(), ctx.getArg(playerArg)); var handler = new FriendAddHandler(ctx.getPlayerSender(), ctx.getArg(playerArg));
handler.handle(); handler.handle();
});
} }
} }

View file

@ -1,7 +1,7 @@
package de.kentoj.scrow.bukkit.friends.command; package de.kentoj.scrow.bukkit.friends.command;
import de.kentoj.kencommandapi.BukkitCommandContext; import de.kentoj.kencommandapi.BukkitCommandContext;
import de.kentoj.kencommandapi.api.structure.node.CommandNode; import de.kentoj.kencommandapi.api.nodes.CommandNode;
import de.kentoj.scrow.bukkit.ScrowAPI; import de.kentoj.scrow.bukkit.ScrowAPI;
import lombok.Getter; import lombok.Getter;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -12,10 +12,10 @@ public class FriendCommand {
private final CommandNode<CommandSender, BukkitCommandContext> rootNode; private final CommandNode<CommandSender, BukkitCommandContext> rootNode;
public FriendCommand() { public FriendCommand() {
this.rootNode = ScrowAPI.getCommandManager().createNode("friends", "f", "friend"); this.rootNode = ScrowAPI.getCommandApi().createNode("friends", "f", "friend");
rootNode.addLiteral(new FriendListLiteral().getNode()); rootNode.addLiteral(new FriendListLiteral().getRootNode());
rootNode.addLiteral(new FriendAddLiteral().getNode()); rootNode.addLiteral(new FriendAddLiteral().getRootNode());
rootNode.addLiteral(new FriendRemoveLiteral().getNode()); rootNode.addLiteral(new FriendRemoveLiteral().getRootNode());
rootNode.addLiteral(new FriendRequestsLiteral().getNode()); rootNode.addLiteral(new FriendRequestsLiteral().getRootNode());
} }
} }

View file

@ -1,23 +1,21 @@
package de.kentoj.scrow.bukkit.friends.command; package de.kentoj.scrow.bukkit.friends.command;
import de.kentoj.kencommandapi.BukkitCommandContext; import de.kentoj.kencommandapi.BukkitCommandContext;
import de.kentoj.kencommandapi.api.structure.node.CommandNode; import de.kentoj.kencommandapi.api.nodes.CommandNode;
import de.kentoj.scrow.bukkit.ScrowAPI; import de.kentoj.scrow.bukkit.ScrowAPI;
import de.kentoj.scrow.bukkit.friends.FriendshipService;
import lombok.Getter; import lombok.Getter;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import reactor.core.scheduler.Schedulers;
public class FriendListLiteral { public class FriendListLiteral {
@Getter @Getter
private final CommandNode<CommandSender, BukkitCommandContext> node; private final CommandNode<CommandSender, BukkitCommandContext> rootNode;
public FriendListLiteral() { public FriendListLiteral() {
this.node = ScrowAPI.getCommandManager().createNode("list"); this.rootNode = ScrowAPI.getCommandApi().createNode("list");
node.setExecutor(this::friendList); rootNode.setExecutor(this::friendList);
} }
private void friendList(BukkitCommandContext ctx) { private void friendList(BukkitCommandContext ctx) {

View file

@ -1,26 +1,25 @@
package de.kentoj.scrow.bukkit.friends.command; package de.kentoj.scrow.bukkit.friends.command;
import de.kentoj.kencommandapi.BukkitCommandContext; import de.kentoj.kencommandapi.BukkitCommandContext;
import de.kentoj.kencommandapi.api.structure.argument.CommandArgument; import de.kentoj.kencommandapi.api.argument.CommandArgument;
import de.kentoj.kencommandapi.api.structure.node.CommandNode; import de.kentoj.kencommandapi.api.nodes.CommandNode;
import de.kentoj.kencommandapi.type.OfflinePlayerArgumentType; import de.kentoj.kencommandapi.type.OfflinePlayerArgumentType;
import de.kentoj.scrow.bukkit.ScrowAPI; import de.kentoj.scrow.bukkit.ScrowAPI;
import lombok.Getter; import lombok.Getter;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandException; import org.bukkit.command.CommandException;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import reactor.core.publisher.Mono;
public class FriendRemoveLiteral { public class FriendRemoveLiteral {
@Getter @Getter
private final CommandNode<CommandSender, BukkitCommandContext> node; private final CommandNode<CommandSender, BukkitCommandContext> rootNode;
private final CommandArgument<CommandSender, BukkitCommandContext, OfflinePlayer> playerArg; private final CommandArgument<CommandSender, BukkitCommandContext, OfflinePlayer> playerArg;
public FriendRemoveLiteral() { public FriendRemoveLiteral() {
this.node = ScrowAPI.getCommandManager().createNode("remove"); this.playerArg = ScrowAPI.getCommandApi().createArgument("player", OfflinePlayerArgumentType.getInstance());
this.playerArg = ScrowAPI.getCommandManager().createArgument("player", OfflinePlayerArgumentType.getInstance()); this.rootNode = ScrowAPI.getCommandApi().createNode("remove");
this.node.addArgument(playerArg); this.rootNode.addArgument(playerArg);
this.node.setExecutor(this::removeFriend); this.rootNode.setExecutor(this::removeFriend);
} }
private void removeFriend(BukkitCommandContext ctx) { private void removeFriend(BukkitCommandContext ctx) {

View file

@ -1,7 +1,7 @@
package de.kentoj.scrow.bukkit.friends.command; package de.kentoj.scrow.bukkit.friends.command;
import de.kentoj.kencommandapi.BukkitCommandContext; import de.kentoj.kencommandapi.BukkitCommandContext;
import de.kentoj.kencommandapi.api.structure.node.CommandNode; import de.kentoj.kencommandapi.api.nodes.CommandNode;
import de.kentoj.scrow.bukkit.ScrowAPI; import de.kentoj.scrow.bukkit.ScrowAPI;
import lombok.Getter; import lombok.Getter;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -10,11 +10,11 @@ import org.bukkit.command.CommandSender;
public class FriendRequestsLiteral { public class FriendRequestsLiteral {
@Getter @Getter
private final CommandNode<CommandSender, BukkitCommandContext> node; private final CommandNode<CommandSender, BukkitCommandContext> rootNode;
public FriendRequestsLiteral() { public FriendRequestsLiteral() {
this.node = ScrowAPI.getCommandManager().createNode("requests", "list-requests"); this.rootNode = ScrowAPI.getCommandApi().createNode("requests", "list-requests");
node.setExecutor(this::friendRequestsList); rootNode.setExecutor(this::friendRequestsList);
} }
private void friendRequestsList(BukkitCommandContext ctx) { private void friendRequestsList(BukkitCommandContext ctx) {

View file

@ -22,7 +22,7 @@ public class FriendAddHandler {
findAction() findAction()
.flatMap(this::executeAction) .flatMap(this::executeAction)
.doOnError(CommandException.class, e -> { .doOnError(CommandException.class, e -> {
ScrowAPI.getCommandManager().sendErrorMessage(self, e); ScrowAPI.getCommandApi().sendErrorMessage(self, e);
}) })
.onErrorComplete(CommandException.class) .onErrorComplete(CommandException.class)
.subscribe(); .subscribe();

View file

@ -1,8 +1,8 @@
package de.kentoj.scrow.bukkit.server; package de.kentoj.scrow.bukkit.server;
import de.kentoj.kencommandapi.BukkitCommandContext; import de.kentoj.kencommandapi.BukkitCommandContext;
import de.kentoj.kencommandapi.api.nodes.CommandNode;
import de.kentoj.kencommandapi.api.processing.CommandExecutor; import de.kentoj.kencommandapi.api.processing.CommandExecutor;
import de.kentoj.kencommandapi.api.structure.node.CommandNode;
import de.kentoj.scrow.bukkit.ScrowAPI; import de.kentoj.scrow.bukkit.ScrowAPI;
import lombok.Getter; import lombok.Getter;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -14,7 +14,7 @@ public class LobbyCommand implements CommandExecutor<CommandSender, BukkitComman
private final CommandNode<CommandSender, BukkitCommandContext> rootNode; private final CommandNode<CommandSender, BukkitCommandContext> rootNode;
public LobbyCommand() { public LobbyCommand() {
var cmds = ScrowAPI.getCommandManager(); var cmds = ScrowAPI.getCommandApi();
this.rootNode = cmds.createNode("lobby", "l", "hub"); this.rootNode = cmds.createNode("lobby", "l", "hub");
this.rootNode.setExecutor(this); this.rootNode.setExecutor(this);
} }

View file

@ -1,10 +1,10 @@
package de.kentoj.scrow.bukkit.server; package de.kentoj.scrow.bukkit.server;
import de.kentoj.kencommandapi.BukkitCommandContext; import de.kentoj.kencommandapi.BukkitCommandContext;
import de.kentoj.kencommandapi.api.argument.CommandArgument;
import de.kentoj.kencommandapi.api.nodes.CommandNode;
import de.kentoj.kencommandapi.api.processing.CommandExecutor; import de.kentoj.kencommandapi.api.processing.CommandExecutor;
import de.kentoj.kencommandapi.api.structure.argument.CommandArgument; import de.kentoj.kencommandapi.api.types.StringArgumentType;
import de.kentoj.kencommandapi.api.structure.argument.types.StringArgumentType;
import de.kentoj.kencommandapi.api.structure.node.CommandNode;
import de.kentoj.scrow.bukkit.ScrowAPI; import de.kentoj.scrow.bukkit.ScrowAPI;
import de.kentoj.scrowlib.servermanager.ServerInstance; import de.kentoj.scrowlib.servermanager.ServerInstance;
import lombok.Getter; import lombok.Getter;
@ -18,8 +18,8 @@ public class PlayCommand implements CommandExecutor<CommandSender, BukkitCommand
private final CommandArgument<CommandSender, BukkitCommandContext, String> gamemodeArg; private final CommandArgument<CommandSender, BukkitCommandContext, String> gamemodeArg;
public PlayCommand() { public PlayCommand() {
this.rootNode = ScrowAPI.getCommandManager().createNode("play", "queue"); this.rootNode = ScrowAPI.getCommandApi().createNode("play", "queue");
this.gamemodeArg = ScrowAPI.getCommandManager().createArgument("gamemode", new StringArgumentType<>()); this.gamemodeArg = ScrowAPI.getCommandApi().createArgument("gamemode", new StringArgumentType<>());
this.rootNode.addArgument(this.gamemodeArg); this.rootNode.addArgument(this.gamemodeArg);
this.rootNode.setExecutor(this); this.rootNode.setExecutor(this);
} }

View file

@ -0,0 +1,45 @@
package de.kentoj.scrow.velocity;
import com.mongodb.reactivestreams.client.MongoDatabase;
import de.kentoj.kencommandapi.VelocityKenCommandApi;
import de.kentoj.scrowlib.servermanager.ServerManager;
import io.nats.client.Connection;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class ScrowAPI {
@Getter
private static @Nullable MongoDatabase database;
@Getter
private static VelocityKenCommandApi commandApi;
@Getter
private static Connection nats;
@Getter
private static ServerManager serverManager;
@ApiStatus.Internal
public static void setDatabase(@Nullable MongoDatabase database) {
ScrowAPI.database = database;
}
@ApiStatus.Internal
public static void setCommandApi(VelocityKenCommandApi commandApi) {
ScrowAPI.commandApi = commandApi;
}
@ApiStatus.Internal
public static void setNats(Connection nats) {
ScrowAPI.nats = nats;
}
@ApiStatus.Internal
public static void setServerManager(ServerManager serverManager) {
ScrowAPI.serverManager = serverManager;
}
}

View file

@ -15,15 +15,14 @@ repositories {
} }
dependencies { dependencies {
implementation(project(":core-velocity-api"))
// https://docs.papermc.io/velocity/dev/creating-your-first-plugin/ // https://docs.papermc.io/velocity/dev/creating-your-first-plugin/
annotationProcessor("com.velocitypowered:velocity-api:3.5.0-SNAPSHOT") annotationProcessor("com.velocitypowered:velocity-api:3.5.0-SNAPSHOT")
compileOnly("com.velocitypowered:velocity-api:3.5.0-SNAPSHOT")
// https://mvnrepository.com/artifact/com.github.ben-manes.caffeine/caffeine // https://mvnrepository.com/artifact/com.github.ben-manes.caffeine/caffeine
implementation("com.github.ben-manes.caffeine:caffeine:3.2.4") implementation("com.github.ben-manes.caffeine:caffeine:3.2.4")
// http://forge.kentoj.de/scrow/-/packages/maven/de.kentoj.scrow:kencommandapi-velocity // http://forge.kentoj.de/scrow/-/packages/maven/de.kentoj.scrow:kencommandapi-velocity
implementation("de.kentoj.scrow:kencommandapi-velocity") implementation("de.kentoj.scrow:kencommandapi-velocity")
implementation(project(":core-lib"))
} }

View file

@ -1,64 +0,0 @@
package de.kentoj.scrow.corevelocity;
import com.google.inject.Inject;
import com.velocitypowered.api.command.CommandManager;
import com.velocitypowered.api.plugin.Plugin;
import com.velocitypowered.api.proxy.ProxyServer;
import de.kentoj.scrow.corevelocity.command.OnlineCommand;
import de.kentoj.scrow.corevelocity.privmsg.LastTargetCache;
import de.kentoj.scrow.corevelocity.privmsg.MsgCommand;
import de.kentoj.scrow.corevelocity.privmsg.ReplyCommand;
import de.kentoj.scrowlib.servermanager.ServerManager;
import de.kentoj.scrowlib.servermanager.ServerManagerImpl;
import io.nats.client.Connection;
import io.nats.client.Nats;
import io.nats.client.Options;
import lombok.extern.java.Log;
import java.io.IOException;
@Plugin(
id = "corevelocity",
name = "CoreVelocity",
version = "0.1"
)
@Log
public class CoreVelocity {
private final ProxyServer server;
private final Connection nats;
private final ServerManager serverManager;
private final ServerRegisterWatchdog registerWatchdog;
private final SendPlayerWatchdog sendPlayerWatchdog;
@Inject
public CoreVelocity(ProxyServer server) {
this.server = server;
var cmds = server.getCommandManager();
{
cmds.register(OnlineCommand.commandMeta(cmds), new OnlineCommand(server));
}
{
var lastTargetCache = new LastTargetCache();
cmds.register(MsgCommand.commandMeta(cmds), new MsgCommand(lastTargetCache, server));
cmds.register(ReplyCommand.commandMeta(cmds), new ReplyCommand(lastTargetCache, server));
}
try {
var natsHost = System.getenv("HOST_NATS");
nats = Nats.connect(Options.builder()
.pedantic()
.server(natsHost)
.build());
serverManager = new ServerManagerImpl(nats);
registerWatchdog = new ServerRegisterWatchdog(nats, serverManager, server);
sendPlayerWatchdog = new SendPlayerWatchdog(nats, server);
log.info("listening on " + natsHost + " for server registrations");
registerWatchdog.listen();
sendPlayerWatchdog.listen();
} catch (IOException | InterruptedException e) {
throw new RuntimeException(e);
}
}
}

View file

@ -0,0 +1,36 @@
package de.kentoj.scrow.corevelocity;
import com.google.inject.Inject;
import com.velocitypowered.api.plugin.Plugin;
import com.velocitypowered.api.proxy.ProxyServer;
import de.kentoj.scrow.corevelocity.privmsg.LastTargetCache;
import de.kentoj.scrow.corevelocity.privmsg.MsgCommand;
import de.kentoj.scrow.corevelocity.privmsg.ReplyCommand;
import de.kentoj.scrow.velocity.ScrowAPI;
import lombok.extern.java.Log;
@Plugin(
id = "corevelocity",
name = "CoreVelocity",
version = "0.1"
)
@Log
public class CoreVelocityPlugin {
@Inject
public CoreVelocityPlugin(ProxyServer server) {
ScrowAPISurface.initScrowAPI(server, true);
var cmds = ScrowAPI.getCommandApi();
{
var lastTargetCache = new LastTargetCache();
cmds.register(new ReplyCommand(server, lastTargetCache).getRootNode());
cmds.register(new MsgCommand(server, lastTargetCache).getRootNode());
}
var registerWatchdog = new ServerRegisterWatchdog(ScrowAPI.getNats(), ScrowAPI.getServerManager(), server);
var sendPlayerWatchdog = new SendPlayerWatchdog(ScrowAPI.getNats(), server);
registerWatchdog.listen();
sendPlayerWatchdog.listen();
}
}

View file

@ -0,0 +1,66 @@
package de.kentoj.scrow.corevelocity;
import com.mongodb.ConnectionString;
import com.mongodb.MongoClientSettings;
import com.mongodb.reactivestreams.client.MongoClient;
import com.mongodb.reactivestreams.client.MongoClients;
import com.velocitypowered.api.proxy.ProxyServer;
import de.kentoj.kencommandapi.VelocityKenCommandApi;
import de.kentoj.scrow.velocity.ScrowAPI;
import de.kentoj.scrowlib.servermanager.ServerManagerImpl;
import io.nats.client.Nats;
import io.nats.client.Options;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.bson.UuidRepresentation;
import org.bson.codecs.configuration.CodecRegistries;
import org.bson.codecs.pojo.PojoCodecProvider;
import org.jetbrains.annotations.Nullable;
import java.io.IOException;
@NoArgsConstructor(access = AccessLevel.NONE)
public class ScrowAPISurface {
private static @Nullable MongoClient mongoClient;
public static void initScrowAPI(ProxyServer server, boolean enableDatabase) {
try {
String natsHost = System.getenv("HOST_NATS");
var options = Options.builder()
.server(natsHost)
.pedantic()
.build();
ScrowAPI.setNats(Nats.connect(options));
} catch (IOException | InterruptedException e) {
throw new RuntimeException(e);
}
if (enableDatabase) {
var pojoCodecProvider = PojoCodecProvider.builder().automatic(true).build();
var codecRegistry = CodecRegistries.fromRegistries(
MongoClientSettings.getDefaultCodecRegistry(),
CodecRegistries.fromProviders(pojoCodecProvider)
);
String mongoHost = System.getenv("HOST_MONGO");
var settings = MongoClientSettings.builder()
.codecRegistry(codecRegistry)
.uuidRepresentation(UuidRepresentation.STANDARD)
.applyConnectionString(new ConnectionString(mongoHost))
.build();
mongoClient = MongoClients.create(settings);
ScrowAPI.setDatabase(mongoClient.getDatabase("scrow"));
}
ScrowAPI.setServerManager(new ServerManagerImpl(ScrowAPI.getNats()));
ScrowAPI.setCommandApi(new VelocityKenCommandApi(server));
}
public static void destroyScrowAPI() {
if (mongoClient != null) {
mongoClient.close();
}
}
}

View file

@ -1,59 +1,48 @@
package de.kentoj.scrow.corevelocity.privmsg; package de.kentoj.scrow.corevelocity.privmsg;
import com.velocitypowered.api.command.CommandManager; import com.velocitypowered.api.command.CommandSource;
import com.velocitypowered.api.command.CommandMeta;
import com.velocitypowered.api.command.SimpleCommand;
import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.ProxyServer; import com.velocitypowered.api.proxy.ProxyServer;
import lombok.RequiredArgsConstructor; import de.kentoj.kencommandapi.VelocityCommandContext;
import net.kyori.adventure.text.Component; import de.kentoj.kencommandapi.api.argument.CommandArgument;
import net.kyori.adventure.text.format.NamedTextColor; import de.kentoj.kencommandapi.api.nodes.CommandNode;
import de.kentoj.kencommandapi.api.processing.CommandException;
import de.kentoj.kencommandapi.api.processing.CommandExecutor;
import de.kentoj.kencommandapi.api.types.StringArgumentType;
import de.kentoj.kencommandapi.type.PlayerArgumentType;
import de.kentoj.scrow.velocity.ScrowAPI;
import lombok.Getter;
import java.util.Arrays; public class MsgCommand implements CommandExecutor<CommandSource, VelocityCommandContext> {
import java.util.stream.Collectors;
@RequiredArgsConstructor @Getter
public class MsgCommand implements SimpleCommand { private final CommandNode<CommandSource, VelocityCommandContext> rootNode;
private final CommandArgument<CommandSource, VelocityCommandContext, Player> targetArg;
private final CommandArgument<CommandSource, VelocityCommandContext, String> msgArg;
private final LastTargetCache cache; private final LastTargetCache cache;
private final ProxyServer server;
public MsgCommand(ProxyServer server, LastTargetCache cache) {
this.cache = cache;
var cmds = ScrowAPI.getCommandApi();
targetArg = cmds.createArgument("target", new PlayerArgumentType(server));
msgArg = cmds.createArgument("msg", new StringArgumentType<>(true));
rootNode = cmds.createNode("msg", "w");
rootNode.setExecutor(this);
rootNode.addArgument(targetArg);
rootNode.addArgument(msgArg);
}
@Override @Override
public void execute(Invocation invocation) { public void execute(VelocityCommandContext ctx) {
if (!(invocation.source() instanceof Player player)) return; var target = ctx.getArg(targetArg);
var msg = ctx.getArg(msgArg);
var targetName = invocation.arguments()[0]; var isMessagingSelf = target.getUniqueId().equals(ctx.getPlayerSender().getUniqueId());
if (invocation.arguments().length < 2) { if (isMessagingSelf) throw new CommandException("You can't message yourself.");
player.sendMessage(Component.text("usage: ./msg <name> <msg>"));
return;
NamedTextColor
}
var target = server.getPlayer(targetName).orElse(null); cache.setLastTarget(ctx.getPlayerSender().getUniqueId(), target.getUniqueId());
if (target == null) { PrivmsgHelper.handle(ctx.getPlayerSender(), target, msg);
player.sendMessage(Component.text("The player you last messaged is now offline."));
return;
}
if (target.getUniqueId().equals(player.getUniqueId())) {
player.sendMessage(Component.text("You can't message yourself."));
return;
}
var msg = Arrays.stream(invocation.arguments())
.skip(1)
.collect(Collectors.joining(" "));
cache.setLastTarget(player.getUniqueId(), target.getUniqueId());
PrivmsgHelper.handle(player, target, msg);
}
@Override
public boolean hasPermission(Invocation invocation) {
return invocation.source().hasPermission("corevelocity.cmd.msg");
}
public static CommandMeta commandMeta(CommandManager cmds) {
return cmds.metaBuilder("msg").aliases("w").build();
} }
} }

View file

@ -1,44 +1,44 @@
package de.kentoj.scrow.corevelocity.privmsg; package de.kentoj.scrow.corevelocity.privmsg;
import com.velocitypowered.api.command.CommandManager; import com.velocitypowered.api.command.CommandSource;
import com.velocitypowered.api.command.CommandMeta;
import com.velocitypowered.api.command.RawCommand;
import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.ProxyServer; import com.velocitypowered.api.proxy.ProxyServer;
import lombok.RequiredArgsConstructor; import de.kentoj.kencommandapi.VelocityCommandContext;
import net.kyori.adventure.text.Component; import de.kentoj.kencommandapi.api.argument.CommandArgument;
import de.kentoj.kencommandapi.api.nodes.CommandNode;
import de.kentoj.kencommandapi.api.processing.CommandException;
import de.kentoj.kencommandapi.api.processing.CommandExecutor;
import de.kentoj.kencommandapi.api.types.StringArgumentType;
import de.kentoj.scrow.velocity.ScrowAPI;
import lombok.Getter;
@RequiredArgsConstructor public class ReplyCommand implements CommandExecutor<CommandSource, VelocityCommandContext> {
public class ReplyCommand implements RawCommand {
@Getter
private final CommandNode<CommandSource, VelocityCommandContext> rootNode;
private final CommandArgument<CommandSource, VelocityCommandContext, String> msgArg;
private final LastTargetCache cache; private final LastTargetCache cache;
private final ProxyServer server; private final ProxyServer server;
@Override public ReplyCommand(ProxyServer server, LastTargetCache cache) {
public void execute(Invocation invocation) { this.cache = cache;
if (!(invocation.source() instanceof Player player)) return; this.server = server;
var targetId = cache.getLastTarget(player.getUniqueId());
if (targetId == null) { var cmds = ScrowAPI.getCommandApi();
player.sendMessage(Component.text("You haven't msg'd anyone recently. Use '/msg <name>' first.")); msgArg = cmds.createArgument("msg", new StringArgumentType<>(true));
return; rootNode = cmds.createNode("reply", "r");
rootNode.setExecutor(this);
rootNode.addArgument(msgArg);
} }
@Override
public void execute(VelocityCommandContext ctx) {
var targetId = cache.getLastTarget(ctx.getPlayerSender().getUniqueId());
var target = server.getPlayer(targetId).orElse(null); var target = server.getPlayer(targetId).orElse(null);
if (target == null) { if (target == null) throw new CommandException("The player you last messaged is no longer online");
player.sendMessage(Component.text("The player you last messaged is now offline."));
return;
}
cache.setLastTarget(player.getUniqueId(), target.getUniqueId()); var msg = ctx.getArg(msgArg);
PrivmsgHelper.handle(player, target, invocation.arguments()); cache.setLastTarget(ctx.getPlayerSender().getUniqueId(), target.getUniqueId());
} PrivmsgHelper.handle(ctx.getPlayerSender(), target, msg);
@Override
public boolean hasPermission(Invocation invocation) {
return invocation.source().hasPermission("corevelocity.cmd.msg");
}
public static CommandMeta commandMeta(CommandManager cmds) {
return cmds.metaBuilder("reply").aliases("r").build();
} }
} }

View file

@ -1,10 +0,0 @@
package de.kentoj.scrow.corevelocity.privmsg;
import com.velocitypowered.api.proxy.ProxyServer;
public class ReplyKenCommand {
public ReplyKenCommand(ProxyServer server) {
}
}

4
gradlew.bat vendored
View file

@ -46,7 +46,7 @@ set JAVA_EXE=java.exe
if %ERRORLEVEL% equ 0 goto execute if %ERRORLEVEL% equ 0 goto execute
echo. 1>&2 echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' SCommand could be found in your PATH. 1>&2 echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2 echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2 echo location of your Java installation. 1>&2
@ -68,7 +68,7 @@ echo location of your Java installation. 1>&2
goto fail goto fail
:execute :execute
@rem Setup the SCommand line @rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar

View file

@ -10,4 +10,5 @@ rootProject.name = "core"
include("core-bukkit-api") include("core-bukkit-api")
include("core-bukkit-impl") include("core-bukkit-impl")
include("core-lib") include("core-lib")
include("core-velocity") include("core-velocity-api")
include("core-velocity-impl")