package eu.thog92.isbrh; import eu.thog92.isbrh.example.BlockExample; import eu.thog92.isbrh.example.RenderExample; import eu.thog92.isbrh.registry.RenderRegistry; import eu.thog92.isbrh.render.ITextureHandler; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.BlockRendererDispatcher; import net.minecraft.client.renderer.EntityRenderer; import net.minecraft.client.renderer.ItemRenderer; import net.minecraft.client.renderer.entity.RenderEntityItem; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.tileentity.RenderItemFrame; import net.minecraft.client.resources.IReloadableResourceManager; import net.minecraft.client.resources.model.ModelManager; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.item.EntityItemFrame; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.event.TextureStitchEvent; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import org.apache.logging.log4j.Logger; @Mod(modid = "isbrhcore", name = "ISBRH", clientSideOnly = true, acceptedMinecraftVersions = "[1.8]") public class ISBRH { public static final Block test = new BlockExample() .setUnlocalizedName("test"); public static final ResourceLocation textureLocation = new ResourceLocation( "isbrhcore:blocks/test"); public static int testId; private static boolean exempleEnabled = Boolean.parseBoolean(System .getProperty("isbrhCore.enableExemple", "false")); private Logger logger; @EventHandler public void preInit(FMLPreInitializationEvent event) { logger = event.getModLog(); MinecraftForge.EVENT_BUS.register(this); } @EventHandler public void init(FMLInitializationEvent event) { if (exempleEnabled) { logger.info("Registering ISBRH Block Exemple..."); testId = RenderRegistry.getNextAvailableRenderId(); GameRegistry.registerBlock(test, "test"); RenderRegistry.registerBlockHandler(new RenderExample()); RenderRegistry.registerTextureHandler((ITextureHandler) test); } Minecraft mc = Minecraft.getMinecraft(); // Prerequisite ModelManager modelManager = ObfuscationReflectionHelper .getPrivateValue(Minecraft.class, mc, "aL", "field_175617_aL", "modelManager"); RenderManager renderManager = mc.getRenderManager(); IReloadableResourceManager resourceManager = ((IReloadableResourceManager) mc .getResourceManager()); // Render Item Hook RenderItem item = new RenderItemISBRH(mc.getTextureManager(), modelManager, mc.getRenderItem()); ObfuscationReflectionHelper.setPrivateValue(Minecraft.class, mc, item, "X", "field_175621_X", "renderItem"); ObfuscationReflectionHelper.setPrivateValue(Minecraft.class, mc, new ItemRenderer(mc), "Y", "field_175620_Y", "itemRenderer"); renderManager.entityRenderMap.remove(EntityItem.class); renderManager.entityRenderMap.put(EntityItem.class, new RenderEntityItem(renderManager, item)); renderManager.entityRenderMap.remove(EntityItemFrame.class); renderManager.entityRenderMap.put(EntityItemFrame.class, new RenderItemFrame(renderManager, item)); mc.entityRenderer = new EntityRenderer(mc, resourceManager); // Render Block Dispatcher Hook BlockRendererDispatcher rendererDispatcher = new ISBRHDispatcher( mc.getBlockRendererDispatcher(), modelManager.getBlockModelShapes(), mc.gameSettings); ObfuscationReflectionHelper.setPrivateValue(Minecraft.class, mc, rendererDispatcher, "aM", "field_175618_aM", "blockRenderDispatcher"); // Register Reload Listeners resourceManager.registerReloadListener(rendererDispatcher); resourceManager.registerReloadListener(item); resourceManager.registerReloadListener(mc.entityRenderer); } @SubscribeEvent @SideOnly(Side.CLIENT) public void onTextureStitch(TextureStitchEvent.Pre event) { if (event.map == Minecraft.getMinecraft().getTextureMapBlocks()) { RenderRegistry.instance().injectTexture(event.map); } } }