Jump to content

Recommended Posts

Posted

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

Posted

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!

Posted

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.

Posted

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!

Posted

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;

}

Posted

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.

Posted

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

Posted

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

Posted

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.

Posted

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;
    }
}

Posted

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;

}

Posted

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

Posted

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.

 

 

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

Posted

//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

Posted

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]

Posted

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

Posted

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...

Posted
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]

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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • I know that this may be a basic question, but I am very new to modding. I am trying to have it so that I can create modified Vanilla loot tables that use a custom enchantment as a condition (i.e. enchantment present = item). However, I am having trouble trying to implement this; the LootItemRandomChanceWithEnchantedBonusCondition constructor needs a Holder<Enchantment> and I am unable to use the getOrThrow() method on the custom enchantment declared in my mod's enchantments class. Here is what I have so far in the GLM:   protected void start(HolderLookup.Provider registries) { HolderLookup.RegistryLookup<Enchantment> registrylookup = registries.lookupOrThrow(Registries.ENCHANTMENT); LootItemRandomChanceWithEnchantedBonusCondition lootItemRandomChanceWithEnchantedBonusCondition = new LootItemRandomChanceWithEnchantedBonusCondition(0.0f, LevelBasedValue.perLevel(0.07f), registrylookup.getOrThrow(*enchantment here*)); this.add("nebu_from_deepslate", new AddItemModifier(new LootItemCondition[]{ LootItemBlockStatePropertyCondition.hasBlockStateProperties(Blocks.DEEPSLATE).build(), LootItemRandomChanceCondition.randomChance(0.25f).build(), lootItemRandomChanceWithEnchantedBonusCondition }, OrichalcumItems.NEBU.get())); }   Inserting Enchantments.[vanilla enchantment here] actually works but trying to declare an enchantment from my custom enchantments class as [mod enchantment class].[custom enchantment] does not work even though they are both a ResourceKey and are registered in Registries.ENCHANTMENT. Basically, how would I go about making it so that a custom enchantment declared as a ResourceKey<Enchantment> of value ResourceKey.create(Registries.ENCHANTMENT, ResourceLocation.fromNamespaceAndPath([modid], [name])), declared in a seperate enchantments class, can be used in the LootItemRandomChanceWithEnchantedBonusCondition constructor as a Holder? I can't use getOrThrow() because there is no level or block entity/entity in the start() method and it is running as datagen. It's driving me nuts.
    • Hi here is an update. I was able to fix the code so my mod does not crash Minecraft. Please understand that I am new to modding but I honestly am having a hard time understanding how anyone can get this to work without having extensive programming and debugging experience as well as searching across the Internet, multiple gen AI bots (claude, grok, openai), and examining source code hidden in the gradle directory and in various github repositories. I guess I am wrong because clearly there are thousands of mods so maybe I am just a newbie. Ok, rant over, here is a step by step summary so others can save the 3 days it took me to figure this out.   1. First, I am using forge 54.1.0 and Minecraft 1.21.4 2. I am creating a mod to add a shotgun to Minecraft 3. After creating the mod and compiling it, I installed the .jar file to the proper directory in Minecraft and used 1.21.4-forge-54.1.0 4. The mod immediately crashed with the error: Caused by: java.lang.NullPointerException: Item id not set 5. Using the stack trace, I determined that the Exception was being thrown from the net.minecraft.world.item.Item.Properties class 6. It seems that there are no javadocs for this class, so I used IntelliJ which was able to provide a decompiled version of the class, which I then examined to see the source of the error. Side question: Are there javadocs? 7. This method, specifically, was the culprit: protected String effectiveDescriptionId() {      return this.descriptionId.get(Objects.requireNonNull(this.id, "Item id not set"));  } 8. Now my quest was to determine how to set this.id. Looking at the same source file, I determined there was another method:  public Item.Properties setId(ResourceKey<Item> pId) {             this.id = pId;             return this;   } 9. So now, I need to figure out how to call setId(). This required working backwards a bit. Starting from the constructor, I stubbed out the variable p which is of type Item.Properties public static final RegistryObject<Item> SHOTGUN = ITEMS.register("shotgun", () -> new ShotgunItem(p)); Rather than putting this all on one line, I split it up for readability like this: private static final Item.Properties p = new Item.Properties().useItemDescriptionPrefix().setId(rk); Here is was the missing function, setId(), which takes a type of ResourceKey<Item>. My next problem is that due to the apparent lack of documentation (I tried searching the docs on this site) I could not determine the full import path to ResourceKey. I did some random searching on the Internet and stumbled across a Github repository which gave two clues: import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; Then I created the rk variable like this: private static ResourceKey<Item> rk = ResourceKey.create(Registries.ITEM, ResourceLocation.parse("modid:shotgunmod")); And now putting it all together in order: private static ResourceKey<Item> rk = ResourceKey.create(Registries.ITEM, ResourceLocation.parse("modid:shotgunmod")); private static final Item.Properties p = new Item.Properties().useItemDescriptionPrefix().setId(rk); public static final RegistryObject<Item> SHOTGUN = ITEMS.register("shotgun", () -> new ShotgunItem(p)); This compiled and the mod no longer crashes. I still have more to do on it, but hopefully this will save someone hours. I welcome any feedback and if I missed some obvious modding resource or tutorial that has this information. If not, I might suggest we add it somewhere for people trying to write a mod that doesn't crash. Thank you !!!  
    • I will keep adding to this thread with more information in case anyone can help, or at the very least I can keep my troubleshooting organized. I decided to downgrade to 54.1.0 in the hopes that this would fix the issue but it didn't. At least now I am on a "recommended" version. The crash report did confirm my earlier post that the Exception is coming from effectiveDescriptionId(). I'll continue to see if I can find a way to set the ID manually.   Caused by: java.lang.NullPointerException: Item id not set         at java.base/java.util.Objects.requireNonNull(Objects.java:259) ~[?:?]         at TRANSFORMER/[email protected]/net.minecraft.world.item.Item$Properties.effectiveDescriptionId(Item.java:465) ~[forge-1.21.4-54.1.0-client.jar!/:?]         at TRANSFORMER/[email protected]/net.minecraft.world.item.Item.<init>(Item.java:111) ~[forge-1.21.4-54.1.0-client.jar!/:?]         at TRANSFORMER/[email protected]/com.example.shotgunmod.ShotgunItem.<init>(ShotgunItem.java:19) ~[shotgunmod-1.0.0.jar!/:1.0.0]         at TRANSFORMER/[email protected]/com.example.shotgunmod.ModItems.lambda$static$0(ModItems.java:15) ~[shotgunmod-1.0.0.jar!/:1.0.0]         at TRANSFORMER/[email protected]/net.minecraftforge.registries.DeferredRegister$EventDispatcher.lambda$handleEvent      
    • It just randomly stop working after a rebooted my dedicated server PLEASE HELP!   com.google.gson   Failed to start the minecraft server com.google.gson.JsonSyntaxException: Expected a com.google.gson.JsonObject but was com.google.gson.JsonPrimitive; at path $  
  • Topics

×
×
  • Create New...

Important Information

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