package net.minecraft.server;
import javax.annotation.Nullable;
public class TileEntityCommand extends TileEntity {
private boolean a;
private boolean f;
private boolean g;
private boolean h;
private final CommandBlockListenerAbstract i = new CommandBlockListenerAbstract() {
{
sender = new org.bukkit.craftbukkit.command.CraftBlockCommandSender(this); // CraftBukkit - add sender
}
public BlockPosition getChunkCoordinates() {
return TileEntityCommand.this.position;
}
public Vec3D d() {
return new Vec3D((double) TileEntityCommand.this.position.getX() + 0.5D, (double) TileEntityCommand.this.position.getY() + 0.5D, (double) TileEntityCommand.this.position.getZ() + 0.5D);
}
public World getWorld() {
return TileEntityCommand.this.getWorld();
}
public void setCommand(String s) {
super.setCommand(s);
TileEntityCommand.this.update();
}
public void i() {
IBlockData iblockdata = TileEntityCommand.this.world.getType(TileEntityCommand.this.position);
TileEntityCommand.this.getWorld().notify(TileEntityCommand.this.position, iblockdata, iblockdata, 3);
}
public Entity f() {
return null;
}
public MinecraftServer B_() {
return TileEntityCommand.this.world.getMinecraftServer();
}
};
public TileEntityCommand() {}
public NBTTagCompound save(NBTTagCompound nbttagcompound) {
super.save(nbttagcompound);
this.i.a(nbttagcompound);
nbttagcompound.setBoolean("powered", this.f());
nbttagcompound.setBoolean("conditionMet", this.i());
nbttagcompound.setBoolean("auto", this.h());
return nbttagcompound;
}
public void a(NBTTagCompound nbttagcompound) {
super.a(nbttagcompound);
this.i.b(nbttagcompound);
this.a(nbttagcompound.getBoolean("powered"));
this.c(nbttagcompound.getBoolean("conditionMet"));
this.b(nbttagcompound.getBoolean("auto"));
}
@Nullable
public PacketPlayOutTileEntityData getUpdatePacket() {
if (this.j()) {
this.d(false);
NBTTagCompound nbttagcompound = this.save(new NBTTagCompound());
return new PacketPlayOutTileEntityData(this.position, 2, nbttagcompound);
} else {
return null;
}
}
public boolean isFilteredNBT() {
return true;
}
public CommandBlockListenerAbstract getCommandBlock() {
return this.i;
}
public CommandObjectiveExecutor e() {
return this.i.o();
}
public void a(boolean flag) {
this.a = flag;
}
public boolean f() {
return this.a;
}
public boolean h() {
return this.f;
}
public void b(boolean flag) {
boolean flag1 = this.f;
this.f = flag;
if (!flag1 && flag && !this.a && this.world != null && this.k() != TileEntityCommand.Type.SEQUENCE) {
Block block = this.getBlock();
if (block instanceof BlockCommand) {
BlockPosition blockposition = this.getPosition();
BlockCommand blockcommand = (BlockCommand) block;
this.g = !this.l() || blockcommand.e(this.world, blockposition, this.world.getType(blockposition));
this.world.a(blockposition, block, block.a(this.world));
if (this.g) {
blockcommand.c(this.world, blockposition);
}
}
}
}
public boolean i() {
return this.g;
}
public void c(boolean flag) {
this.g = flag;
}
public boolean j() {
return this.h;
}
public void d(boolean flag) {
this.h = flag;
}
public TileEntityCommand.Type k() {
Block block = this.getBlock();
return block == Blocks.COMMAND_BLOCK ? TileEntityCommand.Type.REDSTONE : (block == Blocks.dc ? TileEntityCommand.Type.AUTO : (block == Blocks.dd ? TileEntityCommand.Type.SEQUENCE : TileEntityCommand.Type.REDSTONE));
}
public boolean l() {
IBlockData iblockdata = this.world.getType(this.getPosition());
return iblockdata.getBlock() instanceof BlockCommand ? ((Boolean) iblockdata.get(BlockCommand.b)).booleanValue() : false;
}
public void A() {
this.e = null;
super.A();
}
public static enum Type {
SEQUENCE, AUTO, REDSTONE;
private Type() {}
}
}