From bcb8edc8a5406d168209db233b05efd6bd19acbd Mon Sep 17 00:00:00 2001 From: bdew Date: Wed, 8 Oct 2014 12:11:53 +0300 Subject: [PATCH] Improved handling of missing icons of fluids and in Texture class --- src/net/bdew/lib/Client.scala | 5 +++++ src/net/bdew/lib/Misc.scala | 18 +++++++++++++++++- src/net/bdew/lib/gui/Texture.scala | 9 ++++++++- .../lib/gui/widgets/WidgetFluidGauge.scala | 6 +++--- 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/net/bdew/lib/Client.scala b/src/net/bdew/lib/Client.scala index a944a46..47f670a 100644 --- a/src/net/bdew/lib/Client.scala +++ b/src/net/bdew/lib/Client.scala @@ -10,6 +10,7 @@ package net.bdew.lib import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.texture.TextureMap import org.lwjgl.input.Keyboard /** @@ -21,6 +22,10 @@ object Client { def renderEngine = Minecraft.getMinecraft.renderEngine def world = Minecraft.getMinecraft.theWorld def player = Minecraft.getMinecraft.thePlayer + def textureManager = Minecraft.getMinecraft.getTextureManager + + def blockMissingIcon = textureManager.getTexture(TextureMap.locationBlocksTexture).asInstanceOf[TextureMap].getAtlasSprite("missingno") + def itemMissingIcon = textureManager.getTexture(TextureMap.locationItemsTexture).asInstanceOf[TextureMap].getAtlasSprite("missingno") def shiftDown: Boolean = { return Keyboard.isKeyDown(42) || Keyboard.isKeyDown(54) diff --git a/src/net/bdew/lib/Misc.scala b/src/net/bdew/lib/Misc.scala index 162fc1d..d54d228 100644 --- a/src/net/bdew/lib/Misc.scala +++ b/src/net/bdew/lib/Misc.scala @@ -15,9 +15,10 @@ import cpw.mods.fml.common.versioning.{ArtifactVersion, VersionParser} import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound import net.minecraft.tileentity.TileEntity -import net.minecraft.util.StatCollector +import net.minecraft.util.{IIcon, StatCollector} import net.minecraft.world.biome.BiomeGenBase import net.minecraftforge.common.util.ForgeDirection +import net.minecraftforge.fluids.{Fluid, FluidStack} import net.minecraftforge.oredict.ShapedOreRecipe object Misc { @@ -98,5 +99,20 @@ object Misc { f(init) init } + + def getFluidIcon(fs: FluidStack): IIcon = + if (fs != null && fs.getFluid != null && fs.getFluid.getIcon != null) + fs.getFluid.getIcon(fs) + else + Client.blockMissingIcon + + def getFluidIcon(f: Fluid): IIcon = + if (f != null) getFluidIcon(new FluidStack(f, 1)) else Client.blockMissingIcon + + def getFluidColor(fs: FluidStack): Int = + if (fs != null && fs.getFluid != null) fs.getFluid.getColor(fs) else 0xFFFFFF + + def getFluidColor(f: Fluid): Int = + if (f != null) getFluidColor(new FluidStack(f, 1)) else 0xFFFFFF } diff --git a/src/net/bdew/lib/gui/Texture.scala b/src/net/bdew/lib/gui/Texture.scala index ba0120f..5a7874e 100644 --- a/src/net/bdew/lib/gui/Texture.scala +++ b/src/net/bdew/lib/gui/Texture.scala @@ -9,6 +9,7 @@ package net.bdew.lib.gui +import net.bdew.lib.Client import net.minecraft.client.Minecraft import net.minecraft.client.renderer.texture.TextureMap import net.minecraft.util.{IIcon, ResourceLocation} @@ -29,7 +30,13 @@ class InterpolatedTexture(val texture: Texture, rect: Rect) extends Texture { def v2 = rect.y2 * (texture.v2 - texture.v1) + texture.v1 } -class IconWrapper(val resource: ResourceLocation, val icon: IIcon) extends Texture { +class IconWrapper(val resource: ResourceLocation, picon: IIcon) extends Texture { + val icon = if (picon == null) { + if (resource == Texture.ITEMS) Client.itemMissingIcon + else if (resource == Texture.BLOCKS) Client.blockMissingIcon + else sys.error("Attempt to create IconWrapper for null IIcon") + } else picon + def u1 = icon.getMinU def u2 = icon.getMaxU def v1 = icon.getMinV diff --git a/src/net/bdew/lib/gui/widgets/WidgetFluidGauge.scala b/src/net/bdew/lib/gui/widgets/WidgetFluidGauge.scala index 9cd07b6..4e5b512 100644 --- a/src/net/bdew/lib/gui/widgets/WidgetFluidGauge.scala +++ b/src/net/bdew/lib/gui/widgets/WidgetFluidGauge.scala @@ -35,11 +35,11 @@ class WidgetFluidGauge(val rect: Rect, overlay: Texture, dslot: DataSlotTankBase GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA) val fstack = dslot.getFluid - if (fstack != null && fstack.getFluid.getStillIcon != null) { - val icon = Texture(Texture.BLOCKS, fstack.getFluid.getStillIcon) + if (fstack != null) { + val color = Color.fromInt(Misc.getFluidColor(fstack)) + val icon = Texture(Texture.BLOCKS, Misc.getFluidIcon(fstack)) var fillHeight = if (dslot.getCapacity > 0) rect.h * fstack.amount / dslot.getCapacity else 0 var yStart: Int = 0 - val color = Color.fromInt(fstack.getFluid.getColor(fstack)) while (fillHeight > 0) { if (fillHeight > 16) {