Cyani Posted April 7, 2013 Posted April 7, 2013 What code would I use if I want my item to open the Workbench GUI when right-clicked? Quote
Moritz Posted April 7, 2013 Posted April 7, 2013 Pahimar implemented a Portable workbench in EE3. Search for "Pahimar Github" at google. His mod is an open source. Quote
malorolam Posted April 7, 2013 Posted April 7, 2013 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 Quote
Cyani Posted April 7, 2013 Author Posted April 7, 2013 How do I make it open the crafting table GUI? Quote
Cyani Posted April 7, 2013 Author Posted April 7, 2013 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! Quote
Major Tom Posted April 8, 2013 Posted April 8, 2013 It would do you well to explain in detail what the problem is, rather than 'it doesn't work!' What did you do with the code, where did you put it, what are the errors, etc. Quote
Cyani Posted April 8, 2013 Author Posted April 8, 2013 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! Quote
opssemnik Posted April 8, 2013 Posted April 8, 2013 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; } Quote
Major Tom Posted April 8, 2013 Posted April 8, 2013 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. Quote
XxArchangelz Posted April 9, 2013 Posted April 9, 2013 You have to pastebin us what the crash says, or we cannot help you with this. Quote
Cyani Posted April 9, 2013 Author Posted April 9, 2013 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 Quote
XxArchangelz Posted April 9, 2013 Posted April 9, 2013 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 Quote
endershadow Posted April 9, 2013 Posted April 9, 2013 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. Quote
Cyani Posted April 10, 2013 Author Posted April 10, 2013 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; } } Quote
opssemnik Posted April 10, 2013 Posted April 10, 2013 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; } Quote
Cyani Posted April 11, 2013 Author Posted April 11, 2013 Please stop arguing and get back to the point. Look at my code listed a few posts above and tell me how I implement a way of opening the Crafting Gui From An ITEM --thanks Quote
Mazetar Posted April 11, 2013 Posted April 11, 2013 The above poster diesieven07 just solved your problem.. nothing else than the pure and simple truth, you need a GUIHandler and you to create a custom container. Quote If you guys dont get it.. then well ya.. try harder...
Noah_Beech Posted April 11, 2013 Posted April 11, 2013 //hope that worksIt 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. ReallyYour 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... Quote This is the creator of the Rareores mod! Be sure to check it out at
Torojima Posted April 11, 2013 Posted April 11, 2013 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) Quote running minecraft on Mac OS X - Sierra --- creating code since 1986 ... --- मेरा दिल भारतवासी है! http://www.arno-saxena.de/pictures/chococraft/banner_signature.png[/img]
Noah_Beech Posted April 11, 2013 Posted April 11, 2013 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. Quote This is the creator of the Rareores mod! Be sure to check it out at
Mazetar Posted April 11, 2013 Posted April 11, 2013 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? Quote If you guys dont get it.. then well ya.. try harder...
Torojima Posted April 12, 2013 Posted April 12, 2013 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 ) ). 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 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 ... Quote running minecraft on Mac OS X - Sierra --- creating code since 1986 ... --- मेरा दिल भारतवासी है! http://www.arno-saxena.de/pictures/chococraft/banner_signature.png[/img]
Recommended Posts
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.