Jump to content

How to make an item open a GUI


Cyani

Recommended Posts

https://github.com/pahimar/Equivalent-Exchange-3

 

However, EE3 uses a separate key-bind for it's crafting grid, and since you asked for on right click, this code will suit your needs better:

@Override
    public boolean onItemUse(ItemStack itemStack, EntityPlayer entityPlayer, World world, int x, int y, int z, int sideHit, float hitVecX, float hitVecY, float hitVecZ) {

        if (world.isRemote) {
            entityPlayer.openGui(yourmod.instance, yourguiID, world, x, y, z);
        }
        return true;
    }

It's a bit rough, since I wrote it on the spot, but hopefully it makes sense.  The core idea is when the item is used (right clicked) it will tell the player to open a gui that you specify.

This tutorial is a bit out of date, but most of the code didn't change with 1.5, so it still works as a reference

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

Link to comment
Share on other sites

https://github.com/pahimar/Equivalent-Exchange-3

 

However, EE3 uses a separate key-bind for it's crafting grid, and since you asked for on right click, this code will suit your needs better:

@Override
    public boolean onItemUse(ItemStack itemStack, EntityPlayer entityPlayer, World world, int x, int y, int z, int sideHit, float hitVecX, float hitVecY, float hitVecZ) {

        if (world.isRemote) {
            entityPlayer.openGui(yourmod.instance, yourguiID, world, x, y, z);
        }
        return true;
    }

It's a bit rough, since I wrote it on the spot, but hopefully it makes sense.  The core idea is when the item is used (right clicked) it will tell the player to open a gui that you specify.

This tutorial is a bit out of date, but most of the code didn't change with 1.5, so it still works as a reference

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

 

It doesnt Work!

Link to comment
Share on other sites

OMG he wants when right clicked, also pahimar workbench its a little different.

to open use:

public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer){

if(par3EntityPlayer instanceof EntityPlayerMP){

((EntityPlayerMP)par3EntityPlayer).displayWorkbenchGUI((int)par3EntityPlayer.posX,(int)par3EntityPlayer.posY,(int)par3EntityPlayer.posZ);

          //hope that works                   

}

return par1ItemStack;

}

Link to comment
Share on other sites

I put the code in my portable crafting table . java file, which is what my items extends, and I doesnt crahses minecraft when I try to use it!

What?

OMG he wants when right clicked, also pahimar workbench its a little different.

to open use:

public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer){
if(par3EntityPlayer instanceof EntityPlayerMP){
((EntityPlayerMP)par3EntityPlayer).displayWorkbenchGUI((int)par3EntityPlayer.posX,(int)par3EntityPlayer.posY,(int)par3EntityPlayer.posZ);
          //hope that works                     
}
return par1ItemStack;
}

Fixed with code tag, looks cleaner.

Link to comment
Share on other sites

OMG he wants when right clicked, also pahimar workbench its a little different.

to open use:

public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer){

if(par3EntityPlayer instanceof EntityPlayerMP){

((EntityPlayerMP)par3EntityPlayer).displayWorkbenchGUI((int)par3EntityPlayer.posX,(int)par3EntityPlayer.posY,(int)par3EntityPlayer.posZ);

          //hope that works                   

}

return par1ItemStack;

}

 

Doesnt work!

Screenshot:

http://i.imgur.com/zX0WBDy.png

Link to comment
Share on other sites

look, this is what I use and it works just fine.

package archangel.necromancy.item;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import archangel.necromancy.Necromancy;
import archangel.necromancy.lib.GuiIds;
import archangel.necromancy.lib.Strings;

public class ItemNecronomicon extends ItemNC {

    public ItemNecronomicon(int id) {

        super(id);
        this.setUnlocalizedName(Strings.NECRONOMICON_NAME);
        this.setCreativeTab(Necromancy.tabsNecro);
        maxStackSize = 1;
        
    }
    @Override
    public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer entityPlayer) {

        if (!world.isRemote) {
            entityPlayer.openGui(Necromancy.instance, GuiIds.NECRONOMICON, entityPlayer.worldObj, (int) entityPlayer.posX, (int) entityPlayer.posY, (int) entityPlayer.posZ);
        }

        return itemStack;
    }
}

This pretty much makes it so when this item in hand is right-clicked, it will open a gui defined in my guihandler (GuiIds) class. This ONLY allows you to open the gui, you still need to make a container class, a gui class and set this up in your proxy

Link to comment
Share on other sites

if you want the crafting bench one. then do

@Override
public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int par7, float par8, float par9, float par10)
    {
        if(!world.isRemote)
        {
        	player.displayGUIWorkbench(x, y, z);
        }
        return true;
    }

it should work.

Link to comment
Share on other sites

if you want the crafting bench one. then do

@Override
public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int par7, float par8, float par9, float par10)
    {
        if(!world.isRemote)
        {
        	player.displayGUIWorkbench(x, y, z);
        }
        return true;
    }

it should work.

 

It still doesnt work, i dont know why. Could someone give me an exact tutorial of what to do?

heres my code:

My Basefile:

//package
package cyani.portutils;
//imports start of list
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.Init;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.Mod.PostInit;
import cpw.mods.fml.common.Mod.PreInit;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.registry.LanguageRegistry;
import cyani.core.CommonProxy;
import cyani.core.ClientProxy;
//end
//mod info
@Mod(modid="PortableUtils", name="Portable Utilities", version="1.0.0")
//sided requirement
@NetworkMod(clientSideRequired=true, serverSideRequired=false)
public class PortableUtilities {

        @Instance("Portable Utilities")
        public static PortableUtilities instance;
        
        private final static Item PortableCraftingTable = new PortableCraftingTable(5000).setUnlocalizedName("PortableCrafter");;
        
        public static CreativeTabs PortableUtilities = new CreativeTabs("tabPortUtils") {
            public ItemStack getIconItemStack() {
                    return new ItemStack(PortableCraftingTable, 1, 0);
            }
    };
        

        @SidedProxy(clientSide="cyani.core.ClientProxy", serverSide="cyani.core.CommonProxy")
        public static CommonProxy proxy;
        
        @PreInit
        public void preInit(FMLPreInitializationEvent event) {
        }
        
        @Init
        public void load(FMLInitializationEvent event) {
                proxy.registerRenderers();
                LanguageRegistry.addName(PortableCraftingTable, "Portable Crafting Table");
                LanguageRegistry.instance().addStringLocalization("itemGroup.tabPortUtils", "en_US", "Portable Utilities");
                //Creative tab setting
                PortableCraftingTable.setCreativeTab(PortableUtilities);

        }
        
        @PostInit
        public void postInit(FMLPostInitializationEvent event) {
        }
}

 

and here is my PortableCraftingTable.java code:

package cyani.portutils;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
public class PortableCraftingTable extends Item {

public PortableCraftingTable(int id) {
		super(id);
}{
this.setMaxStackSize(1);
}
@Override
 public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int par7, float par8, float par9, float par10)
    {
        if(!world.isRemote)
        {
         player.displayGUIWorkbench(x, y, z);
        }
        return true;
    }
}

Link to comment
Share on other sites

Learn java. Really

public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer){

if(par3EntityPlayer instanceof EntityPlayerMP && !par2World.isRemote){

((EntityPlayerMP)par3EntityPlayer).displayGUIWorkbench((int)par3EntityPlayer.posX,(int)par3EntityPlayer.posY,(int)par3EntityPlayer.posZ);

          //hope that works                   

}

return par1ItemStack;

}

Link to comment
Share on other sites

//hope that works
It won't: displayGUIWorkbench creates a ContainerWorkbench which checks if the block at the coordinates is a workbench. If it's not, it will close immediately.

You won't get around making

a) a Custom Container

b) a GuiHandler

 

Learn java. Really
Your code isn't really good either. par3EntityPlayer? Whats that? A variable name? Yuck!

 

Calling someones code bad because of their variable names? You have to be kidding me, using small, more understandable variable names may be "good coding practice" but as long as the coder know what it is and it doesn't interfere with their ability to code their OWN MOD then it is fine...

This is the creator of the Rareores mod! Be sure to check it out at

Link to comment
Share on other sites

Calling someones code bad because of their variable names? You have to be kidding me, using small, more understandable variable names may be "good coding practice" but as long as the coder know what it is and it doesn't interfere with their ability to code their OWN MOD then it is fine...

 

buy this, read it and ***understand it*** !!!

 

http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882

 

if the "bad coder" would only produce code for himself to read, in, as you put it, "their OWN MOD", I would not give a #2 how rubbish their code might be. But if somebody will ask for help regarding the code, I demand the code to be clean and pretty (and that includes well chosen names and correct indention)

running minecraft on Mac OS X - Sierra --- creating code since 1986 ... --- मेरा दिल भारतवासी है!

width=289 height=100http://www.arno-saxena.de/pictures/chococraft/banner_signature.png[/img]

Link to comment
Share on other sites

Calling someones code bad because of their variable names? You have to be kidding me, using small, more understandable variable names may be "good coding practice" but as long as the coder know what it is and it doesn't interfere with their ability to code their OWN MOD then it is fine...

 

buy this, read it and ***understand it*** !!!

 

http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882

 

if the "bad coder" would only produce code for himself to read, in, as you put it, "their OWN MOD", I would not give a #2 how rubbish their code might be. But if somebody will ask for help regarding the code, I demand the code to be clean and pretty (and that includes well chosen names and correct indention)

 

I see where you are coming from, but there is a difference between bad code itself, and bad coding placement/ clarity.

This is the creator of the Rareores mod! Be sure to check it out at

Link to comment
Share on other sites

I see where you are coming from, but there is a difference between bad code itself, and bad coding placement/ clarity.

If the code is written unclear with bogus names and bad indentation then even if it runs, works and preforms good it would still be bad code.

In today's world, coding style is a extremely important factor! If you take a look at any university which teaches computer science then you will see how much time they spend on coding style! Just check how they grade the students at places like Stanford. Or take a look at the current state of the industry, team work is now a major factor for programmers.

 

Besides if ya want someone to read your code and help you out, your code should look nice so they can easily understand what your code is doing. ^^

 

 

On Topic - @Cyani:

Problem solved, I would assume?

If you guys dont get it.. then well ya.. try harder...

Link to comment
Share on other sites

I see where you are coming from, but there is a difference between bad code itself, and bad coding placement/ clarity.

actually not, bad coding placement or unclear code leads to misunderstand code, leads to misused code, leads to bugs etc ... been there, done that. About halve of my knowledge about software development, software architecture and coding I gathered by doing the wrong thing and getting hurt in the process. But that had been back in the 80's and 90's when there hasn't been much "clean-code-awareness" and monolithic 5000+ line functions have been the conventional way of doing stuff. Today I do write "pretty-code" not only because it is much more of a pleasure to do so, but also because "pretty-code" is much more understandable and therefore I will be able to understand, use and most important alter it without breaking it or creating bugs. The days of "hackers" who sit in their parents attics and proudly produce code only they themselves can understand are long gone. Software-Development today is a team effort and involves as much communicating between project colleagues as it involves writing code. And for the actual code to fit in into these modern system it has to be clean and understandable. Now you could argue this is not a professional area we are programming right here, but even the more us doing mc-modding for fun is reason enough to produce well formed clean code. Let me ask you an analogue question. I do have a sports car I tend to by myself (maintenance, oil, minor repairs (and bigger ones :D) ). Wouldn't it be very strange if I would let that car rot and go to waste, just because I am using it in my free time and "just for fun"? No, I tent to it maybe even more than to my day to day car. Same goes for my software. I would not write bad software in my free time, just because I just do it for fun ...

 

but I think I'm drifting off :D Point is, before being able to be a good software developer one has to be able to write "pretty-code". And if the mod produced should be fun to use not only for a very brief time, it should be easily maintainable, else it will be gone with the next mc version ...

running minecraft on Mac OS X - Sierra --- creating code since 1986 ... --- मेरा दिल भारतवासी है!

width=289 height=100http://www.arno-saxena.de/pictures/chococraft/banner_signature.png[/img]

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.