From 36f45528f2025e9e7f52fc806626034c45e3712d Mon Sep 17 00:00:00 2001 From: Dimach Date: Sun, 9 Dec 2018 18:39:06 +0300 Subject: cherry pick 0beea9037cd8ff7a899c14c53d6b9a381c22f42c Add volumetric flask. (#1500) --- .../gregtech/common/render/GT_FlaskRenderer.java | 89 ++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 src/main/java/gregtech/common/render/GT_FlaskRenderer.java (limited to 'src/main/java/gregtech/common/render') diff --git a/src/main/java/gregtech/common/render/GT_FlaskRenderer.java b/src/main/java/gregtech/common/render/GT_FlaskRenderer.java new file mode 100644 index 0000000000..8b1f505314 --- /dev/null +++ b/src/main/java/gregtech/common/render/GT_FlaskRenderer.java @@ -0,0 +1,89 @@ +package gregtech.common.render; + +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.ItemList; +import gregtech.common.items.GT_VolumetricFlask; +import ic2.core.util.DrawUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraftforge.client.IItemRenderer; +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 { + public GT_FlaskRenderer() { + MinecraftForgeClient.registerItemRenderer(ItemList.VOLUMETRIC_FLASK.getItem(), this); + } + + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + return type != ItemRenderType.FIRST_PERSON_MAP; + } + + + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, IItemRenderer.ItemRendererHelper helper) { + return type == ItemRenderType.ENTITY; + } + + 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); + 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); + GL11.glTranslated(-0.5D, -0.6D, 0.0D); + } else if (type.equals(ItemRenderType.EQUIPPED_FIRST_PERSON)) { + GL11.glTranslated(1.0D, 1.0D, 0.0D); + GL11.glRotated(180.0D, 0.0D, 0.0D, 1.0D); + } else if (type.equals(ItemRenderType.EQUIPPED)) { + GL11.glRotated(180.0D, 0.0D, 0.0D, 1.0D); + GL11.glTranslated(-1.0D, -1.0D, 0.0D); + } + + FluidStack fs = cell.getFluid(item); + if (fs != null) { + IIcon iconWindow = cell.iconWindow; + IIcon fluidicon = fs.getFluid().getIcon(fs); + int fluidColor = fs.getFluid().getColor(fs); + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); + GL11.glBlendFunc(0, 1); + if (type.equals(ItemRenderType.INVENTORY)) { + DrawUtil.renderIcon(iconWindow, 16.0D, 0.0D, 0.0F, 0.0F, -1.0F); + } else { + DrawUtil.renderIcon(iconWindow, 1.0D, -0.001D, 0.0F, 0.0F, 1.0F); + DrawUtil.renderIcon(iconWindow, 1.0D, -0.0615D, 0.0F, 0.0F, -1.0F); + } + + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture); + GL11.glBlendFunc(770, 771); + GL11.glDepthFunc(514); + 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); + } else { + DrawUtil.renderIcon(fluidicon, 1.0D, -0.001D, 0.0F, 0.0F, 1.0F); + DrawUtil.renderIcon(fluidicon, 1.0D, -0.0615D, 0.0F, 0.0F, -1.0F); + } + + GL11.glColor3ub((byte) -1, (byte) -1, (byte) -1); + GL11.glDepthFunc(515); + } + + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); + GL11.glBlendFunc(770, 771); + 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); + } +} \ No newline at end of file -- cgit From 10e4defbcee5e43be4cb3bac27fe640133e1689b Mon Sep 17 00:00:00 2001 From: moller21 <42100910+moller21@users.noreply.github.com> Date: Sun, 5 Apr 2020 21:55:24 +0200 Subject: Display fluid amount in the fluid display stack. --- src/main/java/gregtech/api/util/GT_Utility.java | 3 +- src/main/java/gregtech/common/GT_Client.java | 1 + .../render/GT_FluidDisplayStackRenderer.java | 112 +++++++++++++++++++++ 3 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java (limited to 'src/main/java/gregtech/common/render') diff --git a/src/main/java/gregtech/api/util/GT_Utility.java b/src/main/java/gregtech/api/util/GT_Utility.java index 9e0589c2cb..de053415e1 100644 --- a/src/main/java/gregtech/api/util/GT_Utility.java +++ b/src/main/java/gregtech/api/util/GT_Utility.java @@ -782,7 +782,8 @@ public class GT_Utility { } catch (Exception e) { System.err.println(e); } - ItemStack rStack = ItemList.Display_Fluid.getWithDamage(aUseStackSize ? aFluid.amount / 1000 : 1, tmp); + //ItemStack rStack = ItemList.Display_Fluid.getWithDamage(aUseStackSize ? aFluid.amount / 1000 : 1, tmp); + ItemStack rStack = ItemList.Display_Fluid.getWithDamage(1, tmp); NBTTagCompound tNBT = new NBTTagCompound(); tNBT.setLong("mFluidDisplayAmount", aFluid.amount); tNBT.setLong("mFluidDisplayHeat", aFluid.getFluid().getTemperature(aFluid)); diff --git a/src/main/java/gregtech/common/GT_Client.java b/src/main/java/gregtech/common/GT_Client.java index 1345042b45..99e035772d 100644 --- a/src/main/java/gregtech/common/GT_Client.java +++ b/src/main/java/gregtech/common/GT_Client.java @@ -309,6 +309,7 @@ public class GT_Client extends GT_Proxy new GT_Renderer_Entity_Arrow(GT_Entity_Arrow.class, "arrow"); new GT_Renderer_Entity_Arrow(GT_Entity_Arrow_Potion.class, "arrow_potions"); new GT_FlaskRenderer(); + new GT_FluidDisplayStackRenderer(); } public void onPostLoad() { diff --git a/src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java b/src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java new file mode 100644 index 0000000000..4085a24190 --- /dev/null +++ b/src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java @@ -0,0 +1,112 @@ +package gregtech.common.render; + +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.ItemList; +import gregtech.common.items.GT_FluidDisplayItem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.client.MinecraftForgeClient; +import org.lwjgl.opengl.GL11; + +@SideOnly(cpw.mods.fml.relauncher.Side.CLIENT) +public class GT_FluidDisplayStackRenderer implements IItemRenderer { + private static final float smallTextScale = 0.5f; + + public GT_FluidDisplayStackRenderer() { + MinecraftForgeClient.registerItemRenderer(ItemList.Display_Fluid.getItem(), this); + } + + @Override + public boolean handleRenderType (ItemStack item, ItemRenderType type) + { + if(!item.hasTagCompound()) + return false; + return type == ItemRenderType.INVENTORY; + } + + @Override + public boolean shouldUseRenderHelper (ItemRenderType type, ItemStack item, ItemRendererHelper helper) + { + //not sure what this does. + return false; + } + + @Override + public void renderItem (ItemRenderType type, ItemStack item, Object... data) { + if (item == null || item.getItem() == null || !(item.getItem() instanceof GT_FluidDisplayItem)) + return; + + Tessellator tess = Tessellator.instance; + GL11.glPushMatrix(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + + int l = item.getItem().getColorFromItemStack(item, 0); + float f3 = (float)(l >> 16 & 255) / 255.0F; + float f4 = (float)(l >> 8 & 255) / 255.0F; + float f = (float)(l & 255) / 255.0F; + GL11.glColor4f(f3, f4, f, 1.0F); + + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + + IIcon icon = item.getItem().getIconFromDamage(item.getItemDamage()); + tess.startDrawingQuads(); + + // draw a simple rectangle for the inventory icon + final float x_min = icon.getMinU(); + final float x_max = icon.getMaxU(); + final float y_min = icon.getMinV(); + final float y_max = icon.getMaxV(); + tess.addVertexWithUV( 0, 16, 0, x_min, y_max); + tess.addVertexWithUV(16, 16, 0, x_max, y_max); + tess.addVertexWithUV(16, 0, 0, x_max, y_min); + tess.addVertexWithUV( 0, 0, 0, x_min, y_min); + tess.draw(); + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_BLEND); + + GL11.glPopMatrix(); + + if(item.getTagCompound() == null) + return; + + // Render Fluid amount text + long fluidAmount = item.getTagCompound().getLong("mFluidDisplayAmount"); + if (fluidAmount > 0L) { + String amountString; + + if (fluidAmount < 10000) { + amountString = "" + fluidAmount + "L"; + } else { + int exp = (int) (Math.log(fluidAmount) / Math.log(1000)); + double shortAmount = fluidAmount / Math.pow(1000, exp); + if ( shortAmount >= 100) { + amountString = String.format("%.0f%cL", shortAmount, "kMGT".charAt(exp - 1)); + } else if ( shortAmount >= 10) { + amountString = String.format("%.1f%cL", shortAmount, "kMGT".charAt(exp - 1)); + } else { + amountString = String.format("%.2f%cL", shortAmount, "kMGT".charAt(exp - 1)); + } + } + + FontRenderer fontRender = Minecraft.getMinecraft().fontRenderer; + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDisable(GL11.GL_BLEND); + GL11.glScalef(smallTextScale, smallTextScale, smallTextScale); //TODO: how to make this pretty at all scales? + fontRender.drawString( amountString, 0, 16*2 - fontRender.FONT_HEIGHT + 1, 0xFFFFFF, true); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + } + } +} -- cgit From 6aa523813f2b340ba9858b0a536d96f3696cc3b0 Mon Sep 17 00:00:00 2001 From: moller21 <42100910+moller21@users.noreply.github.com> Date: Sun, 3 May 2020 19:01:27 +0200 Subject: Clean up the fluid display thing. --- src/main/java/gregtech/api/util/GT_Utility.java | 3 +- .../render/GT_FluidDisplayStackRenderer.java | 38 +++++----------------- 2 files changed, 10 insertions(+), 31 deletions(-) (limited to 'src/main/java/gregtech/common/render') diff --git a/src/main/java/gregtech/api/util/GT_Utility.java b/src/main/java/gregtech/api/util/GT_Utility.java index 3b08a1e81f..8584e849bb 100644 --- a/src/main/java/gregtech/api/util/GT_Utility.java +++ b/src/main/java/gregtech/api/util/GT_Utility.java @@ -783,10 +783,9 @@ public class GT_Utility { } catch (Exception e) { System.err.println(e); } - //ItemStack rStack = ItemList.Display_Fluid.getWithDamage(aUseStackSize ? aFluid.amount / 1000 : 1, tmp); ItemStack rStack = ItemList.Display_Fluid.getWithDamage(1, tmp); NBTTagCompound tNBT = new NBTTagCompound(); - tNBT.setLong("mFluidDisplayAmount", aFluid.amount); + tNBT.setLong("mFluidDisplayAmount", aUseStackSize ? aFluid.amount : 0); tNBT.setLong("mFluidDisplayHeat", aFluid.getFluid().getTemperature(aFluid)); tNBT.setBoolean("mFluidState", aFluid.getFluid().isGaseous(aFluid)); rStack.setTagCompound(tNBT); diff --git a/src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java b/src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java index 4085a24190..06c186d127 100644 --- a/src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java +++ b/src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java @@ -15,7 +15,6 @@ import org.lwjgl.opengl.GL11; @SideOnly(cpw.mods.fml.relauncher.Side.CLIENT) public class GT_FluidDisplayStackRenderer implements IItemRenderer { - private static final float smallTextScale = 0.5f; public GT_FluidDisplayStackRenderer() { MinecraftForgeClient.registerItemRenderer(ItemList.Display_Fluid.getItem(), this); @@ -41,25 +40,14 @@ public class GT_FluidDisplayStackRenderer implements IItemRenderer { if (item == null || item.getItem() == null || !(item.getItem() instanceof GT_FluidDisplayItem)) return; - Tessellator tess = Tessellator.instance; - GL11.glPushMatrix(); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glEnable(GL11.GL_BLEND); OpenGlHelper.glBlendFunc(770, 771, 1, 0); - - int l = item.getItem().getColorFromItemStack(item, 0); - float f3 = (float)(l >> 16 & 255) / 255.0F; - float f4 = (float)(l >> 8 & 255) / 255.0F; - float f = (float)(l & 255) / 255.0F; - GL11.glColor4f(f3, f4, f, 1.0F); - - GL11.glDisable(GL11.GL_LIGHTING); GL11.glEnable(GL11.GL_BLEND); GL11.glEnable(GL11.GL_ALPHA_TEST); IIcon icon = item.getItem().getIconFromDamage(item.getItemDamage()); - tess.startDrawingQuads(); + Tessellator tess = Tessellator.instance; + tess.startDrawingQuads(); // draw a simple rectangle for the inventory icon final float x_min = icon.getMinU(); final float x_max = icon.getMaxU(); @@ -71,12 +59,6 @@ public class GT_FluidDisplayStackRenderer implements IItemRenderer { tess.addVertexWithUV( 0, 0, 0, x_min, y_min); tess.draw(); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_ALPHA_TEST); - GL11.glDisable(GL11.GL_BLEND); - - GL11.glPopMatrix(); - if(item.getTagCompound() == null) return; @@ -91,22 +73,20 @@ public class GT_FluidDisplayStackRenderer implements IItemRenderer { int exp = (int) (Math.log(fluidAmount) / Math.log(1000)); double shortAmount = fluidAmount / Math.pow(1000, exp); if ( shortAmount >= 100) { - amountString = String.format("%.0f%cL", shortAmount, "kMGT".charAt(exp - 1)); + amountString = String.format("%.0f%cL", shortAmount, "kMGTPE".charAt(exp - 1)); //heard it here first, PetaLiters } else if ( shortAmount >= 10) { - amountString = String.format("%.1f%cL", shortAmount, "kMGT".charAt(exp - 1)); + amountString = String.format("%.1f%cL", shortAmount, "kMGTPE".charAt(exp - 1)); } else { - amountString = String.format("%.2f%cL", shortAmount, "kMGT".charAt(exp - 1)); + amountString = String.format("%.2f%cL", shortAmount, "kMGTPE".charAt(exp - 1)); } } FontRenderer fontRender = Minecraft.getMinecraft().fontRenderer; - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_DEPTH_TEST); + float smallTextScale = fontRender.getUnicodeFlag() ? 3F/4F : 1F/2F; GL11.glDisable(GL11.GL_BLEND); - GL11.glScalef(smallTextScale, smallTextScale, smallTextScale); //TODO: how to make this pretty at all scales? - fontRender.drawString( amountString, 0, 16*2 - fontRender.FONT_HEIGHT + 1, 0xFFFFFF, true); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glScalef(smallTextScale, smallTextScale, 1.0f); + + fontRender.drawString( amountString, 0, (int) (16/smallTextScale) - fontRender.FONT_HEIGHT + 1, 0xFFFFFF, true); } } } -- cgit From 7b94796fa0451a923381fa3858eb87bdfdbf72dc Mon Sep 17 00:00:00 2001 From: bartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com> Date: Wed, 13 May 2020 22:38:39 +0200 Subject: FluidRenderer Fixes + Made GT_FluidDisplayItem.getIconFromDamage NEVER return null + Made GT_FluidDisplayStackRenderer reset its OpenGL calls before returning Signed-off-by: bartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com> --- build.properties | 2 +- .../java/gregtech/common/items/GT_FluidDisplayItem.java | 14 ++++++++++---- .../common/render/GT_FluidDisplayStackRenderer.java | 9 +++++++-- 3 files changed, 18 insertions(+), 7 deletions(-) (limited to 'src/main/java/gregtech/common/render') diff --git a/build.properties b/build.properties index ffb0427059..222415ef12 100644 --- a/build.properties +++ b/build.properties @@ -1,6 +1,6 @@ minecraft.version=1.7.10 forge.version=10.13.4.1614-1.7.10 -gt.version=5.09.33.44 +gt.version=5.09.33.45 ae2.version=rv3-beta-22 applecore.version=1.7.10-1.2.1+107.59407 diff --git a/src/main/java/gregtech/common/items/GT_FluidDisplayItem.java b/src/main/java/gregtech/common/items/GT_FluidDisplayItem.java index ace4306608..ba50f99d2e 100644 --- a/src/main/java/gregtech/common/items/GT_FluidDisplayItem.java +++ b/src/main/java/gregtech/common/items/GT_FluidDisplayItem.java @@ -18,9 +18,11 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; import java.util.List; +import java.util.Objects; +import java.util.stream.Stream; -public class GT_FluidDisplayItem - extends GT_Generic_Item { +@SuppressWarnings({"rawtypes","unchecked"}) +public class GT_FluidDisplayItem extends GT_Generic_Item { public GT_FluidDisplayItem() { super("GregTech_FluidDisplay", "Fluid Display", null); ItemList.Display_Fluid.set(this); @@ -49,8 +51,12 @@ public class GT_FluidDisplayItem } public IIcon getIconFromDamage(int aMeta) { - Fluid tFluid = FluidRegistry.getFluid(aMeta); - return tFluid == null ? FluidRegistry.WATER.getStillIcon() : tFluid.getStillIcon(); + return Stream.of(FluidRegistry.getFluid(aMeta), FluidRegistry.WATER) + .filter(Objects::nonNull) + .map(Fluid::getStillIcon) + .filter(Objects::nonNull) + .findFirst() + .orElseThrow(IllegalStateException::new); } @SideOnly(Side.CLIENT) diff --git a/src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java b/src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java index 06c186d127..ef5d8287ba 100644 --- a/src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java +++ b/src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java @@ -29,7 +29,7 @@ public class GT_FluidDisplayStackRenderer implements IItemRenderer { } @Override - public boolean shouldUseRenderHelper (ItemRenderType type, ItemStack item, ItemRendererHelper helper) + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { //not sure what this does. return false; @@ -59,8 +59,11 @@ public class GT_FluidDisplayStackRenderer implements IItemRenderer { tess.addVertexWithUV( 0, 0, 0, x_min, y_min); tess.draw(); - if(item.getTagCompound() == null) + if(item.getTagCompound() == null) { + GL11.glDisable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); return; + } // Render Fluid amount text long fluidAmount = item.getTagCompound().getLong("mFluidDisplayAmount"); @@ -87,6 +90,8 @@ public class GT_FluidDisplayStackRenderer implements IItemRenderer { GL11.glScalef(smallTextScale, smallTextScale, 1.0f); fontRender.drawString( amountString, 0, (int) (16/smallTextScale) - fontRender.FONT_HEIGHT + 1, 0xFFFFFF, true); + GL11.glScalef(1f, 1f, 1f); + GL11.glDisable(GL11.GL_ALPHA_TEST); } } } -- cgit