この項目では、IC2Cropシステムの作物種を追加するためのModを作成するために有用な情報を載せる。
ModのId(識別子)である。それ以上でもそれ以下でもない(文字列型なので比較はできない)。
農業革命からIC2Cropでは整数なIdではなく文字列のIdであるこれが重要な識別子となった。
IC2ExpのAPIであるic2.api.crops.*は必須である。これは、APIパックやDev版のJenkinsのJarの中に入っている。
Gregのポータブルスキャナやクリエイティブモード、IC2をinDevにすることで得られる影響をデバッガとして利用可能。
また、新PluginCropsは開発者向けのクリエイティブ専用デバッガアイテムを多く含む。
本記事群産のアドオン。書き方がカオスだが、サンプルコードとしても一応使えると思う。
Cropの追加処理はmiragecrops6.InitializerCropsに存在する。miragecrops6.crop.CropCardMirageCropsがこのMod唯一のCropCard継承クラスである。miragecrops6.crop.HCropCardMirageCropsには、CropCardMirageCropsに対して、各種作物種の特殊な機能を与えるためのヘルパが詰まっている。
CropCardクラスの仕様にまとめた。
以下は追加部分のコーディングサンプルである。sampleCropという内部名で、土や石ブロックのテクスチャを持ったTier4で砂糖を収穫できる作物種を追加する。
CropCardクラスは抽象メソッドが多いので、大量に追加したい場合はそこらへんをうまいことやるとよい。
このコードは、@Modが付いたクラスに設置する用のメソッド形式である。青字部分が実際の追加処理になるので、件のイベントの処理に最低限これだけ並べればよい。
@EventHandler
public void handle(FMLInitializationEvent event)
{
Crops.instance.registerCrop(new CropCard() {
@Override
public String displayName()
{
return "crop." + name() + ".name";
}
@Override
public String name()
{
return "sampleCrop";
}
@Override
public int tier()
{
return 4;
}
@Override
public int stat(int n)
{
if (n == 0) return 4;
if (n == 1) return 3;
if (n == 2) return 2;
if (n == 3) return 1;
if (n == 4) return 0;
return 0;
}
@Override
public String[] attributes()
{
return new String[] {
"Sample",
};
}
@Override
public int maxSize()
{
return 4;
}
@Override
public boolean canGrow(ICropTile crop)
{
return crop.getSize() < maxSize();
}
@Override
public int getOptimalHavestSize(ICropTile crop)
{
return maxSize();
}
@Override
public boolean canBeHarvested(ICropTile crop)
{
return crop.getSize() == maxSize();
}
@Override
public ItemStack getGain(ICropTile crop)
{
return new ItemStack(Items.sugar);
}
@Override
public IIcon getSprite(ICropTile crop)
{
if (crop.getSize() == 1) return
Blocks.dirt.getBlockTextureFromSide(0);
if (crop.getSize() == 2) return
Blocks.stone.getBlockTextureFromSide(0);
if (crop.getSize() == 3) return
Blocks.cobblestone.getBlockTextureFromSide(0);
if (crop.getSize() == 4) return
Blocks.iron_block.getBlockTextureFromSide(0);
return super.getSprite(crop);
}
});
}