Skip to content
forked from gecolay/GMusic

GPlugin - GMusic - Hear your favorite music with note block sounds in Minecraft!

License

Notifications You must be signed in to change notification settings

mofucraft/GMusic

 
 

Repository files navigation

リポジトリへようこそ

このリポジトリにはGPluginsシリーズのGMusicプロジェクトが含まれています!

機能

コア機能

  • 個人用音楽プレイヤー: 個別のプレイヤーにカスタム音楽を再生
  • Jukeboxシステム: 特別なJukeboxを設置し、近くのプレイヤーに距離減衰付きで音楽を配信
  • Radioモード: 参加しているすべてのプレイヤーにグローバル音楽配信
  • 音楽フォーマット: NBS(Note Block Studio)とMIDIファイルのGNBS形式への変換をサポート

プレイヤー機能

🔊 スピーカーモード(新機能)

あなたの音楽を近くのプレイヤーに配信!有効にすると:

  • 範囲内のプレイヤー(デフォルト20ブロック、5-100で調整可能)があなたの音楽を聴ける
  • 距離に応じて自然に音量が減少
  • あなたの頭上に音符のパーティクルが表示される(他人から見える)
  • 他のプレイヤーはあなたのスピーカーをミュートできる

GUI操作(オプションメニュー):

  • ベルアイコン(スロット51): スピーカーモードの切り替えと範囲調整
    • 左/右クリック: スピーカーモードのON/OFF
    • Shift + 左/右クリック: 範囲を調整(±5ブロック)
    • ミドルクリック: デフォルトにリセット(OFF、20ブロック)
  • 鉄格子アイコン(スロット52): 他人のスピーカーをミュート
    • 左/右クリック: ミュートの切り替え
    • ミドルクリック: ミュート解除にリセット

📁 音楽カテゴリ(新機能)

フォルダで音楽ライブラリを整理:

  • songs/フォルダ内にサブディレクトリを作成
  • 各フォルダがGUIでカテゴリになる
  • メインメニューの**本棚アイコン(スロット51)**でカテゴリをナビゲート
    • 左クリック: 次のカテゴリ
    • 右クリック: 前のカテゴリ
    • サイクル: すべての曲 → カテゴリ1 → カテゴリ2 → ... → すべての曲

音楽再生モード

  • デフォルト: 曲を1回再生
  • シャッフル: リスト内の次の曲を自動再生
  • ループ: 現在の曲をリピート
  • 逆再生モード: 曲を逆再生
  • お気に入り: お気に入りの曲でプレイリストを作成

カスタマイズ

  • 音量調整: 0-100%で調整可能
  • パーティクルエフェクト: 再生中の音符パーティクルの切り替え
  • 参加時に再生: サーバー参加時に自動的に音楽を開始
  • 検索: タイトルで曲を検索
  • プレイヤー別設定: すべての設定がプレイヤーごとに保存される

セットアップガイド

インストール

  1. 最新のGMusic-x.x-x.jarをリリースからダウンロード
  2. サーバーのplugins/フォルダに配置
  3. サーバーを再起動
  4. 必要に応じてplugins/GMusic/config.ymlで設定

音楽ファイルのセットアップ

ディレクトリ構造

plugins/GMusic/
├── songs/          # 変換済み音楽ファイル (.gnbs)
│   ├── song1.gnbs
│   ├── song2.gnbs
│   ├── Rock/       # カテゴリフォルダ(新機能)
│   │   ├── rock1.gnbs
│   │   └── rock2.gnbs
│   └── Classical/  # 別のカテゴリ(新機能)
│       └── classical1.gnbs
├── nbs/            # .nbsファイルを配置して自動変換
│   └── example.nbs
└── midi/           # .midファイルを配置して自動変換
    └── example.mid

サポートされているフォーマット

NBS(Note Block Studio):

  1. .nbsファイルを作成またはダウンロード
  2. plugins/GMusic/nbs/フォルダに配置
  3. サーバーを再起動またはプラグインをリロード
  4. ファイルが自動的に.gnbs形式に変換されsongs/フォルダに表示される

MIDIファイル:

  1. .midまたは.midiファイルをplugins/GMusic/midi/フォルダに配置
  2. サーバーを再起動またはプラグインをリロード
  3. ファイルが自動的に.gnbs形式に変換されsongs/フォルダに表示される

直接GNBS:

  • .gnbsファイルを直接plugins/GMusic/songs/フォルダに配置
  • カテゴリ用にサブディレクトリで整理可能(新機能)

自動変換プロセス

プラグインは起動時にNBSとMIDIファイルを自動変換します:

  • nbs/midi/フォルダの新しいファイルをチェック
  • .gnbsとしてまだ存在しないファイルのみを変換
  • 変換されたファイルはsongs/フォルダに表示される
  • 元のNBS/MIDIファイルはそのフォルダに残る

Jukeboxのセットアップ

  1. ワールド内にJukeboxブロックを設置
  2. 右クリックして音楽GUIを開く
  3. そのJukeboxから再生する曲を選択
  4. 範囲内の近くのプレイヤーが音楽を聴く
  5. オプションで範囲を調整(オプションメニューのスロット51)

Jukebox機能:

  • 距離ベースの音量(近いほど大きい)
  • 設定可能な範囲(デフォルト50、最大500ブロック)
  • Jukeboxごとに永続的な設定
  • Jukebox位置に音符パーティクルが表示される

コマンド

  • /music play <曲名> - 特定の曲を再生
  • /music playing - 現在再生中の曲を表示
  • /music random - ランダムな曲を再生
  • /music stop - 現在の曲を停止
  • /music pause - 現在の曲を一時停止
  • /music resume - 一時停止した曲を再開
  • /music skip - 次の曲にスキップ
  • /music toggle - 音楽のON/OFFを切り替え

設定

主要設定(config.yml

Options:
  # Jukebox設定
  jukebox-range: 50           # デフォルトのJukebox聴取範囲
  max-jukebox-range: 500      # Jukeboxの最大範囲

  # スピーカーモード設定(新機能)
  speaker-default-range: 20   # デフォルトのスピーカーモード範囲
  max-speaker-range: 100      # スピーカーモードの最大範囲

  # サウンド設定
  Sound:
    extened-range: true       # 拡張音域を使用(リソースパックが必要)
    force-resources: true     # リソースパックをプレイヤーに自動適用

  # 環境エフェクト
  environment-effects: true   # 水中で特殊なサウンドエフェクト

  # GUIオプション
  GUI:
    disable-random-song: false
    disable-playlist: false
    disable-options: false
    disable-search: false
    disable-speaker-mode: false  # スピーカーモード機能を無効化(新機能)

  # デフォルトのプレイヤー設定
  PlayerSettings:
    Default:
      volume: 70
      particles: false
      play-mode: 0            # 0=デフォルト, 1=シャッフル, 2=ループ

言語ファイル

プラグインは複数の言語をサポートしています。plugins/GMusic/lang/のファイルを編集:

  • en_us.yml - 英語(米国)
  • de_de.yml - ドイツ語
  • 独自の言語ファイルを追加可能

新しい翻訳キー(カスタム言語ファイル用):

MusicGUI:
  music-options-speaker-mode: "&aスピーカーモード:&6 %SpeakerMode%"
  music-options-speaker-range: "&7範囲:&b %Range%&7 ブロック"
  music-options-mute-speakers: "&a他人のスピーカーをミュート:&6 %MuteSpeakers%"
  music-category-all: "&eすべてのカテゴリ"
  music-category: "&eカテゴリ:&6 %Category%"

データベース

プレイヤー設定はSQLiteデータベース(plugins/GMusic/data.db)に保存されます:

テーブル:

  • gmusic_play_settings - プレイヤーの設定(音量、モード、スピーカー設定)
  • gmusic_play_settings_favorites - プレイヤーごとのお気に入り曲
  • gmusic_juke_box - Jukeboxの位置と設定

新しいフィールド:

  • speakerMode - スピーカーモードの有効/無効
  • speakerRange - スピーカー配信範囲
  • muteSpeakers - 他人のスピーカーをミュート
  • currentCategory - 最後に選択したカテゴリ

開発

ローカルプロジェクト

リポジトリをクローン:

git clone https://github.com/Gecolay/GMusic.git

ビルド

gradlew clean buildコマンドを実行。

最終的なGMusic-x.x-x.jarファイルはbuild/libsフォルダにあります。

プロジェクト構造

GMusic/
├── core/                           # コアプラグインコード
│   └── src/main/java/dev/geco/gmusic/
│       ├── object/                # データモデル
│       │   ├── GPlaySettings.java # プレイヤー設定モデル
│       │   ├── GSong.java         # 曲データモデル
│       │   └── gui/               # GUIクラス
│       │       └── GMusicGUI.java # メイン音楽GUI
│       └── service/               # ビジネスロジック
│           ├── PlayService.java   # 音楽再生とスピーカーモード
│           ├── JukeBoxService.java # Jukebox機能
│           ├── RadioService.java  # Radio配信
│           ├── SongService.java   # 曲読み込みとカテゴリ
│           ├── ConfigService.java # 設定管理
│           └── PlaySettingsService.java # プレイヤー設定とデータベース
├── resources/
│   ├── config.yml                 # メイン設定
│   └── lang/                      # 言語ファイル
│       ├── en_us.yml
│       └── de_de.yml
└── build.gradle                   # ビルド設定

主要な実装詳細

スピーカーモード (PlayService.java):

  • getSpeakerListeners(): 範囲内のプレイヤーを検索し、ミュート設定を尊重
  • 距離ベースの音量計算式: (distance - range) * sourceVolume / -range
  • ゲームティック(50ms)ごとに音量減衰を適用して音を配信
  • 発信源プレイヤーの頭上にパーティクルを生成

カテゴリシステム (SongService.java):

  • loadSongsFromDirectory(): songs/フォルダを再帰的にスキャン
  • サブディレクトリがカテゴリになる
  • 大文字小文字を区別しないTreeMapでカテゴリをソート

GUI統合 (GMusicGUI.java):

  • 6x9インベントリベースのGUI
  • ボトムバー(スロット45-53)でコントロール
  • 設定用のオプションメニュー
  • コンテキストに応じた動的スロット割り当て

トラブルシューティング

音楽が再生されない

  • 拡張音域を使用している場合、プレイヤーがリソースパックを受け入れているか確認
  • プレイヤーが音楽をオフにしていないか確認(/music toggle
  • songs/フォルダに.gnbs形式の曲ファイルがあることを確認

スピーカーモードが動作しない

  • config.ymlでdisable-speaker-mode: falseになっているか確認
  • プレイヤーが範囲内(デフォルト20ブロック)にいることを確認
  • リスナーがスピーカーをミュートしていないか確認
  • GUIでスピーカーモードが有効になっているか確認(オプション → ベルアイコン)

カテゴリが表示されない

  • songs/ディレクトリ内にフォルダが存在することを確認
  • フォルダ内に.gnbsファイルが含まれていることを確認
  • フォルダ追加後にプラグインをリロード: /gmusic reload

変換が動作しない

  • NBSファイルはnbs/フォルダに配置(songs/ではない)
  • MIDIファイルはmidi/フォルダに配置(songs/ではない)
  • 再変換が必要な場合、対応する.gnbsファイルを削除
  • サーバーコンソールで変換エラーを確認

プルリクエスト

このリポジトリにコードを送信するためのプルリクエストを作成できます: Pull requests

ライセンス

ライセンス情報についてはリポジトリを参照してください。

クレジット

  • オリジナルGMusicプラグイン by Gecolay
  • 新機能: スピーカーモード、音楽カテゴリ
  • コミュニティからの貢献を歓迎します!

変更履歴

v1.2.2 (2025-12-15) - 権限チェック修正

バグ修正

  • 権限チェックロジックの改善: isPermissionSetによる誤判定を修正
    • 一部の権限プラグイン(LuckPermsなど)で権限が正しく認識されない問題を解消
    • ジュークボックスGUIが開けない問題を修正

v1.2.1 (2025-12-15) - バグ修正と改善

バグ修正

  • お気に入り表示の修正: ジュークボックスGUIでプレイヤーのお気に入り状態が表示されてしまう問題を修正
  • GUI表示更新: インベントリを開いた時に最新の状態を表示するように改善

機能改善

  • お気に入り効果音: お気に入り登録/解除時に効果音を追加
    • 登録時: 高いピッチ (1.0)
    • 解除時: 低いピッチ (0.5)
  • 自動停止時間変更: 可聴範囲内にプレイヤーがいない場合の自動停止時間を5分から10分に変更

技術的な修正

  • お気に入りチェック時にUUIDから明示的に設定を取得するように変更
  • InventoryOpenEventハンドラーを追加してGUI表示を動的に更新

v1.2.0 (2025-12-15) - 大規模リファクタリング

GUIの大幅変更

  • メニュータイトル: おしゃれな装飾付き「✦ Music Player ✦」に変更
  • オプション画面を廃止: 設定ボタンをカテゴリバーの2列目に統合
  • 新レイアウト:
    Slot 0-26:  曲リスト(3行)
    Slot 27:    全曲ボタン
    Slot 28-39: カテゴリボタン(最大12個)
    Slot 40:    音量設定
    Slot 41:    可聴範囲(ジュークボックス)/ 再生モード(プレイヤー)
    Slot 42:    再生モード(ジュークボックスのみ)
    Slot 43-44: ページナビゲーション
    Slot 45-47: 再生コントロール(再生中のみ表示)
    Slot 48:    ランダム再生
    Slot 49:    プレイリストモード
    Slot 50:    (空き)
    Slot 51:    お気に入り
    Slot 52:    スピーカーモード(プレイヤーGUIのみ)
    Slot 53:    ミュート設定(プレイヤーGUIのみ)
    

ジュークボックス機能の改善

  • 10分間の自動停止遅延: 可聴範囲内にプレイヤーがいなくなっても即座に停止せず、10分間待機後に自動停止
  • パーティクル表示範囲の拡大: 可聴範囲外でも、パーティクル表示範囲内のプレイヤーにはジュークボックスが再生中であることが視覚的にわかる

config.yml の変更

# 新しい設定
jukebox-auto-stop-delay: 600000  # 自動停止までの待機時間(ミリ秒、デフォルト10分)
jukebox-particle-range: 100      # パーティクル表示範囲(可聴範囲より広く設定推奨)

# 削除された設定
# disable-options: false  (オプション画面廃止のため削除)
# disable-search: false   (未使用のため削除)

範囲設定の解説

設定名 対象 説明 デフォルト
jukebox-range ジュークボックス 新規設置時のデフォルト可聴範囲 20
max-jukebox-range ジュークボックス GUI で設定可能な最大可聴範囲 50
jukebox-particle-range ジュークボックス パーティクルが見える範囲 100
jukebox-auto-stop-delay ジュークボックス 範囲外時の自動停止遅延(ms) 600000
speaker-default-range プレイヤー スピーカーモードのデフォルト範囲 30
max-speaker-range プレイヤー スピーカーモードの最大範囲 100

ジュークボックス vs プレイヤースピーカーの違い:

  • ジュークボックス: 設置ブロックから音が出る。可聴範囲は GUI から変更可能(最大値は config で制限)
  • プレイヤースピーカー: プレイヤー自身から音が出る。スピーカー範囲は GUI から変更可能(最大値は config で制限)

ミュート機能:

  • 「他人のスピーカーをミュート」を有効にすると、他プレイヤーのスピーカーモードの音と設置ジュークボックスの音が聞こえなくなります
  • パーティクルは引き続き表示されます

OP専用コマンド: /music speaker

OPプレイヤーは /music speaker コマンドで特別なスピーカー設定が可能です。

/music speaker on [均一半径] [最大半径]   - スピーカーモードON
/music speaker off                        - スピーカーモードOFF
/music speaker range [均一半径] [最大半径] - 範囲のみ変更

パラメータ説明:

  • 均一半径: この範囲内のプレイヤーには音量100%で聞こえます(音量減衰なし)
  • 最大半径: 音が届く最大距離。均一半径を超えた地点から距離に応じて音量が減衰します

注意事項:

  • このコマンドは configの制限を無視 できます(例: max-speaker-range: 100 でも 200 を指定可能)
  • 均一半径・最大半径の設定はセッション中のみ有効で、DBには保存されません
  • GUIで設定変更すると、均一半径は0にリセットされます
  • 一般プレイヤーはGUIでのみ範囲調整可能(configの max-speaker-range まで)

設置ジュークボックス(音楽プレイヤーブロック)

  • /amusic jukebox <プレイヤー名> [個数] で専用アイテムを入手できます
  • 専用アイテムには PersistentDataContainer でマーキングされており、通常のジュークボックスとは区別されます
  • 専用アイテムを設置すると音楽プレイヤーGUIが使用可能になります
  • 通常のジュークボックスを設置しても音楽プレイヤー機能は動作しません

2025-12-04 - カスタム改造版

GUI レイアウトの最適化

  • 曲表示エリアを45スロットから36スロット(6行→4行)に変更
  • カテゴリボタンを常時表示(スロット36-44)に配置
    • スロット36: 全曲ボタン(本棚アイコン)
    • スロット37-44: カテゴリボタン(8色の異なる染料アイコン)
  • お気に入り追加ボタンをスロット52に配置

機能の追加・変更

  • 再生モードに「カテゴリ内プレイ」を追加(以前のPLAYLISTから名称変更)
  • スピーカーモードをオプション画面に追加(デフォルトOFF)
  • パーティクル表示機能を削除(スピーカーモード時は自動ON)
  • リバース(逆再生)機能を削除
  • ウェルカムミュージック(参加時自動再生)機能を削除
  • ログイン時の自動再生を無効化

設定ファイルの変更

  • config.ymlからparticlesreverseの設定を削除
  • disable-optionsのデフォルトをfalseに変更
  • スピーカーモードのデフォルトをfalseに設定

言語ファイルの更新

  • music-options-play-mode-category(カテゴリ内プレイ)を追加
  • music-category-all(全ての曲)を追加
  • music-add-favorite(お気に入りに追加)を追加

データベース

  • お気に入り機能用のテーブル構造を維持
  • config.ymldisable-favorites: falseにより有効化

2025-12-04 以前

(以前の変更履歴は上記の「変更履歴 (2025-12-04)」セクションを参照)

UIの変更

  • スピーカートグルスイッチの移動: スピーカートグルボタン(ベルアイコン)をオプションメニューからデフォルトバーのスロット51に移動しました。これにより、メイン画面から直接スピーカーモードを切り替えられるようになりました。
  • カテゴリ一覧の常時表示: カテゴリ一覧をGUIの底部の一段上(行5、スロット36-44)に常時表示するようにしました。これにより、カテゴリ間の移動がスムーズになりました。
  • 曲リストの表示領域変更: カテゴリ一覧の表示に伴い、曲リストの表示領域を行1-4(スロット0-35)に変更しました。
  • オプション画面のUI改善: オプション画面を開いているときは、曲リストとカテゴリボタンを非表示にして、設定画面に集中できるようにしました。

機能追加・変更

  • プレイリスト内シャッフル: 再生モードの「シャッフル」の挙動を変更し、現在選択されているプレイリスト(お気に入り、カテゴリ、または全曲)の中からランダムに曲を選んで再生するようにしました。
  • パーティクル表示の改善: スピーカーモードがOFFの時は、自分自身にも音符パーティクルを表示しないように変更しました。「パーティクル表示」設定がONでも、スピーカーモードがOFFであればパーティクルは出ません。
  • カテゴリ選択の修正: カテゴリボタンをクリックした際に、正しくカテゴリの曲が表示されるように修正しました。

設定・ローカライズ

  • 日本語化: デフォルトの言語設定を日本語(ja_jp)に変更し、日本語の翻訳ファイル(ja_jp.yml)を追加しました。
  • 操作説明の追加:
    • スピーカーモード: 「(範囲: Xブロック)」という範囲表示を追加し、操作方法を詳細に説明
    • 音量ボタン: 「(左クリック:+5 右クリック:-5)」という操作方法を追加
  • デフォルト設定の変更:
    • 他人のスピーカーモードのミュート設定(muteSpeakers)のデフォルトをOFFにしました。
    • 変換された曲のデフォルト保存先カテゴリを Default から songs に変更しました。
    • 逆再生機能をデフォルトで無効化しました(既存のデータベースに逆再生が有効になっている場合は手動でリセットが必要です)。
    • スピーカーモードのデフォルト範囲を30ブロックに設定(距離に応じて音量が自然に減衰します)。

スピーカーモード機能(最新版)

スピーカーモードが正しく機能するようになりました:

  • オプション画面のスロット47にスピーカーモード設定があります(JUKEBOXアイコン)
  • 左/右クリック: スピーカーモードのON/OFF切り替え
  • Shift+左/右クリック: 範囲を±5ブロック調整(最小5、最大100)
  • ミドルクリック: デフォルト設定にリセット(OFF、30ブロック)
  • 範囲と操作方法がアイテムの説明文に表示されます
  • 有効にすると、設定した範囲内のプレイヤーにあなたの音楽が聞こえます
  • 距離に応じて音量が自動的に減衰します

About

GPlugin - GMusic - Hear your favorite music with note block sounds in Minecraft!

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Java 100.0%