提供: Minecraft Modding Wiki
(→BehaviorSampleDispenseCore.java: インデントを上とあわせたけれど、左詰の方が見やすいのかな?) |
ModderKina (トーク | 投稿記録) 細 (→BehaviorSampleDispenseCore.java: 左に寄せた) |
||
48行目: | 48行目: | ||
===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));//雷を出す | |
− | + | return var2.splitStack(var2.stackSize-1);//アイテムをひとつ減らす | |
− | + | } | |
− | + | }); | |
</source> | </source> | ||
BlockDispenser.dispenseBehaviorRegistry.putObjectの引数は(Item,IBehaviorDispenseItem)となっている。(見た目にはどちらもObjectとされている)<br> | BlockDispenser.dispenseBehaviorRegistry.putObjectの引数は(Item,IBehaviorDispenseItem)となっている。(見た目にはどちらもObjectとされている)<br> |
2014年9月7日 (日) 20:59時点における版
この記事は"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));//雷を出す return var2.splitStack(var2.stackSize-1);//アイテムをひとつ減らす } }); } }
解説
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がある。