Package com.forgeessentials.data.typeInfo

Source Code of com.forgeessentials.data.typeInfo.TypeInfoItemStack

package com.forgeessentials.data.typeInfo;

import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;

import com.forgeessentials.data.api.ClassContainer;
import com.forgeessentials.data.api.DataStorageManager;
import com.forgeessentials.data.api.IReconstructData;
import com.forgeessentials.data.api.ITypeInfo;
import com.forgeessentials.data.api.TypeData;

import cpw.mods.fml.common.registry.GameData;

public class TypeInfoItemStack implements ITypeInfo<ItemStack> {
    private static final String SIZE = "stackSize";
    private static final String ITEM = "itemID";
    private static final String DAMAGE = "damage";
    private static final String COMPOUND = "compound";

    public TypeInfoItemStack()
    {
    }

    @Override
    public void build()
    {
    }

    @Override
    public TypeData getTypeDataFromObject(ItemStack stack)
    {
        TypeData data = DataStorageManager.getDataForType(new ClassContainer(ItemStack.class));

        data.putField(SIZE, stack.stackSize);
        data.putField(ITEM, GameData.getItemRegistry().getNameForObject(stack.getItem()));
        data.putField(DAMAGE, stack.getItemDamage());
        data.putField(COMPOUND, stack.getTagCompound());

        return data;
    }

    @Override
    public ClassContainer getTypeOfField(String field)
    {
        if (field == null)
        {
            return null;
        }
        else if (field.equalsIgnoreCase(SIZE) || field.equalsIgnoreCase(DAMAGE))
        {
            return new ClassContainer(int.class);
        }
        else if (field.equalsIgnoreCase(ITEM))
        {
            return new ClassContainer(String.class);
        }
        else if (field.equalsIgnoreCase(COMPOUND))
        {
            return new ClassContainer(NBTTagCompound.class);
        }
        else
        {
            return null;
        }
    }

    @Override
    public String[] getFieldList()
    {
        return new String[] {
                SIZE,
                ITEM,
                DAMAGE,
                COMPOUND
        };
    }

    @Override
    public ItemStack reconstruct(IReconstructData data)
    {
        int size = (Integer) data.getFieldValue(SIZE);
        String item = (String) data.getFieldValue(ITEM);
        int damage = (Integer) data.getFieldValue(DAMAGE);

        ItemStack stack = new ItemStack((Item)GameData.getItemRegistry().getObject(item), size, damage);

        // TODO: when NBTs are saveable
        NBTTagCompound nbt = (NBTTagCompound) data.getFieldValue(COMPOUND);
        stack.setTagCompound(nbt);

        return stack;
    }

    @Override
    public boolean canSaveInline()
    {
        return true;
    }

    @Override
    public ClassContainer getType()
    {
        return new ClassContainer(ItemStack.class);
    }

    @Override
    public Class<?>[] getGenericTypes()
    {
        return null;
    }

    @Override
    public ITypeInfo<?> getInfoForField(String field)
    {
        return DataStorageManager.getInfoForType(getTypeOfField(field));
    }

}
TOP

Related Classes of com.forgeessentials.data.typeInfo.TypeInfoItemStack

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.