aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/render
diff options
context:
space:
mode:
authorboubou_19 <miisterunknown@gmail.com>2021-08-16 20:32:53 +0200
committerboubou_19 <miisterunknown@gmail.com>2021-08-16 20:32:53 +0200
commit8f5dd5625e4632bbecda0771caad47bbbbd35d4c (patch)
tree15d544c783cd17606e6d71259eefc062ba4ea8e5 /src/main/java/gregtech/common/render
parent99030ff940686562c7e4f133919fb1496b0575f4 (diff)
parentc543724aa11d696fa049855e7b330364c1000a17 (diff)
downloadGT5-Unofficial-8f5dd5625e4632bbecda0771caad47bbbbd35d4c.tar.gz
GT5-Unofficial-8f5dd5625e4632bbecda0771caad47bbbbd35d4c.tar.bz2
GT5-Unofficial-8f5dd5625e4632bbecda0771caad47bbbbd35d4c.zip
Merge remote-tracking branch 'upstream/experimental' into experimental
Diffstat (limited to 'src/main/java/gregtech/common/render')
-rw-r--r--src/main/java/gregtech/common/render/GT_FlaskRenderer.java23
-rw-r--r--src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java2
-rw-r--r--src/main/java/gregtech/common/render/GT_IconFlipped.java80
-rw-r--r--src/main/java/gregtech/common/render/GT_MetaGenerated_Item_Renderer.java120
-rw-r--r--src/main/java/gregtech/common/render/GT_RenderedGlowTexture.java213
-rw-r--r--src/main/java/gregtech/common/render/GT_RenderedTexture.java392
-rw-r--r--src/main/java/gregtech/common/render/GT_StdRenderedTexture.java36
-rw-r--r--src/main/java/gregtech/common/render/GT_TextureBuilder.java11
8 files changed, 477 insertions, 400 deletions
diff --git a/src/main/java/gregtech/common/render/GT_FlaskRenderer.java b/src/main/java/gregtech/common/render/GT_FlaskRenderer.java
index 7ba4d8e037..48d9b0bf90 100644
--- a/src/main/java/gregtech/common/render/GT_FlaskRenderer.java
+++ b/src/main/java/gregtech/common/render/GT_FlaskRenderer.java
@@ -1,5 +1,6 @@
package gregtech.common.render;
+import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gregtech.api.enums.ItemList;
import gregtech.common.items.GT_VolumetricFlask;
@@ -15,8 +16,8 @@ import net.minecraftforge.client.MinecraftForgeClient;
import net.minecraftforge.fluids.FluidStack;
import org.lwjgl.opengl.GL11;
-@SideOnly(cpw.mods.fml.relauncher.Side.CLIENT)
-public final class GT_FlaskRenderer implements net.minecraftforge.client.IItemRenderer {
+@SideOnly(Side.CLIENT)
+public final class GT_FlaskRenderer implements IItemRenderer {
public GT_FlaskRenderer() {
MinecraftForgeClient.registerItemRenderer(ItemList.VOLUMETRIC_FLASK.getItem(), this);
}
@@ -36,8 +37,8 @@ public final class GT_FlaskRenderer implements net.minecraftforge.client.IItemRe
public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
GT_VolumetricFlask cell = (GT_VolumetricFlask) item.getItem();
IIcon icon = item.getIconIndex();
- GL11.glEnable(3042);
- GL11.glEnable(3008);
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glEnable(GL11.GL_ALPHA_TEST);
if (type.equals(ItemRenderType.ENTITY)) {
GL11.glRotated(180.0D, 0.0D, 0.0D, 1.0D);
GL11.glRotated(90.0D, 0.0D, 1.0D, 0.0D);
@@ -56,7 +57,7 @@ public final class GT_FlaskRenderer implements net.minecraftforge.client.IItemRe
IIcon fluidicon = fs.getFluid().getIcon(fs);
int fluidColor = fs.getFluid().getColor(fs);
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture);
- GL11.glBlendFunc(0, 1);
+ GL11.glBlendFunc(GL11.GL_ZERO, GL11.GL_ONE);
if (type.equals(ItemRenderType.INVENTORY)) {
DrawUtil.renderIcon(iconWindow, 16.0D, 0.0D, 0.0F, 0.0F, -1.0F);
} else {
@@ -65,8 +66,8 @@ public final class GT_FlaskRenderer implements net.minecraftforge.client.IItemRe
}
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture);
- GL11.glBlendFunc(770, 771);
- GL11.glDepthFunc(514);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ GL11.glDepthFunc(GL11.GL_EQUAL);
GL11.glColor3ub((byte) (fluidColor >> 16), (byte) (fluidColor >> 8), (byte) fluidColor);
if (type.equals(ItemRenderType.INVENTORY)) {
DrawUtil.renderIcon(fluidicon, 16.0D, 0.0D, 0.0F, 0.0F, -1.0F);
@@ -76,17 +77,17 @@ public final class GT_FlaskRenderer implements net.minecraftforge.client.IItemRe
}
GL11.glColor3ub((byte) -1, (byte) -1, (byte) -1);
- GL11.glDepthFunc(515);
+ GL11.glDepthFunc(GL11.GL_LEQUAL);
}
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture);
- GL11.glBlendFunc(770, 771);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
if (type.equals(ItemRenderType.INVENTORY)) {
DrawUtil.renderIcon(icon, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F);
} else {
ItemRenderer.renderItemIn2D(Tessellator.instance, icon.getMaxU(), icon.getMinV(), icon.getMinU(), icon.getMaxV(), icon.getIconWidth(), icon.getIconHeight(), 0.0625F);
}
- GL11.glDisable(3008);
- GL11.glDisable(3042);
+ GL11.glDisable(GL11.GL_ALPHA_TEST);
+ GL11.glDisable(GL11.GL_BLEND);
}
}
diff --git a/src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java b/src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java
index ef5d8287ba..c4e23eab6e 100644
--- a/src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java
+++ b/src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java
@@ -67,7 +67,7 @@ public class GT_FluidDisplayStackRenderer implements IItemRenderer {
// Render Fluid amount text
long fluidAmount = item.getTagCompound().getLong("mFluidDisplayAmount");
- if (fluidAmount > 0L) {
+ if (fluidAmount > 0L && !item.getTagCompound().getBoolean("mHideStackSize")) {
String amountString;
if (fluidAmount < 10000) {
diff --git a/src/main/java/gregtech/common/render/GT_IconFlipped.java b/src/main/java/gregtech/common/render/GT_IconFlipped.java
new file mode 100644
index 0000000000..c3eee2900f
--- /dev/null
+++ b/src/main/java/gregtech/common/render/GT_IconFlipped.java
@@ -0,0 +1,80 @@
+package gregtech.common.render;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import net.minecraft.util.IIcon;
+
+@SideOnly(Side.CLIENT)
+public class GT_IconFlipped implements IIcon {
+ private final IIcon baseIcon;
+ private final boolean flipU;
+ private final boolean flipV;
+
+ public GT_IconFlipped(IIcon baseIcon, boolean flipU, boolean flipV) {
+ this.baseIcon = baseIcon;
+ this.flipU = flipU;
+ this.flipV = flipV;
+ }
+
+ /**
+ * Returns the width of the icon, in pixels.
+ */
+ public int getIconWidth() {
+ return this.baseIcon.getIconWidth();
+ }
+
+ /**
+ * Returns the height of the icon, in pixels.
+ */
+ public int getIconHeight() {
+ return this.baseIcon.getIconHeight();
+ }
+
+ /**
+ * Returns the minimum U coordinate to use when rendering with this icon.
+ */
+ public float getMinU() {
+ return this.flipU ? this.baseIcon.getMaxU() : this.baseIcon.getMinU();
+ }
+
+ /**
+ * Returns the maximum U coordinate to use when rendering with this icon.
+ */
+ public float getMaxU() {
+ return this.flipU ? this.baseIcon.getMinU() : this.baseIcon.getMaxU();
+ }
+
+ /**
+ * Gets a U coordinate on the icon. 0 returns uMin and 16 returns uMax. Other arguments return in-between values.
+ */
+ public float getInterpolatedU(double p_94214_1_) {
+ float f = this.getMaxU() - this.getMinU();
+ return this.getMinU() + f * ((float) p_94214_1_ / 16.0F);
+ }
+
+ /**
+ * Returns the minimum V coordinate to use when rendering with this icon.
+ */
+ public float getMinV() {
+ return this.flipV ? this.baseIcon.getMaxV() : this.baseIcon.getMinV();
+ }
+
+ /**
+ * Returns the maximum V coordinate to use when rendering with this icon.
+ */
+ public float getMaxV() {
+ return this.flipV ? this.baseIcon.getMinV() : this.baseIcon.getMaxV();
+ }
+
+ /**
+ * Gets a V coordinate on the icon. 0 returns vMin and 16 returns vMax. Other arguments return in-between values.
+ */
+ public float getInterpolatedV(double p_94207_1_) {
+ float f = this.getMaxV() - this.getMinV();
+ return this.getMinV() + f * ((float) p_94207_1_ / 16.0F);
+ }
+
+ public String getIconName() {
+ return this.baseIcon.getIconName();
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/common/render/GT_MetaGenerated_Item_Renderer.java b/src/main/java/gregtech/common/render/GT_MetaGenerated_Item_Renderer.java
index 6e4aadc938..54eafccc3a 100644
--- a/src/main/java/gregtech/common/render/GT_MetaGenerated_Item_Renderer.java
+++ b/src/main/java/gregtech/common/render/GT_MetaGenerated_Item_Renderer.java
@@ -1,8 +1,10 @@
package gregtech.common.render;
+import gregtech.api.enums.ItemList;
import gregtech.api.interfaces.IIconContainer;
import gregtech.api.items.GT_MetaGenerated_Item;
import gregtech.api.util.GT_Utility;
+import gregtech.loaders.ExtraIcons;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemRenderer;
import net.minecraft.client.renderer.Tessellator;
@@ -15,13 +17,14 @@ import net.minecraftforge.client.MinecraftForgeClient;
import net.minecraftforge.fluids.FluidStack;
import org.lwjgl.opengl.GL11;
-import java.util.Iterator;
+import javax.annotation.Nullable;
+
+import static gregtech.api.enums.ItemList.*;
public class GT_MetaGenerated_Item_Renderer implements IItemRenderer {
public GT_MetaGenerated_Item_Renderer() {
- GT_MetaGenerated_Item tItem;
- for (Iterator i$ = GT_MetaGenerated_Item.sInstances.values().iterator(); i$.hasNext(); MinecraftForgeClient.registerItemRenderer(tItem, this)) {
- tItem = (GT_MetaGenerated_Item) i$.next();
+ for (GT_MetaGenerated_Item item : GT_MetaGenerated_Item.sInstances.values()) {
+ MinecraftForgeClient.registerItemRenderer(item, this);
}
}
@@ -53,7 +56,7 @@ public class GT_MetaGenerated_Item_Renderer implements IItemRenderer {
GT_MetaGenerated_Item aItem = (GT_MetaGenerated_Item) aStack.getItem();
- GL11.glEnable(3042);
+ GL11.glEnable(GL11.GL_BLEND);
if (type == IItemRenderer.ItemRenderType.ENTITY) {
if (RenderItem.renderInFrame) {
GL11.glScalef(0.85F, 0.85F, 0.85F);
@@ -67,7 +70,7 @@ public class GT_MetaGenerated_Item_Renderer implements IItemRenderer {
if (aMetaData < aItem.mOffset) {
IIconContainer aIcon = aItem.getIconContainer(aMetaData);
IIcon tOverlay = null;
- IIcon tFluidIcon = null;
+ IIcon fluidIcon = null;
IIcon tIcon;
if (aIcon == null) {
tIcon = aStack.getIconIndex();
@@ -79,12 +82,12 @@ public class GT_MetaGenerated_Item_Renderer implements IItemRenderer {
return;
}
FluidStack tFluid = GT_Utility.getFluidForFilledItem(aStack, true);
- if ((tOverlay != null) && (tFluid != null) && (tFluid.getFluid() != null)) {
- tFluidIcon = tFluid.getFluid().getIcon(tFluid);
+ if (tOverlay != null && tFluid != null && tFluid.getFluid() != null) {
+ fluidIcon = tFluid.getFluid().getIcon(tFluid);
}
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture);
- GL11.glBlendFunc(770, 771);
- if (tFluidIcon == null) {
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ if (fluidIcon == null) {
short[] tModulation = aItem.getRGBa(aStack);
GL11.glColor3f(tModulation[0] / 255.0F, tModulation[1] / 255.0F, tModulation[2] / 255.0F);
}
@@ -93,24 +96,23 @@ public class GT_MetaGenerated_Item_Renderer implements IItemRenderer {
} else {
ItemRenderer.renderItemIn2D(Tessellator.instance, tIcon.getMaxU(), tIcon.getMinV(), tIcon.getMinU(), tIcon.getMaxV(), tIcon.getIconWidth(), tIcon.getIconHeight(), 0.0625F);
}
- if (tFluidIcon != null) {
- assert (tFluid != null);
+ if (fluidIcon != null) {
int tColor = tFluid.getFluid().getColor(tFluid);
GL11.glColor3f((tColor >> 16 & 0xFF) / 255.0F, (tColor >> 8 & 0xFF) / 255.0F, (tColor & 0xFF) / 255.0F);
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture);
- GL11.glBlendFunc(770, 771);
- GL11.glDepthFunc(514);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ GL11.glDepthFunc(GL11.GL_EQUAL);
if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
- GT_RenderUtil.renderItemIcon(tFluidIcon, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F);
+ GT_RenderUtil.renderItemIcon(fluidIcon, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F);
} else {
- ItemRenderer.renderItemIn2D(Tessellator.instance, tFluidIcon.getMaxU(), tFluidIcon.getMinV(), tFluidIcon.getMinU(), tFluidIcon.getMaxV(), tFluidIcon.getIconWidth(), tFluidIcon.getIconHeight(), 0.0625F);
+ ItemRenderer.renderItemIn2D(Tessellator.instance, fluidIcon.getMaxU(), fluidIcon.getMinV(), fluidIcon.getMinU(), fluidIcon.getMaxV(), fluidIcon.getIconWidth(), fluidIcon.getIconHeight(), 0.0625F);
}
- GL11.glDepthFunc(515);
+ GL11.glDepthFunc(GL11.GL_LEQUAL);
}
GL11.glColor3f(1.0F, 1.0F, 1.0F);
if (tOverlay != null) {
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture);
- GL11.glBlendFunc(770, 771);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
GT_RenderUtil.renderItemIcon(tOverlay, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F);
} else {
@@ -120,19 +122,19 @@ public class GT_MetaGenerated_Item_Renderer implements IItemRenderer {
} else {
IIcon tIcon;
if (aItem.mIconList[(aMetaData - aItem.mOffset)].length > 1) {
- Long[] tStats = (Long[]) aItem.mElectricStats.get(Short.valueOf(aMetaData));
+ Long[] tStats = aItem.mElectricStats.get(aMetaData);
- if ((tStats != null) && (tStats[3].longValue() < 0L)) {
+ if ((tStats != null) && (tStats[3] < 0L)) {
long tCharge = aItem.getRealCharge(aStack);
if (tCharge <= 0L) {
tIcon = aItem.mIconList[(aMetaData - aItem.mOffset)][1];
} else {
- if (tCharge >= tStats[0].longValue()) {
+ if (tCharge >= tStats[0]) {
tIcon = aItem.mIconList[(aMetaData - aItem.mOffset)][8];
} else {
- tIcon = aItem.mIconList[(aMetaData - aItem.mOffset)][(7 - (int) java.lang.Math.max(0L, java.lang.Math.min(5L, (tStats[0].longValue() - tCharge) * 6L / tStats[0].longValue())))];
+ tIcon = aItem.mIconList[(aMetaData - aItem.mOffset)][(7 - (int) Math.max(0L, Math.min(5L, (tStats[0] - tCharge) * 6L / tStats[0])))];
}
}
} else {
@@ -141,14 +143,84 @@ public class GT_MetaGenerated_Item_Renderer implements IItemRenderer {
} else {
tIcon = aItem.mIconList[(aMetaData - aItem.mOffset)][0];
}
+
+ ItemList largeFluidCell = getLargeFluidCell(aStack);
+ if (largeFluidCell != null) {
+ renderLargeFluidCellExtraParts(type, largeFluidCell, aStack);
+ }
+
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture);
- GL11.glBlendFunc(770, 771);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
GT_RenderUtil.renderItemIcon(tIcon, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F);
} else {
ItemRenderer.renderItemIn2D(Tessellator.instance, tIcon.getMaxU(), tIcon.getMinV(), tIcon.getMinU(), tIcon.getMaxV(), tIcon.getIconWidth(), tIcon.getIconHeight(), 0.0625F);
}
}
- GL11.glDisable(3042);
+ GL11.glDisable(GL11.GL_BLEND);
+ }
+
+ @Nullable
+ private static ItemList getLargeFluidCell(ItemStack stack) {
+ if (isSame(Large_Fluid_Cell_Steel, stack)) return Large_Fluid_Cell_Steel;
+ if (isSame(Large_Fluid_Cell_Aluminium, stack)) return Large_Fluid_Cell_Aluminium;
+ if (isSame(Large_Fluid_Cell_TungstenSteel, stack)) return Large_Fluid_Cell_TungstenSteel;
+ if (isSame(Large_Fluid_Cell_StainlessSteel, stack)) return Large_Fluid_Cell_StainlessSteel;
+ if (isSame(Large_Fluid_Cell_Titanium, stack)) return Large_Fluid_Cell_Titanium;
+ if (isSame(Large_Fluid_Cell_Chrome, stack)) return Large_Fluid_Cell_Chrome;
+ if (isSame(Large_Fluid_Cell_Iridium, stack)) return Large_Fluid_Cell_Iridium;
+ if (isSame(Large_Fluid_Cell_Osmium, stack)) return Large_Fluid_Cell_Osmium;
+ if (isSame(Large_Fluid_Cell_Neutronium, stack)) return Large_Fluid_Cell_Neutronium;
+
+ return null;
+ }
+
+ private static void renderLargeFluidCellExtraParts(IItemRenderer.ItemRenderType type, ItemList item, ItemStack stack) {
+
+ IIcon inner;
+ if (item == Large_Fluid_Cell_Steel) inner = ExtraIcons.steelLargeCellInner;
+ else if (item == Large_Fluid_Cell_Aluminium) inner = ExtraIcons.aluminiumLargeCellInner;
+ else if (item == Large_Fluid_Cell_StainlessSteel) inner = ExtraIcons.stainlesssteelLargeCellInner;
+ else if (item == Large_Fluid_Cell_Titanium) inner = ExtraIcons.titaniumLargeCellInner;
+ else if (item == Large_Fluid_Cell_TungstenSteel) inner = ExtraIcons.tungstensteelLargeCellInner;
+ else if (item == Large_Fluid_Cell_Iridium) inner = ExtraIcons.iridiumLargeCellInner;
+ else if (item == Large_Fluid_Cell_Osmium) inner = ExtraIcons.osmiumLargeCellInner;
+ else if (item == Large_Fluid_Cell_Chrome) inner = ExtraIcons.chromiumLargeCellInner;
+ else inner = ExtraIcons.neutroniumLargeCellInner;
+
+ // Empty inner side
+ Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture);
+ if (type.equals(ItemRenderType.INVENTORY)) {
+ GT_RenderUtil.renderItemIcon(inner, 16.0D, -0.001D, 0.0F, 0.0F, -1.0F);
+ } else {
+ ItemRenderer.renderItemIn2D(Tessellator.instance, inner.getMaxU(), inner.getMinV(), inner.getMinU(), inner.getMaxV(), inner.getIconWidth(), inner.getIconHeight(), 0.0625F);
+ }
+
+ FluidStack fluidStack = GT_Utility.getFluidForFilledItem(stack, true);
+
+ if (fluidStack != null && fluidStack.getFluid() != null) {
+ IIcon fluidIcon = fluidStack.getFluid().getIcon(fluidStack);
+ int fluidColor = fluidStack.getFluid().getColor(fluidStack);
+
+ Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ GL11.glDepthFunc(GL11.GL_EQUAL);
+ GL11.glColor3ub((byte) (fluidColor >> 16), (byte) (fluidColor >> 8), (byte) fluidColor);
+ if (type.equals(ItemRenderType.INVENTORY)) {
+ GT_RenderUtil.renderItemIcon(fluidIcon, 16.0D, -0.001D, 0.0F, 0.0F, -1.0F);
+ } else {
+ ItemRenderer.renderItemIn2D(Tessellator.instance, fluidIcon.getMaxU(), fluidIcon.getMinV(), fluidIcon.getMinU(), fluidIcon.getMaxV(), fluidIcon.getIconWidth(), fluidIcon.getIconHeight(), 0.0625F);
+ }
+
+ GL11.glColor3ub((byte) -1, (byte) -1, (byte) -1);
+ GL11.glDepthFunc(GL11.GL_LEQUAL);
+ }
+ }
+
+ private static boolean isSame(ItemList item, ItemStack stack) {
+ ItemStack internal = item.getInternalStack_unsafe();
+ if (GT_Utility.isStackInvalid(internal)) return false;
+
+ return internal.getItem() == stack.getItem() && internal.getItemDamage() == stack.getItemDamage();
}
}
diff --git a/src/main/java/gregtech/common/render/GT_RenderedGlowTexture.java b/src/main/java/gregtech/common/render/GT_RenderedGlowTexture.java
deleted file mode 100644
index 899e4d7c5d..0000000000
--- a/src/main/java/gregtech/common/render/GT_RenderedGlowTexture.java
+++ /dev/null
@@ -1,213 +0,0 @@
-package gregtech.common.render;
-
-import gregtech.GT_Mod;
-import gregtech.api.enums.Textures.BlockIcons;
-import gregtech.api.interfaces.IColorModulationContainer;
-import gregtech.api.interfaces.IIconContainer;
-import gregtech.api.interfaces.ITexture;
-import net.minecraft.block.Block;
-import net.minecraft.client.renderer.RenderBlocks;
-import net.minecraft.client.renderer.Tessellator;
-import net.minecraft.util.IIcon;
-
-import static gregtech.api.util.LightingHelper.MAX_BRIGHTNESS;
-
-/**
- * This {@link ITexture} implementation renders texture with max brightness to glow in the dark.
- */
-
-class GT_RenderedGlowTexture implements ITexture, IColorModulationContainer {
- protected final IIconContainer mIconContainer;
- private final short[] mRGBa;
-
- GT_RenderedGlowTexture(IIconContainer aIcon, short[] aRGBa, boolean allowAlpha) {
- if (aRGBa.length != 4) throw new IllegalArgumentException("RGBa doesn't have 4 Values @ GT_RenderedTexture");
- mIconContainer = GT_Mod.gregtechproxy.mRenderGlowTextures ? aIcon : BlockIcons.VOID;
- mRGBa = aRGBa;
- }
-
- @Override
- public short[] getRGBA() {
- return mRGBa;
- }
-
- @Override
- public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
- if (aRenderer.useInventoryTint) return; // TODO: Remove this once all addons have migrated to the new Texture API
- if (!GT_Mod.gregtechproxy.mRenderGlowTextures) return;
- final boolean enableAO = aRenderer.enableAO;
- aRenderer.enableAO = false;
- // TODO: Uncomment this once all addons have migrated to the new Texture API
- //startDrawingQuads(aRenderer, -1.0f, 0.0f, 0.0f);
- Tessellator.instance.setBrightness(MAX_BRIGHTNESS);
- Tessellator.instance.setColorOpaque(mRGBa[0], mRGBa[1], mRGBa[2]);
- aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, mIconContainer.getIcon());
- if (mIconContainer.getOverlayIcon() != null) {
- Tessellator.instance.setColorOpaque(255, 255, 255);
- aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
- }
- // TODO: Uncomment this once all addons have migrated to the new Texture API
- //draw(aRenderer);
- aRenderer.enableAO = enableAO;
- }
-
- @Override
- public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
- if (aRenderer.useInventoryTint) return; // TODO: Remove this once all addons have migrated to the new Texture API
- if (!GT_Mod.gregtechproxy.mRenderGlowTextures) return;
- aRenderer.field_152631_f = true;
- final boolean enableAO = aRenderer.enableAO;
- aRenderer.enableAO = false;
- // TODO: Uncomment this once all addons have migrated to the new Texture API
- //startDrawingQuads(aRenderer, 1.0f, 0.0f, 0.0f);
- Tessellator.instance.setBrightness(MAX_BRIGHTNESS);
- Tessellator.instance.setColorOpaque(mRGBa[0], mRGBa[1], mRGBa[2]);
- aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, mIconContainer.getIcon());
- if (mIconContainer.getOverlayIcon() != null) {
- Tessellator.instance.setColorOpaque(255, 255, 255);
- aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
- }
- // TODO: Uncomment this once all addons have migrated to the new Texture API
- //draw(aRenderer);
- aRenderer.field_152631_f = false;
- aRenderer.enableAO = enableAO;
- }
-
- @Override
- public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
- if (aRenderer.useInventoryTint) return; // TODO: Remove this once all addons have migrated to the new Texture API
- if (!GT_Mod.gregtechproxy.mRenderGlowTextures) return;
- final boolean enableAO = aRenderer.enableAO;
- // TODO: Uncomment this once all addons have migrated to the new Texture API
- //startDrawingQuads(aRenderer, 0.0f, -1.0f, 0.0f);
- final Tessellator tessellator = Tessellator.instance;
- IIcon aIcon = mIconContainer.getIcon();
-
- float minU = aIcon.getInterpolatedU((1.0D - aRenderer.renderMaxX) * 16.0D);
- float maxU = aIcon.getInterpolatedU((1.0D - aRenderer.renderMinX) * 16.0D);
- float minV = aIcon.getInterpolatedV(aRenderer.renderMinZ * 16.0D);
- float maxV = aIcon.getInterpolatedV(aRenderer.renderMaxZ * 16.0D);
-
- if (aRenderer.renderMinX < 0.0D || aRenderer.renderMaxX > 1.0D) {
- minU = 16.0F - aIcon.getMaxU();
- maxU = 16.0F - aIcon.getMinU();
- }
-
- if (aRenderer.renderMinZ < 0.0D || aRenderer.renderMaxZ > 1.0D) {
- minV = aIcon.getMinV();
- maxV = aIcon.getMaxV();
- }
-
- double minX = aX + aRenderer.renderMinX;
- double maxX = aX + aRenderer.renderMaxX;
- double minY = aY + aRenderer.renderMinY;
- double minZ = aZ + aRenderer.renderMinZ;
- double maxZ = aZ + aRenderer.renderMaxZ;
-
- Tessellator.instance.setBrightness(MAX_BRIGHTNESS);
- Tessellator.instance.setColorOpaque(mRGBa[0], mRGBa[1], mRGBa[2]);
-
- tessellator.addVertexWithUV(minX, minY, maxZ, maxU, maxV);
- tessellator.addVertexWithUV(minX, minY, minZ, maxU, minV);
- tessellator.addVertexWithUV(maxX, minY, minZ, minU, minV);
- tessellator.addVertexWithUV(maxX, minY, maxZ, minU, maxV);
-
- if (mIconContainer.getOverlayIcon() != null) {
- minU = aIcon.getInterpolatedU((1.0D - aRenderer.renderMaxX) * 16.0D);
- maxU = aIcon.getInterpolatedU((1.0D - aRenderer.renderMinX) * 16.0D);
- minV = aIcon.getInterpolatedV(aRenderer.renderMinZ * 16.0D);
- maxV = aIcon.getInterpolatedV(aRenderer.renderMaxZ * 16.0D);
-
- if (aRenderer.renderMinX < 0.0D || aRenderer.renderMaxX > 1.0D) {
- minU = 16.0F - aIcon.getMaxU();
- maxU = 16.0F - aIcon.getMinU();
- }
-
- if (aRenderer.renderMinZ < 0.0D || aRenderer.renderMaxZ > 1.0D) {
- minV = aIcon.getMinV();
- maxV = aIcon.getMaxV();
- }
-
- minX = aX + (float) aRenderer.renderMinX;
- maxX = aX + (float) aRenderer.renderMaxX;
- minY = aY + (float) aRenderer.renderMinY;
- minZ = aZ + (float) aRenderer.renderMinZ;
- maxZ = aZ + (float) aRenderer.renderMaxZ;
-
- Tessellator.instance.setColorOpaque(255, 255, 255);
- tessellator.addVertexWithUV(minX, minY, maxZ, maxU, maxV);
- tessellator.addVertexWithUV(minX, minY, minZ, maxU, minV);
- tessellator.addVertexWithUV(maxX, minY, minZ, minU, minV);
- tessellator.addVertexWithUV(maxX, minY, maxZ, minU, maxV);
- }
- // TODO: Uncomment this once all addons have migrated to the new Texture API
- //draw(aRenderer);
- aRenderer.enableAO = enableAO;
- }
-
- @Override
- public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
- if (aRenderer.useInventoryTint) return; // TODO: Remove this once all addons have migrated to the new Texture API
- if (!GT_Mod.gregtechproxy.mRenderGlowTextures) return;
- final boolean enableAO = aRenderer.enableAO;
- aRenderer.enableAO = false;
- // TODO: Uncomment this once all addons have migrated to the new Texture API
- //startDrawingQuads(aRenderer, 0.0f, 1.0f, 0.0f);
- Tessellator.instance.setBrightness(MAX_BRIGHTNESS);
- Tessellator.instance.setColorOpaque(mRGBa[0], mRGBa[1], mRGBa[2]);
- aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, mIconContainer.getIcon());
- if (mIconContainer.getOverlayIcon() != null) {
- Tessellator.instance.setColorOpaque(255, 255, 255);
- aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
- }
- // TODO: Uncomment this once all addons have migrated to the new Texture API
- //draw(aRenderer);
- aRenderer.enableAO = enableAO;
- }
-
- @Override
- public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
- if (aRenderer.useInventoryTint) return; // TODO: Remove this once all addons have migrated to the new Texture API
- if (!GT_Mod.gregtechproxy.mRenderGlowTextures) return;
- final boolean enableAO = aRenderer.enableAO;
- aRenderer.enableAO = false;
- aRenderer.field_152631_f = true;
- // TODO: Uncomment this once all addons have migrated to the new Texture API
- //startDrawingQuads(aRenderer, 0.0f, 0.0f, -1.0f);
- Tessellator.instance.setBrightness(MAX_BRIGHTNESS);
- Tessellator.instance.setColorOpaque(mRGBa[0], mRGBa[1], mRGBa[2]);
- aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, mIconContainer.getIcon());
- if (mIconContainer.getOverlayIcon() != null) {
- Tessellator.instance.setColorOpaque(255, 255, 255);
- aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
- }
- // TODO: Uncomment this once all addons have migrated to the new Texture API
- //draw(aRenderer);
- aRenderer.field_152631_f = false;
- aRenderer.enableAO = enableAO;
- }
-
- @Override
- public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
- if (aRenderer.useInventoryTint) return; // TODO: Remove this once all addons have migrated to the new Texture API
- if (!GT_Mod.gregtechproxy.mRenderGlowTextures) return;
- final boolean enableAO = aRenderer.enableAO;
- aRenderer.enableAO = false;
- // TODO: Uncomment this once all addons have migrated to the new Texture API
- //startDrawingQuads(aRenderer, 0.0f, 0.0f, 1.0f);
- Tessellator.instance.setBrightness(MAX_BRIGHTNESS);
- Tessellator.instance.setColorOpaque(mRGBa[0], mRGBa[1], mRGBa[2]);
- aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, mIconContainer.getIcon());
- if (mIconContainer.getOverlayIcon() != null) {
- aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
- }
- // TODO: Uncomment this once all addons have migrated to the new Texture API
- //draw(aRenderer);
- aRenderer.enableAO = enableAO;
- }
-
- @Override
- public boolean isValidTexture() {
- return mIconContainer != null;
- }
-}
diff --git a/src/main/java/gregtech/common/render/GT_RenderedTexture.java b/src/main/java/gregtech/common/render/GT_RenderedTexture.java
index 9e76634385..08ce2125f2 100644
--- a/src/main/java/gregtech/common/render/GT_RenderedTexture.java
+++ b/src/main/java/gregtech/common/render/GT_RenderedTexture.java
@@ -1,55 +1,93 @@
package gregtech.common.render;
+import com.gtnewhorizon.structurelib.alignment.IAlignmentProvider;
+import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing;
+import com.gtnewhorizon.structurelib.alignment.enumerable.Flip;
+import com.gtnewhorizon.structurelib.alignment.enumerable.Rotation;
+import gregtech.GT_Mod;
import gregtech.api.interfaces.IColorModulationContainer;
import gregtech.api.interfaces.IIconContainer;
import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.util.LightingHelper;
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.entity.player.EntityPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
+import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
+import static gregtech.api.util.LightingHelper.MAX_BRIGHTNESS;
+
class GT_RenderedTexture implements ITexture, IColorModulationContainer {
protected final IIconContainer mIconContainer;
private final short[] mRGBa;
+ private final boolean glow;
+ private final boolean stdOrient;
+ private final boolean useExtFacing;
- GT_RenderedTexture(IIconContainer aIcon, short[] aRGBa, boolean allowAlpha) {
+ GT_RenderedTexture(IIconContainer aIcon, short[] aRGBa, boolean allowAlpha, boolean glow, boolean stdOrient, boolean extFacing) {
if (aRGBa.length != 4) throw new IllegalArgumentException("RGBa doesn't have 4 Values @ GT_RenderedTexture");
mIconContainer = aIcon;
mRGBa = aRGBa;
+ this.glow = glow;
+ this.stdOrient = stdOrient;
+ this.useExtFacing = extFacing;
}
@Override
public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
- aRenderer.field_152631_f = true;
// TODO: Uncomment this once all addons have migrated to the new Texture API
//startDrawingQuads(aRenderer, 1.0f, 0.0f, 0.0f);
+ final boolean enableAO = aRenderer.enableAO;
LightingHelper lighting = new LightingHelper(aRenderer);
- lighting.setupLightingXPos(aBlock, aX, aY, aZ)
- .setupColor(ForgeDirection.EAST.ordinal(), mRGBa);
- aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, mIconContainer.getIcon());
+ if (glow) {
+ if (aRenderer.useInventoryTint)
+ return; // TODO: Remove this once all addons have migrated to the new Texture API
+ if (!GT_Mod.gregtechproxy.mRenderGlowTextures) return;
+ aRenderer.enableAO = false;
+ lighting.setLightnessOverride(1.0F);
+ if (enableAO) lighting.setBrightnessOverride(MAX_BRIGHTNESS);
+ }
+ lighting.setupLightingXPos(aBlock, aX, aY, aZ).setupColor(ForgeDirection.EAST.ordinal(), mRGBa);
+ ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ);
+ renderFaceXPos(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation);
if (mIconContainer.getOverlayIcon() != null) {
lighting.setupColor(ForgeDirection.EAST.ordinal(), 0xffffff);
- aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
+ renderFaceXPos(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation);
}
+ aRenderer.enableAO = enableAO;
// TODO: Uncomment this once all addons have migrated to the new Texture API
//draw(aRenderer);
- aRenderer.field_152631_f = false;
}
@Override
public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
// TODO: Uncomment this once all addons have migrated to the new Texture API
//startDrawingQuads(aRenderer, -1.0f, 0.0f, 0.0f);
+ final boolean enableAO = aRenderer.enableAO;
LightingHelper lighting = new LightingHelper(aRenderer);
- lighting.setupLightingXNeg(aBlock, aX, aY, aZ)
- .setupColor(ForgeDirection.WEST.ordinal(), mRGBa);
- aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, mIconContainer.getIcon());
+ if (glow) {
+ if (aRenderer.useInventoryTint)
+ return; // TODO: Remove this once all addons have migrated to the new Texture API
+ if (!GT_Mod.gregtechproxy.mRenderGlowTextures) return;
+ aRenderer.enableAO = false;
+ lighting.setLightnessOverride(1.0F);
+ if (enableAO) lighting.setBrightnessOverride(MAX_BRIGHTNESS);
+ }
+ lighting.setupLightingXNeg(aBlock, aX, aY, aZ).setupColor(ForgeDirection.WEST.ordinal(), mRGBa);
+ ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ);
+ renderFaceXNeg(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation);
if (mIconContainer.getOverlayIcon() != null) {
lighting.setupColor(ForgeDirection.WEST.ordinal(), 0xffffff);
- aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
+ renderFaceXNeg(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation);
}
+ aRenderer.enableAO = enableAO;
// TODO: Uncomment this once all addons have migrated to the new Texture API
//draw(aRenderer);
}
@@ -58,14 +96,24 @@ class GT_RenderedTexture implements ITexture, IColorModulationContainer {
public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
// TODO: Uncomment this once all addons have migrated to the new Texture API
//startDrawingQuads(aRenderer, 0.0f, 1.0f, 0.0f);
+ final boolean enableAO = aRenderer.enableAO;
LightingHelper lighting = new LightingHelper(aRenderer);
- lighting.setupLightingYPos(aBlock, aX, aY, aZ)
- .setupColor(ForgeDirection.UP.ordinal(), mRGBa);
- aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, mIconContainer.getIcon());
+ if (glow) {
+ if (aRenderer.useInventoryTint)
+ return; // TODO: Remove this once all addons have migrated to the new Texture API
+ if (!GT_Mod.gregtechproxy.mRenderGlowTextures) return;
+ aRenderer.enableAO = false;
+ lighting.setLightnessOverride(1.0F);
+ if (enableAO) lighting.setBrightnessOverride(MAX_BRIGHTNESS);
+ }
+ lighting.setupLightingYPos(aBlock, aX, aY, aZ).setupColor(ForgeDirection.UP.ordinal(), mRGBa);
+ ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ);
+ renderFaceYPos(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation);
if (mIconContainer.getOverlayIcon() != null) {
lighting.setupColor(ForgeDirection.UP.ordinal(), 0xffffff);
- aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
+ renderFaceYPos(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation);
}
+ aRenderer.enableAO = enableAO;
// TODO: Uncomment this once all addons have migrated to the new Texture API
//draw(aRenderer);
}
@@ -74,96 +122,24 @@ class GT_RenderedTexture implements ITexture, IColorModulationContainer {
public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
// TODO: Uncomment this once all addons have migrated to the new Texture API
//startDrawingQuads(aRenderer, 0.0f, -1.0f, 0.0f);
- final Tessellator tessellator = Tessellator.instance;
- IIcon aIcon = mIconContainer.getIcon();
-
- float minU = aIcon.getInterpolatedU((1.0D - aRenderer.renderMaxX) * 16.0D);
- float maxU = aIcon.getInterpolatedU((1.0D - aRenderer.renderMinX) * 16.0D);
- float minV = aIcon.getInterpolatedV(aRenderer.renderMinZ * 16.0D);
- float maxV = aIcon.getInterpolatedV(aRenderer.renderMaxZ * 16.0D);
-
- if (aRenderer.renderMinX < 0.0D || aRenderer.renderMaxX > 1.0D) {
- minU = 16.0F - aIcon.getMaxU();
- maxU = 16.0F - aIcon.getMinU();
- }
-
- if (aRenderer.renderMinZ < 0.0D || aRenderer.renderMaxZ > 1.0D) {
- minV = aIcon.getMinV();
- maxV = aIcon.getMaxV();
- }
-
- double minX = aX + aRenderer.renderMinX;
- double maxX = aX + aRenderer.renderMaxX;
- double minY = aY + aRenderer.renderMinY;
- double minZ = aZ + aRenderer.renderMinZ;
- double maxZ = aZ + aRenderer.renderMaxZ;
-
+ final boolean enableAO = aRenderer.enableAO;
LightingHelper lighting = new LightingHelper(aRenderer);
- lighting.setupLightingYNeg(aBlock, aX, aY, aZ)
- .setupColor(ForgeDirection.DOWN.ordinal(), mRGBa);
-
- if (aRenderer.enableAO) {
- tessellator.setColorOpaque_F(aRenderer.colorRedTopLeft, aRenderer.colorGreenTopLeft, aRenderer.colorBlueTopLeft);
- tessellator.setBrightness(aRenderer.brightnessTopLeft);
- tessellator.addVertexWithUV(minX, minY, maxZ, maxU, maxV);
- tessellator.setColorOpaque_F(aRenderer.colorRedBottomLeft, aRenderer.colorGreenBottomLeft, aRenderer.colorBlueBottomLeft);
- tessellator.setBrightness(aRenderer.brightnessBottomLeft);
- tessellator.addVertexWithUV(minX, minY, minZ, maxU, minV);
- tessellator.setColorOpaque_F(aRenderer.colorRedBottomRight, aRenderer.colorGreenBottomRight, aRenderer.colorBlueBottomRight);
- tessellator.setBrightness(aRenderer.brightnessBottomRight);
- tessellator.addVertexWithUV(maxX, minY, minZ, minU, minV);
- tessellator.setColorOpaque_F(aRenderer.colorRedTopRight, aRenderer.colorGreenTopRight, aRenderer.colorBlueTopRight);
- tessellator.setBrightness(aRenderer.brightnessTopRight);
- } else {
- tessellator.addVertexWithUV(minX, minY, maxZ, maxU, maxV);
- tessellator.addVertexWithUV(minX, minY, minZ, maxU, minV);
- tessellator.addVertexWithUV(maxX, minY, minZ, minU, minV);
- }
- tessellator.addVertexWithUV(maxX, minY, maxZ, minU, maxV);
-
+ if (glow) {
+ if (aRenderer.useInventoryTint)
+ return; // TODO: Remove this once all addons have migrated to the new Texture API
+ if (!GT_Mod.gregtechproxy.mRenderGlowTextures) return;
+ aRenderer.enableAO = false;
+ lighting.setLightnessOverride(1.0F);
+ if (enableAO) lighting.setBrightnessOverride(MAX_BRIGHTNESS);
+ }
+ lighting.setupLightingYNeg(aBlock, aX, aY, aZ).setupColor(ForgeDirection.DOWN.ordinal(), mRGBa);
+ ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ);
+ renderFaceYNeg(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation);
if (mIconContainer.getOverlayIcon() != null) {
- minU = aIcon.getInterpolatedU((1.0D - aRenderer.renderMaxX) * 16.0D);
- maxU = aIcon.getInterpolatedU((1.0D - aRenderer.renderMinX) * 16.0D);
- minV = aIcon.getInterpolatedV(aRenderer.renderMinZ * 16.0D);
- maxV = aIcon.getInterpolatedV(aRenderer.renderMaxZ * 16.0D);
-
- if (aRenderer.renderMinX < 0.0D || aRenderer.renderMaxX > 1.0D) {
- minU = 16.0F - aIcon.getMaxU();
- maxU = 16.0F - aIcon.getMinU();
- }
-
- if (aRenderer.renderMinZ < 0.0D || aRenderer.renderMaxZ > 1.0D) {
- minV = aIcon.getMinV();
- maxV = aIcon.getMaxV();
- }
-
- minX = aX + (float)aRenderer.renderMinX;
- maxX = aX + (float)aRenderer.renderMaxX;
- minY = aY + (float)aRenderer.renderMinY;
- minZ = aZ + (float)aRenderer.renderMinZ;
- maxZ = aZ + (float)aRenderer.renderMaxZ;
-
- lighting.setupColor(ForgeDirection.DOWN.ordinal(), 0xffffff);
-
- if (aRenderer.enableAO) {
- tessellator.setColorOpaque_F(aRenderer.colorRedTopLeft, aRenderer.colorGreenTopLeft, aRenderer.colorBlueTopLeft);
- tessellator.setBrightness(aRenderer.brightnessTopLeft);
- tessellator.addVertexWithUV(minX, minY, maxZ, maxU, maxV);
- tessellator.setColorOpaque_F(aRenderer.colorRedBottomLeft, aRenderer.colorGreenBottomLeft, aRenderer.colorBlueBottomLeft);
- tessellator.setBrightness(aRenderer.brightnessBottomLeft);
- tessellator.addVertexWithUV(minX, minY, minZ, maxU, minV);
- tessellator.setColorOpaque_F(aRenderer.colorRedBottomRight, aRenderer.colorGreenBottomRight, aRenderer.colorBlueBottomRight);
- tessellator.setBrightness(aRenderer.brightnessBottomRight);
- tessellator.addVertexWithUV(maxX, minY, minZ, minU, minV);
- tessellator.setColorOpaque_F(aRenderer.colorRedTopRight, aRenderer.colorGreenTopRight, aRenderer.colorBlueTopRight);
- tessellator.setBrightness(aRenderer.brightnessTopRight);
- } else {
- tessellator.addVertexWithUV(minX, minY, maxZ, maxU, maxV);
- tessellator.addVertexWithUV(minX, minY, minZ, maxU, minV);
- tessellator.addVertexWithUV(maxX, minY, minZ, minU, minV);
- }
- tessellator.addVertexWithUV(maxX, minY, maxZ, minU, maxV);
+ Tessellator.instance.setColorRGBA(255, 255, 255, 255);
+ renderFaceYNeg(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation);
}
+ aRenderer.enableAO = enableAO;
// TODO: Uncomment this once all addons have migrated to the new Texture API
//draw(aRenderer);
}
@@ -172,14 +148,24 @@ class GT_RenderedTexture implements ITexture, IColorModulationContainer {
public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
// TODO: Uncomment this once all addons have migrated to the new Texture API
//startDrawingQuads(aRenderer, 0.0f, 0.0f, 1.0f);
+ final boolean enableAO = aRenderer.enableAO;
LightingHelper lighting = new LightingHelper(aRenderer);
- lighting.setupLightingZPos(aBlock, aX, aY, aZ)
- .setupColor(ForgeDirection.SOUTH.ordinal(), mRGBa);
- aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, mIconContainer.getIcon());
+ if (glow) {
+ if (aRenderer.useInventoryTint)
+ return; // TODO: Remove this once all addons have migrated to the new Texture API
+ if (!GT_Mod.gregtechproxy.mRenderGlowTextures) return;
+ aRenderer.enableAO = false;
+ lighting.setLightnessOverride(1.0F);
+ if (enableAO) lighting.setBrightnessOverride(MAX_BRIGHTNESS);
+ }
+ lighting.setupLightingZPos(aBlock, aX, aY, aZ).setupColor(ForgeDirection.SOUTH.ordinal(), mRGBa);
+ ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ);
+ renderFaceZPos(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation);
if (mIconContainer.getOverlayIcon() != null) {
lighting.setupColor(ForgeDirection.SOUTH.ordinal(), 0xffffff);
- aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
+ renderFaceZPos(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation);
}
+ aRenderer.enableAO = enableAO;
// TODO: Uncomment this once all addons have migrated to the new Texture API
//draw(aRenderer);
}
@@ -188,18 +174,26 @@ class GT_RenderedTexture implements ITexture, IColorModulationContainer {
public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
// TODO: Uncomment this once all addons have migrated to the new Texture API
//startDrawingQuads(aRenderer, 0.0f, 0.0f, -1.0f);
- aRenderer.field_152631_f = true;
+ final boolean enableAO = aRenderer.enableAO;
LightingHelper lighting = new LightingHelper(aRenderer);
- lighting.setupLightingZNeg(aBlock, aX, aY, aZ)
- .setupColor(ForgeDirection.NORTH.ordinal(), mRGBa);
- aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, mIconContainer.getIcon());
+ if (glow) {
+ if (aRenderer.useInventoryTint)
+ return; // TODO: Remove this once all addons have migrated to the new Texture API
+ if (!GT_Mod.gregtechproxy.mRenderGlowTextures) return;
+ aRenderer.enableAO = false;
+ lighting.setLightnessOverride(1.0F);
+ if (enableAO) lighting.setBrightnessOverride(MAX_BRIGHTNESS);
+ }
+ lighting.setupLightingZNeg(aBlock, aX, aY, aZ).setupColor(ForgeDirection.NORTH.ordinal(), mRGBa);
+ ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ);
+ renderFaceZNeg(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation);
if (mIconContainer.getOverlayIcon() != null) {
lighting.setupColor(ForgeDirection.NORTH.ordinal(), 0xffffff);
- aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
+ renderFaceZNeg(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation);
}
+ aRenderer.enableAO = enableAO;
// TODO: Uncomment this once all addons have migrated to the new Texture API
//draw(aRenderer);
- aRenderer.field_152631_f = false;
}
@Override
@@ -211,4 +205,178 @@ class GT_RenderedTexture implements ITexture, IColorModulationContainer {
public boolean isValidTexture() {
return mIconContainer != null;
}
+
+ /**
+ * Renders the given texture to the bottom face of the block. Args: block, x, y, z, texture
+ */
+ protected void renderFaceYNeg(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, ExtendedFacing extendedFacing) {
+
+ switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) {
+ case COUNTER_CLOCKWISE:
+ aRenderer.uvRotateBottom = 2;
+ break;
+ case CLOCKWISE:
+ aRenderer.uvRotateBottom = 1;
+ break;
+ case UPSIDE_DOWN:
+ aRenderer.uvRotateBottom = 3;
+ break;
+ default:
+ aRenderer.uvRotateBottom = 0;
+ break;
+ }
+
+ Flip aFlip = extendedFacing.getFlip();
+ aRenderer.renderFaceYNeg(Blocks.air, x, y, z, useExtFacing && GT_Mod.gregtechproxy.mRenderFlippedMachinesFlipped ? new GT_IconFlipped(icon, aFlip.isHorizontallyFlipped() ^ !stdOrient, aFlip.isVerticallyFliped()) : new GT_IconFlipped(icon, !stdOrient, false));
+ aRenderer.uvRotateBottom = 0;
+ }
+
+ /**
+ * Renders the given texture to the top face of the block. Args: block, x, y, z, texture
+ */
+ protected void renderFaceYPos(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, ExtendedFacing extendedFacing) {
+
+ switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) {
+ case COUNTER_CLOCKWISE:
+ aRenderer.uvRotateTop = 2;
+ break;
+ case CLOCKWISE:
+ aRenderer.uvRotateTop = 1;
+ break;
+ case UPSIDE_DOWN:
+ aRenderer.uvRotateTop = 3;
+ break;
+ default:
+ aRenderer.uvRotateTop = 0;
+ break;
+ }
+
+ Flip aFlip = extendedFacing.getFlip();
+ aRenderer.renderFaceYPos(Blocks.air, x, y, z, useExtFacing && GT_Mod.gregtechproxy.mRenderFlippedMachinesFlipped ? new GT_IconFlipped(icon, aFlip.isHorizontallyFlipped(), aFlip.isVerticallyFliped()) : icon);
+ aRenderer.uvRotateTop = 0;
+ }
+
+ /**
+ * Renders the given texture to the north (z-negative) face of the block. Args: block, x, y, z, texture
+ */
+ protected void renderFaceZNeg(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, ExtendedFacing extendedFacing) {
+ aRenderer.field_152631_f = true;
+ // **NOT A BUG**: aRenderer.uvRotateEast REALLY CONTROLS THE ROTATION OF THE NORTH SIDE
+ switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) {
+ case COUNTER_CLOCKWISE:
+ aRenderer.uvRotateEast = 2;
+ break;
+ case CLOCKWISE:
+ aRenderer.uvRotateEast = 1;
+ break;
+ case UPSIDE_DOWN:
+ aRenderer.uvRotateEast = 3;
+ break;
+ default:
+ aRenderer.uvRotateEast = 0;
+ break;
+ }
+
+ Flip aFlip = extendedFacing.getFlip();
+ aRenderer.renderFaceZNeg(Blocks.air, x, y, z, useExtFacing && GT_Mod.gregtechproxy.mRenderFlippedMachinesFlipped ? new GT_IconFlipped(icon, aFlip.isHorizontallyFlipped(), aFlip.isVerticallyFliped()) : icon);
+ aRenderer.uvRotateEast = 0;
+ aRenderer.field_152631_f = false;
+ }
+
+ /**
+ * Renders the given texture to the south (z-positive) face of the block. Args: block, x, y, z, texture
+ */
+ protected void renderFaceZPos(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, ExtendedFacing extendedFacing) {
+ // **NOT A BUG**: aRenderer.uvRotateWest REALLY CONTROLS THE ROTATION OF THE SOUTH SIDE
+ switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) {
+ case COUNTER_CLOCKWISE:
+ aRenderer.uvRotateWest = 2;
+ break;
+ case CLOCKWISE:
+ aRenderer.uvRotateWest = 1;
+ break;
+ case UPSIDE_DOWN:
+ aRenderer.uvRotateWest = 3;
+ break;
+ default:
+ aRenderer.uvRotateWest = 0;
+ break;
+ }
+
+ Flip aFlip = extendedFacing.getFlip();
+ aRenderer.renderFaceZPos(Blocks.air, x, y, z, useExtFacing && GT_Mod.gregtechproxy.mRenderFlippedMachinesFlipped ? new GT_IconFlipped(icon, aFlip.isHorizontallyFlipped(), aFlip.isVerticallyFliped()) : icon);
+ aRenderer.uvRotateWest = 0;
+ }
+
+ /**
+ * Renders the given texture to the west (x-negative) face of the block. Args: block, x, y, z, texture
+ */
+ protected void renderFaceXNeg(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, ExtendedFacing extendedFacing) {
+ // **NOT A BUG**: aRenderer.uvRotateNorth REALLY CONTROLS THE ROTATION OF THE WEST SIDE
+ switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) {
+ case COUNTER_CLOCKWISE:
+ aRenderer.uvRotateNorth = 2;
+ break;
+ case CLOCKWISE:
+ aRenderer.uvRotateNorth = 1;
+ break;
+ case UPSIDE_DOWN:
+ aRenderer.uvRotateNorth = 3;
+ break;
+ default:
+ aRenderer.uvRotateNorth = 0;
+ break;
+ }
+
+ Flip aFlip = extendedFacing.getFlip();
+ aRenderer.renderFaceXNeg(Blocks.air, x, y, z, useExtFacing && GT_Mod.gregtechproxy.mRenderFlippedMachinesFlipped ? new GT_IconFlipped(icon, aFlip.isHorizontallyFlipped(), aFlip.isVerticallyFliped()) : icon);
+ aRenderer.uvRotateNorth = 0;
+ }
+
+ /**
+ * Renders the given texture to the east (x-positive) face of the block. Args: block, x, y, z, texture
+ */
+ protected void renderFaceXPos(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, ExtendedFacing extendedFacing) {
+ aRenderer.field_152631_f = true;
+ // **NOT A BUG**: aRenderer.uvRotateSouth REALLY CONTROLS THE ROTATION OF THE EAST SIDE
+ switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) {
+ case COUNTER_CLOCKWISE:
+ aRenderer.uvRotateSouth = 2;
+ break;
+ case CLOCKWISE:
+ aRenderer.uvRotateSouth = 1;
+ break;
+ case UPSIDE_DOWN:
+ aRenderer.uvRotateSouth = 3;
+ break;
+ default:
+ aRenderer.uvRotateSouth = 0;
+ break;
+ }
+
+ Flip aFlip = extendedFacing.getFlip();
+ aRenderer.renderFaceXPos(Blocks.air, x, y, z, useExtFacing && GT_Mod.gregtechproxy.mRenderFlippedMachinesFlipped ? new GT_IconFlipped(icon, aFlip.isHorizontallyFlipped(), aFlip.isVerticallyFliped()) : icon);
+ aRenderer.uvRotateSouth = 0;
+ aRenderer.field_152631_f = false;
+ }
+
+ private ExtendedFacing getExtendedFacing(int x, int y, int z) {
+ if (stdOrient) return ExtendedFacing.DEFAULT;
+ EntityPlayer player = GT_Mod.gregtechproxy.getThePlayer();
+ if (player == null) return ExtendedFacing.DEFAULT;
+ World w = player.getEntityWorld();
+ if (w == null) return ExtendedFacing.DEFAULT;
+ TileEntity te = w.getTileEntity(x, y, z);
+ if (te instanceof IGregTechTileEntity) {
+ IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity();
+ if (meta instanceof IAlignmentProvider) {
+ return ((IAlignmentProvider) meta).getAlignment().getExtendedFacing();
+ } else if (meta != null) {
+ return ExtendedFacing.of(ForgeDirection.getOrientation(meta.getBaseMetaTileEntity().getFrontFacing()));
+ }
+ } else if (te instanceof IAlignmentProvider) {
+ return ((IAlignmentProvider) te).getAlignment().getExtendedFacing();
+ }
+ return ExtendedFacing.DEFAULT;
+ }
}
diff --git a/src/main/java/gregtech/common/render/GT_StdRenderedTexture.java b/src/main/java/gregtech/common/render/GT_StdRenderedTexture.java
deleted file mode 100644
index ba0f9d3a91..0000000000
--- a/src/main/java/gregtech/common/render/GT_StdRenderedTexture.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package gregtech.common.render;
-
-import gregtech.api.interfaces.IIconContainer;
-import gregtech.api.util.LightingHelper;
-import net.minecraft.block.Block;
-import net.minecraft.client.renderer.RenderBlocks;
-import net.minecraftforge.common.util.ForgeDirection;
-
-/**
- * This ITexture implementation extends the GT_RenderedTexture class
- * to render with bottom side flipped as with dumb blocks rendering.
- * It is used in Ore blocks rendering so they better blends with dumb block ores
- * from vanilla or other mods, when seen from bottom.
- */
-class GT_StdRenderedTexture extends GT_RenderedTexture{
-
- GT_StdRenderedTexture(IIconContainer aIcon, short[] aRGBa, boolean allowAlpha) {
- super(aIcon, aRGBa, allowAlpha);
- }
-
- @Override
- public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
- // TODO: Uncomment this once all addons have migrated to the new Texture API
- //startDrawingQuads(aRenderer, 0.0f, -1.0f, 0.0f);
- LightingHelper lighting = new LightingHelper(aRenderer);
- lighting.setupLightingYNeg(aBlock, aX, aY, aZ)
- .setupColor(ForgeDirection.DOWN.ordinal(), getRGBA());
- aRenderer.renderFaceYNeg(aBlock, aX, aY, aZ, mIconContainer.getIcon());
- if (mIconContainer.getOverlayIcon() != null) {
- lighting.setupColor(ForgeDirection.DOWN.ordinal(), 0xffffff);
- aRenderer.renderFaceYNeg(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon());
- }
- // TODO: Uncomment this once all addons have migrated to the new Texture API
- //draw(aRenderer);
- }
-}
diff --git a/src/main/java/gregtech/common/render/GT_TextureBuilder.java b/src/main/java/gregtech/common/render/GT_TextureBuilder.java
index 22446f99a5..82bce4c8c4 100644
--- a/src/main/java/gregtech/common/render/GT_TextureBuilder.java
+++ b/src/main/java/gregtech/common/render/GT_TextureBuilder.java
@@ -21,6 +21,7 @@ public class GT_TextureBuilder implements ITextureBuilder {
private short[] rgba;
private boolean allowAlpha;
private boolean stdOrient;
+ private boolean extFacing;
private boolean glow;
public GT_TextureBuilder() {
@@ -77,6 +78,12 @@ public class GT_TextureBuilder implements ITextureBuilder {
}
@Override
+ public ITextureBuilder extFacing() {
+ this.extFacing = true;
+ return this;
+ }
+
+ @Override
public ITextureBuilder glow() {
glow = true;
return this;
@@ -88,9 +95,7 @@ public class GT_TextureBuilder implements ITextureBuilder {
if (!textureLayers.isEmpty()) return new GT_MultiTexture(textureLayers.toArray(new ITexture[0]));
switch (iconContainerList.size()) {
case 1:
- if (stdOrient) return new GT_StdRenderedTexture(iconContainerList.get(0), rgba, allowAlpha);
- if (glow) return new GT_RenderedGlowTexture(iconContainerList.get(0), rgba, allowAlpha);
- return new GT_RenderedTexture(iconContainerList.get(0), rgba, allowAlpha);
+ return new GT_RenderedTexture(iconContainerList.get(0), rgba, allowAlpha, glow, stdOrient, extFacing);
case 6:
return new GT_SidedTexture(
iconContainerList.get(ForgeDirection.DOWN.ordinal()),