2017-02-18 2 views
1

タイルエンティティを持つMC modのブロックに「onBlockActivated」イベントを追加する際に問題があります。このイベントでは、ブロック内に特定のアイテムを格納するか、 。ブロックから私はセットアップコードの残りの部分を持っているが、この一部は、私を取得している私は、この上の多くのチュートリアルを見てきたが、それらはすべて時代遅れだここでコードは次のとおりです。。MC ModでタイルエンティティをアクティブにするonBlockActivatedイベントをどのように追加する必要がありますか? (Forge for MC 1.11.2

//tile entity code 
package com.cayoayt.musiccrafter.tileentity; 

import com.cayoayt.musiccrafter.init.ModItems; 

import net.minecraft.entity.item.EntityItem; 
import net.minecraft.item.ItemStack; 
import net.minecraft.nbt.NBTTagCompound; 
import net.minecraft.tileentity.TileEntity; 

public class TE_MusicPlayer extends TileEntity { 
    private int musicDiscs = 0; 
    //private String discName = ""; 

    //adds a disc 
    public boolean addDisc() { 
     if (musicDiscs < 1) { 
      musicDiscs++; 
      System.out.println("Discs: " + musicDiscs); 
      return true; 
     } 
     return false; 
    } 

    //removes a disc 
    public void removeDisc() { 
     if (musicDiscs > 0) { 
      worldObj.spawnEntityInWorld(new EntityItem(worldObj, pos.getX() + 0.5, pos.getY() + 1.0, pos.getZ() + 0.5, new ItemStack(ModItems.exampleitem))); 
      musicDiscs--; 
     } 
    } 

    //writes to memory 
    @Override 
    public NBTTagCompound writeToNBT(NBTTagCompound compound) { 
     super.writeToNBT(compound); 
     compound.setInteger("musicDiscs", this.musicDiscs); 

     return compound; 
    } 

    //reads from memory 
    @Override 
    public void readFromNBT(NBTTagCompound compound) { 
     super.readFromNBT(compound); 
     this.musicDiscs = compound.getInteger("musicDiscs"); 
    } 
} 

//block code 
package com.cayoayt.musiccrafter.blocks; 

import java.util.List; 
import java.util.Random; 

import com.cayoayt.musiccrafter.MusicCrafter; 
import com.cayoayt.musiccrafter.Reference; 
import com.cayoayt.musiccrafter.init.ModBlocks; 
import com.cayoayt.musiccrafter.init.ModItems; 
import com.cayoayt.musiccrafter.tileentity.TE_MusicPlayer; 

import net.minecraft.block.Block; 
import net.minecraft.block.BlockHorizontal; 
import net.minecraft.block.ITileEntityProvider; 
import net.minecraft.block.material.MapColor; 
import net.minecraft.block.material.Material; 
import net.minecraft.block.state.BlockStateContainer; 
import net.minecraft.block.state.IBlockState; 
import net.minecraft.entity.Entity; 
import net.minecraft.entity.EntityLivingBase; 
import net.minecraft.entity.player.EntityPlayer; 
import net.minecraft.item.Item; 
import net.minecraft.item.ItemStack; 
import net.minecraft.tileentity.TileEntity; 
import net.minecraft.util.BlockRenderLayer; 
import net.minecraft.util.EnumFacing; 
import net.minecraft.util.EnumHand; 
import net.minecraft.util.math.AxisAlignedBB; 
import net.minecraft.util.math.BlockPos; 
import net.minecraft.world.IBlockAccess; 
import net.minecraft.world.World; 

public class music_player extends BlockHorizontal implements ITileEntityProvider { 
    public static final AxisAlignedBB COLLISION_BOX = new AxisAlignedBB(4 * 0.0625, 0, 3 * 0.0625, 12 * 0.0625, 4 * 0.0625, 13 * 0.0625); 
    public static final AxisAlignedBB BOUNDING_BOX = new AxisAlignedBB(3 * 0.0625, 0, 2 * 0.0625, 13 * 0.0625, 5 * 0.0625, 14 * 0.0625); 

    public music_player() { 
     //material 
     super(Material.GROUND); 

     //names 
     setRegistryName(Reference.MusicCrafterBlocks.MUSICPLAYER.getRegistryName()); 
     setUnlocalizedName(Reference.MusicCrafterBlocks.MUSICPLAYER.getUnlocalizedName()); 

     //creative tab 
     setCreativeTab(MusicCrafter.CREATIVE_TAB); 

     //default state 
     setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH)); 
    } 

    //item dropped 
    public Item getItemDropped() { 
     return Item.getItemFromBlock(ModBlocks.music_player); 
    } 

    //color on map 
    public MapColor getMapColor() { 
     return MapColor.BLACK; 
    } 

    //determines if full cube or not 
    @Override 
    public boolean isFullCube(IBlockState state) { 
     return false; 
    } 

    //defines if opaque 
    @Override 
    public boolean isOpaqueCube(IBlockState state) { 
     return false; 
    } 

    //defines that block is cutout of whole block 
    @Override 
    public BlockRenderLayer getBlockLayer() { 
     return BlockRenderLayer.CUTOUT; 
    } 

    //outline of box 
    @Override 
    public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { 
     return BOUNDING_BOX; 
    } 

    //collision detection 
    @Override 
    public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List<AxisAlignedBB> collidingBoxes, Entity entityIn) { 
     super.addCollisionBoxToList(pos, entityBox, collidingBoxes, COLLISION_BOX); 
    } 

    //sets direction 
    @Override 
    public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) { 
     IBlockState state = super.onBlockPlaced(worldIn, pos, facing, hitX, hitY, hitZ, meta, placer); 
     return state.withProperty(FACING, placer.getHorizontalFacing()); 
    } 

    //meta from state 
    @Override 
    public int getMetaFromState(IBlockState state) { 
     return state.getValue(FACING).getHorizontalIndex(); 
    } 

    //state from meta 
    @Override 
    public IBlockState getStateFromMeta(int meta) { 
     return getDefaultState().withProperty(FACING, EnumFacing.getHorizontal(meta)); 
    } 

    //creating block state 
    @Override 
    protected BlockStateContainer createBlockState() { 
     return new BlockStateContainer(this, FACING); 
    } 

    //AREA OF FOCUS 
    @Override                          
    public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing heldItem, float side, float hitX, float hitY) { 
     //CODE HERE 
    } 
    //END OF AREA OF FOCUS 

    //makes container 
    @Override 
    public TileEntity createNewTileEntity(World worldIn, int meta) { 
     return new TE_MusicPlayer(); 
    } 
} 

貼り付けてください 多くの助けになるでしょう

答えて

0

世界からTileEntityを取得し、それをTE_MusicPlayerにキャストし、そのobのメソッドを呼び出す必要がありますject。

TileEntity tile = worldIn.getTileEntity(pos); 
if(tile instanceof TE_MusicPlayer) 
{ 
    TE_MusicPlayer musicplayer = (TE_MusicPlayer)tile; 
    //musicplayer.add/removeDisk logic here 
} 

標準Java練習は大文字でクラス名を開始し、キャメルケース(すなわちMusicPlayerの代わりmusic_player)を使用することです。