Search in sources :

Example 1 with ICustomItemResourceLocation

use of crazypants.enderio.base.render.ICustomItemResourceLocation in project EnderIO by SleepyTrousers.

the class SmartModelAttacher method registerBlockItemModels.

/**
 * Registers the default ModelResourceLocation for the items of all blocks that have registered for MachineSmartModel-based rendering.
 * <p>
 * For items that have subtypes, all subtypes are registered. All subtypes are registered to the same model, as the smart model can be damage-aware.
 */
@SideOnly(Side.CLIENT)
public static void registerBlockItemModels() {
    for (RegistrationHolder<?, ?> holder : blocks) {
        Block block = holder.block;
        Registerable modObject = ModObjectRegistry.getModObject(holder.block);
        if (modObject == null) {
            Log.debug("Block " + block + " has no modObject. What?");
        } else {
            Item item = modObject.getItem();
            if (item instanceof IHaveRenderers || block instanceof IHaveRenderers) {
                // Nothing to do for us, the item/block handles it for itself
                Log.debug(block.getClass() + " handles its item registrations itself");
                if (item instanceof ICustomSubItems || block instanceof ICustomSubItems) {
                    throw new RuntimeException(block.getClass() + " implements both IHaveRenderers and ICustomSubItems");
                }
            } else if (block instanceof IDefaultRenderers) {
                // Nothing to do for us, the block wants ClientProxy to handle it
                Log.debug(block.getClass() + " has default item registrations");
                if (item instanceof ICustomSubItems || block instanceof ICustomSubItems) {
                    throw new RuntimeException(block.getClass() + " implements both IDefaultRenderers and ICustomSubItems");
                }
            } else if (item != null && item != Items.AIR) {
                @Nonnull final ResourceLocation registryName = item instanceof ICustomItemResourceLocation ? ((ICustomItemResourceLocation) item).getRegistryNameForCustomModelResourceLocation() : NullHelper.notnullF(item.getRegistryName(), "Item.getItemFromBlock() returned an unregistered item");
                ModelResourceLocation location = new ModelResourceLocation(registryName, "inventory");
                if (item.getHasSubtypes()) {
                    NNList<ItemStack> subItems;
                    if (item instanceof ICustomSubItems) {
                        subItems = ((ICustomSubItems) item).getSubItems();
                    } else if (block instanceof ICustomSubItems) {
                        subItems = ((ICustomSubItems) block).getSubItems();
                    } else {
                        throw new RuntimeException(block.getClass() + " has subitems but it does not implement ICustomSubItems");
                    }
                    for (ItemStack itemStack : subItems) {
                        Log.debug("Registering RL " + location + " for " + itemStack);
                        ModelLoader.setCustomModelResourceLocation(item, itemStack.getItemDamage(), location);
                    }
                } else {
                    Log.debug("Registering RL " + location + " for " + item);
                    ModelLoader.setCustomModelResourceLocation(item, 0, location);
                }
            } else {
                Log.debug("Block " + block + " has no item, is it intended?");
            }
        }
    }
}
Also used : ICustomSubItems(crazypants.enderio.base.render.ICustomSubItems) Nonnull(javax.annotation.Nonnull) IDefaultRenderers(crazypants.enderio.base.render.IDefaultRenderers) ModelResourceLocation(net.minecraft.client.renderer.block.model.ModelResourceLocation) Item(net.minecraft.item.Item) ITintedItem(crazypants.enderio.base.render.ITintedItem) ModelResourceLocation(net.minecraft.client.renderer.block.model.ModelResourceLocation) ICustomItemResourceLocation(crazypants.enderio.base.render.ICustomItemResourceLocation) ResourceLocation(net.minecraft.util.ResourceLocation) ITintedBlock(crazypants.enderio.base.render.ITintedBlock) Block(net.minecraft.block.Block) Registerable(crazypants.enderio.base.init.IModObject.Registerable) IHaveRenderers(crazypants.enderio.base.render.IHaveRenderers) ICustomItemResourceLocation(crazypants.enderio.base.render.ICustomItemResourceLocation) ItemStack(net.minecraft.item.ItemStack) SideOnly(net.minecraftforge.fml.relauncher.SideOnly)

Aggregations

Registerable (crazypants.enderio.base.init.IModObject.Registerable)1 ICustomItemResourceLocation (crazypants.enderio.base.render.ICustomItemResourceLocation)1 ICustomSubItems (crazypants.enderio.base.render.ICustomSubItems)1 IDefaultRenderers (crazypants.enderio.base.render.IDefaultRenderers)1 IHaveRenderers (crazypants.enderio.base.render.IHaveRenderers)1 ITintedBlock (crazypants.enderio.base.render.ITintedBlock)1 ITintedItem (crazypants.enderio.base.render.ITintedItem)1 Nonnull (javax.annotation.Nonnull)1 Block (net.minecraft.block.Block)1 ModelResourceLocation (net.minecraft.client.renderer.block.model.ModelResourceLocation)1 Item (net.minecraft.item.Item)1 ItemStack (net.minecraft.item.ItemStack)1 ResourceLocation (net.minecraft.util.ResourceLocation)1 SideOnly (net.minecraftforge.fml.relauncher.SideOnly)1