Jump to content

Recommended Posts

Posted

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'

 

 

Posted

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.

Posted

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

Posted

No, thats been sovled. I got that figured out. The issue is I'm trying to pass the non static method to a class because items[] can not be static. So I would just pass an instance of the TileEntity with the method in it correct?

Posted

 

 

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;

Posted

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.

Posted

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.

Posted

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.

Posted

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.

Posted

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.

Posted

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.

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.