Search in sources :

Example 1 with Registerable

use of crazypants.enderio.base.init.IModObject.Registerable 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)

Example 2 with Registerable

use of crazypants.enderio.base.init.IModObject.Registerable in project EnderIO by SleepyTrousers.

the class EnderItemOverrideList method handleItemState.

@SuppressWarnings("deprecation")
@Override
@Nonnull
public IBakedModel handleItemState(@Nonnull IBakedModel originalModel, @Nonnull ItemStack stack, @Nullable World world, @Nullable EntityLivingBase entity) {
    if (Prep.isInvalid(stack)) {
        return Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes().getModelManager().getMissingModel();
    }
    Block block = Block.getBlockFromItem(stack.getItem());
    if (block == Blocks.AIR) {
        Registerable modObject = ModObjectRegistry.getModObject(stack.getItem());
        if (modObject != null) {
            block = modObject.getBlock();
        }
        if (block == null || block == Blocks.AIR) {
            throw new NullPointerException("Wrong parameter 'ItemStack stack', not an ItemBlock and not registered with ModObjectRegistry");
        }
    }
    if (block instanceof ITESRItemBlock) {
        return RelayingBakedModel.wrapModelForTESRRendering(originalModel);
    }
    if (block instanceof IBlockPaintableBlock && (!(block instanceof IWrenchHideablePaint) || !YetaUtil.shouldHeldItemHideFacadesClient())) {
        IBlockState paintSource = ((IBlockPaintableBlock) block).getPaintSource(block, stack);
        if (paintSource != null && paintSource != Blocks.AIR.getDefaultState()) {
            Pair<Block, Long> cacheKey = NullHelper.notnull(Pair.of((Block) null, new CacheKey().addCacheKey(paintSource).getCacheKey()), "no way");
            ItemQuadCollector quads = cache.getIfPresent(cacheKey);
            if (quads == null) {
                quads = new ItemQuadCollector();
                quads.addItemBlockState(paintSource, Prep.getEmpty());
                quads.addBlockState(ModObject.block_machine_base.getBlockNN().getDefaultState().withProperty(EnumRenderPart.SUB, EnumRenderPart.PAINT_OVERLAY), Prep.getEmpty());
                cache.put(cacheKey, quads);
            }
            return new CollectedItemQuadBakedBlockModel(originalModel, quads);
        }
    }
    if (block instanceof ISmartRenderAwareBlock) {
        IRenderMapper.IItemRenderMapper renderMapper = ((ISmartRenderAwareBlock) block).getItemRenderMapper();
        Pair<Block, Long> cacheKey = Pair.of(block, renderMapper.getCacheKey(block, stack, new CacheKey().addCacheKey(stack.getMetadata())).getCacheKey());
        ItemQuadCollector quads = cacheKey.getRight() == null ? null : cache.getIfPresent(cacheKey);
        if (quads == null) {
            quads = new ItemQuadCollector();
            if (renderMapper instanceof IRenderMapper.IItemRenderMapper.IItemStateMapper) {
                quads.addBlockStates(((IRenderMapper.IItemRenderMapper.IItemStateMapper) renderMapper).mapItemRender(block, stack, quads), stack, block);
            } else if (renderMapper instanceof IRenderMapper.IItemRenderMapper.IItemModelMapper) {
                List<IBakedModel> bakedModels = ((IRenderMapper.IItemRenderMapper.IItemModelMapper) renderMapper).mapItemRender(block, stack);
                if (bakedModels != null) {
                    for (IBakedModel bakedModel : bakedModels) {
                        quads.addItemBakedModel(bakedModel);
                    }
                }
            } else {
                return Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes().getModelManager().getMissingModel();
            }
            if (cacheKey.getRight() != null) {
                cache.put(cacheKey, quads);
            }
        }
        if (renderMapper instanceof IItemRenderMapper.IDynamicOverlayMapper) {
            quads = quads.combine(((IItemRenderMapper.IDynamicOverlayMapper) renderMapper).mapItemDynamicOverlayRender(block, stack));
        }
        return new CollectedItemQuadBakedBlockModel(originalModel, quads);
    }
    return originalModel;
}
Also used : ITESRItemBlock(crazypants.enderio.base.render.ITESRItemBlock) IBlockState(net.minecraft.block.state.IBlockState) ISmartRenderAwareBlock(crazypants.enderio.base.render.ISmartRenderAwareBlock) IBlockPaintableBlock(crazypants.enderio.base.paint.IPaintable.IBlockPaintableBlock) IItemRenderMapper(crazypants.enderio.base.render.IRenderMapper.IItemRenderMapper) CollectedItemQuadBakedBlockModel(crazypants.enderio.base.render.model.CollectedItemQuadBakedBlockModel) IItemRenderMapper(crazypants.enderio.base.render.IRenderMapper.IItemRenderMapper) ItemQuadCollector(crazypants.enderio.base.render.util.ItemQuadCollector) IWrenchHideablePaint(crazypants.enderio.base.paint.IPaintable.IWrenchHideablePaint) IRenderMapper(crazypants.enderio.base.render.IRenderMapper) IBlockPaintableBlock(crazypants.enderio.base.paint.IPaintable.IBlockPaintableBlock) Block(net.minecraft.block.Block) ITESRItemBlock(crazypants.enderio.base.render.ITESRItemBlock) ISmartRenderAwareBlock(crazypants.enderio.base.render.ISmartRenderAwareBlock) Registerable(crazypants.enderio.base.init.IModObject.Registerable) ItemOverrideList(net.minecraft.client.renderer.block.model.ItemOverrideList) List(java.util.List) IBakedModel(net.minecraft.client.renderer.block.model.IBakedModel) Nonnull(javax.annotation.Nonnull) ItemOverride(net.minecraft.client.renderer.block.model.ItemOverride)

Example 3 with Registerable

use of crazypants.enderio.base.init.IModObject.Registerable in project EnderIO by SleepyTrousers.

the class GuiHandler method getGuiElement.

@Nullable
protected Object getGuiElement(boolean server, int a, EntityPlayer player, World world, int b, int c, int d) {
    if (player == null || world == null) {
        return null;
    }
    int facingI = a & 0xFF;
    EnumFacing facing = facingI == 0xFF ? null : EnumFacing.values()[facingI];
    int id = a >>> 8;
    long posl = ((long) c << 32) | (b & 0xffffffffL);
    BlockPos pos = BlockPos.fromLong(posl);
    int param2 = b, param3 = c, param1 = d;
    Registerable mo = GuiHelper.getFromID(id);
    IEioGuiHandler handler = mo.getBlock() instanceof IEioGuiHandler ? (IEioGuiHandler) mo.getBlock() : mo.getItem() instanceof IEioGuiHandler ? (IEioGuiHandler) mo.getItem() : null;
    if (handler != null) {
        Log.debug("Opening GUI for ", mo, ": isServer=", server, " id=", id, " player=", player, " world=", world, " pos=", pos, " facing=", facing, " param1=", param1, " param2=", param2, " param3=", param3);
        final Object guiElement = handler.getGuiElement(server, player, world, pos, facing, param1, param2, param3);
        if (guiElement instanceof IRemoteExec) {
            ((IRemoteExec) guiElement).setGuiID(id);
        }
        return guiElement;
    } else {
        Log.error("Failed to open GUI ", id, " because ", mo, " is no GUI handler");
        return null;
    }
}
Also used : IRemoteExec(crazypants.enderio.base.network.IRemoteExec) EnumFacing(net.minecraft.util.EnumFacing) BlockPos(net.minecraft.util.math.BlockPos) Registerable(crazypants.enderio.base.init.IModObject.Registerable) Nullable(javax.annotation.Nullable)

Example 4 with Registerable

use of crazypants.enderio.base.init.IModObject.Registerable in project EnderIO by SleepyTrousers.

the class GuiHelper method init.

public static void init(@Nonnull FMLInitializationEvent event) {
    NNList<Registerable> objects = ModObjectRegistry.getObjects();
    for (int i = 0; i < objects.size(); i++) {
        IModObject mo = objects.get(i);
        if (mo.getBlock() instanceof IEioGuiHandler.WithServerComponent || mo.getItem() instanceof IEioGuiHandler.WithServerComponent) {
            Log.info("Registered permission ", PermissionAPI.registerNode(getPermission(mo), DefaultPermissionLevel.ALL, "Permission to open the GUI(s) of Ender IO's " + mo.getUnlocalisedName()));
        }
    }
    NetworkRegistry.INSTANCE.registerGuiHandler(EnderIO.getInstance(), new GuiHandler());
}
Also used : IModObject(crazypants.enderio.base.init.IModObject) Registerable(crazypants.enderio.base.init.IModObject.Registerable)

Aggregations

Registerable (crazypants.enderio.base.init.IModObject.Registerable)4 Nonnull (javax.annotation.Nonnull)2 Block (net.minecraft.block.Block)2 IModObject (crazypants.enderio.base.init.IModObject)1 IRemoteExec (crazypants.enderio.base.network.IRemoteExec)1 IBlockPaintableBlock (crazypants.enderio.base.paint.IPaintable.IBlockPaintableBlock)1 IWrenchHideablePaint (crazypants.enderio.base.paint.IPaintable.IWrenchHideablePaint)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 IRenderMapper (crazypants.enderio.base.render.IRenderMapper)1 IItemRenderMapper (crazypants.enderio.base.render.IRenderMapper.IItemRenderMapper)1 ISmartRenderAwareBlock (crazypants.enderio.base.render.ISmartRenderAwareBlock)1 ITESRItemBlock (crazypants.enderio.base.render.ITESRItemBlock)1 ITintedBlock (crazypants.enderio.base.render.ITintedBlock)1 ITintedItem (crazypants.enderio.base.render.ITintedItem)1 CollectedItemQuadBakedBlockModel (crazypants.enderio.base.render.model.CollectedItemQuadBakedBlockModel)1 ItemQuadCollector (crazypants.enderio.base.render.util.ItemQuadCollector)1 List (java.util.List)1