ucchyocean / exptimer Goto Github PK
View Code? Open in Web Editor NEWタイマープラグイン。経験値バーで残り時間を表示することが可能。sp777さんからの要望で作ったもの。
タイマープラグイン。経験値バーで残り時間を表示することが可能。sp777さんからの要望で作ったもの。
ColorTeaming連携設定で、チーム勝利が発生してタイマーが終了したときに、nextConfigが動作しない。
PVP自動化で非常に有用なので、ぜひとも検討したい。
ColorTeaming連携時に、チーム勝利イベントで終了した時、勝利チームに対してコマンドを実行したい。
--- 仕様案 ---
commandsOnEnd と consoleCommandsOnEnd に、キーワード %winteam を指定できるようにする。
例) 勝利チームにダイアモンドを5個与えて、チーム分けを解散する。
consoleCommandsOnEnd: ['cgive %winteam DIAMOND:5', 'ct removeall']
ただし、チーム勝利イベントでタイマーが終了していない場合(時間切れなど)、%winteam を含んだコマンドは実行されない。
カウントダウン等のメッセージをColorTeamingでチームに分けられた人だけに見えるようにする設定を追加する。
ColorTeamingのチームポイントイベントと連携し、特定のポイントを下回ったときと、特定のポイントを上回ったときに、タイマーを停止する機能を追加する
config.yml の defaultコンフィグが取得できないときに、NullPointerException で落ちるのではなく、既定値を作成して挿入して欲しい。
※ default 設定を削除しても良いというわけではない。今後も、default設定は必ず残しておくこと。
WorldEditのコマンドを、タイマーで実行できるようにする。
現状の仕組みでは、コマンド実行は必ずコンソールによる実行(ConsoleCommandSender)でエミュレートされる。
しかし、WorldEditのコマンドは全て、コンソールからの実行を受付しない仕様であるため、コマンドが実行できない。
ExpTimerは、次のように仕様変更する。
フォーラムで報告された不具合。
PlayerSelector(コマンドブロックに使われるargument)が正しく動作していない。
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秒しかありません!急いで!!'
もし、該当秒数に対するメッセージが登録されていない場合は、通知が実行されない。
フォーラムで頂いた要望。
うーん、「バニラサーバーでもある程度使える」ことと、exptimerがスコアボードに残り時間を同期することと、
正直、つながりとその真意が解らないので、回答に困ってしまいますが・・・
CraftBukkitの配信が停止していることを受けて、バニラでも動作可能なタイマーを併設したマップを作成しています。
exptimer上で残り時間をスコアボードと同期することによって、exptimer側のconfigに基づくコマンド実行ではなく、マップ上に配置されたコマンドブロックの実行が、バニラ用のタイマーと同じ回路を利用できるようになる、というような部分に着目しています。
ucchy さんが書きました:
内容としては全然難しい話ではないので、対応可能ですよ。
ただし、exptimerというobjectiveは、サイドバー表示の目的で既に使用していますので、別の名前のobjectiveにしましょうか。
exptimer_time という objective で、time という項目名で、同期したらいいでしょうか?
(とはいえ、仕様がややこしくなるので、現在のサイドバーでも事足りるなら、コンフィグのuseSideBar を有効にしてそのまま使っていただけると助かるのですが・・・)
要望としては、サイドバーでの表示ではなく、scoreboardコマンド、testforコマンドの併用によるバニラサーバーとのある程度の互換性を実現、といったところになりますので、ディスプレイ表示、オブジェクト名に関しては扱ううえでわかりやすければどのようなものでも問題はないと思います。
設定項目に consoleCommandsOnStart と consoleCommandsOnEnd を追加する。
issue #2 の変更により、commandsOnStart と commansOnEnd の動作は、
○ 「/timer start」を実行したCommandSenderを保存しておき、nullにならない限り、これを使ってコマンドを実行する。
となった。
しかし、意図的に一部のコマンドだけコンソールエミュレートを行いたい場合もある。
(例えば、コマンドの実行結果をゲーム画面に表示したくないときなど)
そこで、次のように変更する。
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]
お試しで、ボスMOBの体力バーを利用した、タイマーのゲージ表示に対応する。
その後、アンケートの結果や、ユーザーの利用状況などを見つつ、今後の対応で必要のないゲージを、仕様から落としていきたい。
タイトル表示に対応する。
現在ロードされているコンフィグのリストが参照できるコマンドが欲しい。
コマンドは「/timer list」とする。
こんばんは。このレポジトリのコードを利用したいと考えているのですが、どのような条件のもとで利用すればよいでしょうか。
FLOSSライセンスだと大変ありがたいのですが、ご検討の程をよろしくおねがいします。
サイドバーとボスバーのタイトル表示を、メッセージ設定で任意に変更できるようにする。
messages.yml への追加項目は、次のようにする。
sidebarTitle: '&6残り時間' bossbarTitle: '&6残り時間 - %s'
自由な時間に実行できるコマンド設定を追加する
【追加する設定項目】
commandsOnMid: []
(StringList)
設定した時間に実行されるコマンド
consoleCommandsOnMid: []
(StringList)
設定した時間に実行されるコマンド(コンソール実行)
runCommandsOnMidSeconds: []
(IntegerList)
タイマー途中でコマンドを実行する時間
【追加する設定項目】
useSideBar: true/false (初期値はfalse)
trueを設定した項目でタイマーを開始すると、サイドバーに残り時間が表示されるようになる。
タイマー起動中に /timer reload を実行すると、タイマー設定が default に戻ってしまう。
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のサブノードの全パーミッション
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.