提供: Minecraft Modding Wiki
移動先: 案内検索
(BehaviorSampleDispenseCore.java: インデントを上とあわせたけれど、左詰の方が見やすいのかな?)
(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));//雷を出す
                               return var2.splitStack(var2.stackSize-1);//アイテムをひとつ減らす
+
                               var2.stackSize--;//アイテムをひとつ減らす
 +
                              return var2;
 
                       }
 
                       }
 
                 });
 
                 });
48行目: 49行目:
 
===BehaviorSampleDispenseCore.java===
 
===BehaviorSampleDispenseCore.java===
 
<source lang = "java">
 
<source lang = "java">
BlockDispenser.dispenseBehaviorRegistry.putObject(Items.stick,new  IBehaviorDispenseItem(){
+
BlockDispenser.dispenseBehaviorRegistry.putObject(Items.stick,new  IBehaviorDispenseItem(){
                      @Override
+
      @Override
                      public ItemStack dispense(IBlockSource var1, ItemStack var2){
+
      public ItemStack dispense(IBlockSource var1, ItemStack var2){
                              World world = var1.getWorld();//World
+
              World world = var1.getWorld();//World
                              /*Item item = var2.getItem();*/ //Item
+
              /*Item item = var2.getItem();*/ //Item
                              IPosition iposition = BlockDispenser.func_149939_a(var1);//IPosition
+
              IPosition iposition = BlockDispenser.func_149939_a(var1);//IPosition
                              double x = iposition.getX();//
+
              double x = iposition.getX();//
                              double y = iposition.getY();//ディスペンサー射出口前の座標を取得
+
              double y = iposition.getY();//ディスペンサー射出口前の座標を取得
                              double z = iposition.getZ();//
+
              double z = iposition.getZ();//
                              world.spawnEntityInWorld(new EntityLightningBolt(world,x,y,z));//雷を出す
+
              world.spawnEntityInWorld(new EntityLightningBolt(world,x,y,z));//雷を出す
                              return var2.splitStack(var2.stackSize-1);//アイテムをひとつ減らす
+
              --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としています。

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));//雷を出す
                              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がある。