Skip to content

Commit 667affd

Browse files
committed
Per module bypass permissions
1 parent 2aace0d commit 667affd

10 files changed

Lines changed: 58 additions & 15 deletions

File tree

paper/src/main/java/io/wdsj/asw/bukkit/permission/PermissionsEnum.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@
55
*/
66
public enum PermissionsEnum {
77
BYPASS("bypass"),
8+
BYPASS_ALL("bypass.*"),
9+
BYPASS_CHAT("bypass.chat"),
10+
BYPASS_COMMAND("bypass.command"),
11+
BYPASS_BOOK("bypass.book"),
12+
BYPASS_SIGN("bypass.sign"),
13+
BYPASS_ANVIL("bypass.anvil"),
14+
BYPASS_ITEM("bypass.item"),
815
NOTICE("notice"),
916
UPDATE("update");
1017

paper/src/main/kotlin/io/wdsj/asw/bukkit/listener/AnvilListener.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.wdsj.asw.bukkit.listener
22

33
import io.wdsj.asw.bukkit.AdvancedSensitiveWords.sensitiveWordBs
4+
import io.wdsj.asw.bukkit.permission.PermissionsEnum
45
import io.wdsj.asw.bukkit.setting.PaperConfigurationService
56
import io.wdsj.asw.bukkit.setting.PluginMessages
67
import io.wdsj.asw.bukkit.setting.PluginSettings
@@ -28,7 +29,7 @@ class AnvilListener(private val configuration: PaperConfigurationService) : List
2829
if (event.rawSlot != 2) return
2930

3031
val player = event.whoClicked as? Player ?: return
31-
if (processingGuard.shouldSkipBasic(player)) return
32+
if (processingGuard.shouldSkipBasic(player, PermissionsEnum.BYPASS_ANVIL)) return
3233

3334
val outputItem = event.currentItem ?: return
3435
if (!outputItem.hasItemMeta()) return

paper/src/main/kotlin/io/wdsj/asw/bukkit/listener/BookListener.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.wdsj.asw.bukkit.listener
22

33
import io.wdsj.asw.bukkit.AdvancedSensitiveWords.sensitiveWordBs
4+
import io.wdsj.asw.bukkit.permission.PermissionsEnum
45
import io.wdsj.asw.bukkit.setting.PaperConfigurationService
56
import io.wdsj.asw.bukkit.setting.PluginMessages
67
import io.wdsj.asw.bukkit.setting.PluginSettings
@@ -27,7 +28,7 @@ class BookListener(private val configuration: PaperConfigurationService) : Liste
2728
if (!configuration.get(PluginSettings.ENABLE_BOOK_EDIT_CHECK)) return
2829

2930
val player = event.player
30-
if (processingGuard.shouldSkipBasic(player)) return
31+
if (processingGuard.shouldSkipBasic(player, PermissionsEnum.BYPASS_BOOK)) return
3132

3233
val startTime = System.currentTimeMillis()
3334
val bookMeta = event.newBookMeta

paper/src/main/kotlin/io/wdsj/asw/bukkit/listener/CommandListener.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package io.wdsj.asw.bukkit.listener
22

33
import io.wdsj.asw.bukkit.AdvancedSensitiveWords.sensitiveWordBs
44
import io.wdsj.asw.bukkit.listener.command.CommandArgumentRuleSet
5+
import io.wdsj.asw.bukkit.permission.PermissionsEnum
56
import io.wdsj.asw.bukkit.setting.PaperConfigurationService
67
import io.wdsj.asw.bukkit.setting.PluginMessages
78
import io.wdsj.asw.bukkit.setting.PluginSettings
@@ -27,7 +28,7 @@ class CommandListener(private val configuration: PaperConfigurationService) : Li
2728

2829
val originalCommand = preprocess(event.message)
2930
val player = event.player
30-
if (processingGuard.shouldSkip(player)) return
31+
if (processingGuard.shouldSkip(player, PermissionsEnum.BYPASS_COMMAND)) return
3132

3233
val selection = configuration.commandArgumentRules().select(originalCommand)
3334
if (!configuration.shouldInspectCommand(selection) || selection.segments().isEmpty()) return

paper/src/main/kotlin/io/wdsj/asw/bukkit/listener/PlayerItemListener.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.wdsj.asw.bukkit.listener
22

33
import io.wdsj.asw.bukkit.AdvancedSensitiveWords.sensitiveWordBs
4+
import io.wdsj.asw.bukkit.permission.PermissionsEnum
45
import io.wdsj.asw.bukkit.setting.PaperConfigurationService
56
import io.wdsj.asw.bukkit.setting.PluginMessages
67
import io.wdsj.asw.bukkit.setting.PluginSettings
@@ -31,7 +32,7 @@ class PlayerItemListener(private val configuration: PaperConfigurationService) :
3132
if (!configuration.get(PluginSettings.ENABLE_PLAYER_ITEM_CHECK)) return
3233

3334
val player = event.player
34-
if (processingGuard.shouldSkipBasic(player)) return
35+
if (processingGuard.shouldSkipBasic(player, PermissionsEnum.BYPASS_ITEM)) return
3536

3637
val item = player.inventory.getItem(event.newSlot) ?: return
3738
censorItemName(player, item, event)
@@ -42,7 +43,7 @@ class PlayerItemListener(private val configuration: PaperConfigurationService) :
4243
if (!configuration.get(PluginSettings.ENABLE_PLAYER_ITEM_CHECK)) return
4344

4445
val player = event.player
45-
if (processingGuard.shouldSkipBasic(player)) return
46+
if (processingGuard.shouldSkipBasic(player, PermissionsEnum.BYPASS_ITEM)) return
4647

4748
censorItemName(player, event.itemDrop.itemStack, event)
4849
}
@@ -52,7 +53,7 @@ class PlayerItemListener(private val configuration: PaperConfigurationService) :
5253
if (!configuration.get(PluginSettings.ENABLE_PLAYER_ITEM_CHECK)) return
5354

5455
val player = event.whoClicked as? Player ?: return
55-
if (processingGuard.shouldSkipBasic(player)) return
56+
if (processingGuard.shouldSkipBasic(player, PermissionsEnum.BYPASS_ITEM)) return
5657
if (event.clickedInventory?.type != InventoryType.PLAYER) return
5758

5859
val item = event.currentItem ?: return

paper/src/main/kotlin/io/wdsj/asw/bukkit/listener/SignListener.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.github.houbb.sensitive.word.api.IWordResult
44
import com.github.houbb.sensitive.word.support.result.WordResultHandlers
55
import io.wdsj.asw.bukkit.AdvancedSensitiveWords
66
import io.wdsj.asw.bukkit.AdvancedSensitiveWords.sensitiveWordBs
7+
import io.wdsj.asw.bukkit.permission.PermissionsEnum
78
import io.wdsj.asw.bukkit.setting.PaperConfigurationService
89
import io.wdsj.asw.bukkit.integration.packetevents.sign.SignFakeViewService
910
import io.wdsj.asw.bukkit.setting.PluginMessages
@@ -40,7 +41,7 @@ class SignListener(private val configuration: PaperConfigurationService) : Liste
4041
if (event.lines().isEmpty()) return
4142

4243
val player = event.player
43-
if (processingGuard.shouldSkipBasic(player)) return
44+
if (processingGuard.shouldSkipBasic(player, PermissionsEnum.BYPASS_SIGN)) return
4445

4546
val startTime = System.currentTimeMillis()
4647
val attemptedLines = event.lines().toList()

paper/src/main/kotlin/io/wdsj/asw/bukkit/listener/paper/PaperChatListener.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import io.wdsj.asw.bukkit.AdvancedSensitiveWords.sensitiveWordBs
55
import io.wdsj.asw.bukkit.ai.LlmChatDetectionService
66
import io.wdsj.asw.bukkit.integration.trchat.TrChatCompat
77
import io.wdsj.asw.bukkit.listener.abstraction.AbstractFakeMessageExecutor
8+
import io.wdsj.asw.bukkit.permission.PermissionsEnum
89
import io.wdsj.asw.bukkit.service.chat.antispam.ChatAntiSpamService
910
import io.wdsj.asw.bukkit.setting.PaperConfigurationService
1011
import io.wdsj.asw.bukkit.setting.PluginMessages
@@ -38,7 +39,7 @@ class PaperChatListener(
3839
if (!configuration.get(PluginSettings.ENABLE_CHAT_CHECK)) return
3940

4041
val player = event.player
41-
if (processingGuard.shouldSkip(player)) return
42+
if (processingGuard.shouldSkip(player, PermissionsEnum.BYPASS_CHAT)) return
4243

4344
val startTime = System.currentTimeMillis()
4445
val originalMessage = preprocess(event.message())

paper/src/main/kotlin/io/wdsj/asw/bukkit/util/PlayerProcessingGuard.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,16 @@ import io.wdsj.asw.bukkit.setting.PluginSettings
1010
import org.bukkit.entity.Player
1111

1212
class PlayerProcessingGuard(private val configuration: PaperConfigurationService) {
13-
fun shouldSkip(player: Player): Boolean {
14-
if (shouldSkipBasic(player)) return true
13+
fun shouldSkip(player: Player, bypassPermission: PermissionsEnum): Boolean {
14+
if (shouldSkipBasic(player, bypassPermission)) return true
1515
return isUnauthenticated(player)
1616
}
1717

18-
fun shouldSkipBasic(player: Player): Boolean {
18+
fun shouldSkipBasic(player: Player, bypassPermission: PermissionsEnum): Boolean {
1919
if (!isInitialized) return true
20-
return CachingPermTool.hasPermission(PermissionsEnum.BYPASS, player)
20+
return CachingPermTool.hasPermission(PermissionsEnum.BYPASS, player) ||
21+
CachingPermTool.hasPermission(PermissionsEnum.BYPASS_ALL, player) ||
22+
CachingPermTool.hasPermission(bypassPermission, player)
2123
}
2224

2325
private fun isUnauthenticated(player: Player): Boolean {

paper/src/main/kotlin/io/wdsj/asw/bukkit/util/Utils.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import io.wdsj.asw.bukkit.AdvancedSensitiveWords
44
import io.wdsj.asw.bukkit.setting.PluginSettings
55
import org.bukkit.Bukkit
66
import org.bukkit.entity.Player
7-
import java.util.*
87
import java.util.concurrent.atomic.AtomicLong
98

109
object Utils {
@@ -40,7 +39,7 @@ object Utils {
4039
return try {
4140
val url = className.replace(".", "/") + ".class"
4241
return Thread.currentThread().contextClassLoader.getResource(url) != null
43-
} catch (ignored: Throwable) {
42+
} catch (_: Throwable) {
4443
false
4544
}
4645
}

paper/src/main/resources/plugin.yml

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,20 @@ permissions:
2626
default: false
2727
children:
2828
advancedsensitivewords.bypass: true
29+
advancedsensitivewords.bypass.*: true
2930
advancedsensitivewords.notice: true
3031
advancedsensitivewords.update: true
3132
advancedsensitivewords.command.*: true
33+
advancedsensitivewords.bypass.*:
34+
description: Bypass all player-owned Advanced Sensitive Words filters.
35+
default: false
36+
children:
37+
advancedsensitivewords.bypass.chat: true
38+
advancedsensitivewords.bypass.command: true
39+
advancedsensitivewords.bypass.book: true
40+
advancedsensitivewords.bypass.sign: true
41+
advancedsensitivewords.bypass.anvil: true
42+
advancedsensitivewords.bypass.item: true
3243
advancedsensitivewords.command.*:
3344
description: All Advanced Sensitive Words management commands.
3445
default: false
@@ -47,7 +58,25 @@ permissions:
4758
advancedsensitivewords.command.player.punish: true
4859
advancedsensitivewords.command.ai.status: true
4960
advancedsensitivewords.bypass:
50-
description: Bypass the Advanced Sensitive Words filter.
61+
description: Global bypass for all player-owned Advanced Sensitive Words filters.
62+
default: false
63+
advancedsensitivewords.bypass.chat:
64+
description: Bypass chat, chat anti-spam, and chat LLM checks.
65+
default: false
66+
advancedsensitivewords.bypass.command:
67+
description: Bypass command argument checks.
68+
default: false
69+
advancedsensitivewords.bypass.book:
70+
description: Bypass book checks.
71+
default: false
72+
advancedsensitivewords.bypass.sign:
73+
description: Bypass sign checks.
74+
default: false
75+
advancedsensitivewords.bypass.anvil:
76+
description: Bypass anvil rename checks.
77+
default: false
78+
advancedsensitivewords.bypass.item:
79+
description: Bypass item name and lore checks.
5180
default: false
5281
advancedsensitivewords.notice:
5382
description: Retrieve the notice message when player violated.

0 commit comments

Comments
 (0)