package openmods.renderer;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.IIcon;
/**
* This renderer flips bottom side vertically. This allows to re-orient blocks with just rotations.
*/
public class TweakedRenderBlocks extends FixedRenderBlocks {
@Override
public void renderFaceYNeg(Block p_147768_1_, double p_147768_2_, double p_147768_4_, double p_147768_6_, IIcon p_147768_8_) {
Tessellator tessellator = Tessellator.instance;
if (hasOverrideBlockTexture()) {
p_147768_8_ = this.overrideBlockTexture;
}
double d3 = p_147768_8_.getInterpolatedU(this.renderMinX * 16.0D);
double d4 = p_147768_8_.getInterpolatedU(this.renderMaxX * 16.0D);
double d5 = p_147768_8_.getInterpolatedV(this.renderMinZ * 16.0D);
double d6 = p_147768_8_.getInterpolatedV(this.renderMaxZ * 16.0D);
if (this.renderMinX < 0.0D || this.renderMaxX > 1.0D) {
d3 = p_147768_8_.getMinU();
d4 = p_147768_8_.getMaxU();
}
if (this.renderMinZ < 0.0D || this.renderMaxZ > 1.0D) {
d5 = p_147768_8_.getMinV();
d6 = p_147768_8_.getMaxV();
}
double d7 = d4;
double d8 = d3;
double d9 = d5;
double d10 = d6;
if (this.uvRotateBottom == 2) {
d3 = p_147768_8_.getInterpolatedU(this.renderMinZ * 16.0D);
d5 = p_147768_8_.getInterpolatedV(16.0D - this.renderMaxX * 16.0D);
d4 = p_147768_8_.getInterpolatedU(this.renderMaxZ * 16.0D);
d6 = p_147768_8_.getInterpolatedV(16.0D - this.renderMinX * 16.0D);
d9 = d5;
d10 = d6;
d7 = d3;
d8 = d4;
d5 = d6;
d6 = d9;
} else if (this.uvRotateBottom == 1) {
d3 = p_147768_8_.getInterpolatedU(16.0D - this.renderMaxZ * 16.0D);
d5 = p_147768_8_.getInterpolatedV(this.renderMinX * 16.0D);
d4 = p_147768_8_.getInterpolatedU(16.0D - this.renderMinZ * 16.0D);
d6 = p_147768_8_.getInterpolatedV(this.renderMaxX * 16.0D);
d7 = d4;
d8 = d3;
d3 = d4;
d4 = d8;
d9 = d6;
d10 = d5;
} else if (this.uvRotateBottom == 3) {
d3 = p_147768_8_.getInterpolatedU(16.0D - this.renderMinX * 16.0D);
d4 = p_147768_8_.getInterpolatedU(16.0D - this.renderMaxX * 16.0D);
d5 = p_147768_8_.getInterpolatedV(16.0D - this.renderMinZ * 16.0D);
d6 = p_147768_8_.getInterpolatedV(16.0D - this.renderMaxZ * 16.0D);
d7 = d4;
d8 = d3;
d9 = d5;
d10 = d6;
}
double d11 = p_147768_2_ + this.renderMinX;
double d12 = p_147768_2_ + this.renderMaxX;
double d13 = p_147768_4_ + this.renderMinY;
double d14 = p_147768_6_ + this.renderMinZ;
double d15 = p_147768_6_ + this.renderMaxZ;
if (this.renderFromInside) {
d11 = p_147768_2_ + this.renderMaxX;
d12 = p_147768_2_ + this.renderMinX;
}
if (this.enableAO) {
tessellator.setColorOpaque_F(this.colorRedTopLeft, this.colorGreenTopLeft, this.colorBlueTopLeft);
tessellator.setBrightness(this.brightnessTopLeft);
tessellator.addVertexWithUV(d11, d13, d15, d7, d10);
tessellator.setColorOpaque_F(this.colorRedBottomLeft, this.colorGreenBottomLeft, this.colorBlueBottomLeft);
tessellator.setBrightness(this.brightnessBottomLeft);
tessellator.addVertexWithUV(d11, d13, d14, d4, d5);
tessellator.setColorOpaque_F(this.colorRedBottomRight, this.colorGreenBottomRight, this.colorBlueBottomRight);
tessellator.setBrightness(this.brightnessBottomRight);
tessellator.addVertexWithUV(d12, d13, d14, d8, d9);
tessellator.setColorOpaque_F(this.colorRedTopRight, this.colorGreenTopRight, this.colorBlueTopRight);
tessellator.setBrightness(this.brightnessTopRight);
tessellator.addVertexWithUV(d12, d13, d15, d3, d6);
} else {
tessellator.addVertexWithUV(d11, d13, d15, d8, d10);
tessellator.addVertexWithUV(d11, d13, d14, d3, d5);
tessellator.addVertexWithUV(d12, d13, d14, d7, d9);
tessellator.addVertexWithUV(d12, d13, d15, d4, d6);
}
}
public static <T extends Block> IBlockRenderer<T> wrap(IBlockRenderer<T> blockRenderer) {
return new WrappedBlockRenderer<T>(blockRenderer) {
@Override
protected RenderBlocks createWrapper(RenderBlocks renderer) {
return new TweakedRenderBlocks();
}
};
}
}