All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.minecraft.server.BlockStairs Maven / Gradle / Ivy

package net.minecraft.server;

import com.google.common.base.Predicate;

import java.util.Arrays;
import java.util.List;
import java.util.Random;

public class BlockStairs extends Block {

  public static final BlockStateDirection FACING = BlockStateDirection.of("facing", EnumDirection.EnumDirectionLimit.HORIZONTAL);
  public static final BlockStateEnum HALF = BlockStateEnum.of("half", EnumHalf.class);
  public static final BlockStateEnum SHAPE = BlockStateEnum.of("shape", EnumStairShape.class);
  private static final int[][] O = new int[][]{{4, 5}, {5, 7}, {6, 7}, {4, 6}, {0, 1}, {1, 3}, {2, 3}, {0, 2}};
  private final Block P;
  private final IBlockData Q;
  private boolean R;
  private int S;

  protected BlockStairs(IBlockData iblockdata) {
    super(iblockdata.getBlock().material);
    this.j(this.blockStateList.getBlockData().set(BlockStairs.FACING, EnumDirection.NORTH).set(BlockStairs.HALF, EnumHalf.BOTTOM).set(BlockStairs.SHAPE, EnumStairShape.STRAIGHT));
    this.P = iblockdata.getBlock();
    this.Q = iblockdata;
    this.c(this.P.strength);
    this.b(this.P.durability / 3.0F);
    this.a(this.P.stepSound);
    this.e(255);
    this.a(CreativeModeTab.b);
  }

  public static boolean c(Block block) {
    return block instanceof BlockStairs;
  }

  public static boolean a(IBlockAccess iblockaccess, BlockPosition blockposition, IBlockData iblockdata) {
    IBlockData iblockdata1 = iblockaccess.getType(blockposition);
    Block block = iblockdata1.getBlock();

    return c(block) && iblockdata1.get(BlockStairs.HALF) == iblockdata.get(BlockStairs.HALF) && iblockdata1.get(BlockStairs.FACING) == iblockdata.get(BlockStairs.FACING);
  }

  public void updateShape(IBlockAccess iblockaccess, BlockPosition blockposition) {
    if (this.R) {
      this.a(0.5F * (float) (this.S % 2), 0.5F * (float) (this.S / 4 % 2), 0.5F * (float) (this.S / 2 % 2), 0.5F + 0.5F * (float) (this.S % 2), 0.5F + 0.5F * (float) (this.S / 4 % 2), 0.5F + 0.5F * (float) (this.S / 2 % 2));
    } else {
      this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
    }

  }

  public boolean c() {
    return false;
  }

  public boolean d() {
    return false;
  }

  public void e(IBlockAccess iblockaccess, BlockPosition blockposition) {
    if (iblockaccess.getType(blockposition).get(BlockStairs.HALF) == EnumHalf.TOP) {
      this.a(0.0F, 0.5F, 0.0F, 1.0F, 1.0F, 1.0F);
    } else {
      this.a(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F);
    }

  }

  public int f(IBlockAccess iblockaccess, BlockPosition blockposition) {
    IBlockData iblockdata = iblockaccess.getType(blockposition);
    EnumDirection enumdirection = iblockdata.get(BlockStairs.FACING);
    EnumHalf blockstairs_enumhalf = iblockdata.get(BlockStairs.HALF);
    boolean flag = blockstairs_enumhalf == EnumHalf.TOP;
    IBlockData iblockdata1;
    Block block;
    EnumDirection enumdirection1;

    if (enumdirection == EnumDirection.EAST) {
      iblockdata1 = iblockaccess.getType(blockposition.east());
      block = iblockdata1.getBlock();
      if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) {
        enumdirection1 = iblockdata1.get(BlockStairs.FACING);
        if (enumdirection1 == EnumDirection.NORTH && !a(iblockaccess, blockposition.south(), iblockdata)) {
          return flag ? 1 : 2;
        }

        if (enumdirection1 == EnumDirection.SOUTH && !a(iblockaccess, blockposition.north(), iblockdata)) {
          return flag ? 2 : 1;
        }
      }
    } else if (enumdirection == EnumDirection.WEST) {
      iblockdata1 = iblockaccess.getType(blockposition.west());
      block = iblockdata1.getBlock();
      if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) {
        enumdirection1 = iblockdata1.get(BlockStairs.FACING);
        if (enumdirection1 == EnumDirection.NORTH && !a(iblockaccess, blockposition.south(), iblockdata)) {
          return flag ? 2 : 1;
        }

        if (enumdirection1 == EnumDirection.SOUTH && !a(iblockaccess, blockposition.north(), iblockdata)) {
          return flag ? 1 : 2;
        }
      }
    } else if (enumdirection == EnumDirection.SOUTH) {
      iblockdata1 = iblockaccess.getType(blockposition.south());
      block = iblockdata1.getBlock();
      if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) {
        enumdirection1 = iblockdata1.get(BlockStairs.FACING);
        if (enumdirection1 == EnumDirection.WEST && !a(iblockaccess, blockposition.east(), iblockdata)) {
          return flag ? 2 : 1;
        }

        if (enumdirection1 == EnumDirection.EAST && !a(iblockaccess, blockposition.west(), iblockdata)) {
          return flag ? 1 : 2;
        }
      }
    } else if (enumdirection == EnumDirection.NORTH) {
      iblockdata1 = iblockaccess.getType(blockposition.north());
      block = iblockdata1.getBlock();
      if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) {
        enumdirection1 = iblockdata1.get(BlockStairs.FACING);
        if (enumdirection1 == EnumDirection.WEST && !a(iblockaccess, blockposition.east(), iblockdata)) {
          return flag ? 1 : 2;
        }

        if (enumdirection1 == EnumDirection.EAST && !a(iblockaccess, blockposition.west(), iblockdata)) {
          return flag ? 2 : 1;
        }
      }
    }

    return 0;
  }

  public int g(IBlockAccess iblockaccess, BlockPosition blockposition) {
    IBlockData iblockdata = iblockaccess.getType(blockposition);
    EnumDirection enumdirection = iblockdata.get(BlockStairs.FACING);
    EnumHalf blockstairs_enumhalf = iblockdata.get(BlockStairs.HALF);
    boolean flag = blockstairs_enumhalf == EnumHalf.TOP;
    IBlockData iblockdata1;
    Block block;
    EnumDirection enumdirection1;

    if (enumdirection == EnumDirection.EAST) {
      iblockdata1 = iblockaccess.getType(blockposition.west());
      block = iblockdata1.getBlock();
      if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) {
        enumdirection1 = iblockdata1.get(BlockStairs.FACING);
        if (enumdirection1 == EnumDirection.NORTH && !a(iblockaccess, blockposition.north(), iblockdata)) {
          return flag ? 1 : 2;
        }

        if (enumdirection1 == EnumDirection.SOUTH && !a(iblockaccess, blockposition.south(), iblockdata)) {
          return flag ? 2 : 1;
        }
      }
    } else if (enumdirection == EnumDirection.WEST) {
      iblockdata1 = iblockaccess.getType(blockposition.east());
      block = iblockdata1.getBlock();
      if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) {
        enumdirection1 = iblockdata1.get(BlockStairs.FACING);
        if (enumdirection1 == EnumDirection.NORTH && !a(iblockaccess, blockposition.north(), iblockdata)) {
          return flag ? 2 : 1;
        }

        if (enumdirection1 == EnumDirection.SOUTH && !a(iblockaccess, blockposition.south(), iblockdata)) {
          return flag ? 1 : 2;
        }
      }
    } else if (enumdirection == EnumDirection.SOUTH) {
      iblockdata1 = iblockaccess.getType(blockposition.north());
      block = iblockdata1.getBlock();
      if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) {
        enumdirection1 = iblockdata1.get(BlockStairs.FACING);
        if (enumdirection1 == EnumDirection.WEST && !a(iblockaccess, blockposition.west(), iblockdata)) {
          return flag ? 2 : 1;
        }

        if (enumdirection1 == EnumDirection.EAST && !a(iblockaccess, blockposition.east(), iblockdata)) {
          return flag ? 1 : 2;
        }
      }
    } else if (enumdirection == EnumDirection.NORTH) {
      iblockdata1 = iblockaccess.getType(blockposition.south());
      block = iblockdata1.getBlock();
      if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) {
        enumdirection1 = iblockdata1.get(BlockStairs.FACING);
        if (enumdirection1 == EnumDirection.WEST && !a(iblockaccess, blockposition.west(), iblockdata)) {
          return flag ? 1 : 2;
        }

        if (enumdirection1 == EnumDirection.EAST && !a(iblockaccess, blockposition.east(), iblockdata)) {
          return flag ? 2 : 1;
        }
      }
    }

    return 0;
  }

  public boolean h(IBlockAccess iblockaccess, BlockPosition blockposition) {
    IBlockData iblockdata = iblockaccess.getType(blockposition);
    EnumDirection enumdirection = iblockdata.get(BlockStairs.FACING);
    EnumHalf blockstairs_enumhalf = iblockdata.get(BlockStairs.HALF);
    boolean flag = blockstairs_enumhalf == EnumHalf.TOP;
    float f = 0.5F;
    float f1 = 1.0F;

    if (flag) {
      f = 0.0F;
      f1 = 0.5F;
    }

    float f2 = 0.0F;
    float f3 = 1.0F;
    float f4 = 0.0F;
    float f5 = 0.5F;
    boolean flag1 = true;
    IBlockData iblockdata1;
    Block block;
    EnumDirection enumdirection1;

    if (enumdirection == EnumDirection.EAST) {
      f2 = 0.5F;
      f5 = 1.0F;
      iblockdata1 = iblockaccess.getType(blockposition.east());
      block = iblockdata1.getBlock();
      if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) {
        enumdirection1 = iblockdata1.get(BlockStairs.FACING);
        if (enumdirection1 == EnumDirection.NORTH && !a(iblockaccess, blockposition.south(), iblockdata)) {
          f5 = 0.5F;
          flag1 = false;
        } else if (enumdirection1 == EnumDirection.SOUTH && !a(iblockaccess, blockposition.north(), iblockdata)) {
          f4 = 0.5F;
          flag1 = false;
        }
      }
    } else if (enumdirection == EnumDirection.WEST) {
      f3 = 0.5F;
      f5 = 1.0F;
      iblockdata1 = iblockaccess.getType(blockposition.west());
      block = iblockdata1.getBlock();
      if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) {
        enumdirection1 = iblockdata1.get(BlockStairs.FACING);
        if (enumdirection1 == EnumDirection.NORTH && !a(iblockaccess, blockposition.south(), iblockdata)) {
          f5 = 0.5F;
          flag1 = false;
        } else if (enumdirection1 == EnumDirection.SOUTH && !a(iblockaccess, blockposition.north(), iblockdata)) {
          f4 = 0.5F;
          flag1 = false;
        }
      }
    } else if (enumdirection == EnumDirection.SOUTH) {
      f4 = 0.5F;
      f5 = 1.0F;
      iblockdata1 = iblockaccess.getType(blockposition.south());
      block = iblockdata1.getBlock();
      if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) {
        enumdirection1 = iblockdata1.get(BlockStairs.FACING);
        if (enumdirection1 == EnumDirection.WEST && !a(iblockaccess, blockposition.east(), iblockdata)) {
          f3 = 0.5F;
          flag1 = false;
        } else if (enumdirection1 == EnumDirection.EAST && !a(iblockaccess, blockposition.west(), iblockdata)) {
          f2 = 0.5F;
          flag1 = false;
        }
      }
    } else if (enumdirection == EnumDirection.NORTH) {
      iblockdata1 = iblockaccess.getType(blockposition.north());
      block = iblockdata1.getBlock();
      if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) {
        enumdirection1 = iblockdata1.get(BlockStairs.FACING);
        if (enumdirection1 == EnumDirection.WEST && !a(iblockaccess, blockposition.east(), iblockdata)) {
          f3 = 0.5F;
          flag1 = false;
        } else if (enumdirection1 == EnumDirection.EAST && !a(iblockaccess, blockposition.west(), iblockdata)) {
          f2 = 0.5F;
          flag1 = false;
        }
      }
    }

    this.a(f2, f, f4, f3, f1, f5);
    return flag1;
  }

  public boolean i(IBlockAccess iblockaccess, BlockPosition blockposition) {
    IBlockData iblockdata = iblockaccess.getType(blockposition);
    EnumDirection enumdirection = iblockdata.get(BlockStairs.FACING);
    EnumHalf blockstairs_enumhalf = iblockdata.get(BlockStairs.HALF);
    boolean flag = blockstairs_enumhalf == EnumHalf.TOP;
    float f = 0.5F;
    float f1 = 1.0F;

    if (flag) {
      f = 0.0F;
      f1 = 0.5F;
    }

    float f2 = 0.0F;
    float f3 = 0.5F;
    float f4 = 0.5F;
    float f5 = 1.0F;
    boolean flag1 = false;
    IBlockData iblockdata1;
    Block block;
    EnumDirection enumdirection1;

    if (enumdirection == EnumDirection.EAST) {
      iblockdata1 = iblockaccess.getType(blockposition.west());
      block = iblockdata1.getBlock();
      if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) {
        enumdirection1 = iblockdata1.get(BlockStairs.FACING);
        if (enumdirection1 == EnumDirection.NORTH && !a(iblockaccess, blockposition.north(), iblockdata)) {
          f4 = 0.0F;
          f5 = 0.5F;
          flag1 = true;
        } else if (enumdirection1 == EnumDirection.SOUTH && !a(iblockaccess, blockposition.south(), iblockdata)) {
          f4 = 0.5F;
          f5 = 1.0F;
          flag1 = true;
        }
      }
    } else if (enumdirection == EnumDirection.WEST) {
      iblockdata1 = iblockaccess.getType(blockposition.east());
      block = iblockdata1.getBlock();
      if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) {
        f2 = 0.5F;
        f3 = 1.0F;
        enumdirection1 = iblockdata1.get(BlockStairs.FACING);
        if (enumdirection1 == EnumDirection.NORTH && !a(iblockaccess, blockposition.north(), iblockdata)) {
          f4 = 0.0F;
          f5 = 0.5F;
          flag1 = true;
        } else if (enumdirection1 == EnumDirection.SOUTH && !a(iblockaccess, blockposition.south(), iblockdata)) {
          f4 = 0.5F;
          f5 = 1.0F;
          flag1 = true;
        }
      }
    } else if (enumdirection == EnumDirection.SOUTH) {
      iblockdata1 = iblockaccess.getType(blockposition.north());
      block = iblockdata1.getBlock();
      if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) {
        f4 = 0.0F;
        f5 = 0.5F;
        enumdirection1 = iblockdata1.get(BlockStairs.FACING);
        if (enumdirection1 == EnumDirection.WEST && !a(iblockaccess, blockposition.west(), iblockdata)) {
          flag1 = true;
        } else if (enumdirection1 == EnumDirection.EAST && !a(iblockaccess, blockposition.east(), iblockdata)) {
          f2 = 0.5F;
          f3 = 1.0F;
          flag1 = true;
        }
      }
    } else if (enumdirection == EnumDirection.NORTH) {
      iblockdata1 = iblockaccess.getType(blockposition.south());
      block = iblockdata1.getBlock();
      if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) {
        enumdirection1 = iblockdata1.get(BlockStairs.FACING);
        if (enumdirection1 == EnumDirection.WEST && !a(iblockaccess, blockposition.west(), iblockdata)) {
          flag1 = true;
        } else if (enumdirection1 == EnumDirection.EAST && !a(iblockaccess, blockposition.east(), iblockdata)) {
          f2 = 0.5F;
          f3 = 1.0F;
          flag1 = true;
        }
      }
    }

    if (flag1) {
      this.a(f2, f, f4, f3, f1, f5);
    }

    return flag1;
  }

  public void a(World world, BlockPosition blockposition, IBlockData iblockdata, AxisAlignedBB axisalignedbb, List list, Entity entity) {
    this.e(world, blockposition);
    super.a(world, blockposition, iblockdata, axisalignedbb, list, entity);
    boolean flag = this.h(world, blockposition);

    super.a(world, blockposition, iblockdata, axisalignedbb, list, entity);
    if (flag && this.i(world, blockposition)) {
      super.a(world, blockposition, iblockdata, axisalignedbb, list, entity);
    }

    this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
  }

  public void attack(World world, BlockPosition blockposition, EntityHuman entityhuman) {
    this.P.attack(world, blockposition, entityhuman);
  }

  public void postBreak(World world, BlockPosition blockposition, IBlockData iblockdata) {
    this.P.postBreak(world, blockposition, iblockdata);
  }

  public float a(Entity entity) {
    return this.P.a(entity);
  }

  public int a(World world) {
    return this.P.a(world);
  }

  public Vec3D a(World world, BlockPosition blockposition, Entity entity, Vec3D vec3d) {
    return this.P.a(world, blockposition, entity, vec3d);
  }

  public boolean A() {
    return this.P.A();
  }

  public boolean a(IBlockData iblockdata, boolean flag) {
    return this.P.a(iblockdata, flag);
  }

  public boolean canPlace(World world, BlockPosition blockposition) {
    return this.P.canPlace(world, blockposition);
  }

  public void onPlace(World world, BlockPosition blockposition, IBlockData iblockdata) {
    this.doPhysics(world, blockposition, this.Q, Blocks.AIR);
    this.P.onPlace(world, blockposition, this.Q);
  }

  public void remove(World world, BlockPosition blockposition, IBlockData iblockdata) {
    this.P.remove(world, blockposition, this.Q);
  }

  public void a(World world, BlockPosition blockposition, Entity entity) {
    this.P.a(world, blockposition, entity);
  }

  public void b(World world, BlockPosition blockposition, IBlockData iblockdata, Random random) {
    this.P.b(world, blockposition, iblockdata, random);
  }

  public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumDirection enumdirection, float f, float f1, float f2) {
    return this.P.interact(world, blockposition, this.Q, entityhuman, EnumDirection.DOWN, 0.0F, 0.0F, 0.0F);
  }

  public void wasExploded(World world, BlockPosition blockposition, Explosion explosion) {
    this.P.wasExploded(world, blockposition, explosion);
  }

  public MaterialMapColor g(IBlockData iblockdata) {
    return this.P.g(this.Q);
  }

  public IBlockData getPlacedState(World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2, int i, EntityLiving entityliving) {
    IBlockData iblockdata = super.getPlacedState(world, blockposition, enumdirection, f, f1, f2, i, entityliving);

    iblockdata = iblockdata.set(BlockStairs.FACING, entityliving.getDirection()).set(BlockStairs.SHAPE, EnumStairShape.STRAIGHT);
    return enumdirection != EnumDirection.DOWN && (enumdirection == EnumDirection.UP || (double) f1 <= 0.5D) ? iblockdata.set(BlockStairs.HALF, EnumHalf.BOTTOM) : iblockdata.set(BlockStairs.HALF, EnumHalf.TOP);
  }

  public MovingObjectPosition a(World world, BlockPosition blockposition, Vec3D vec3d, Vec3D vec3d1) {
    MovingObjectPosition[] amovingobjectposition = new MovingObjectPosition[8];
    IBlockData iblockdata = world.getType(blockposition);
    int i = iblockdata.get(BlockStairs.FACING).b();
    boolean flag = iblockdata.get(BlockStairs.HALF) == EnumHalf.TOP;
    int[] aint = BlockStairs.O[i + (flag ? 4 : 0)];

    this.R = true;

    for (int j = 0; j < 8; ++j) {
      this.S = j;
      if (Arrays.binarySearch(aint, j) < 0) {
        amovingobjectposition[j] = super.a(world, blockposition, vec3d, vec3d1);
      }
    }

    int[] aint1 = aint;
    int k = aint.length;

    for (int l = 0; l < k; ++l) {
      int i1 = aint1[l];

      amovingobjectposition[i1] = null;
    }

    MovingObjectPosition movingobjectposition = null;
    double d0 = 0.0D;
    MovingObjectPosition[] amovingobjectposition1 = amovingobjectposition;
    int j1 = amovingobjectposition.length;

    for (int k1 = 0; k1 < j1; ++k1) {
      MovingObjectPosition movingobjectposition1 = amovingobjectposition1[k1];

      if (movingobjectposition1 != null) {
        double d1 = movingobjectposition1.pos.distanceSquared(vec3d1);

        if (d1 > d0) {
          movingobjectposition = movingobjectposition1;
          d0 = d1;
        }
      }
    }

    return movingobjectposition;
  }

  public IBlockData fromLegacyData(int i) {
    IBlockData iblockdata = this.getBlockData().set(BlockStairs.HALF, (i & 4) > 0 ? EnumHalf.TOP : EnumHalf.BOTTOM);

    iblockdata = iblockdata.set(BlockStairs.FACING, EnumDirection.fromType1(5 - (i & 3)));
    return iblockdata;
  }

  public int toLegacyData(IBlockData iblockdata) {
    int i = 0;

    if (iblockdata.get(BlockStairs.HALF) == EnumHalf.TOP) {
      i |= 4;
    }

    i |= 5 - iblockdata.get(BlockStairs.FACING).a();
    return i;
  }

  public IBlockData updateState(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition) {
    if (this.h(iblockaccess, blockposition)) {
      switch (this.g(iblockaccess, blockposition)) {
        case 0:
          iblockdata = iblockdata.set(BlockStairs.SHAPE, EnumStairShape.STRAIGHT);
          break;

        case 1:
          iblockdata = iblockdata.set(BlockStairs.SHAPE, EnumStairShape.INNER_RIGHT);
          break;

        case 2:
          iblockdata = iblockdata.set(BlockStairs.SHAPE, EnumStairShape.INNER_LEFT);
      }
    } else {
      switch (this.f(iblockaccess, blockposition)) {
        case 0:
          iblockdata = iblockdata.set(BlockStairs.SHAPE, EnumStairShape.STRAIGHT);
          break;

        case 1:
          iblockdata = iblockdata.set(BlockStairs.SHAPE, EnumStairShape.OUTER_RIGHT);
          break;

        case 2:
          iblockdata = iblockdata.set(BlockStairs.SHAPE, EnumStairShape.OUTER_LEFT);
      }
    }

    return iblockdata;
  }

  protected BlockStateList getStateList() {
    return new BlockStateList(this, BlockStairs.FACING, BlockStairs.HALF, BlockStairs.SHAPE);
  }

  public enum EnumStairShape implements INamable {

    STRAIGHT("straight"), INNER_LEFT("inner_left"), INNER_RIGHT("inner_right"), OUTER_LEFT("outer_left"), OUTER_RIGHT("outer_right");

    private final String f;

    EnumStairShape(String s) {
      this.f = s;
    }

    public String toString() {
      return this.f;
    }

    public String getName() {
      return this.f;
    }
  }

  public enum EnumHalf implements INamable {

    TOP("top"), BOTTOM("bottom");

    private final String c;

    EnumHalf(String s) {
      this.c = s;
    }

    public String toString() {
      return this.c;
    }

    public String getName() {
      return this.c;
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy