feat: transition plane works a little better than before

ref: #2
This commit is contained in:
LordMZTE 2023-01-30 18:49:14 +01:00
parent 21615fb3d0
commit e7731f3fd7
Signed by: LordMZTE
GPG Key ID: B64802DC33A64FF6
6 changed files with 399 additions and 393 deletions

View File

@ -2,13 +2,20 @@ package appeng.block.legacy;
import java.util.EnumSet;
import appeng.api.util.WorldCoord;
import appeng.block.AEBaseBlock;
import appeng.block.AEBaseTileBlock;
import appeng.client.render.BaseBlockRender;
import appeng.client.render.blocks.RenderBlockTransitionPlane;
import appeng.core.features.AEFeature;
import appeng.tile.AEBaseTile;
import appeng.tile.legacy.TileTransitionPlane;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
@ -20,6 +27,11 @@ public class BlockTransitionPlane extends AEBaseTileBlock {
this.setFeature(EnumSet.of(AEFeature.Legacy));
}
@Override
protected BaseBlockRender<? extends AEBaseBlock, ? extends AEBaseTile> getRenderer() {
return new RenderBlockTransitionPlane();
}
@Override
public void onEntityCollidedWithBlock(World w, int x, int y, int z, Entity entitiy) {
if (entitiy instanceof EntityItem) {
@ -32,28 +44,28 @@ public class BlockTransitionPlane extends AEBaseTileBlock {
}
@Override
public void onNeighborBlockChange(
World world,
int x,
int y,
int z,
Block neighbor
) {
TileEntity te = world.getTileEntity(x, y, z);
if (te instanceof TileTransitionPlane) {
((TileTransitionPlane)te).reqEat();
}
public void onBlockPlacedBy(World w, int x, int y, int z, EntityLivingBase player, ItemStack is) {
super.onBlockPlacedBy(w, x, y, z, player, is);
this.calcMB(w, x, y, z);
}
//@Override
//public IIcon getIcon(int side, int meta) {
// if (side == 0) {
// return AppEngTextureRegistry.Blocks.GenericBottom.get();
// } else if (side == 1) {
// return AppEngTextureRegistry.Blocks.GenericTop.get();
// } else {
// return side == 2 ? AppEngTextureRegistry.Blocks.BlockTransPlane.get()
// : AppEngTextureRegistry.Blocks.GenericSide.get();
// }
//}
@Override
public void onPostBlockPlaced(World world, int x, int y, int z, int md) {
super.onPostBlockPlaced(world, x, y, z, md);
this.calcMB(world, x, y, z);
}
@Override
public void onNeighborBlockChange(World world, int x, int y, int z, Block neighbor) {
this.calcMB(world, x, y, z);
((TileTransitionPlane) world.getTileEntity(x, y, z)).reqEat();
}
private void calcMB(World world, int x, int y, int z) {
TileEntity te = world.getTileEntity(x, y, z);
if (te instanceof TileTransitionPlane) {
((TileTransitionPlane) te)
.calc.calculateMultiblock(world, new WorldCoord(x, y, z));
}
}
}

View File

@ -0,0 +1,114 @@
package appeng.client.render.blocks;
import appeng.block.legacy.BlockTransitionPlane;
import appeng.client.render.BaseBlockRender;
import appeng.client.texture.ExtraBlockTextures;
import appeng.tile.legacy.TileTransitionPlane;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.util.IIcon;
import net.minecraftforge.common.util.ForgeDirection;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
public class RenderBlockTransitionPlane
extends BaseBlockRender<BlockTransitionPlane, TileTransitionPlane> {
@Override
public boolean hasTESR() {
return true;
}
@Override
public void renderTile(
BlockTransitionPlane block,
TileTransitionPlane tile,
Tessellator tess,
double x,
double y,
double z,
float f,
RenderBlocks renderer
) {
IIcon frontIcon = null;
if (!tile.getProxy().isPowered()) {
frontIcon = ExtraBlockTextures.BlockTransitionPlaneNoPower.getIcon();
} else if (!tile.getProxy().isActive()) {
frontIcon = ExtraBlockTextures.BlockTransitionPlaneOff.getIcon();
} else {
frontIcon = ExtraBlockTextures.BlockTransitionPlaneNormal.getIcon();
}
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture
);
GL11.glPushMatrix();
GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5);
ForgeDirection d = tile.getForward();
switch (d) {
case UP:
GL11.glScalef(1.0f, -1.0f, 1.0f);
GL11.glRotatef(90.0f, 1.0f, 0.0f, 0.0f);
GL11.glRotatef((tile.getUp().ordinal() - 2) * 90.0F, 0, 0, 1);
break;
case DOWN:
GL11.glScalef(1.0f, -1.0f, 1.0f);
GL11.glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);
GL11.glRotatef((tile.getUp().ordinal() - 2) * -90.0F, 0, 0, 1);
break;
case EAST:
GL11.glScalef(-1.0f, -1.0f, -1.0f);
GL11.glRotatef(-90.0f, 0.0f, 1.0f, 0.0f);
break;
case WEST:
GL11.glScalef(-1.0f, -1.0f, -1.0f);
GL11.glRotatef(90.0f, 0.0f, 1.0f, 0.0f);
break;
case NORTH:
GL11.glScalef(-1.0f, -1.0f, -1.0f);
break;
case SOUTH:
GL11.glScalef(-1.0f, -1.0f, -1.0f);
GL11.glRotatef(180.0f, 0.0f, 1.0f, 0.0f);
break;
default:
break;
}
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
switch (tile.renderMode) {
case INVALID:
GL11.glScaled(-0.75, -0.75, 1.0);
break;
case SINGLE:
GL11.glScaled(-0.9, -0.9, 1.0);
break;
default:
break;
}
tess.startDrawingQuads();
tess.addVertexWithUV(-0.5, 0.5, 0.51, frontIcon.getMinU(), frontIcon.getMaxV());
tess.addVertexWithUV(0.5, 0.5, 0.51, frontIcon.getMaxU(), frontIcon.getMaxV());
tess.addVertexWithUV(0.5, -0.5, 0.51, frontIcon.getMaxU(), frontIcon.getMinV());
tess.addVertexWithUV(-0.5, -0.5, 0.51, frontIcon.getMinU(), frontIcon.getMinV());
tess.draw();
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glPopMatrix();
}
}

View File

@ -133,7 +133,11 @@ public enum ExtraBlockTextures {
BlockStorageMonitorFrontMatrix("BlockStorageMonitorFront_Matrix"),
BlockAssemblerWallMerged("BlockAssemblerWallMerged"),
BlockAssemblerHeatVentMerged("BlockAssemblerHeatVentMerged");
BlockAssemblerHeatVentMerged("BlockAssemblerHeatVentMerged"),
BlockTransitionPlaneNoPower("BlockTransitionPlaneNoPower"),
BlockTransitionPlaneNormal("BlockTransitionPlaneNormal"),
BlockTransitionPlaneOff("BlockTransitionPlaneOff");
private final String name;
private IIcon IIcon;

View File

@ -0,0 +1,104 @@
package appeng.me.cluster.implementations;
import appeng.api.util.WorldCoord;
import appeng.me.cluster.IAECluster;
import appeng.me.cluster.MBCalculator;
import appeng.tile.legacy.TileTransitionPlane;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class TransitionPlaneCalculator extends MBCalculator {
public TileTransitionPlane ttp;
public TransitionPlaneCalculator(TileTransitionPlane ttp) {
super(ttp);
this.ttp = ttp;
}
@Override
public boolean checkMultiblockScale(WorldCoord min, WorldCoord max) {
return min.x == max.x || min.y == max.y || min.z == max.z;
}
@Override
public IAECluster createCluster(World w, WorldCoord min, WorldCoord max) {
return new TransitionPlaneCluster(min, max);
}
@Override
public boolean
verifyInternalStructure(World worldObj, WorldCoord min, WorldCoord max) {
for (int x = min.x; x < max.x; x++)
for (int y = min.y; y < max.y; y++)
for (int z = min.z; z < max.z; z++)
if (!this.isValidTile(worldObj.getTileEntity(x, y, z)))
return false;
return true;
}
@Override
public void disconnect() {
this.ttp.disconnect(true);
}
@Override
public void updateTiles(IAECluster c, World w, WorldCoord min, WorldCoord max) {
TransitionPlaneCluster tpc = (TransitionPlaneCluster) c;
for (int x = min.x; x <= max.x; x++) {
for (int y = min.y; y <= max.y; y++) {
for (int z = min.z; z <= max.z; z++) {
TileTransitionPlane ttp
= (TileTransitionPlane) w.getTileEntity(x, y, z);
ttp.updateStatus(tpc);
tpc.tiles.add(ttp);
}
}
}
}
@Override
public boolean isValidTile(TileEntity te) {
// Wrong tile
if (!(te instanceof TileTransitionPlane))
return false;
TileTransitionPlane ottp = (TileTransitionPlane) te;
if (this.ttp.getForward() == ForgeDirection.UNKNOWN
|| ottp.getForward() == ForgeDirection.UNKNOWN)
throw new IllegalStateException("alec");
// facing in the wrong direction
if (this.ttp.getForward() != ottp.getForward())
return false;
// not aligned in the Z-axis
boolean zaligned = false;
switch (this.ttp.getForward()) {
case DOWN:
case UP:
zaligned = this.ttp.yCoord == ottp.yCoord;
break;
case NORTH:
case SOUTH:
zaligned = this.ttp.zCoord == ottp.zCoord;
break;
case WEST:
case EAST:
zaligned = this.ttp.xCoord == ottp.xCoord;
break;
case UNKNOWN:
throw new IllegalStateException("alec");
}
if (!zaligned)
return false;
return true;
}
}

View File

@ -0,0 +1,45 @@
package appeng.me.cluster.implementations;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import appeng.api.networking.IGridHost;
import appeng.api.util.WorldCoord;
import appeng.me.cluster.IAECluster;
import appeng.tile.legacy.TileTransitionPlane;
public class TransitionPlaneCluster implements IAECluster {
public WorldCoord min;
public WorldCoord max;
public Set<TileTransitionPlane> tiles = new HashSet<>();
public boolean isDestroyed = false;
public TransitionPlaneCluster(WorldCoord min, WorldCoord max) {
this.min = min;
this.max = max;
}
@Override
public void updateStatus(boolean updateGrid) {}
@Override
public void destroy() {
if (this.isDestroyed)
return;
this.isDestroyed = true;
for (TileTransitionPlane pl : this.tiles) {
pl.updateStatus(null);
}
}
@SuppressWarnings("unchecked")
@Override
public Iterator<IGridHost> getTiles() {
return (Iterator<IGridHost>)(Object)this.tiles.iterator();
}
}

View File

@ -15,14 +15,22 @@ import appeng.api.networking.security.BaseActionSource;
import appeng.api.networking.security.MachineSource;
import appeng.api.networking.storage.IStorageGrid;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.util.WorldCoord;
import appeng.core.sync.packets.PacketTransitionEffect;
import appeng.me.GridAccessException;
import appeng.me.cluster.IAECluster;
import appeng.me.cluster.IAEMultiBlock;
import appeng.me.cluster.implementations.TransitionPlaneCalculator;
import appeng.me.cluster.implementations.TransitionPlaneCluster;
import appeng.me.helpers.AENetworkProxy;
import appeng.me.helpers.AENetworkProxyMultiblock;
import appeng.server.ServerHelper;
import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkTile;
import appeng.util.Platform;
import appeng.util.item.AEItemStack;
import io.netty.buffer.ByteBuf;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.init.Blocks;
@ -33,7 +41,7 @@ import net.minecraft.world.WorldServer;
import net.minecraftforge.common.util.FakePlayerFactory;
import net.minecraftforge.common.util.ForgeDirection;
public class TileTransitionPlane extends AENetworkTile {
public class TileTransitionPlane extends AENetworkTile implements IAEMultiBlock {
List<IAEItemStack> buffer = new ArrayList<>();
int delay = 0;
int trys = 0;
@ -41,14 +49,58 @@ public class TileTransitionPlane extends AENetworkTile {
static Set<Block> unbreakables = new HashSet<>();
private final BaseActionSource mySrc = new MachineSource(this);
public RenderMode renderMode = RenderMode.INVALID;
public TransitionPlaneCluster cluster;
public TransitionPlaneCalculator calc = new TransitionPlaneCalculator(this);
public TileTransitionPlane() {
// TODO: WTF
//super.hasPower = false;
this.getProxy().setValidSides(EnumSet.allOf(ForgeDirection.class));
this.getProxy().setFlags(GridFlags.REQUIRE_CHANNEL);
this.getProxy().setFlags(GridFlags.REQUIRE_CHANNEL, GridFlags.MULTIBLOCK);
this.getProxy().setIdlePowerUsage(1.0);
}
@Override
protected AENetworkProxy createProxy() {
return new AENetworkProxyMultiblock(
this, "proxy", this.getItemFromTile(this), true
);
}
@Override
public boolean requiresTESR() {
return true;
}
@Override
public void invalidate() {
this.disconnect(false);
super.invalidate();
}
@Override
public void onChunkUnload() {
this.disconnect(false);
super.onChunkUnload();
}
@Override
public void onReady() {
super.onReady();
this.calc.calculateMultiblock(this.worldObj, this.getLocation());
}
public void updateStatus(TransitionPlaneCluster c) {
this.cluster = c;
this.getProxy().setValidSides(
c == null ? EnumSet.noneOf(ForgeDirection.class)
: EnumSet.allOf(ForgeDirection.class)
);
this.markForUpdate();
}
// TODO: WTF
//public void setOrientationBySide(
// EntityPlayer player, int side, float hitX, float hitY, float hitZ
@ -317,16 +369,6 @@ public class TileTransitionPlane extends AENetworkTile {
// this.reqEat();
//}
// TODO: multiblock
//boolean linesUp(int x, int y, int z) {
// TileEntity te = this.worldObj.getTileEntity(x, y, z);
// if (te instanceof TileTransitionPlane) {
// return ((TileTransitionPlane) te).getForward() == this.getForward();
// } else {
// return false;
// }
//}
// TODO: WTF
//public void placedBy(EntityLivingBase entityliving) {
// byte rotation = (byte
@ -364,9 +406,8 @@ public class TileTransitionPlane extends AENetworkTile {
// return this.getForward() == side ? frontFace : this.defTextures(side);
//}
@Override
public void writeToNBT(NBTTagCompound par1nbtTagCompound) {
super.writeToNBT(par1nbtTagCompound);
@TileEvent(TileEventType.WORLD_NBT_WRITE)
public void worldNbtWriteTileTransitionPlane(NBTTagCompound nbt) {
NBTTagList items = new NBTTagList();
for (int x = 0; x < this.buffer.size(); ++x) {
@ -375,374 +416,54 @@ public class TileTransitionPlane extends AENetworkTile {
items.appendTag(item);
}
par1nbtTagCompound.setTag("items", items);
nbt.setTag("items", items);
}
@Override
public void readFromNBT(NBTTagCompound par1nbtTagCompound) {
super.readFromNBT(par1nbtTagCompound);
NBTTagList items = par1nbtTagCompound.getTagList("items", 10);
@TileEvent(TileEventType.WORLD_NBT_READ)
public void worldNbtReadTileTransitionPlane(NBTTagCompound nbt) {
NBTTagList items = nbt.getTagList("items", 10);
for (int x = 0; x < items.tagCount(); ++x) {
this.buffer.add(AEItemStack.loadItemStackFromNBT(items.getCompoundTagAt(x)));
}
}
// TODO: WTF
//@SideOnly(Side.CLIENT)
//public void renderTexturedPlate(
// float[] offset,
// float[] Left,
// float[] Up,
// float[] texOffset,
// float[] texDiff,
// Icon icon,
// int lightX,
// int lightY,
// int lightZ,
// boolean rev
//) {
// Tessellator tess = Tessellator.instance;
// float[] p1 = new float[5];
// float[] p2 = new float[5];
// float[] p3 = new float[5];
// float[] p4 = new float[5];
// p1[0] = offset[0];
// p1[1] = offset[1];
// p1[2] = offset[2];
// p1[3] = icon.getInterpolatedU((double) texOffset[0]);
// p1[4] = icon.getInterpolatedV((double) texOffset[1]);
// p2[0] = offset[0] + Left[0];
// p2[1] = offset[1] + Left[1];
// p2[2] = offset[2] + Left[2];
// p2[3] = icon.getInterpolatedU((double) (texOffset[0] + texDiff[0]));
// p2[4] = icon.getInterpolatedV((double) texOffset[1]);
// p3[0] = offset[0] + Left[0] + Up[0];
// p3[1] = offset[1] + Left[1] + Up[1];
// p3[2] = offset[2] + Left[2] + Up[2];
// p3[3] = icon.getInterpolatedU((double) (texOffset[0] + texDiff[0]));
// p3[4] = icon.getInterpolatedV((double) (texOffset[1] + texDiff[1]));
// p4[0] = offset[0] + Up[0];
// p4[1] = offset[1] + Up[1];
// p4[2] = offset[2] + Up[2];
// p4[3] = icon.getInterpolatedU((double) texOffset[0]);
// p4[4] = icon.getInterpolatedV((double) (texOffset[1] + texDiff[1]));
// tess.setBrightness(
// this.getBlockType().getMixedBrightnessForBlock(this.worldObj, lightX,
// lightY, lightZ)
// );
// if (rev) {
// tess.addVertexWithUV(
// (double) p4[0],
// (double) p4[1],
// (double) p4[2],
// (double) p4[3],
// (double) p4[4]
// );
// tess.addVertexWithUV(
// (double) p3[0],
// (double) p3[1],
// (double) p3[2],
// (double) p3[3],
// (double) p3[4]
// );
// tess.addVertexWithUV(
// (double) p2[0],
// (double) p2[1],
// (double) p2[2],
// (double) p2[3],
// (double) p2[4]
// );
// tess.addVertexWithUV(
// (double) p1[0],
// (double) p1[1],
// (double) p1[2],
// (double) p1[3],
// (double) p1[4]
// );
// } else {
// tess.addVertexWithUV(
// (double) p1[0],
// (double) p1[1],
// (double) p1[2],
// (double) p1[3],
// (double) p1[4]
// );
// tess.addVertexWithUV(
// (double) p2[0],
// (double) p2[1],
// (double) p2[2],
// (double) p2[3],
// (double) p2[4]
// );
// tess.addVertexWithUV(
// (double) p3[0],
// (double) p3[1],
// (double) p3[2],
// (double) p3[3],
// (double) p3[4]
// );
// tess.addVertexWithUV(
// (double) p4[0],
// (double) p4[1],
// (double) p4[2],
// (double) p4[3],
// (double) p4[4]
// );
// }
//}
@TileEvent(TileEventType.NETWORK_WRITE)
public void writeToStreamTileTransitionPlane(ByteBuf buf) {
if (this.cluster == null) {
buf.writeByte(RenderMode.INVALID.ordinal());
} else if (this.cluster.tiles.size() == 1) {
buf.writeByte(RenderMode.SINGLE.ordinal());
} else {
buf.writeByte(RenderMode.MULTI.ordinal());
}
}
// TODO: WTF
//public float[] p(float a, float b, float c) {
// float[] t = new float[] { a, b, c };
// return t;
//}
@TileEvent(TileEventType.NETWORK_READ)
public void readFromStreamTileTransitionPlane(ByteBuf buf) {
this.renderMode = RenderMode.values()[buf.readByte()];
//public float[] t(float a, float b) {
// float[] t = new float[] { a, b };
// return t;
//}
this.worldObj.markBlockRangeForRenderUpdate(
this.xCoord, this.yCoord, this.zCoord, this.xCoord, this.yCoord, this.zCoord
);
}
// TODO: WTF
//@SideOnly(Side.CLIENT)
//public boolean renderWorldBlock(
// IBlockAccess world,
// int x,
// int y,
// int z,
// Block block,
// int modelId,
// RenderBlocks renderer
//) {
// renderer.setRenderBounds(
// this.getForward() == ForgeDirection.WEST ? 9.999999747378752E-5 : 0.0,
// this.getForward() == ForgeDirection.DOWN ? 9.999999747378752E-5 : 0.0,
// this.getForward() == ForgeDirection.NORTH ? 9.999999747378752E-5 : 0.0,
// this.getForward() == ForgeDirection.EAST ? 0.9998999834060669 : 1.0,
// this.getForward() == ForgeDirection.UP ? 0.9998999834060669 : 1.0,
// this.getForward() == ForgeDirection.SOUTH ? 0.9998999834060669 : 1.0
// );
// renderer.uvRotateTop = 0;
// renderer.uvRotateBottom = 3;
// renderer.uvRotateEast = 1;
// renderer.uvRotateNorth = 2;
// renderer.uvRotateSouth = 1;
// renderer.uvRotateWest = 2;
// renderer.renderStandardBlock(block, x, y, z);
// renderer.uvRotateBottom = renderer.uvRotateEast = renderer.uvRotateNorth
// = renderer.uvRotateSouth = renderer.uvRotateTop = renderer.uvRotateWest
// = 0;
// renderer.setRenderBounds(0.0, 0.0, 0.0, 1.0, 1.0, 1.0);
// IIcon icon = AppEngTextureRegistry.Blocks.BlockFrame.get();
// float offsetPerPixel = 0.0625F;
// boolean rev;
// float zX;
// if (this.getForward() == ForgeDirection.NORTH
// || this.getForward() == ForgeDirection.SOUTH) {
// rev = this.getForward() == ForgeDirection.NORTH;
// zX = 1.0F;
// if (rev) {
// zX = 0.0F;
// }
@Override
public void disconnect(boolean b) {
if (this.cluster != null)
this.cluster.destroy();
this.updateStatus(null);
}
// if (!this.linesUp(x - 1, y, z)) {
// this.renderTexturedPlate(
// this.p((float) x, (float) y, (float) z + zX),
// this.p(offsetPerPixel, 0.0F, 0.0F),
// this.p(0.0F, 1.0F, 0.0F),
// this.t(0.0F, 0.0F),
// this.t(1.0F, 16.0F),
// icon,
// x,
// y,
// z + (rev ? -1 : 1),
// rev
// );
// }
@Override
public IAECluster getCluster() {
return this.cluster;
}
// if (!this.linesUp(x + 1, y, z)) {
// this.renderTexturedPlate(
// this.p((float) x + 15.0F * offsetPerPixel, (float) y, (float) z +
// zX), this.p(offsetPerPixel, 0.0F, 0.0F), this.p(0.0F, 1.0F, 0.0F),
// this.t(15.0F, 0.0F),
// this.t(1.0F, 16.0F),
// icon,
// x,
// y,
// z + (rev ? -1 : 1),
// rev
// );
// }
// if (!this.linesUp(x, y - 1, z)) {
// this.renderTexturedPlate(
// this.p((float) x, (float) y, (float) z + zX),
// this.p(1.0F, 0.0F, 0.0F),
// this.p(0.0F, offsetPerPixel, 0.0F),
// this.t(0.0F, 0.0F),
// this.t(16.0F, 1.0F),
// icon,
// x,
// y,
// z + (rev ? -1 : 1),
// rev
// );
// }
// if (!this.linesUp(x, y + 1, z)) {
// this.renderTexturedPlate(
// this.p((float) x, (float) y + 15.0F * offsetPerPixel, (float) z +
// zX), this.p(1.0F, 0.0F, 0.0F), this.p(0.0F, offsetPerPixel, 0.0F),
// this.t(0.0F, 15.0F),
// this.t(16.0F, 1.0F),
// icon,
// x,
// y,
// z + (rev ? -1 : 1),
// rev
// );
// }
// }
// if (this.getForward() == ForgeDirection.EAST
// || this.getForward() == ForgeDirection.WEST) {
// rev = this.getForward() == ForgeDirection.EAST;
// zX = 0.0F;
// if (rev) {
// zX = 1.0F;
// }
// if (!this.linesUp(x, y, z - 1)) {
// this.renderTexturedPlate(
// this.p((float) x + zX, (float) y, (float) z),
// this.p(0.0F, 0.0F, offsetPerPixel),
// this.p(0.0F, 1.0F, 0.0F),
// this.t(0.0F, 0.0F),
// this.t(1.0F, 16.0F),
// icon,
// x + (rev ? 1 : -1),
// y,
// z,
// rev
// );
// }
// if (!this.linesUp(x, y, z + 1)) {
// this.renderTexturedPlate(
// this.p((float) x + zX, (float) y, (float) z + 15.0F *
// offsetPerPixel), this.p(0.0F, 0.0F, offsetPerPixel),
// this.p(0.0F, 1.0F, 0.0F),
// this.t(15.0F, 0.0F),
// this.t(1.0F, 16.0F),
// icon,
// x + (rev ? 1 : -1),
// y,
// z,
// rev
// );
// }
// if (!this.linesUp(x, y - 1, z)) {
// this.renderTexturedPlate(
// this.p((float) x + zX, (float) y, (float) z),
// this.p(0.0F, 0.0F, 1.0F),
// this.p(0.0F, offsetPerPixel, 0.0F),
// this.t(0.0F, 0.0F),
// this.t(16.0F, 1.0F),
// icon,
// x + (rev ? 1 : -1),
// y,
// z,
// rev
// );
// }
// if (!this.linesUp(x, y + 1, z)) {
// this.renderTexturedPlate(
// this.p((float) x + zX, (float) y + 15.0F * offsetPerPixel, (float)
// z), this.p(0.0F, 0.0F, 1.0F), this.p(0.0F, offsetPerPixel, 0.0F),
// this.t(0.0F, 15.0F),
// this.t(16.0F, 1.0F),
// icon,
// x + (rev ? 1 : -1),
// y,
// z,
// rev
// );
// }
// }
// if (this.getForward() == ForgeDirection.UP
// || this.getForward() == ForgeDirection.DOWN) {
// rev = this.getForward() == ForgeDirection.UP;
// zX = 1.0F;
// if (!rev) {
// zX = 0.0F;
// }
// if (!this.linesUp(x - 1, y, z)) {
// this.renderTexturedPlate(
// this.p((float) x, (float) y + zX, (float) z),
// this.p(offsetPerPixel, 0.0F, 0.0F),
// this.p(0.0F, 0.0F, 1.0F),
// this.t(0.0F, 0.0F),
// this.t(1.0F, 16.0F),
// icon,
// x,
// y + (rev ? 1 : -1),
// z,
// rev
// );
// }
// if (!this.linesUp(x + 1, y, z)) {
// this.renderTexturedPlate(
// this.p((float) x + 15.0F * offsetPerPixel, (float) y + zX, (float)
// z), this.p(offsetPerPixel, 0.0F, 0.0F), this.p(0.0F, 0.0F, 1.0F),
// this.t(15.0F, 0.0F),
// this.t(1.0F, 16.0F),
// icon,
// x,
// y + (rev ? 1 : -1),
// z,
// rev
// );
// }
// if (!this.linesUp(x, y, z - 1)) {
// this.renderTexturedPlate(
// this.p((float) x, (float) y + zX, (float) z),
// this.p(1.0F, 0.0F, 0.0F),
// this.p(0.0F, 0.0F, offsetPerPixel),
// this.t(0.0F, 0.0F),
// this.t(16.0F, 1.0F),
// icon,
// x,
// y + (rev ? 1 : -1),
// z,
// rev
// );
// }
// if (!this.linesUp(x, y, z + 1)) {
// this.renderTexturedPlate(
// this.p((float) x, (float) y + zX, (float) z + 15.0F *
// offsetPerPixel), this.p(1.0F, 0.0F, 0.0F), this.p(0.0F, 0.0F,
// offsetPerPixel), this.t(0.0F, 15.0F), this.t(16.0F, 1.0F), icon, x,
// y + (rev ? 1 : -1),
// z,
// rev
// );
// }
// }
// return true;
//}
// TODO: WTF
//public boolean isBlockNormalCube() {
// return true;
//}
@Override
public boolean isValid() {
return this.cluster != null;
}
//public boolean handleTilePacket(DataInputStream stream) throws IOException {
// ForgeDirection oldOrientation = this.getForward();
@ -824,4 +545,10 @@ public class TileTransitionPlane extends AENetworkTile {
// new GridTileConnectivityEvent(this, this.getWorld(), this.getLocation())
// );
//}
public static enum RenderMode {
INVALID,
SINGLE,
MULTI;
}
}