提供: Minecraft Modding Wiki
この記事は"Minecraft Forge Universal 10.12.0.xxx~"を前提MODとしています。 |
ディスペンサー射出時の動作の指定
ディスペンサー射出時の動作の指定方法
ソースコード
- BehaviorSampleDispenseCore.java
package mods.dispensesample; import net.minecraft.block.BlockDispenser; import net.minecraft.dispenser.IBehaviorDispenseItem; import net.minecraft.dispenser.IBlockSource; import net.minecraft.dispenser.IPosition; import net.minecraft.init.Items; //import net.minecraft.item.Item; import net.minecraft.entity.effect.EntityLightningBolt; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.event.FMLInitializationEvent; @Mod(modid="DispenseSampleMod", name="DispenseSampleMod", version="1.0") public class BehaviorSampleDispenseCore { @EventHandler public void init(FMLInitializationEvent event) { BlockDispenser.dispenseBehaviorRegistry.putObject(Items.stick,new IBehaviorDispenseItem(){ @Override public ItemStack dispense(IBlockSource var1, ItemStack var2){ World world = var1.getWorld();//World /*Item item = var2.getItem();*/ //Item IPosition iposition = BlockDispenser.func_149939_a(var1);//IPosition double x = iposition.getX();// double y = iposition.getY();//ディスペンサー射出口のところにある座標を取得 double z = iposition.getZ();// world.spawnEntityInWorld(new EntityLightningBolt(world,x,y,z));//雷を出す var2.stackSize--;//アイテムをひとつ減らす return var2; } }); } }
解説
BehaviorSampleDispenseCore.java
BlockDispenser.dispenseBehaviorRegistry.putObject(Items.stick,new IBehaviorDispenseItem(){ @Override public ItemStack dispense(IBlockSource var1, ItemStack var2){ World world = var1.getWorld();//World /*Item item = var2.getItem();*/ //Item IPosition iposition = BlockDispenser.func_149939_a(var1);//IPosition double x = iposition.getX();// double y = iposition.getY();//ディスペンサー射出口前の座標を取得 double z = iposition.getZ();// world.spawnEntityInWorld(new EntityLightningBolt(world,x,y,z));//雷を出す return var2.splitStack(var2.stackSize-1);//アイテムをひとつ減らす } });
BlockDispenser.dispenseBehaviorRegistry.putObjectの引数は(Item,IBehaviorDispenseItem)となっている。(見た目にはどちらもObjectとされている)
そのためブロックに適用したい場合はItem.getItemFromBlock(Blocks.xxx)などとすると良い。
WorldはIBlockSourceより取得できる。
最後のreturn文については、
スタックを減らしたくない場合は単純に
return var2;
とすれば良い。
耐久値を減らす場合は
var2.setItemDamage(var2.getItemDamage() + 1); return var2;
とするとできる。
参考になるバニラのソースとしては、net.minecraft.init.Bootstrap.javaがある。