Jump to content

Recommended Posts

Posted (edited)

Hey, thank you for opening my post. I started playing with mods a couple of weeks ago, and I still have a ton to learn. My last project was a basic food mod, but I also wanted to add some cool machinery. The first block I'd like to add is an oven, where you would be able to cook food. (smart isn't it!). I have already made all the block and, in theory I also have the gui and container working, although I am not sure about that implementation. My crafting interface would be a normal 3x3 crafting table but with an extra slot where you can place different items such as a frying pan. My issue is that I have no idea how to make my own craftingManager with a 3x3 and an extra slot. I would greatly appreciate any help. If you need some of my code let me know.

stove.png

 

p.s that extra slot would only accept a few items, so maybe there is a way to check that separately. I really do not know.

Edited by Sawii00
Posted

Look at the way it is done in vanilla (you will mostly be looking at the ContainerWorkbench). The craftMatrix field, slot initialization and the onCraftMatrixChanged are the things that you will need to build your own functional "crafting container".

The most difficult part of it I guess is the CraftingManager as you have mentioned, but you could create a new recipe class that will implement IRecipe, have a Shaped/ShapelessOreRecipe stored in there for the 3x3 matrix and a string representing the oredict id of your pan/whatever you want the recipe to work with. Then you would add your recipes to some kind of array/list so in your container you could iterate through them to find the matching one. You do not need the full functionality of the CraftingManager class ;) But it still would be a good idea to implement those which are related to crafting. Sounds confusing enough? :D

Here is a very simple example:

public class YourRecipe implements IRecipe
{
    public final IRecipe craftMatrixRecipe;
    public final String penItem;
    ...

	public YourRecipe(...){...}

    public boolean matches(InventoryCrafting inv, ItemStack fryingPenItemStack, World w)
    {
        return yourCheckThatFryingPenItemStackParamIsThePenItemYouWant && this.craftMatrixRecipe.matches(inv, w);
    }

    ...All other implemented methods. You can see how they are handled in vanilla & forge recipes. There is nothing special to them
}

public class SimpleCraftingManager
{
    public static List<YourRecipe> allMyRecipes = Lists.newArrayList();
    
    public static void register(YourRecipe rec)
    {
        allMyRecipes.add(rec);
    }
      
    public static ItemStack findMatchingRecipe(InventoryCrafting craftMatrix, ItemStack penItem, World worldIn)
    {
        for (YourRecipe rec : allMyRecipes)
        {
            if (rec.matches(craftMatrix, penItem, worldIn))
            {
                return rec;
            }
        }
      
        return ItemStack.EMPTY;
    }
      
    ...All other implemented methods you need
}

Or you could even make your instance of InventoryMatrix have a not 3x3 height/width and have 1 less method as you will be able to use the regular IRecipe::matches :)

In your container then you would simply reference your CraftingManager instead of vanilla's.

Note that if you want NEI/JEI/Whatever integration you will need your own handlers for that.

  • Like 1
Posted

Wow thank you very much for this quick answer! I'll try to do as you said, but still I haven't understood very well how I can handle that extra slot.

Posted

package com.sawii00.food.container;

import com.sawii00.food.crafting.StoveCraftingManager;
import com.sawii00.food.handlers.BlockHandler;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.InventoryCraftResult;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.inventory.Slot;
import net.minecraft.inventory.SlotCrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;

public class ContainerStove extends Container{
    
    public InventoryCrafting craftMatrix;
    public IInventory craftResult;
    public World world;
    private final BlockPos pos;
    

    
    public ContainerStove(InventoryPlayer playerInv, World world, BlockPos pos) {
        this.world = world;
        craftMatrix = new InventoryCrafting(this,3,3);
        craftResult = new InventoryCraftResult();
        this.pos = pos;
        
        this.addSlotToContainer(new SlotCrafting(playerInv.player,craftMatrix, craftResult, 0,124,35 ));
        this.addSlotToContainer(new Slot(new InventoryCrafting(this, 1,1),0,8,35));
        
        
        //crafting table, slot 36-44
        for (int y = 0; y < 3; ++y) {
            for (int x = 0; x < 3; ++x) {
                this.addSlotToContainer(new Slot(craftMatrix, (x + y * 3), 36 + x * 18, 17 + y * 18));
            }
        }
        

        // Player Inventory, Slot 9-35, Slot IDs 9-35
        for (int y = 0; y < 3; ++y) {
            for (int x = 0; x < 9; ++x) {
                this.addSlotToContainer(new Slot(playerInv, x + y * 9 + 9, 8 + x * 18, 84 + y * 18));
            }
        }

        // Player Inventory, Slot 0-8, Slot IDs 36-44
        for (int x = 0; x < 9; ++x) {
            this.addSlotToContainer(new Slot(playerInv, x, 8 + x * 18, 142));
        }
        
        onCraftMatrixChanged(craftMatrix);
    }
    @Override
    public boolean canInteractWith(EntityPlayer playerIn) {
        if(world.getBlockState(pos).getBlock()!= BlockHandler.stove){
            return false;
        }else{return playerIn.getDistanceSq(pos)<= 64.00;}
    
        
    }
     public void onCraftMatrixChanged(IInventory inventoryIn)
        {
          //  this.craftResult.setInventorySlotContents(0, StoveCraftingManager.getInstance().findMatchingRecipe(this.craftMatrix, this.world));
        }
    
     public ItemStack transferStackInSlot(EntityPlayer playerIn, int index)
        {
            ItemStack itemstack = ItemStack.EMPTY;
            Slot slot = (Slot)this.inventorySlots.get(index);

            if (slot != null && slot.getHasStack())
            {
                ItemStack itemstack1 = slot.getStack();
                itemstack = itemstack1.copy();

                if (index == 0)
                {
                    itemstack1.getItem().onCreated(itemstack1, this.world, playerIn);

                    if (!this.mergeItemStack(itemstack1, 10, 46, true))
                    {
                        return ItemStack.EMPTY;
                    }

                    slot.onSlotChange(itemstack1, itemstack);
                }
                else if (index >= 10 && index < 37)
                {
                    if (!this.mergeItemStack(itemstack1, 37, 46, false))
                    {
                        return ItemStack.EMPTY;
                    }
                }
                else if (index >= 37 && index < 46)
                {
                    if (!this.mergeItemStack(itemstack1, 10, 37, false))
                    {
                        return ItemStack.EMPTY;
                    }
                }
                else if (!this.mergeItemStack(itemstack1, 10, 46, false))
                {
                    return ItemStack.EMPTY;
                }

                if (itemstack1.isEmpty())
                {
                    slot.putStack(ItemStack.EMPTY);
                }
                else
                {
                    slot.onSlotChanged();
                }

                if (itemstack1.getCount() == itemstack.getCount())
                {
                    return ItemStack.EMPTY;
                }

                ItemStack itemstack2 = slot.onTake(playerIn, itemstack1);

                if (index == 0)
                {
                    playerIn.dropItem(itemstack2, false);
                }
            }

            return itemstack;
        }
    
     public void onContainerClosed(EntityPlayer playerIn)
        {
            super.onContainerClosed(playerIn);

            if (!this.world.isRemote)
            {
                for (int i = 0; i < 9; ++i)
                {
                    ItemStack itemstack = this.craftMatrix.removeStackFromSlot(i);

                    if (!itemstack.isEmpty())
                    {
                        playerIn.dropItem(itemstack, false);
                    }
                }
            }
        }

    
    

}

 

 

this is my container. My problem is that I don't really know how to work with that extra slot. Did I declare it right? I think it is stupid to declare it as acrafting grid 1x1. What is the first parameter in the slot constructor? 

Posted

A... java field? You know,

public InventoryCrafting craftMatrix;
public IInventory craftResult;
public World world;
private final BlockPos pos; 

Those? They are all fields, and you want your own to store your slot so you can interact with it later from other methods

Posted
  On 4/30/2017 at 6:17 PM, V0idWa1k3r said:

A... java field? You know,

public InventoryCrafting craftMatrix;
public IInventory craftResult;
public World world;
private final BlockPos pos; 

Those? They are all fields, and you want your own to store your slot so you can interact with it later from other methods

Expand  

I mean, I know what a field is, but do you mean a Slot field?? 

Posted

Yes... Although now when I've looked into the container class it seems that you can get the slot by your ID using the getSlot method, so storing it in a field is not really necessary. Is is for your recipe handling as you need to pass it the content of your extra slot somehow ;)

 

Posted

Define 'extract'. If you mean get the ItemStack for the recipe manager you would get your slot with the method I have mentioned above and call Slot::getStack(). If you want to remove the item from the slot you can use Container::putStackInSlot(int slotID, ItemStack toPut)

Posted

I made some progress. I tried to extract the ItemStack, and if I try to println what's inside the slot, i see this. (1xitem.pan@0) which I think is my pan. The problem is that if I try to put it in this if statement, it doesn't work. 

 

if(craftMatrixSingleSlot.getStackInSlot(0) == new ItemStack(ItemHandler.pan)){
             System.out.println("PAN IN SLOT");
             this.craftResult.setInventorySlotContents(0, StoveCraftingManager.getInstance().findMatchingRecipe(this.craftMatrix,this.craftMatrixSingleSlot, this.world));
         } 

 

Not even the println works 

Am I doing anything wrong?

 

Posted

Apprently it's working! Thank you really much for your time. Do you have any idea how to change the place behavior for blocks? At this point, My texture is always oriented in a certain way independently of how you place the block. When you place a furnace, the front face is always facing you, but with my oven, it always faces north. I heard there is some kind of method to implement?

Posted

The vanilla code is your best friend, especially when you already know there's something in vanilla that does exactly what you want. In this case, it's the method getStateForPlacement.

Posted

you are perfectly right, I am trying to read some of the code, sometimes it is hard to find something in all that mess xD. Thanks for the clarification 

Posted

You can also do if(stackInSlot(0).getItem() == ModItems.myItem)

Which won't do metadata items (you will have to compare the metadata value as well) but it's much better than creating a temporary item stack and then throwing it away every frame.

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.

Posted
  On 5/2/2017 at 10:30 PM, Draco18s said:

You can also do if(stackInSlot(0).getItem() == ModItems.myItem)

Which won't do metadata items (you will have to compare the metadata value as well) but it's much better than creating a temporary item stack and then throwing it away every frame.

Expand  

perfect, I'll try that too. For now this method works because I have just one Item I want to check, but Is there a way to add the pan (or any other item that goes in that single slot) inside a recipe? I that case I would not have to check for the content of the slot but I would just check the whole recipe. I will have probably to change the addRecipe method so that I can consider that extra slot.

Posted

I was trying to work with blockstates in order to get the block placed depending on the player's facing, but I am having problem s with textures. It looks like I am doing wrong something with models, because If you jsut use blockstates and place the textures in there, I can see the block, although it places always facing north. If I try to use models, I always get the purple/black texture.

 

stove.json(model)

{
    "parent": "block/cube",
    "textures": {
        "particle": "blocks/stove/2",
        "side": "blocks/stove/3",
        "top": "blocks/stove/1",
        "front": "blocks/stove/2"
    }
}
 

 

stove.json(blockstate)

{
    "variants": {
        "facing=south": { "model": "stove"},
        "facing=west": { "model": "stove"},
        "facing=north": { "model": "stove"},
        "facing=east": { "model": "stove"}
        
    }
}

 

I tried to look up the vanilla code, and I don't see particular differences in model/blockstate. Thank you for your patience

Posted
  On 5/4/2017 at 5:23 PM, Sawii00 said:

I was trying to work with blockstates in order to get the block placed depending on the player's facing, but I am having problem s with textures. It looks like I am doing wrong something with models, because If you jsut use blockstates and place the textures in there, I can see the block, although it places always facing north. If I try to use models, I always get the purple/black texture.

 

stove.json(model)

{
    "parent": "block/cube",
    "textures": {
        "particle": "blocks/stove/2",
        "side": "blocks/stove/3",
        "top": "blocks/stove/1",
        "front": "blocks/stove/2"
    }
}
 

 

stove.json(blockstate)

{
    "variants": {
        "facing=south": { "model": "stove"},
        "facing=west": { "model": "stove"},
        "facing=north": { "model": "stove"},
        "facing=east": { "model": "stove"}
        
    }
}

 

I tried to look up the vanilla code, and I don't see particular differences in model/blockstate. Thank you for your patience

Expand  

Your blockstate is rendering the exact same model, for each different  variant.
You need to provide y-axis rotation to each facing.
Example V

        "facing=north": { "model": "echo:guillotine.obj" },
        "facing=south": { "model": "echo:guillotine.obj", "y": 180 },
        "facing=west":  { "model": "echo:guillotine.obj", "y": 270 },
        "facing=east":  { "model": "echo:guillotine.obj", "y": 90 }

 

Also previously known as eAndPi.

"Pi, is there a station coming up where we can board your train of thought?" -Kronnn

Published Mods: Underworld

Handy links: Vic_'s Forge events Own WIP Tutorials.

Posted
  On 5/4/2017 at 5:46 PM, Matryoshika said:

Your blockstate is rendering the exact same model, for each different  variant.
You need to provide y-axis rotation to each facing.
Example V

        "facing=north": { "model": "echo:guillotine.obj" },
        "facing=south": { "model": "echo:guillotine.obj", "y": 180 },
        "facing=west":  { "model": "echo:guillotine.obj", "y": 270 },
        "facing=east":  { "model": "echo:guillotine.obj", "y": 90 }

 

Expand  

Ok makes sense, but I do not think that's is gonna affect the texture. It should not give an error for that, should it??

Posted (edited)

this is the error I get:

 

[14:25:44] [Client thread/ERROR] [FML]: Exception loading model for variant food:stove#inventory for item "food:stove", normal location exception: 
net.minecraftforge.client.model.ModelLoaderRegistry$LoaderException: Exception loading model food:item/stove with loader VanillaLoader.INSTANCE, skipping
    at net.minecraftforge.client.model.ModelLoaderRegistry.getModel(ModelLoaderRegistry.java:153) ~[ModelLoaderRegistry.class:?]
    at net.minecraftforge.client.model.ModelLoader.loadItemModels(ModelLoader.java:336) ~[ModelLoader.class:?]
    at net.minecraft.client.renderer.block.model.ModelBakery.loadVariantItemModels(ModelBakery.java:175) ~[ModelBakery.class:?]
    at net.minecraftforge.client.model.ModelLoader.setupModelRegistry(ModelLoader.java:156) ~[ModelLoader.class:?]
    at net.minecraft.client.renderer.block.model.ModelManager.onResourceManagerReload(ModelManager.java:28) [ModelManager.class:?]
    at net.minecraft.client.resources.SimpleReloadableResourceManager.registerReloadListener(SimpleReloadableResourceManager.java:122) [SimpleReloadableResourceManager.class:?]
    at net.minecraft.client.Minecraft.init(Minecraft.java:541) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:387) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_80]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[?:1.7.0_80]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_80]
    at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_80]
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_80]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[?:1.7.0_80]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_80]
    at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_80]
    at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
    at GradleStart.main(GradleStart.java:26) [start/:?]
Caused by: java.io.FileNotFoundException: food:models/item/stove.json
    at net.minecraft.client.resources.FallbackResourceManager.getResource(FallbackResourceManager.java:69) ~[FallbackResourceManager.class:?]
    at net.minecraft.client.resources.SimpleReloadableResourceManager.getResource(SimpleReloadableResourceManager.java:65) ~[SimpleReloadableResourceManager.class:?]
    at net.minecraft.client.renderer.block.model.ModelBakery.loadModel(ModelBakery.java:334) ~[ModelBakery.class:?]
    at net.minecraftforge.client.model.ModelLoader.access$1600(ModelLoader.java:126) ~[ModelLoader.class:?]
    at net.minecraftforge.client.model.ModelLoader$VanillaLoader.loadModel(ModelLoader.java:937) ~[ModelLoader$VanillaLoader.class:?]
    at net.minecraftforge.client.model.ModelLoaderRegistry.getModel(ModelLoaderRegistry.java:149) ~[ModelLoaderRegistry.class:?]
    ... 20 more
[14:25:44] [Client thread/ERROR] [FML]: Exception loading model for variant food:stove#inventory for item "food:stove", blockstate location exception: 
net.minecraftforge.client.model.ModelLoaderRegistry$LoaderException: Exception loading model food:stove#inventory with loader VariantLoader.INSTANCE, skipping
    at net.minecraftforge.client.model.ModelLoaderRegistry.getModel(ModelLoaderRegistry.java:153) ~[ModelLoaderRegistry.class:?]
    at net.minecraftforge.client.model.ModelLoader.loadItemModels(ModelLoader.java:344) ~[ModelLoader.class:?]
    at net.minecraft.client.renderer.block.model.ModelBakery.loadVariantItemModels(ModelBakery.java:175) ~[ModelBakery.class:?]
    at net.minecraftforge.client.model.ModelLoader.setupModelRegistry(ModelLoader.java:156) ~[ModelLoader.class:?]
    at net.minecraft.client.renderer.block.model.ModelManager.onResourceManagerReload(ModelManager.java:28) [ModelManager.class:?]
    at net.minecraft.client.resources.SimpleReloadableResourceManager.registerReloadListener(SimpleReloadableResourceManager.java:122) [SimpleReloadableResourceManager.class:?]
    at net.minecraft.client.Minecraft.init(Minecraft.java:541) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:387) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_80]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[?:1.7.0_80]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_80]
    at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_80]
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_80]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[?:1.7.0_80]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_80]
    at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_80]
    at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
    at GradleStart.main(GradleStart.java:26) [start/:?]
Caused by: net.minecraft.client.renderer.block.model.ModelBlockDefinition$MissingVariantException
    at net.minecraft.client.renderer.block.model.ModelBlockDefinition.getVariant(ModelBlockDefinition.java:78) ~[ModelBlockDefinition.class:?]
    at net.minecraftforge.client.model.ModelLoader$VariantLoader.loadModel(ModelLoader.java:1253) ~[ModelLoader$VariantLoader.class:?]
    at net.minecraftforge.client.model.ModelLoaderRegistry.getModel(ModelLoaderRegistry.java:149) ~[ModelLoaderRegistry.class:?]
    ... 20 more
[14:25:44] [Client thread/ERROR] [FML]: Exception loading model for variant food:stove#normal for blockstate "food:stove"
net.minecraftforge.client.model.ModelLoaderRegistry$LoaderException: Exception loading model food:stove#normal with loader VariantLoader.INSTANCE, skipping
    at net.minecraftforge.client.model.ModelLoaderRegistry.getModel(ModelLoaderRegistry.java:153) ~[ModelLoaderRegistry.class:?]
    at net.minecraftforge.client.model.ModelLoader.registerVariant(ModelLoader.java:260) ~[ModelLoader.class:?]
    at net.minecraft.client.renderer.block.model.ModelBakery.loadBlock(ModelBakery.java:153) ~[ModelBakery.class:?]
    at net.minecraftforge.client.model.ModelLoader.loadBlocks(ModelLoader.java:248) ~[ModelLoader.class:?]
    at net.minecraftforge.client.model.ModelLoader.setupModelRegistry(ModelLoader.java:155) ~[ModelLoader.class:?]
    at net.minecraft.client.renderer.block.model.ModelManager.onResourceManagerReload(ModelManager.java:28) [ModelManager.class:?]
    at net.minecraft.client.resources.SimpleReloadableResourceManager.registerReloadListener(SimpleReloadableResourceManager.java:122) [SimpleReloadableResourceManager.class:?]
    at net.minecraft.client.Minecraft.init(Minecraft.java:541) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:387) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_80]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[?:1.7.0_80]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_80]
    at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_80]
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_80]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[?:1.7.0_80]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_80]
    at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_80]
    at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
    at GradleStart.main(GradleStart.java:26) [start/:?]
Caused by: net.minecraft.client.renderer.block.model.ModelBlockDefinition$MissingVariantException
    at net.minecraft.client.renderer.block.model.ModelBlockDefinition.getVariant(ModelBlockDefinition.java:78) ~[ModelBlockDefinition.class:?]
    at net.minecraftforge.client.model.ModelLoader$VariantLoader.loadModel(ModelLoader.java:1253) ~[ModelLoader$VariantLoader.class:?]
    at net.minecraftforge.client.model.ModelLoaderRegistry.getModel(ModelLoaderRegistry.java:149) ~[ModelLoaderRegistry.class:?]
    ... 21 more

 

 

 

I'll try to post something more readable.

Edited by Sawii00
Posted (edited)

1) use spoiler and code tags, not images and a copy paste dump

2) your item model is missing or improperly registered (READ the error, particularly the not where it says "File Not Found")

Edited by Draco18s

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.

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've tried the java version you linked to and got a new exit code of 127 Here is the new console log I also tried making sure that I had Java 8 selected with the version of Java 8 I already had installed and got the same exit code Here is the console log with that installation in case it has any differences I do notice both say 'Java checker returned some invalid data we don't understand:' followed by 'Minecraft might not start properly.' which could be some issues.  
    • Looking for unbeatable savings on Temu in 2025? Our exclusive Temu code [ald244107] is your key to unlocking a $100 OFF discount, plus much more! This verified promo code works for both new and existing customers, giving you up to 50% off your next order and even bigger savings on clearance items. With Temu coupon code [ald244107], you'll get a flat $100 discount on top of existing sales. First-time users can enjoy an extra 100% off select items, while returning shoppers automatically qualify for the $100 OFF when applying the code at checkout. Imagine saving up to 90% on your favorite products across the USA, Canada, UK, and many other countries! 🔥 Temu Coupon Highlights with Code [ald244107]:  * Temu New User Offer: Use ald244107 for 50% off your first order + $100 OFF.  * Temu Existing Customer Promo: Apply ald244107 to get an instant $100 OFF.  * Global Reach: Valid in the USA, UK, Canada, Germany, France, Japan, Chile, Colombia, Malaysia, Mexico, South Korea, Philippines, Saudi Arabia, Qatar, Pakistan, and more.  * Top 2025 Deal: Secure $200 OFF plus 100% bonus discounts with ald244107. Maximize Your Savings: Top Temu Deals for 2025 (Code: ald244107)  * ✅ Temu Memorial Day Sale: Save $100 with ald244107  * ✅ Temu First Order Special: Use ald244107 for 50% + $100 OFF  * ✅ Temu USA Exclusive: Get $100 off instantly with ald244107  * ✅ International Temu Codes: ald244107 works in Japan, Germany, Chile, and many others.  * ✅ Temu Reddit Discount: Enjoy $100 OFF for both new and old users.  * ✅ Temu Coupon Bundle 2025: Combine $100 OFF with up to 50% slash deals.  * ✅ 100% OFF Free Gift Code: Use ald244107 – no invitation needed!  * ✅ Temu Sign-Up Bonus: Instantly get a welcome $100 OFF.  * ✅ Free Temu Code for New Users: Apply ald244107 – no referral required.  * ✅ Temu Clearance Codes 2025: Use ald244107 for 85–100% discounts. This Temu code [ald244107] is more than just a discount; it's your ticket to free shipping, exclusive first-order deals, and stackable coupon bundles across electronics, fashion, home goods, and beauty products. You can truly unlock up to 90% OFF plus an additional $100 OFF on qualified orders. 💡 Pro Tip: Don't forget to apply ald244107 during checkout on the Temu app or website to activate your instant $100 discount, even if you’re a returning customer! Temu $100 OFF Code by Country (All Use ald244107):  * 🇺🇸 Temu USA – ald244107  * 🇯🇵 Temu Japan – ald244107  * 🇲🇽 Temu Mexico – ald244107  * 🇨🇱 Temu Chile – ald244107  * 🇨🇴 Temu Colombia – ald244107  * 🇲🇾 Temu Malaysia – ald244107  * 🇵🇭 Temu Philippines – ald244107  * 🇰🇷 Temu Korea – ald244107  * 🇵🇰 Temu Pakistan – ald244107  * 🇫🇮 Temu Finland – ald244107  * 🇸🇦 Temu Saudi Arabia – ald244107  * 🇶🇦 Temu Qatar – ald244107  * 🇫🇷 Temu France – ald244107  * 🇩🇪 Temu Germany – ald244107 Real Shoppers, Real Savings: User Reviews We love hearing about your experiences! Here’s what some happy shoppers are saying about using the Temu code [ald244107]:  * Alice W., USA ⭐️⭐️⭐️⭐️⭐️ (5/5) "Great experience! Temu's promo code {ald244107} saved me a lot on my first order. Highly recommend this offer!"  * James T., UK ⭐️⭐️⭐️⭐️ (4/5) "Very happy with the quality and prices on Temu. The $100 credits offer was a nice bonus using {ald244107}. Will shop again."  * Sara M., Canada ⭐️⭐️⭐️ (3/5) "Got some decent deals with the {ald244107} code, though shipping took a bit longer than expected. Overall satisfied with the credits."
    • Thank you so much! I didnt see it in the log😭😭  
    • So im completely new to modding in general, i have some experience in Behavior packs in minecraft bedrock and i would like to modify entities stats and attributes like in a behavior pack (health, damage, speed, xp drop...). The problem is that i cant find any information online on how to do that, and I have no clue on what to do and where to start. I am currently modding in 1.20.4 with IntelliJ if that helps. My final objective is to buff mobs health and damage (double it for exemple), but since there is no entity file anywhere i don't know how to change it... 😢
    • Hey there, nothing to do with the code, I am just suggesting you use Intelij IDEA. Trust me, it is the best.
  • Topics

×
×
  • Create New...

Important Information

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