提供: Minecraft Modding Wiki
移動先: 案内検索
(作った)
 
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=#228B22|name=Dispenser}}
+
{{チュートリアルカテゴリー|img=Dispenser_front_horizontal.png|64px‎|color=#A9A9A9|name=Dispenser}}
  
 
==ディスペンサー射出時の動作の指定==
 
==ディスペンサー射出時の動作の指定==

2014年5月19日 (月) 23:45時点における版

この記事は"Minecraft Forge Universal 10.12.0.xxx~"を前提MODとしています。

Wood pickaxe.png
初心者向けのチュートリアルです。
Dispenser front horizontal.png
Dispenserに関係のあるチュートリアルです。


ディスペンサー射出時の動作の指定

ディスペンサー射出時の動作の指定方法

ソースコード

  • 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;

とするとできる。