2017-02-18 6 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 
} 

표준 자바 연습은 자본과 클래스 이름을 시작하고 낙타 표기법 (즉 MusicPlayer 대신 music_player)를 사용하는 것입니다.