From 4bba2b06c2a8fdf6f65dbdc9614c86a463198104 Mon Sep 17 00:00:00 2001 From: octarine-noise Date: Tue, 26 Aug 2014 21:21:10 +0200 Subject: [PATCH] add hanging vines below netherrack --- .../client/BetterFoliageClient.java | 2 + .../impl/RenderBlockBetterNetherrack.java | 64 +++++++++++++++++++ .../betterfoliage/common/config/Config.java | 16 ++++- .../assets/betterfoliage/lang/en_US.lang | 3 + 4 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterNetherrack.java diff --git a/src/main/java/mods/betterfoliage/client/BetterFoliageClient.java b/src/main/java/mods/betterfoliage/client/BetterFoliageClient.java index 888cf37..668369f 100644 --- a/src/main/java/mods/betterfoliage/client/BetterFoliageClient.java +++ b/src/main/java/mods/betterfoliage/client/BetterFoliageClient.java @@ -12,6 +12,7 @@ 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.RenderBlockBetterNetherrack; import mods.betterfoliage.client.render.impl.RenderBlockBetterReed; import mods.betterfoliage.client.render.impl.RenderBlocksBetterGrassSide; import mods.betterfoliage.client.resource.LeafGenerator; @@ -48,6 +49,7 @@ public class BetterFoliageClient { BetterFoliage.log.info("Registering renderers"); registerRenderer(new RenderBlockBetterCactus()); + registerRenderer(new RenderBlockBetterNetherrack()); registerRenderer(new RenderBlockBetterLilypad()); registerRenderer(new RenderBlockBetterMycelium()); registerRenderer(new RenderBlockBetterLeaves()); diff --git a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterNetherrack.java b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterNetherrack.java new file mode 100644 index 0000000..62760ee --- /dev/null +++ b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockBetterNetherrack.java @@ -0,0 +1,64 @@ +package mods.betterfoliage.client.render.impl; + +import mods.betterfoliage.BetterFoliage; +import mods.betterfoliage.client.ShadersModIntegration; +import mods.betterfoliage.client.render.IRenderBlockDecorator; +import mods.betterfoliage.client.render.IconSet; +import mods.betterfoliage.client.render.RenderBlockAOBase; +import mods.betterfoliage.common.config.Config; +import mods.betterfoliage.common.util.Double3; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.init.Blocks; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.common.util.ForgeDirection; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderBlockBetterNetherrack extends RenderBlockAOBase implements IRenderBlockDecorator { + + public IconSet netherrackVineIcons = new IconSet("bettergrassandleaves", "better_netherrack_%d"); + + public boolean isBlockAccepted(IBlockAccess blockAccess, int x, int y, int z, Block block, int original) { + if (!Config.netherrackEnabled) return false; + if (block != Blocks.netherrack) return false; + if (!blockAccess.isAirBlock(x, y - 1, z)) return false; + return true; + } + + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + blockAccess = world; + renderWorldBlockBase(1, world, x, y, z, block, modelId, renderer); + + int iconVariation = getSemiRandomFromPos(x, y, z, 0); + IIcon renderIcon = netherrackVineIcons.get(iconVariation); + + if (renderIcon == null) return true; + + int heightVariation = getSemiRandomFromPos(x, y, z, 1); + double scale = Config.netherrackSize * 0.5; + double halfHeight = 0.5 * (Config.netherrackHeightMin + pRand[heightVariation] * (Config.netherrackHeightMax - Config.netherrackHeightMin)); + + // render netherrack vines + ShadersModIntegration.startGrassQuads(); + Tessellator.instance.setBrightness(getBrightness(block, x, y - 1, z)); + Tessellator.instance.setColorOpaque_I(block.colorMultiplier(blockAccess, x, y, z)); + renderCrossedSideQuads(new Double3(x + 0.5, y, z + 0.5), ForgeDirection.DOWN, scale, halfHeight, pRot[iconVariation], Config.netherrackHOffset, renderIcon, 2, false); + + return true; + } + + @SubscribeEvent + public void handleTextureReload(TextureStitchEvent.Pre event) { + if (event.map.getTextureType() != 0) return; + + netherrackVineIcons.registerIcons(event.map); + BetterFoliage.log.info(String.format("Found %d netherrack vine textures", netherrackVineIcons.numLoaded)); + } + +} diff --git a/src/main/java/mods/betterfoliage/common/config/Config.java b/src/main/java/mods/betterfoliage/common/config/Config.java index 972d1ca..099e3bc 100644 --- a/src/main/java/mods/betterfoliage/common/config/Config.java +++ b/src/main/java/mods/betterfoliage/common/config/Config.java @@ -26,7 +26,7 @@ import cpw.mods.fml.common.eventhandler.SubscribeEvent; public class Config { public enum Category { - blockTypes, extraLeaves, shortGrass, cactus, lilypad, reed, algae, coral, fallingLeaves, connectedGrass; + blockTypes, extraLeaves, shortGrass, cactus, lilypad, reed, algae, coral, netherrack, fallingLeaves, connectedGrass; } /** {@link Configuration} object bound to the config file */ @@ -88,6 +88,12 @@ public class Config { public static double leafFXPerturb; public static double leafFXLifetime; + public static boolean netherrackEnabled; + public static double netherrackHOffset; + public static double netherrackHeightMin; + public static double netherrackHeightMax; + public static double netherrackSize; + public static boolean ctxGrassClassicEnabled; public static boolean ctxGrassAggressiveEnabled; @@ -161,6 +167,13 @@ public class Config { leafFXPerturb = getDouble(Category.fallingLeaves, "perturb", 0.25, 0.01, 1.0, "betterfoliage.fallingLeaves.perturb"); leafFXLifetime = getDouble(Category.fallingLeaves, "lifetime", 5.0, 1.0, 15.0, "betterfoliage.fallingLeaves.lifetime"); + netherrackEnabled = getBoolean(Category.netherrack, "enabled", true, "betterfoliage.enabled"); + netherrackHOffset = getDouble(Category.netherrack, "hOffset", 0.2, 0.0, 0.4, "betterfoliage.hOffset"); + netherrackHeightMin = getDouble(Category.netherrack, "heightMin", 0.6, 0.1, 1.5, "betterfoliage.minHeight"); + netherrackHeightMax = getDouble(Category.netherrack, "heightMax", 0.8, 0.1, 1.5, "betterfoliage.maxHeight"); + netherrackSize = getDouble(Category.netherrack, "size", 1.0, 0.5, 1.5, "betterfoliage.size"); + netherrackHeightMin = clampDoubleToMax(Category.netherrack, "heightMin", "heightMax"); + ctxGrassClassicEnabled = getBoolean(Category.connectedGrass, "classic", true, "betterfoliage.connectedGrass.classic"); ctxGrassAggressiveEnabled= getBoolean(Category.connectedGrass, "aggressive", true, "betterfoliage.connectedGrass.aggressive"); @@ -182,6 +195,7 @@ public class Config { setOrder(Category.reed, "enabled", "hOffset", "heightMin", "heightMax", "population", "biomeList"); setOrder(Category.algae, "enabled", "hOffset", "heightMin", "heightMax", "population"); setOrder(Category.coral, "enabled", "hOffset", "vOffset", "size", "crustSize", "population", "chance"); + setOrder(Category.netherrack, "enabled", "hOffset", "heightMin", "heightMax", "size"); setOrder(Category.fallingLeaves, "enabled", "size", "chance", "lifetime", "speed", "windStrength", "stormStrength", "perturb"); setOrder(Category.connectedGrass, "classic", "aggressive"); } diff --git a/src/main/resources/assets/betterfoliage/lang/en_US.lang b/src/main/resources/assets/betterfoliage/lang/en_US.lang index b099251..cef5ce4 100644 --- a/src/main/resources/assets/betterfoliage/lang/en_US.lang +++ b/src/main/resources/assets/betterfoliage/lang/en_US.lang @@ -80,6 +80,9 @@ betterfoliage.coral.biomeList=Biome List betterfoliage.coral.biomeList.tooltip=Configure which biomes coral is allowed to appear in betterfoliage.coral.biomeSelectTooltip=Should coral appear in the %s biome? +betterfoliage.netherrack=Netherrack Vines +betterfoliage.netherrack.tooltip=Hanging Vines under netherrack + betterfoliage.fallingLeaves=Falling leaves betterfoliage.fallingLeaves.tooltip=Falling leaf particle FX emitted from the bottom of leaf blocks betterfoliage.fallingLeaves.speed=Particle speed