提供: Minecraft Modding Wiki
移動先: 案内検索
(カテゴリの追加)
 
(3人の利用者による、間の8版が非表示)
1行目: 1行目:
{{前提MOD|reqmod="ModLoader及びMinecraftForge"}}
+
{{前提MOD|reqmod="ModLoader1.2.3以降"}}
1.23からUpdateで1.24が来た場合BlockID,ItemIDの書き方に変更があるかもしれないので、1.1を基準に記述してます。<br/>
 
 
設定ファイルの生成方法は3種類あり、それぞれ使い勝手が違います。<br/>
 
設定ファイルの生成方法は3種類あり、それぞれ使い勝手が違います。<br/>
  
15行目: 14行目:
 
{
 
{
 
   @MLProp(info="please assign an ID, hogeBlock", min = 1, max = 255)
 
   @MLProp(info="please assign an ID, hogeBlock", min = 1, max = 255)
   public static hogeBlockID = 111;
+
   public static int hogeBlockID = 111;
 
   @MLProp
 
   @MLProp
   public static hogeItemID = 5000;
+
   public static int hogeItemID = 5000;
 
   public static Block hogeBlock;
 
   public static Block hogeBlock;
 
   public static Item hogeItem;
 
   public static Item hogeItem;
  
   public mod_hoge
+
   public String getVersion()
 
   {
 
   {
 +
      return "1.1";
 
   }
 
   }
 
    
 
    
28行目: 28行目:
 
   {
 
   {
 
       hogeBlock = new Block(hogeBlockID, 1, Material.rock)
 
       hogeBlock = new Block(hogeBlockID, 1, Material.rock)
       ModLoader.RegisterBlock(hogeBlock);
+
       ModLoader.registerBlock(hogeBlock);
       ModLoader.AddName(hogeBlockID, "Hoge Block");
+
       ModLoader.addName(hogeBlockID, "Hoge Block");
  
 
       hogeItem = new Item(hogeItemID).setItemName("hogeItem");
 
       hogeItem = new Item(hogeItemID).setItemName("hogeItem");
 
       hogeItem.iconIndex = ModLoader.addOverride("/gui/items.png", "/item/hogeitem.png");
 
       hogeItem.iconIndex = ModLoader.addOverride("/gui/items.png", "/item/hogeitem.png");
       ModLoader.AddName(hogeItem, "Hoge Item");
+
       ModLoader.addName(hogeItem, "Hoge Item");
 
   }
 
   }
 
}
 
}
 +
</source>
 +
 +
==事前準備==
 +
<br />
 +
デコンパイルしただけの状態では、info,min,maxを設定しなければリコンパイル時にエラーが発生します。<br />
 +
そこで、これらを設定しなくとも正常にリコンパイルできるよう、MLPropクラスを書き換えます。<br />
 +
<br />
 +
ModLoader の 公式フォーラムのページで Modloader - Decompile Fixes の順にたどる<br />
 +
ダウンロードしてきた zip を McRoot\src\minecraft\net\minecraft\src\ に解凍<br />
 +
MLProp.java の 1行目 にあるスラッシュ2つを消して上書き保存<br />
 +
<source lang="java">
 +
//package net.minecraft.src;
 +
 +
</source>
 +
  '''↓'''
 +
<source lang="java">
 +
package net.minecraft.src;
 +
 
</source>
 
</source>
  
41行目: 59行目:
 
<source lang="java">
 
<source lang="java">
 
@MLProp(info="please assign an ID, hogeBlock", min = 1, max = 255)
 
@MLProp(info="please assign an ID, hogeBlock", min = 1, max = 255)
public static hogeBlockID = 111;
+
public static int hogeBlockID = 111;
 
@MLProp
 
@MLProp
public static hogeItemID = 5000;
+
public static int hogeItemID = 5000;
 
</source>
 
</source>
変更できるようにしたい変数の定義の前に"@MLProp"と記述するだけで設定ファイルから変更可能になります。<br/>
+
*変更できるようにしたい変数の定義の前に"@MLProp"と記述するだけで設定ファイルから変更可能になります。
その際、infoを設定することでヘルプ用コメントを表示させることができます。<br/>
+
*infoを設定することでヘルプ用コメントを表示させることができます。ただし日本語は使えません。
また、同じようにしてminで最小値、maxで最大値を設定することができます。<br/>
+
*minで最小値、maxで最大値を設定することができます。範囲外の数値が設定されている場合、初期値に変更されます。
範囲外の数値が設定されている場合、初期値に変更されます。<br/>
 
 
 
==事前準備==
 
 
 
デコンパイルしただけの状態では、info,min,maxを設定しなければリコンパイル時にエラーが発生します。<br/>
 
そこで、これらを設定しなくとも正常にリコンパイルできるよう、MLPropクラスを書き換えます。<br/>
 
  
 
=MinecraftForgeの機能を使用した方法=
 
=MinecraftForgeの機能を使用した方法=
  
 
MinecraftForgeの設定フアイルはModLoaderと以下の様な違いがあります。<br/>
 
MinecraftForgeの設定フアイルはModLoaderと以下の様な違いがあります。<br/>
・ファイル名、配置位置を変更できる<br/>
+
・ファイル名、配置パスを変更できる<br/>
 
・ブロックID、アイテムID、その他のカテゴリに分類される<br/>
 
・ブロックID、アイテムID、その他のカテゴリに分類される<br/>
  
79行目: 91行目:
 
     static int itemHogeShiftedIndex;
 
     static int itemHogeShiftedIndex;
  
    public mod_hoge()
+
  public String getVersion()
    {
+
  {
    }
+
      return "1.1";
 +
  }
  
 
     public void load()
 
     public void load()
128行目: 141行目:
 
     }
 
     }
 
</source>
 
</source>
configuration.load()でコンフィグファイルをロードします。
+
configuration.load()でコンフィグファイルをロードします。<br/>
2行目でコンフィグファイルで定義されているBlockIDを設定します。
+
2行目でコンフィグファイルで定義されているBlockIDを設定します。<br/>
getOrCreateBlockIdPropertyで対象ブロックに設定するものを定義します。
+
getOrCreateBlockIdPropertyで対象ブロックに設定するものを定義します。<br/>
数字123は初期定義値です。
+
数字123は初期定義値です。<br/>
3行目のgetOrCreateIntPropertyでは、前の行のgetOrCreateBlockIdPropertyの項目を使用しています。
+
3行目のgetOrCreateIntPropertyでは、前の行のgetOrCreateBlockIdPropertyの項目を使用しています。<br/>
数字の5000はhogeItemの初期ItemID(実際のデータは+256)です。
+
数字の5000はhogeItemの初期ItemID(実際のデータは+256)です。<br/>
configuration.save();でコンフィングファイルをセーブします。(よく忘れます。必ずセーブしましょう)
+
configuration.save();でコンフィングファイルをセーブします。(忘れやすいので注意)<br/>
最後に最初のBlockIDを返す必要があります。
+
最後に最初のBlockIDを返す必要があります。<br/>
  
 
=java標準の機能だけを使用する方法=
 
=java標準の機能だけを使用する方法=
143行目: 156行目:
 
今回はBlockID、ItemIDを設定させていますが、EntityIDや対象Blockの生成有無の判定にも使えますので、好きな方をお使いください。
 
今回はBlockID、ItemIDを設定させていますが、EntityIDや対象Blockの生成有無の判定にも使えますので、好きな方をお使いください。
  
<comments />
+
==cfgファイルが生成されるタイミング==
 +
;ModLoaderを利用した方法の場合
 +
*基本的にModの読み込みが正常に終了すれば生成されます。
 +
*逆に言うと競合などが原因でMODの導入に失敗する場合生成されないので、cfgファイルによって競合回避を促す場合には注意が必要です。
 +
**modを導入するにはcfgを書き換える必要があり、cfgを生成するには導入に成功する必要がある矛盾が発生する。
 +
*この問題は、modのzipファイルにデフォルトのcfgファイルを同梱することで解決できます。
 +
**cfgファイルが同梱されていれば、ユーザーは手動でcfgファイルを導入できる。
 +
**同時に使用IDを配布場所に明記しておくのも有効。IDが既知であれば導入前に競合の有無を判別できる。
 +
 
 +
[[category:その他]]

2012年10月25日 (木) 18:15時点における最新版

この記事は"ModLoader1.2.3以降"を前提MODとしています。

設定ファイルの生成方法は3種類あり、それぞれ使い勝手が違います。

ModLoaderの機能を使用した方法[編集]

最も簡単な方法ですが、後述の事前準備が必要となります。

サンプルソース[編集]

package net.minecraft.src;

public class mod_hoge extends BaseMod
{
   @MLProp(info="please assign an ID, hogeBlock", min = 1, max = 255)
   public static int hogeBlockID = 111;
   @MLProp
   public static int hogeItemID = 5000;
   public static Block hogeBlock;
   public static Item hogeItem;

   public String getVersion()
   {
      return "1.1";
   }
   
   public void load
   {
      hogeBlock = new Block(hogeBlockID, 1, Material.rock)
      ModLoader.registerBlock(hogeBlock);
      ModLoader.addName(hogeBlockID, "Hoge Block");

      hogeItem = new Item(hogeItemID).setItemName("hogeItem");
      hogeItem.iconIndex = ModLoader.addOverride("/gui/items.png", "/item/hogeitem.png");
      ModLoader.addName(hogeItem, "Hoge Item");
   }
}

事前準備[編集]


デコンパイルしただけの状態では、info,min,maxを設定しなければリコンパイル時にエラーが発生します。
そこで、これらを設定しなくとも正常にリコンパイルできるよう、MLPropクラスを書き換えます。

ModLoader の 公式フォーラムのページで Modloader - Decompile Fixes の順にたどる
ダウンロードしてきた zip を McRoot\src\minecraft\net\minecraft\src\ に解凍
MLProp.java の 1行目 にあるスラッシュ2つを消して上書き保存

//package net.minecraft.src;
…

  

package net.minecraft.src;
…

解説[編集]

@MLProp(info="please assign an ID, hogeBlock", min = 1, max = 255)
public static int hogeBlockID = 111;
@MLProp
public static int hogeItemID = 5000;
  • 変更できるようにしたい変数の定義の前に"@MLProp"と記述するだけで設定ファイルから変更可能になります。
  • infoを設定することでヘルプ用コメントを表示させることができます。ただし日本語は使えません。
  • minで最小値、maxで最大値を設定することができます。範囲外の数値が設定されている場合、初期値に変更されます。

MinecraftForgeの機能を使用した方法[編集]

MinecraftForgeの設定フアイルはModLoaderと以下の様な違いがあります。
・ファイル名、配置パスを変更できる
・ブロックID、アイテムID、その他のカテゴリに分類される

サンプルソース[編集]

package net.minecraft.src;

import java.io.File;
import java.util.*;
import net.minecraft.client.Minecraft;
import net.minecraft.src.forge.*;

public class mod_hoge extends BaseMod
{
    static Configuration configuration;
    static Block hogeBlock;
    static int hogeBlockID;
    static Item hogeItem;
    static int itemHogeShiftedIndex;

   public String getVersion()
   {
      return "1.1";
   }

    public void load()
    {
        configuration = new Configuration(new File(Minecraft.getMinecraftDir(), "config/hoge.cfg"));
        hogeBlockID = configurationProperties();
        hogeBlock = new Block(hogeBlockID, ModLoader.addOverride("/terrain.png", "/block/hogeBlock.png"));
        //ItemIDはBlockIDのMAX値256から減算した値がItemIDになるので-256をしています。
        hogeItem = new Item(itemHogeShiftedIndex - 256, "/gui/items.png", "/item/hogeItem.png").setItemName("hogeItem");
        ModLoader.RegisterBlock(hogeBlock);
        ModLoader.AddName(hogeBlock, "Hoge Block");
        ModLoader.AddName(hogeItem, "Hoge Item");
    }

    public String getVersion()
    {
        return "1.0.0";
    }

    private int configurationProperties()
    {
        configuration.load();
        hogeBlockID = Integer.parseInt(configuration.getOrCreateBlockIdProperty("Hoge Block", 123).value);
        itemHogeShiftedIndex = Integer.parseInt(configuration.getOrCreateIntProperty("Hoge Item", Configuration.ITEM_PROPERTY, 5000).value);
        configuration.save();
        return hogeBlockID;
    }
}

解説[編集]

configuration = new Configuration(new File(Minecraft.getMinecraftDir(), "config/hoge.cfg"));
hogeBlockID = configurationProperties();

configurationファイルを設定します。
FileメソッドでMinecraftのconfig/hoge/cfgファイルを参照することを定義しています。
BlockIDはconfigurationProperties();でコンフィグファイルから取って来いという宣言です。

private int configurationProperties()
    {
        configuration.load();
        hogeBlockID = Integer.parseInt(configuration.getOrCreateBlockIdProperty("Hoge Block", 123).value);
        itemHogeShiftedIndex = Integer.parseInt(configuration.getOrCreateIntProperty("Hoge Item", Configuration.ITEM_PROPERTY, 5000).value);
        configuration.save();
        return hogeBlockID;
    }

configuration.load()でコンフィグファイルをロードします。
2行目でコンフィグファイルで定義されているBlockIDを設定します。
getOrCreateBlockIdPropertyで対象ブロックに設定するものを定義します。
数字123は初期定義値です。
3行目のgetOrCreateIntPropertyでは、前の行のgetOrCreateBlockIdPropertyの項目を使用しています。
数字の5000はhogeItemの初期ItemID(実際のデータは+256)です。
configuration.save();でコンフィングファイルをセーブします。(忘れやすいので注意)
最後に最初のBlockIDを返す必要があります。

java標準の機能だけを使用する方法[編集]

まとめ[編集]

MLPropかForgeでのConfigファイル生成かは好みが分かれると思います。
今回はBlockID、ItemIDを設定させていますが、EntityIDや対象Blockの生成有無の判定にも使えますので、好きな方をお使いください。

cfgファイルが生成されるタイミング[編集]

ModLoaderを利用した方法の場合
  • 基本的にModの読み込みが正常に終了すれば生成されます。
  • 逆に言うと競合などが原因でMODの導入に失敗する場合生成されないので、cfgファイルによって競合回避を促す場合には注意が必要です。
    • modを導入するにはcfgを書き換える必要があり、cfgを生成するには導入に成功する必要がある矛盾が発生する。
  • この問題は、modのzipファイルにデフォルトのcfgファイルを同梱することで解決できます。
    • cfgファイルが同梱されていれば、ユーザーは手動でcfgファイルを導入できる。
    • 同時に使用IDを配布場所に明記しておくのも有効。IDが既知であれば導入前に競合の有無を判別できる。