提供: Minecraft Modding Wiki
(→BehaviorSampleDispenseCore.java: インデントを上とあわせたけれど、左詰の方が見やすいのかな?) |
ModderKina (トーク | 投稿記録) 細 (→BehaviorSampleDispenseCore.java) |
||
(同じ利用者による、間の2版が非表示) | |||
38行目: | 38行目: | ||
double z = iposition.getZ();// | double z = iposition.getZ();// | ||
world.spawnEntityInWorld(new EntityLightningBolt(world,x,y,z));//雷を出す | world.spawnEntityInWorld(new EntityLightningBolt(world,x,y,z));//雷を出す | ||
− | + | var2.stackSize--;//アイテムをひとつ減らす | |
+ | return var2; | ||
} | } | ||
}); | }); | ||
48行目: | 49行目: | ||
===BehaviorSampleDispenseCore.java=== | ===BehaviorSampleDispenseCore.java=== | ||
<source lang = "java"> | <source lang = "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));//雷を出す | |
− | + | --var2.stackSize;//アイテムをひとつ減らす | |
− | + | return var2; | |
− | + | } | |
+ | }); | ||
</source> | </source> | ||
BlockDispenser.dispenseBehaviorRegistry.putObjectの引数は(Item,IBehaviorDispenseItem)となっている。(見た目にはどちらもObjectとされている)<br> | BlockDispenser.dispenseBehaviorRegistry.putObjectの引数は(Item,IBehaviorDispenseItem)となっている。(見た目にはどちらもObjectとされている)<br> |
2016年2月10日 (水) 17:29時点における最新版
この記事は"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));//雷を出す --var2.stackSize;//アイテムをひとつ減らす return var2; } });
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がある。