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;