diff --git a/src/main/kotlin/su/plo/voice/discs/event/JukeboxEventListener.kt b/src/main/kotlin/su/plo/voice/discs/event/JukeboxEventListener.kt index d42c0d6..2c17540 100644 --- a/src/main/kotlin/su/plo/voice/discs/event/JukeboxEventListener.kt +++ b/src/main/kotlin/su/plo/voice/discs/event/JukeboxEventListener.kt @@ -1,8 +1,14 @@ package su.plo.voice.discs.event -import kotlinx.coroutines.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.cancelAndJoin +import kotlinx.coroutines.delay import kotlinx.coroutines.future.await +import kotlinx.coroutines.launch import net.kyori.adventure.text.TextComponent +import org.bukkit.Bukkit import org.bukkit.Location import org.bukkit.Material import org.bukkit.block.Block @@ -25,7 +31,14 @@ import su.plo.lib.api.server.world.ServerPos3d import su.plo.voice.api.server.player.VoicePlayer import su.plo.voice.discs.DiscsPlugin import su.plo.voice.discs.utils.SchedulerUtil.suspendSync -import su.plo.voice.discs.utils.extend.* +import su.plo.voice.discs.utils.extend.asJukebox +import su.plo.voice.discs.utils.extend.asVoicePlayer +import su.plo.voice.discs.utils.extend.customDiscIdentifier +import su.plo.voice.discs.utils.extend.getMinecraftVersionInt +import su.plo.voice.discs.utils.extend.isBeaconBaseBlock +import su.plo.voice.discs.utils.extend.isCustomDisc +import su.plo.voice.discs.utils.extend.isJukebox +import su.plo.voice.discs.utils.extend.stopPlayingWithUpdate class JukeboxEventListener( private val plugin: DiscsPlugin @@ -83,7 +96,12 @@ class JukeboxEventListener( val item = event.item?.takeIf { it.isCustomDisc(plugin) } ?: return - val voicePlayer = event.player.asVoicePlayer(plugin.voiceServer) ?: return + val player = event.player + .takeIf { + Bukkit.getServer().getMinecraftVersionInt() < 12100 || !it.isSneaking + } ?: return + + val voicePlayer = player.asVoicePlayer(plugin.voiceServer) ?: return if (!voicePlayer.instance.hasPermission("pv.addon.discs.play")) return @@ -181,6 +199,7 @@ class JukeboxEventListener( } plugin.addonConfig.distance.beaconLikeDistanceList[beaconLevel] } + false -> plugin.addonConfig.distance.jukeboxDistance } diff --git a/src/main/kotlin/su/plo/voice/discs/utils/extend/Server.kt b/src/main/kotlin/su/plo/voice/discs/utils/extend/Server.kt new file mode 100644 index 0000000..c499b07 --- /dev/null +++ b/src/main/kotlin/su/plo/voice/discs/utils/extend/Server.kt @@ -0,0 +1,20 @@ +package su.plo.voice.discs.utils.extend + +import org.bukkit.Bukkit +import org.bukkit.Server + +fun Server.getMinecraftVersionInt(): Int { + val versions = Bukkit.getVersion() + .substring(version.lastIndexOf(" ") + 1, version.length - 1) + .split(".") + .mapNotNull { it.toIntOrNull() } + .let { + listOf( + it.getOrNull(0) ?: 0, + it.getOrNull(1) ?: 0, + it.getOrNull(2) ?: 0 + ) + } + + return versions[0] * 10000 + versions[1] * 100 + versions[2] +} \ No newline at end of file