No more TESR on conduits (#176)

* Goodbye TESR, Hello ISBRH

* More fluid conduit rendering work

* more stuff

* spotless

* Add empty check to fluid conduit renderer
This commit is contained in:
Darren Eberly authored and GitHub committed 2024-10-21 20:08:58 +02:00
1 parent bf9c2cd2c7
commit 0fbf6f05ba
5 files changed
+40 -136

No files matched your search

@@ -27,7 +27,6 @@ import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
import crazypants.enderio.conduit.BlockConduitBundle; import crazypants.enderio.conduit.BlockConduitBundle;
import crazypants.enderio.conduit.IConduit; import crazypants.enderio.conduit.IConduit;
import crazypants.enderio.conduit.TileConduitBundle;
import crazypants.enderio.conduit.facade.FacadeRenderer; import crazypants.enderio.conduit.facade.FacadeRenderer;
import crazypants.enderio.conduit.gas.GasConduit; import crazypants.enderio.conduit.gas.GasConduit;
import crazypants.enderio.conduit.gas.GasUtil; import crazypants.enderio.conduit.gas.GasUtil;
@@ -378,7 +377,6 @@ public class ClientProxy extends CommonProxy {
cbr = new ConduitBundleRenderer((float) Config.conduitScale); cbr = new ConduitBundleRenderer((float) Config.conduitScale);
BlockConduitBundle.rendererId = RenderingRegistry.getNextAvailableRenderId(); BlockConduitBundle.rendererId = RenderingRegistry.getNextAvailableRenderId();
RenderingRegistry.registerBlockHandler(cbr); RenderingRegistry.registerBlockHandler(cbr);
ClientRegistry.bindTileEntitySpecialRenderer(TileConduitBundle.class, cbr);
ClientRegistry.bindTileEntitySpecialRenderer(TileTravelAnchor.class, new TravelEntitySpecialRenderer()); ClientRegistry.bindTileEntitySpecialRenderer(TileTravelAnchor.class, new TravelEntitySpecialRenderer());
@@ -1,7 +1,6 @@
package crazypants.enderio.conduit.liquid; package crazypants.enderio.conduit.liquid;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -57,10 +56,17 @@ public class LiquidConduitRenderer extends DefaultConduitRenderer implements IRe
super.renderEntity(conduitBundleRenderer, te, conduit, x, y, z, partialTick, worldLight, rb); super.renderEntity(conduitBundleRenderer, te, conduit, x, y, z, partialTick, worldLight, rb);
} }
public void renderDynamicEntity(ConduitBundleRenderer conduitBundleRenderer, IConduitBundle te, IConduit conduit,
double x, double y, double z, float partialTick, float worldLight) {
}
@Override @Override
protected void renderConduit(IIcon tex, IConduit conduit, CollidableComponent component, float brightness) { protected void renderConduit(IIcon tex, IConduit conduit, CollidableComponent component, float brightness) {
Tessellator tessellator = Tessellator.instance;
if (isNSEWUD(component.dir)) { if (isNSEWUD(component.dir)) {
LiquidConduit lc = (LiquidConduit) conduit; LiquidConduit lc = (LiquidConduit) conduit;
IIcon fluidTex = conduit.getTransmitionTextureForState(component);
FluidStack fluid = lc.getFluidType(); FluidStack fluid = lc.getFluidType();
if (fluid != null) { if (fluid != null) {
renderFluidOutline(component, fluid); renderFluidOutline(component, fluid);
@@ -68,33 +74,40 @@ public class LiquidConduitRenderer extends DefaultConduitRenderer implements IRe
BoundingBox[] cubes = toCubes(component.bound); BoundingBox[] cubes = toCubes(component.bound);
for (BoundingBox cube : cubes) { for (BoundingBox cube : cubes) {
drawSection(cube, tex.getMinU(), tex.getMaxU(), tex.getMinV(), tex.getMaxV(), component.dir, false); drawSection(cube, tex.getMinU(), tex.getMaxU(), tex.getMinV(), tex.getMaxV(), component.dir, false);
// This check is kinda broken, but whatever, it was like that when this was done in a TESR too
if (lc.getTank().getFilledRatio() <= 0) {
continue;
}
tessellator.setColorOpaque_F(0.7f, 0.7f, 0.7f);
drawSection(
cube,
fluidTex.getMinU(),
fluidTex.getMaxU(),
fluidTex.getMinV(),
fluidTex.getMaxV(),
component.dir,
true);
} }
} else { if (conduit.getConnectionMode(component.dir) == ConnectionMode.DISABLED) {
drawSection( final CubeRenderer cr = CubeRenderer.get();
component.bound, int i;
tex.getMinU(), tex = EnderIO.blockConduitBundle.getConnectorIcon(component.data);
tex.getMaxU(), List<Vertex> corners = component.bound.getCornersWithUvForFace(
tex.getMinV(), component.dir,
tex.getMaxV(), tex.getMinU(),
component.dir, tex.getMaxU(),
true); tex.getMinV(),
} tex.getMaxV());
for (i = corners.size() - 1; i >= 0; i--) {
if (conduit.getConnectionMode(component.dir) == ConnectionMode.DISABLED) { Vertex c = corners.get(i);
final CubeRenderer cr = CubeRenderer.get(); cr.addVecWithUV(c.xyz, c.uv.x, c.uv.y);
int i; }
tex = EnderIO.blockConduitBundle.getConnectorIcon(component.data); // back face
List<Vertex> corners = component.bound for (i = corners.size() - 1; i >= 0; i--) {
.getCornersWithUvForFace(component.dir, tex.getMinU(), tex.getMaxU(), tex.getMinV(), tex.getMaxV()); Vertex c = corners.get(i);
for (i = corners.size() - 1; i >= 0; i--) { cr.addVecWithUV(c.xyz, c.uv.x, c.uv.y);
Vertex c = corners.get(i); }
cr.addVecWithUV(c.xyz, c.uv.x, c.uv.y);
}
// back face
for (i = corners.size() - 1; i >= 0; i--) {
Vertex c = corners.get(i);
cr.addVecWithUV(c.xyz, c.uv.x, c.uv.y);
} }
} }
} }
@@ -243,49 +256,6 @@ public class LiquidConduitRenderer extends DefaultConduitRenderer implements IRe
// done in the dynamic section // done in the dynamic section
} }
@Override
public boolean isDynamic() {
return true;
}
@Override
public void renderDynamicEntity(ConduitBundleRenderer conduitBundleRenderer, IConduitBundle te, IConduit conduit,
double x, double y, double z, float partialTick, float worldLight) {
if (((LiquidConduit) conduit).getTank().getFilledRatio() <= 0) {
return;
}
Collection<CollidableComponent> components = conduit.getCollidableComponents();
Tessellator tessellator = Tessellator.instance;
calculateRatios((LiquidConduit) conduit);
transmissionScaleFactor = conduit.getTransmitionGeometryScale();
IIcon tex;
for (CollidableComponent component : components) {
if (renderComponent(component)) {
if (isNSEWUD(component.dir) && conduit.getTransmitionTextureForState(component) != null) {
tessellator.setColorOpaque_F(1, 1, 1);
tex = conduit.getTransmitionTextureForState(component);
BoundingBox[] cubes = toCubes(component.bound);
for (BoundingBox cube : cubes) {
drawSection(
cube,
tex.getMinU(),
tex.getMaxU(),
tex.getMinV(),
tex.getMaxV(),
component.dir,
true);
}
}
}
}
}
@Override @Override
protected void setVerticesForTransmission(BoundingBox bound, ForgeDirection id) { protected void setVerticesForTransmission(BoundingBox bound, ForgeDirection id) {
@@ -11,7 +11,6 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityClientPlayerMP; import net.minecraft.client.entity.EntityClientPlayerMP;
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.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.init.Blocks; import net.minecraft.init.Blocks;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon; import net.minecraft.util.IIcon;
@@ -19,13 +18,9 @@ import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.IBlockAccess;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
import com.enderio.core.client.render.BoundingBox; import com.enderio.core.client.render.BoundingBox;
import com.enderio.core.client.render.CubeRenderer; import com.enderio.core.client.render.CubeRenderer;
import com.enderio.core.client.render.IconUtil; import com.enderio.core.client.render.IconUtil;
import com.enderio.core.client.render.RenderUtil;
import com.enderio.core.common.util.BlockCoord; import com.enderio.core.common.util.BlockCoord;
import com.enderio.core.common.util.IBlockAccessWrapper; import com.enderio.core.common.util.IBlockAccessWrapper;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
@@ -53,59 +48,12 @@ import crazypants.util.RenderPassHelper;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
@ThreadSafeISBRH(perThread = false) @ThreadSafeISBRH(perThread = false)
public class ConduitBundleRenderer extends TileEntitySpecialRenderer implements ISimpleBlockRenderingHandler { public class ConduitBundleRenderer implements ISimpleBlockRenderingHandler {
public ConduitBundleRenderer(float conduitScale) {} public ConduitBundleRenderer(float conduitScale) {}
public ConduitBundleRenderer() {} public ConduitBundleRenderer() {}
@Override
public void renderTileEntityAt(TileEntity te, double x, double y, double z, float partialTick) {
IConduitBundle bundle = (IConduitBundle) te;
EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
if (bundle == null || (bundle.hasFacade() && bundle.getFacadeId().isOpaqueCube()
&& !ConduitUtil.isFacadeHidden(bundle, player))) {
return;
}
final Tessellator tessellator = Tessellator.instance;
float brightness = -1;
for (IConduit con : bundle.getConduits()) {
if (ConduitUtil.renderConduit(player, con)) {
final ConduitRenderer renderer = con.getRenderer();
if (renderer.isDynamic()) {
if (brightness == -1) {
BlockCoord loc = bundle.getLocation();
brightness = bundle.getEntity().getWorldObj()
.getLightBrightnessForSkyBlocks(loc.x, loc.y, loc.z, 0);
RenderUtil.bindBlockTexture();
GL11.glPushAttrib(GL11.GL_ENABLE_BIT | GL11.GL_LIGHTING_BIT);
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glShadeModel(GL11.GL_SMOOTH);
GL11.glPushMatrix();
GL11.glTranslated(x, y, z);
tessellator.startDrawingQuads();
}
renderer.renderDynamicEntity(this, bundle, con, x, y, z, partialTick, brightness);
}
}
}
if (brightness != -1) {
tessellator.draw();
GL11.glShadeModel(GL11.GL_FLAT);
GL11.glPopMatrix();
GL11.glPopAttrib();
}
}
@Override @Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId,
RenderBlocks rb) { RenderBlocks rb) {
@@ -10,8 +10,4 @@ public interface ConduitRenderer {
void renderEntity(ConduitBundleRenderer conduitBundleRenderer, IConduitBundle te, IConduit con, double x, double y, void renderEntity(ConduitBundleRenderer conduitBundleRenderer, IConduitBundle te, IConduit con, double x, double y,
double z, float partialTick, float worldLight, RenderBlocks rb); double z, float partialTick, float worldLight, RenderBlocks rb);
boolean isDynamic();
void renderDynamicEntity(ConduitBundleRenderer conduitBundleRenderer, IConduitBundle te, IConduit con, double x,
double y, double z, float partialTick, float worldLight);
} }
@@ -63,10 +63,6 @@ public class DefaultConduitRenderer implements ConduitRenderer {
} }
} }
@Override
public void renderDynamicEntity(ConduitBundleRenderer conduitBundleRenderer, IConduitBundle te, IConduit con,
double x, double y, double z, float partialTick, float worldLight) {}
protected void renderConduit(IIcon tex, IConduit conduit, CollidableComponent component, float brightness) { protected void renderConduit(IIcon tex, IConduit conduit, CollidableComponent component, float brightness) {
final CubeRenderer cr = CubeRenderer.get(); final CubeRenderer cr = CubeRenderer.get();
@@ -349,8 +345,4 @@ public class DefaultConduitRenderer implements ConduitRenderer {
return new BoundingBox[] { bb }; return new BoundingBox[] { bb };
} }
@Override
public boolean isDynamic() {
return false;
}
} }