Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Allow for crafting when having correct tools


bigbaddevil6
 Share

Recommended Posts

So I was debating if I should alter the recipe manager, but then thought that it wasn't necessary since they only just need to be there and not in any specific order or anything.

The whole Idea is that when I do a crafting event, I want to check to see if there are the right tools that would be an instance of ModTool. The ModTool class hasn't been made yet otherwise I would post it with my other code. Once the crafting was finished it would take damage. This is for a 5x5 crafting table that has 4 TileEntity slots. The crafting works and the TileEntity portion saves the items like it suppose to, but when I go to check to see if the item in the slot is valid, it throws a null pointer. I check for a null as well. So must be something I'm missing

 

 

TileEntity

 

 

package com.bigbaddevil7.rustic.blocks.tileentities;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;

/**
* Created by bigbaddevil7 on 5/28/2015.
*/
public class TileEntityProtoTable extends TileEntity implements IInventory {

    public static ItemStack[] items;

    public TileEntityProtoTable(){
        items = new ItemStack[4];
    }

    @Override
    public int getSizeInventory() {
        return 4;
    }

    @Override
    public ItemStack getStackInSlot(int slot) {
        return items[slot];
    }

    @Override
    public ItemStack decrStackSize(int i, int j) {
        ItemStack itemStack = getStackInSlot(i);

        if(itemStack != null){
            if(itemStack.stackSize <= j){
                setInventorySlotContents(i,null);
            }else{
                itemStack = itemStack.splitStack(j);
                this.markDirty();
            }
        }

        return itemStack;
    }

    @Override
    public ItemStack getStackInSlotOnClosing(int i) {
        ItemStack item = getStackInSlot(i);
        setInventorySlotContents(i, null);
        return item;
    }

    @Override
    public void setInventorySlotContents(int i, ItemStack itemStack) {
        items[i] = itemStack;

        if(itemStack != null && itemStack.stackSize > getInventoryStackLimit()){
            itemStack.stackSize = getInventoryStackLimit();
        }

        this.markDirty();
    }

    @Override
    public String getInventoryName() {
        return null;
    }

    @Override
    public boolean hasCustomInventoryName() {
        return false;
    }

    @Override
    public int getInventoryStackLimit() {
        return 1;
    }

    @Override
    public boolean isUseableByPlayer(EntityPlayer player) {
        return player.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) <= 64;
    }

    @Override
    public void openInventory() {

    }

    @Override
    public void closeInventory() {

    }

    @Override
    public boolean isItemValidForSlot(int i, ItemStack stack) {
        return true;
    }

    @Override
    public void writeToNBT(NBTTagCompound compound){
        super.writeToNBT(compound);

        NBTTagList items = new NBTTagList();

        for(int i = 0; i < getSizeInventory(); i++){
            ItemStack stack = getStackInSlot(i);

            if(stack != null){
                NBTTagCompound item = new NBTTagCompound();
                item.setByte("Slot", (byte)i);
                stack.writeToNBT(item);
                items.appendTag(item);
            }
        }

        compound.setTag("Items", items);
    }

    @Override
    public void readFromNBT(NBTTagCompound compound){
        super.readFromNBT(compound);

        NBTTagList items = compound.getTagList("Items", 10);

        for(int i = 0; i < items.tagCount(); i++){
            NBTTagCompound item = (NBTTagCompound)items.getCompoundTagAt(i);
            int slot = item.getByte("Slot");

            if(slot >= 0 && slot < getSizeInventory()) {
                setInventorySlotContents(slot, ItemStack.loadItemStackFromNBT(item));
            }
        }
    }

    public static boolean hasToolInSlot(){
        if(items[0].getItem() != null && items[0].getItem().equals(Items.diamond)){
            return true;
        }else {
            return false;
        }
    }
}

 

 

 

Container

 

 

 


package com.bigbaddevil7.rustic.blocks.container;

import com.bigbaddevil7.rustic.blocks.tileentities.SlotTool;
import com.bigbaddevil7.rustic.blocks.tileentities.TileEntityProtoTable;
import com.bigbaddevil7.rustic.crafting.ProtoTableCraftingManager;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.init.Items;
import net.minecraft.inventory.*;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;

/**
* Created by bigbaddevil7 on 5/28/2015.
*/
public class ProtoTableContainer extends Container {

    public InventoryCrafting craftMatrix;
    public IInventory craftResult;
    private World worldObj;

    public static TileEntityProtoTable table;

    public ProtoTableContainer(InventoryPlayer inventoryPlayer, World word,TileEntityProtoTable table){
        this.worldObj = word;
        this.table = table;
        craftMatrix = new InventoryCrafting(this, 5,5);
        craftResult = new InventoryCraftResult();

        this.addSlotToContainer(new SlotCrafting(inventoryPlayer.player, craftMatrix, craftResult, 0 , 141, 11));

        for(int i = 0; i < 2; i++){
            for(int k = 0; k < 2; k++){
                this.addSlotToContainer(new SlotTool(table, k + i * 2, 115  + k * 18 * 2, 43 + i * 18 * 2));
            }
        }


        for(int i = 0; i < 5; i++){
            for(int k = 0; k < 5; k++){
                this.addSlotToContainer(new Slot(craftMatrix, k + i * 5, 8 + k * 18, 7 + i * 18));
            }
        }

        for(int i = 0; i < 3; i++){
            for(int k  = 0; k < 9; k++){
                this.addSlotToContainer(new Slot(inventoryPlayer, k + i * 9 + 9, 8 + k * 18, 106 + i * 18));
            }
        }

        for(int i = 0; i < 9; i++){
            this.addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 164));
        }

        onCraftMatrixChanged(craftMatrix);
    }

    @Override
    public boolean canInteractWith(EntityPlayer player) {
        return table.isUseableByPlayer(player);
    }

    public void onCraftMatrixChanged(IInventory inventory){
        craftResult.setInventorySlotContents(0 , ProtoTableCraftingManager.getInstance().findMatchingRecipe(craftMatrix, worldObj));
    }

    @Override
    public ItemStack transferStackInSlot(EntityPlayer player, int i){
        return null;
    }

    @Override
    public void onContainerClosed(EntityPlayer player){
        super.onContainerClosed(player);

        if (!this.worldObj.isRemote){
            for (int i = 0; i < 25; ++i)
            {
                ItemStack itemstack = this.craftMatrix.getStackInSlotOnClosing(i);

                if (itemstack != null)
                {
                    player.dropPlayerItemWithRandomChoice(itemstack, false);
                }
            }
        }
    }
}

 

 

 

 

Crafting Manager

 

 

package com.bigbaddevil7.rustic.crafting;

import com.bigbaddevil7.rustic.blocks.container.ProtoTableContainer;
import com.bigbaddevil7.rustic.blocks.tileentities.TileEntityProtoTable;
import net.minecraft.block.Block;
import net.minecraft.init.Items;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.*;
import net.minecraft.world.World;

import java.util.*;

/**
* Created by bigbaddevil7 on 11/15/2014.
*/
public class ProtoTableCraftingManager {

    /** The static instance of this class */
    private static final ProtoTableCraftingManager instance = new ProtoTableCraftingManager();
    /** A list of all the recipes added */
    private List recipes = new ArrayList();

    /**
     * Returns the static instance of this class
     */
    public static final ProtoTableCraftingManager getInstance()
    {
        /** The static instance of this class */
        return instance;
    }

    private ProtoTableCraftingManager()
    {
            this.addRecipe(new ItemStack(Items.diamond), new Object[]{"XXXXX", "XXXXX", "XXXXX", "XXXXX", "XXXXX", 'X', Items.stick});
            //this.addTableShapelessRecipe(new ItemStack(ModItems.itemWand), Items.stick, Items.stick, Items.diamond);
            Collections.sort(this.recipes, new ProtoTableRecipeSorter(this));
    }

    public ProtoTableShapedRecipe addRecipe(ItemStack stack, Object ... varargs)
    {
        String s = "";
        int i = 0;
        int j = 0;
        int k = 0;

        if (varargs[i] instanceof String[])
        {
            String[] astring = (String[])((String[])varargs[i++]);

            for (int l = 0; l < astring.length; ++l)
            {
                String s1 = astring[l];
                ++k;
                j = s1.length();
                s = s + s1;
            }
        }
        else
        {
            while (varargs[i] instanceof String)//checks to see if it is a string
            {
                String s2 = (String)varargs[i++];//gets the string at index i then adds 1
                ++k;//k = 1
                j = s2.length();//j = 5
                s = s + s2;// s = s + 5
            }
        }

        HashMap hashmap;

        for (hashmap = new HashMap(); i < varargs.length; i += 2)
        {
            Character character = (Character)varargs[i];
            ItemStack itemstack1 = null;

            if (varargs[i + 1] instanceof Item)
            {
                itemstack1 = new ItemStack((Item)varargs[i + 1]);
            }
            else if (varargs[i + 1] instanceof Block)
            {
                itemstack1 = new ItemStack((Block)varargs[i + 1], 1, 32767);
            }
            else if (varargs[i + 1] instanceof ItemStack)
            {
                itemstack1 = (ItemStack)varargs[i + 1];
            }

            hashmap.put(character, itemstack1);
        }

        ItemStack[] aitemstack = new ItemStack[j * k];

        for (int i1 = 0; i1 < j * k; ++i1)
        {
            char c0 = s.charAt(i1);

            if (hashmap.containsKey(Character.valueOf(c0)))
            {
                aitemstack[i1] = ((ItemStack)hashmap.get(Character.valueOf(c0))).copy();
            }
            else
            {
                aitemstack[i1] = null;
            }
        }

        ProtoTableShapedRecipe shapedrecipes = new ProtoTableShapedRecipe(j, k, aitemstack, stack);
        this.recipes.add(shapedrecipes);
        return shapedrecipes;
    }

    public void addTableShapelessRecipe(ItemStack p_77596_1_, Object ... p_77596_2_)
    {
        ArrayList arraylist = new ArrayList();
        Object[] aobject = p_77596_2_;
        int i = p_77596_2_.length;

        for (int j = 0; j < i; ++j)
        {
            Object object1 = aobject[j];

            if (object1 instanceof ItemStack)
            {
                arraylist.add(((ItemStack)object1).copy());
            }
            else if (object1 instanceof Item)
            {
                arraylist.add(new ItemStack((Item)object1));
            }
            else
            {
                if (!(object1 instanceof Block))
                {
                    throw new RuntimeException("Invalid shapeless recipy!");
                }

                arraylist.add(new ItemStack((Block)object1));
            }
        }

        this.recipes.add(new ProtoTableShapelessRecipe(p_77596_1_, arraylist));
    }

    public ItemStack findMatchingRecipe(InventoryCrafting inv, World world)
    {
        int i = 0;
        ItemStack itemstack = null;
        ItemStack itemstack1 = null;
        int j;

        for (j = 0; j < inv.getSizeInventory(); ++j)
        {

            ItemStack itemstack2 = inv.getStackInSlot(j);

            if (itemstack2 != null)
            {
                if (i == 0)
                {
                    itemstack = itemstack2;
                }

                if (i == 1)
                {
                    itemstack1 = itemstack2;
                }

                ++i;
            }
        }

        if (i == 2 && itemstack.getItem() == itemstack1.getItem() && itemstack.stackSize == 1 && itemstack1.stackSize == 1 && itemstack.getItem().isRepairable())
        {
            Item item = itemstack.getItem();
            int j1 = item.getMaxDamage() - itemstack.getItemDamageForDisplay();
            int k = item.getMaxDamage() - itemstack1.getItemDamageForDisplay();
            int l = j1 + k + item.getMaxDamage() * 5 / 100;
            int i1 = item.getMaxDamage() - l;

            if (i1 < 0)
            {
                i1 = 0;
            }

            return new ItemStack(itemstack.getItem(), 1, i1);
        }
        else
        {
            for (j = 0; j < this.recipes.size(); ++j)
            {
                IRecipe irecipe = (IRecipe)this.recipes.get(j);

                if (irecipe.matches(inv, world))
                {
                    return irecipe.getCraftingResult(inv);
                }
            }

            return null;
        }
    }

    /**
     * returns the List<> of all recipes
     */
    public List getRecipeList()
    {
        return this.recipes;
    }
}

 

 

 

Shaped Recipe that has the check in it for the hasToolInSlot

 

 


package com.bigbaddevil7.rustic.crafting;

import com.bigbaddevil7.rustic.blocks.tileentities.TileEntityProtoTable;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;

/**
* Created by bigbaddevil7 on 11/15/2014.
*/
public class ProtoTableShapedRecipe implements IRecipe {
    /** How many horizontal slots this recipe is wide. */
    public final int recipeWidth;
    /** How many vertical slots this recipe uses. */
    public final int recipeHeight;
    /** Is a array of ItemStack that composes the recipe. */
    public final ItemStack[] recipeItems;
    /** Is the ItemStack that you get when craft the recipe. */
    private ItemStack recipeOutput;
    private boolean field_92101_f;

    public ProtoTableShapedRecipe(int p_i1917_1_, int p_i1917_2_, ItemStack[] p_i1917_3_, ItemStack p_i1917_4_)
    {
        this.recipeWidth = p_i1917_1_;
        this.recipeHeight = p_i1917_2_;
        this.recipeItems = p_i1917_3_;
        this.recipeOutput = p_i1917_4_;
    }

    public ItemStack getRecipeOutput()
    {
        return this.recipeOutput;
    }

    /**
     * Used to check if a recipe matches current crafting inventory
     */
    public boolean matches(InventoryCrafting p_77569_1_, World p_77569_2_)
    {
        for (int i = 0; i <= 5 - this.recipeWidth; ++i)
        {
            for (int j = 0; j <= 5 - this.recipeHeight; ++j)
            {
                if (this.checkMatch(p_77569_1_, i, j, true))
                {
                    return true;
                }

                if (this.checkMatch(p_77569_1_, i, j, false))
                {
                    return true;
                }
            }
        }

        return false;
    }

    /**
     * Checks if the region of a crafting inventory is match for the recipe.
     */
    private boolean checkMatch(InventoryCrafting p_77573_1_, int p_77573_2_, int p_77573_3_, boolean p_77573_4_)
    {
        for (int k = 0; k < 5; ++k)
        {
            for (int l = 0; l < 5; ++l)
            {
                int i1 = k - p_77573_2_;
                int j1 = l - p_77573_3_;
                ItemStack itemstack = null;

                if(!TileEntityProtoTable.hasToolInSlot()){
                    return false;
                }

                if (i1 >= 0 && j1 >= 0 && i1 < this.recipeWidth && j1 < this.recipeHeight)
                {
                    if (p_77573_4_)
                    {
                        itemstack = this.recipeItems[this.recipeWidth - i1 - 1 + j1 * this.recipeWidth];
                    }
                    else
                    {
                        itemstack = this.recipeItems[i1 + j1 * this.recipeWidth];
                    }
                }

                ItemStack itemstack1 = p_77573_1_.getStackInRowAndColumn(k, l);

                if (itemstack1 != null || itemstack != null)
                {
                    if (itemstack1 == null && itemstack != null || itemstack1 != null && itemstack == null)
                    {
                        return false;
                    }

                    if (itemstack.getItem() != itemstack1.getItem())
                    {
                        return false;
                    }

                    if (itemstack.getItemDamage() != 32767 && itemstack.getItemDamage() != itemstack1.getItemDamage())
                    {
                        return false;
                    }
                }
            }
        }

        return true;
    }

    /**
     * Returns an Item that is the result of this recipe
     */
    public ItemStack getCraftingResult(InventoryCrafting p_77572_1_)
    {
        ItemStack itemstack = this.getRecipeOutput().copy();

        if (this.field_92101_f)
        {
            for (int i = 0; i < p_77572_1_.getSizeInventory(); ++i)
            {
                ItemStack itemstack1 = p_77572_1_.getStackInSlot(i);

                if (itemstack1 != null && itemstack1.hasTagCompound())
                {
                    itemstack.setTagCompound((NBTTagCompound)itemstack1.stackTagCompound.copy());
                }
            }
        }

        return itemstack;
    }

    /**
     * Returns the size of the recipe area
     */
    public int getRecipeSize()
    {
        return this.recipeWidth * this.recipeHeight;
    }

}


 

 

 

 

Crash Log

 

 

---- Minecraft Crash Report ----

// I just don't know what went wrong :(

 

Time: 5/31/15 8:54 AM

Description: Ticking memory connection

 

java.lang.NullPointerException: Ticking memory connection

at com.bigbaddevil7.rustic.blocks.tileentities.TileEntityProtoTable.hasToolInSlot(TileEntityProtoTable.java:138)

at com.bigbaddevil7.rustic.crafting.ProtoTableShapedRecipe.checkMatch(ProtoTableShapedRecipe.java:74)

at com.bigbaddevil7.rustic.crafting.ProtoTableShapedRecipe.matches(ProtoTableShapedRecipe.java:46)

at com.bigbaddevil7.rustic.crafting.ProtoTableCraftingManager.findMatchingRecipe(ProtoTableCraftingManager.java:196)

at com.bigbaddevil7.rustic.blocks.container.ProtoTableContainer.onCraftMatrixChanged(ProtoTableContainer.java:64)

at com.bigbaddevil7.rustic.blocks.container.ProtoTableContainer.<init>(ProtoTableContainer.java:55)

at com.bigbaddevil7.rustic.handler.GuiHandler.getServerGuiElement(GuiHandler.java:25)

at cpw.mods.fml.common.network.NetworkRegistry.getRemoteGuiContainer(NetworkRegistry.java:243)

at cpw.mods.fml.common.network.internal.FMLNetworkHandler.openGui(FMLNetworkHandler.java:75)

at com.bigbaddevil7.rustic.blocks.BlockProtoTable.onBlockActivated(BlockProtoTable.java:28)

at net.minecraft.server.management.ItemInWorldManager.activateBlockOrUseItem(ItemInWorldManager.java:409)

at net.minecraft.network.NetHandlerPlayServer.processPlayerBlockPlacement(NetHandlerPlayServer.java:593)

at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:74)

at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:122)

at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241)

at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182)

at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726)

at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614)

at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118)

at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485)

at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752)

 

 

A detailed walkthrough of the error, its code path and all known details is as follows:

---------------------------------------------------------------------------------------

 

-- Head --

Stacktrace:

at com.bigbaddevil7.rustic.blocks.tileentities.TileEntityProtoTable.hasToolInSlot(TileEntityProtoTable.java:138)

at com.bigbaddevil7.rustic.crafting.ProtoTableShapedRecipe.checkMatch(ProtoTableShapedRecipe.java:74)

at com.bigbaddevil7.rustic.crafting.ProtoTableShapedRecipe.matches(ProtoTableShapedRecipe.java:46)

at com.bigbaddevil7.rustic.crafting.ProtoTableCraftingManager.findMatchingRecipe(ProtoTableCraftingManager.java:196)

at com.bigbaddevil7.rustic.blocks.container.ProtoTableContainer.onCraftMatrixChanged(ProtoTableContainer.java:64)

at com.bigbaddevil7.rustic.blocks.container.ProtoTableContainer.<init>(ProtoTableContainer.java:55)

at com.bigbaddevil7.rustic.handler.GuiHandler.getServerGuiElement(GuiHandler.java:25)

at cpw.mods.fml.common.network.NetworkRegistry.getRemoteGuiContainer(NetworkRegistry.java:243)

at cpw.mods.fml.common.network.internal.FMLNetworkHandler.openGui(FMLNetworkHandler.java:75)

at com.bigbaddevil7.rustic.blocks.BlockProtoTable.onBlockActivated(BlockProtoTable.java:28)

at net.minecraft.server.management.ItemInWorldManager.activateBlockOrUseItem(ItemInWorldManager.java:409)

at net.minecraft.network.NetHandlerPlayServer.processPlayerBlockPlacement(NetHandlerPlayServer.java:593)

at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:74)

at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:122)

at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241)

 

-- Ticking connection --

Details:

Connection: net.minecraft.network.NetworkManager@7f965f33

Stacktrace:

at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182)

at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726)

at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614)

at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118)

at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485)

at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752)

 

-- System Details --

Details:

Minecraft Version: 1.7.10

Operating System: Windows 8.1 (amd64) version 6.3

Java Version: 1.7.0_71, Oracle Corporation

Java VM Version: Java HotSpot 64-Bit Server VM (mixed mode), Oracle Corporation

Memory: 694883944 bytes (662 MB) / 1037959168 bytes (989 MB) up to 1037959168 bytes (989 MB)

JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M

AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used

IntCache: cache: 0, tcache: 0, allocated: 13, tallocated: 95

FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.3.1408 4 mods loaded, 4 mods active

mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available

FML{7.10.99.99} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.3.1408-1.7.10.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available

Forge{10.13.3.1408} [Minecraft Forge] (forgeSrc-1.7.10-10.13.3.1408-1.7.10.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available

rustic{1.7.10-1.0} [Rustic] (Rustic 1.7.10) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available

GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.

Profiler Position: N/A (disabled)

Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used

Player Count: 1 / 8; [EntityPlayerMP['Player937'/405, l='New World', x=-96.45, y=79.00, z=287.42]]

Type: Integrated Server (map_client.txt)

Is Modded: Definitely; Client brand changed to 'fml,forge'

 

 

Link to comment
Share on other sites

Oops thought I added the crash log

 

 

---- Minecraft Crash Report ----

// I just don't know what went wrong :(

 

Time: 5/31/15 8:54 AM

Description: Ticking memory connection

 

java.lang.NullPointerException: Ticking memory connection

at com.bigbaddevil7.rustic.blocks.tileentities.TileEntityProtoTable.hasToolInSlot(TileEntityProtoTable.java:138)

at com.bigbaddevil7.rustic.crafting.ProtoTableShapedRecipe.checkMatch(ProtoTableShapedRecipe.java:74)

at com.bigbaddevil7.rustic.crafting.ProtoTableShapedRecipe.matches(ProtoTableShapedRecipe.java:46)

at com.bigbaddevil7.rustic.crafting.ProtoTableCraftingManager.findMatchingRecipe(ProtoTableCraftingManager.java:196)

at com.bigbaddevil7.rustic.blocks.container.ProtoTableContainer.onCraftMatrixChanged(ProtoTableContainer.java:64)

at com.bigbaddevil7.rustic.blocks.container.ProtoTableContainer.<init>(ProtoTableContainer.java:55)

at com.bigbaddevil7.rustic.handler.GuiHandler.getServerGuiElement(GuiHandler.java:25)

at cpw.mods.fml.common.network.NetworkRegistry.getRemoteGuiContainer(NetworkRegistry.java:243)

at cpw.mods.fml.common.network.internal.FMLNetworkHandler.openGui(FMLNetworkHandler.java:75)

at com.bigbaddevil7.rustic.blocks.BlockProtoTable.onBlockActivated(BlockProtoTable.java:28)

at net.minecraft.server.management.ItemInWorldManager.activateBlockOrUseItem(ItemInWorldManager.java:409)

at net.minecraft.network.NetHandlerPlayServer.processPlayerBlockPlacement(NetHandlerPlayServer.java:593)

at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:74)

at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:122)

at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241)

at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182)

at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726)

at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614)

at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118)

at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485)

at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752)

 

 

A detailed walkthrough of the error, its code path and all known details is as follows:

---------------------------------------------------------------------------------------

 

-- Head --

Stacktrace:

at com.bigbaddevil7.rustic.blocks.tileentities.TileEntityProtoTable.hasToolInSlot(TileEntityProtoTable.java:138)

at com.bigbaddevil7.rustic.crafting.ProtoTableShapedRecipe.checkMatch(ProtoTableShapedRecipe.java:74)

at com.bigbaddevil7.rustic.crafting.ProtoTableShapedRecipe.matches(ProtoTableShapedRecipe.java:46)

at com.bigbaddevil7.rustic.crafting.ProtoTableCraftingManager.findMatchingRecipe(ProtoTableCraftingManager.java:196)

at com.bigbaddevil7.rustic.blocks.container.ProtoTableContainer.onCraftMatrixChanged(ProtoTableContainer.java:64)

at com.bigbaddevil7.rustic.blocks.container.ProtoTableContainer.<init>(ProtoTableContainer.java:55)

at com.bigbaddevil7.rustic.handler.GuiHandler.getServerGuiElement(GuiHandler.java:25)

at cpw.mods.fml.common.network.NetworkRegistry.getRemoteGuiContainer(NetworkRegistry.java:243)

at cpw.mods.fml.common.network.internal.FMLNetworkHandler.openGui(FMLNetworkHandler.java:75)

at com.bigbaddevil7.rustic.blocks.BlockProtoTable.onBlockActivated(BlockProtoTable.java:28)

at net.minecraft.server.management.ItemInWorldManager.activateBlockOrUseItem(ItemInWorldManager.java:409)

at net.minecraft.network.NetHandlerPlayServer.processPlayerBlockPlacement(NetHandlerPlayServer.java:593)

at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:74)

at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:122)

at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241)

 

-- Ticking connection --

Details:

Connection: net.minecraft.network.NetworkManager@7f965f33

Stacktrace:

at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182)

at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726)

at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614)

at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118)

at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485)

at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752)

 

-- System Details --

Details:

Minecraft Version: 1.7.10

Operating System: Windows 8.1 (amd64) version 6.3

Java Version: 1.7.0_71, Oracle Corporation

Java VM Version: Java HotSpot 64-Bit Server VM (mixed mode), Oracle Corporation

Memory: 694883944 bytes (662 MB) / 1037959168 bytes (989 MB) up to 1037959168 bytes (989 MB)

JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M

AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used

IntCache: cache: 0, tcache: 0, allocated: 13, tallocated: 95

FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.3.1408 4 mods loaded, 4 mods active

mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available

FML{7.10.99.99} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.3.1408-1.7.10.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available

Forge{10.13.3.1408} [Minecraft Forge] (forgeSrc-1.7.10-10.13.3.1408-1.7.10.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available

rustic{1.7.10-1.0} [Rustic] (Rustic 1.7.10) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available

GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.

Profiler Position: N/A (disabled)

Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used

Player Count: 1 / 8; [EntityPlayerMP['Player937'/405, l='New World', x=-96.45, y=79.00, z=287.42]]

Type: Integrated Server (map_client.txt)

Is Modded: Definitely; Client brand changed to 'fml,forge'

 

 

 

The call for the method is in the checkMatch() within the Shaped Recipe class line 74 in my IDE.

Link to comment
Share on other sites

so basically its throwing a null before it can check for null, since I'm calling .getItem() on the slot and nothing is there to even grab a comparison.

 

Edit: I made a check to see if items[0] is null. Now I got to redo my check because I found out that you can't make items[] a static variable because something else messes with it if you do and wont let you split the stack properly. So I got to redo how my hasToolInSlot works...

Link to comment
Share on other sites

 

 

public boolean hasToolInSlot(){
        if(items[0] != null) {
            if (items[0].getItem().equals(Items.diamond)) {
                return true;
            }
        }
        return false;
    }

 

 

 

That is the updated method for the HasToolInSlot(). I am having this method get called in Shaped Recipe class. I can't make this method static because of items[] not being able to be static. So I always thought if you have to reference a non static variable or method to make a instance of the class that contains them and pass that along with what ever you need. So I did and threw another null pointer....

 

 

 

---- Minecraft Crash Report ----

// Hey, that tickles! Hehehe!

 

Time: 5/31/15 9:34 AM

Description: Ticking memory connection

 

java.lang.NullPointerException: Ticking memory connection

at com.bigbaddevil7.rustic.crafting.ProtoTableShapedRecipe.checkMatch(ProtoTableShapedRecipe.java:74)

at com.bigbaddevil7.rustic.crafting.ProtoTableShapedRecipe.matches(ProtoTableShapedRecipe.java:46)

at com.bigbaddevil7.rustic.crafting.ProtoTableCraftingManager.findMatchingRecipe(ProtoTableCraftingManager.java:196)

at com.bigbaddevil7.rustic.blocks.container.ProtoTableContainer.onCraftMatrixChanged(ProtoTableContainer.java:64)

at com.bigbaddevil7.rustic.blocks.container.ProtoTableContainer.<init>(ProtoTableContainer.java:55)

at com.bigbaddevil7.rustic.handler.GuiHandler.getServerGuiElement(GuiHandler.java:25)

at cpw.mods.fml.common.network.NetworkRegistry.getRemoteGuiContainer(NetworkRegistry.java:243)

at cpw.mods.fml.common.network.internal.FMLNetworkHandler.openGui(FMLNetworkHandler.java:75)

at com.bigbaddevil7.rustic.blocks.BlockProtoTable.onBlockActivated(BlockProtoTable.java:28)

at net.minecraft.server.management.ItemInWorldManager.activateBlockOrUseItem(ItemInWorldManager.java:409)

at net.minecraft.network.NetHandlerPlayServer.processPlayerBlockPlacement(NetHandlerPlayServer.java:593)

at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:74)

at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:122)

at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241)

at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182)

at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726)

at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614)

at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118)

at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485)

at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752)

 

 

A detailed walkthrough of the error, its code path and all known details is as follows:

---------------------------------------------------------------------------------------

 

-- Head --

Stacktrace:

at com.bigbaddevil7.rustic.crafting.ProtoTableShapedRecipe.checkMatch(ProtoTableShapedRecipe.java:74)

at com.bigbaddevil7.rustic.crafting.ProtoTableShapedRecipe.matches(ProtoTableShapedRecipe.java:46)

at com.bigbaddevil7.rustic.crafting.ProtoTableCraftingManager.findMatchingRecipe(ProtoTableCraftingManager.java:196)

at com.bigbaddevil7.rustic.blocks.container.ProtoTableContainer.onCraftMatrixChanged(ProtoTableContainer.java:64)

at com.bigbaddevil7.rustic.blocks.container.ProtoTableContainer.<init>(ProtoTableContainer.java:55)

at com.bigbaddevil7.rustic.handler.GuiHandler.getServerGuiElement(GuiHandler.java:25)

at cpw.mods.fml.common.network.NetworkRegistry.getRemoteGuiContainer(NetworkRegistry.java:243)

at cpw.mods.fml.common.network.internal.FMLNetworkHandler.openGui(FMLNetworkHandler.java:75)

at com.bigbaddevil7.rustic.blocks.BlockProtoTable.onBlockActivated(BlockProtoTable.java:28)

at net.minecraft.server.management.ItemInWorldManager.activateBlockOrUseItem(ItemInWorldManager.java:409)

at net.minecraft.network.NetHandlerPlayServer.processPlayerBlockPlacement(NetHandlerPlayServer.java:593)

at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:74)

at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:122)

at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241)

 

-- Ticking connection --

Details:

Connection: net.minecraft.network.NetworkManager@7de0e803

Stacktrace:

at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182)

at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726)

at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614)

at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118)

at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485)

at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752)

 

-- System Details --

Details:

Minecraft Version: 1.7.10

Operating System: Windows 8.1 (amd64) version 6.3

Java Version: 1.7.0_71, Oracle Corporation

Java VM Version: Java HotSpot 64-Bit Server VM (mixed mode), Oracle Corporation

Memory: 696318400 bytes (664 MB) / 1037959168 bytes (989 MB) up to 1037959168 bytes (989 MB)

JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M

AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used

IntCache: cache: 0, tcache: 0, allocated: 12, tallocated: 94

FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.3.1408 4 mods loaded, 4 mods active

mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available

FML{7.10.99.99} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.3.1408-1.7.10.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available

Forge{10.13.3.1408} [Minecraft Forge] (forgeSrc-1.7.10-10.13.3.1408-1.7.10.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available

rustic{1.7.10-1.0} [Rustic] (Rustic 1.7.10) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available

GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.

Profiler Position: N/A (disabled)

Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used

Player Count: 1 / 8; [EntityPlayerMP['Player984'/371, l='New World', x=-96.45, y=79.00, z=287.42]]

Type: Integrated Server (map_client.txt)

Is Modded: Definitely; Client brand changed to 'fml,forge'

 

 

 

updated Shaped Recipe class

 

 

package com.bigbaddevil7.rustic.crafting;

import com.bigbaddevil7.rustic.blocks.tileentities.TileEntityProtoTable;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;

/**
* Created by bigbaddevil7 on 11/15/2014.
*/
public class ProtoTableShapedRecipe implements IRecipe {
    /** How many horizontal slots this recipe is wide. */
    public final int recipeWidth;
    /** How many vertical slots this recipe uses. */
    public final int recipeHeight;
    /** Is a array of ItemStack that composes the recipe. */
    public final ItemStack[] recipeItems;
    /** Is the ItemStack that you get when craft the recipe. */
    private ItemStack recipeOutput;
    private boolean field_92101_f;

    public ProtoTableShapedRecipe(int p_i1917_1_, int p_i1917_2_, ItemStack[] p_i1917_3_, ItemStack p_i1917_4_)
    {
        this.recipeWidth = p_i1917_1_;
        this.recipeHeight = p_i1917_2_;
        this.recipeItems = p_i1917_3_;
        this.recipeOutput = p_i1917_4_;
    }

    public ItemStack getRecipeOutput()
    {
        return this.recipeOutput;
    }

    /**
     * Used to check if a recipe matches current crafting inventory
     */
    public boolean matches(InventoryCrafting p_77569_1_, World p_77569_2_)
    {
        for (int i = 0; i <= 5 - this.recipeWidth; ++i)
        {
            for (int j = 0; j <= 5 - this.recipeHeight; ++j)
            {
                if (this.checkMatch(p_77569_1_, i, j, true))
                {
                    return true;
                }

                if (this.checkMatch(p_77569_1_, i, j, false))
                {
                    return true;
                }
            }
        }

        return false;
    }

    /**
     * Checks if the region of a crafting inventory is match for the recipe.
     */
    private boolean checkMatch(InventoryCrafting p_77573_1_, int p_77573_2_, int p_77573_3_, boolean p_77573_4_)
    {
        for (int k = 0; k < 5; ++k)
        {
            for (int l = 0; l < 5; ++l)
            {
                int i1 = k - p_77573_2_;
                int j1 = l - p_77573_3_;
                ItemStack itemstack = null;

                if(!TileEntityProtoTable.entityInstance.hasToolInSlot()){
                    return false;
                }

                if (i1 >= 0 && j1 >= 0 && i1 < this.recipeWidth && j1 < this.recipeHeight)
                {
                    if (p_77573_4_)
                    {
                        itemstack = this.recipeItems[this.recipeWidth - i1 - 1 + j1 * this.recipeWidth];
                    }
                    else
                    {
                        itemstack = this.recipeItems[i1 + j1 * this.recipeWidth];
                    }
                }

                ItemStack itemstack1 = p_77573_1_.getStackInRowAndColumn(k, l);

                if (itemstack1 != null || itemstack != null)
                {
                    if (itemstack1 == null && itemstack != null || itemstack1 != null && itemstack == null)
                    {
                        return false;
                    }

                    if (itemstack.getItem() != itemstack1.getItem())
                    {
                        return false;
                    }

                    if (itemstack.getItemDamage() != 32767 && itemstack.getItemDamage() != itemstack1.getItemDamage())
                    {
                        return false;
                    }
                }
            }
        }

        return true;
    }

    /**
     * Returns an Item that is the result of this recipe
     */
    public ItemStack getCraftingResult(InventoryCrafting p_77572_1_)
    {
        ItemStack itemstack = this.getRecipeOutput().copy();

        if (this.field_92101_f)
        {
            for (int i = 0; i < p_77572_1_.getSizeInventory(); ++i)
            {
                ItemStack itemstack1 = p_77572_1_.getStackInSlot(i);

                if (itemstack1 != null && itemstack1.hasTagCompound())
                {
                    itemstack.setTagCompound((NBTTagCompound)itemstack1.stackTagCompound.copy());
                }
            }
        }

        return itemstack;
    }

    /**
     * Returns the size of the recipe area
     */
    public int getRecipeSize()
    {
        return this.recipeWidth * this.recipeHeight;
    }

}

 

 

 

The check in the Shaped Recipe

if(!TileEntityProtoTable.entityInstance.hasToolInSlot()){
                    return false;
                }

 

Instance line in TileEntity

public static TileEntityProtoTable entityInstance;

Link to comment
Share on other sites

Please learn basic Java.

Just making a field of a certain type (entityInstance in your case) doesn't magically put the correct value into that field based on the context.

In your IRecipe you cannot get "the" TileEntity, because there is not "the one" TileEntity... The player might not even have yet made on of your TileEntities and then use your IRecipe in a crafting table.

Link to comment
Share on other sites

is it basic java? I've done two college classes specializing in Java beginner and advanced, and they have never mentioned stuff like this. Only how to use interfaces, inheritance, queues, stacks, and all the lesser stuff how making objects and general java rules... Where would you suggest I learn more about these issues, besides the Java trails. I know you say you can't learn programming from modding and understand why, I use it as a way to put into action what skills I do have. In return Minecraft beats the hell out of me for trying it seems.

I always hear people say learn basic Java and I for the most part think I do know basic Java. I was able to do bukkit/spigot plugins in Java for a while without much hassle. Is it more of a "How to Develop a game" that I should learn? More of the rules of java? Find a better college because this one doesn't have a higher Java class to take and the one I did take doesn't seem valuable. I don't know. Kind of at a loss here.

Link to comment
Share on other sites

I should have been more clear. This is not about Java in particular. This is about programming. And this is stuff that you can't really teach, this is just things you learn by experience.

But this, yes, is really absolute basics of programming. Programming is not magic. You need to tell the computer what you want it to do. In this case you told it something that makes no sense. So it does that. The computer doesn't read your mind. It only stupidly executes exactly what you tell it. And only that. Without any give.

Link to comment
Share on other sites

Ok, so what would I have to do to properly make an instance of the class. I realized my error when I made mine because the one I looked at was in the main method, when you make an instance of your mod, that has annotations, and that I created the variable entityInstance but never assigned anything to it, so its null. I agree that is basic Java. I was in a rush when I did that and didn't stop to look at what I had done. So with that in mind and stopping to think about it for a while. Wouldn't I pass the itself into that variable once it has been gotten from the world. Then I would take that and be able to get information from it.

Link to comment
Share on other sites

You don't understand how this works, do you.

You are in a recipe. This recipe does not have an instance of your TileEntity available. I could make a new world, make a crafting table and then use your recipe. Which TileEntity would it use? There is none!

Or I make a block that has your TE but then leave it in a chunk so it gets unloaded. Now what?

Or I make 100 of them. Which one should be used?

Link to comment
Share on other sites

Yea, thats what I'm trying to do is get it so the recipe can check the appropriate TileEntity. Obviously I don't have it setup properly. I understand the idea that its checking some tileEntity that isn't linked to it because it is just a recipe checker that take data from the crafting manager and tell the crafting manager if it was valid or not and that is it. it doesn't know where it is. What if instead of doing it the way I been trying to do it, because even I think it seems like a stupid idea the more I think of it. What if I do the check in the FindMatchingRecipe() of the craftingManager since its already passed the current inventory and world, or even in that matter do it in the container since they are already linked and have it checked there during the craftResult. 

 

By the way I bet you are raging at me, but I do much appreciate your time. Not often will people sit and explain why of what you are doing is wrong.

Link to comment
Share on other sites

The are both of the same inventory its for a 5x5 crafting table that has 4 Tile entity slots the rest is just like a normal crafting table, share the same container. Unless there is a piece to this I am missing I would believed they are already linked because it need to add the TileEntity slots to the container so it can use its logic along with its crafting counter part. Their constructors both grab the same location from the Gui Handler.

Link to comment
Share on other sites

When I looked at all the other examples that how it was shown and src code from other mods it's what I saw. I also only want the crafting grid to act like a normal crafting grid but bigger, so it was also why not do it like the already made crafting table add a TileEntity to it.

Link to comment
Share on other sites

Ok I was having issues trying to get my TileEntity to always be checking to make sure if the item is there.It is always checking the craftMatrix but not the tileEntity for updates when it calls the recipe. It will do fine when you first try the recipe, but I can still take a tool back out and since there isnt a listener for the item being there or not, it allows the crafting recipe until the craftMatrix updates again to make the call to check the slots of the tileEntity. At the moment im studying more java concepts outside of MC.

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

 Share

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.