OptiFine のランダムエンティティについてのお勉強メモ

###############################################################################

OptiFineのランダムエンティティ機能の設定例。

MCPatcherのRandomMobsmodの構成に基づきます。

###############################################################################

一つのモデルに対して複数のテクスチャを紐づけします。それらを確率や様々な条件に応じて任意に適用させる為の方法が以下のものになります。

 

Random Entitiesは、RandomMobsと下位互換性があります。

また、「assets / minecraft / optifine / mob」に配置したテクスチャも認識します。

 

ここで説明するランダム表示させたいテクスチャファイルは、リソースパックの「optifine / random」フォルダーに配置します。

その際、ランダムテクスチャを読み込ませるためにはバニラと同じフォルダ構成の「textures」フォルダを用意し、使用するモデルに応じたテクスチャの配置が必要になります。

つまり、

assets/minecraft/optifine/cem/(jemファイル:モデルの変更から行う場合)

                                       /random/entity/ランダム表示させたいテクスチャ

                          /textures/entity/ランダム表示させるテクスチャのバニラテクスチャ

という構成を用意する必要があります。この際、cowやhorseの様にバニラではそれぞれのフォルダにテクスチャが配置されているMobは、ランダム表示用のテクスチャも同様のフォルダ構成にする必要があります。

 

更にランダム表示させるテクスチャと同階層に○○.propertiesとしたテキストファイルを配置し、後述する形式の記述をすることで様々な条件付けを行うことが出来ます。

*この様に配置した場合、バニラのテクスチャとランダム表示用のテクスチャがどちらも適用されます。もしバニラのテクスチャを一切使用したくない場合は、バニラテクスチャを配置する代わりに変更を加えたランダム表示用のテクスチャを配置するか、後述するpropertiesファイルでバニラテクスチャを表示から除外する必要があります。

###############################################################################

ランダムエンティティのフォルダ構成

クリーパーを使用した実例

assets/minecraft/textures/entity/creeper/creeper.png 

↑ランダム表示用のテクスチャを読み込ませるために必要

assets/minecraft/optifine/random/entity/creeper/creeper2.png

assets/minecraft/optifine/random/entity/creeper/creeper3.png

assets/minecraft/optifine/random/entity/creeper/creeper4.png

↑各種、変更されたクリーパーのテクスチャを配置

assets/minecraft/optifine/random/entity/creeper/creeper.properties

↑テクスチャの適用に条件を追加したい場合に配置

 

絵画を使用した実例

assets/minecraft/textures/painting/paintings_kristoffer_zetterstrand.png

↑ランダム表示用のテクスチャを読み込ませるために必要

assets/minecraft/optifine/random/painting/paintings_kristoffer_zetterstrand2.png

assets/minecraft/optifine/random/painting/paintings_kristoffer_zetterstrand3.png

assets/minecraft/optifine/random/painting/paintings_kristoffer_zetterstrand4.png

↑各種、変更された絵画のテクスチャを配置

assets/minecraft/optifine/random/painting/paintings_kristoffer_zetterstrand.properties

↑テクスチャの適用に条件を追加したい場合に配置

###############################################################################

ランダム表示に関する適用条件は、1から番号が付けられた一連のルールで構成されています。上記の例では1と番号づけられたテクスチャはありませんが、バニラのテクスチャとして配置された番号のないファイルを1として扱います。

各適用条件は、使用するエンティティテクスチャの番号と、それらを使用する為の1つ以上の条件を指定できます。

各エンティティは、スポーンするとき(シングルプレイヤーのワールド)またはクライアントに最初に表示されるとき(マルチプレイヤーのワールド)にあらかじめ設定された適用条件にあわせて調整され、順番に判定が行われます。

その際、最初に一致した条件がそのまま適用されます。 一致する適用条件がない場合は、デフォルトのテクスチャ(creeper.pngなどのバニラとして配置されたテクスチャ)が使用されます。

 

エンティティに「.properties」ファイルが存在しない場合、配置されたテクスチャがそのエンティティに等しく使用されます。

 

オオカミの様に複数のテクスチャを場合によって切り替えるエンティティは、ベーステクスチャの指定に「.properties」ファイルを使用します。 言い換えれば、あなたは

wolf.properties

wolf_tame.properties

wolf_angry.properties

といったものを作成する必要はありません。

wolf、wolf_tame、wolf_angryそれぞれに同じ番号のテクスチャがあれば、wolf.propertiesが3つすべてに対して同様に機能します。

「_eyes」と「_overlay」についても同様です。

すべてのプロパティ名では大文字と小文字が区別されます。

 

###############################################################################

適用条件のフォーマット

以下の説明で、<n>は1から始まります。

###############################################################################

(必須)使用するエンティティテクスチャの範囲

textures.<n>=<テクスチャインデックスのリスト>

テクスチャ「1」は、「assets / minecraft / texture」に配置されたテクスチャの事です。

skins.<n>=<スキンのリスト>

または、ランダムモブプロパティ「skins.<n>」を使用することもできます。

 

(オプション)ランダムに適用する際の偏りを調整する

weights.<n>=<偏りとテクスチャは同数の項目を用意する>

偏りは、合計100にしたり、その他の特定の値である必要はありません。

偏りの数は配置されたテクスチャの数と一致する必要があります

 

(オプション)適用させるバイオームのリスト

biomes.<n>=<バイオームリスト>

バニラバイオームの名前の一覧:https://minecraft.gamepedia.com/Biome#Biome_IDs

modsによって追加されたバイオームも使用できます。

 

(オプション)適用させる高さ(標高)の範囲

heights.<n>=<高さの範囲>

元々のminHeightプロパティとmaxHeightプロパティを置き換えます。

 

(オプション)エンティティ名

name.<n>=<名前>

カスタムアイテムテクスチャNBTタグと同様の構文を使用します。

「!」で始まる値 ネガティブな一致を実行します(或いは実行しません)。

例:

一致する文字列: "name=Pinky"

特別なフォーマットに一致: "name=\u00a74\u00a7oPinky"

(最高の互換性を得るには、エスケープシーケンスを使用してください '\u00a7' instead of "§")

「?」を使用したワイルドカード および「*」: "name=pattern:Pinky*"

ワイルドカード、大文字と小文字を区別しない: "name=ipattern:Pinky*"

Java正規表: "name=regex:Pin(k)+y"

(http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html を確認してください)

Java正規表現、大文字と小文字を区別しない: "name=iregex:Pin(k)+y"

一致する文字列のダブルスラッシュは2倍にする必要があります。

正規表現またはワイルドカード内のリテラルのバックスラッシュは、4倍にする必要があります。

正:

name=regex:\\d+

name=regex:\\\\

name=/\\/\\

誤:

name=regex:\d+

name=regex:\\

name=/\/\

(この項目がそもそも何のことについて書いてあるのか分かっていません…。エンティティに特定の名前を付けた際にだけ適用させる条件の設定?かな?)

 

(オプション)職業

professions.<n>=<professions>

オプションのレベルを持つ村人の職業のリスト

エントリーフォーマット

  <職業名>[:level1,level2,...]

職業:none, armorer, butcher, cartographer, cleric, farmer, fisherman, fletcher,

    leatherworker, librarian, mason, nitwit, shepherd, toolsmith, weaponsmith

例:

professions=farmer librarian:1,3-4

 職業農民(すべてのレベル)または司書(レベル1、3、4)

professions=minecraft:fisherman minecraft:shepherd minecraft:nitwit

 全職業

 

(オプション)首輪の色

collarColors.<n>=<colors>

オオカミ/猫の首輪の色のリスト

Colors: white orange magenta light_blue yellow lime pink gray light_gray

     cyan purple blue brown green red black

例:

colarColors=pink magenta purple 桃色、マゼンタ、紫の首輪をランダムで使用

 

(オプション)子ども

モブにのみ有効

baby.<n>=<true/false>

 

(オプション)ヘルス

health.<n>=<list>

ヘルスの状態に応じて適用させる

ヘルス値の範囲は、パーセントで指定することもできます。モブにのみ有効

例:

health.1=10 ヘルス条件1=ヘルス10の際に指定したテクスチャを使用

health.2=5-8 10-12 ヘルス条件2=ヘルスが5~8、10~12の場合に指定したテクスチャを使用

health.3=0-50% ヘルス条件3=ヘルスが0~50%の場合に指定したテクスチャ3を使用

 

(オプション)月齢

moonPhase.<n>=<list>

月齢に応じて適用させる 月齢は0~7の範囲

例:

moonPhase.1=3 月齢条件1=月齢3の時に指定したテクスチャを使用

moonPhase.2=0 1 2 月齢条件2=月齢0、1、2の時に指定したテクスチャを使用

moonPhase.1=0-2 4-7 月齢条件1=月齢が0~2 4~7の時に指定したテクスチャを使用

 

(オプション)時間

dayTime.<n>=<list>

一日の中の時間に応じてテクスチャを適用させる

一日の時間単位 ticks (0-24000)

例:

dayTime.1=2000-10000 時間条件1=2000ticks~10000ticksの間に指定したテクスチャを使用

dayTime.2=0-1000 18000-24000 時間条件2=0~1000ticks、18000~24000ticksの間に使用

 

(オプション)天候

weather.<n>=<clear|rain|thunder>

複数の値をスペースで区切って指定できます

例:

weather = clear rain thunder  晴天、雨天、雷雨時に指定したテクスチャを使用

 

###############################################################################

以上を踏まえた実例

creeper/creeper.properties:に以下を記述します

###############################################################################

地下でスポーンしたクリーパーには、creeper10.png~creeper14.pngを使用します。

creeper13.pngは7.3%(3 /(10 + 10 + 10 + 3 + 10))の確率で使用されます。

skins.1=10-14  適用条件1=10~14のテクスチャが対象

weights.1=10 10 10 3 10 上記のテクスチャは10:10:10:3:10の割合で適用される

heights.1=0-55  上記のテクスチャは高さ0~55の範囲でスポーンした場合に適用されます

 

標高が高いエリアでは5、7、9を使用します。

skins.2=5 7 9 適用条件2=5、7、9のテクスチャが対象

biomes.2=ExtremeHills DesertHills ForestHills ExtremeHillsEdge JungleHills IceMountains

    上記のテクスチャは指定のバイオームでスポーンした場合に適用される

heights.2=80-255 上記のテクスチャは高さ80~255でスポーンした場合に適用される

 

他に一致するものがない場合のフォールバックルール。

一致するルールが一つもない場合は、ベースのcreeper /creeper.pngのみが使用されることに注意してください。

skins.3=1-4 6 8 15-20 適用条件3=上記に当てはまらない場合、1~4、6,8,15~20のテクスチャをランダムで使用する

*こう指定しておかないと、通常のランダム表示に上で条件を絞ったテクスチャも適用されてしまう