提供: Minecraft Modding Wiki
移動先: 案内検索

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 編集中の文章
1行目: 1行目:
{{前提MOD|reqmod="ModLoader1.2.3以降"}}
+
このページは<br/>
設定ファイルの生成方法は3種類あり、それぞれ使い勝手が違います。<br/>
+
・ModLoader<br/>
 +
・MinecraftForge<br/>
 +
を使っていることを前提に書かれています。<br/>
 +
また、1.23からUpdateで1.24が来た場合BlockID,ItemIDの書き方に変更があるかもしれないので<br/>
 +
1.1を基準に記述してます。<br/>
 +
MLPropを使う場合は、ModLoaderAPIに記載してありますのでそちらを確認ください。
  
=ModLoaderの機能を使用した方法=
+
作成するクラス<br/>
 +
mod_hoge<br/>
  
最も簡単な方法ですが、後述の事前準備が必要となります。<br/>
+
==ソース解説==
  
==サンプルソース==
+
===mod_hogeクラス作成===
 
 
<source lang="java">
 
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");
 
  }
 
}
 
</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 lang="java">
 
@MLProp(info="please assign an ID, hogeBlock", min = 1, max = 255)
 
public static int hogeBlockID = 111;
 
@MLProp
 
public static int hogeItemID = 5000;
 
</source>
 
*変更できるようにしたい変数の定義の前に"@MLProp"と記述するだけで設定ファイルから変更可能になります。
 
*infoを設定することでヘルプ用コメントを表示させることができます。ただし日本語は使えません。
 
*minで最小値、maxで最大値を設定することができます。範囲外の数値が設定されている場合、初期値に変更されます。
 
 
 
=MinecraftForgeの機能を使用した方法=
 
 
 
MinecraftForgeの設定フアイルはModLoaderと以下の様な違いがあります。<br/>
 
・ファイル名、配置パスを変更できる<br/>
 
・ブロックID、アイテムID、その他のカテゴリに分類される<br/>
 
 
 
==サンプルソース==
 
  
 
<source lang="java">
 
<source lang="java">
85行目: 24行目:
 
public class mod_hoge extends BaseMod
 
public class mod_hoge extends BaseMod
 
{
 
{
    static Configuration configuration;
+
  static Configuration configuration;
    static Block hogeBlock;
+
  static Block hogeBlock;
    static int hogeBlockID;
+
  static int hogeBlockID;
    static Item hogeItem;
+
  static Item hogeItem;
    static int itemHogeShiftedIndex;
+
  static int itemHogeShiftedIndex;
 +
 
 +
  public mod_hoge()
 +
  {
 +
  }
 +
 
 +
  public void load()
 +
  {
 +
  /*
 +
    * configurationファイルを設定します。
 +
    * FileメソッドでMinecraftのconfig/hoge/cfgファイルを参照することを定義しています。
 +
    */
 +
  configuration = new Configuration(new File(Minecraft.getMinecraftDir(), "config/hoge.cfg"));
 +
  /*
 +
  * BlockIDはconfigurationProperties();でコンフィグファイルから取って来いという宣言です。
 +
  */
 +
      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()
 
   public String getVersion()
 
   {
 
   {
       return "1.1";
+
       return "1.0.0";
 
   }
 
   }
  
    public void load()
+
  private int configurationProperties()
    {
+
  {
        configuration = new Configuration(new File(Minecraft.getMinecraftDir(), "config/hoge.cfg"));
+
  /*
        hogeBlockID = configurationProperties();
+
    * configuration.load()でコンフィグファイルをロードします。
        hogeBlock = new Block(hogeBlockID, ModLoader.addOverride("/terrain.png", "/block/hogeBlock.png"));
+
    * 2行目でコンフィグファイルで定義されているBlockIDを設定します。
        //ItemIDはBlockIDのMAX値256から減算した値がItemIDになるので-256をしています。
+
    * getOrCreateBlockIdPropertyで対象ブロックに設定するものを定義します。
        hogeItem = new Item(itemHogeShiftedIndex - 256, "/gui/items.png", "/item/hogeItem.png").setItemName("hogeItem");
+
    * 数字123は初期定義値です。
        ModLoader.RegisterBlock(hogeBlock);
+
    * 3行目のgetOrCreateIntPropertyでは、前の行のgetOrCreateBlockIdPropertyの項目を使用しています。
        ModLoader.AddName(hogeBlock, "Hoge Block");
+
    * 数字の5000はhogeItemの初期ItemID(実際のデータは+256)です。
        ModLoader.AddName(hogeItem, "Hoge Item");
+
    * configuration.save();でコンフィングファイルをセーブします。(よく忘れます。必ずセーブしましょう)
    }
+
    * 最後に最初のBlockIDを返す必要があります。
 
+
  */
    public String getVersion()
+
      configuration.load();
    {
+
      hogeBlockID = Integer.parseInt(configuration.getOrCreateBlockIdProperty("Hoge Block", 123).value);
        return "1.0.0";
+
      itemHogeShiftedIndex = Integer.parseInt(configuration.getOrCreateIntProperty("Hoge Item", Configuration.ITEM_PROPERTY, 5000).value);
    }
+
      configuration.save();
 
+
      return hogeBlockID;
    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;
 
    }
 
 
}
 
}
 
</source>
 
</source>
==解説==
 
<source lang="java">
 
configuration = new Configuration(new File(Minecraft.getMinecraftDir(), "config/hoge.cfg"));
 
hogeBlockID = configurationProperties();
 
</source>
 
configurationファイルを設定します。<br/>
 
FileメソッドでMinecraftのconfig/hoge/cfgファイルを参照することを定義しています。<br/>
 
BlockIDはconfigurationProperties();でコンフィグファイルから取って来いという宣言です。<br/>
 
<source lang="java">
 
    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;
 
    }
 
</source>
 
configuration.load()でコンフィグファイルをロードします。<br/>
 
2行目でコンフィグファイルで定義されているBlockIDを設定します。<br/>
 
getOrCreateBlockIdPropertyで対象ブロックに設定するものを定義します。<br/>
 
数字123は初期定義値です。<br/>
 
3行目のgetOrCreateIntPropertyでは、前の行のgetOrCreateBlockIdPropertyの項目を使用しています。<br/>
 
数字の5000はhogeItemの初期ItemID(実際のデータは+256)です。<br/>
 
configuration.save();でコンフィングファイルをセーブします。(忘れやすいので注意)<br/>
 
最後に最初のBlockIDを返す必要があります。<br/>
 
 
=java標準の機能だけを使用する方法=
 
 
=まとめ=
 
MLPropかForgeでのConfigファイル生成かは好みが分かれると思います。<br/>
 
今回はBlockID、ItemIDを設定させていますが、EntityIDや対象Blockの生成有無の判定にも使えますので、好きな方をお使いください。
 
  
==cfgファイルが生成されるタイミング==
+
ざっとソースに説明文を書きましたが、MLPropかForgeでのConfigファイル生成かは<br/>
;ModLoaderを利用した方法の場合
+
タイプが分かれると思います。<br/>
*基本的にModの読み込みが正常に終了すれば生成されます。
+
今回はBlockID、ItemIDを設定させていますが、<br/>
*逆に言うと競合などが原因でMODの導入に失敗する場合生成されないので、cfgファイルによって競合回避を促す場合には注意が必要です。
+
EntityIDや対象Blockの生成有無の判定にも使えますので、好きな方をお使いください。
**modを導入するにはcfgを書き換える必要があり、cfgを生成するには導入に成功する必要がある矛盾が発生する。
 
*この問題は、modのzipファイルにデフォルトのcfgファイルを同梱することで解決できます。
 
**cfgファイルが同梱されていれば、ユーザーは手動でcfgファイルを導入できる。
 
**同時に使用IDを配布場所に明記しておくのも有効。IDが既知であれば導入前に競合の有無を判別できる。
 
  
[[category:その他]]
+
<comments />

Minecraft Modding Wikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMinecraft Modding Wiki:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)

このページで使用されているテンプレート: