add glowing textures to fluid pipes, close #2926

This commit is contained in:
asiekierka 2015-08-03 17:09:15 +02:00
parent 88f5e17316
commit ce9caf6dc8
6 changed files with 34 additions and 8 deletions

View file

@ -1,6 +1,7 @@
Improvements:
* [#2941] Knights and Butchers now respect all your fancy sword enchantments, knockbacks and damage modifiers. Woo! (asie)
* [#2926] Fluid pipes are now extra glowy (asie)
Bugs fixed:

View file

@ -21,7 +21,9 @@ import net.minecraft.entity.Entity;
import net.minecraft.init.Blocks;
import net.minecraft.util.IIcon;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.EnumSkyBlock;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import buildcraft.core.lib.EntityBlock;
@ -69,6 +71,10 @@ public final class RenderEntityBlock extends Render {
setBounds(minX, minY, minZ, maxX, maxY, maxZ);
}
public void setSkyBlockLight(World world, int x, int y, int z, int light) {
this.brightness = world.getSkyBlockTypeBrightness(EnumSkyBlock.Sky, x, y, z) << 16 | light;
}
public float getBlockBrightness(IBlockAccess iblockaccess, int i, int j, int k) {
return baseBlock.getMixedBrightnessForBlock(iblockaccess, i, j, k);
}

View file

@ -436,6 +436,7 @@ public class PipeTransportFluids extends PipeTransport implements IFluidHandler
changed = true;
renderCache.fluidID = fluidType != null ? fluidType.getFluid().getID() : 0;
renderCache.color = fluidType != null ? fluidType.getFluid().getColor(fluidType) : 0;
renderCache.flags = FluidRenderData.getFlags(fluidType);
delta.set(0);
}

View file

@ -80,6 +80,7 @@ public class PacketFluidUpdate extends PacketCoordinates {
if (delta.get(0)) {
renderCache.fluidID = data.readShort();
renderCache.color = renderCache.fluidID != 0 ? data.readInt() : 0xFFFFFF;
renderCache.flags = renderCache.fluidID != 0 ? data.readUnsignedByte() : 0;
}
for (ForgeDirection dir : ForgeDirection.values()) {
@ -101,6 +102,7 @@ public class PacketFluidUpdate extends PacketCoordinates {
data.writeShort(renderCache.fluidID);
if (renderCache.fluidID != 0) {
data.writeInt(renderCache.color);
data.writeByte(renderCache.flags);
}
}

View file

@ -24,6 +24,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.util.IntHashMap;
import net.minecraft.world.EnumSkyBlock;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
@ -110,9 +111,11 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
initialized = false;
}
private DisplayFluidList getDisplayFluidLists(int liquidId, World world) {
if (displayFluidLists.containsItem(liquidId)) {
return (DisplayFluidList) displayFluidLists.lookup(liquidId);
private DisplayFluidList getDisplayFluidLists(int liquidId, int skylight, int flags, World world) {
int listId = (liquidId & 0x3FFFF) << 13 | flags << 5 | (skylight & 31);
if (displayFluidLists.containsItem(listId)) {
return (DisplayFluidList) displayFluidLists.lookup(listId);
}
Fluid fluid = FluidRegistry.getFluid(liquidId);
@ -122,7 +125,7 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
}
DisplayFluidList d = new DisplayFluidList();
displayFluidLists.addKey(liquidId, d);
displayFluidLists.addKey(listId, d);
RenderInfo block = new RenderInfo();
@ -133,6 +136,7 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
}
block.texture = fluid.getStillIcon();
block.brightness = skylight << 16 | flags & 31;
float size = CoreConstants.PIPE_MAX_POS - CoreConstants.PIPE_MIN_POS;
@ -744,7 +748,7 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
GL11.glTranslatef((float) x, (float) y, (float) z);
// sides
int skylight = pipe.container.getWorld().getSkyBlockTypeBrightness(EnumSkyBlock.Sky, pipe.container.x(), pipe.container.y(), pipe.container.z());
boolean sides = false, above = false;
@ -761,7 +765,8 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
continue;
}
DisplayFluidList d = getDisplayFluidLists(fluidRenderData.fluidID, pipe.container.getWorldObj());
DisplayFluidList d = getDisplayFluidLists(fluidRenderData.fluidID, skylight,
fluidRenderData.flags, pipe.container.getWorldObj());
if (d == null) {
continue;
@ -804,7 +809,8 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
FluidRenderData fluidRenderData = trans.renderCache;
if (fluidRenderData.amount[6] > 0) {
DisplayFluidList d = getDisplayFluidLists(fluidRenderData.fluidID, pipe.container.getWorldObj());
DisplayFluidList d = getDisplayFluidLists(fluidRenderData.fluidID, skylight,
fluidRenderData.flags, pipe.container.getWorldObj());
if (d != null) {
int stage = (int) ((float) fluidRenderData.amount[6] / (float) (trans.getCapacity()) * (LIQUID_STAGES - 1));

View file

@ -1,14 +1,24 @@
package buildcraft.transport.utils;
import net.minecraftforge.fluids.FluidStack;
public class FluidRenderData {
public int fluidID, color;
public int fluidID, color, flags;
public int[] amount = new int[7];
public FluidRenderData duplicate() {
FluidRenderData n = new FluidRenderData();
n.fluidID = fluidID;
n.color = color;
n.flags = flags;
System.arraycopy(this.amount, 0, n.amount, 0, 7);
return n;
}
public static int getFlags(FluidStack s) {
if (s == null) {
return 0;
}
return s.getFluid().getLuminosity();
}
}