currently refactoring a lot
This commit is contained in:
parent
700b5d5d10
commit
31eb8a92eb
42 changed files with 454 additions and 433 deletions
55
.idea/workspace.xml
generated
55
.idea/workspace.xml
generated
|
|
@ -5,26 +5,47 @@
|
||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="56c685a1-f609-4ffd-a951-849beb2a7f8d" name="Changes" comment="currently refactoring a lot">
|
<list default="true" id="56c685a1-f609-4ffd-a951-849beb2a7f8d" name="Changes" comment="currently refactoring a lot">
|
||||||
<change afterPath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/scheduler/TaskState.java" afterDir="false" />
|
<change afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/instancemanager/command/InstanceCommand.java" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/instancemanager/InstanceManagerImpl.java" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/messaging/SyncRequestHandler.java" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/utils/ResultUtils.java" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/privmsg/PrivMsgHandler.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/../build-logic/convention/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/../build-logic/convention/build.gradle.kts" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/../build-logic/convention/src/main/kotlin/de/kentoj/scrow/ReactorConvention.kt" beforeDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/scheduler/Task.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/scheduler/Task.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/core-bukkit-api/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-api/build.gradle.kts" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/scheduler/TaskImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/scheduler/TaskImpl.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/ScrowAPI.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/ScrowAPI.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/scheduler/Tasks.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/scheduler/Tasks.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/MinigameInfo.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/MinigameInfo.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/build.gradle.kts" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/CoreImplPlugin.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/CoreImplPlugin.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/crown/CrownCommand.java" beforeDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/crown/CrownDeployServerLiteral.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/instancemanager/command/InstanceDeployLiteral.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/crown/CrownDestroyServerLiteral.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/instancemanager/command/InstanceDestroyLiteral.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/crown/CrownListServersLiteral.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/instancemanager/command/InstanceListLiteral.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/economy/command/CoinsCommand.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/economy/command/CoinsCommand.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/economy/command/CoinsCommand.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/economy/command/CoinsCommand.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/economy/command/CoinsGetLiteral.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/economy/command/CoinsGetLiteral.java" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/economy/command/CoinsSetLiteral.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/economy/command/CoinsSetLiteral.java" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendAddLiteral.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendAddLiteral.java" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendCommand.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendCommand.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendCommand.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendCommand.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendListLiteral.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendListLiteral.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/playermanager/PlayerManagerImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/playermanager/PlayerManagerImpl.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendRemoveLiteral.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendRemoveLiteral.java" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendRequestsLiteral.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendRequestsLiteral.java" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/InMemoryFriendshipService.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/InMemoryFriendshipService.java" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/PostgresFriendshipService.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/PostgresFriendshipService.java" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/request/FriendRequestImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/request/FriendRequestImpl.java" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/request/PostgresFriendRequestService.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/request/PostgresFriendRequestService.java" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/server/LobbyCommand.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/server/LobbyCommand.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/server/LobbyCommand.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/server/LobbyCommand.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/server/PlayCommand.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/server/PlayCommand.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/server/PlayCommand.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/server/PlayCommand.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/servermanager/InstanceManager.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/servermanager/InstanceManager.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/core-lib/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/build.gradle.kts" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/connection/DatabaseConnectionFactory.java" beforeDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/connection/DatabaseConnectionFactoryImpl.java" beforeDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/convention/ScrowMessageStyle.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/convention/ScrowMessageStyle.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/messaging/RequestHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/messaging/RequestHandler.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/servermanager/InstanceManager.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/instancemanager/InstanceManager.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/servermanager/InstanceManagerImpl.java" beforeDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/servermanager/ServerInstance.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/instancemanager/ServerInstance.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-velocity-api/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/core-velocity-api/build.gradle.kts" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-velocity-api/src/main/java/de/kentoj/scrow/velocity/ScrowAPI.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-velocity-api/src/main/java/de/kentoj/scrow/velocity/ScrowAPI.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-velocity-impl/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/core-velocity-impl/build.gradle.kts" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/CoreVelocityPlugin.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/CoreVelocityPlugin.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/ScrowAPISurface.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/ScrowAPISurface.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/command/OnlineCommand.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/command/OnlineCommand.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/privmsg/MsgCommand.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/privmsg/MsgCommand.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/privmsg/PrivmsgHelper.java" beforeDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/privmsg/ReplyCommand.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/privmsg/ReplyCommand.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/server/ServerRegisterWatchdog.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/server/ServerRegisterWatchdog.java" afterDir="false" />
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
|
@ -157,7 +178,7 @@
|
||||||
"git-widget-placeholder": "master",
|
"git-widget-placeholder": "master",
|
||||||
"kotlin-language-version-configured": "true",
|
"kotlin-language-version-configured": "true",
|
||||||
"last_opened_file_path": "/home/a/src/scrow",
|
"last_opened_file_path": "/home/a/src/scrow",
|
||||||
"project.structure.last.edited": "Project",
|
"project.structure.last.edited": "Modules",
|
||||||
"project.structure.proportion": "0.15",
|
"project.structure.proportion": "0.15",
|
||||||
"project.structure.side.proportion": "0.6268199",
|
"project.structure.side.proportion": "0.6268199",
|
||||||
"settings.editor.selected.configurable": "preferences.pluginManager"
|
"settings.editor.selected.configurable": "preferences.pluginManager"
|
||||||
|
|
@ -169,12 +190,14 @@
|
||||||
<recent name="de.kentoj.scrowlib.messaging" />
|
<recent name="de.kentoj.scrowlib.messaging" />
|
||||||
</key>
|
</key>
|
||||||
<key name="MoveFile.RECENT_KEYS">
|
<key name="MoveFile.RECENT_KEYS">
|
||||||
|
<recent name="$PROJECT_DIR$/core-lib" />
|
||||||
<recent name="$PROJECT_DIR$/build-logic/gradle" />
|
<recent name="$PROJECT_DIR$/build-logic/gradle" />
|
||||||
</key>
|
</key>
|
||||||
<key name="ExtractSuperBase.RECENT_KEYS">
|
<key name="ExtractSuperBase.RECENT_KEYS">
|
||||||
<recent name="de.kentoj.scrow.bukkit.region" />
|
<recent name="de.kentoj.scrow.bukkit.region" />
|
||||||
</key>
|
</key>
|
||||||
<key name="CopyClassDialog.RECENTS_KEY">
|
<key name="CopyClassDialog.RECENTS_KEY">
|
||||||
|
<recent name="de.kentoj.scrowlib.messaging" />
|
||||||
<recent name="de.kentoj.scrow.bukkit.region.event" />
|
<recent name="de.kentoj.scrow.bukkit.region.event" />
|
||||||
</key>
|
</key>
|
||||||
</component>
|
</component>
|
||||||
|
|
|
||||||
|
|
@ -24,9 +24,9 @@ dependencies {
|
||||||
api("io.nats:jnats:2.25.2")
|
api("io.nats:jnats:2.25.2")
|
||||||
|
|
||||||
// http://forge.kentoj.de/scrow/-/packages/maven/de.kentoj.scrow:kencommandapi-core
|
// http://forge.kentoj.de/scrow/-/packages/maven/de.kentoj.scrow:kencommandapi-core
|
||||||
api("de.kentoj.scrow:kencommandapi-core:0.22")
|
api("de.kentoj.scrow:kencommandapi-core:0.23")
|
||||||
// http://forge.kentoj.de/scrow/-/packages/maven/de.kentoj.scrow:kencommandapi-bukkit
|
// http://forge.kentoj.de/scrow/-/packages/maven/de.kentoj.scrow:kencommandapi-bukkit
|
||||||
api("de.kentoj.scrow:kencommandapi-bukkit:0.22")
|
api("de.kentoj.scrow:kencommandapi-bukkit:0.23")
|
||||||
}
|
}
|
||||||
|
|
||||||
publishing {
|
publishing {
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import de.kentoj.scrow.bukkit.friends.FriendshipService;
|
||||||
import de.kentoj.scrow.bukkit.misc.EconomyService;
|
import de.kentoj.scrow.bukkit.misc.EconomyService;
|
||||||
import de.kentoj.scrow.bukkit.misc.PlayerManager;
|
import de.kentoj.scrow.bukkit.misc.PlayerManager;
|
||||||
import de.kentoj.scrow.bukkit.region.RegionManager;
|
import de.kentoj.scrow.bukkit.region.RegionManager;
|
||||||
import de.kentoj.scrowlib.servermanager.InstanceManager;
|
import de.kentoj.scrowlib.instancemanager.InstanceManager;
|
||||||
import io.nats.client.Connection;
|
import io.nats.client.Connection;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
package de.kentoj.scrow.bukkit.minigame;
|
package de.kentoj.scrow.bukkit.minigame;
|
||||||
|
|
||||||
import de.kentoj.scrowlib.servermanager.ServerInstance;
|
import de.kentoj.scrowlib.instancemanager.ServerInstance;
|
||||||
|
|
||||||
public interface MinigameInfo {
|
public interface MinigameInfo {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ plugins {
|
||||||
id("de.kentoj.scrow.scrow-repository")
|
id("de.kentoj.scrow.scrow-repository")
|
||||||
id("de.kentoj.scrow.base-dependencies")
|
id("de.kentoj.scrow.base-dependencies")
|
||||||
id("de.kentoj.scrow.database")
|
id("de.kentoj.scrow.database")
|
||||||
id("de.kentoj.scrow.reactor")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
group = "de.kentoj.scrow"
|
group = "de.kentoj.scrow"
|
||||||
|
|
@ -22,7 +21,7 @@ dependencies {
|
||||||
implementation(project(":core-bukkit-api"))
|
implementation(project(":core-bukkit-api"))
|
||||||
|
|
||||||
// http://forge.kentoj.de/scrow/-/packages/maven/de.kentoj.scrow:kencommandapi-core
|
// http://forge.kentoj.de/scrow/-/packages/maven/de.kentoj.scrow:kencommandapi-core
|
||||||
implementation("de.kentoj.scrow:kencommandapi-core:0.22")
|
implementation("de.kentoj.scrow:kencommandapi-core:0.23")
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks {
|
tasks {
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,8 @@
|
||||||
package de.kentoj.scrow.bukkit;
|
package de.kentoj.scrow.bukkit;
|
||||||
|
|
||||||
import de.kentoj.scrow.bukkit.crown.CrownCommand;
|
|
||||||
import de.kentoj.scrow.bukkit.economy.command.CoinsCommand;
|
import de.kentoj.scrow.bukkit.economy.command.CoinsCommand;
|
||||||
import de.kentoj.scrow.bukkit.economy.command.CoinsSetLiteral;
|
|
||||||
import de.kentoj.scrow.bukkit.friends.command.FriendCommand;
|
import de.kentoj.scrow.bukkit.friends.command.FriendCommand;
|
||||||
|
import de.kentoj.scrow.bukkit.instancemanager.command.InstanceCommand;
|
||||||
import de.kentoj.scrow.bukkit.region.RegionPlayerTracker;
|
import de.kentoj.scrow.bukkit.region.RegionPlayerTracker;
|
||||||
import de.kentoj.scrow.bukkit.region.RegionTask;
|
import de.kentoj.scrow.bukkit.region.RegionTask;
|
||||||
import de.kentoj.scrow.bukkit.server.LobbyCommand;
|
import de.kentoj.scrow.bukkit.server.LobbyCommand;
|
||||||
|
|
@ -27,8 +26,8 @@ public class CoreImplPlugin extends JavaPlugin {
|
||||||
|
|
||||||
{
|
{
|
||||||
ScrowAPI.getCommandApi().register(new CoinsCommand().getRootNode());
|
ScrowAPI.getCommandApi().register(new CoinsCommand().getRootNode());
|
||||||
ScrowAPI.getCommandApi().register(new FriendCommand().getRootNode());
|
ScrowAPI.getCommandApi().register(FriendCommand.create());
|
||||||
ScrowAPI.getCommandApi().register(new CrownCommand().getRootNode());
|
ScrowAPI.getCommandApi().register(InstanceCommand.create());
|
||||||
ScrowAPI.getCommandApi().register(new PlayCommand().getRootNode());
|
ScrowAPI.getCommandApi().register(new PlayCommand().getRootNode());
|
||||||
ScrowAPI.getCommandApi().register(new LobbyCommand().getRootNode());
|
ScrowAPI.getCommandApi().register(new LobbyCommand().getRootNode());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,18 +8,14 @@ import de.kentoj.scrow.bukkit.friends.friendship.PostgresFriendshipService;
|
||||||
import de.kentoj.scrow.bukkit.friends.request.InMemoryFriendRequestService;
|
import de.kentoj.scrow.bukkit.friends.request.InMemoryFriendRequestService;
|
||||||
import de.kentoj.scrow.bukkit.friends.request.PostgresFriendRequestService;
|
import de.kentoj.scrow.bukkit.friends.request.PostgresFriendRequestService;
|
||||||
import de.kentoj.scrow.bukkit.region.RegionManagerImpl;
|
import de.kentoj.scrow.bukkit.region.RegionManagerImpl;
|
||||||
import de.kentoj.scrowlib.connection.DatabaseConnectionFactoryImpl;
|
import de.kentoj.scrowlib.instancemanager.InstanceManagerImpl;
|
||||||
import de.kentoj.scrowlib.servermanager.InstanceManagerImpl;
|
|
||||||
import de.kentoj.scrowlib.utils.EnvUtils;
|
import de.kentoj.scrowlib.utils.EnvUtils;
|
||||||
import io.nats.client.Nats;
|
import io.nats.client.Nats;
|
||||||
import io.nats.client.Options;
|
import io.nats.client.Options;
|
||||||
import io.r2dbc.spi.ConnectionFactories;
|
|
||||||
import io.r2dbc.spi.ConnectionFactory;
|
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import reactor.core.scheduler.Schedulers;
|
import org.jdbi.v3.core.Jdbi;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
|
@ -41,26 +37,20 @@ public class ScrowAPISurface {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enableDatabase) {
|
if (enableDatabase) {
|
||||||
ConnectionFactory factory = ConnectionFactories.get(EnvUtils.envOrThrow("HOST_POSTGRES"));
|
ScrowAPI.setJdbi(Jdbi.create(EnvUtils.envOrThrow("HOST_POSTGRES")));
|
||||||
ScrowAPI.setJdbi(new DatabaseConnectionFactoryImpl(factory));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ScrowAPI.setRegionManager(new RegionManagerImpl());
|
ScrowAPI.setRegionManager(new RegionManagerImpl());
|
||||||
ScrowAPI.setCommandApi(new CommandAPI(plugin));
|
ScrowAPI.setCommandApi(new CommandAPI(plugin));
|
||||||
ScrowAPI.setInstanceManager(new InstanceManagerImpl(ScrowAPI.getNats()));
|
ScrowAPI.setInstanceManager(new InstanceManagerImpl(ScrowAPI.getNats()));
|
||||||
ScrowAPI.setEconomyService(ScrowAPI.getJdbi() != null ?
|
ScrowAPI.setEconomyService(ScrowAPI.getJdbi() != null ?
|
||||||
new PostgresEconomyService(ScrowAPI.getJdbi()) : new InMemoryEconomyService());
|
new PostgresEconomyService() : new InMemoryEconomyService());
|
||||||
ScrowAPI.setFriendRequestService(ScrowAPI.getJdbi() != null ?
|
ScrowAPI.setFriendRequestService(ScrowAPI.getJdbi() != null ?
|
||||||
new PostgresFriendRequestService(ScrowAPI.getJdbi()) : new InMemoryFriendRequestService());
|
new PostgresFriendRequestService() : new InMemoryFriendRequestService());
|
||||||
ScrowAPI.setFriendshipService(ScrowAPI.getJdbi() != null ?
|
ScrowAPI.setFriendshipService(ScrowAPI.getJdbi() != null ?
|
||||||
new PostgresFriendshipService(ScrowAPI.getJdbi()) : new InMemoryFriendshipService());
|
new PostgresFriendshipService() : new InMemoryFriendshipService());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void destroyScrowAPI() {
|
public static void destroyScrowAPI() {
|
||||||
try {
|
|
||||||
ScrowAPI.getJdbi().close();
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
package de.kentoj.scrow.bukkit.crown;
|
|
||||||
|
|
||||||
import de.kentoj.kencommandapi.api.node.CommandNode;
|
|
||||||
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
|
||||||
import lombok.Getter;
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
|
|
||||||
public class CrownCommand {
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
private final CommandNode<CommandSender> rootNode;
|
|
||||||
|
|
||||||
public CrownCommand() {
|
|
||||||
this.rootNode = CommandNode.node("crown", "server-manager");
|
|
||||||
var style = new ScrowMessageStyle(Component.text("crown")
|
|
||||||
.color(NamedTextColor.GOLD));
|
|
||||||
this.rootNode.addLiteral(new CrownListServersLiteral(style).getNode());
|
|
||||||
this.rootNode.addLiteral(new CrownDeployServerLiteral(style).getRootNode());
|
|
||||||
this.rootNode.addLiteral(new CrownDestroyServerLiteral(style).getRootNode());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,40 +0,0 @@
|
||||||
package de.kentoj.scrow.bukkit.crown;
|
|
||||||
|
|
||||||
import de.kentoj.kencommandapi.api.node.CommandNode;
|
|
||||||
import de.kentoj.kencommandapi.api.argument.CommandArgument;
|
|
||||||
import de.kentoj.kencommandapi.api.argument.types.StringArgumentType;
|
|
||||||
import de.kentoj.kencommandapi.api.invocation.CommandContext;
|
|
||||||
import de.kentoj.kencommandapi.api.invocation.CommandExecutor;
|
|
||||||
import com.leakyabstractions.result.api.Result;
|
|
||||||
import de.kentoj.scrow.bukkit.ScrowAPI;
|
|
||||||
import lombok.Getter;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
|
||||||
|
|
||||||
public class CrownDeployServerLiteral implements CommandExecutor<CommandSender> {
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
private final CommandNode<CommandSender> rootNode;
|
|
||||||
private final CommandArgument<CommandSender, String> templateArg;
|
|
||||||
|
|
||||||
public CrownDeployServerLiteral() {
|
|
||||||
this.rootNode = CommandNode.node("deploy-server");
|
|
||||||
this.rootNode.setExecutor(this);
|
|
||||||
{
|
|
||||||
this.templateArg = CommandArgument.arg("template", new StringArgumentType<>());
|
|
||||||
this.rootNode.addArgument(templateArg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CompletableFuture<Result<Object,String>> execute(CommandContext<CommandSender> ctx) {
|
|
||||||
var template = ctx.getArg(templateArg);
|
|
||||||
return ScrowAPI.getInstanceManager().deployInstance(template)
|
|
||||||
.map(server -> {
|
|
||||||
ctx.getSender().sendMessage("Deployed instance of " + template + " with handle " + server.getHandle());
|
|
||||||
// FIXME handle unknown server
|
|
||||||
return Result.success();
|
|
||||||
}).toFuture();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,49 +0,0 @@
|
||||||
package de.kentoj.scrow.bukkit.crown;
|
|
||||||
|
|
||||||
import de.kentoj.kencommandapi.api.node.CommandNode;
|
|
||||||
import de.kentoj.kencommandapi.api.argument.CommandArgument;
|
|
||||||
import de.kentoj.kencommandapi.api.argument.types.StringArgumentType;
|
|
||||||
import de.kentoj.kencommandapi.api.invocation.CommandContext;
|
|
||||||
import de.kentoj.kencommandapi.api.invocation.CommandExecutor;
|
|
||||||
import com.leakyabstractions.result.api.Result;
|
|
||||||
import com.leakyabstractions.result.api.Results;
|
|
||||||
import de.kentoj.scrow.bukkit.ScrowAPI;
|
|
||||||
import de.kentoj.scrowlib.servermanager.ServerInstance;
|
|
||||||
import lombok.Getter;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
public class CrownDestroyServerLiteral implements CommandExecutor<CommandSender> {
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
private final CommandNode<CommandSender> rootNode;
|
|
||||||
private final CommandArgument<CommandSender, String> handleArg;
|
|
||||||
|
|
||||||
public CrownDestroyServerLiteral() {
|
|
||||||
this.rootNode = CommandNode.node("destroy-server");
|
|
||||||
this.rootNode.setExecutor(this);
|
|
||||||
{
|
|
||||||
this.handleArg = CommandArgument.arg("template", new StringArgumentType<>());
|
|
||||||
this.handleArg.setSuggestionProvider(ctx -> {
|
|
||||||
//noinspection CodeBlock2Expr
|
|
||||||
return ScrowAPI.getInstanceManager().getInstances()
|
|
||||||
.map(ServerInstance::getHandle)
|
|
||||||
.collect(Collectors.toSet())
|
|
||||||
.toFuture();
|
|
||||||
});
|
|
||||||
this.rootNode.addArgument(handleArg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CompletableFuture<Result<Object,String>> execute(CommandContext<CommandSender> ctx) {
|
|
||||||
var handle = ctx.getArg(handleArg);
|
|
||||||
return ScrowAPI.getInstanceManager().destroyInstance(handle)
|
|
||||||
.map(__ -> {
|
|
||||||
ctx.getSender().sendMessage("Destroyed server with handle " + handle);
|
|
||||||
return Result.success();
|
|
||||||
}).toFuture();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
||||||
package de.kentoj.scrow.bukkit.crown;
|
|
||||||
|
|
||||||
import de.kentoj.kencommandapi.api.invocation.CommandContext;
|
|
||||||
import de.kentoj.kencommandapi.api.invocation.CommandExecutor;
|
|
||||||
import com.leakyabstractions.result.api.Result;
|
|
||||||
import de.kentoj.kencommandapi.api.node.CommandNode;
|
|
||||||
import de.kentoj.scrow.bukkit.ScrowAPI;
|
|
||||||
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
|
||||||
import lombok.Getter;
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
|
||||||
|
|
||||||
public class CrownListServersLiteral implements CommandExecutor<CommandSender> {
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
private final CommandNode<CommandSender> node;
|
|
||||||
private final ScrowMessageStyle style;
|
|
||||||
|
|
||||||
public CrownListServersLiteral(ScrowMessageStyle style) {
|
|
||||||
this.style = style;
|
|
||||||
this.node = CommandNode.node("list-servers");
|
|
||||||
this.node.setExecutor(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CompletableFuture<Result<Object,String>> execute(CommandContext<CommandSender> ctx) {
|
|
||||||
return ScrowAPI.getInstanceManager().getInstances()
|
|
||||||
.collectList()
|
|
||||||
.map(list -> style.list(Component.text("Running instances:"),
|
|
||||||
list.stream()
|
|
||||||
.map(inst ->
|
|
||||||
Component.text(inst.getHandle() + " on port " + inst.getPort() + ": " + inst.getState())
|
|
||||||
)
|
|
||||||
.toList())
|
|
||||||
)
|
|
||||||
.doOnNext(ctx.getSender()::sendMessage)
|
|
||||||
.thenReturn(Result.success()).toFuture();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -26,7 +26,7 @@ public class CoinsCommand implements CommandExecutor<CommandSender> {
|
||||||
private final MessageStyle style;
|
private final MessageStyle style;
|
||||||
|
|
||||||
public CoinsCommand() {
|
public CoinsCommand() {
|
||||||
style = new ScrowMessageStyle("Coins", NamedTextColor.GOLD);
|
style = ScrowMessageStyle.GENERIC;
|
||||||
rootNode = CommandNode.rootNode(style, "coins", "bal", "balance");
|
rootNode = CommandNode.rootNode(style, "coins", "bal", "balance");
|
||||||
rootNode.setPermission("command.coins.get.self");
|
rootNode.setPermission("command.coins.get.self");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,5 +17,6 @@ public class FriendCommand {
|
||||||
rootNode.addLiteral(new FriendAddLiteral(style).getLiteral());
|
rootNode.addLiteral(new FriendAddLiteral(style).getLiteral());
|
||||||
rootNode.addLiteral(new FriendRemoveLiteral(style).getRootNode());
|
rootNode.addLiteral(new FriendRemoveLiteral(style).getRootNode());
|
||||||
rootNode.addLiteral(new FriendRequestsLiteral(style).getLiteral());
|
rootNode.addLiteral(new FriendRequestsLiteral(style).getLiteral());
|
||||||
|
return rootNode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
package de.kentoj.scrow.bukkit.instancemanager.command;
|
||||||
|
|
||||||
|
import de.kentoj.kencommandapi.api.node.CommandNode;
|
||||||
|
import de.kentoj.kencommandapi.api.node.RootCommandNode;
|
||||||
|
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
@NoArgsConstructor(access = AccessLevel.NONE)
|
||||||
|
public class InstanceCommand {
|
||||||
|
public static RootCommandNode<CommandSender> create() {
|
||||||
|
var style = new ScrowMessageStyle("server-manager", NamedTextColor.RED);
|
||||||
|
RootCommandNode<CommandSender> rootNode = CommandNode.rootNode(style, "instance", "server-manager");
|
||||||
|
rootNode.addLiteral(new InstanceListLiteral(style).getNode());
|
||||||
|
rootNode.addLiteral(new InstanceDeployLiteral(style).getLiteral());
|
||||||
|
rootNode.addLiteral(new InstanceDestroyLiteral(style).getLiteral());
|
||||||
|
return rootNode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
package de.kentoj.scrow.bukkit.instancemanager.command;
|
||||||
|
|
||||||
|
import com.leakyabstractions.result.api.Result;
|
||||||
|
import com.leakyabstractions.result.core.Results;
|
||||||
|
import de.kentoj.kencommandapi.api.argument.CommandArgument;
|
||||||
|
import de.kentoj.kencommandapi.api.argument.types.StringArgumentType;
|
||||||
|
import de.kentoj.kencommandapi.api.invocation.CommandContext;
|
||||||
|
import de.kentoj.kencommandapi.api.invocation.CommandExecutor;
|
||||||
|
import de.kentoj.kencommandapi.api.node.CommandNode;
|
||||||
|
import de.kentoj.scrow.bukkit.ScrowAPI;
|
||||||
|
import de.kentoj.scrow.bukkit.scheduler.Tasks;
|
||||||
|
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
|
public class InstanceDeployLiteral implements CommandExecutor<CommandSender> {
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private final CommandNode<CommandSender> literal;
|
||||||
|
private final CommandArgument<CommandSender, String> templateArg;
|
||||||
|
private final ScrowMessageStyle style;
|
||||||
|
|
||||||
|
public InstanceDeployLiteral(ScrowMessageStyle style) {
|
||||||
|
this.style = style;
|
||||||
|
|
||||||
|
templateArg = CommandArgument.arg("template", new StringArgumentType<>());
|
||||||
|
|
||||||
|
literal = CommandNode.node("deploy");
|
||||||
|
literal.addArgument(templateArg);
|
||||||
|
literal.setExecutor(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompletableFuture<Result<Object, String>> execute(CommandContext<CommandSender> ctx) {
|
||||||
|
var template = ctx.getArg(templateArg);
|
||||||
|
ctx.getSender().sendMessage(style.ok("Deploying instance... this may take a while"));
|
||||||
|
return Tasks.supplyAsync(() ->
|
||||||
|
ScrowAPI.getInstanceManager().deployInstance(template))
|
||||||
|
.<Result<Object, String>>mapSync(instance -> {
|
||||||
|
ctx.getSender().sendMessage(style.ok("Deployed instance of " + template + " with handle " + instance.getHandle()));
|
||||||
|
// FIXME handle unknown server
|
||||||
|
return Results.success(new Object());
|
||||||
|
}).toFuture();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
package de.kentoj.scrow.bukkit.instancemanager.command;
|
||||||
|
|
||||||
|
import com.leakyabstractions.result.api.Result;
|
||||||
|
import com.leakyabstractions.result.core.Results;
|
||||||
|
import de.kentoj.kencommandapi.api.argument.CommandArgument;
|
||||||
|
import de.kentoj.kencommandapi.api.argument.types.StringArgumentType;
|
||||||
|
import de.kentoj.kencommandapi.api.invocation.CommandContext;
|
||||||
|
import de.kentoj.kencommandapi.api.invocation.CommandExecutor;
|
||||||
|
import de.kentoj.kencommandapi.api.node.CommandNode;
|
||||||
|
import de.kentoj.scrow.bukkit.ScrowAPI;
|
||||||
|
import de.kentoj.scrow.bukkit.scheduler.Tasks;
|
||||||
|
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
||||||
|
import de.kentoj.scrowlib.instancemanager.ServerInstance;
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
|
public class InstanceDestroyLiteral implements CommandExecutor<CommandSender> {
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private final CommandNode<CommandSender> literal;
|
||||||
|
private final CommandArgument<CommandSender, String> handleArg;
|
||||||
|
private final ScrowMessageStyle style;
|
||||||
|
|
||||||
|
public InstanceDestroyLiteral(ScrowMessageStyle style) {
|
||||||
|
this.style = style;
|
||||||
|
|
||||||
|
handleArg = CommandArgument.arg("handle", new StringArgumentType<>());
|
||||||
|
handleArg.setSuggestionProvider(ctx ->
|
||||||
|
Tasks.supplyAsync(() -> ScrowAPI.getInstanceManager().getInstances().stream()
|
||||||
|
.map(ServerInstance::getHandle)
|
||||||
|
.toList())
|
||||||
|
.toFuture());
|
||||||
|
|
||||||
|
literal = CommandNode.node("destroy");
|
||||||
|
literal.addArgument(handleArg);
|
||||||
|
literal.setExecutor(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompletableFuture<Result<Object, String>> execute(CommandContext<CommandSender> ctx) {
|
||||||
|
var handle = ctx.getArg(handleArg);
|
||||||
|
return Tasks.supplyAsync(() -> ScrowAPI.getInstanceManager().destroyInstance(handle))
|
||||||
|
.<Result<Object, String>>mapSync(found -> {
|
||||||
|
if (!found)
|
||||||
|
return Results.failure("No instance with that handle found");
|
||||||
|
ctx.getSender().sendMessage(style.ok("Destroyed server with handle " + handle));
|
||||||
|
return Results.success(new Object());
|
||||||
|
}).toFuture();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,43 @@
|
||||||
|
package de.kentoj.scrow.bukkit.instancemanager.command;
|
||||||
|
|
||||||
|
import com.leakyabstractions.result.api.Result;
|
||||||
|
import com.leakyabstractions.result.core.Results;
|
||||||
|
import de.kentoj.kencommandapi.api.invocation.CommandContext;
|
||||||
|
import de.kentoj.kencommandapi.api.invocation.CommandExecutor;
|
||||||
|
import de.kentoj.kencommandapi.api.node.CommandNode;
|
||||||
|
import de.kentoj.scrow.bukkit.ScrowAPI;
|
||||||
|
import de.kentoj.scrow.bukkit.scheduler.Tasks;
|
||||||
|
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
||||||
|
import lombok.Getter;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
|
public class InstanceListLiteral implements CommandExecutor<CommandSender> {
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private final CommandNode<CommandSender> node;
|
||||||
|
private final ScrowMessageStyle style;
|
||||||
|
|
||||||
|
public InstanceListLiteral(ScrowMessageStyle style) {
|
||||||
|
this.style = style;
|
||||||
|
this.node = CommandNode.node("list");
|
||||||
|
this.node.setExecutor(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompletableFuture<Result<Object, String>> execute(CommandContext<CommandSender> ctx) {
|
||||||
|
return Tasks.supplyAsync(() ->
|
||||||
|
ScrowAPI.getInstanceManager().getInstances())
|
||||||
|
.<Result<Object, String>>mapSync(instances -> {
|
||||||
|
var msg = Component.text("Running instances:");
|
||||||
|
for (var inst : instances) {
|
||||||
|
msg = msg.appendNewline()
|
||||||
|
.append(Component.text(" - " + inst.getHandle() + " on port " + inst.getPort()));
|
||||||
|
}
|
||||||
|
ctx.getSender().sendMessage(style.ok(msg));
|
||||||
|
return Results.success(new Object());
|
||||||
|
}).toFuture();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
package de.kentoj.scrow.bukkit.playermanager;
|
package de.kentoj.scrow.bukkit.playermanager;
|
||||||
|
|
||||||
import com.leakyabstractions.result.api.Result;
|
|
||||||
import de.kentoj.scrow.bukkit.misc.PlayerManager;
|
import de.kentoj.scrow.bukkit.misc.PlayerManager;
|
||||||
import de.kentoj.scrowlib.messaging.MessageBroker;
|
import de.kentoj.scrowlib.messaging.MessageBroker;
|
||||||
|
import de.kentoj.scrowlib.utils.ResultUtils;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
|
|
||||||
|
|
@ -14,10 +14,10 @@ public class PlayerManagerImpl implements PlayerManager {
|
||||||
private final MessageBroker messageBroker;
|
private final MessageBroker messageBroker;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result<Object, String> sendPlayer(UUID playerId, String instanceHandle) {
|
public void sendPlayer(UUID playerId, String instanceHandle) {
|
||||||
return messageBroker.request("players.send", new Document()
|
var result = messageBroker.request("players.send", new Document()
|
||||||
.append("playerId", playerId)
|
.append("playerId", playerId)
|
||||||
.append("handle", instanceHandle))
|
.append("handle", instanceHandle));
|
||||||
.mapSuccess(__ -> null);
|
ResultUtils.unwrap(result, "failed to send player to " + instanceHandle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,28 +2,28 @@ package de.kentoj.scrow.bukkit.server;
|
||||||
|
|
||||||
import com.leakyabstractions.result.api.Result;
|
import com.leakyabstractions.result.api.Result;
|
||||||
import com.leakyabstractions.result.core.Results;
|
import com.leakyabstractions.result.core.Results;
|
||||||
import de.kentoj.kencommandapi.api.node.CommandNode;
|
|
||||||
import de.kentoj.kencommandapi.api.invocation.CommandContext;
|
import de.kentoj.kencommandapi.api.invocation.CommandContext;
|
||||||
import de.kentoj.kencommandapi.api.invocation.CommandExecutor;
|
import de.kentoj.kencommandapi.api.invocation.SyncCommandExecutor;
|
||||||
|
import de.kentoj.kencommandapi.api.node.CommandNode;
|
||||||
|
import de.kentoj.kencommandapi.api.node.RootCommandNode;
|
||||||
|
import de.kentoj.kencommandapi.api.platform.MessageStyle;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
public class LobbyCommand implements SyncCommandExecutor<CommandSender> {
|
||||||
|
|
||||||
public class LobbyCommand implements CommandExecutor<CommandSender> {
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final CommandNode<CommandSender> rootNode;
|
private final RootCommandNode<CommandSender> rootNode;
|
||||||
|
|
||||||
public LobbyCommand() {
|
public LobbyCommand() {
|
||||||
this.rootNode = CommandNode.node("lobby", "l", "hub");
|
this.rootNode = CommandNode.rootNode(MessageStyle.PLAIN, "lobby", "l", "hub");
|
||||||
this.rootNode.setExecutor(this);
|
this.rootNode.setExecutor(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<Result<Object, String>> execute(CommandContext<CommandSender> ctx) {
|
public Result<Object, String> executeSync(CommandContext<CommandSender> ctx) {
|
||||||
Bukkit.dispatchCommand(ctx.getSender(), "play lobby");
|
Bukkit.dispatchCommand(ctx.getSender(), "play lobby");
|
||||||
return CompletableFuture.completedFuture(Results.success(new Object()));
|
return Results.success(new Object());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,10 @@ import de.kentoj.kencommandapi.api.argument.types.StringArgumentType;
|
||||||
import de.kentoj.kencommandapi.api.invocation.CommandContext;
|
import de.kentoj.kencommandapi.api.invocation.CommandContext;
|
||||||
import de.kentoj.kencommandapi.api.invocation.CommandExecutor;
|
import de.kentoj.kencommandapi.api.invocation.CommandExecutor;
|
||||||
import de.kentoj.kencommandapi.api.node.CommandNode;
|
import de.kentoj.kencommandapi.api.node.CommandNode;
|
||||||
|
import de.kentoj.kencommandapi.api.node.RootCommandNode;
|
||||||
import de.kentoj.scrow.bukkit.ScrowAPI;
|
import de.kentoj.scrow.bukkit.ScrowAPI;
|
||||||
import de.kentoj.scrow.bukkit.scheduler.Tasks;
|
import de.kentoj.scrow.bukkit.scheduler.Tasks;
|
||||||
|
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
@ -18,28 +20,36 @@ import java.util.concurrent.CompletableFuture;
|
||||||
public class PlayCommand implements CommandExecutor<CommandSender> {
|
public class PlayCommand implements CommandExecutor<CommandSender> {
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final CommandNode<CommandSender> rootNode;
|
private final RootCommandNode<CommandSender> rootNode;
|
||||||
private final CommandArgument<CommandSender, String> gamemodeArg;
|
private final CommandArgument<CommandSender, String> gamemodeArg;
|
||||||
|
|
||||||
public PlayCommand() {
|
public PlayCommand() {
|
||||||
this.rootNode = CommandNode.node("play", "queue");
|
var style = ScrowMessageStyle.GENERIC;
|
||||||
this.gamemodeArg = CommandArgument.arg("gamemode", new StringArgumentType<>());
|
|
||||||
this.rootNode.addArgument(this.gamemodeArg);
|
gamemodeArg = CommandArgument.arg("gamemode", new StringArgumentType<>());
|
||||||
this.rootNode.setExecutor(this);
|
|
||||||
|
rootNode = CommandNode.rootNode(style, "play", "queue");
|
||||||
|
rootNode.addArgument(this.gamemodeArg);
|
||||||
|
rootNode.setExecutor(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<Result<Object, String>> execute(CommandContext<CommandSender> ctx) {
|
public CompletableFuture<Result<Object, String>> execute(CommandContext<CommandSender> ctx) {
|
||||||
var gamemode = ctx.getArg(gamemodeArg);
|
var gamemode = ctx.getArg(gamemodeArg);
|
||||||
var player = (Player) ctx.getSender();
|
var player = (Player) ctx.getSender();
|
||||||
return Tasks.supplyAsync(() -> ScrowAPI.getInstanceManager().getInstances()
|
return Tasks.supplyAsync(() -> ScrowAPI.getInstanceManager().getInstances())
|
||||||
.mapSuccess(instances -> {
|
.mapAsync(instances -> {
|
||||||
var instance = instances.stream()
|
var instance = instances.stream()
|
||||||
.filter(inst -> inst.getTemplate().equals(gamemode))
|
.filter(inst -> inst.getTemplate().equals(gamemode))
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
if (instance == null) return Results.failure("No instance available");
|
if (instance == null)
|
||||||
return ScrowAPI.getPlayerManager().sendPlayer(player.getUniqueId(), instance.getHandle());
|
return Results.failure("No instance for " + gamemode + " found");
|
||||||
}));
|
|
||||||
|
return Results.ofCallable(() -> {
|
||||||
|
ScrowAPI.getPlayerManager().sendPlayer(player.getUniqueId(), instance.getHandle());
|
||||||
|
return new Object();
|
||||||
|
}).mapFailure(Exception::getMessage);
|
||||||
|
}).toFuture();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ dependencies {
|
||||||
api("org.mongodb:bson:5.8.0")
|
api("org.mongodb:bson:5.8.0")
|
||||||
|
|
||||||
// http://forge.kentoj.de/scrow/-/packages/maven/de.kentoj.scrow:kencommandapi-core
|
// http://forge.kentoj.de/scrow/-/packages/maven/de.kentoj.scrow:kencommandapi-core
|
||||||
api("de.kentoj.scrow:kencommandapi-core:0.22")
|
api("de.kentoj.scrow:kencommandapi-core:0.23")
|
||||||
}
|
}
|
||||||
|
|
||||||
publishing {
|
publishing {
|
||||||
|
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
package de.kentoj.scrowlib.connection;
|
|
||||||
|
|
||||||
import org.springframework.r2dbc.core.DatabaseClient;
|
|
||||||
|
|
||||||
public interface DatabaseConnectionFactory extends AutoCloseable {
|
|
||||||
|
|
||||||
DatabaseClient create();
|
|
||||||
}
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
package de.kentoj.scrowlib.connection;
|
|
||||||
|
|
||||||
import io.r2dbc.pool.ConnectionPool;
|
|
||||||
import io.r2dbc.pool.ConnectionPoolConfiguration;
|
|
||||||
import io.r2dbc.spi.ConnectionFactory;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.springframework.r2dbc.core.DatabaseClient;
|
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public class DatabaseConnectionFactoryImpl implements DatabaseConnectionFactory {
|
|
||||||
|
|
||||||
private final ConnectionPool backingFactory;
|
|
||||||
|
|
||||||
public DatabaseConnectionFactoryImpl(ConnectionFactory connectionFactory) {
|
|
||||||
this(new ConnectionPool(ConnectionPoolConfiguration.builder()
|
|
||||||
.connectionFactory(connectionFactory)
|
|
||||||
.build()));
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIXME
|
|
||||||
// its been a while and i no longer remember what had to be fixed
|
|
||||||
@Override
|
|
||||||
public DatabaseClient create() {
|
|
||||||
return DatabaseClient.create(backingFactory);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void close() {
|
|
||||||
backingFactory.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -11,6 +11,8 @@ import java.util.List;
|
||||||
|
|
||||||
public class ScrowMessageStyle implements MessageStyle {
|
public class ScrowMessageStyle implements MessageStyle {
|
||||||
|
|
||||||
|
public static ScrowMessageStyle GENERIC = new ScrowMessageStyle("Scrow", NamedTextColor.WHITE);
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final Component prefix;
|
private final Component prefix;
|
||||||
@Getter
|
@Getter
|
||||||
|
|
@ -32,16 +34,6 @@ public class ScrowMessageStyle implements MessageStyle {
|
||||||
.append(msg.colorIfAbsent(NamedTextColor.GRAY));
|
.append(msg.colorIfAbsent(NamedTextColor.GRAY));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Component list(Component header, List<? extends Component> list) {
|
|
||||||
var res = ok(header);
|
|
||||||
for (Component component : list) {
|
|
||||||
res = res.appendNewline()
|
|
||||||
.append(Component.text(" - ").color(NamedTextColor.GRAY))
|
|
||||||
.append(component.colorIfAbsent(NamedTextColor.GRAY));
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component err(Component msg) {
|
public Component err(Component msg) {
|
||||||
return ok(msg.color(NamedTextColor.RED));
|
return ok(msg.color(NamedTextColor.RED));
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package de.kentoj.scrowlib.servermanager;
|
package de.kentoj.scrowlib.instancemanager;
|
||||||
|
|
||||||
import org.jspecify.annotations.Nullable;
|
import org.jspecify.annotations.Nullable;
|
||||||
|
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
package de.kentoj.scrowlib.instancemanager;
|
||||||
|
|
||||||
|
import de.kentoj.scrowlib.messaging.MessageBroker;
|
||||||
|
import io.nats.client.Connection;
|
||||||
|
import org.bson.Document;
|
||||||
|
import org.jspecify.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static de.kentoj.scrowlib.utils.ResultUtils.unwrap;
|
||||||
|
|
||||||
|
public class InstanceManagerImpl implements InstanceManager {
|
||||||
|
|
||||||
|
private final MessageBroker messageBroker;
|
||||||
|
|
||||||
|
public InstanceManagerImpl(Connection natsCon) {
|
||||||
|
messageBroker = new MessageBroker(natsCon);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ServerInstance deployInstance(String template) {
|
||||||
|
var result = messageBroker.request("instance.deploy", new Document("template", template));
|
||||||
|
var document = unwrap(result, "failed to deploy instance of " + template);
|
||||||
|
return ServerInstance.fromDocument(document);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean destroyInstance(String handle) {
|
||||||
|
var result = messageBroker.request("instance.destroy", new Document("handle", handle));
|
||||||
|
return unwrap(result.mapSuccess(__ -> true)
|
||||||
|
.recover(this::wasNotFound, __ -> false), "failed to destroy instance " + handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ServerInstance> getInstances() {
|
||||||
|
var result = messageBroker.request("instance.list", new Document());
|
||||||
|
return unwrap(result.mapSuccess(doc -> doc.getList("instances", Document.class)
|
||||||
|
.stream().map(ServerInstance::fromDocument).toList()),
|
||||||
|
"failed to get instances");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable ServerInstance getInstance(String handle) {
|
||||||
|
var result = messageBroker.request("instance.get", new Document("handle", handle));
|
||||||
|
return unwrap(result.mapSuccess(ServerInstance::fromDocument)
|
||||||
|
.recover(this::wasNotFound, __ -> null), "failed to get instance " + handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean wasNotFound(String failure) {
|
||||||
|
return "no instance found".equals(failure);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package de.kentoj.scrowlib.servermanager;
|
package de.kentoj.scrowlib.instancemanager;
|
||||||
|
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import lombok.Value;
|
import lombok.Value;
|
||||||
|
|
@ -12,5 +12,5 @@ public interface RequestHandler {
|
||||||
*
|
*
|
||||||
* @return result to send back to the requesting client.
|
* @return result to send back to the requesting client.
|
||||||
*/
|
*/
|
||||||
CompletionStage<Result<Document, String>> handle(Document request);
|
CompletionStage<Result<Document, String>> handle(Document doc);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
package de.kentoj.scrowlib.messaging;
|
||||||
|
|
||||||
|
import com.leakyabstractions.result.api.Result;
|
||||||
|
import org.bson.Document;
|
||||||
|
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.concurrent.CompletionStage;
|
||||||
|
|
||||||
|
@FunctionalInterface
|
||||||
|
public interface SyncRequestHandler extends RequestHandler{
|
||||||
|
Result<Document, String> handleSync(Document doc);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
default CompletionStage<Result<Document, String>> handle(Document doc) {
|
||||||
|
return CompletableFuture.completedFuture(handleSync(doc));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,45 +0,0 @@
|
||||||
package de.kentoj.scrowlib.servermanager;
|
|
||||||
|
|
||||||
import com.leakyabstractions.result.api.Result;
|
|
||||||
import de.kentoj.scrowlib.messaging.MessageBroker;
|
|
||||||
import io.nats.client.Connection;
|
|
||||||
import org.bson.Document;
|
|
||||||
import org.jspecify.annotations.Nullable;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class InstanceManagerImpl implements InstanceManager {
|
|
||||||
|
|
||||||
private final MessageBroker messageBroker;
|
|
||||||
|
|
||||||
public InstanceManagerImpl(Connection natsCon) {
|
|
||||||
messageBroker = new MessageBroker(natsCon);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Result<ServerInstance, String> deployInstance(String template) {
|
|
||||||
var result = messageBroker.request("instance.deploy", new Document("template", template));
|
|
||||||
return result.mapSuccess(ServerInstance::fromDocument);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Result<Object, String> destroyInstance(String handle) {
|
|
||||||
var result = messageBroker.request("instance.destroy", new Document("handle", handle));
|
|
||||||
return result.mapSuccess(__ -> null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Result<List<ServerInstance>, String> getInstances() {
|
|
||||||
var result = messageBroker.request("instance.list", new Document());
|
|
||||||
return result.mapSuccess(doc -> doc.getList("instances", Document.class)
|
|
||||||
.stream()
|
|
||||||
.map(ServerInstance::fromDocument)
|
|
||||||
.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Result<@Nullable ServerInstance, String> getInstance(String handle) {
|
|
||||||
var result = messageBroker.request("instance.get", new Document("handle", handle));
|
|
||||||
return result.mapSuccess(ServerInstance::fromDocument);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
package de.kentoj.scrowlib.utils;
|
||||||
|
|
||||||
|
import com.leakyabstractions.result.api.Result;
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
@NoArgsConstructor(access = AccessLevel.NONE)
|
||||||
|
public class ResultUtils {
|
||||||
|
public static <S> S unwrap(Result<S, String> result, String message) {
|
||||||
|
Optional<String> err = result.getFailure();
|
||||||
|
if (err.isPresent())
|
||||||
|
throw new RuntimeException(message + ": " + err.orElseThrow());
|
||||||
|
return result.getSuccess().orElseThrow();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -4,7 +4,7 @@ plugins {
|
||||||
id("de.kentoj.scrow.scrow-repository")
|
id("de.kentoj.scrow.scrow-repository")
|
||||||
id("de.kentoj.scrow.base-dependencies")
|
id("de.kentoj.scrow.base-dependencies")
|
||||||
id("de.kentoj.scrow.java-library")
|
id("de.kentoj.scrow.java-library")
|
||||||
id("de.kentoj.scrow.reactor")
|
id("de.kentoj.scrow.database")
|
||||||
}
|
}
|
||||||
|
|
||||||
group = "de.kentoj.scrow"
|
group = "de.kentoj.scrow"
|
||||||
|
|
@ -24,9 +24,9 @@ dependencies {
|
||||||
api("com.velocitypowered:velocity-api:3.5.0-SNAPSHOT")
|
api("com.velocitypowered:velocity-api:3.5.0-SNAPSHOT")
|
||||||
|
|
||||||
// http://forge.kentoj.de/scrow/-/packages/maven/de.kentoj.scrow:kencommandapi-core
|
// http://forge.kentoj.de/scrow/-/packages/maven/de.kentoj.scrow:kencommandapi-core
|
||||||
api("de.kentoj.scrow:kencommandapi-core:0.22")
|
api("de.kentoj.scrow:kencommandapi-core:0.23")
|
||||||
// http://forge.kentoj.de/scrow/-/packages/maven/de.kentoj.scrow:kencommandapi-velocity
|
// http://forge.kentoj.de/scrow/-/packages/maven/de.kentoj.scrow:kencommandapi-velocity
|
||||||
api("de.kentoj.scrow:kencommandapi-velocity:0.22")
|
api("de.kentoj.scrow:kencommandapi-velocity:0.23")
|
||||||
}
|
}
|
||||||
|
|
||||||
publishing {
|
publishing {
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,19 @@
|
||||||
package de.kentoj.scrow.velocity;
|
package de.kentoj.scrow.velocity;
|
||||||
|
|
||||||
import de.kentoj.kencommandapi.CommandAPI;
|
import de.kentoj.kencommandapi.CommandAPI;
|
||||||
import de.kentoj.scrowlib.connection.DatabaseConnectionFactory;
|
import de.kentoj.scrowlib.instancemanager.InstanceManager;
|
||||||
import de.kentoj.scrowlib.servermanager.InstanceManager;
|
|
||||||
import io.nats.client.Connection;
|
import io.nats.client.Connection;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.jdbi.v3.core.Jdbi;
|
||||||
import org.jetbrains.annotations.ApiStatus;
|
import org.jetbrains.annotations.ApiStatus;
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
public class ScrowAPI {
|
public class ScrowAPI {
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private static DatabaseConnectionFactory dbConFactory;
|
private static Jdbi jdbi;
|
||||||
@Getter
|
@Getter
|
||||||
private static CommandAPI commandApi;
|
private static CommandAPI commandApi;
|
||||||
@Getter
|
@Getter
|
||||||
|
|
@ -38,8 +37,8 @@ public class ScrowAPI {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiStatus.Internal
|
@ApiStatus.Internal
|
||||||
public static void setDbConFactory(@Nullable DatabaseConnectionFactory dbConFactory) {
|
public static void setJdbi(Jdbi jdbi) {
|
||||||
ScrowAPI.dbConFactory = dbConFactory;
|
ScrowAPI.jdbi = jdbi;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ plugins {
|
||||||
id("de.kentoj.scrow.scrow-repository")
|
id("de.kentoj.scrow.scrow-repository")
|
||||||
id("de.kentoj.scrow.base-dependencies")
|
id("de.kentoj.scrow.base-dependencies")
|
||||||
id("de.kentoj.scrow.database")
|
id("de.kentoj.scrow.database")
|
||||||
id("de.kentoj.scrow.reactor")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
group = "de.kentoj.scrow"
|
group = "de.kentoj.scrow"
|
||||||
|
|
|
||||||
|
|
@ -6,12 +6,15 @@ import com.velocitypowered.api.proxy.ProxyServer;
|
||||||
import de.kentoj.scrow.corevelocity.command.OnlineCommand;
|
import de.kentoj.scrow.corevelocity.command.OnlineCommand;
|
||||||
import de.kentoj.scrow.corevelocity.privmsg.LastTargetCache;
|
import de.kentoj.scrow.corevelocity.privmsg.LastTargetCache;
|
||||||
import de.kentoj.scrow.corevelocity.privmsg.MsgCommand;
|
import de.kentoj.scrow.corevelocity.privmsg.MsgCommand;
|
||||||
|
import de.kentoj.scrow.corevelocity.privmsg.PrivMsgHandler;
|
||||||
import de.kentoj.scrow.corevelocity.privmsg.ReplyCommand;
|
import de.kentoj.scrow.corevelocity.privmsg.ReplyCommand;
|
||||||
import de.kentoj.scrow.corevelocity.server.SendPlayerWatchdog;
|
import de.kentoj.scrow.corevelocity.server.SendPlayerWatchdog;
|
||||||
import de.kentoj.scrow.corevelocity.server.ServerRegisterWatchdog;
|
import de.kentoj.scrow.corevelocity.server.ServerRegisterWatchdog;
|
||||||
import de.kentoj.scrow.generated.BuildInfo; // may not resolve until building for the first time
|
import de.kentoj.scrow.generated.BuildInfo;
|
||||||
import de.kentoj.scrow.velocity.ScrowAPI;
|
import de.kentoj.scrow.velocity.ScrowAPI;
|
||||||
|
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
||||||
import lombok.extern.java.Log;
|
import lombok.extern.java.Log;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
|
||||||
@Plugin(
|
@Plugin(
|
||||||
id = "corevelocity",
|
id = "corevelocity",
|
||||||
|
|
@ -28,12 +31,14 @@ public class CoreVelocityPlugin {
|
||||||
var cmds = ScrowAPI.getCommandApi();
|
var cmds = ScrowAPI.getCommandApi();
|
||||||
{
|
{
|
||||||
var lastTargetCache = new LastTargetCache();
|
var lastTargetCache = new LastTargetCache();
|
||||||
cmds.register(new ReplyCommand(server, lastTargetCache).getRootNode());
|
var style = new ScrowMessageStyle("MSG", NamedTextColor.LIGHT_PURPLE);
|
||||||
cmds.register(new MsgCommand(server, lastTargetCache).getRootNode());
|
var privmsgHelper = new PrivMsgHandler(style);
|
||||||
|
cmds.register(new ReplyCommand(server, lastTargetCache, privmsgHelper, style).getRootNode());
|
||||||
|
cmds.register(new MsgCommand(server, lastTargetCache, privmsgHelper, style).getRootNode());
|
||||||
cmds.register(new OnlineCommand(server).getRootNode());
|
cmds.register(new OnlineCommand(server).getRootNode());
|
||||||
}
|
}
|
||||||
|
|
||||||
var registerWatchdog = new ServerRegisterWatchdog(ScrowAPI.getNats(), ScrowAPI.getInstanceManager(), server);
|
var registerWatchdog = new ServerRegisterWatchdog(ScrowAPI.getNats(), server);
|
||||||
var sendPlayerWatchdog = new SendPlayerWatchdog(ScrowAPI.getNats(), server);
|
var sendPlayerWatchdog = new SendPlayerWatchdog(ScrowAPI.getNats(), server);
|
||||||
registerWatchdog.listen();
|
registerWatchdog.listen();
|
||||||
sendPlayerWatchdog.listen();
|
sendPlayerWatchdog.listen();
|
||||||
|
|
|
||||||
|
|
@ -3,14 +3,13 @@ package de.kentoj.scrow.corevelocity;
|
||||||
import com.velocitypowered.api.proxy.ProxyServer;
|
import com.velocitypowered.api.proxy.ProxyServer;
|
||||||
import de.kentoj.kencommandapi.CommandAPI;
|
import de.kentoj.kencommandapi.CommandAPI;
|
||||||
import de.kentoj.scrow.velocity.ScrowAPI;
|
import de.kentoj.scrow.velocity.ScrowAPI;
|
||||||
import de.kentoj.scrowlib.connection.DatabaseConnectionFactoryImpl;
|
import de.kentoj.scrowlib.instancemanager.InstanceManagerImpl;
|
||||||
import de.kentoj.scrowlib.utils.EnvUtils;
|
import de.kentoj.scrowlib.utils.EnvUtils;
|
||||||
import io.nats.client.Nats;
|
import io.nats.client.Nats;
|
||||||
import io.nats.client.Options;
|
import io.nats.client.Options;
|
||||||
import io.r2dbc.spi.ConnectionFactories;
|
|
||||||
import io.r2dbc.spi.ConnectionFactory;
|
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.jdbi.v3.core.Jdbi;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
|
@ -30,20 +29,14 @@ public class ScrowAPISurface {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enableDatabase) {
|
if (enableDatabase) {
|
||||||
ConnectionFactory factory = ConnectionFactories.get(EnvUtils.envOrThrow("HOST_POSTGRES"));
|
ScrowAPI.setJdbi(Jdbi.create(EnvUtils.envOrThrow("HOST_POSTGRES")));
|
||||||
ScrowAPI.setDbConFactory(new DatabaseConnectionFactoryImpl(factory));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ScrowAPI.setInstanceManager(new ServerManagerImpl(ScrowAPI.getNats()));
|
ScrowAPI.setInstanceManager(new InstanceManagerImpl(ScrowAPI.getNats()));
|
||||||
|
|
||||||
ScrowAPI.setCommandApi(new CommandAPI(server));
|
ScrowAPI.setCommandApi(new CommandAPI(server));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void destroyScrowAPI() {
|
public static void destroyScrowAPI() {
|
||||||
try {
|
|
||||||
ScrowAPI.getDbConFactory().close();
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,39 +1,40 @@
|
||||||
package de.kentoj.scrow.corevelocity.command;
|
package de.kentoj.scrow.corevelocity.command;
|
||||||
|
|
||||||
|
import com.leakyabstractions.result.api.Result;
|
||||||
|
import com.leakyabstractions.result.core.Results;
|
||||||
import com.velocitypowered.api.command.CommandSource;
|
import com.velocitypowered.api.command.CommandSource;
|
||||||
import com.velocitypowered.api.proxy.ProxyServer;
|
import com.velocitypowered.api.proxy.ProxyServer;
|
||||||
import de.kentoj.kencommandapi.api.node.CommandNode;
|
|
||||||
import de.kentoj.kencommandapi.api.invocation.CommandContext;
|
import de.kentoj.kencommandapi.api.invocation.CommandContext;
|
||||||
import de.kentoj.kencommandapi.api.invocation.CommandExecutor;
|
import de.kentoj.kencommandapi.api.invocation.SyncCommandExecutor;
|
||||||
import com.leakyabstractions.result.api.Result;
|
import de.kentoj.kencommandapi.api.node.CommandNode;
|
||||||
import com.leakyabstractions.result.api.Results;
|
import de.kentoj.kencommandapi.api.node.RootCommandNode;
|
||||||
|
import de.kentoj.kencommandapi.api.platform.MessageStyle;
|
||||||
|
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class OnlineCommand implements CommandExecutor<CommandSource> {
|
public class OnlineCommand implements SyncCommandExecutor<CommandSource> {
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final CommandNode<CommandSource> rootNode;
|
private final RootCommandNode<CommandSource> rootNode;
|
||||||
|
|
||||||
private final ProxyServer server;
|
private final ProxyServer server;
|
||||||
|
|
||||||
public OnlineCommand(ProxyServer server) {
|
public OnlineCommand(ProxyServer server) {
|
||||||
this.server = server;
|
this.server = server;
|
||||||
rootNode = CommandNode.node("online");
|
rootNode = CommandNode.rootNode(ScrowMessageStyle.GENERIC, "online");
|
||||||
rootNode.setExecutor(this);
|
rootNode.setExecutor(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<Result<Object,String>> execute(CommandContext<CommandSource> ctx) {
|
public Result<Object, String> executeSync(CommandContext<CommandSource> ctx) {
|
||||||
int cnt = server.getPlayerCount();
|
int cnt = server.getPlayerCount();
|
||||||
var msg = cnt != 1
|
var msg = cnt != 1
|
||||||
? "There are currently " + cnt + " players online"
|
? "There are currently " + cnt + " players online"
|
||||||
: "There is currently 1 player online";
|
: "There is currently 1 player online";
|
||||||
ctx.getSender().sendMessage(Component.text(msg));
|
ctx.getSender().sendMessage(Component.text(msg));
|
||||||
return Result.success().toFuture();
|
return Results.success(new Object());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,52 +1,54 @@
|
||||||
package de.kentoj.scrow.corevelocity.privmsg;
|
package de.kentoj.scrow.corevelocity.privmsg;
|
||||||
|
|
||||||
|
import com.leakyabstractions.result.api.Result;
|
||||||
|
import com.leakyabstractions.result.core.Results;
|
||||||
import com.velocitypowered.api.command.CommandSource;
|
import com.velocitypowered.api.command.CommandSource;
|
||||||
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 de.kentoj.kencommandapi.api.node.CommandNode;
|
|
||||||
import de.kentoj.kencommandapi.api.argument.CommandArgument;
|
import de.kentoj.kencommandapi.api.argument.CommandArgument;
|
||||||
import de.kentoj.kencommandapi.api.argument.types.StringArgumentType;
|
import de.kentoj.kencommandapi.api.argument.types.StringArgumentType;
|
||||||
import de.kentoj.kencommandapi.api.invocation.CommandContext;
|
import de.kentoj.kencommandapi.api.invocation.CommandContext;
|
||||||
import de.kentoj.kencommandapi.api.invocation.CommandExecutor;
|
import de.kentoj.kencommandapi.api.invocation.SyncCommandExecutor;
|
||||||
import com.leakyabstractions.result.api.Result;
|
import de.kentoj.kencommandapi.api.node.CommandNode;
|
||||||
import com.leakyabstractions.result.api.Results;
|
import de.kentoj.kencommandapi.api.node.RootCommandNode;
|
||||||
|
import de.kentoj.kencommandapi.api.platform.MessageStyle;
|
||||||
import de.kentoj.kencommandapi.type.PlayerArgumentType;
|
import de.kentoj.kencommandapi.type.PlayerArgumentType;
|
||||||
import de.kentoj.scrow.velocity.ScrowAPI;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
public class MsgCommand implements SyncCommandExecutor<CommandSource> {
|
||||||
|
|
||||||
public class MsgCommand implements CommandExecutor<CommandSource> {
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final CommandNode<CommandSource> rootNode;
|
private final RootCommandNode<CommandSource> rootNode;
|
||||||
private final CommandArgument<CommandSource, Player> targetArg;
|
private final CommandArgument<CommandSource, Player> targetArg;
|
||||||
private final CommandArgument<CommandSource, String> msgArg;
|
private final CommandArgument<CommandSource, String> msgArg;
|
||||||
|
|
||||||
private final LastTargetCache cache;
|
private final LastTargetCache cache;
|
||||||
|
private final PrivMsgHandler privMsgHandler;
|
||||||
|
|
||||||
public MsgCommand(ProxyServer server, LastTargetCache cache) {
|
public MsgCommand(ProxyServer server, LastTargetCache cache, PrivMsgHandler helper, MessageStyle style) {
|
||||||
this.cache = cache;
|
this.cache = cache;
|
||||||
|
this.privMsgHandler = helper;
|
||||||
|
|
||||||
targetArg = CommandArgument.arg("target", new PlayerArgumentType(server));
|
targetArg = CommandArgument.arg("target", new PlayerArgumentType(server));
|
||||||
msgArg = CommandArgument.arg("msg", new StringArgumentType<>(true));
|
msgArg = CommandArgument.arg("msg", new StringArgumentType<>(true));
|
||||||
rootNode = CommandNode.node("msg", "w", "privmsg");
|
|
||||||
|
rootNode = CommandNode.rootNode(style, "msg", "w", "privmsg");
|
||||||
rootNode.setExecutor(this);
|
rootNode.setExecutor(this);
|
||||||
rootNode.addArgument(targetArg);
|
rootNode.addArgument(targetArg);
|
||||||
rootNode.addArgument(msgArg);
|
rootNode.addArgument(msgArg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<Result<Object,String>> execute(CommandContext<CommandSource> ctx) {
|
public Result<Object, String> executeSync(CommandContext<CommandSource> ctx) {
|
||||||
var target = ctx.getArg(targetArg);
|
var target = ctx.getArg(targetArg);
|
||||||
var msg = ctx.getArg(msgArg);
|
var msg = ctx.getArg(msgArg);
|
||||||
var sender = (Player) ctx.getSender();
|
var sender = (Player) ctx.getSender();
|
||||||
|
|
||||||
var isMessagingSelf = target.getUniqueId().equals(sender.getUniqueId());
|
var isMessagingSelf = target.getUniqueId().equals(sender.getUniqueId());
|
||||||
if (isMessagingSelf) return Result.error("You can't message yourself").toFuture();
|
if (isMessagingSelf) return Results.failure("You can't message yourself");
|
||||||
|
|
||||||
cache.setLastTarget(sender.getUniqueId(), target.getUniqueId());
|
cache.setLastTarget(sender.getUniqueId(), target.getUniqueId());
|
||||||
PrivmsgHelper.handle(sender, target, msg);
|
privMsgHandler.handle(sender, target, msg);
|
||||||
return Result.success().toFuture();
|
return Results.success(new Object());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
package de.kentoj.scrow.corevelocity.privmsg;
|
||||||
|
|
||||||
|
import com.velocitypowered.api.proxy.Player;
|
||||||
|
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
|
||||||
|
import static net.kyori.adventure.text.Component.text;
|
||||||
|
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class PrivMsgHandler {
|
||||||
|
|
||||||
|
private final ScrowMessageStyle style;
|
||||||
|
|
||||||
|
public void handle(Player player, Player target, String msg) {
|
||||||
|
target.sendMessage(style.ok(text(player.getUsername() + " -> You:").append(Component.text(msg))));
|
||||||
|
player.sendMessage(style.ok(text("You -> " + player.getUsername()).append(Component.text(msg))));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
package de.kentoj.scrow.corevelocity.privmsg;
|
|
||||||
|
|
||||||
import com.velocitypowered.api.proxy.Player;
|
|
||||||
import lombok.AccessLevel;
|
|
||||||
import lombok.NoArgsConstructor;
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
|
|
||||||
@NoArgsConstructor(access = AccessLevel.NONE)
|
|
||||||
public class PrivmsgHelper {
|
|
||||||
|
|
||||||
public static void handle(Player player, Player target, String msg) {
|
|
||||||
target.sendMessage(Component.text("[PRIVMSG] " + player.getUsername() + " -> You: " + msg));
|
|
||||||
player.sendMessage(Component.text("[PRIVMSG] " + "you -> " + player.getUsername() + ": " + msg));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,48 +1,51 @@
|
||||||
package de.kentoj.scrow.corevelocity.privmsg;
|
package de.kentoj.scrow.corevelocity.privmsg;
|
||||||
|
|
||||||
|
import com.leakyabstractions.result.api.Result;
|
||||||
|
import com.leakyabstractions.result.core.Results;
|
||||||
import com.velocitypowered.api.command.CommandSource;
|
import com.velocitypowered.api.command.CommandSource;
|
||||||
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 de.kentoj.kencommandapi.api.node.CommandNode;
|
|
||||||
import de.kentoj.kencommandapi.api.argument.CommandArgument;
|
import de.kentoj.kencommandapi.api.argument.CommandArgument;
|
||||||
import de.kentoj.kencommandapi.api.argument.types.StringArgumentType;
|
import de.kentoj.kencommandapi.api.argument.types.StringArgumentType;
|
||||||
import de.kentoj.kencommandapi.api.invocation.CommandContext;
|
import de.kentoj.kencommandapi.api.invocation.CommandContext;
|
||||||
import de.kentoj.kencommandapi.api.invocation.CommandExecutor;
|
import de.kentoj.kencommandapi.api.invocation.SyncCommandExecutor;
|
||||||
import com.leakyabstractions.result.api.Result;
|
import de.kentoj.kencommandapi.api.node.CommandNode;
|
||||||
import com.leakyabstractions.result.api.Results;
|
import de.kentoj.kencommandapi.api.node.RootCommandNode;
|
||||||
|
import de.kentoj.kencommandapi.api.platform.MessageStyle;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
public class ReplyCommand implements SyncCommandExecutor<CommandSource> {
|
||||||
|
|
||||||
public class ReplyCommand implements CommandExecutor<CommandSource> {
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final CommandNode<CommandSource> rootNode;
|
private final RootCommandNode<CommandSource> rootNode;
|
||||||
private final CommandArgument<CommandSource, String> msgArg;
|
private final CommandArgument<CommandSource, String> msgArg;
|
||||||
|
|
||||||
private final LastTargetCache cache;
|
private final LastTargetCache cache;
|
||||||
private final ProxyServer server;
|
private final ProxyServer server;
|
||||||
|
private final PrivMsgHandler privMsgHandler;
|
||||||
|
|
||||||
public ReplyCommand(ProxyServer server, LastTargetCache cache) {
|
public ReplyCommand(ProxyServer server, LastTargetCache cache, PrivMsgHandler privMsgHandler, MessageStyle style) {
|
||||||
this.cache = cache;
|
this.cache = cache;
|
||||||
this.server = server;
|
this.server = server;
|
||||||
|
this.privMsgHandler = privMsgHandler;
|
||||||
|
|
||||||
msgArg = CommandArgument.arg("msg", new StringArgumentType<>(true));
|
msgArg = CommandArgument.arg("msg", new StringArgumentType<>(true));
|
||||||
rootNode = CommandNode.node("reply", "r");
|
rootNode = CommandNode.rootNode(style, "reply", "r");
|
||||||
rootNode.setExecutor(this);
|
rootNode.setExecutor(this);
|
||||||
rootNode.addArgument(msgArg);
|
rootNode.addArgument(msgArg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<Result<Object,String>> execute(CommandContext<CommandSource> ctx) {
|
public Result<Object, String> executeSync(CommandContext<CommandSource> ctx) {
|
||||||
var sender = (Player) ctx.getSender();
|
var sender = (Player) ctx.getSender();
|
||||||
var targetId = cache.getLastTarget(sender.getUniqueId());
|
var targetId = cache.getLastTarget(sender.getUniqueId());
|
||||||
var target = server.getPlayer(targetId).orElse(null);
|
var target = server.getPlayer(targetId).orElse(null);
|
||||||
if (target == null) return Result.error("The player you last messaged is no longer online").toFuture();
|
|
||||||
|
|
||||||
var msg = ctx.getArg(msgArg);
|
var msg = ctx.getArg(msgArg);
|
||||||
|
|
||||||
|
if (target == null)
|
||||||
|
return Results.failure("The player you last messaged is no longer online");
|
||||||
cache.setLastTarget(sender.getUniqueId(), target.getUniqueId());
|
cache.setLastTarget(sender.getUniqueId(), target.getUniqueId());
|
||||||
PrivmsgHelper.handle(sender, target, msg);
|
privMsgHandler.handle(sender, target, msg);
|
||||||
return Result.success().toFuture();
|
return Results.success(new Object());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,13 @@
|
||||||
package de.kentoj.scrow.corevelocity.server;
|
package de.kentoj.scrow.corevelocity.server;
|
||||||
|
|
||||||
|
import com.leakyabstractions.result.core.Results;
|
||||||
import com.velocitypowered.api.proxy.ProxyServer;
|
import com.velocitypowered.api.proxy.ProxyServer;
|
||||||
import com.velocitypowered.api.proxy.server.ServerInfo;
|
import com.velocitypowered.api.proxy.server.ServerInfo;
|
||||||
import de.kentoj.scrowlib.messaging.MessageBroker;
|
import de.kentoj.scrowlib.messaging.MessageBroker;
|
||||||
import de.kentoj.scrowlib.messaging.respose.SafeResult;
|
import de.kentoj.scrowlib.messaging.SyncRequestHandler;
|
||||||
import de.kentoj.scrowlib.servermanager.InstanceManager;
|
|
||||||
import io.nats.client.Connection;
|
import io.nats.client.Connection;
|
||||||
import lombok.extern.java.Log;
|
import lombok.extern.java.Log;
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import reactor.core.publisher.Mono;
|
|
||||||
|
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
|
|
||||||
|
|
@ -17,39 +15,30 @@ import java.net.InetSocketAddress;
|
||||||
public class ServerRegisterWatchdog {
|
public class ServerRegisterWatchdog {
|
||||||
|
|
||||||
private final MessageBroker natsRepo;
|
private final MessageBroker natsRepo;
|
||||||
private final InstanceManager instanceManager;
|
|
||||||
private final ProxyServer server;
|
private final ProxyServer server;
|
||||||
|
|
||||||
public ServerRegisterWatchdog(Connection nats, InstanceManager instanceManager, ProxyServer server) {
|
public ServerRegisterWatchdog(Connection nats, ProxyServer server) {
|
||||||
this.natsRepo = new MessageBroker(nats);
|
this.natsRepo = new MessageBroker(nats);
|
||||||
this.instanceManager = instanceManager;
|
|
||||||
this.server = server;
|
this.server = server;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void listen() {
|
public void listen() {
|
||||||
natsRepo.subscribe("crown.set-state")
|
natsRepo.handle("event.instance.up", (SyncRequestHandler) doc -> {
|
||||||
.flatMap(ctx -> {
|
var handle = doc.getString("handle");
|
||||||
var state = ctx.getDocument().getString("state");
|
var port = doc.getInteger("port");
|
||||||
var handle = ctx.getDocument().getString("handle");
|
return Results.ofCallable(() -> {
|
||||||
return handleStateChange(ctx, state, handle)
|
server.registerServer(new ServerInfo(handle, new InetSocketAddress(port)));
|
||||||
.then(Mono.fromRunnable(() -> {
|
return new Document();
|
||||||
natsRepo.publishSafeResult(ctx.getMsg().getReplyTo(), SafeResult.wrap(new Document()));
|
}).mapFailure(Throwable::getMessage);
|
||||||
}));
|
});
|
||||||
})
|
|
||||||
.subscribe(null, e -> log.throwing(getClass().getName(), "listen", e));
|
|
||||||
}
|
|
||||||
|
|
||||||
private @NotNull Result<Object, String> handleStateChange(SubscriptionContext ctx, String state, String handle) {
|
natsRepo.handle("event.instance.down", (SyncRequestHandler) doc -> {
|
||||||
return switch (state) {
|
var handle = doc.getString("handle");
|
||||||
case "UP" -> instanceManager.getInfo(handle)
|
var port = doc.getInteger("port");
|
||||||
.doOnNext(instance ->
|
return Results.ofCallable(() -> {
|
||||||
server.registerServer(new ServerInfo(handle, new InetSocketAddress(instance.getPort()))))
|
server.unregisterServer(new ServerInfo(handle, new InetSocketAddress(port)));
|
||||||
.then();
|
return new Document();
|
||||||
case "DOWN" -> instanceManager.getInfo(handle)
|
}).mapFailure(Throwable::getMessage);
|
||||||
.doOnNext(instance ->
|
});
|
||||||
server.unregisterServer(new ServerInfo(handle, new InetSocketAddress(instance.getPort()))))
|
|
||||||
.then();
|
|
||||||
default -> Mono.empty();
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue