connected textures more like connected pain

This commit is contained in:
Bob 2021-09-29 19:54:37 +02:00
parent cf54665bbd
commit 451014aad6
6 changed files with 78 additions and 30 deletions

View File

@ -27,6 +27,16 @@ public class TestCT extends Block implements IBlockCT {
return renderID; return renderID;
} }
@Override
public boolean renderAsNormalBlock() {
return true;
}
@Override
public boolean isOpaqueCube() {
return true;
}
public IIcon[] frags = new IIcon[20]; public IIcon[] frags = new IIcon[20];
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)

View File

@ -576,6 +576,7 @@ public class ClientProxy extends ServerProxy {
RenderingRegistry.registerBlockHandler(new RenderAnvil()); RenderingRegistry.registerBlockHandler(new RenderAnvil());
RenderingRegistry.registerBlockHandler(new RenderCrystal()); RenderingRegistry.registerBlockHandler(new RenderCrystal());
RenderingRegistry.registerBlockHandler(new RenderTestCable()); RenderingRegistry.registerBlockHandler(new RenderTestCable());
RenderingRegistry.registerBlockHandler(new RenderBlockCT());
RenderingRegistry.registerBlockHandler(new RenderRBMKRod()); RenderingRegistry.registerBlockHandler(new RenderRBMKRod());
RenderingRegistry.registerBlockHandler(new RenderRBMKReflector()); RenderingRegistry.registerBlockHandler(new RenderRBMKReflector());

View File

@ -14,15 +14,17 @@ public class RenderBlockCT implements ISimpleBlockRenderingHandler {
@Override @Override
public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) {
renderer.renderBlockAsItem(block, 1, 1.0F); RenderBlocksCT.instance.renderBlockAsItem(block, metadata, 1F);
} }
@Override @Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
RenderBlocksCT rbct = RenderBlocksCT.instance; RenderBlocksCT rbct = RenderBlocksCT.instance;
rbct.prepWorld(world);
CTContext.loadContext((World)world, x, y, z, block); CTContext.loadContext(world, x, y, z, block);
rbct.setRenderBounds(0, 0, 0, 1, 1, 1);
rbct.renderStandardBlock(block, x, y, z); rbct.renderStandardBlock(block, x, y, z);
CTContext.dropContext(); CTContext.dropContext();

View File

@ -2,6 +2,7 @@ package com.hbm.render.block.ct;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.util.IIcon; import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World; import net.minecraft.world.World;
import static com.hbm.render.block.ct.CT.*; import static com.hbm.render.block.ct.CT.*;
@ -31,7 +32,7 @@ public class CTContext {
* @param z * @param z
* @param block * @param block
*/ */
public static void loadContext(World world, int x, int y, int z, Block block) { public static void loadContext(IBlockAccess world, int x, int y, int z, Block block) {
faces = new CTFace[6]; faces = new CTFace[6];
@ -51,15 +52,15 @@ public class CTContext {
} }
/* /*
* 1 2 3 * 0 1 2
* 4 5 * 3 4
* 6 7 8 * 5 6 7
*/ */
int itl = t | l | cornerType(cons[4], cons[1], cons[2]); int itl = t | l | cornerType(cons[3], cons[0], cons[1]);
int itr = t | r | cornerType(cons[5], cons[3], cons[2]); int itr = t | r | cornerType(cons[4], cons[2], cons[1]);
int ibl = b | l | cornerType(cons[4], cons[6], cons[7]); int ibl = b | l | cornerType(cons[3], cons[5], cons[6]);
int ibr = b | r | cornerType(cons[5], cons[8], cons[7]); int ibr = b | r | cornerType(cons[4], cons[7], cons[6]);
faces[i] = new CTFace((IBlockCT)block, itl, itr, ibl, ibr); faces[i] = new CTFace((IBlockCT)block, itl, itr, ibl, ibr);
} }

View File

@ -2,13 +2,14 @@ package com.hbm.render.block.ct;
import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.util.IIcon; import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World; import net.minecraft.world.World;
public interface IBlockCT { public interface IBlockCT {
public IIcon[] getFragments(); public IIcon[] getFragments();
public default boolean canConnect(World world, int x, int y, int z, IBlockCT block) { public default boolean canConnect(IBlockAccess world, int x, int y, int z, IBlockCT block) {
return this == block; return this == block;
} }

View File

@ -2,11 +2,19 @@ package com.hbm.render.block.ct;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import com.hbm.blocks.ModBlocks;
import com.hbm.main.MainRegistry;
import com.hbm.render.block.ct.CTContext.CTFace;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.IIcon; import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
/*
* this was the biggest fucking waste of my time and i wish everyone who thought this was a good idea the nastiest fucking diarrhea
*/
public class RenderBlocksCT extends RenderBlocks { public class RenderBlocksCT extends RenderBlocks {
public static RenderBlocksCT instance = new RenderBlocksCT(); public static RenderBlocksCT instance = new RenderBlocksCT();
@ -28,6 +36,10 @@ public class RenderBlocksCT extends RenderBlocks {
this.tess = Tessellator.instance; this.tess = Tessellator.instance;
} }
public void prepWorld(IBlockAccess acc) {
this.blockAccess = acc;
}
private void initSideInfo() { private void initSideInfo() {
if(!this.enableAO) if(!this.enableAO)
@ -46,39 +58,58 @@ public class RenderBlocksCT extends RenderBlocks {
this.cc = VertInfo.avg(tl, tr, bl, br); this.cc = VertInfo.avg(tl, tr, bl, br);
} }
/*@Override @Override
public boolean renderStandardBlock(Block block, int x, int y, int z) { public boolean renderStandardBlock(Block block, int x, int y, int z) {
if(this.blockAccess == null) {
MainRegistry.logger.error("Tried to call RenderBlocksCT without setting up a world context!");
return false;
}
return super.renderStandardBlock(block, x, y, z); return super.renderStandardBlock(block, x, y, z);
}*/ }
@Override @Override
public void renderFaceXPos(Block block, double x, double y, double z, IIcon icon) { public void renderFaceXPos(Block block, double x, double y, double z, IIcon icon) {
super.renderFaceXPos(block, x, y, z, icon); //super.renderFaceXPos(block, x, y, z, icon);
} }
@Override @Override
public void renderFaceXNeg(Block block, double x, double y, double z, IIcon icon) { public void renderFaceXNeg(Block block, double x, double y, double z, IIcon icon) {
super.renderFaceXNeg(block, x, y, z, icon); //super.renderFaceXNeg(block, x, y, z, icon);
} }
@Override @Override
public void renderFaceYPos(Block block, double x, double y, double z, IIcon icon) { public void renderFaceYPos(Block block, double x, double y, double z, IIcon icon) {
super.renderFaceYPos(block, x, y, z, icon); //super.renderFaceYPos(block, x, y, z, icon);
initSideInfo();
CTFace face = CTContext.faces[1];
drawFace(
new double[] {x + 0, y + 1, z + 0},
new double[] {x + 1, y + 1, z + 0},
new double[] {x + 1, y + 1, z + 1},
new double[] {x + 0, y + 1, z + 1},
face.getTopLeft(),
face.getTopRight(),
face.getBottomLeft(),
face.getBottomRight());
} }
@Override @Override
public void renderFaceYNeg(Block block, double x, double y, double z, IIcon icon) { public void renderFaceYNeg(Block block, double x, double y, double z, IIcon icon) {
super.renderFaceYNeg(block, x, y, z, icon); //super.renderFaceYNeg(block, x, y, z, icon);
} }
@Override @Override
public void renderFaceZPos(Block block, double x, double y, double z, IIcon icon) { public void renderFaceZPos(Block block, double x, double y, double z, IIcon icon) {
super.renderFaceZPos(block, x, y, z, icon); //super.renderFaceZPos(block, x, y, z, icon);
} }
@Override @Override
public void renderFaceZNeg(Block block, double x, double y, double z, IIcon icon) { public void renderFaceZNeg(Block block, double x, double y, double z, IIcon icon) {
super.renderFaceZNeg(block, x, y, z, icon); //super.renderFaceZNeg(block, x, y, z, icon);
} }
private void drawFace(double[] ftl, double[] ftr, double[] fbl, double[] fbr, IIcon itl, IIcon itr, IIcon ibl, IIcon ibr) { private void drawFace(double[] ftl, double[] ftr, double[] fbl, double[] fbr, IIcon itl, IIcon itr, IIcon ibl, IIcon ibr) {
@ -89,15 +120,17 @@ public class RenderBlocksCT extends RenderBlocks {
double[] fcr = avgCoords(ftr, fbr); double[] fcr = avgCoords(ftr, fbr);
double[] fcc = avgCoords(ftc, fbc); double[] fcc = avgCoords(ftc, fbc);
drawSubFace(ftl, this.tl, ftc, this.tc, fcl, this.cl, fcc, this.cc, itl); IIcon steel = ModBlocks.block_steel.getIcon(0, 0);
drawSubFace(ftc, this.tc, ftr, this.tr, fcc, this.cc, fcr, this.cr, itr); drawSubFace(ftl, this.tl, ftr, this.tr, fbl, this.bl, fbr, this.br, steel);
drawSubFace(fcl, this.cl, fcc, this.cc, fbl, this.bl, fbc, this.bc, ibl); /*drawSubFace(ftl, this.tl, ftc, this.tc, fcl, this.cl, fcc, this.cc, steel);
drawSubFace(fcc, this.cc, fcr, this.cr, fbc, this.bc, fbr, this.br, ibr); drawSubFace(ftc, this.tc, ftr, this.tr, fcc, this.cc, fcr, this.cr, steel);
drawSubFace(fcl, this.cl, fcc, this.cc, fbl, this.bl, fbc, this.bc, steel);
drawSubFace(fcc, this.cc, fcr, this.cr, fbc, this.bc, fbr, this.br, steel);*/
} }
private void drawSubFace(double[] ftl, VertInfo ntl, double[] ftr, VertInfo ntr, double[] fbl, VertInfo nbl, double[] fbr, VertInfo nbr, IIcon icon) { private void drawSubFace(double[] ftl, VertInfo ntl, double[] ftr, VertInfo ntr, double[] fbl, VertInfo nbl, double[] fbr, VertInfo nbr, IIcon icon) {
drawVert(ftl, icon.getMinU(), icon.getMinV(), ntl);
drawVert(ftr, icon.getMinU(), icon.getMaxV(), ntr); drawVert(ftr, icon.getMinU(), icon.getMaxV(), ntr);
drawVert(ftl, icon.getMinU(), icon.getMinV(), ntl);
drawVert(fbr, icon.getMaxU(), icon.getMaxV(), nbr); drawVert(fbr, icon.getMaxU(), icon.getMaxV(), nbr);
drawVert(fbl, icon.getMaxU(), icon.getMinV(), nbl); drawVert(fbl, icon.getMaxU(), icon.getMinV(), nbl);
} }
@ -169,29 +202,29 @@ public class RenderBlocksCT extends RenderBlocks {
tess.startDrawingQuads(); tess.startDrawingQuads();
tess.setNormal(0.0F, -1.0F, 0.0F); tess.setNormal(0.0F, -1.0F, 0.0F);
this.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(block, 0, meta)); super.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(block, 0, meta));
tess.draw(); tess.draw();
tess.startDrawingQuads(); tess.startDrawingQuads();
tess.setNormal(0.0F, 1.0F, 0.0F); tess.setNormal(0.0F, 1.0F, 0.0F);
this.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(block, 1, meta)); super.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(block, 1, meta));
tess.draw(); tess.draw();
tess.startDrawingQuads(); tess.startDrawingQuads();
tess.setNormal(0.0F, 0.0F, -1.0F); tess.setNormal(0.0F, 0.0F, -1.0F);
this.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(block, 2, meta)); super.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(block, 2, meta));
tess.draw(); tess.draw();
tess.startDrawingQuads(); tess.startDrawingQuads();
tess.setNormal(0.0F, 0.0F, 1.0F); tess.setNormal(0.0F, 0.0F, 1.0F);
this.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(block, 3, meta)); super.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(block, 3, meta));
tess.draw(); tess.draw();
tess.startDrawingQuads(); tess.startDrawingQuads();
tess.setNormal(-1.0F, 0.0F, 0.0F); tess.setNormal(-1.0F, 0.0F, 0.0F);
this.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(block, 4, meta)); super.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(block, 4, meta));
tess.draw(); tess.draw();
tess.startDrawingQuads(); tess.startDrawingQuads();
tess.setNormal(1.0F, 0.0F, 0.0F); tess.setNormal(1.0F, 0.0F, 0.0F);
this.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(block, 5, meta)); super.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(block, 5, meta));
tess.draw(); tess.draw();
GL11.glTranslatef(0.5F, 0.5F, 0.5F); GL11.glTranslatef(0.5F, 0.5F, 0.5F);