diff --git a/src/main/java/mods/betterfoliage/client/BetterFoliageClient.java b/src/main/java/mods/betterfoliage/client/BetterFoliageClient.java index e8f020aa..8b34160f 100644 --- a/src/main/java/mods/betterfoliage/client/BetterFoliageClient.java +++ b/src/main/java/mods/betterfoliage/client/BetterFoliageClient.java @@ -14,8 +14,8 @@ import mods.betterfoliage.client.render.impl.EntityFXRisingSoul; import mods.betterfoliage.client.render.impl.RenderBlockCactus; import mods.betterfoliage.client.render.impl.RenderBlockDirtWithAlgae; -import mods.betterfoliage.client.render.impl.RenderBlockDirtWithGrassSide; import mods.betterfoliage.client.render.impl.RenderBlockDirtWithGrassTop; +import mods.betterfoliage.client.render.impl.RenderBlockDirtWithLogTop; import mods.betterfoliage.client.render.impl.RenderBlockGrass; import mods.betterfoliage.client.render.impl.RenderBlockLeaves; import mods.betterfoliage.client.render.impl.RenderBlockLilypad; @@ -76,8 +76,8 @@ public static void postInit() { registerRenderer(new RenderBlockReed()); registerRenderer(new RenderBlockDirtWithAlgae()); registerRenderer(new RenderBlockSandWithCoral()); - registerRenderer(new RenderBlockDirtWithGrassSide()); registerRenderer(new RenderBlockDirtWithGrassTop()); + registerRenderer(new RenderBlockDirtWithLogTop()); registerRenderer(new RenderBlockLogs()); MinecraftForge.EVENT_BUS.register(wind); diff --git a/src/main/java/mods/betterfoliage/client/render/RenderBlockAOBase.java b/src/main/java/mods/betterfoliage/client/render/RenderBlockAOBase.java index 97ab1ceb..2c95037e 100644 --- a/src/main/java/mods/betterfoliage/client/render/RenderBlockAOBase.java +++ b/src/main/java/mods/betterfoliage/client/render/RenderBlockAOBase.java @@ -200,12 +200,23 @@ public int getRenderId() { return 0; } - protected void renderWorldBlockBase(int pass, IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + /** Render a block normally, and extract AO data + * @param pass extract data from rendering pass with this index + * @param world the World + * @param x x coord + * @param y y coord + * @param z z coord + * @param block the block + * @param modelId render ID of block + * @param renderer the renderer to use + * @return true if rendering block breaking overlay + */ + protected boolean renderWorldBlockBase(int pass, IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { // use original renderer for block breaking overlay if (renderer.hasOverrideBlockTexture()) { renderer.setRenderBoundsFromBlock(block); renderer.renderStandardBlock(block, x, y, z); - return; + return true; } // render block @@ -219,6 +230,7 @@ protected void renderWorldBlockBase(int pass, IBlockAccess world, int x, int y, } else { renderStandardBlock(block, x, y, z); } + return false; } protected void renderStandardBlockAsItem(RenderBlocks renderer, Block p_147800_1_, int p_147800_2_, float p_147800_3_) { diff --git a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockDirtWithGrassTop.java b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockDirtWithGrassTop.java index df18a8cc..81c09e5a 100644 --- a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockDirtWithGrassTop.java +++ b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockDirtWithGrassTop.java @@ -6,43 +6,39 @@ import mods.betterfoliage.client.util.RenderUtils; import mods.betterfoliage.common.config.Config; import net.minecraft.block.Block; +import net.minecraft.block.material.Material; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.world.IBlockAccess; -import net.minecraftforge.common.util.ForgeDirection; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -/** Accepts dirt blocks with wooden log on top if rounded log grass is enabled.
- * Renders the dirt block with a grass top texture. +/** Accepts dirt blocks with grass on top if aggressive connected grass is enabled.
+ * Renders the grass block in place of dirt. * @author octarine-noise */ @SideOnly(Side.CLIENT) public class RenderBlockDirtWithGrassTop extends RenderBlockAOBase implements IRenderBlockDecorator { - public static final ForgeDirection[] sides = {ForgeDirection.NORTH, ForgeDirection.SOUTH, ForgeDirection.WEST, ForgeDirection.EAST}; - public RenderBlockDirtWithGrassTop() { skipFaces = true; } @Override public boolean isBlockAccepted(IBlockAccess blockAccess, int x, int y, int z, Block block, int original) { - return Config.logsEnabled && Config.logsConnectGrass && + Material top2Material = blockAccess.getBlock(x, y + 2, z).getMaterial(); + return Config.ctxGrassAggressiveEnabled && + top2Material != Material.snow && + top2Material != Material.craftedSnow && Config.dirt.matchesID(block) && - Config.logs.matchesID(blockAccess.getBlock(x, y + 1, z)); + Config.grass.matchesID(blockAccess.getBlock(x, y + 1, z)); } @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { - ForgeDirection offset = ForgeDirection.UNKNOWN; - - // try to find grass block in neighborhood - for(ForgeDirection dir : sides) if (Config.grass.matchesID(world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ))) offset = dir; - - // render offset block at render location + // fake grass block @(0, +1, 0) at render location IBlockAccess originalBA = renderer.blockAccess; - renderer.blockAccess = new OffsetBlockAccess(world, x, y, z, offset.offsetX, offset.offsetY, offset.offsetZ); + renderer.blockAccess = new OffsetBlockAccess(world, x, y, z, 0, 1, 0); Block renderBlock = renderer.blockAccess.getBlock(x, y, z); boolean result; diff --git a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockDirtWithGrassSide.java b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockDirtWithLogTop.java similarity index 60% rename from src/main/java/mods/betterfoliage/client/render/impl/RenderBlockDirtWithGrassSide.java rename to src/main/java/mods/betterfoliage/client/render/impl/RenderBlockDirtWithLogTop.java index 51d190fc..4f15d241 100644 --- a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockDirtWithGrassSide.java +++ b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockDirtWithLogTop.java @@ -6,39 +6,43 @@ import mods.betterfoliage.client.util.RenderUtils; import mods.betterfoliage.common.config.Config; import net.minecraft.block.Block; -import net.minecraft.block.material.Material; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -/** Accepts dirt blocks with grass on top if aggressive connected grass is enabled.
- * Renders the grass block in place of dirt. +/** Accepts dirt blocks with wooden log on top if rounded log grass is enabled.
+ * Renders the dirt block with a grass top texture. * @author octarine-noise */ @SideOnly(Side.CLIENT) -public class RenderBlockDirtWithGrassSide extends RenderBlockAOBase implements IRenderBlockDecorator { +public class RenderBlockDirtWithLogTop extends RenderBlockAOBase implements IRenderBlockDecorator { - public RenderBlockDirtWithGrassSide() { + public static final ForgeDirection[] sides = {ForgeDirection.NORTH, ForgeDirection.SOUTH, ForgeDirection.WEST, ForgeDirection.EAST}; + + public RenderBlockDirtWithLogTop() { skipFaces = true; } @Override public boolean isBlockAccepted(IBlockAccess blockAccess, int x, int y, int z, Block block, int original) { - Material top2Material = blockAccess.getBlock(x, y + 2, z).getMaterial(); - return Config.ctxGrassAggressiveEnabled && - top2Material != Material.snow && - top2Material != Material.craftedSnow && + return Config.logsEnabled && Config.logsConnectGrass && Config.dirt.matchesID(block) && - Config.grass.matchesID(blockAccess.getBlock(x, y + 1, z)); + Config.logs.matchesID(blockAccess.getBlock(x, y + 1, z)); } @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { - // fake grass block @(0, +1, 0) at render location + ForgeDirection offset = ForgeDirection.UNKNOWN; + + // try to find grass block in neighborhood + for(ForgeDirection dir : sides) if (Config.grass.matchesID(world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ))) offset = dir; + + // render offset block at render location IBlockAccess originalBA = renderer.blockAccess; - renderer.blockAccess = new OffsetBlockAccess(world, x, y, z, 0, 1, 0); + renderer.blockAccess = new OffsetBlockAccess(world, x, y, z, offset.offsetX, offset.offsetY, offset.offsetZ); Block renderBlock = renderer.blockAccess.getBlock(x, y, z); boolean result; diff --git a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockGrass.java b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockGrass.java index 265c4add..6ab97fc0 100644 --- a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockGrass.java +++ b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockGrass.java @@ -63,7 +63,7 @@ public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block b Integer avgColor = BetterFoliageClient.grassTextures.iconColors.get(grassTopIcon); boolean useTextureColor = (avgColor != null); - renderWorldBlockBase(2, world, x, y, z, block, modelId, renderer); + if (renderWorldBlockBase(2, world, x, y, z, block, modelId, renderer)) return true; boolean isAirTop = blockAccess.isAirBlock(x, y + 1, z); int distance = getCameraDistance(x, y, z); diff --git a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockLeaves.java b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockLeaves.java index 4e8ec57f..0dc4bf98 100644 --- a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockLeaves.java +++ b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockLeaves.java @@ -36,7 +36,7 @@ public boolean isBlockAccepted(IBlockAccess blockAccess, int x, int y, int z, Bl 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); + if (renderWorldBlockBase(1, world, x, y, z, block, modelId, renderer)) return true; // find generated texture to render with, assume the // "true" texture of the block is the one on the north size diff --git a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockLogs.java b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockLogs.java index 3e557d7c..39881fe9 100644 --- a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockLogs.java +++ b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockLogs.java @@ -39,8 +39,7 @@ public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block b } // get AO data, bail if rendering block breaking - renderWorldBlockBase(1, world, x, y, z, block, modelId, renderer); - if (renderer.hasOverrideBlockTexture()) return true; + if (renderWorldBlockBase(1, world, x, y, z, block, modelId, renderer)) return true; // set axes Double3 blockPos = new Double3(x, y, z); diff --git a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockMycelium.java b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockMycelium.java index 7e04ff3d..2d7a4153 100644 --- a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockMycelium.java +++ b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockMycelium.java @@ -34,7 +34,7 @@ public boolean isBlockAccepted(IBlockAccess blockAccess, int x, int y, int z, Bl 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); + if (renderWorldBlockBase(1, world, x, y, z, block, modelId, renderer)) return true; int iconVariation = getSemiRandomFromPos(x, y, z, 0); IIcon renderIcon = myceliumIcons.get(iconVariation); diff --git a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockNetherrack.java b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockNetherrack.java index f1bef198..38bdc341 100644 --- a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockNetherrack.java +++ b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockNetherrack.java @@ -34,7 +34,7 @@ public boolean isBlockAccepted(IBlockAccess blockAccess, int x, int y, int z, Bl 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); + if (renderWorldBlockBase(1, world, x, y, z, block, modelId, renderer)) return true; int iconVariation = getSemiRandomFromPos(x, y, z, 0); IIcon renderIcon = netherrackVineIcons.get(iconVariation); diff --git a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockReed.java b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockReed.java index 7a8db6e9..76fc0aa1 100644 --- a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockReed.java +++ b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockReed.java @@ -44,7 +44,7 @@ public boolean isBlockAccepted(IBlockAccess blockAccess, int x, int y, int z, Bl 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); + if (renderWorldBlockBase(1, world, x, y, z, block, modelId, renderer)) return true; int iconVariation = getSemiRandomFromPos(x, y, z, 0); int heightVariation = getSemiRandomFromPos(x, y, z, 1); diff --git a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockSandWithCoral.java b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockSandWithCoral.java index aa3141b7..6ecb1003 100644 --- a/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockSandWithCoral.java +++ b/src/main/java/mods/betterfoliage/client/render/impl/RenderBlockSandWithCoral.java @@ -40,7 +40,7 @@ public boolean isBlockAccepted(IBlockAccess blockAccess, int x, int y, int z, Bl 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); + if (renderWorldBlockBase(1, world, x, y, z, block, modelId, renderer)) return true; Double3 blockCenter = new Double3(x + 0.5, y + 0.5, z + 0.5); double offset = pRand[getSemiRandomFromPos(x, y, z, 6)] * Config.coralVOffset;