Jump to content

Recommended Posts

Posted

I have a custom rendered block that I am trying to get to drop when a player breaks it with their fist. It will break and drop the block Id when a tool is used, but not when punched.

 

I have tried the idDropped, quantitydropped, and breakBlock methods but none of them seem to be doing the trick.

 

here is the code. Normally I use the pastbin but my browser doen't want to open it up right now. Thanks for your help.

 

BlockClass

 

package throughtheages.blocks;

import java.util.Random;

import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import throughtheages.main.Reference;
import throughtheages.main.ThroughTheAges;
import throughtheages.tileentity.TileEntitySmallRock;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class SmallRock extends BlockContainer
{

    public SmallRock(int par1, Material par2Material)
    {
        super(par1, par2Material);
        
        this.setBlockBounds(1f/16f*6.5f, 0f, 1f/16f*6.5f, 1f-1f/16f*6.5f, 1f-1f/16f*14f, 1f-1f/16f*6.5f);
        
        this.setUnlocalizedName("smallrock");
        this.setCreativeTab(ThroughTheAges.throughTheAges);
        
        
            
    }
    
    @Override
    public TileEntity createNewTileEntity(World world)
    {
        return new TileEntitySmallRock();
    }
    
    public int getRenderType()
    {
        return -1;
    }
    
   
    
    public boolean isOpaqueCube()
    {
        return false;
    }
    
    public boolean renderAsNormalBlock()
    {
        return false;
    }
    
    @SideOnly(Side.CLIENT)
    public void registerIcons(IconRegister register)
    {
        this.blockIcon = register.registerIcon(Reference.MOD_ID + ":smallrock");
    }

    

}

 

 

BlockHandler

 

package throughtheages.blocks;

import throughtheages.main.ThroughTheAges;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraftforge.common.Configuration;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;

public class BlockHandler
{
    public static Block smallRock;
    
    
    public static void configureBlocks(Configuration config)
    {
        smallRock = new SmallRock(config.get("Blocks", "Small Rock", 1002).getInt(), Material.rock);
        
        
        registerBlock(smallRock, "smallrock", "Small Rock");       
    }
    
    private static void registerBlock(Block block, String string, String name){
        GameRegistry.registerBlock(block, string);
        LanguageRegistry.addName(block, name);
    }
       
    
    
    

}

 

 

 

If you need the renderes, and I don't think that you should, just ask Iand I will provide them.

Posted

Hi

 

Just to confirm - do you know that a Block is only a Block when it is placed?

A Block in a person's hand or inventory is an Item, not a Block

And just to be confusing, a dropped Item is actually an Entity.

 

There are a few tutorials around on it- see

http://wuppy29.blogspot.nl/2013/07/forge-modding-16.html

http://www.minecraftforge.net/wiki/Generic_Mod

http://greyminecraftcoder.blogspot.com.au/p/list-of-topics.html

 

-TGG

Sorry if you did already know this stuff, just making sure...

 

Posted

Yes I already knew most of that. I am just finding an issue when I break the block with a fist vs. pickaxe. When I break it with a pickaxe it drops just fine, meaning that you get the block. When broken with a fist it breaks like grass and you don't get the block back.

 

This is a custom rendered block, and from what I have learned they need to be classed as a block container, not sure why on that but that is what I read / saw.

 

Like I said the block works fine until you break it with your fist. just want to be able to break it with a first and get the drop, much like a flower or a any other block that you can pick up with just your fist.

 

 

Posted

Hi

 

You can have custom renderers for any Block, not just BlockContainer.

http://greyminecraftcoder.blogspot.com.au/2013/07/block-rendering.html

 

Breaking a block with your fist will drop an item (by calling Block.harvestBlock) if:

(1) you override Block.canHarvestBlock to true, or

(2) block.blockMaterial.isToolNotRequired() returns true, or

(3) you have registered for the HarvestCheck event and you return true.

 

(see

ItemInWorldManager.tryHarvestBlock
                if (block != null)
                {
                    flag1 = block.canHarvestBlock(thisPlayerMP, i1);
                }

 

-TGG

You don't need to override any of the other methods you mentioned unless you want a different item or quantity to drop, the default methods will drop one of the blockID as an Item.

Posted

What is your material set as because if it is rock or iron you need a pick to mine it, but if it is something like sand or wood, you can break it with your fists.

 

Try changing this part:

public SmallRock(int par1, Material par2Material)

    {

        super(par1, par2Material);

       

        this.setBlockBounds(1f/16f*6.5f, 0f, 1f/16f*6.5f, 1f-1f/16f*6.5f, 1f-1f/16f*14f, 1f-1f/16f*6.5f);

       

        this.setUnlocalizedName("smallrock");

        this.setCreativeTab(ThroughTheAges.throughTheAges);

       

       

           

    }

 

Into this:

public SmallRock(int par1)

    {

        super(par1, Material.sand);

 

        this.setBlockBounds(1f/16f*6.5f, 0f, 1f/16f*6.5f, 1f-1f/16f*6.5f, 1f-1f/16f*14f, 1f-1f/16f*6.5f);

        this.setUnlocalizedName("smallrock");

        this.setCreativeTab(ThroughTheAges.throughTheAges);

    }

 

PS: Something I like to do is to give the Unlocalized name when you initialize the block in your main class, so you can use the class for more than one item and have it have the block back and display the Texture according to the Unlocalized name.

Don't be afraid to ask question when modding, there are no stupid question! Unless you don't know java then all your questions are stupid!

Posted

What is your material set as because if it is rock or iron you need a pick to mine it, but if it is something like sand or wood, you can break it with your fists.

 

Try changing this part:

public SmallRock(int par1, Material par2Material)

    {

        super(par1, par2Material);

       

        this.setBlockBounds(1f/16f*6.5f, 0f, 1f/16f*6.5f, 1f-1f/16f*6.5f, 1f-1f/16f*14f, 1f-1f/16f*6.5f);

       

        this.setUnlocalizedName("smallrock");

        this.setCreativeTab(ThroughTheAges.throughTheAges);

       

       

           

    }

 

Into this:

public SmallRock(int par1)

    {

        super(par1, Material.sand);

 

        this.setBlockBounds(1f/16f*6.5f, 0f, 1f/16f*6.5f, 1f-1f/16f*6.5f, 1f-1f/16f*14f, 1f-1f/16f*6.5f);

        this.setUnlocalizedName("smallrock");

        this.setCreativeTab(ThroughTheAges.throughTheAges);

    }

 

PS: Something I like to do is to give the Unlocalized name when you initialize the block in your main class, so you can use the class for more than one item and have it have the block back and display the Texture according to the Unlocalized name.

 

This was what I finally figured out as well that it was the material that I was using. I changed it to ground and that did the trick.

 

New question, if you feel like adding more input, any thoughts on adding a custom material to the materials list. I think I have an idea and will try it out but I am curious if there is a better way.

Posted

Hi

 

You can have custom renderers for any Block, not just BlockContainer.

http://greyminecraftcoder.blogspot.com.au/2013/07/block-rendering.html

 

Breaking a block with your fist will drop an item (by calling Block.harvestBlock) if:

(1) you override Block.canHarvestBlock to true, or

(2) block.blockMaterial.isToolNotRequired() returns true, or

(3) you have registered for the HarvestCheck event and you return true.

 

(see

ItemInWorldManager.tryHarvestBlock
                if (block != null)
                {
                    flag1 = block.canHarvestBlock(thisPlayerMP, i1);
                }

 

-TGG

You don't need to override any of the other methods you mentioned unless you want a different item or quantity to drop, the default methods will drop one of the blockID as an Item.

 

Thanks. I will look into this. I want to look into "altering" the rock material, being as that is what the block is, so that I can harvest without a pick. thanks for your help.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.