Skip to content

Commit 1329417

Browse files
committed
Done work on first version. (preview).
1 parent 698afc1 commit 1329417

File tree

12 files changed

+487
-72
lines changed

12 files changed

+487
-72
lines changed

src/main/kotlin/com/mairwunnx/projectessentialspermissions/EntryPoint.kt

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
package com.mairwunnx.projectessentialspermissions
22

3-
import com.mairwunnx.projectessentialspermissions.commands.EssPermissionsCommand
3+
import com.mairwunnx.projectessentialspermissions.commands.PermissionsCommand
44
import com.mairwunnx.projectessentialspermissions.helpers.validateForgeVersion
55
import com.mairwunnx.projectessentialspermissions.permissions.PermissionBase
66
import com.mojang.brigadier.CommandDispatcher
7-
import kotlinx.serialization.ImplicitReflectionSerializer
8-
import kotlinx.serialization.UnstableDefault
97
import net.minecraft.command.CommandSource
108
import net.minecraftforge.common.MinecraftForge
119
import net.minecraftforge.eventbus.api.SubscribeEvent
@@ -16,22 +14,18 @@ import org.apache.logging.log4j.LogManager
1614

1715
internal const val MOD_ID = "project_essentials_permissions"
1816
internal const val MOD_NAME = "Project Essentials Permissions"
19-
internal const val MOD_PART = "Project Essentials"
17+
internal const val PART_OF_MOD = "Project Essentials"
2018
internal const val MOD_VERSION = "1.14.4-0.1.0.0"
21-
internal const val MOD_DESCRIPTION =
22-
"additional module for Essentials; Just controlling player permissions"
2319
internal const val MOD_MAINTAINER = "MairwunNx (Pavel Erokhin)"
2420
internal const val MOD_TARGET_FORGE = "28.0.X"
2521
internal const val MOD_TARGET_FORGE_REGEX = "^28\\.0\\..\\d{1,}|28\\.0\\.[\\d]\$"
2622
internal const val MOD_TARGET_MC = "1.14.4"
2723
internal const val MOD_SOURCES_LINK = "https://github.com/MairwunNx/ProjectEssentials-Permissions/"
2824
internal const val MOD_TELEGRAM_LINK = "https://t.me/minecraftforge"
2925

30-
@UnstableDefault
31-
@ImplicitReflectionSerializer
3226
@Suppress("unused")
3327
@Mod(MOD_ID)
34-
class EntryPoint {
28+
internal class EntryPoint {
3529
private val logger = LogManager.getLogger()
3630

3731
init {
@@ -55,7 +49,7 @@ class EntryPoint {
5549
}
5650

5751
@SubscribeEvent
58-
fun onServerStarting(it: FMLServerStartingEvent) {
52+
internal fun onServerStarting(it: FMLServerStartingEvent) {
5953
logger.info("$MOD_NAME starting mod loading ...")
6054
registerCommands(it.server.commandManager.dispatcher)
6155
}
@@ -64,14 +58,14 @@ class EntryPoint {
6458
cmdDispatcher: CommandDispatcher<CommandSource>
6559
) {
6660
logger.info("Command registering is starting ...")
67-
EssPermissionsCommand.register(cmdDispatcher)
61+
PermissionsCommand.register(cmdDispatcher)
6862
}
6963

7064
@Suppress("UNUSED_PARAMETER")
7165
@SubscribeEvent
72-
fun onServerStopping(it: FMLServerStoppingEvent) {
66+
internal fun onServerStopping(it: FMLServerStoppingEvent) {
7367
logger.info("Shutting down $MOD_NAME mod ...")
74-
logger.info(" - Saving modification user data ...")
68+
logger.info(" - Saving permission users data ...")
7569
PermissionBase.saveData()
7670
}
7771
}
Lines changed: 334 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,334 @@
1+
package com.mairwunnx.projectessentialspermissions.commands
2+
3+
import com.mairwunnx.projectessentialspermissions.*
4+
import com.mairwunnx.projectessentialspermissions.extensions.isPlayerSender
5+
import com.mairwunnx.projectessentialspermissions.extensions.playerName
6+
import com.mairwunnx.projectessentialspermissions.extensions.sendMsg
7+
import com.mairwunnx.projectessentialspermissions.permissions.PermissionBase
8+
import com.mairwunnx.projectessentialspermissions.permissions.PermissionsAPI
9+
import com.mojang.brigadier.CommandDispatcher
10+
import com.mojang.brigadier.arguments.StringArgumentType
11+
import com.mojang.brigadier.builder.LiteralArgumentBuilder
12+
import com.mojang.brigadier.builder.LiteralArgumentBuilder.literal
13+
import com.mojang.brigadier.context.CommandContext
14+
import net.minecraft.command.CommandSource
15+
import net.minecraft.command.Commands
16+
import org.apache.logging.log4j.LogManager
17+
18+
internal object PermissionsCommand {
19+
private val aliases = arrayOf("essentials", "ess")
20+
private val logger = LogManager.getLogger()
21+
22+
internal fun register(dispatcher: CommandDispatcher<CommandSource>) {
23+
aliases.forEach { command ->
24+
dispatcher.register(
25+
literal<CommandSource>(command).then(
26+
buildAboutCommand()
27+
.then(buildGroupCommand())
28+
.then(buildUserCommand())
29+
.then(buildReloadCommand())
30+
.then(buildSaveCommand())
31+
)
32+
)
33+
}
34+
}
35+
36+
private fun buildAboutCommand(): LiteralArgumentBuilder<CommandSource> {
37+
return Commands.literal("permissions").executes {
38+
return@executes aboutCommandExecute(it)
39+
}
40+
}
41+
42+
private fun aboutCommandExecute(
43+
c: CommandContext<CommandSource>
44+
): Int {
45+
if (c.isPlayerSender()) {
46+
if (PermissionsAPI.hasPermission(c.playerName(), "ess.perm")) {
47+
sendMsg(
48+
c.source,
49+
"perm.about.out",
50+
MOD_NAME,
51+
MOD_VERSION,
52+
MOD_MAINTAINER,
53+
MOD_TARGET_FORGE,
54+
MOD_TARGET_MC,
55+
MOD_SOURCES_LINK,
56+
MOD_TELEGRAM_LINK
57+
)
58+
} else {
59+
sendMsg(c.source, "perm.about.restricted")
60+
}
61+
} else {
62+
logger.info(" $MOD_NAME")
63+
logger.info("Version: $MOD_VERSION")
64+
logger.info("Maintainer: $MOD_MAINTAINER")
65+
logger.info("Target Forge version: $MOD_TARGET_FORGE")
66+
logger.info("Target Minecraft version: $MOD_TARGET_MC")
67+
logger.info("Source code: $MOD_SOURCES_LINK")
68+
logger.info("Telegram chat: $MOD_TELEGRAM_LINK")
69+
}
70+
return 0
71+
}
72+
73+
private fun buildReloadCommand(): LiteralArgumentBuilder<CommandSource> {
74+
return Commands.literal("reload").executes {
75+
return@executes reloadCommandExecute(it)
76+
}
77+
}
78+
79+
private fun reloadCommandExecute(
80+
c: CommandContext<CommandSource>
81+
): Int {
82+
return when {
83+
c.isPlayerSender() && !PermissionsAPI.hasPermission(
84+
c.playerName(), "perm.reload"
85+
) -> {
86+
sendMsg(c.source, "perm.reload.restricted")
87+
0
88+
}
89+
else -> {
90+
PermissionBase.loadData()
91+
when {
92+
c.isPlayerSender() -> sendMsg(c.source, "perm.reload.success")
93+
else -> logger.info("Permission configuration reloaded.")
94+
}
95+
0
96+
}
97+
}
98+
}
99+
100+
private fun buildSaveCommand(): LiteralArgumentBuilder<CommandSource> {
101+
return Commands.literal("save").executes {
102+
return@executes saveCommandExecute(it)
103+
}
104+
}
105+
106+
private fun saveCommandExecute(
107+
c: CommandContext<CommandSource>
108+
): Int {
109+
return when {
110+
c.isPlayerSender() && !PermissionsAPI.hasPermission(
111+
c.source.asPlayer().name.string, "ess.perm.save"
112+
) -> {
113+
sendMsg(c.source, "perm.save.restricted")
114+
0
115+
}
116+
else -> {
117+
PermissionBase.saveData()
118+
when {
119+
c.isPlayerSender() -> sendMsg(c.source, "perm.save.success")
120+
else -> logger.info("Permission configuration saved.")
121+
}
122+
0
123+
}
124+
}
125+
}
126+
127+
private fun buildGroupCommand(): LiteralArgumentBuilder<CommandSource> {
128+
return Commands.literal("group").executes {
129+
return@executes groupCommandExecute(it)
130+
}.then(
131+
Commands.argument(
132+
"name", StringArgumentType.string()
133+
).executes {
134+
return@executes groupCommandExecute(it)
135+
}.then(
136+
Commands.literal("set").executes {
137+
return@executes groupCommandExecute(it)
138+
}.then(
139+
Commands.argument(
140+
"node",
141+
StringArgumentType.string()
142+
).executes {
143+
return@executes groupCommandSetExecute(it)
144+
}
145+
)
146+
).then(
147+
Commands.literal("remove").executes {
148+
return@executes groupCommandExecute(it)
149+
}.then(
150+
Commands.argument(
151+
"node",
152+
StringArgumentType.string()
153+
).executes {
154+
return@executes groupCommandRemoveExecute(it)
155+
}
156+
)
157+
)
158+
)
159+
}
160+
161+
private fun buildUserCommand(): LiteralArgumentBuilder<CommandSource> {
162+
return Commands.literal("user").executes {
163+
return@executes userCommandExecute(it)
164+
}.then(
165+
Commands.argument(
166+
"nickname", StringArgumentType.string()
167+
).executes {
168+
return@executes userCommandExecute(it)
169+
}.then(
170+
Commands.literal("set").executes {
171+
return@executes userCommandExecute(it)
172+
}.then(
173+
Commands.argument(
174+
"node",
175+
StringArgumentType.string()
176+
).executes {
177+
return@executes userCommandSetExecute(it)
178+
}
179+
).then(
180+
Commands.literal("group").executes {
181+
return@executes userCommandSetGroupExecute(it)
182+
}.then(
183+
Commands.argument(
184+
"groupName",
185+
StringArgumentType.string()
186+
).executes {
187+
return@executes userCommandSetGroupExecute(it)
188+
}
189+
)
190+
)
191+
).then(
192+
Commands.literal("remove").executes {
193+
return@executes userCommandExecute(it)
194+
}.then(
195+
Commands.argument(
196+
"node",
197+
StringArgumentType.string()
198+
).executes {
199+
return@executes userCommandRemoveExecute(it)
200+
}
201+
)
202+
)
203+
)
204+
}
205+
206+
private fun groupCommandExecute(c: CommandContext<CommandSource>): Int {
207+
if (c.isPlayerSender() &&
208+
!PermissionsAPI.hasPermission(c.playerName(), "ess.perm.group")
209+
) {
210+
sendMsg(c.source, "perm.group.restricted")
211+
return 0
212+
}
213+
when {
214+
c.isPlayerSender() -> sendMsg(c.source, "perm.group.example")
215+
else -> logger.info("Usage example: /ess permissions group <group> [set|remove] <node>")
216+
}
217+
return 0
218+
}
219+
220+
private fun userCommandExecute(c: CommandContext<CommandSource>): Int {
221+
if (c.isPlayerSender() &&
222+
!PermissionsAPI.hasPermission(c.playerName(), "ess.perm.user")
223+
) {
224+
sendMsg(c.source, "perm.user.restricted")
225+
return 0
226+
}
227+
when {
228+
c.isPlayerSender() -> sendMsg(c.source, "perm.user.example")
229+
else -> logger.info(
230+
"Usage example: /ess permissions user <nickname> [[set]|remove] [<node>] [[group]] [[<group name>]]"
231+
)
232+
}
233+
return 0
234+
}
235+
236+
private fun groupCommandSetExecute(c: CommandContext<CommandSource>): Int {
237+
if (c.isPlayerSender() &&
238+
!PermissionsAPI.hasPermission(c.playerName(), "ess.perm.group")
239+
) {
240+
sendMsg(c.source, "perm.group.restricted")
241+
return 0
242+
}
243+
val targetGroup = StringArgumentType.getString(c, "name")
244+
val targetNode = StringArgumentType.getString(c, "node")
245+
PermissionsAPI.setGroupPermissionNode(targetGroup, targetNode)
246+
if (c.isPlayerSender()) {
247+
sendMsg(c.source, "perm.group.success", targetNode, targetGroup)
248+
} else {
249+
logger.info("Permission $targetNode added to group $targetGroup.")
250+
}
251+
return 0
252+
}
253+
254+
private fun userCommandSetExecute(c: CommandContext<CommandSource>): Int {
255+
if (c.isPlayerSender() &&
256+
!PermissionsAPI.hasPermission(c.playerName(), "ess.perm.user")
257+
) {
258+
sendMsg(c.source, "perm.user.restricted")
259+
return 0
260+
}
261+
val targetUser = StringArgumentType.getString(c, "nickname")
262+
val targetNode = StringArgumentType.getString(c, "node")
263+
PermissionsAPI.setUserPermissionNode(targetUser, targetNode)
264+
if (c.isPlayerSender()) {
265+
sendMsg(c.source, "perm.user.success", targetNode, targetUser)
266+
} else {
267+
logger.info("Permission $targetNode added for user $targetUser.")
268+
}
269+
return 0
270+
}
271+
272+
private fun userCommandSetGroupExecute(c: CommandContext<CommandSource>): Int {
273+
if (c.isPlayerSender() &&
274+
!PermissionsAPI.hasPermission(c.playerName(), "ess.perm.user")
275+
) {
276+
sendMsg(c.source, "perm.user.restricted")
277+
return 0
278+
}
279+
val targetUser = StringArgumentType.getString(c, "nickname")
280+
val targetGroup = StringArgumentType.getString(c, "groupName")
281+
if (targetGroup.isNullOrEmpty()) {
282+
when {
283+
c.isPlayerSender() -> sendMsg(c.source, "perm.user.group.example")
284+
else -> logger.info(
285+
"Usage example: /ess permissions user <nickname> set group <group name>"
286+
)
287+
}
288+
return 0
289+
}
290+
PermissionsAPI.setUserPermissionGroup(targetUser, targetGroup)
291+
if (c.isPlayerSender()) {
292+
sendMsg(c.source, "perm.user.group.success", targetGroup, targetUser)
293+
} else {
294+
logger.info("Installed new group $targetGroup for user $targetUser.")
295+
}
296+
return 0
297+
}
298+
299+
private fun groupCommandRemoveExecute(c: CommandContext<CommandSource>): Int {
300+
if (c.isPlayerSender() &&
301+
!PermissionsAPI.hasPermission(c.playerName(), "ess.perm.group")
302+
) {
303+
sendMsg(c.source, "perm.group.restricted")
304+
return 0
305+
}
306+
val targetGroup = StringArgumentType.getString(c, "name")
307+
val targetNode = StringArgumentType.getString(c, "node")
308+
PermissionsAPI.removeGroupPermission(targetGroup, targetNode)
309+
if (c.isPlayerSender()) {
310+
sendMsg(c.source, "perm.group.remove.success", targetNode, targetGroup)
311+
} else {
312+
logger.info("Permission $targetNode removed from group $targetGroup.")
313+
}
314+
return 0
315+
}
316+
317+
private fun userCommandRemoveExecute(c: CommandContext<CommandSource>): Int {
318+
if (c.isPlayerSender() &&
319+
!PermissionsAPI.hasPermission(c.playerName(), "ess.perm.user")
320+
) {
321+
sendMsg(c.source, "perm.user.restricted")
322+
return 0
323+
}
324+
val targetUser = StringArgumentType.getString(c, "nickname")
325+
val targetNode = StringArgumentType.getString(c, "node")
326+
PermissionsAPI.setUserPermissionNode(targetUser, targetNode)
327+
if (c.isPlayerSender()) {
328+
sendMsg(c.source, "perm.user.remove.success", targetNode, targetUser)
329+
} else {
330+
logger.info("Permission $targetNode removed from user $targetUser")
331+
}
332+
return 0
333+
}
334+
}

0 commit comments

Comments
 (0)