2017-02-18 1 views
1

Ich habe Probleme beim Hinzufügen eines "onBlockActivated" -Ereignisses für den Block in meinem MC-Mod, der eine Kacheleinheit hat. Das Ereignis sollte es Ihnen ermöglichen, entweder ein bestimmtes Element innerhalb des Blocks zu speichern oder es zu übernehmen . aus dem Block habe ich den Rest des Codes eingerichtet, aber dieser Teil ist mir immer ich habe viele Tutorials zu diesem Thema, aber sie sind alle veraltet Hier ist der Code gesehen:..Wie sollte ich ein onBlockActivated-Ereignis hinzufügen, das meine Kachel-Entität in meinem MC-Mod aktiviert? (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(); 
    } 
} 

fügen der Code, den ich im Antwortenabschnitt benötigen würde und es erklären

Antwort

0

Sie müssen die TileEntity von der Welt holen, es zum TE_MusicPlayer werfen, dann rufen Sie die Methoden auf diesem ob auf ject.

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

Standard-Java-Praxis ist Klassennamen mit Kapitellen zu starten und verwenden Camelcase (das heißt Musicplayer statt music_player).

Verwandte Themen