Package com.forgeessentials.data.typeInfo

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

package com.forgeessentials.data.typeInfo;

import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;

import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagByteArray;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagInt;
import net.minecraft.nbt.NBTTagIntArray;
import net.minecraft.nbt.NBTTagList;

import com.forgeessentials.data.api.ClassContainer;
import com.forgeessentials.data.api.IReconstructData;
import com.forgeessentials.data.api.TypeData;
import com.forgeessentials.data.api.TypeMultiValInfo;

public class TypeInfoNBTCompound extends TypeMultiValInfo {
    public static final String KEY = "name";
    public static final String TYPE = "type";
    public static final String PRIMITIVE = "value";
    public static final String TAG_LIST = "taglist";
    public static final String COMPOUND = "compound";
    public static final String B_ARRAY = "byteArray";
    public static final String I_ARRAY = "intArray";

    public TypeInfoNBTCompound(ClassContainer container)
    {
        super(container);
    }

    @Override
    public void buildEntry(HashMap<String, ClassContainer> fields)
    {
        fields.put(KEY, new ClassContainer(String.class));
        fields.put(TYPE, new ClassContainer(int.class));
        fields.put(PRIMITIVE, new ClassContainer(String.class));
        fields.put(TAG_LIST, new ClassContainer(NBTTagList.class));
        fields.put(COMPOUND, new ClassContainer(NBTTagCompound.class));
        fields.put(B_ARRAY, new ClassContainer(byte[].class));
        fields.put(I_ARRAY, new ClassContainer(int[].class));
    }

    @SuppressWarnings("unchecked")
    @Override
    public Set<TypeData> getTypeDatasFromObject(Object obj)
    {
        HashSet<TypeData> datas = new HashSet<TypeData>();

        NBTTagCompound nbt = (NBTTagCompound) obj;

        TypeData data;
        NBTBase tag;
        for (String name : (Collection<String>) nbt.func_150296_c())
        {
            tag = nbt.getTag(name);
            data = getEntryData();
            data.putField(TYPE, tag.getId());
            data.putField(KEY, name);

            if (tag instanceof NBTTagCompound)
            {
                data.putField(COMPOUND, tag);
            }
            else if (tag instanceof NBTTagIntArray)
            {
                data.putField(I_ARRAY, ((NBTTagIntArray) tag).func_150302_c());
            }
            else if (tag instanceof NBTTagByteArray)
            {
                data.putField(B_ARRAY, ((NBTTagByteArray) tag).func_150292_c());
            }
            else if (tag instanceof NBTTagList)
            {
                data.putField(TAG_LIST, tag);
            }
            else if (tag instanceof NBTBase.NBTPrimitive)
            {
                String val = tag.toString();

                if (tag.getId() != new NBTTagInt(0).getId())
                {
                    val = val.substring(0, val.length() - 1);
                }

                data.putField(PRIMITIVE, val);
            }
            datas.add(data);
        }

        return datas;
    }

    @Override
    public ClassContainer getTypeOfField(String field)
    {
        if (field.equalsIgnoreCase(COMPOUND))
        {
            return new ClassContainer(NBTTagCompound.class);
        }
        else
        {
            return null;
        }
    }

    @Override
    public String getEntryName()
    {
        return "compound";
    }

    @Override
    public Object reconstruct(TypeData[] data, IReconstructData rawType)
    {
        NBTTagCompound nbt = new NBTTagCompound();

        int type;
        String name;
        for (TypeData dat : data)
        {
            type = (Integer) dat.getFieldValue(TYPE);
            name = (String) dat.getFieldValue(KEY);

            switch (type)
            {
            case 1:
                nbt.setByte(name, Byte.parseByte(dat.getFieldValue(PRIMITIVE).toString()));
                break;
            case 2:
                nbt.setShort(name, Short.parseShort(dat.getFieldValue(PRIMITIVE).toString()));
                break;
            case 3:
                nbt.setInteger(name, Integer.parseInt(dat.getFieldValue(PRIMITIVE).toString()));
                break;
            case 4:
                nbt.setLong(name, Long.parseLong(dat.getFieldValue(PRIMITIVE).toString()));
                break;
            case 5:
                nbt.setFloat(name, Float.parseFloat(dat.getFieldValue(PRIMITIVE).toString()));
                break;
            case 6:
                nbt.setDouble(name, Double.parseDouble(dat.getFieldValue(PRIMITIVE).toString()));
                break;
            case 7:
                nbt.setByteArray(name, (byte[]) dat.getFieldValue(B_ARRAY));
                break;
            case 8:
            {
                String v = (String) dat.getFieldValue(PRIMITIVE);
                if (v != null)
                    nbt.setString(name, v);
                break;
            }
            case 9:
                nbt.setTag(name, (NBTTagList) dat.getFieldValue(TAG_LIST));
                break;
            case 10:
                nbt.setTag(name, (NBTTagCompound) dat.getFieldValue(COMPOUND));
                break;
            case 11:
                nbt.setIntArray(name, (int[]) dat.getFieldValue(I_ARRAY));
                break;
            }
        }

        return nbt;
    }
}
TOP

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

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.