Program: 98253
Project: 98253
Buggy source:
@EventHandler(priority=EventPriority.MONITOR) public void playerMove(PlayerMoveEvent event){
  Player player=event.getPlayer();
  AutoRefMatch match=plugin.getMatch(player.getWorld());
  if (match == null)   return;
  int blockUnder=match.getWorld().getBlockTypeIdAt(event.getTo().add(0.0,-0.1,0.0));
  boolean onGround=(blockUnder != Material.AIR.getId());
  AutoRefPlayer apl=match.getPlayer(player);
  if (apl == null) {
    if (!match.isSpectator(player) && !match.inStartRegion(event.getTo()) && onGround) {
      player.teleport(match.getWorldSpawn());
      player.setFallDistance(0.0f);
    }
    return;
  }
  AutoRefTeam team=apl.getTeam();
  if (team == null)   return;
  double fallspeed=event.getFrom().getY() - event.getTo().getY();
  Location exit=apl.getExitLocation();
  if (player.getGameMode() != GameMode.SURVIVAL || match.inStartRegion(event.getTo()))   return;
  if (!match.inStartRegion(event.getTo())) {
    if (match.getCurrentState().inProgress()) {
      if (match.inStartRegion(event.getFrom()) && !apl.isActive())       apl.reset();
      apl.setActive();
    }
 else     if (match.getCurrentState().isBeforeMatch()) {
      if (onGround)       apl.die(null,false);
      return;
    }
  }
  if (!team.canEnter(event.getTo(),0.3)) {
    if (player.isSneaking() && team.canEnter(event.getTo()) && fallspeed < FREEFALL_THRESHOLD)     ;
 else     if (exit == null)     apl.setExitLocation(player.getLocation());
 else     if (exit != null && fallspeed < FREEFALL_THRESHOLD && onGround)     apl.die(AutoRefPlayer.VOID_DEATH,true);
  }
 else {
    if (exit != null) {
      if (player.getLocation().distance(exit) > SAFE_TRAVEL_DISTANCE)       apl.die(AutoRefPlayer.VOID_DEATH,true);
      apl.setExitLocation(null);
    }
  }
}

Fixed version (ground truth):
@EventHandler(priority=EventPriority.MONITOR) public void playerMove(PlayerMoveEvent event){
  Player player=event.getPlayer();
  AutoRefMatch match=plugin.getMatch(player.getWorld());
  if (match == null)   return;
  Location locUnder=event.getTo().clone().add(0.0,-0.1,0.0);
  int blockUnder=match.getWorld().getBlockTypeIdAt(locUnder);
  boolean onGround=(blockUnder != Material.AIR.getId());
  AutoRefPlayer apl=match.getPlayer(player);
  if (apl == null) {
    if (!match.isSpectator(player) && !match.inStartRegion(event.getTo()) && onGround) {
      player.teleport(match.getWorldSpawn());
      player.setFallDistance(0.0f);
    }
    return;
  }
  AutoRefTeam team=apl.getTeam();
  if (team == null)   return;
  double fallspeed=event.getFrom().getY() - event.getTo().getY();
  Location exit=apl.getExitLocation();
  if (player.getGameMode() != GameMode.SURVIVAL || match.inStartRegion(event.getTo()))   return;
  if (!match.inStartRegion(event.getTo())) {
    if (match.getCurrentState().inProgress()) {
      if (match.inStartRegion(event.getFrom()) && !apl.isActive())       apl.reset();
      apl.setActive();
    }
 else     if (match.getCurrentState().isBeforeMatch()) {
      if (onGround)       apl.die(null,false);
      return;
    }
  }
  if (!team.canEnter(event.getTo(),0.3)) {
    if (player.isSneaking() && team.canEnter(event.getTo()) && fallspeed < FREEFALL_THRESHOLD)     ;
 else     if (exit == null)     apl.setExitLocation(player.getLocation());
 else     if (exit != null && fallspeed < FREEFALL_THRESHOLD && onGround)     apl.die(AutoRefPlayer.VOID_DEATH,true);
  }
 else {
    if (exit != null) {
      if (player.getLocation().distance(exit) > SAFE_TRAVEL_DISTANCE)       apl.die(AutoRefPlayer.VOID_DEATH,true);
      apl.setExitLocation(null);
    }
  }
}