Giter VIP home page Giter VIP logo

exptimer's People

Contributors

ucchyocean avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

exptimer's Issues

ColorTeaming連携時に、チーム勝利イベントで終了した時、勝利チームに対してコマンドを実行できるようにする

ColorTeaming連携時に、チーム勝利イベントで終了した時、勝利チームに対してコマンドを実行したい。

--- 仕様案 ---
commandsOnEnd と consoleCommandsOnEnd に、キーワード %winteam を指定できるようにする。
例) 勝利チームにダイアモンドを5個与えて、チーム分けを解散する。
consoleCommandsOnEnd: ['cgive %winteam DIAMOND:5', 'ct removeall']

ただし、チーム勝利イベントでタイマーが終了していない場合(時間切れなど)、%winteam を含んだコマンドは実行されない。

WorldEditのコマンドを、タイマーで実行できるようにする

WorldEditのコマンドを、タイマーで実行できるようにする。

現状の仕組みでは、コマンド実行は必ずコンソールによる実行(ConsoleCommandSender)でエミュレートされる。
しかし、WorldEditのコマンドは全て、コンソールからの実行を受付しない仕様であるため、コマンドが実行できない。

ExpTimerは、次のように仕様変更する。

  • 「/timer start」を実行したCommandSenderを保存しておき、nullにならない限り、これを使ってコマンドを実行する。
  • 保存されたCommandSenderが、nullになったり、オフラインになった場合は、代替としてConsoleCommandSenderを利用する。
  • コンフィグに、必ずコンソールでのエミュレート実行を強制する「forceEmulateConsoleCommand」を追加する。デフォルトはfalseにする。

タイマーのカウントごとにエラーメッセージが表示されて正常に動作しない

ExpTimer v2.3.4 と、CraftBukkit 1.7.9-R0.3 以前のバージョン(Bukkit#getOnlinePlayer メソッドの変更前のバージョン)の組み合わせで再現する。

スタックトレースの内容:

[23:25:24] [Server thread/WARN]: [ExpTimer] Task #42 for ExpTimer v2.3.4 generated an exception
java.lang.NoSuchMethodError: org.bukkit.Bukkit.getOnlinePlayers()Ljava/util/Collection;
   at com.github.ucchyocean.et.TimerTask.getRefreshTargets(TimerTask.java:641) ~[?:?]
   at com.github.ucchyocean.et.TimerTask.broadcastMessage(TimerTask.java:531) ~[?:?]
   at com.github.ucchyocean.et.TimerTask.run(TimerTask.java:196) ~[?:?]
   at org.bukkit.craftbukkit.v1_7_R1.scheduler.CraftTask.run(CraftTask.java:53) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
   at org.bukkit.craftbukkit.v1_7_R1.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:345) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
   at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:587) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
   at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:250) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
   at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:545) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
   at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:457) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
   at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]

新しい Bukkit#getOnlinePlayer メソッドを使ってプラグインがビルドされているため、現在のバージョンのCraftBukkitでは該当メソッドが見つからないことが原因。
プラグインのビルドに使用するCraftBukkitのバージョンを、1つ古い CraftBukkit 1.7.9-R0.2 に固定することで対処する。

残り時間通知を任意秒数で設定できるようにする

現状、300秒(5分)、180秒(3分)、60秒(1分)のタイミングでしか通知できない「残り時間通知」を、任意秒数で設定できるようにする。

【追加する設定項目】
restAlertSeconds
設定例) restAlertSeconds: [60, 180, 300]

内容は整数配列値とする。
順序は問わない(内部処理でソートする)。

【通知に使うメッセージ】
messages.yml に、"rest(seconds)sec" のキーで、メッセージを追記しておくこと。
例えば、restAlertSeconds: [30, 120, 240] のように設定した場合は、あらかじめ messages.yml の中に、次のようにメッセージを足しておく必要がある。

rest240sec: '&d残り4分です!そろそろ本気を出しましょう!!'
rest120sec: '&d残り2分です!まだまだ諦めないで!!'
rest30sec: '&d残り30秒しかありません!急いで!!'

もし、該当秒数に対するメッセージが登録されていない場合は、通知が実行されない。

scoreboardコマンドやtestforコマンドから、残り時間秒数を取得できるようにして欲しい。

フォーラムで頂いた要望。


うーん、「バニラサーバーでもある程度使える」ことと、exptimerがスコアボードに残り時間を同期することと、
正直、つながりとその真意が解らないので、回答に困ってしまいますが・・・

CraftBukkitの配信が停止していることを受けて、バニラでも動作可能なタイマーを併設したマップを作成しています。
exptimer上で残り時間をスコアボードと同期することによって、exptimer側のconfigに基づくコマンド実行ではなく、マップ上に配置されたコマンドブロックの実行が、バニラ用のタイマーと同じ回路を利用できるようになる、というような部分に着目しています。

ucchy さんが書きました:
内容としては全然難しい話ではないので、対応可能ですよ。
ただし、exptimerというobjectiveは、サイドバー表示の目的で既に使用していますので、別の名前のobjectiveにしましょうか。
exptimer_time という objective で、time という項目名で、同期したらいいでしょうか?
(とはいえ、仕様がややこしくなるので、現在のサイドバーでも事足りるなら、コンフィグのuseSideBar を有効にしてそのまま使っていただけると助かるのですが・・・)

要望としては、サイドバーでの表示ではなく、scoreboardコマンド、testforコマンドの併用によるバニラサーバーとのある程度の互換性を実現、といったところになりますので、ディスプレイ表示、オブジェクト名に関しては扱ううえでわかりやすければどのようなものでも問題はないと思います。

設定項目に consoleCommandsOnStart と consoleCommandsOnEnd を追加する

設定項目に consoleCommandsOnStart と consoleCommandsOnEnd を追加する。

issue #2 の変更により、commandsOnStart と commansOnEnd の動作は、
○ 「/timer start」を実行したCommandSenderを保存しておき、nullにならない限り、これを使ってコマンドを実行する。
となった。
しかし、意図的に一部のコマンドだけコンソールエミュレートを行いたい場合もある。
(例えば、コマンドの実行結果をゲーム画面に表示したくないときなど)
そこで、次のように変更する。

  • 設定項目に consoleCommandsOnStart と consoleCommandsOnEnd を追加する。仕様は commandsOnStart と commansOnEnd とほぼ同様だが、必ず ConsoleCommandSender で実行されるところだけが違う。
  • 実行順序としては、commandsOnStart を先に全て実行して、その次に、consoleCommandsOnStart を実行する。
  • 同様に onEnd についても、commandsOnEnd を先に実行して、その次に、consoleCommandsOnEnd を実行する。
  • issue #2 で追加した設定「forceEmulateConsoleCommand」は必要なくなるので、削除する。

BossBarを有効にすると、1秒ごとにエラーが記録される

BossBarを有効にすると、1秒ごとにエラーが記録される。
スタックトレースは下記の通り。

[00:03:48] [Server thread/WARN]: [ExpTimer] Task #3 for ExpTimer v2.6.0 generated an exception
java.lang.IllegalArgumentException: Progress must be between 0.0 and 1.0 (100.0)
	at com.google.common.base.Preconditions.checkArgument(Preconditions.java:191) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
	at org.bukkit.craftbukkit.v1_14_R1.boss.CraftBossBar.setProgress(CraftBossBar.java:158) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
	at com.github.ucchyocean.et.BossBarManager.setMessage(BossBarManager.java:40) ~[?:?]
	at com.github.ucchyocean.et.TimerTask.refreshBossbar(TimerTask.java:522) ~[?:?]
	at com.github.ucchyocean.et.TimerTask.run(TimerTask.java:288) ~[?:?]
	at org.bukkit.craftbukkit.v1_14_R1.scheduler.CraftTask.run(CraftTask.java:81) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
	at org.bukkit.craftbukkit.v1_14_R1.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:394) [spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
	at net.minecraft.server.v1_14_R1.MinecraftServer.b(MinecraftServer.java:1023) [spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
	at net.minecraft.server.v1_14_R1.DedicatedServer.b(DedicatedServer.java:396) [spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
	at net.minecraft.server.v1_14_R1.MinecraftServer.a(MinecraftServer.java:971) [spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
	at net.minecraft.server.v1_14_R1.MinecraftServer.run(MinecraftServer.java:816) [spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
	at java.lang.Thread.run(Unknown Source) [?:1.8.0_221]

コードのライセンスについて質問

こんばんは。このレポジトリのコードを利用したいと考えているのですが、どのような条件のもとで利用すればよいでしょうか。
FLOSSライセンスだと大変ありがたいのですが、ご検討の程をよろしくおねがいします。

自由な時間に実行できるコマンド設定を追加する

自由な時間に実行できるコマンド設定を追加する

【追加する設定項目】
commandsOnMid: [] (StringList)
設定した時間に実行されるコマンド
consoleCommandsOnMid: [] (StringList)
設定した時間に実行されるコマンド(コンソール実行)
runCommandsOnMidSeconds: [] (IntegerList)
タイマー途中でコマンドを実行する時間

コマンドに @a を指定できるようにする

commandsOnStart と commandsOnEnd に、「@A」を指定可能とする。
commandsOnStart や commandsOnEnd が“実行されるときに”、「@A」の部分をサーバー参加全プレイヤー名で置き換えして実行する。

playSound 設定における、カウントダウン音と、開始音・終了音を、設定できるようにする。

playSound 設定における、カウントダウン音と、開始音・終了音を、設定できるようにする。

【設定値】
playSoundCountdown: カウントダウン音の設定。
playSoundStartEnd: 開始音終了音の設定。
いずれも文字列値。
BukkitのSoundクラス名で指定する(例:PISTON_EXTEND、ANVIL_USE)。

正しくない設定値が指定された場合は、デフォルト設定
(playSoundCountdown: NOTE_STICKS、playSoundStartEnd: NOTE_PLING)
に置き換えられる。

なお、これらは隠し設定として提供する。
(いろいろ変更される可能性があるし、今後はピッチや音量も指定できるようにしたいので。)

パーミッションノードを細かく設定できるようにする

パーミッションノードを細かく設定できるようにする。
コマンド自体のパーミッションのみ("exptimer"のみ)だけだと、サブコマンドの制御までできないので、サブコマンドごとに細かくパーミッション設定できるようにする。

【追加後のパーミッションの案】

permissions:
  exptimer:
    description: 経験値バータイマーコマンドパーミッション
    default: op
  exptimer.start:
    description: startコマンドパーミッション
    default: op
  exptimer.pause:
    description: pauseコマンドパーミッション
    default: op
  exptimer.cancel:
    description: cancelコマンドパーミッション
    default: op
  exptimer.end:
    description: endコマンドパーミッション
    default: op
  exptimer.status:
    description: statusコマンドパーミッション
    default: op
  exptimer.list:
    description: listコマンドパーミッション
    default: op
  exptimer.reload:
    description: reloadコマンドパーミッション
    default: op
  exptimer.*:
    children:
      exptimer: true
      exptimer.start: true
      exptimer.pause: true
      exptimer.cancel: true
      exptimer.end: true
      exptimer.status: true
      exptimer.list: true
      exptimer.reload: true
    description: exptimerのサブノードの全パーミッション

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.