Skip to content

Commit 205cdc4

Browse files
committed
Now opped players have all permissions.
Simplified JsonConfiguration in PermissionBase.kt. Removed redundant logger messages. Simplified permissions command to /permissions or /perm. Added compatibility with future versions of Cooldowns module. Added CurseForge link for `/perm about` command. Signed-off-by: Pavel Erokhin (MairwunNx) <[email protected]>
1 parent 8f63f9b commit 205cdc4

File tree

8 files changed

+65
-52
lines changed

8 files changed

+65
-52
lines changed

src/main/kotlin/com/mairwunnx/projectessentials/permissions/EntryPoint.kt

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package com.mairwunnx.projectessentials.permissions
22

3-
import com.mairwunnx.projectessentialscore.EssBase
43
import com.mairwunnx.projectessentials.permissions.commands.PermissionsCommand
54
import com.mairwunnx.projectessentials.permissions.permissions.PermissionBase
5+
import com.mairwunnx.projectessentials.permissions.permissions.PermissionsAPI
6+
import com.mairwunnx.projectessentialscore.EssBase
67
import com.mojang.brigadier.CommandDispatcher
78
import net.minecraft.command.CommandSource
89
import net.minecraftforge.common.MinecraftForge
@@ -32,6 +33,7 @@ internal class EntryPoint : EssBase() {
3233
internal fun onServerStarting(it: FMLServerStartingEvent) {
3334
logger.info("$modName starting mod loading ...")
3435
registerCommands(it.server.commandManager.dispatcher)
36+
PermissionsAPI.oppedPlayers.addAll(it.server.playerList.oppedPlayerNames)
3537
}
3638

3739
private fun registerCommands(
@@ -44,8 +46,8 @@ internal class EntryPoint : EssBase() {
4446
@Suppress("UNUSED_PARAMETER")
4547
@SubscribeEvent
4648
internal fun onServerStopping(it: FMLServerStoppingEvent) {
47-
logger.info("Shutting down $modName mod ...")
48-
logger.info(" - Saving permission users data ...")
49+
logger.info("Shutting down $modName mod")
50+
logger.info("Saving permission users data")
4951
PermissionBase.saveData()
5052
}
5153

src/main/kotlin/com/mairwunnx/projectessentials/permissions/commands/PermissionsCommand.kt

+38-27
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package com.mairwunnx.projectessentials.permissions.commands
22

3+
import com.mairwunnx.projectessentials.permissions.EntryPoint
4+
import com.mairwunnx.projectessentials.permissions.permissions.PermissionBase
5+
import com.mairwunnx.projectessentials.permissions.permissions.PermissionsAPI
36
import com.mairwunnx.projectessentialscooldown.essentials.CommandsAliases
47
import com.mairwunnx.projectessentialscore.extensions.isPlayerSender
58
import com.mairwunnx.projectessentialscore.extensions.playerName
69
import com.mairwunnx.projectessentialscore.extensions.sendMsg
710
import com.mairwunnx.projectessentialscore.helpers.PERMISSION_LEVEL
8-
import com.mairwunnx.projectessentials.permissions.EntryPoint
9-
import com.mairwunnx.projectessentials.permissions.permissions.PermissionBase
10-
import com.mairwunnx.projectessentials.permissions.permissions.PermissionsAPI
1111
import com.mojang.brigadier.CommandDispatcher
1212
import com.mojang.brigadier.arguments.StringArgumentType
1313
import com.mojang.brigadier.builder.LiteralArgumentBuilder
@@ -19,37 +19,44 @@ import org.apache.logging.log4j.LogManager
1919

2020
@Suppress("DuplicatedCode")
2121
internal object PermissionsCommand {
22-
private val aliases = listOf("essentials", "ess")
22+
private val aliases = listOf("permissions", "permission", "perm")
2323
private val logger = LogManager.getLogger()
2424

2525
internal fun register(dispatcher: CommandDispatcher<CommandSource>) {
26-
assignAliases()
26+
tryAssignAliases()
2727
aliases.forEach { command ->
2828
dispatcher.register(
29-
literal<CommandSource>(command).then(
30-
buildAboutCommand()
31-
.then(buildGroupCommand())
32-
.then(buildUserCommand())
33-
.then(buildReloadCommand())
34-
.then(buildSaveCommand())
35-
)
29+
literal<CommandSource>(command)
30+
.then(buildAboutCommand())
31+
.then(buildGroupCommand())
32+
.then(buildUserCommand())
33+
.then(buildReloadCommand())
34+
.then(buildSaveCommand())
3635
)
3736
}
3837
}
3938

40-
private fun assignAliases() {
39+
private fun tryAssignAliases() {
4140
try {
4241
Class.forName(
4342
"com.mairwunnx.projectessentialscooldown.essentials.CommandsAliases"
4443
)
45-
CommandsAliases.aliases["essentials"] = aliases.toMutableList()
44+
CommandsAliases.aliases["permissions"] = aliases.toMutableList()
4645
} catch (_: ClassNotFoundException) {
46+
try {
47+
Class.forName(
48+
"com.mairwunnx.projectessentials.cooldown.essentials.CommandsAliases"
49+
)
50+
CommandsAliases.aliases["permissions"] = aliases.toMutableList()
51+
} catch (_: ClassNotFoundException) {
52+
// ignored
53+
}
4754
// ignored
4855
}
4956
}
5057

5158
private fun buildAboutCommand(): LiteralArgumentBuilder<CommandSource> {
52-
return Commands.literal("permissions").executes {
59+
return Commands.literal("about").executes {
5360
return@executes aboutCommandExecute(it)
5461
}
5562
}
@@ -69,14 +76,15 @@ internal object PermissionsCommand {
6976
EntryPoint.modInstance.modTargetForge,
7077
EntryPoint.modInstance.modTargetMC,
7178
EntryPoint.modInstance.modSources,
72-
EntryPoint.modInstance.modTelegram
79+
EntryPoint.modInstance.modTelegram,
80+
EntryPoint.modInstance.modCurseForge
7381
)
7482
} else {
7583
sendMsg("permissions", c.source, "perm.about.restricted")
7684
logger.info(
7785
PERMISSION_LEVEL
7886
.replace("%0", c.playerName())
79-
.replace("%1", "essentials permissions")
87+
.replace("%1", "permissions")
8088
)
8189
}
8290
} else {
@@ -87,6 +95,7 @@ internal object PermissionsCommand {
8795
logger.info("Target Minecraft version: ${EntryPoint.modInstance.modTargetMC}")
8896
logger.info("Source code: ${EntryPoint.modInstance.modSources}")
8997
logger.info("Telegram chat: ${EntryPoint.modInstance.modTelegram}")
98+
logger.info("CurseForge: ${EntryPoint.modInstance.modCurseForge}")
9099
}
91100
return 0
92101
}
@@ -108,13 +117,15 @@ internal object PermissionsCommand {
108117
logger.info(
109118
PERMISSION_LEVEL
110119
.replace("%0", c.playerName())
111-
.replace("%1", "essentials permissions reload")
120+
.replace("%1", "permissions reload")
112121
)
113122
0
114123
}
115124
else -> {
116125
PermissionBase.loadData()
117-
assignAliases()
126+
PermissionsAPI.oppedPlayers.clear()
127+
PermissionsAPI.oppedPlayers.addAll(c.source.server.playerList.oppedPlayerNames)
128+
tryAssignAliases()
118129
when {
119130
c.isPlayerSender() -> sendMsg(
120131
"permissions", c.source, "perm.reload.success"
@@ -143,7 +154,7 @@ internal object PermissionsCommand {
143154
logger.info(
144155
PERMISSION_LEVEL
145156
.replace("%0", c.playerName())
146-
.replace("%1", "essentials permissions save")
157+
.replace("%1", "permissions save")
147158
)
148159
0
149160
}
@@ -202,7 +213,7 @@ internal object PermissionsCommand {
202213
logger.info(
203214
PERMISSION_LEVEL
204215
.replace("%0", c.playerName())
205-
.replace("%1", "essentials permissions group [...]")
216+
.replace("%1", "permissions group [...]")
206217
)
207218
return 0
208219
}
@@ -223,7 +234,7 @@ internal object PermissionsCommand {
223234
logger.info(
224235
PERMISSION_LEVEL
225236
.replace("%0", c.playerName())
226-
.replace("%1", "essentials permissions group [...]")
237+
.replace("%1", "permissions group [...]")
227238
)
228239
return 0
229240
}
@@ -252,7 +263,7 @@ internal object PermissionsCommand {
252263
logger.info(
253264
PERMISSION_LEVEL
254265
.replace("%0", c.playerName())
255-
.replace("%1", "essentials permissions group [...]")
266+
.replace("%1", "permissions group [...]")
256267
)
257268
return 0
258269
}
@@ -326,7 +337,7 @@ internal object PermissionsCommand {
326337
logger.info(
327338
PERMISSION_LEVEL
328339
.replace("%0", c.playerName())
329-
.replace("%1", "essentials permissions user [...]")
340+
.replace("%1", "permissions user [...]")
330341
)
331342
return 0
332343
}
@@ -349,7 +360,7 @@ internal object PermissionsCommand {
349360
logger.info(
350361
PERMISSION_LEVEL
351362
.replace("%0", c.playerName())
352-
.replace("%1", "essentials permissions user [...]")
363+
.replace("%1", "permissions user [...]")
353364
)
354365
return 0
355366
}
@@ -378,7 +389,7 @@ internal object PermissionsCommand {
378389
logger.info(
379390
PERMISSION_LEVEL
380391
.replace("%0", c.playerName())
381-
.replace("%1", "essentials permissions user [...]")
392+
.replace("%1", "permissions user [...]")
382393
)
383394
return 0
384395
}
@@ -418,7 +429,7 @@ internal object PermissionsCommand {
418429
logger.info(
419430
PERMISSION_LEVEL
420431
.replace("%0", c.playerName())
421-
.replace("%1", "essentials permissions user [...]")
432+
.replace("%1", "permissions user [...]")
422433
)
423434
return 0
424435
}

src/main/kotlin/com/mairwunnx/projectessentials/permissions/permissions/PermissionBase.kt

+8-18
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,18 @@ internal object PermissionBase {
1313
internal var permissionData = PermissionModel()
1414
private val json = Json(
1515
JsonConfiguration(
16-
encodeDefaults = true,
17-
strictMode = true,
18-
unquoted = false,
16+
strictMode = false,
1917
allowStructuredMapKeys = true,
20-
prettyPrint = true,
21-
useArrayPolymorphism = false
18+
prettyPrint = true
2219
)
2320
)
2421

2522
internal fun loadData() {
2623
val permissionConfig = MOD_CONFIG_FOLDER + File.separator + "permissions.json"
27-
logger.info(" - loading user permissions data ...")
28-
logger.debug(" - setup json configuration for parsing ...")
24+
logger.info("Loading user permissions data ...")
25+
logger.debug("Setup json configuration for parsing ...")
2926
if (!File(permissionConfig).exists()) {
30-
logger.warn(" - permission config not exist! creating it now!")
27+
logger.warn("Permission config not exist! creating it now!")
3128
createConfigDirs(MOD_CONFIG_FOLDER)
3229
val defaultConfig = json.stringify(
3330
PermissionModel.serializer(),
@@ -36,24 +33,17 @@ internal object PermissionBase {
3633
File(permissionConfig).writeText(defaultConfig)
3734
}
3835
val permConfigRaw = File(permissionConfig).readText()
39-
permissionData = Json.parse(PermissionModel.serializer(), permConfigRaw)
36+
permissionData = json.parse(PermissionModel.serializer(), permConfigRaw)
4037
logger.info("*** PermissionsAPI by Project Essentials!")
4138
logger.info(" - loaded groups (${permissionData.groups.size})")
4239
permissionData.groups.forEach {
4340
logger.info(" - name: ${it.name}; nodes: ${it.permissions.size}")
4441
}
45-
logger.info(" - loaded users (${permissionData.users.size}): first 17 users!")
46-
val maxUsers = if (permissionData.users.size - 1 >= 16) 16 else permissionData.users.size -1
47-
permissionData.users.slice(0..maxUsers).forEach {
48-
logger.info(
49-
" - name: ${it.nickname}; group: ${it.group}; nodes: ${it.permissions.size}"
50-
)
51-
}
42+
logger.info(" - loaded users (${permissionData.users.size})")
5243
}
5344

5445
internal fun saveData() {
5546
val permissionConfig = MOD_CONFIG_FOLDER + File.separator + "permissions.json"
56-
logger.info(" - saving user permissions data ...")
5747
createConfigDirs(MOD_CONFIG_FOLDER)
5848
val permConfig = json.stringify(
5949
PermissionModel.serializer(),
@@ -64,7 +54,7 @@ internal object PermissionBase {
6454

6555
@Suppress("SameParameterValue")
6656
private fun createConfigDirs(path: String) {
67-
logger.info(" - creating config directory for user data ($path)")
57+
logger.info("Creating config directory for user data ($path)")
6858
val configDirectory = File(path)
6959
if (!configDirectory.exists()) configDirectory.mkdirs()
7060
}

src/main/kotlin/com/mairwunnx/projectessentials/permissions/permissions/PermissionsAPI.kt

+10
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ import com.mairwunnx.projectessentialscore.extensions.empty
88
*/
99
@Suppress("unused", "MemberVisibilityCanBePrivate")
1010
object PermissionsAPI {
11+
/**
12+
* Contain all opped players, for advanced permission checking.
13+
* @since 1.14.4-1.0.0.0
14+
*/
15+
var oppedPlayers: MutableList<String> = mutableListOf()
16+
1117
/**
1218
* @param playerNickName nickname of target player.
1319
* @return instance of the class of the rights group
@@ -148,6 +154,10 @@ object PermissionsAPI {
148154
}
149155
val groupPerms = getAllGroupPermissions(groupName)
150156
val userPerms = getUserPermissions(playerNickName)
157+
158+
// if player has operator right, then return ALL permissions.
159+
if (playerNickName in oppedPlayers) return listOf("*")
160+
151161
return listOf(defaultPerms, groupPerms, userPerms).flatten()
152162
}
153163

src/main/resources/assets/projectessentialspermissions/lang/de_de.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"project_essentials_permissions.perm.about.out": "§6%s\n§cVersion: §7%s\n§cMaintainer: §7%s\n§cForge Zielversion: §7%s\n§Minecraft Zielversion: §7%s\n§cSource Code: §7%s§7\n§cTelegram Chat: §7%s",
2+
"project_essentials_permissions.perm.about.out": "§6%s\n§cVersion: §7%s\n§cMaintainer: §7%s\n§cForge Zielversion: §7%s\n§Minecraft Zielversion: §7%s\n§cSource Code: §7%s§7\n§cTelegram Chat: §7%s\n§cCurseForge: §7%s",
33
"project_essentials_permissions.perm.about.restricted": "§cDu §7bist nicht berechtigt §cum den Befehl /essentials auszuführen.",
44
"project_essentials_permissions.perm.reload.restricted": "§cDu §7bist nicht berechtigt §cum die Berechtigungskonfigurationen neu zu laden.",
55
"project_essentials_permissions.perm.reload.success": "§6Berechtigungskonfigurationen §7neu geladen§6.",

src/main/resources/assets/projectessentialspermissions/lang/en_us.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"project_essentials_permissions.perm.about.out": " §6%s\n§cVersion: §7%s\n§cMaintainer: §7%s\n§cTarget Forge version: §7%s\n§cTarget Minecraft version: §7%s\n§cSource code: §7%s§7\n§cTelegram chat: §7%s",
2+
"project_essentials_permissions.perm.about.out": " §6%s\n§cVersion: §7%s\n§cMaintainer: §7%s\n§cTarget Forge version: §7%s\n§cTarget Minecraft version: §7%s\n§cSource code: §7%s§7\n§cTelegram chat: §7%s\n§cCurseForge: §7%s",
33
"project_essentials_permissions.perm.about.restricted": "§cYou §7don't have permission §cto execute /essentials permission command.",
44
"project_essentials_permissions.perm.reload.restricted": "§cYou §7don't have permission §cto reload permission configuration.",
55
"project_essentials_permissions.perm.reload.success": "§6Permission configuration §7reloaded§6.",

src/main/resources/assets/projectessentialspermissions/lang/ru_ru.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"project_essentials_permissions.perm.about.out": " §6%s\n§cВерсия: §7%s\n§cСопровождающий: §7%s\n§cНацеленная Forge версия: §7%s\n§cНацеленная Minecraft версия: §7%s\n§cИсходный код: §7%s§7\n§cTelegram чат: §7%s",
2+
"project_essentials_permissions.perm.about.out": " §6%s\n§cВерсия: §7%s\n§cСопровождающий: §7%s\n§cНацеленная Forge версия: §7%s\n§cНацеленная Minecraft версия: §7%s\n§cИсходный код: §7%s§7\n§cTelegram чат: §7%s\n§cCurseForge: §7%s",
33
"project_essentials_permissions.perm.about.restricted": "§cУ вас §7нет прав §cна выполнение /essentials permission команды.",
44
"project_essentials_permissions.perm.reload.restricted": "§cУ вас §7нет прав §cна перезагрузку конфигурации прав.",
55
"project_essentials_permissions.perm.reload.success": "§6Конфигурация прав §7перезагружена§6.",

src/main/resources/assets/projectessentialspermissions/lang/sr_rs.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"project_essentials_permissions.perm.about.out": " §6%s\n§cVerzija: §7%s\n§cAdmin: §7%s\n§cCiljana Forge verzija: §7%s\n§cCiljana Minecraft verzija: §7%s\n§cIzvorni kod: §7%s§7\n§cTelegram čet: §7%s",
2+
"project_essentials_permissions.perm.about.out": " §6%s\n§cVerzija: §7%s\n§cAdmin: §7%s\n§cCiljana Forge verzija: §7%s\n§cCiljana Minecraft verzija: §7%s\n§cIzvorni kod: §7%s§7\n§cTelegram čet: §7%s\n§cCurseForge: §7%s",
33
"project_essentials_permissions.perm.about.restricted": "§cNemate §7prava §cda pokrenete /essentials komandu konfiguracije prava.",
44
"project_essentials_permissions.perm.reload.restricted": "§cNemate §7prava §cda učitate konfiguracije prava.",
55
"project_essentials_permissions.perm.reload.success": "§6Konfiguracija prava §7učitana§6.",

0 commit comments

Comments
 (0)