aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/render
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/common/render')
-rw-r--r--src/main/java/gregtech/common/render/GT_MultiTile_Renderer.java181
-rw-r--r--src/main/java/gregtech/common/render/GT_Renderer_Block.java300
-rw-r--r--src/main/java/gregtech/common/render/MultiTileBasicRender.java10
3 files changed, 256 insertions, 235 deletions
diff --git a/src/main/java/gregtech/common/render/GT_MultiTile_Renderer.java b/src/main/java/gregtech/common/render/GT_MultiTile_Renderer.java
new file mode 100644
index 0000000000..4d55979658
--- /dev/null
+++ b/src/main/java/gregtech/common/render/GT_MultiTile_Renderer.java
@@ -0,0 +1,181 @@
+package gregtech.common.render;
+
+import net.minecraft.block.Block;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.IBlockAccess;
+import net.minecraftforge.common.util.ForgeDirection;
+
+import org.lwjgl.opengl.GL11;
+
+import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
+import cpw.mods.fml.client.registry.RenderingRegistry;
+import gregtech.GT_Mod;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.logic.ModelRenderLogic;
+import gregtech.api.logic.interfaces.ModelRenderLogicHost;
+import gregtech.api.multitileentity.MultiTileEntityBlockInternal;
+import gregtech.api.multitileentity.MultiTileEntityClassContainer;
+import gregtech.api.multitileentity.MultiTileEntityRegistry;
+import gregtech.api.multitileentity.interfaces.IMultiBlockController;
+import gregtech.api.multitileentity.multiblock.base.MultiBlockPart;
+
+public class GT_MultiTile_Renderer implements ISimpleBlockRenderingHandler {
+
+ private final int renderID;
+ public static GT_MultiTile_Renderer INSTANCE;
+
+ public GT_MultiTile_Renderer() {
+ this.renderID = RenderingRegistry.getNextAvailableRenderId();
+ INSTANCE = this;
+ RenderingRegistry.registerBlockHandler(this);
+ }
+
+ @Override
+ public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) {
+ if (!(block instanceof MultiTileEntityBlockInternal)) {
+ return;
+ }
+
+ GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
+ GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
+
+ MultiTileEntityBlockInternal mteBlock = (MultiTileEntityBlockInternal) block;
+ MultiTileEntityRegistry registry = mteBlock.getRegistry();
+ if (registry == null) return;
+ MultiTileEntityClassContainer classContainer = registry.getClassContainer(metadata);
+ if (classContainer == null) return;
+ renderer.setRenderBoundsFromBlock(mteBlock);
+
+ for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) {
+ ITexture texture = classContainer.mCanonicalTileEntity.getTexture(side);
+ if (texture == null) continue;
+ switch (side) {
+ case DOWN -> renderYNegative(null, renderer, 0, 0, 0, block, texture, side);
+ case UP -> renderYPositive(null, renderer, 0, 0, 0, block, texture, side);
+ case WEST -> renderXNegative(null, renderer, 0, 0, 0, block, texture, side);
+ case EAST -> renderXPositive(null, renderer, 0, 0, 0, block, texture, side);
+ case NORTH -> renderZNegative(null, renderer, 0, 0, 0, block, texture, side);
+ case SOUTH -> renderZPositive(null, renderer, 0, 0, 0, block, texture, side);
+ default -> {
+ // Do nothing
+ }
+ }
+ }
+
+ GL11.glTranslatef(0.5F, 0.5F, 0.5F);
+ }
+
+ @Override
+ public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId,
+ RenderBlocks renderer) {
+ TileEntity entity = world.getTileEntity(x, y, z);
+ if (entity == null) {
+ return false;
+ }
+
+ renderer.enableAO = Minecraft.isAmbientOcclusionEnabled() && GT_Mod.gregtechproxy.mRenderTileAmbientOcclusion;
+ renderer.useInventoryTint = false;
+
+ if (entity instanceof ModelRenderLogicHost modelEntity && modelEntity.shouldRenderModel()) {
+ ModelRenderLogic renderLogic = modelEntity.getRenderLogic();
+ return true;
+ }
+
+ if (!(entity instanceof MultiTileBasicRender)) {
+ return false;
+ }
+
+ if (entity instanceof MultiBlockPart) {
+ IMultiBlockController controller = ((MultiBlockPart) entity).getTarget(false);
+ if (controller instanceof ModelRenderLogicHost && ((ModelRenderLogicHost) controller).shouldRenderModel()) {
+ return false;
+ }
+ }
+
+ MultiTileBasicRender renderedEntity = (MultiTileBasicRender) entity;
+
+ for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) {
+ ITexture texture = renderedEntity.getTexture(side);
+ if (texture == null) continue;
+ switch (side) {
+ case DOWN -> renderYNegative(world, renderer, x, y, z, block, texture, side);
+ case UP -> renderYPositive(world, renderer, x, y, z, block, texture, side);
+ case WEST -> renderXNegative(world, renderer, x, y, z, block, texture, side);
+ case EAST -> renderXPositive(world, renderer, x, y, z, block, texture, side);
+ case NORTH -> renderZNegative(world, renderer, x, y, z, block, texture, side);
+ case SOUTH -> renderZPositive(world, renderer, x, y, z, block, texture, side);
+ default -> {
+ // Do nothing
+ }
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public boolean shouldRender3DInInventory(int modelId) {
+ return true;
+ }
+
+ @Override
+ public int getRenderId() {
+ return renderID;
+ }
+
+ private static void renderYNegative(IBlockAccess world, RenderBlocks renderer, int x, int y, int z, Block block,
+ ITexture texture, ForgeDirection side) {
+ if (world != null) {
+ if (!block.shouldSideBeRendered(world, x, y - 1, z, side.ordinal())) return;
+ Tessellator.instance.setBrightness(block.getMixedBrightnessForBlock(world, x, y - 1, z));
+ }
+ texture.renderYNeg(renderer, block, x, y, z);
+ }
+
+ private static void renderZNegative(IBlockAccess world, RenderBlocks renderer, int x, int y, int z, Block block,
+ ITexture texture, ForgeDirection side) {
+ if (world != null) {
+ if (!block.shouldSideBeRendered(world, x, y, z - 1, side.ordinal())) return;
+ Tessellator.instance.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z - 1));
+ }
+ texture.renderZNeg(renderer, block, x, y, z);
+ }
+
+ private static void renderXNegative(IBlockAccess world, RenderBlocks renderer, int x, int y, int z, Block block,
+ ITexture texture, ForgeDirection side) {
+ if (world != null) {
+ if (!block.shouldSideBeRendered(world, x - 1, y, z, side.ordinal())) return;
+ Tessellator.instance.setBrightness(block.getMixedBrightnessForBlock(world, x - 1, y, z));
+ }
+ texture.renderXNeg(renderer, block, x, y, z);
+ }
+
+ private static void renderYPositive(IBlockAccess world, RenderBlocks renderer, int x, int y, int z, Block block,
+ ITexture texture, ForgeDirection side) {
+ if (world != null) {
+ if (!block.shouldSideBeRendered(world, x, y + 1, z, side.ordinal())) return;
+ Tessellator.instance.setBrightness(block.getMixedBrightnessForBlock(world, x, y + 1, z));
+ }
+ texture.renderYPos(renderer, block, x, y, z);
+ }
+
+ private static void renderXPositive(IBlockAccess world, RenderBlocks renderer, int x, int y, int z, Block block,
+ ITexture texture, ForgeDirection side) {
+ if (world != null) {
+ if (!block.shouldSideBeRendered(world, x + 1, y, z, side.ordinal())) return;
+ Tessellator.instance.setBrightness(block.getMixedBrightnessForBlock(world, x + 1, y, z));
+ }
+ texture.renderXPos(renderer, block, x, y, z);
+ }
+
+ private static void renderZPositive(IBlockAccess world, RenderBlocks renderer, int x, int y, int z, Block block,
+ ITexture texture, ForgeDirection side) {
+ if (world != null) {
+ if (!block.shouldSideBeRendered(world, x, y, z + 1, side.ordinal())) return;
+ Tessellator.instance.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z + 1));
+ }
+ texture.renderZPos(renderer, block, x, y, z);
+ }
+}
diff --git a/src/main/java/gregtech/common/render/GT_Renderer_Block.java b/src/main/java/gregtech/common/render/GT_Renderer_Block.java
index 7646ee31fa..012115efa3 100644
--- a/src/main/java/gregtech/common/render/GT_Renderer_Block.java
+++ b/src/main/java/gregtech/common/render/GT_Renderer_Block.java
@@ -1,9 +1,5 @@
package gregtech.common.render;
-import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES;
-import static gregtech.api.enums.GT_Values.OFFX;
-import static gregtech.api.enums.GT_Values.OFFY;
-import static gregtech.api.enums.GT_Values.OFFZ;
import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_DOWN;
import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_EAST;
import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_NORTH;
@@ -27,7 +23,6 @@ import net.minecraft.client.particle.EffectRenderer;
import net.minecraft.client.particle.EntityDiggingFX;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
-import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
@@ -529,150 +524,73 @@ public class GT_Renderer_Block implements ISimpleBlockRenderingHandler {
GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
- if (aBlock instanceof IRenderedBlock) {
- boolean tNeedsToSetBounds = true;
- final ItemStack aStack = new ItemStack(aBlock, 1, aMeta);
- IRenderedBlock tRenderer = ((IRenderedBlock) aBlock).passRenderingToObject(aStack);
- if (tRenderer != null) tRenderer = tRenderer.passRenderingToObject(aStack);
- if (tRenderer == null) tRenderer = IRenderedBlock.ErrorRenderer.INSTANCE;
- for (int i = 0, j = tRenderer.getRenderPasses(aBlock); i < j; i++) {
- if (tRenderer.usesRenderPass(i)) {
- if (tRenderer.setBlockBounds(aBlock, i)) {
- tNeedsToSetBounds = true;
- aRenderer.setRenderBoundsFromBlock(aBlock);
- } else {
- if (tNeedsToSetBounds) aBlock.setBlockBoundsForItemRender();
- aRenderer.setRenderBoundsFromBlock(aBlock);
- tNeedsToSetBounds = false;
- }
+ if (aBlock instanceof GT_Block_Ores_Abstract) {
+ final GT_TileEntity_Ores tTileEntity = new GT_TileEntity_Ores();
+ tTileEntity.mMetaData = ((short) aMeta);
- renderNegativeYFacing(
- null,
- aRenderer,
- aBlock,
- 0,
- 0,
- 0,
- tRenderer.getTexture(aBlock, (byte) DOWN.ordinal(), true, i),
- !tNeedsToSetBounds);
- renderPositiveYFacing(
- null,
- aRenderer,
- aBlock,
- 0,
- 0,
- 0,
- tRenderer.getTexture(aBlock, (byte) UP.ordinal(), true, i),
- !tNeedsToSetBounds);
- renderNegativeZFacing(
- null,
- aRenderer,
- aBlock,
- 0,
- 0,
- 0,
- tRenderer.getTexture(aBlock, (byte) NORTH.ordinal(), true, i),
- !tNeedsToSetBounds);
- renderPositiveZFacing(
- null,
- aRenderer,
- aBlock,
- 0,
- 0,
- 0,
- tRenderer.getTexture(aBlock, (byte) SOUTH.ordinal(), true, i),
- !tNeedsToSetBounds);
- renderNegativeXFacing(
- null,
- aRenderer,
- aBlock,
- 0,
- 0,
- 0,
- tRenderer.getTexture(aBlock, (byte) WEST.ordinal(), true, i),
- !tNeedsToSetBounds);
- renderPositiveXFacing(
- null,
- aRenderer,
- aBlock,
- 0,
- 0,
- 0,
- tRenderer.getTexture(aBlock, (byte) EAST.ordinal(), true, i),
- !tNeedsToSetBounds);
- }
+ aBlock.setBlockBoundsForItemRender();
+ aRenderer.setRenderBoundsFromBlock(aBlock);
+ renderNegativeYFacing(
+ null,
+ aRenderer,
+ aBlock,
+ 0,
+ 0,
+ 0,
+ tTileEntity.getTexture(aBlock, (byte) DOWN.ordinal()),
+ true);
+ renderPositiveYFacing(
+ null,
+ aRenderer,
+ aBlock,
+ 0,
+ 0,
+ 0,
+ tTileEntity.getTexture(aBlock, (byte) UP.ordinal()),
+ true);
+ renderNegativeZFacing(
+ null,
+ aRenderer,
+ aBlock,
+ 0,
+ 0,
+ 0,
+ tTileEntity.getTexture(aBlock, (byte) NORTH.ordinal()),
+ true);
+ renderPositiveZFacing(
+ null,
+ aRenderer,
+ aBlock,
+ 0,
+ 0,
+ 0,
+ tTileEntity.getTexture(aBlock, (byte) SOUTH.ordinal()),
+ true);
+ renderNegativeXFacing(
+ null,
+ aRenderer,
+ aBlock,
+ 0,
+ 0,
+ 0,
+ tTileEntity.getTexture(aBlock, (byte) WEST.ordinal()),
+ true);
+ renderPositiveXFacing(
+ null,
+ aRenderer,
+ aBlock,
+ 0,
+ 0,
+ 0,
+ tTileEntity.getTexture(aBlock, (byte) EAST.ordinal()),
+ true);
+ } else if (aMeta > 0 && (aMeta < GregTech_API.METATILEENTITIES.length)
+ && aBlock instanceof GT_Block_Machines
+ && (GregTech_API.METATILEENTITIES[aMeta] != null)
+ && (!GregTech_API.METATILEENTITIES[aMeta].renderInInventory(aBlock, aMeta, aRenderer))) {
+ renderNormalInventoryMetaTileEntity(aBlock, aMeta, aRenderer);
}
- if (tNeedsToSetBounds) aBlock.setBlockBounds(0, 0, 0, 1, 1, 1);
-
- } else {
- if (aBlock instanceof GT_Block_Ores_Abstract) {
- final GT_TileEntity_Ores tTileEntity = new GT_TileEntity_Ores();
- tTileEntity.mMetaData = ((short) aMeta);
-
- aBlock.setBlockBoundsForItemRender();
- aRenderer.setRenderBoundsFromBlock(aBlock);
- renderNegativeYFacing(
- null,
- aRenderer,
- aBlock,
- 0,
- 0,
- 0,
- tTileEntity.getTexture(aBlock, (byte) DOWN.ordinal()),
- true);
- renderPositiveYFacing(
- null,
- aRenderer,
- aBlock,
- 0,
- 0,
- 0,
- tTileEntity.getTexture(aBlock, (byte) UP.ordinal()),
- true);
- renderNegativeZFacing(
- null,
- aRenderer,
- aBlock,
- 0,
- 0,
- 0,
- tTileEntity.getTexture(aBlock, (byte) NORTH.ordinal()),
- true);
- renderPositiveZFacing(
- null,
- aRenderer,
- aBlock,
- 0,
- 0,
- 0,
- tTileEntity.getTexture(aBlock, (byte) SOUTH.ordinal()),
- true);
- renderNegativeXFacing(
- null,
- aRenderer,
- aBlock,
- 0,
- 0,
- 0,
- tTileEntity.getTexture(aBlock, (byte) WEST.ordinal()),
- true);
- renderPositiveXFacing(
- null,
- aRenderer,
- aBlock,
- 0,
- 0,
- 0,
- tTileEntity.getTexture(aBlock, (byte) EAST.ordinal()),
- true);
- } else if (aMeta > 0 && (aMeta < GregTech_API.METATILEENTITIES.length)
- && aBlock instanceof GT_Block_Machines
- && (GregTech_API.METATILEENTITIES[aMeta] != null)
- && (!GregTech_API.METATILEENTITIES[aMeta].renderInInventory(aBlock, aMeta, aRenderer))) {
- renderNormalInventoryMetaTileEntity(aBlock, aMeta, aRenderer);
- }
- aBlock.setBlockBounds(blockMin, blockMin, blockMin, blockMax, blockMax, blockMax);
- }
+ aBlock.setBlockBounds(blockMin, blockMin, blockMin, blockMax, blockMax, blockMax);
aRenderer.setRenderBoundsFromBlock(aBlock);
@@ -979,94 +897,6 @@ public class GT_Renderer_Block implements ISimpleBlockRenderingHandler {
RenderBlocks aRenderer) {
aRenderer.enableAO = Minecraft.isAmbientOcclusionEnabled() && GT_Mod.gregtechproxy.mRenderTileAmbientOcclusion;
aRenderer.useInventoryTint = false;
- if (aBlock instanceof IRenderedBlock) {
- IRenderedBlock tRenderer = ((IRenderedBlock) aBlock).passRenderingToObject(aWorld, aX, aY, aZ);
- if (tRenderer != null) tRenderer = tRenderer.passRenderingToObject(aWorld, aX, aY, aZ);
- if (tRenderer == null) tRenderer = IRenderedBlock.ErrorRenderer.INSTANCE;
- boolean tNeedsToSetBounds = true;
- boolean rReturn = false;
- if (tRenderer.renderBlock(aBlock, aRenderer, aWorld, aX, aY, aZ)) {
- rReturn = true;
- } else {
- final boolean[] tSides = new boolean[6];
- if (tRenderer instanceof IRenderedBlockSideCheck) {
- for (byte tSide : ALL_VALID_SIDES) rReturn |= (tSides[tSide] = ((IRenderedBlockSideCheck) tRenderer)
- .renderFullBlockSide(aBlock, aRenderer, tSide));
- } else {
- for (byte tSide : ALL_VALID_SIDES) rReturn |= (tSides[tSide] = aBlock
- .shouldSideBeRendered(aWorld, aX + OFFX[tSide], aY + OFFY[tSide], aZ + OFFZ[tSide], tSide));
- }
- for (int i = 0, j = tRenderer.getRenderPasses(aBlock); i < j; i++) {
- if (tRenderer.usesRenderPass(i)) {
- if (tRenderer.setBlockBounds(aBlock, i)) {
- tNeedsToSetBounds = true;
- aRenderer.setRenderBoundsFromBlock(aBlock);
- } else {
- if (tNeedsToSetBounds) aBlock.setBlockBounds(0, 0, 0, 1, 1, 1);
- aRenderer.setRenderBoundsFromBlock(aBlock);
- tNeedsToSetBounds = false;
- }
- renderNegativeYFacing(
- aWorld,
- aRenderer,
- aBlock,
- aX,
- aY,
- aZ,
- tRenderer.getTexture(aBlock, (byte) DOWN.ordinal(), i, tSides),
- tSides[DOWN.ordinal()]);
- renderPositiveYFacing(
- aWorld,
- aRenderer,
- aBlock,
- aX,
- aY,
- aZ,
- tRenderer.getTexture(aBlock, (byte) UP.ordinal(), i, tSides),
- tSides[UP.ordinal()]);
- renderNegativeZFacing(
- aWorld,
- aRenderer,
- aBlock,
- aX,
- aY,
- aZ,
- tRenderer.getTexture(aBlock, (byte) NORTH.ordinal(), i, tSides),
- tSides[NORTH.ordinal()]);
- renderPositiveZFacing(
- aWorld,
- aRenderer,
- aBlock,
- aX,
- aY,
- aZ,
- tRenderer.getTexture(aBlock, (byte) SOUTH.ordinal(), i, tSides),
- tSides[SOUTH.ordinal()]);
- renderNegativeXFacing(
- aWorld,
- aRenderer,
- aBlock,
- aX,
- aY,
- aZ,
- tRenderer.getTexture(aBlock, (byte) WEST.ordinal(), i, tSides),
- tSides[WEST.ordinal()]);
- renderPositiveXFacing(
- aWorld,
- aRenderer,
- aBlock,
- aX,
- aY,
- aZ,
- tRenderer.getTexture(aBlock, (byte) EAST.ordinal(), i, tSides),
- tSides[EAST.ordinal()]);
- }
- }
- if (tNeedsToSetBounds) aBlock.setBlockBounds(0, 0, 0, 1, 1, 1);
- }
-
- return rReturn;
- }
final TileEntity tileEntity = aWorld.getTileEntity(aX, aY, aZ);
if (tileEntity == null) return false;
diff --git a/src/main/java/gregtech/common/render/MultiTileBasicRender.java b/src/main/java/gregtech/common/render/MultiTileBasicRender.java
new file mode 100644
index 0000000000..be41739401
--- /dev/null
+++ b/src/main/java/gregtech/common/render/MultiTileBasicRender.java
@@ -0,0 +1,10 @@
+package gregtech.common.render;
+
+import net.minecraftforge.common.util.ForgeDirection;
+
+import gregtech.api.interfaces.ITexture;
+
+public interface MultiTileBasicRender {
+
+ ITexture getTexture(ForgeDirection side);
+}