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?");
}
}
}
}
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;
}
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;
}
}
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());
}
Aggregations