1+ package app.simplecloud.plugin.proxy.shared.handler.command
2+
3+ import app.simplecloud.plugin.proxy.shared.ProxyPlugin
4+ import app.simplecloud.plugin.proxy.shared.handler.MotdLayoutHandler
5+ import kotlinx.coroutines.runBlocking
6+ import org.incendo.cloud.CommandManager
7+ import org.incendo.cloud.context.CommandContext
8+ import org.incendo.cloud.parser.standard.StringParser.stringParser
9+ import org.incendo.cloud.suggestion.Suggestion
10+ import org.incendo.cloud.suggestion.SuggestionProvider
11+ import java.util.concurrent.CompletableFuture
12+
13+ class ProxyCommandHandler <C : CommandSender >(
14+ val commandManager : CommandManager <C >,
15+ val proxyPlugin : ProxyPlugin
16+ ) {
17+
18+ fun loadCommands () {
19+ loadToggleMaintenanceCommand()
20+ loadActivateMaintenanceCommand()
21+ loadDeactivateMaintenanceCommand()
22+
23+ loadLayoutMaintenanceSetCommand()
24+ loadLayoutNonMaintenanceSetCommand()
25+ }
26+
27+ private fun loadToggleMaintenanceCommand () {
28+ commandManager.command(
29+ commandManager.commandBuilder(" proxy" )
30+ .literal(" maintenance" )
31+ .literal(" toggle" )
32+ .permission(" simplecloud.command.proxy.maintenance.toggle" )
33+ .handler { context: CommandContext <C > ->
34+ runBlocking {
35+ val mode = ! proxyPlugin.cloudControllerHandler.getGroupProperties(" maintenance" ).toBoolean()
36+ setProxyMaintenanceMode(mode)
37+ context.sender().sendMessage(proxyPlugin.messagesConfiguration.commandMessage.toggleMaintenance)
38+ }
39+ }
40+ .build()
41+ )
42+ }
43+
44+ private fun loadActivateMaintenanceCommand () {
45+ commandManager.command(
46+ commandManager.commandBuilder(" proxy" )
47+ .literal(" maintenance" )
48+ .literal(" activate" )
49+ .permission(" simplecloud.command.proxy.maintenance.activate" )
50+ .handler { context: CommandContext <C > ->
51+ runBlocking {
52+ if (! proxyPlugin.cloudControllerHandler.getGroupProperties(" maintenance" ).toBoolean()) {
53+ setProxyMaintenanceMode(true )
54+ context.sender().sendMessage(proxyPlugin.messagesConfiguration.commandMessage.activateMaintenance)
55+ } else {
56+ context.sender().sendMessage(proxyPlugin.messagesConfiguration.commandMessage.maintenanceAlreadyActivated)
57+ }
58+ }
59+ }
60+ .build()
61+ )
62+ }
63+
64+ private fun loadDeactivateMaintenanceCommand () {
65+ commandManager.command(
66+ commandManager.commandBuilder(" proxy" )
67+ .literal(" maintenance" )
68+ .literal(" deactivate" )
69+ .permission(" simplecloud.command.proxy.maintenance.deactivate" )
70+ .handler { context: CommandContext <C > ->
71+ runBlocking {
72+ if (proxyPlugin.cloudControllerHandler.getGroupProperties(" maintenance" ).toBoolean()) {
73+ setProxyMaintenanceMode(false )
74+ context.sender().sendMessage(proxyPlugin.messagesConfiguration.commandMessage.deactivateMaintenance)
75+ } else {
76+ context.sender().sendMessage(proxyPlugin.messagesConfiguration.commandMessage.maintenanceAlreadyDeactivated)
77+ }
78+ }
79+ }
80+ .build()
81+ )
82+ }
83+
84+ private fun loadLayoutMaintenanceSetCommand () {
85+ commandManager.command(
86+ commandManager.commandBuilder(" proxy" )
87+ .literal(" layout" )
88+ .literal(" maintenance" )
89+ .literal(" set" )
90+ .required(
91+ " layout" ,
92+ stringParser()
93+ ) { _, _ ->
94+ val suggestionList = proxyPlugin.motdLayoutHandler.getAllMaintenanceLayouts().map { Suggestion .suggestion(it) }
95+ CompletableFuture .completedFuture(suggestionList)
96+ }
97+ .permission(" simplecloud.command.proxy.layout.maintenance.set" )
98+ .handler { context: CommandContext <C > ->
99+ val layout = context.get<String >(" layout" )
100+
101+ if (! proxyPlugin.motdLayoutHandler.getAllMaintenanceLayouts().contains(layout)) {
102+ context.sender().sendMessage(proxyPlugin.messagesConfiguration.commandMessage.layoutNotFound)
103+ return @handler
104+ }
105+
106+ if (MotdLayoutHandler .CURRENT_MAINTENANCE_LAYOUT_KEY == layout) {
107+ context.sender().sendMessage(proxyPlugin.messagesConfiguration.commandMessage.layoutMaintenanceAlreadySet)
108+ return @handler
109+ }
110+
111+ runBlocking {
112+ proxyPlugin.cloudControllerHandler.setServicePropertiesOnAllGroupServices(MotdLayoutHandler .CURRENT_MAINTENANCE_LAYOUT_KEY , layout)
113+ proxyPlugin.cloudControllerHandler.setGroupProperties(MotdLayoutHandler .CURRENT_MAINTENANCE_LAYOUT_KEY , layout)
114+
115+ context.sender().sendMessage(proxyPlugin.messagesConfiguration.commandMessage.layoutMaintenanceSet)
116+ }
117+ }
118+ .build()
119+ )
120+ }
121+
122+ private fun loadLayoutNonMaintenanceSetCommand () {
123+ commandManager.command(
124+ commandManager.commandBuilder(" proxy" )
125+ .literal(" layout" )
126+ .literal(" nonmaintenance" )
127+ .literal(" set" )
128+ .required(
129+ " layout" ,
130+ stringParser()
131+ ) { _, _ ->
132+ val suggestionList = proxyPlugin.motdLayoutHandler.getAllNoneMaintenanceLayouts().map { Suggestion .suggestion(it) }
133+ CompletableFuture .completedFuture(suggestionList)
134+ }
135+ .permission(" simplecloud.command.proxy.layout.nonmaintenance.set" )
136+ .handler { context: CommandContext <C > ->
137+ val layout = context.get<String >(" layout" )
138+
139+ if (! proxyPlugin.motdLayoutHandler.getAllNoneMaintenanceLayouts().contains(layout)) {
140+ context.sender().sendMessage(proxyPlugin.messagesConfiguration.commandMessage.layoutNotFound)
141+ return @handler
142+ }
143+
144+ if (MotdLayoutHandler .CURRENT_LAYOUT_KEY == layout) {
145+ context.sender().sendMessage(proxyPlugin.messagesConfiguration.commandMessage.layoutNonMaintenanceAlreadySet)
146+ return @handler
147+ }
148+
149+ runBlocking {
150+ proxyPlugin.cloudControllerHandler.setServicePropertiesOnAllGroupServices(MotdLayoutHandler .CURRENT_LAYOUT_KEY , layout)
151+ proxyPlugin.cloudControllerHandler.setGroupProperties(MotdLayoutHandler .CURRENT_LAYOUT_KEY , layout)
152+
153+ context.sender().sendMessage(proxyPlugin.messagesConfiguration.commandMessage.layoutNonMaintenanceSet)
154+ }
155+ }
156+ .build()
157+ )
158+ }
159+
160+ private suspend fun setProxyMaintenanceMode (mode : Boolean ) {
161+ this .proxyPlugin.cloudControllerHandler.setGroupProperties(" maintenance" , mode.toString())
162+ this .proxyPlugin.cloudControllerHandler.setServicePropertiesOnAllGroupServices(" maintenance" , mode.toString())
163+ }
164+ }
0 commit comments