提供: Minecraft Modding Wiki
移動先: 案内検索
(BehaviorSampleDispenseCore.java: インデントを上とあわせたけれど、左詰の方が見やすいのかな?)
48行目: 48行目:
 
===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){
60行目: 60行目:
 
                               return var2.splitStack(var2.stackSize-1);//アイテムをひとつ減らす
 
                               return var2.splitStack(var2.stackSize-1);//アイテムをひとつ減らす
 
                       }
 
                       }
});
+
});
 
</source>
 
</source>
 
BlockDispenser.dispenseBehaviorRegistry.putObjectの引数は(Item,IBehaviorDispenseItem)となっている。(見た目にはどちらもObjectとされている)<br>
 
BlockDispenser.dispenseBehaviorRegistry.putObjectの引数は(Item,IBehaviorDispenseItem)となっている。(見た目にはどちらもObjectとされている)<br>

2014年8月17日 (日) 21:31時点における版

この記事は"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;

とするとできる。

参考になるバニラのソースとしては、net.minecraft.init.Bootstrap.javaがある。