Package thaumic.tinkerer.common.multipart

Source Code of thaumic.tinkerer.common.multipart.RegisterBlockPart

/**
* @author RWTema
* Thanks man!
*
* Check out his mod, ExtraUtilities:
* http://www.minecraftforum.net/topic/1776056-
*/
package thaumic.tinkerer.common.multipart;

import codechicken.lib.vec.BlockCoord;
import codechicken.multipart.MultiPartRegistry;
import codechicken.multipart.MultiPartRegistry.IPartConverter;
import codechicken.multipart.MultiPartRegistry.IPartFactory;
import codechicken.multipart.TMultiPart;
import com.google.common.collect.Lists;
import net.minecraft.block.Block;
import net.minecraft.world.World;

// This class is used by FMP to recreate a part during loading and to convert already existing non-mutlipart blocks into multiparts.
// this is copied from the version FMP uses for vanilla torches
public class RegisterBlockPart implements IPartFactory, IPartConverter {
    Block block = null;
    Class<? extends TMultiPart> part = null;
    String name = "";

    public RegisterBlockPart(Block block, Class<? extends TMultiPart> part) {
//Autoloads the multi-parts name
        try {
            name = part.getConstructor().newInstance(new Object[]{}).getType();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public RegisterBlockPart(Block block, Class<? extends TMultiPart> part, String name) {
        this.block = block;
        this.part = part;
        this.name = name;
    }

    @Override
    public TMultiPart createPart(String name, boolean client) {
        if (name.equals(name))
            try {
                return part.getConstructor().newInstance();
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        return null;
    }

    //register the converter and the parts
    public void init() {
        if (name.isEmpty() || block == null || part == null)
            return;
        MultiPartRegistry.registerConverter(this);
        MultiPartRegistry.registerParts(this, new String[]{name});
    }

    @Override
    public Iterable<Block> blockTypes() {
        return Lists.newArrayList(block);
    }

    @Override
    public TMultiPart convert(World world, BlockCoord pos) {
        Block blockInQuestion = world.getBlock(pos.x, pos.y, pos.z);
        int meta = world.getBlockMetadata(pos.x, pos.y, pos.z);
        if (blockInQuestion == block) {
            try {
                if (part.getName().equals("vazkii.tinkerer.common.block.multipart.PartNitor") && meta != 1)
                    return null;
                if (part.getDeclaredConstructor(int.class) != null)
                    return part.getDeclaredConstructor(int.class).newInstance(meta);
                return part.getConstructor().newInstance();
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
        return null;
    }
}
TOP

Related Classes of thaumic.tinkerer.common.multipart.RegisterBlockPart

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.