Skip to content

Commit 896a3e3

Browse files
committed
Fixed using command block parameters as mention (@e etc).
Fixed quick reply on message when common chat enabled. `isCommonChat` function now is public. Simplified JsonConfiguration in ChatModelUtils.kt. ChatModelBase renamed to ChatModelUtils.kt. Signed-off-by: Pavel Erokhin (MairwunNx) <MairwunNx@gmail.com>
1 parent 7805f2c commit 896a3e3

File tree

4 files changed

+80
-46
lines changed

4 files changed

+80
-46
lines changed

src/main/kotlin/com/mairwunnx/projectessentials/chat/ChatUtils.kt

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
package com.mairwunnx.projectessentials.chat
22

3-
import com.mairwunnx.projectessentials.chat.models.ChatModelBase
3+
import com.mairwunnx.projectessentials.chat.EntryPoint.Companion.hasPermission
4+
import com.mairwunnx.projectessentials.chat.models.ChatModelUtils
45
import com.mairwunnx.projectessentialscore.extensions.empty
56
import com.mairwunnx.projectessentialscore.extensions.sendMsg
6-
import com.mairwunnx.projectessentialspermissions.permissions.PermissionsAPI
77
import net.minecraft.util.Tuple
88
import net.minecraftforge.event.ServerChatEvent
99

1010
object ChatUtils {
1111
fun processBlockedWords(event: ServerChatEvent): Tuple<Boolean, String> {
12-
val blockedWords = ChatModelBase.chatModel.moderation.blockedWords
13-
val blockedWordsMask = ChatModelBase.chatModel.moderation.blockedWordsMask
14-
val modifyBlockedWords = ChatModelBase.chatModel.moderation.modifyBlockedWords
12+
val blockedWords = ChatModelUtils.chatModel.moderation.blockedWords
13+
val blockedWordsMask = ChatModelUtils.chatModel.moderation.blockedWordsMask
14+
val modifyBlockedWords = ChatModelUtils.chatModel.moderation.modifyBlockedWords
1515

1616
var fixedMessage = event.message
1717

@@ -20,8 +20,8 @@ object ChatUtils {
2020
fixedMessage.toLowerCase().matches(Regex(it, RegexOption.IGNORE_CASE)) ||
2121
fixedMessage.toLowerCase().contains(it, true)
2222
) {
23-
if (PermissionsAPI.hasPermission(
24-
event.username, "ess.chat.blockedwords.bypass"
23+
if (hasPermission(
24+
event.player, "ess.chat.blockedwords.bypass", 3
2525
)
2626
) return Tuple(true, fixedMessage)
2727

@@ -47,12 +47,12 @@ object ChatUtils {
4747
}
4848

4949
fun processBlockedChars(event: ServerChatEvent): Boolean {
50-
if (PermissionsAPI.hasPermission(
51-
event.username, "ess.chat.blockedchars.bypass"
50+
if (hasPermission(
51+
event.player, "ess.chat.blockedchars.bypass", 3
5252
)
5353
) return true
5454

55-
val blockedChars = ChatModelBase.chatModel.moderation.blockedChars
55+
val blockedChars = ChatModelUtils.chatModel.moderation.blockedChars
5656
blockedChars.forEach {
5757
if (event.message.contains(it)) {
5858
sendMsg(
@@ -67,12 +67,12 @@ object ChatUtils {
6767
}
6868

6969
fun processMessageLength(event: ServerChatEvent): Boolean {
70-
if (PermissionsAPI.hasPermission(
71-
event.username, "ess.chat.messagelength.bypass"
70+
if (hasPermission(
71+
event.player, "ess.chat.messagelength.bypass", 4
7272
)
7373
) return true
7474

75-
val maxLength = ChatModelBase.chatModel.moderation.maxMessageLength
75+
val maxLength = ChatModelUtils.chatModel.moderation.maxMessageLength
7676
if (event.message.length > maxLength) {
7777
sendMsg(
7878
"chat", event.player.commandSource, "chat.message_maxlength"
@@ -84,13 +84,13 @@ object ChatUtils {
8484

8585
fun isGlobalChat(event: ServerChatEvent): Boolean = event.message.startsWith('!')
8686

87-
private fun isCommonChat(): Boolean = !ChatModelBase.chatModel.messaging.enableRangedChat
87+
fun isCommonChat(): Boolean = !ChatModelUtils.chatModel.messaging.enableRangedChat
8888

8989
fun getMessagePattern(event: ServerChatEvent): String {
9090
return when {
91-
!ChatModelBase.chatModel.messaging.enableRangedChat -> ChatModelBase.chatModel.messaging.messageCommonPattern
92-
isGlobalChat(event) -> ChatModelBase.chatModel.messaging.messageGlobalPattern
93-
else -> ChatModelBase.chatModel.messaging.messageLocalPattern
91+
!ChatModelUtils.chatModel.messaging.enableRangedChat -> ChatModelUtils.chatModel.messaging.messageCommonPattern
92+
isGlobalChat(event) -> ChatModelUtils.chatModel.messaging.messageGlobalPattern
93+
else -> ChatModelUtils.chatModel.messaging.messageLocalPattern
9494
}
9595
}
9696

@@ -99,19 +99,19 @@ object ChatUtils {
9999
when {
100100
isCommonChat() -> {
101101
val targetVariable = messageRegex.find(
102-
ChatModelBase.chatModel.messaging.messageCommonPattern
102+
ChatModelUtils.chatModel.messaging.messageCommonPattern
103103
)
104104
return getMessageVariable(targetVariable!!, "§f")
105105
}
106106
else -> return if (isGlobalChat(event)) {
107107
val targetVariable = messageRegex.find(
108-
ChatModelBase.chatModel.messaging.messageGlobalPattern
108+
ChatModelUtils.chatModel.messaging.messageGlobalPattern
109109
)
110110

111111
getMessageVariable(targetVariable!!, "§f")
112112
} else {
113113
val targetVariable = messageRegex.find(
114-
ChatModelBase.chatModel.messaging.messageLocalPattern
114+
ChatModelUtils.chatModel.messaging.messageLocalPattern
115115
)
116116
getMessageVariable(targetVariable!!, "§7§o")
117117
}

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

Lines changed: 56 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package com.mairwunnx.projectessentials.chat
22

3-
import com.mairwunnx.projectessentials.chat.models.ChatModelBase
3+
import com.mairwunnx.projectessentials.chat.models.ChatModelUtils
44
import com.mairwunnx.projectessentialscore.EssBase
5+
import com.mairwunnx.projectessentialscore.extensions.empty
56
import com.mairwunnx.projectessentialscore.extensions.sendMsg
67
import com.mairwunnx.projectessentialspermissions.permissions.PermissionsAPI
8+
import net.minecraft.entity.player.ServerPlayerEntity
79
import net.minecraft.util.math.AxisAlignedBB
810
import net.minecraft.util.text.TextComponentUtils
911
import net.minecraft.util.text.event.ClickEvent
@@ -26,36 +28,57 @@ class EntryPoint : EssBase() {
2628
validateForgeVersion()
2729
logger.debug("Register event bus for $modName mod ...")
2830
MinecraftForge.EVENT_BUS.register(this)
29-
ChatModelBase.loadData()
31+
loadAdditionalModules()
32+
ChatModelUtils.loadData()
33+
}
34+
35+
private fun loadAdditionalModules() {
36+
try {
37+
Class.forName(
38+
"com.mairwunnx.projectessentials.permissions.permissions.PermissionsAPI"
39+
)
40+
permissionsInstalled = true
41+
logger.info("Permissions module found!")
42+
} catch (_: ClassNotFoundException) {
43+
// ignored
44+
}
3045
}
3146

3247
companion object {
3348
lateinit var modInstance: EntryPoint
49+
var permissionsInstalled: Boolean = false
50+
51+
fun hasPermission(player: ServerPlayerEntity, node: String, opLevel: Int = 0): Boolean =
52+
if (permissionsInstalled) {
53+
PermissionsAPI.hasPermission(player.name.string, node)
54+
} else {
55+
player.server.opPermissionLevel >= opLevel
56+
}
3457
}
3558

3659
@Suppress("UNUSED_PARAMETER")
3760
@SubscribeEvent
3861
fun onServerStopping(it: FMLServerStoppingEvent) {
3962
logger.info("Shutting down $modName mod ...")
40-
ChatModelBase.saveData()
63+
ChatModelUtils.saveData()
4164
}
4265

4366
@SubscribeEvent
4467
fun onChatMessage(event: ServerChatEvent) {
45-
if (!ChatModelBase.chatModel.messaging.chatEnabled) {
68+
if (!ChatModelUtils.chatModel.messaging.chatEnabled) {
4669
sendMsg("chat", event.player.commandSource, "chat.disabled")
4770
event.isCanceled = true
4871
return
4972
}
5073

51-
if (!PermissionsAPI.hasPermission(event.username, "ess.chat")) {
74+
if (!hasPermission(event.player, "ess.chat")) {
5275
sendMsg("chat", event.player.commandSource, "chat.restricted")
5376
event.isCanceled = true
5477
return
5578
}
5679

5780
if (event.message.contains("&")) {
58-
if (PermissionsAPI.hasPermission(event.username, "ess.chat.color")) {
81+
if (hasPermission(event.player, "ess.chat.color", 2)) {
5982
event.component = TextComponentUtils.toTextComponent {
6083
event.message.replace("&", "§")
6184
}
@@ -91,12 +114,22 @@ class EntryPoint : EssBase() {
91114
"%player", event.username
92115
)
93116
}.style.setClickEvent(
94-
ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "!@${event.username} ")
117+
if (ChatUtils.isCommonChat()) {
118+
ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "@${event.username} ")
119+
} else {
120+
ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "!@${event.username} ")
121+
}
95122
)
96123

124+
val group =
125+
when {
126+
permissionsInstalled -> PermissionsAPI.getUserGroup(event.username).name
127+
else -> String.empty
128+
}
129+
97130
event.component = TextComponentUtils.toTextComponent {
98131
ChatUtils.getMessagePattern(event).replace(
99-
"%group", PermissionsAPI.getUserGroup(event.username).name
132+
"%group", group
100133
).replace(
101134
"%player", event.username
102135
).replace(
@@ -111,11 +144,18 @@ class EntryPoint : EssBase() {
111144
)
112145
}.setStyle(nicknameComponent)
113146

114-
val mentionSettings = ChatModelBase.chatModel.mentions
147+
val mentionSettings = ChatModelUtils.chatModel.mentions
115148
val mentions = mutableListOf<String>()
116149
if (mentionSettings.mentionsEnabled) {
117150
Regex("@\\S[a-zA-Z0-9]*").findAll(event.component.formattedText).forEach {
118-
mentions.add(it.value)
151+
if (it.value != "@e" &&
152+
it.value != "@a" &&
153+
it.value != "@p" &&
154+
it.value != "@r" &&
155+
it.value != "@s"
156+
) {
157+
mentions.add(it.value)
158+
}
119159
}
120160
}
121161
val anFormat = mentionSettings.mentionAtFormat.replace("&", "§")
@@ -149,12 +189,12 @@ class EntryPoint : EssBase() {
149189
if (!ChatUtils.isGlobalChat(event)) {
150190
val players = event.player.serverWorld.getEntitiesWithinAABB(
151191
event.player.entity.javaClass, AxisAlignedBB(
152-
event.player.posX - ChatModelBase.chatModel.messaging.localChatRange / 2,
153-
event.player.posY - ChatModelBase.chatModel.messaging.localChatRange / 2,
154-
event.player.posZ - ChatModelBase.chatModel.messaging.localChatRange / 2,
155-
event.player.posX + ChatModelBase.chatModel.messaging.localChatRange / 2,
156-
event.player.posY + ChatModelBase.chatModel.messaging.localChatRange / 2,
157-
event.player.posZ + ChatModelBase.chatModel.messaging.localChatRange / 2
192+
event.player.posX - ChatModelUtils.chatModel.messaging.localChatRange / 2,
193+
event.player.posY - ChatModelUtils.chatModel.messaging.localChatRange / 2,
194+
event.player.posZ - ChatModelUtils.chatModel.messaging.localChatRange / 2,
195+
event.player.posX + ChatModelUtils.chatModel.messaging.localChatRange / 2,
196+
event.player.posY + ChatModelUtils.chatModel.messaging.localChatRange / 2,
197+
event.player.posZ + ChatModelUtils.chatModel.messaging.localChatRange / 2
158198
)
159199
)
160200
players.forEach {

src/main/kotlin/com/mairwunnx/projectessentials/chat/models/ChatModel.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@ data class ChatModel(
3131
data class Mentions(
3232
var mentionsEnabled: Boolean = true,
3333
var mentionInActionBar: Boolean = true,
34-
/**
35-
* todo: move to language resources.
36-
*/
3734
var mentionMessage: String = "&7you are mentioned by &l&7%player&7 player, in the chat.",
3835
var mentionAtFormat: String = "&c",
3936
var mentionNameFormat: String = "&b"

src/main/kotlin/com/mairwunnx/projectessentials/chat/models/ChatModelBase.kt renamed to src/main/kotlin/com/mairwunnx/projectessentials/chat/models/ChatModelUtils.kt

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,15 @@ import org.apache.logging.log4j.LogManager
88
import java.io.File
99

1010
@UseExperimental(UnstableDefault::class)
11-
object ChatModelBase {
11+
object ChatModelUtils {
1212
private val warpsConfig = MOD_CONFIG_FOLDER + File.separator + "chat.json"
1313
private val logger = LogManager.getLogger()
1414
var chatModel = ChatModel()
1515
private val json = Json(
1616
JsonConfiguration(
17-
encodeDefaults = true,
18-
strictMode = true,
19-
unquoted = false,
17+
strictMode = false,
2018
allowStructuredMapKeys = true,
21-
prettyPrint = true,
22-
useArrayPolymorphism = false
19+
prettyPrint = true
2320
)
2421
)
2522

@@ -35,7 +32,7 @@ object ChatModelBase {
3532
File(warpsConfig).writeText(defaultConfig)
3633
}
3734
val warpsConfigRaw = File(warpsConfig).readText()
38-
chatModel = Json.parse(ChatModel.serializer(), warpsConfigRaw)
35+
chatModel = json.parse(ChatModel.serializer(), warpsConfigRaw)
3936
logger.info("Chat configuration loading done")
4037
}
4138

0 commit comments

Comments
 (0)