新駒奈日誌

Minecraftの建築に関する情報をよろずに書いていく。

【Minecraft】 Axiomで色と親しくなる

Minecraftのワールド編集MOD「Axiom」の、色に関する機能に関してをまとめて解説します。AxiomのMODの解説は、過去にこちらで解説していますので、「Axiomって何?」って方はこちらをどうぞ。

komnazsk.hatenablog.jp

注意事項: 本記事は、Axiom Ver.5.0.1 (Minecraft Java Edition 1.21.X) 現在の状況について記載しています。バージョンによりUI等が変更される場合がありますので、注意してください。

ビルダーモードの色支援機能

今更ですが、Version 4.5.1 (2025年2月) から、ビルダーモード (クリエイティブモードを拡張する機能の方) で色に関する機能の追加がありました。

Axiomを導入した状態でクリエイティブインベントリを開くと、左側に2つのアイコンが見えると思います。

Colour Picker

色からブロックを取得したり、ブロックの色を取得したりすることができる機能です

  • 色が表示されている箇所を設定すると、近い色のブロックが右側に表示されます
  • 中央のスポイトのところに、インベントリからブロックを左クリックで置くと、そのブロックの色を取得できます
  • 右側に表示されるブロックの種類は、F / S / O / T と表示された箇所を設定することで制御することができます
記号 オプション 項目
F Full Cube ONにすると、完全な立方体のブロックのみ表示します (半ブロックや階段などが除外されます)
S Solid ONにすると、個体のブロックのみ表示します (水や粉雪などが除外されます)
O Opaque ONにすると、不透明のブロックのみ表示します (ガラスなどが除外されます)
T Same Texture ONにすると、すべての面が同じテクスチャのブロックのみ表示します (原木などが除外されます)

Gradient Helper

グラデーションの作成を支援します

  • Inputsのところにブロックを置くと、そのブロックの間を補間するようにグラデーションが生成できます
  • できたグラデーションをインベントリにそのままコピーすることもできます
  • できたグラデーションは、Builder Modeのグラデーションブラシ / ペインターに反映させることができます (4.8.0以降)
  • 作成するグラデーションで使うブロックは、Colour Pickerと同様 F / S / O / T の項目で制御することができます

以下は、作成したグラデーションをグラデーションペインターに反映させた例です。そのまますぐに塗って使えます。これでグラデーション作成もカンタンです。


上級者向け : Script Brush の色に関する追加 Function

Version 4.9.0以降 で、Script Brush等で使える新しいFunctionが追加されました。以前、本サイトでScript Brushに付いて解説しましたが、追加で色々おもしろいことができるようになっているようです。「Script Brushって何それ?」って方は以下をご覧ください。

komnazsk.hatenablog.jp

色に関する追加Function

以前解説したAxiomのFunctionに加えて、以下のFunctionが利用できるようになっています。

関数 説明
findClosestBlockToRGB(RGB triplet (integer), flags bitarray (integer), index) 引数で指定したRGB tripet (24ビットカラー値) に近いブロック情報を取得します。どのようなブロックを指定するか、引数 bitarray で指定することもできます。
getBlockRGB(Blockstate ID) 指定したブロックのRGB tripet (24ビットカラーの整数値)を取得します

findClosestBlockToRGBの引数flagsは、以下の値を足し算した値を設定します

説明
1 固体ブロックのみ
2 不透明ブロックのみ
4 立方体のブロックのみ
8 全面同じテクスチャのブロックのみ
16 鉱石ブロック不使用
32 採油テラコッタ不使用
64 ブロックエンティティ不使用

RGB24ビットカラー値は、いわゆるWebカラーと呼ばれる値です。赤・緑・青それぞれ256段階でひとつの色を表現した値です。RGBそれぞれ値が大きいほど明るく、小さいほど暗くなります。

カラーコード(色コード)とは?意味を分かりやすく解説 - IT用語辞典 e-Words

参考情報 : https://axiomdocs.moulberry.com/tools/painting/scriptbrush.html

実際に触ってみる

せっかくなので、AxiomのScript Brushで色々作ってみましょう。

まずは簡単な例。Minecraft内で一番青い色 (24ビット値 : 0x0000FF) のブロックを塗るブラシを作れます。

-- 一番青いブロックを塗るブラシ
block = findClosestBlockToRGB(0x0000FF, 0, 1)

return block

すると、一番青いブロックである、クダサンゴブロック (tube_coral_block) を塗ることができます。

  1. 少し難しい例を示します。以下は、「塗るたびに表面のブロックを少しずつ暗くするブラシ」です。
dark_value = $int(DarkValue, 20, 1, 100)$

-- R, G, Bの値を24ビットに変換する関数
function RGBToTriplet(r, g, b)
   return r*(256^2) + g*256 + b
end

-- 24ビットの値をR, G, Bの配列に変換する関数
function tripletToRGB(triplet)
  local r = math.floor( triplet/(256^2) )
  local g = math.floor( (triplet%(256^2))/256 )
  local b = triplet%256
  return {r, g, b}
end

-- 指定したRGB値をvalueだけ小さくする関数
function darkValue(src, value)
   if ((src - value) >= 0) then
    dst = src - value
  else
    dst = 0
  end
  return dst
end
-- ブロックを取得する
local block_type = getBlock(x, y, z)

-- 表面上にあるブロックかどうかを判定する
if not isSolid(block_type) or isSolid(getBlock(x, y+1, z)) then
   return nil
end

-- ブロックのR, G, B値を取得する
color_triplet = getBlockRGB(block_type)
color_vector = tripletToRGB(color_triplet)

-- RGBそれぞれ指定した値分だけ暗くする
dark_r = darkValue(color_vector[1], dark_value)
dark_g = darkValue(color_vector[2], dark_value)
dark_b = darkValue(color_vector[3], dark_value)
color_dark = RGBToTriplet(dark_r, dark_g, dark_b)

-- 15 = 固体, 不透明, 立方体のブロック, 全面同じ
block = findClosestBlockToRGB(color_dark, 15)

-- ブロックを塗る
return block

このブラシを重ね塗りすると、少しずつ色が暗くなっていくことがわかると思います。最終的に、真っ黒になっていきます。

このブラシを少し手を加えると、以下のように「補色を塗るブラシ」みたいなものも作ることができるようになります。遊んでみると面白いですので、色々試してみてください。

【Minecraft Server】備忘録 : Java/統合版クロスプレイ環境で快適に遊ぶためのサーバ軽量化設定など

コマナズです。前の記事に引き続いて、Minecraftサーバの運用者をターゲットにしたお話をします。

背景

近頃はMinecraftの統合版(スマホ、Switch1/2、PS4/5 ) のユーザが急激に増ています。一方で、利便性の面やMOD等のカスタマイズ性から、Java版のプレイヤーも十分な数存在します。そこで、GeyserMC を使って Java版 と 統合版 のプレイヤーを同じサーバで一緒にプレイさせたいケースも増えてきています。

その中で今回のテーマは、GeyserMC でSwitch版 / PS版ユーザを参加させる際の、パフォーマンスの課題点について解説します。

前提

  • この記事は、Minecraft 1.21.x (Java Version) 時点の内容を記載しています。
  • Switch版から外部サーバへアクセスする方法の解説は、以下のサイトで仕組み付きで解説していますのでおすすめです。 www.radical-dreamer.com

課題 : Switch / PSプレイヤーが頻繁にサーバから落ちてしまう

GeyserMC によるJava版 / 統合版クロスプレイサーバを運用した際に、ある課題が起きていました。それは、「Switch/PS版ユーザが頻繁にサーバから落ちてしまう」課題です。

Switch版やPS版といった、コンソール環境では、以下のような様々な課題が山積みで、完全な解決は困難です。

  • 非公式の海外サーバ ( BedrockConnectサーバ) を経由するため、根本的にスマホタブレットよりもラグを抱えやすい
    • Switch版 / PS版ユーザは BedrockConnect 接続と呼ばれる非公式な手段でしか外部サーバへのまともなアクセス手段がありません
  • スペックの限界 (とくにSwitch1) があり、処理が重くなりやすい
  • 無線環境であることが多く、有線と比較してラグがある
  • PC版プレイヤーほど高速通信環境の整備に熱心でないユーザが多い

そのため、通常はプレイヤー側で「描画距離を短くする」「描画品質を見直す」「通信環境を見直す」など設定して、なんとか入れるようにお願いすることが一般的です。それでも、「なんとかしてSwitchやPS版ユーザにもサーバで快適に遊んでほしい」という思いから、サーバ側で設定できそうな項目を色々試したりしました。様々な設定がある中で、比較的簡単にできること、かつ有用だと思われる策を試したりしました。

もしかしたら他にも色々検証している方がいるかも知れませんが、備忘録として残しておきます。「もっとこんな設定もいいよ!」とかあれば教えていただけるとありがたいです。

改善案

策として有効そうなものを挙げてみます。

不必要なプラグインは抜く

なんだかんだ忘れがちなのがコレ。特に、「goBrush」「Voxel Sniper」のような地形生成のみでしか使わないような重量級プラグインはサーバが重くなる原因です。地形生成中はすごく便利ですが、サーバ運用期間中は抜いておいたほうが良いでしょう。もちろん必要なプラグインはしっかり入れましょう。

Spigotではなく、PaperMC / Purpurのような軽量化されたサーバを利用する

サーバを運用する前に見直しておきたい部分はここです。そもそもPaperMCやPurperはSpigotを軽量化 (メモリ消費量削減、サーバ負荷削減など) したサーバプログラムです。もしまだSpigotを使われている方はこれを機に見直すのもありかもしれません。

spigot.yml の設定で view-distance や simulation-distance を下げる

今回試してみて特に影響が大きい設定でした。

設定するとサーバ側の描画距離が短くなってしまうため、「遠くが見えなくなってしまう」というデメリットがあります。Java版プレイヤーであれば「bobby」MODなどクライアント側の描画距離で表示するMODを導入するようにすれば、この課題はある程度は回避可能です。

適度に軽量化するのであれば、view-distance はデフォルトの10 (7未満はおすすめしません)、 simulation-distanceは 6 くらいがおすすめです。

world-settings:
  default:
    view-distance: 10
    simulation-distance: 6

Bobby : modrinth.com

この他にも、同じymlファイルでいえばMobの湧き率を調整するなどの効果も大きいです。ただ、ゲーム性に関わったりするので、あまりおすすめはできなさそうでした。

server.properties の network-compression-threshold を調整する

気持ち改善するかな?というような設定です。

この設定は、ネットワーク通信の圧縮率を設定します。パケットのサイズが設定したしきい値を超えたなら圧縮され、それ以下ならそのまま送信する設定です。デフォルトは256ですが、2倍近い512とかに設定してもいいと思います。通信内容の圧縮化をすることで、通信サイズが小さくなって一見良さそうですが、かえってラグの原因になるので適度な調整が良さそうです。

network-compression-threshold=512

必要十分なサイズのメモリ割当を行う

おそらくまず考えそうなところなので、念のため。例えば、50人入るようなサバイバルサーバで4GBしかない、というようなケースではメモリの増設が効果的になるケースはあります。ある程度まではメモリの増設は効果がありますが、必要以上に増やしすぎるとこの効果はかなり限定的になるばかりか、かえって悪影響を及ぼすことがあります。なぜなら、定期的にメモリを開放する際に、一度に処理が走りすぎてかえって負荷が高くなるリスクがあるためです。

メモリサイズ ユースケース
2GB 少人数の仲間内の小さなサーバ (このケースなら、Realmsの方が簡単)、評価用のサーバ
4GB 10人規模の通常のバニラサーバ
8GB 中規模のバニラサーバ
16GB 大規模のバニラサーバ、小規模なMODサーバ
32GB以上 大規模なMODサーバ

以上です。他にも有効そうな設定があったらコメントとかで教えていただけるとありがたいです。

おまけ : 「CubeCraft」だけは特殊? なサーバ事情

ここからはおまけの情報共有です。

Switchからクロスサーバにアクセスする場合は、任意の「特集サーバ」にアクセスし、そこを踏み台にして BedrockConnect 経由でアクセスする、という手段となります。しかし、正確には任意ではありません。この「特集サーバ」のうち、唯一「CubeCraft」にアクセスした場合だけ BedrockConnect にアクセスできません。この場合は普通に CubeCraft のサーバに入ってしまう現象がありました。

理由はわかりませんが、おそらくCubeCraft自身が Java / 統合版クロスサーバの仕組みを独自で持っていることが要因であると考えられます。なにより現在は CubeCraft 自身が GeyserMC のプロジェクトを統括している大元である関係もあるようです。興味ある人は以下のサイトも見てみてください。

www.cubecraft.net

【Minecraft Server】検証 : GeyserMCでの統合版ユーザのホワイトリスト登録

コマナズです。記事を書くのが随分お久しぶりとなってしまいました。今回はいつもと違って、Minecraftサーバの運用者をターゲットにしたお話をします。

  • 背景
    • 参考資料
  • 課題 : 統合版プレイヤーでたまにホワイトリストに登録できないプレイヤーがいる
  • 前提 : XBOXゲーマータグがわかること
  • 登録方法

背景

近頃はMinecraftの統合版(スマホ、Switch1/2、PS4/5 ) のユーザが急激に増ています。一方で、利便性の面やMOD等のカスタマイズ性から、Java版のプレイヤーも十分な数存在します。そこで、GeyserMC を使って Java版 と 統合版 のプレイヤーを同じサーバで一緒にプレイさせたいケースも増えてきています。

その中で今回のテーマは、GeyserMC を使ったホワイトリストの登録における課題点と解決方法を記載します。

※本記事では GeyserMC の導入方法については割愛しています。導入方法は調べてね。

参考資料

課題 : 統合版プレイヤーでたまにホワイトリストに登録できないプレイヤーがいる

今回の課題は、統合版プレイヤーでホワイトリストに登録できる人とできない人がいる ことです。

Java版のユーザであれば、ホワイトリストの登録はさほど苦労しません。whitelistコマンドでユーザを登録するだけです。しかし、統合版は本来Java版のサーバに入ることができません。そこで、GeyserMCによる統合版ユーザが入れるようにする仕組みが使われれています。

そのため、どうすれば確実にホワイトリストに登録することができるか、登録方法を調べる必要がありました。

続きを読む

【雑談】マイクラ建築勢になって10年になった話

コマナズです。

いつもこんなYoutuberでもなんでもない人の応援してくださっていつもありがとうございます。

普段は先々のことばかり意識を向けるようにして、あえて過去のことはあまり話さないようにしています。普段はそのほうが人との関係も良好になりますし。しかし、流石に例の日から10年経ったのでそれでももし私のことが気になっている、という方に向けてちょっと文を書いてみようと思います。配信者なら雑談枠でやるような話です。

続きを読む

【Minecraft Spigot Plugin】 KMMoveAssist - プレイヤー移動補助プラグイン

KMMoveAssist は、Minecraft Java Edition 1.21 以降向けの Spigot サーバ用 Plugin です。

アイテムを使って、プレイヤーを指定した距離分だけ瞬時に移動できる機能を提供します。

youtu.be

対応バージョン

機能

  • 右クリックで移動:
    • アイテム(デフォルトは時計)を持って右クリックすると、プレイヤーの向いている方向に移動します。
    • デフォルトの移動距離は20ブロックです。
    • 移動先がブロックである場合、ブロックの上方にある移動可能な位置に移動します。
    • ワールドの高度下限を下回る位置 (いわゆる奈落) には移動しません。
  • 左クリックで移動距離を変更:
    • アイテム(デフォルトは時計)を持って左クリックすると、右クリックしたときの移動距離を変更できます。
    • 移動距離は20、40、80、160ブロックの4段階で設定できます。

設定

  • 移動に使用するアイテムは、config.ymlファイルを編集することで変更できます。
move-item: CLOCK

権限

Spigotのpermission.ymlで、以下の権限を設定できます。デフォルトでは、どちらの権限もOP権限のみです。

  • kmmoveassist.move: 右クリックで移動する権限を付与します。
  • kmmoveassist.setdistance: 左クリックで移動距離を設定する権限を付与します。

ダウンロード

インストール

  • 通常のSpigot Pluginの同様の手順でインストール可能です。
    1. KMMoveAssistの.jarファイルをダウンロードします。
    2. .jarファイルをSpigotサーバのpluginsフォルダに配置します。
    3. Spigotサーバを再起動します。

ライセンス

  • この Plugin はMIT License のもとでライセンスされています。

その他

【Minecraft Spigot Plugin】 KMPainting - 絵画を切り替えるプラグイン

KMPainting は、Minecraft Java Edition 1.20.1~4 および 1.21 以降向けの Spigot サーバ用 Plugin です。

プレイヤーが貼り付ける絵画を簡単に切り替えられる機能を提供します。

youtu.be

対応バージョン

  • Minecraft Java Edition 1.20 - 1.24, 1.21 -
    • 注意: 1.19以下、1.20.5, 6は動作確認対象外です
  • Spigot / Paper サーバ

機能

  • 右クリックで絵画を切替え:
    • 絵画を手に持った状態で貼ってある絵画を右クリックすると、順番に絵画が切り替わります。
  • 左クリックで逆順に絵画に切替え:
    • 絵画を手に持った状態で貼ってある絵画を左クリックすると、右クリックとは逆順に絵画が切り替わります。
  • 壁の面積が狭いときは、貼り付け可能な絵画にのみ切り替わります。
  • 特に権限等の設定はありません。今後の要望次第では追加します。

ダウンロード

下記ページのAssetsから.jarファイルをダウンロードしてください

Ver 1.0

インストール

  • 通常のSpigot Pluginの同様の手順でインストール可能です。
    1. KMPaintingの.jarファイルをダウンロードします。
    2. .jarファイルをSpigotサーバのpluginsフォルダに配置します。
    3. Spigotサーバを再起動します。

ライセンス

  • この Plugin はMIT License のもとでライセンスされています。

その他

【Minecraft】 Axiom 補足 : Script Brush で自分だけのブラシを作る

Minecraftのワールド編集MOD「Axiom」のScript Brush (スクリプトブラシ) について詳しく解説します。

注意

  • 本記事は、Axiom Ver.3.0.0 (Minecraft 1.20.X) 現在の状況について記載しています。AxiomのMODについては、こちらの記事を参照してください。 komnazsk.hatenablog.jp
  • 本記事はプログラミングに関する内容を扱います。少しでもプログラミングに触ったことがある人なら、よく読めばきっと理解できると思います。逆に、全くプログラミングに触れたことがない人だとかなり難しい内容かもしれません。
  • 注意
  • Script Brush の概要
    • Script Brushのサンプル
  • チュートリアル
    • ブロックの置き換え
    • 条件分岐
    • 入力値を与える
    • ライブラリを使ってみる
    • 右クリックで1回適用されるブラシ
    • 色々とできるようになると・・・
  • 仕様
    • 参考情報
    • Axiomの変数
    • AxiomのAPI
    • Axiomテンプレート変数

Script Brush の概要

AxiomのScript Brushは、通常のブラシでは実現できない自分だけのブラシを作ることができる機能です。

Script Brushは、「Lua」と呼ばれるPythonに似たプログラミング言語を使用します。Axiom以外のMinecraftのMODでは、「ComputerCraft」のプログラミング言語としても採用されています。

AxiomではScript Brush以外にも、ブラシをかける条件を指定する「マスク」に対してもLua言語でプログラミングすることができます(マスクは本記事の対象外です)。

Script Brushのサンプル

Script Brushで実現可能なブラシは多種多様です。以下は、サンプルに入っているPresetsのブラシの一覧です。まずは実際にさわってどんな事ができるか確かめてみると良いでしょう。

Presets 説明
Clear Foliage 指定範囲を除草します。
Grass 指定範囲に草を生やします。草の種類はユーザが指定できます。
Flowers マウスを右クリックするたびに、ランダムで花を咲かせるブラシです。
Heart マウスを右クリックすると、赤い巨大なハートの立体を生成します。
Kelp 指定範囲の水中に昆布を生やすブラシです。
Leafy Bushes マウスを右クリックすると、葉ブロックを一定範囲に設置します。
Terrain: Desert 指定範囲の地面を砂漠バイオームの地層に置き換えます。
Terrain: Plains 指定範囲の地面を草原バイオームの地層に置き換えます。
Vines 指定範囲の壁にツタを生やします。
続きを読む