@@ -19,21 +19,29 @@ import de.randombyte.commandutils.execute.whenonline.PlayerJoinListener
1919import de.randombyte.commandutils.executeonserverstartup.ServerStartupListener
2020import de.randombyte.commandutils.service.CommandUtilsService
2121import de.randombyte.commandutils.service.CommandUtilsServiceImpl
22+ import de.randombyte.kosp.extensions.getPlayer
23+ import de.randombyte.kosp.extensions.sendTo
2224import de.randombyte.kosp.extensions.toText
25+ import org.apache.commons.lang3.RandomUtils
2326import org.bstats.sponge.Metrics2
2427import org.slf4j.Logger
2528import org.spongepowered.api.Sponge
2629import org.spongepowered.api.command.args.GenericArguments.*
2730import org.spongepowered.api.command.spec.CommandSpec
2831import org.spongepowered.api.config.ConfigDir
2932import org.spongepowered.api.data.type.HandTypes
33+ import org.spongepowered.api.entity.living.player.Player
3034import org.spongepowered.api.event.Listener
3135import org.spongepowered.api.event.game.GameReloadEvent
3236import org.spongepowered.api.event.game.state.GameInitializationEvent
3337import org.spongepowered.api.event.game.state.GamePostInitializationEvent
38+ import org.spongepowered.api.event.network.ClientConnectionEvent
3439import org.spongepowered.api.plugin.Dependency
3540import org.spongepowered.api.plugin.Plugin
41+ import org.spongepowered.api.scheduler.Task
3642import java.nio.file.Path
43+ import java.util.*
44+ import java.util.concurrent.TimeUnit
3745
3846@Plugin(id = ID ,
3947 name = NAME ,
@@ -82,6 +90,13 @@ class CommandUtils @Inject constructor(
8290 ConfigUpdater .from1_8(configAccessor, logger)
8391 configAccessor.reloadAll()
8492 registerCommands()
93+
94+ if (needsMotivationalSpeech()) {
95+ Task .builder()
96+ .delay(RandomUtils .nextLong(80 , 130 ), TimeUnit .SECONDS )
97+ .execute { -> Messages .motivationalSpeech.forEach { it.sendTo(Sponge .getServer().console) } }
98+ .submit(this )
99+ }
85100 }
86101
87102 @Listener
@@ -252,4 +267,25 @@ class CommandUtils @Inject constructor(
252267
253268 .build(), " commandutils" , " cmdutils" , " cu" )
254269 }
270+
271+ val metricsNoteSent = mutableSetOf<UUID >()
272+
273+ @Listener
274+ fun onPlayerJoin (event : ClientConnectionEvent .Join ) {
275+ val uuid = event.targetEntity.uniqueId
276+ if (needsMotivationalSpeech(event.targetEntity)) {
277+ Task .builder()
278+ .delay(RandomUtils .nextLong(10 , 50 ), TimeUnit .SECONDS )
279+ .execute { ->
280+ val player = uuid.getPlayer() ? : return @execute
281+ metricsNoteSent + = uuid
282+ Messages .motivationalSpeech.forEach { it.sendTo(player) }
283+ }
284+ .submit(this )
285+ }
286+ }
287+
288+ private fun needsMotivationalSpeech (player : Player ? = null) = configAccessor.general.get().enableMetricsMessages &&
289+ ! Sponge .getMetricsConfigManager().areMetricsEnabled(this ) &&
290+ ((player == null ) || player.uniqueId !in metricsNoteSent && player.hasPermission(" nucleus.mute.base" )) // also passes OPs without Nucleus
255291}
0 commit comments