Files
Rekkit/src/main/java/net/minecraft/server/TileEntityPiston.java
2013-11-30 19:26:12 -06:00

133 lines
3.6 KiB
Java

package net.minecraft.server;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class TileEntityPiston extends TileEntity {
private Block a;
private int i;
private int j;
private boolean k;
private boolean l;
private float m;
private float n;
private List o = new ArrayList();
public TileEntityPiston() {}
public TileEntityPiston(Block block, int i, int j, boolean flag, boolean flag1) {
this.a = block;
this.i = i;
this.j = j;
this.k = flag;
this.l = flag1;
}
public Block a() {
return this.a;
}
public int p() {
return this.i;
}
public boolean b() {
return this.k;
}
public int c() {
return this.j;
}
public float a(float f) {
if (f > 1.0F) {
f = 1.0F;
}
return this.n + (this.m - this.n) * f;
}
private void a(float f, float f1) {
if (this.k) {
f = 1.0F - f;
} else {
--f;
}
AxisAlignedBB axisalignedbb = Blocks.PISTON_MOVING.a(this.world, this.x, this.y, this.z, this.a, f, this.j);
if (axisalignedbb != null) {
List list = this.world.getEntities((Entity) null, axisalignedbb);
if (!list.isEmpty()) {
this.o.addAll(list);
Iterator iterator = this.o.iterator();
while (iterator.hasNext()) {
Entity entity = (Entity) iterator.next();
entity.move((double) (f1 * (float) Facing.b[this.j]), (double) (f1 * (float) Facing.c[this.j]), (double) (f1 * (float) Facing.d[this.j]));
}
this.o.clear();
}
}
}
public void f() {
if (this.n < 1.0F && this.world != null) {
this.n = this.m = 1.0F;
this.world.p(this.x, this.y, this.z);
this.s();
if (this.world.getType(this.x, this.y, this.z) == Blocks.PISTON_MOVING) {
this.world.setTypeAndData(this.x, this.y, this.z, this.a, this.i, 3);
this.world.e(this.x, this.y, this.z, this.a);
}
}
}
public void h() {
if (this.world == null) return; // CraftBukkit
this.n = this.m;
if (this.n >= 1.0F) {
this.a(1.0F, 0.25F);
this.world.p(this.x, this.y, this.z);
this.s();
if (this.world.getType(this.x, this.y, this.z) == Blocks.PISTON_MOVING) {
this.world.setTypeAndData(this.x, this.y, this.z, this.a, this.i, 3);
this.world.e(this.x, this.y, this.z, this.a);
}
} else {
this.m += 0.5F;
if (this.m >= 1.0F) {
this.m = 1.0F;
}
if (this.k) {
this.a(this.m, this.m - this.n + 0.0625F);
}
}
}
public void a(NBTTagCompound nbttagcompound) {
super.a(nbttagcompound);
this.a = Block.e(nbttagcompound.getInt("blockId"));
this.i = nbttagcompound.getInt("blockData");
this.j = nbttagcompound.getInt("facing");
this.n = this.m = nbttagcompound.getFloat("progress");
this.k = nbttagcompound.getBoolean("extending");
}
public void b(NBTTagCompound nbttagcompound) {
super.b(nbttagcompound);
nbttagcompound.setInt("blockId", Block.b(this.a));
nbttagcompound.setInt("blockData", this.i);
nbttagcompound.setInt("facing", this.j);
nbttagcompound.setFloat("progress", this.n);
nbttagcompound.setBoolean("extending", this.k);
}
}