提供: Minecraft Modding Wiki
ModderKina (トーク | 投稿記録) (作った) |
細 |
||
1行目: | 1行目: | ||
{{前提MOD|reqmod="Minecraft Forge Universal 10.12.0.xxx~"}} | {{前提MOD|reqmod="Minecraft Forge Universal 10.12.0.xxx~"}} | ||
{{チュートリアル難易度|img=Wood_pickaxe.png|name=初心者|clear=none}} | {{チュートリアル難易度|img=Wood_pickaxe.png|name=初心者|clear=none}} | ||
− | {{チュートリアルカテゴリー|img=Dispenser_front_horizontal.png|64px|color=# | + | {{チュートリアルカテゴリー|img=Dispenser_front_horizontal.png|64px|color=#A9A9A9|name=Dispenser}} |
==ディスペンサー射出時の動作の指定== | ==ディスペンサー射出時の動作の指定== |
2014年5月19日 (月) 23:45時点における版
この記事は"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;
とするとできる。