贺兰兰
本帖最后由 贺兰兰 于 2021-4-30 21:53 编辑

(别问我为啥不发到隔壁版,因为这个代码很久以前写的,而且实现真的太脏了,完全就是写出来娱乐的,所以大家也图个乐就好,仅供参考)
↓之所以要发是因为刚才整理仓库突然看到这个觉得挺有意思就分享出来了
代码源: https://github.com/shaokeyibb/Ci ... features/BlinkMe.kt

  1. package kim.minecraft.citycore.features

  2. import io.izzel.taboolib.internal.xseries.messages.ActionBar
  3. import kim.minecraft.citycore.CityCore
  4. import kim.minecraft.citycore.player.Player
  5. import kim.minecraft.citycore.player.PlayerManager.toCCPlayer
  6. import kim.minecraft.citycore.utils.HologramTags
  7. import kim.minecraft.citycore.utils.storage.SettingsStorage
  8. import org.bukkit.event.EventHandler
  9. import org.bukkit.event.Listener
  10. import org.bukkit.event.player.PlayerJoinEvent
  11. import org.bukkit.event.player.PlayerQuitEvent
  12. import org.bukkit.potion.PotionEffect
  13. import org.bukkit.potion.PotionEffectType
  14. import org.bukkit.scheduler.BukkitRunnable
  15. import kotlin.random.Random

  16. object BlinkMe : Listener {

  17.     private val list = mutableMapOf<Player, Action>()

  18.     @EventHandler
  19.     fun onRegister(e: PlayerJoinEvent) {
  20.         if (e.player.toCCPlayer() == null) return
  21.         list[e.player.toCCPlayer()!!] = Action(e.player.toCCPlayer()!!)
  22.     }

  23.     @EventHandler
  24.     fun onUnregister(e: PlayerQuitEvent) {
  25.         if (e.player.toCCPlayer() == null) return
  26.         list.remove(e.player.toCCPlayer()!!)!!.also { it.unregister() }
  27.     }

  28.     class Action(val player: Player) {

  29.         val blindTime = Random.nextLong(SettingsStorage.settings.getLong("HumanRaceEyesBlindMinDelay", 40), SettingsStorage.settings.getLong("HumanRaceEyesBlindMaxDelay", 120))
  30.         val refreshTime = SettingsStorage.settings.getLong("HumanRaceEyesBlindRefreshTimeTicks", 5)

  31.         fun unregister() {
  32.             action.cancel()
  33.         }

  34.         private val action = object : BukkitRunnable() {
  35.             override fun run() {
  36.                 val time = Random.nextInt(SettingsStorage.settings.getInt("HumanRaceEyesBlindMinDuration", 24), SettingsStorage.settings.getInt("HumanRaceEyesBlindMaxDuration", 28))
  37.                 player.getBukkitPlayer().addPotionEffect(PotionEffect(PotionEffectType.BLINDNESS, time, 255, false, false, false))
  38.                 player.getBukkitPlayer().addPotionEffect(PotionEffect(PotionEffectType.NIGHT_VISION, time, 255, false, false, false))
  39.                 HologramTags.addTags(player, "!眨眼!")
  40.                 object : BukkitRunnable() {
  41.                     override fun run() {
  42.                         HologramTags.removeTag(player, "!眨眼!")
  43.                     }
  44.                 }.runTaskLater(CityCore.plugin, time.toLong())
  45.                 object : BukkitRunnable() {
  46.                     var now = blindTime.toInt()
  47.                     override fun run() {
  48.                         try {
  49.                             var i = 0
  50.                             val string = StringBuilder()
  51.                             while (i <= now) {
  52.                                 if ((i % refreshTime.toInt()) == 0) string.append("█")
  53.                                 i++
  54.                             }
  55.                             ActionBar.sendActionBar(player.getBukkitPlayer(), string.toString())
  56.                             now--
  57.                             if (now == 0) cancel()
  58.                         } catch (ignored: NullPointerException) {
  59.                             cancel()
  60.                         }
  61.                     }
  62.                 }.runTaskTimerAsynchronously(CityCore.plugin, 0, 1)
  63.             }
  64.         }

  65.         init {
  66.             action.runTaskTimer(CityCore.plugin, 20, blindTime)
  67.         }
  68.     }
  69. }
复制代码

运行原理: 每隔一定时间给予玩家失明和夜视的效果,这样玩家看起来会先啥都看不见然后逐渐恢复视野,就像眨眼一样。
虽然实现比较脏,但是玩起来还是挺有意思的,甚至挺真实2333。
(源代码上还有一个当玩家眨眼时会在头顶显示的眨眼 Tag 和一个类似 SCPSL 的剩余眨眼时间 Actionbar,可以说很真实了


来自群组: Server CT

MC_小六
本帖最后由 MC_小六 于 2021-4-30 21:54 编辑

虽然知道这只是瞎玩,但是感觉如果用了虽然真实 但是游戏体验会很差吧(

岁月静好、
萌新表示看不懂。

长灬明
确实,但可能降低体验感?

星河皓月丶
我感觉非但没有让游戏更真实
反而使其更难了……

祝贺兰高考顺利!

是控控吗
有一说一毫无用处啊哈哈

LeoPro
这…… 有意思 但人类正常眨眼是不会有突然看不见然后恢复视野的吧

贺兰兰
LeoPro 发表于 2021-5-1 00:06
这…… 有意思 但人类正常眨眼是不会有突然看不见然后恢复视野的吧

可以想一下在太阳光下睁眼,眼睛的那个适应过程233

Neutrino
眨眼?这不再写个173合起来用

第一页 上一页 下一页 最后一页