Jump to content

How to make an Item spawn a bloc when right-clicking on the ground ?


Naebulys

Recommended Posts

Hello everyone, I am developing a Tardis mod for Minecraft 1.12.2 and I am currently trying to get the Tardis Key summon the Tardis, which is a bloc, when right-clicking on the ground. I think it has something to do with Forge Events but I am a bit lost. Thanks in advance for your help :)

Link to comment
Share on other sites

13 minutes ago, Naebulys said:

Hello everyone, I am developing a Tardis mod for Minecraft 1.12.2 and I am currently trying to get the Tardis Key summon the Tardis, which is a bloc, when right-clicking on the ground. I think it has something to do with Forge Events but I am a bit lost. Thanks in advance for your help :)

Take a look at ItemBlock

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

Okay so I have copy pasted ItemBlock methods in my TardisKey item class but I still get an error on public TardisKey(String name) {...} :  Implicit super constructor ItemBlock() is undefined. Must explicitly invoke another constructor.

 

 

dawd.PNG

Link to comment
Share on other sites

5 minutes ago, diesieben07 said:

You are extending ItemBlock but also copying it's method. Why?! Only do one or the other, in this case you probably do not want to extend ItemBlock, ItemBlock is for items directly representing a block (like the dirt item).

And the error message should be clear to you, as you do know basic Java, right?

I am a beginner and I am just learning by experimenting things. Yes I knew there was something wrong with the super constructor but I was just trying to figure out what constructor use. Thanks for your help though. I didn't know there was no need to extend if I copied it ^^

Link to comment
Share on other sites

Okay now my game is launching but obviously when I right click with my item I get a crash. I know that I crash because the EnumActionResult is false since I didn't tell it what block I aim to place. But how do I tell the EnumActionResult what block to place ? Do I have to put it in the line : Block block = iblockstate.getBlock(); ?

Link to comment
Share on other sites

Okay, here it is :

import com.project_t.mod.Main;
import com.project_t.mod.init.ModBlocks;
import com.project_t.mod.init.ModItems;
import com.project_t.mod.util.IHasModel;

import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;

public class TardisKey extends Item implements IHasModel{


    public TardisKey(String name, Block Tardis) {
        
        setUnlocalizedName(name);
        setRegistryName(name);
        setCreativeTab(CreativeTabs.TRANSPORTATION);
        setMaxStackSize(1);
        
        ModItems.ITEMS.add(this);
        
    
    }
    public void registerModels() {
        Main.proxy.registerItemRenderer(this, 0, "inventory");
    }
    
     public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
        {
            IBlockState iblockstate = worldIn.getBlockState(pos);
            Block block = iblockstate.getBlock();

            if (!block.isReplaceable(worldIn, pos))
            {
                pos = pos.offset(facing);
            }

            ItemStack itemstack = player.getHeldItem(hand);

            if (!itemstack.isEmpty() && player.canPlayerEdit(pos, facing, itemstack) && worldIn.mayPlace(this.block, pos, false, facing, (Entity)null))
            {
                int i = this.getMetadata(itemstack.getMetadata());
                IBlockState iblockstate1 = this.block.getStateForPlacement(worldIn, pos, facing, hitX, hitY, hitZ, i, player, hand);

                if (placeBlockAt(itemstack, player, worldIn, pos, facing, hitX, hitY, hitZ, iblockstate1))
                {
                    iblockstate1 = worldIn.getBlockState(pos);
                    SoundType soundtype = iblockstate1.getBlock().getSoundType(iblockstate1, worldIn, pos, player);
                    worldIn.playSound(player, pos, soundtype.getPlaceSound(), SoundCategory.BLOCKS, (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F);
                    itemstack.shrink(0);
                }

                return EnumActionResult.SUCCESS;
            }
            else
            {
                return EnumActionResult.FAIL;
            }
        }
    private boolean placeBlockAt(ItemStack itemstack, EntityPlayer player, World worldIn, BlockPos pos,
            EnumFacing facing, float hitX, float hitY, float hitZ, IBlockState iblockstate1) {
        // TODO Auto-generated method stub
        return false;
    }

}

 

Edited by diesieben07
code formatting
Link to comment
Share on other sites

1 minute ago, diesieben07 said:
  • Code style, issue 2 and 3.
  • Your code does not even compile, you are using this.block, but your class does not have a field called block. I repeat my question: You do know basic Java, right?

I told you was learning. But no, I don't understand all of  basic Java yet, and that's why I am having troubles. but since I learn and I manage to keep my mod going I will keep on developing it, even though I know it's a big mod for a beginner which only knows how to use variables and that Java works by blocks and classes.

Link to comment
Share on other sites

Anyway, got rid of my IHasModel interface and made a block field and overrode my method : but I still haven't defined which block I want to spawn

public class TardisKey extends Item {


    private Block block;
    public TardisKey(String name, Block Tardis) {
        
        setUnlocalizedName(name);
        setRegistryName(name);
        setCreativeTab(CreativeTabs.TRANSPORTATION);
        setMaxStackSize(1);
        
        ModItems.ITEMS.add(this);
        
    
    }
    public void registerModels() {
        Main.proxy.registerItemRenderer(this, 0, "inventory");
    }
    
    @Override
     public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
        {
            IBlockState iblockstate = worldIn.getBlockState(pos);
            Block block = iblockstate.getBlock();

            if (!block.isReplaceable(worldIn, pos))
            {
                pos = pos.offset(facing);
            }

            ItemStack itemstack = player.getHeldItem(hand);

            if (!itemstack.isEmpty() && player.canPlayerEdit(pos, facing, itemstack) && worldIn.mayPlace(this.block, pos, false, facing, (Entity)null))
            {
                int i = this.getMetadata(itemstack.getMetadata());
                IBlockState iblockstate1 = this.block.getStateForPlacement(worldIn, pos, facing, hitX, hitY, hitZ, i, player, hand);

                if (placeBlockAt(itemstack, player, worldIn, pos, facing, hitX, hitY, hitZ, iblockstate1))
                {
                    iblockstate1 = worldIn.getBlockState(pos);
                    SoundType soundtype = iblockstate1.getBlock().getSoundType(iblockstate1, worldIn, pos, player);
                    worldIn.playSound(player, pos, soundtype.getPlaceSound(), SoundCategory.BLOCKS, (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F);
                    itemstack.shrink(0);
                }

                return EnumActionResult.SUCCESS;
            }
            else
            {
                return EnumActionResult.FAIL;
            }
        }
    private boolean placeBlockAt(ItemStack itemstack, EntityPlayer player, World worldIn, BlockPos pos,
            EnumFacing facing, float hitX, float hitY, float hitZ, IBlockState iblockstate1) {
        // TODO Auto-generated method stub
        return false;
    }

}

 

Edited by diesieben07
code formatting - PLEASE GET THE HINT........
Link to comment
Share on other sites

Just now, Naebulys said:

defined which block

Dont you want to spawn your Tardis block?

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

Diesiedben07 I am just a beginner, I know Eclipse don't read my mind, and I know I don't understand even half of what I am typing. I know that it wont help if just say "it crashes" but being cynical about me just being all lost with Eclipse and Java won't help me either

Link to comment
Share on other sites

Guess what I am doing, I obviously does but there's no point in arguing about that '-- It's just taking this topic out of subject. I am not here to be told I need to learn, because I know that and I am learning, but get help about one particular thing.

 

Link to comment
Share on other sites

52 minutes ago, Naebulys said:

Guess what I am doing, I obviously does but there's no point in arguing about that '-- It's just taking this topic out of subject. I am not here to be told I need to learn, because I know that and I am learning, but get help about one particular thing.

 

The title and description of this very forum:

 

Quote

Modder Support

This is the support section for those modding with Forge. Help with modding goes in here, however, please keep in mind that this is not a Java school. You are expected to have basic knowledge of Java before posting here.

 

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

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.