package mods.betterfoliage.client; import java.io.File; import java.util.Map; import mods.betterfoliage.BetterFoliage; import mods.betterfoliage.client.render.IRenderBlockDecorator; import mods.betterfoliage.client.render.impl.EntityFXFallingLeaves; import mods.betterfoliage.client.render.impl.RenderBlockBetterAlgae; import mods.betterfoliage.client.render.impl.RenderBlockBetterCactus; import mods.betterfoliage.client.render.impl.RenderBlockBetterCoral; import mods.betterfoliage.client.render.impl.RenderBlockBetterGrass; import mods.betterfoliage.client.render.impl.RenderBlockBetterLeaves; import mods.betterfoliage.client.render.impl.RenderBlockBetterLilypad; import mods.betterfoliage.client.render.impl.RenderBlockBetterMycelium; import mods.betterfoliage.client.render.impl.RenderBlockBetterReed; import mods.betterfoliage.client.render.impl.RenderBlocksBetterGrassSide; import mods.betterfoliage.client.resource.LeafGenerator; import mods.betterfoliage.client.resource.LeafParticleTextures; import mods.betterfoliage.client.resource.LeafTextureEnumerator; import mods.betterfoliage.client.resource.ReedGenerator; import mods.betterfoliage.client.resource.ShortGrassGenerator; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.util.ResourceLocation; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import com.google.common.collect.Maps; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.common.FMLCommonHandler; public class BetterFoliageClient { public static ResourceLocation missingTexture = new ResourceLocation("betterfoliage", "textures/blocks/missing_leaf.png"); public static Map decorators = Maps.newHashMap(); public static LeafGenerator leafGenerator = new LeafGenerator(); public static LeafParticleTextures leafParticles = new LeafParticleTextures(0); public static WindTracker wind = new WindTracker(); public static BlockMatcher leaves = new BlockMatcher(); public static BlockMatcher crops = new BlockMatcher(); public static BlockMatcher dirt = new BlockMatcher(); public static BlockMatcher grass = new BlockMatcher(); public static void preInit() { FMLCommonHandler.instance().bus().register(new KeyHandler()); BetterFoliage.log.info("Registering renderers"); registerRenderer(new RenderBlockBetterCactus()); registerRenderer(new RenderBlockBetterLilypad()); registerRenderer(new RenderBlockBetterMycelium()); registerRenderer(new RenderBlockBetterLeaves()); registerRenderer(new RenderBlockBetterGrass()); registerRenderer(new RenderBlockBetterReed()); registerRenderer(new RenderBlockBetterAlgae()); registerRenderer(new RenderBlockBetterCoral()); registerRenderer(new RenderBlocksBetterGrassSide()); MinecraftForge.EVENT_BUS.register(wind); FMLCommonHandler.instance().bus().register(wind); leaves.load(new File(BetterFoliage.configDir, "classesLeaves.cfg"), new ResourceLocation("betterfoliage:classesLeavesDefault.cfg")); MinecraftForge.EVENT_BUS.register(leaves); crops.load(new File(BetterFoliage.configDir, "classesCrops.cfg"), new ResourceLocation("betterfoliage:classesCropsDefault.cfg")); MinecraftForge.EVENT_BUS.register(crops); dirt.load(new File(BetterFoliage.configDir, "classesDirt.cfg"), new ResourceLocation("betterfoliage:classesDirtDefault.cfg")); MinecraftForge.EVENT_BUS.register(dirt); grass.load(new File(BetterFoliage.configDir, "classesGrass.cfg"), new ResourceLocation("betterfoliage:classesGrassDefault.cfg")); MinecraftForge.EVENT_BUS.register(grass); BetterFoliage.log.info("Registering texture generators"); MinecraftForge.EVENT_BUS.register(leafGenerator); MinecraftForge.EVENT_BUS.register(leafParticles); MinecraftForge.EVENT_BUS.register(new LeafTextureEnumerator()); MinecraftForge.EVENT_BUS.register(new ReedGenerator("bf_reed_bottom", missingTexture, true)); MinecraftForge.EVENT_BUS.register(new ReedGenerator("bf_reed_top", missingTexture, false)); MinecraftForge.EVENT_BUS.register(new ShortGrassGenerator("bf_shortgrass", missingTexture, false)); MinecraftForge.EVENT_BUS.register(new ShortGrassGenerator("bf_shortgrass_snow", missingTexture, true)); ShadersModIntegration.init(); } public static boolean isLeafTexture(TextureAtlasSprite icon) { String resourceLocation = icon.getIconName(); if (resourceLocation.startsWith("forestry:leaves/")) return true; return false; } public static int getRenderTypeOverride(IBlockAccess blockAccess, int x, int y, int z, Block block, int original) { // universal sign for DON'T RENDER ME! if (original == -1) return original; for (Map.Entry entry : decorators.entrySet()) if (entry.getValue().isBlockAccepted(blockAccess, x, y, z, block, original)) return entry.getKey(); return original; } public static void onRandomDisplayTick(Block block, World world, int x, int y, int z) { if (!BetterFoliage.config.fallingLeavesEnabled) return; if (!leaves.matchesID(block) || !world.isAirBlock(x, y - 1, z)) return; if (Math.random() > BetterFoliage.config.fallingLeavesChance.value) return; Minecraft.getMinecraft().effectRenderer.addEffect(new EntityFXFallingLeaves(world, x, y, z)); } public static void registerRenderer(IRenderBlockDecorator decorator) { int renderId = RenderingRegistry.getNextAvailableRenderId(); decorators.put(renderId, decorator); RenderingRegistry.registerBlockHandler(renderId, decorator); MinecraftForge.EVENT_BUS.register(decorator); decorator.init(); } }