Skip to content

Commit ee332af

Browse files
committed
feat: add prevent tab complete feature to bukkit, velocity, and bungee
1 parent e374401 commit ee332af

File tree

3 files changed

+119
-0
lines changed

3 files changed

+119
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package org.sayandev.sayanvanish.bukkit.feature.features.prevent
2+
3+
import org.bukkit.entity.Player
4+
import org.bukkit.event.EventHandler
5+
import org.bukkit.event.EventPriority
6+
import org.bukkit.event.block.BlockBreakEvent
7+
import org.bukkit.event.server.TabCompleteEvent
8+
import org.sayandev.sayanvanish.api.Permission
9+
import org.sayandev.sayanvanish.api.User
10+
import org.sayandev.sayanvanish.api.feature.RegisteredFeature
11+
import org.sayandev.sayanvanish.api.feature.category.FeatureCategories
12+
import org.sayandev.sayanvanish.bukkit.api.SayanVanishBukkitAPI
13+
import org.sayandev.sayanvanish.bukkit.api.SayanVanishBukkitAPI.Companion.getOrCreateUser
14+
import org.sayandev.sayanvanish.bukkit.api.SayanVanishBukkitAPI.Companion.user
15+
import org.sayandev.sayanvanish.bukkit.feature.ListenedFeature
16+
import org.sayandev.stickynote.lib.spongepowered.configurate.objectmapping.ConfigSerializable
17+
18+
@RegisteredFeature
19+
@ConfigSerializable
20+
class FeaturePreventTabComplete: ListenedFeature("prevent_tab_complete", category = FeatureCategories.PREVENTION) {
21+
22+
@EventHandler(priority = EventPriority.HIGHEST)
23+
private fun onTabComplete(event: TabCompleteEvent) {
24+
if (!isActive()) return
25+
val player = event.sender as? Player ?: return
26+
val user = player.getOrCreateUser()
27+
val vanishedUsers = SayanVanishBukkitAPI.getInstance().getVanishedUsers()
28+
if (!user.hasPermission(Permission.VANISH)) {
29+
event.completions
30+
.removeIf { completion -> vanishedUsers.map(User::username).contains(completion) }
31+
return
32+
}
33+
34+
event.completions.removeIf { completion ->
35+
vanishedUsers
36+
.filter { vanishedUser -> vanishedUser.vanishLevel > user.vanishLevel }
37+
.map(User::username).contains(completion)
38+
}
39+
}
40+
41+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package org.sayandev.sayanvanish.bungeecord.feature.features.prevent
2+
3+
import net.md_5.bungee.api.connection.ProxiedPlayer
4+
import net.md_5.bungee.api.event.TabCompleteEvent
5+
import net.md_5.bungee.event.EventHandler
6+
import net.md_5.bungee.event.EventPriority
7+
import org.sayandev.sayanvanish.api.Permission
8+
import org.sayandev.sayanvanish.api.User
9+
import org.sayandev.sayanvanish.api.feature.RegisteredFeature
10+
import org.sayandev.sayanvanish.api.feature.category.FeatureCategories
11+
import org.sayandev.sayanvanish.bungeecord.api.SayanVanishBungeeAPI
12+
import org.sayandev.sayanvanish.bungeecord.api.SayanVanishBungeeAPI.Companion.getOrCreateUser
13+
import org.sayandev.sayanvanish.bungeecord.feature.ListenedFeature
14+
import org.sayandev.stickynote.lib.spongepowered.configurate.objectmapping.ConfigSerializable
15+
16+
@RegisteredFeature
17+
@ConfigSerializable
18+
class FeaturePreventTabComplete: ListenedFeature("prevent_tab_complete", category = FeatureCategories.PREVENTION) {
19+
20+
@EventHandler(priority = EventPriority.HIGHEST)
21+
private fun onTabComplete(event: TabCompleteEvent) {
22+
if (!isActive()) return
23+
val player = event.sender as? ProxiedPlayer ?: return
24+
val user = player.getOrCreateUser()
25+
val vanishedUsers = SayanVanishBungeeAPI.getInstance().getVanishedUsers()
26+
if (!user.hasPermission(Permission.VANISH)) {
27+
event.suggestions
28+
.removeIf { suggestion -> vanishedUsers.map(User::username).contains(suggestion) }
29+
return
30+
}
31+
32+
event.suggestions.removeIf { suggestion ->
33+
vanishedUsers
34+
.filter { vanishedUser -> vanishedUser.vanishLevel > user.vanishLevel }
35+
.map(User::username).contains(suggestion)
36+
}
37+
}
38+
39+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package org.sayandev.sayanvanish.velocity.feature.features.prevent
2+
3+
import com.velocitypowered.api.event.PostOrder
4+
import com.velocitypowered.api.event.Subscribe
5+
import com.velocitypowered.api.event.player.TabCompleteEvent
6+
import com.velocitypowered.api.proxy.Player
7+
import org.sayandev.sayanvanish.api.Permission
8+
import org.sayandev.sayanvanish.api.User
9+
import org.sayandev.sayanvanish.api.feature.RegisteredFeature
10+
import org.sayandev.sayanvanish.api.feature.category.FeatureCategories
11+
import org.sayandev.sayanvanish.velocity.api.SayanVanishVelocityAPI
12+
import org.sayandev.sayanvanish.velocity.api.SayanVanishVelocityAPI.Companion.getOrCreateUser
13+
import org.sayandev.sayanvanish.velocity.feature.ListenedFeature
14+
import org.sayandev.stickynote.lib.spongepowered.configurate.objectmapping.ConfigSerializable
15+
16+
@RegisteredFeature
17+
@ConfigSerializable
18+
class FeaturePreventTabComplete: ListenedFeature("prevent_tab_complete", category = FeatureCategories.PREVENTION) {
19+
20+
@Subscribe(order = PostOrder.LAST)
21+
fun onTabComplete(event: TabCompleteEvent) {
22+
if (!isActive()) return
23+
val player = event.player ?: return
24+
val user = player.getOrCreateUser()
25+
val vanishedUsers = SayanVanishVelocityAPI.getInstance().getVanishedUsers()
26+
if (!user.hasPermission(Permission.VANISH)) {
27+
event.suggestions
28+
.removeIf { suggestion -> vanishedUsers.map(User::username).contains(suggestion) }
29+
return
30+
}
31+
32+
event.suggestions.removeIf { suggestion ->
33+
vanishedUsers
34+
.filter { vanishedUser -> vanishedUser.vanishLevel > user.vanishLevel }
35+
.map(User::username).contains(suggestion)
36+
}
37+
}
38+
39+
}

0 commit comments

Comments
 (0)