Jump to content

Custom Block (Oven)


Sawii00

Recommended Posts

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
Link to comment
Share on other sites

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
Link to comment
Share on other sites

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? 

Link to comment
Share on other sites

Just now, 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

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

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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)

Link to comment
Share on other sites

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?

 

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

20 minutes ago, 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.

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

20 minutes ago, 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

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.

Link to comment
Share on other sites

36 minutes ago, 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 }

 

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

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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.

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.