generated from tilera/1710mod
LordMZTE
3d9ef7a3a1
- added powered state and pipe connections to datapacket - fixed nonsensical partial `writeToNBT` (WTF) closes #10
167 lines
5.9 KiB
Java
167 lines
5.9 KiB
Java
package com.eloraam.redpower.machine;
|
|
|
|
import com.eloraam.redpower.RedPowerMachine;
|
|
import com.eloraam.redpower.core.RenderContext;
|
|
import com.eloraam.redpower.core.RenderCustomBlock;
|
|
import com.eloraam.redpower.core.RenderModel;
|
|
import com.eloraam.redpower.core.TubeFlow;
|
|
import com.eloraam.redpower.core.TubeItem;
|
|
import com.eloraam.redpower.core.WorldCoord;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.client.renderer.Tessellator;
|
|
import net.minecraft.client.renderer.entity.RenderItem;
|
|
import net.minecraft.client.renderer.entity.RenderManager;
|
|
import net.minecraft.entity.item.EntityItem;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.tileentity.TileEntity;
|
|
import net.minecraft.util.ResourceLocation;
|
|
import net.minecraft.world.World;
|
|
import org.lwjgl.opengl.GL11;
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
public class RenderAccel extends RenderCustomBlock {
|
|
private RenderModel model = RenderModel.loadModel("rpmachine:models/accel.obj");
|
|
private ResourceLocation modelRes
|
|
= new ResourceLocation("rpmachine", "models/machine1.png");
|
|
private RenderContext context = new RenderContext();
|
|
private EntityItem item = new EntityItem((World) null);
|
|
private int[] paintColors
|
|
= new int[] { 16777215, 16744448, 16711935, 7110911, 16776960, 65280,
|
|
16737408, 5460819, 9671571, 65535, 8388863, 255,
|
|
5187328, 32768, 16711680, 2039583 };
|
|
|
|
public RenderAccel(Block block) {
|
|
super(block);
|
|
}
|
|
|
|
public void renderTileEntityAt(
|
|
TileEntity tile, double x, double y, double z, float partialTicks
|
|
) {
|
|
TileAccel accel = (TileAccel) tile;
|
|
World world = accel.getWorldObj();
|
|
GL11.glDisable(2896);
|
|
Tessellator tess = Tessellator.instance;
|
|
this.context.setDefaults();
|
|
this.context.setPos(x, y, z);
|
|
this.context.setOrientation(accel.Rotation, 0);
|
|
this.context.readGlobalLights(world, accel.xCoord, accel.yCoord, accel.zCoord);
|
|
if (accel.Charged) {
|
|
this.context.setBrightness(15728880);
|
|
} else {
|
|
this.context.setBrightness(this.getMixedBrightness(accel));
|
|
}
|
|
|
|
this.context.bindTexture(this.modelRes);
|
|
tess.startDrawingQuads();
|
|
this.context.bindModelOffset(this.model, 0.5, 0.5, 0.5);
|
|
this.context.renderModelGroup(0, 0);
|
|
this.context.renderModelGroup(1, 1 + (accel.Charged ? 1 : 0));
|
|
if (accel.Charged) {
|
|
this.context.setBrightness(this.getMixedBrightness(accel));
|
|
}
|
|
|
|
accel.recache();
|
|
if ((accel.conCache & 1) > 0) {
|
|
this.context.renderModelGroup(2, 2);
|
|
}
|
|
|
|
if ((accel.conCache & 2) > 0) {
|
|
this.context.renderModelGroup(2, 1);
|
|
}
|
|
|
|
if ((accel.conCache & 4) > 0) {
|
|
this.context.renderModelGroup(3, 2);
|
|
}
|
|
|
|
if ((accel.conCache & 8) > 0) {
|
|
this.context.renderModelGroup(3, 1);
|
|
}
|
|
|
|
tess.draw();
|
|
this.item.worldObj = world;
|
|
this.item.setPosition(
|
|
(double) accel.xCoord + 0.5,
|
|
(double) accel.yCoord + 0.5,
|
|
(double) accel.zCoord + 0.5
|
|
);
|
|
RenderItem renderitem = (RenderItem
|
|
) RenderManager.instance.getEntityClassRenderObject(EntityItem.class);
|
|
this.item.age = 0;
|
|
this.item.hoverStart = 0.0F;
|
|
WorldCoord offset = new WorldCoord(0, 0, 0);
|
|
TubeFlow flow = accel.getTubeFlow();
|
|
int lv = accel.getWorldObj().getLightBrightnessForSkyBlocks(
|
|
accel.xCoord, accel.yCoord, accel.zCoord, 0
|
|
);
|
|
|
|
for (TubeItem item : flow.contents) {
|
|
this.item.setEntityItemStack(item.item);
|
|
offset.x = 0;
|
|
offset.y = 0;
|
|
offset.z = 0;
|
|
offset.step(item.side);
|
|
double d = (double) item.progress / 128.0 * 0.5;
|
|
if (!item.scheduled) {
|
|
d = 0.5 - d;
|
|
}
|
|
|
|
double yo = 0.0;
|
|
if (Item.getIdFromItem(item.item.getItem()) >= 256) {
|
|
yo += 0.1;
|
|
}
|
|
|
|
renderitem.doRender(
|
|
this.item,
|
|
x + 0.5 + (double) offset.x * d,
|
|
y + 0.5 - (double) this.item.yOffset - yo + (double) offset.y * d,
|
|
z + 0.5 + (double) offset.z * d,
|
|
0.0F,
|
|
0.0F
|
|
);
|
|
if (item.color > 0) {
|
|
this.context.bindBlockTexture();
|
|
tess.startDrawingQuads();
|
|
this.context.useNormal = true;
|
|
this.context.setDefaults();
|
|
tess.setBrightness(lv);
|
|
this.context.setPos(
|
|
x + (double) offset.x * d,
|
|
y + (double) offset.y * d,
|
|
z + (double) offset.z * d
|
|
);
|
|
this.context.setTintHex(this.paintColors[item.color - 1]);
|
|
this.context.setIcon(RedPowerMachine.tubeItemOverlay);
|
|
this.context.renderBox(63, 0.26F, 0.26F, 0.26F, 0.74F, 0.74F, 0.74F);
|
|
tess.draw();
|
|
}
|
|
}
|
|
|
|
GL11.glEnable(2896);
|
|
}
|
|
|
|
@Override
|
|
public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
|
|
super.block.setBlockBoundsForItemRender();
|
|
this.context.setDefaults();
|
|
if (type == ItemRenderType.INVENTORY) {
|
|
this.context.setPos(-0.5, -0.5, -0.5);
|
|
} else {
|
|
this.context.setPos(0.0, 0.0, 0.0);
|
|
}
|
|
|
|
this.context.setOrientation(2, 0);
|
|
this.context.bindTexture(this.modelRes);
|
|
Tessellator tess = Tessellator.instance;
|
|
tess.startDrawingQuads();
|
|
this.context.useNormal = true;
|
|
this.context.bindModelOffset(this.model, 0.5, 0.5, 0.5);
|
|
this.context.renderModelGroup(0, 0);
|
|
this.context.renderModelGroup(1, 1);
|
|
this.context.useNormal = false;
|
|
tess.draw();
|
|
}
|
|
}
|