Implement a functioning Blood Tank (#969)
Added a search bar to the Upgrade Tomes Creative Tab Updated some Altar fluid code (remove deprecated stuff) Moved Rendering classes into appropriate package Fix the localization errors on the Demon Crystals A few cleanups here and there
This commit is contained in:
parent
d1f4e95a7e
commit
aac2623440
40 changed files with 929 additions and 249 deletions
|
@ -0,0 +1,21 @@
|
|||
package WayofTime.bloodmagic.client.render.block;
|
||||
|
||||
import WayofTime.bloodmagic.api.alchemyCrafting.AlchemyCircleRenderer;
|
||||
import WayofTime.bloodmagic.api.registry.AlchemyArrayRecipeRegistry;
|
||||
import WayofTime.bloodmagic.tile.TileAlchemyArray;
|
||||
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class RenderAlchemyArray extends TileEntitySpecialRenderer<TileAlchemyArray>
|
||||
{
|
||||
@Override
|
||||
public void renderTileEntityAt(TileAlchemyArray alchemyArray, double x, double y, double z, float partialTicks, int destroyStage)
|
||||
{
|
||||
ItemStack inputStack = alchemyArray.getStackInSlot(0);
|
||||
ItemStack catalystStack = alchemyArray.getStackInSlot(1);
|
||||
int craftTime = alchemyArray.activeCounter;
|
||||
AlchemyCircleRenderer renderer = AlchemyArrayRecipeRegistry.getAlchemyCircleRenderer(inputStack, catalystStack);
|
||||
|
||||
renderer.renderAt(alchemyArray, x, y, z, (craftTime > 0 ? craftTime + partialTicks : 0));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,183 @@
|
|||
package WayofTime.bloodmagic.client.render.block;
|
||||
|
||||
import WayofTime.bloodmagic.api.altar.AltarComponent;
|
||||
import WayofTime.bloodmagic.api.altar.EnumAltarTier;
|
||||
import WayofTime.bloodmagic.block.BlockLifeEssence;
|
||||
import WayofTime.bloodmagic.tile.TileAltar;
|
||||
import WayofTime.bloodmagic.util.handler.event.ClientHandler;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.entity.EntityPlayerSP;
|
||||
import net.minecraft.client.renderer.*;
|
||||
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
|
||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||
import net.minecraft.client.renderer.texture.TextureMap;
|
||||
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
||||
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.fluids.Fluid;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
public class RenderAltar extends TileEntitySpecialRenderer<TileAltar>
|
||||
{
|
||||
public static Minecraft mc = Minecraft.getMinecraft();
|
||||
public static ResourceLocation resource = new ResourceLocation("bloodmagic", "textures/blocks/lifeEssenceStill.png");
|
||||
public static float minHeight = 0.499f;
|
||||
public static float maxHeight = 0.745f;
|
||||
|
||||
@Override
|
||||
public void renderTileEntityAt(TileAltar tileAltar, double x, double y, double z, float partialTicks, int destroyStage)
|
||||
{
|
||||
ItemStack inputStack = tileAltar.getStackInSlot(0);
|
||||
|
||||
float level = ((float) tileAltar.getCurrentBlood()) / (float) tileAltar.getCapacity();
|
||||
|
||||
GlStateManager.pushMatrix();
|
||||
GlStateManager.translate(x, y, z);
|
||||
if (level > 0)
|
||||
this.renderFluid(getWorld(), level);
|
||||
this.renderItem(tileAltar.getWorld(), inputStack, partialTicks);
|
||||
GlStateManager.popMatrix();
|
||||
|
||||
if (tileAltar.getCurrentTierDisplayed() != EnumAltarTier.ONE)
|
||||
{
|
||||
renderHologram(tileAltar, tileAltar.getCurrentTierDisplayed(), partialTicks);
|
||||
}
|
||||
}
|
||||
|
||||
private void renderFluid(World world, float fluidLevel)
|
||||
{
|
||||
GlStateManager.pushMatrix();
|
||||
|
||||
Fluid fluid = BlockLifeEssence.getLifeEssence();
|
||||
FluidStack fluidStack = new FluidStack(fluid, 1000);
|
||||
|
||||
GlStateManager.translate(0.5, minHeight + (fluidLevel) * (maxHeight - minHeight), 0.5);
|
||||
|
||||
Tessellator tessellator = Tessellator.getInstance();
|
||||
VertexBuffer wr = tessellator.getBuffer();
|
||||
|
||||
float size = 0.8f;
|
||||
|
||||
TextureAtlasSprite fluidStillSprite = Minecraft.getMinecraft().getTextureMapBlocks().getTextureExtry(fluid.getStill().toString());
|
||||
|
||||
int fluidColor = fluid.getColor(fluidStack);
|
||||
|
||||
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE);
|
||||
setGLColorFromInt(fluidColor);
|
||||
|
||||
double uMin = (double) fluidStillSprite.getMinU();
|
||||
double uMax = (double) fluidStillSprite.getMaxU();
|
||||
double vMin = (double) fluidStillSprite.getMinV();
|
||||
double vMax = (double) fluidStillSprite.getMaxV();
|
||||
|
||||
wr.begin(7, DefaultVertexFormats.POSITION_TEX);
|
||||
// wr.setBrightness(200);
|
||||
wr.pos(size / 2f, 0, size / 2f).tex(uMax, vMax).endVertex();
|
||||
wr.pos(size / 2f, 0, -size / 2f).tex(uMax, vMin).endVertex();
|
||||
wr.pos(-size / 2f, 0, -size / 2f).tex(uMin, vMin).endVertex();
|
||||
wr.pos(-size / 2f, 0, size / 2f).tex(uMin, vMax).endVertex();
|
||||
tessellator.draw();
|
||||
|
||||
GlStateManager.popMatrix();
|
||||
}
|
||||
|
||||
private static void setGLColorFromInt(int color)
|
||||
{
|
||||
float red = (color >> 16 & 0xFF) / 255.0F;
|
||||
float green = (color >> 8 & 0xFF) / 255.0F;
|
||||
float blue = (color & 0xFF) / 255.0F;
|
||||
|
||||
GlStateManager.color(red, green, blue, 1.0F);
|
||||
}
|
||||
|
||||
private void renderItem(World world, ItemStack stack, float partialTicks)
|
||||
{
|
||||
RenderItem itemRenderer = mc.getRenderItem();
|
||||
if (stack != null)
|
||||
{
|
||||
GlStateManager.translate(0.5, 1, 0.5);
|
||||
EntityItem entityitem = new EntityItem(world, 0.0D, 0.0D, 0.0D, stack);
|
||||
entityitem.getEntityItem().stackSize = 1;
|
||||
entityitem.hoverStart = 0.0F;
|
||||
GlStateManager.pushMatrix();
|
||||
GlStateManager.disableLighting();
|
||||
|
||||
float rotation = (float) (720.0 * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL);
|
||||
|
||||
GlStateManager.rotate(rotation, 0.0F, 1.0F, 0);
|
||||
GlStateManager.scale(0.5F, 0.5F, 0.5F);
|
||||
GlStateManager.pushAttrib();
|
||||
RenderHelper.enableStandardItemLighting();
|
||||
itemRenderer.renderItem(entityitem.getEntityItem(), ItemCameraTransforms.TransformType.FIXED);
|
||||
RenderHelper.disableStandardItemLighting();
|
||||
GlStateManager.popAttrib();
|
||||
|
||||
GlStateManager.enableLighting();
|
||||
GlStateManager.popMatrix();
|
||||
}
|
||||
}
|
||||
|
||||
private void renderHologram(TileAltar altar, EnumAltarTier tier, float partialTicks)
|
||||
{
|
||||
EntityPlayerSP player = mc.thePlayer;
|
||||
World world = player.worldObj;
|
||||
|
||||
if (tier == EnumAltarTier.ONE)
|
||||
return;
|
||||
|
||||
GlStateManager.pushMatrix();
|
||||
GlStateManager.enableBlend();
|
||||
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
GlStateManager.color(1F, 1F, 1F, 0.6125F);
|
||||
|
||||
BlockPos vec3, vX;
|
||||
vec3 = altar.getPos();
|
||||
double posX = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialTicks;
|
||||
double posY = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialTicks;
|
||||
double posZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialTicks;
|
||||
|
||||
for (AltarComponent altarComponent : tier.getAltarComponents())
|
||||
{
|
||||
vX = vec3.add(altarComponent.getOffset());
|
||||
double minX = vX.getX() - posX;
|
||||
double minY = vX.getY() - posY;
|
||||
double minZ = vX.getZ() - posZ;
|
||||
|
||||
if (!world.getBlockState(vX).isOpaqueCube())
|
||||
{
|
||||
TextureAtlasSprite texture = null;
|
||||
|
||||
switch (altarComponent.getComponent())
|
||||
{
|
||||
case BLOODRUNE:
|
||||
texture = ClientHandler.blankBloodRune;
|
||||
break;
|
||||
case NOTAIR:
|
||||
texture = ClientHandler.stoneBrick;
|
||||
break;
|
||||
case GLOWSTONE:
|
||||
texture = ClientHandler.glowstone;
|
||||
break;
|
||||
case BLOODSTONE:
|
||||
texture = ClientHandler.bloodStoneBrick;
|
||||
break;
|
||||
case BEACON:
|
||||
texture = ClientHandler.beacon;
|
||||
break;
|
||||
case CRYSTAL:
|
||||
texture = ClientHandler.crystalCluster;
|
||||
break;
|
||||
}
|
||||
|
||||
RenderFakeBlocks.drawFakeBlock(texture, minX, minY, minZ);
|
||||
}
|
||||
}
|
||||
|
||||
GlStateManager.popMatrix();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,126 @@
|
|||
package WayofTime.bloodmagic.client.render.block;
|
||||
|
||||
import WayofTime.bloodmagic.tile.TileBloodTank;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.client.renderer.VertexBuffer;
|
||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||
import net.minecraft.client.renderer.texture.TextureMap;
|
||||
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
||||
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||
import net.minecraftforge.fluids.Fluid;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class RenderBloodTank extends TileEntitySpecialRenderer<TileBloodTank>
|
||||
{
|
||||
private static final Minecraft mc = Minecraft.getMinecraft();
|
||||
|
||||
@Override
|
||||
public void renderTileEntityAt(TileBloodTank bloodTank, double x, double y, double z, float partialTicks, int destroyStage)
|
||||
{
|
||||
if (bloodTank == null)
|
||||
return;
|
||||
|
||||
Fluid renderFluid = bloodTank.getClientRenderFluid();
|
||||
if (bloodTank.getRenderHeight() == 0 || renderFluid == null)
|
||||
return;
|
||||
|
||||
GlStateManager.pushMatrix();
|
||||
|
||||
bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE);
|
||||
|
||||
renderFluid(bloodTank.getRenderHeight(), renderFluid, x, y, z);
|
||||
|
||||
GlStateManager.popMatrix();
|
||||
}
|
||||
|
||||
public void renderFluid(float scale, Fluid renderFluid, double x, double y, double z)
|
||||
{
|
||||
GlStateManager.translate(x, y, z);
|
||||
RenderHelper.disableStandardItemLighting();
|
||||
|
||||
GlStateManager.disableRescaleNormal();
|
||||
GlStateManager.disableBlend();
|
||||
|
||||
Tessellator tessellator = Tessellator.getInstance();
|
||||
VertexBuffer buffer = tessellator.getBuffer();
|
||||
|
||||
TextureAtlasSprite fluid = Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(renderFluid.getStill().toString());
|
||||
fluid = fluid == null ? mc.getTextureMapBlocks().getMissingSprite() : fluid;
|
||||
|
||||
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR);
|
||||
|
||||
final int rgbaColor = renderFluid.getColor();
|
||||
final int rColor = rgbaColor >> 16 & 0xFF;
|
||||
final int gColor = rgbaColor >> 8 & 0xFF;
|
||||
final int bColor = rgbaColor & 0xFF;
|
||||
final int aColor = rgbaColor >> 24 & 0xFF;
|
||||
GlStateManager.enableBlend();
|
||||
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
GlStateManager.color(rColor, gColor, bColor, aColor);
|
||||
|
||||
float u1 = fluid.getMinU();
|
||||
float v1 = fluid.getMinV();
|
||||
float u2 = fluid.getMaxU();
|
||||
float v2 = fluid.getMaxV();
|
||||
|
||||
if (scale > 0)
|
||||
{
|
||||
float edge = 0.9375F;
|
||||
float otherEdge = 0.0625F;
|
||||
float offset = 0.002F;
|
||||
|
||||
// Top
|
||||
buffer.pos(0, scale - offset, 0).tex(u1, v1).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
buffer.pos(0, scale - offset, 1).tex(u1, v2).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
buffer.pos(1, scale - offset, 1).tex(u2, v2).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
buffer.pos(1, scale - offset, 0).tex(u2, v1).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
|
||||
// Bottom
|
||||
buffer.pos(1, offset, 0).tex(u1, v1).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
buffer.pos(1, offset, 1).tex(u1, v2).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
buffer.pos(0, offset, 1).tex(u2, v2).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
buffer.pos(0, offset, 0).tex(u2, v1).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
|
||||
if (scale > otherEdge)
|
||||
{
|
||||
if (scale > edge)
|
||||
scale = edge;
|
||||
|
||||
v2 -= (fluid.getMaxV() - fluid.getMinV()) * (1 - scale);
|
||||
|
||||
//NORTH
|
||||
buffer.pos(1, scale, offset).tex(u1, v1).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
buffer.pos(1, 0, offset).tex(u1, v2).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
buffer.pos(0, 0, offset).tex(u2, v2).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
buffer.pos(0, scale, offset).tex(u2, v1).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
|
||||
//EAST
|
||||
buffer.pos(offset, 0, 1).tex(u1, v2).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
buffer.pos(offset, scale, 1).tex(u1, v1).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
buffer.pos(offset, scale, 0).tex(u2, v1).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
buffer.pos(offset, 0, 0).tex(u2, v2).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
|
||||
//SOUTH
|
||||
buffer.pos(1, 0, 1 - offset).tex(u1, v2).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
buffer.pos(1, scale, 1 - offset).tex(u1, v1).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
buffer.pos(0, scale, 1 - offset).tex(u2, v1).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
buffer.pos(0, 0, 1 - offset).tex(u2, v2).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
|
||||
//WEST
|
||||
buffer.pos(1 - offset, scale, 1).tex(u1, v1).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
buffer.pos(1 - offset, 0, 1).tex(u1, v2).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
buffer.pos(1 - offset, 0, 0).tex(u2, v2).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
buffer.pos(1 - offset, scale, 0).tex(u2, v1).color(rColor, gColor, bColor, aColor).endVertex();
|
||||
}
|
||||
}
|
||||
tessellator.draw();
|
||||
|
||||
RenderHelper.enableStandardItemLighting();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
package WayofTime.bloodmagic.client.render.block;
|
||||
|
||||
import WayofTime.bloodmagic.tile.TileDemonCrucible;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.client.renderer.RenderItem;
|
||||
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
|
||||
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class RenderDemonCrucible extends TileEntitySpecialRenderer<TileDemonCrucible>
|
||||
{
|
||||
public static Minecraft mc = Minecraft.getMinecraft();
|
||||
public static ResourceLocation resource = new ResourceLocation("bloodmagic", "textures/blocks/lifeEssenceStill.png");
|
||||
public static float minHeight = 0.6497f;
|
||||
public static float maxHeight = 0.79f;
|
||||
|
||||
@Override
|
||||
public void renderTileEntityAt(TileDemonCrucible tile, double x, double y, double z, float partialTicks, int destroyStage)
|
||||
{
|
||||
ItemStack inputStack = tile.getStackInSlot(0);
|
||||
|
||||
GlStateManager.pushMatrix();
|
||||
GlStateManager.translate(x, y, z);
|
||||
this.renderItem(tile.getWorld(), inputStack, partialTicks);
|
||||
GlStateManager.popMatrix();
|
||||
}
|
||||
|
||||
private void renderItem(World world, ItemStack stack, float partialTicks)
|
||||
{
|
||||
RenderItem itemRenderer = mc.getRenderItem();
|
||||
if (stack != null)
|
||||
{
|
||||
GlStateManager.translate(0.5, 1.5, 0.5);
|
||||
EntityItem entityitem = new EntityItem(world, 0.0D, 0.0D, 0.0D, stack);
|
||||
entityitem.getEntityItem().stackSize = 1;
|
||||
entityitem.hoverStart = 0.0F;
|
||||
GlStateManager.pushMatrix();
|
||||
GlStateManager.disableLighting();
|
||||
|
||||
float rotation = (float) (720.0 * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL);
|
||||
|
||||
GlStateManager.rotate(rotation, 0.0F, 1.0F, 0);
|
||||
GlStateManager.scale(0.5F, 0.5F, 0.5F);
|
||||
GlStateManager.pushAttrib();
|
||||
RenderHelper.enableStandardItemLighting();
|
||||
itemRenderer.renderItem(entityitem.getEntityItem(), ItemCameraTransforms.TransformType.FIXED);
|
||||
RenderHelper.disableStandardItemLighting();
|
||||
GlStateManager.popAttrib();
|
||||
|
||||
GlStateManager.enableLighting();
|
||||
GlStateManager.popMatrix();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
package WayofTime.bloodmagic.client.render.block;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.client.renderer.VertexBuffer;
|
||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||
import net.minecraft.client.renderer.texture.TextureMap;
|
||||
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||
import net.minecraft.world.World;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
public class RenderFakeBlocks
|
||||
{
|
||||
public static void drawFakeBlock(TextureAtlasSprite texture, double minX, double minY, double minZ)
|
||||
{
|
||||
if (texture == null)
|
||||
return;
|
||||
|
||||
double maxX = minX + 1;
|
||||
double maxY = minY + 1;
|
||||
double maxZ = minZ + 1;
|
||||
Tessellator tessellator = Tessellator.getInstance();
|
||||
VertexBuffer wr = tessellator.getBuffer();
|
||||
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE);
|
||||
|
||||
wr.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
|
||||
|
||||
float texMinU = texture.getMinU();
|
||||
float texMinV = texture.getMinV();
|
||||
float texMaxU = texture.getMaxU();
|
||||
float texMaxV = texture.getMaxV();
|
||||
|
||||
wr.pos(minX, minY, minZ).tex(texMinU, texMinV).endVertex();
|
||||
wr.pos(maxX, minY, minZ).tex(texMaxU, texMinV).endVertex();
|
||||
wr.pos(maxX, minY, maxZ).tex(texMaxU, texMaxV).endVertex();
|
||||
wr.pos(minX, minY, maxZ).tex(texMinU, texMaxV).endVertex();
|
||||
|
||||
wr.pos(minX, maxY, maxZ).tex(texMinU, texMaxV).endVertex();
|
||||
wr.pos(maxX, maxY, maxZ).tex(texMaxU, texMaxV).endVertex();
|
||||
wr.pos(maxX, maxY, minZ).tex(texMaxU, texMinV).endVertex();
|
||||
wr.pos(minX, maxY, minZ).tex(texMinU, texMinV).endVertex();
|
||||
|
||||
wr.pos(maxX, minY, minZ).tex(texMinU, texMaxV).endVertex();
|
||||
wr.pos(minX, minY, minZ).tex(texMaxU, texMaxV).endVertex();
|
||||
wr.pos(minX, maxY, minZ).tex(texMaxU, texMinV).endVertex();
|
||||
wr.pos(maxX, maxY, minZ).tex(texMinU, texMinV).endVertex();
|
||||
|
||||
wr.pos(minX, minY, maxZ).tex(texMinU, texMaxV).endVertex();
|
||||
wr.pos(maxX, minY, maxZ).tex(texMaxU, texMaxV).endVertex();
|
||||
wr.pos(maxX, maxY, maxZ).tex(texMaxU, texMinV).endVertex();
|
||||
wr.pos(minX, maxY, maxZ).tex(texMinU, texMinV).endVertex();
|
||||
|
||||
wr.pos(minX, minY, minZ).tex(texMinU, texMaxV).endVertex();
|
||||
wr.pos(minX, minY, maxZ).tex(texMaxU, texMaxV).endVertex();
|
||||
wr.pos(minX, maxY, maxZ).tex(texMaxU, texMinV).endVertex();
|
||||
wr.pos(minX, maxY, minZ).tex(texMinU, texMinV).endVertex();
|
||||
|
||||
wr.pos(maxX, minY, maxZ).tex(texMinU, texMaxV).endVertex();
|
||||
wr.pos(maxX, minY, minZ).tex(texMaxU, texMaxV).endVertex();
|
||||
wr.pos(maxX, maxY, minZ).tex(texMaxU, texMinV).endVertex();
|
||||
wr.pos(maxX, maxY, maxZ).tex(texMinU, texMinV).endVertex();
|
||||
|
||||
tessellator.draw();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,116 @@
|
|||
package WayofTime.bloodmagic.client.render.block;
|
||||
|
||||
import WayofTime.bloodmagic.ConfigHandler;
|
||||
import WayofTime.bloodmagic.api.Constants;
|
||||
import WayofTime.bloodmagic.api.iface.INodeRenderer;
|
||||
import WayofTime.bloodmagic.client.helper.ShaderHelper;
|
||||
import WayofTime.bloodmagic.tile.routing.TileRoutingNode;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.client.renderer.VertexBuffer;
|
||||
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
||||
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class RenderItemRoutingNode extends TileEntitySpecialRenderer<TileRoutingNode>
|
||||
{
|
||||
private static final ResourceLocation beamTexture = new ResourceLocation(Constants.Mod.MODID, "textures/entities/nodeBeam.png");
|
||||
private static final Minecraft mc = Minecraft.getMinecraft();
|
||||
|
||||
// private static final ResourceLocation test = new ResourceLocation("luminescence:textures/models/InputMirror.png");
|
||||
|
||||
@Override
|
||||
public void renderTileEntityAt(TileRoutingNode tileNode, double x, double y, double z, float partialTicks, int destroyStage)
|
||||
{
|
||||
if ((mc.thePlayer.getHeldItemMainhand() != null && mc.thePlayer.getHeldItemMainhand().getItem() instanceof INodeRenderer) || ConfigHandler.alwaysRenderRoutingLines)
|
||||
{
|
||||
List<BlockPos> connectionList = tileNode.getConnected();
|
||||
for (BlockPos wantedPos : connectionList)
|
||||
{
|
||||
BlockPos offsetPos = wantedPos.subtract(tileNode.getPos());
|
||||
|
||||
//The beam renders towards the east by default.
|
||||
|
||||
int xd = offsetPos.getX();
|
||||
int yd = offsetPos.getY();
|
||||
int zd = offsetPos.getZ();
|
||||
double distance = Math.sqrt(xd * xd + yd * yd + zd * zd);
|
||||
double subLength = MathHelper.sqrt_double(xd * xd + zd * zd);
|
||||
float rotYaw = -((float) (Math.atan2(zd, xd) * 180.0D / Math.PI));
|
||||
float rotPitch = ((float) (Math.atan2(yd, subLength) * 180.0D / Math.PI));
|
||||
|
||||
GlStateManager.pushMatrix();
|
||||
float f1 = 1.0f;
|
||||
Tessellator tessellator = Tessellator.getInstance();
|
||||
VertexBuffer wr = tessellator.getBuffer();
|
||||
this.bindTexture(beamTexture);
|
||||
GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, 10497.0F);
|
||||
GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, 10497.0F);
|
||||
GlStateManager.disableLighting();
|
||||
GlStateManager.disableCull();
|
||||
float f2 = 0;
|
||||
float f3 = -f2 * 0.2F - (float) MathHelper.floor_float(-f2 * 0.1F);
|
||||
GlStateManager.enableBlend();
|
||||
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
double width = 0.06;
|
||||
|
||||
float test = (tileNode.getWorld().getTotalWorldTime() + partialTicks) / 5f;
|
||||
|
||||
double d18 = -width / 2;
|
||||
double d19 = -width / 2;
|
||||
double d20 = width / 2;
|
||||
double d21 = -width / 2;
|
||||
double d22 = -width / 2;
|
||||
double d23 = width / 2;
|
||||
double d24 = width / 2;
|
||||
double d25 = width / 2;
|
||||
double d26 = (double) (distance * f1);
|
||||
double d27 = 0.0D;
|
||||
double d28 = 1.0D;
|
||||
double d29 = (double) (f3) + test;
|
||||
double d30 = (double) (distance * f1) + d29;
|
||||
|
||||
GlStateManager.translate(x + 0.5, y + 0.5, z + 0.5);
|
||||
|
||||
GlStateManager.rotate(rotYaw, 0, 1, 0);
|
||||
GlStateManager.rotate(rotPitch, 0, 0, 1);
|
||||
|
||||
// tessellator.setBrightness(240);
|
||||
// float s = 1F / 16F;
|
||||
wr.begin(7, DefaultVertexFormats.POSITION_TEX);
|
||||
// tessellator.setColorRGBA(255, 255, 255, 100);
|
||||
wr.pos(d26, d18, d19).tex(d28, d30).endVertex();
|
||||
wr.pos(0, d18, d19).tex(d28, d29).endVertex();
|
||||
wr.pos(0, d20, d21).tex(d27, d29).endVertex();
|
||||
wr.pos(d26, d20, d21).tex(d27, d30).endVertex();
|
||||
wr.pos(d26, d24, d25).tex(d28, d30).endVertex();
|
||||
wr.pos(0, d24, d25).tex(d28, d29).endVertex();
|
||||
wr.pos(0, d22, d23).tex(d27, d29).endVertex();
|
||||
wr.pos(d26, d22, d23).tex(d27, d30).endVertex();
|
||||
wr.pos(d26, d20, d21).tex(d28, d30).endVertex();
|
||||
wr.pos(0, d20, d21).tex(d28, d29).endVertex();
|
||||
wr.pos(0, d24, d25).tex(d27, d29).endVertex();
|
||||
wr.pos(d26, d24, d25).tex(d27, d30).endVertex();
|
||||
wr.pos(d26, d22, d23).tex(d28, d30).endVertex();
|
||||
wr.pos(0, d22, d23).tex(d28, d29).endVertex();
|
||||
wr.pos(0, d18, d19).tex(d27, d29).endVertex();
|
||||
wr.pos(d26, d18, d19).tex(d27, d30).endVertex();
|
||||
|
||||
ShaderHelper.useShader(ShaderHelper.psiBar, (int) tileNode.getWorld().getTotalWorldTime());
|
||||
tessellator.draw();
|
||||
ShaderHelper.releaseShader();
|
||||
|
||||
GlStateManager.enableLighting();
|
||||
GlStateManager.enableTexture2D();
|
||||
GlStateManager.popMatrix();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
@ParametersAreNonnullByDefault
|
||||
@MethodsReturnNonnullByDefault
|
||||
package WayofTime.bloodmagic.client.render.block;
|
||||
|
||||
import mcp.MethodsReturnNonnullByDefault;
|
||||
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
Loading…
Add table
Add a link
Reference in a new issue